From a6ce85eb7a8c881ff517a1c6fff929bd842fd74e Mon Sep 17 00:00:00 2001 From: kaeroku Date: Thu, 14 May 2020 04:04:55 -0400 Subject: [PATCH 001/206] Update flags.json POWERED flag description not intuitive. Clarified text. --- data/json/flags.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/flags.json b/data/json/flags.json index 1dfdc18373d07..621d0c1c0a54d 100644 --- a/data/json/flags.json +++ b/data/json/flags.json @@ -342,7 +342,7 @@ "id": "POWERED", "type": "json_flag", "context": [ "TOOL" ], - "//": "If turned ON, it uses its own source of power, instead of relying on power of the user." + "//": "Objects with this flag do not drain player's stamina when used." }, { "id": "PSYSHIELD_PARTIAL", From e2171c60e64898f0258cf849673268e5ebd5c4fc Mon Sep 17 00:00:00 2001 From: kaeroku Date: Thu, 14 May 2020 04:33:58 -0400 Subject: [PATCH 002/206] Update flags.json --- data/json/flags.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/json/flags.json b/data/json/flags.json index 621d0c1c0a54d..a6349a68be2ae 100644 --- a/data/json/flags.json +++ b/data/json/flags.json @@ -342,7 +342,8 @@ "id": "POWERED", "type": "json_flag", "context": [ "TOOL" ], - "//": "Objects with this flag do not drain player's stamina when used." + "//": "Objects with this flag use DEX instead of STR." + "//": Cannot change ID as it will break other interactions. }, { "id": "PSYSHIELD_PARTIAL", From 6dcf2fa6d5abb4ab7329e5ddcbba3d0621bee3ec Mon Sep 17 00:00:00 2001 From: kaeroku Date: Thu, 14 May 2020 04:36:16 -0400 Subject: [PATCH 003/206] Update flags.json Removed POWERED flag. --- data/json/flags.json | 7 ------- 1 file changed, 7 deletions(-) diff --git a/data/json/flags.json b/data/json/flags.json index a6349a68be2ae..a1a68778c5af7 100644 --- a/data/json/flags.json +++ b/data/json/flags.json @@ -338,13 +338,6 @@ "context": [ "GENERIC", "TOOL" ], "info": "As a weapon, this item needs considerable space to use properly and does 70% of its normal damage to adjacent enemies." }, - { - "id": "POWERED", - "type": "json_flag", - "context": [ "TOOL" ], - "//": "Objects with this flag use DEX instead of STR." - "//": Cannot change ID as it will break other interactions. - }, { "id": "PSYSHIELD_PARTIAL", "type": "json_flag", From c0364a96370907f59c386cf0447aaa01f3224dd6 Mon Sep 17 00:00:00 2001 From: FeepingCreature Date: Wed, 17 Jun 2020 21:14:35 +0200 Subject: [PATCH 004/206] Refactor AIM pagination to happen in new class `advanced_inventory_pagination`. This changes AIM to treat list items that begin a new category as "one item that needs two lines", rather than two items (one of which is a category header, or an empty item). As a result, the amount of "items per page" varies and scrolling has to be recomputed: luckily, the pagination class makes this easy. On the upside, a list index now always points at a valid item. Furthermore, the item list doesn't require manually fixing up for the current page anymore. --- src/advanced_inv.cpp | 117 ++++++++++++++++++-------------- src/advanced_inv.h | 2 +- src/advanced_inv_area.cpp | 2 +- src/advanced_inv_listitem.cpp | 25 ------- src/advanced_inv_listitem.h | 30 ++------ src/advanced_inv_pagination.cpp | 39 +++++++++++ src/advanced_inv_pagination.h | 33 +++++++++ src/advanced_inv_pane.cpp | 105 ++++++++++++++++------------ src/advanced_inv_pane.h | 16 ++--- 9 files changed, 214 insertions(+), 155 deletions(-) create mode 100644 src/advanced_inv_pagination.cpp create mode 100644 src/advanced_inv_pagination.h diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index b67b9b656f003..1ad4fe22cabfa 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -12,6 +12,7 @@ #include #include "activity_actor.h" +#include "advanced_inv_pagination.h" #include "auto_pickup.h" #include "avatar.h" #include "calendar.h" @@ -201,7 +202,6 @@ void advanced_inventory::print_items( const advanced_inventory_pane &pane, bool const auto &items = pane.items; const catacurses::window &window = pane.window; const auto index = pane.index; - const int page = index / itemsPerPage; bool compact = TERMX <= 100; int columns = getmaxx( window ); @@ -283,20 +283,38 @@ void advanced_inventory::print_items( const advanced_inventory_pane &pane, bool mvwprintz( window, point( lastcol - table_hdr_len1 + 1, 5 ), c_light_gray, _( "amt weight vol" ) ); } - for( int i = page * itemsPerPage, x = 0 ; i < static_cast( items.size() ) && - x < itemsPerPage ; i++, x++ ) { - const auto &sitem = items[i]; - if( sitem.is_category_header() ) { - mvwprintz( window, point( ( columns - utf8_width( sitem.name ) - 6 ) / 2, 6 + x ), c_cyan, "[%s]", - sitem.name ); - continue; + int pageStart = 0; // index of first item on current page + + advanced_inventory_pagination pagination( linesPerPage, pane ); + if( items.size() > 0 ) { + // paginate up to the current item (to count pages) + for( int i = 0; i <= index; i++ ) { + const bool pagebreak = pagination.step( i ); + if( pagebreak ) { + pageStart = i; + } } - if( !sitem.is_item_entry() ) { - // Empty entry at the bottom of a page. - continue; + } + + pagination.reset_page(); + for( size_t i = pageStart; i < items.size(); i++ ) { + const advanced_inv_listitem &sitem = items[i]; + const int line = pagination.line; + int item_line = line; + if( pane.sortby == SORTBY_CATEGORY && pagination.new_category( sitem.cat ) ) { + // don't put category header at bottom of page + if( line == linesPerPage - 1 ) { + break; + } + // insert category header + mvwprintz( window, point( ( columns - utf8_width( sitem.cat->name() ) - 6 ) / 2, 6 + line ), c_cyan, + "[%s]", + sitem.cat->name() ); + item_line = line + 1; } + const auto &it = *sitem.items.front(); - const bool selected = active && index == i; + const bool selected = active && index == static_cast( i ); nc_color thiscolor = active ? it.color_in_inventory() : norm; nc_color thiscolordark = c_dark_gray; @@ -306,9 +324,9 @@ void advanced_inventory::print_items( const advanced_inventory_pane &pane, bool thiscolor = inCategoryMode && pane.sortby == SORTBY_CATEGORY ? c_white_red : hilite( c_white ); thiscolordark = hilite( thiscolordark ); if( compact ) { - mvwprintz( window, point( 1, 6 + x ), thiscolor, " %s", spaces ); + mvwprintz( window, point( 1, 6 + item_line ), thiscolor, " %s", spaces ); } else { - mvwprintz( window, point( 1, 6 + x ), thiscolor, ">>%s", spaces ); + mvwprintz( window, point( 1, 6 + item_line ), thiscolor, ">>%s", spaces ); } } @@ -344,12 +362,13 @@ void advanced_inventory::print_items( const advanced_inventory_pane &pane, bool } //print item name - trim_and_print( window, point( compact ? 1 : 4, 6 + x ), max_name_length, thiscolor, item_name ); + trim_and_print( window, point( compact ? 1 : 4, 6 + item_line ), max_name_length, thiscolor, + item_name ); //print src column // TODO: specify this is coming from a vehicle! if( pane.get_area() == AIM_ALL && !compact ) { - mvwprintz( window, point( src_startpos, 6 + x ), thiscolor, squares[sitem.area].shortname ); + mvwprintz( window, point( src_startpos, 6 + item_line ), thiscolor, squares[sitem.area].shortname ); } //print "amount" column @@ -360,7 +379,7 @@ void advanced_inventory::print_items( const advanced_inventory_pane &pane, bool it_amt = 9999; print_color = selected ? hilite( c_red ) : c_red; } - mvwprintz( window, point( amt_startpos, 6 + x ), print_color, "%4d", it_amt ); + mvwprintz( window, point( amt_startpos, 6 + item_line ), print_color, "%4d", it_amt ); } //print weight column @@ -379,7 +398,8 @@ void advanced_inventory::print_items( const advanced_inventory_pane &pane, bool } else { w_precision = 2; } - mvwprintz( window, point( weight_startpos, 6 + x ), print_color, "%5.*f", w_precision, it_weight ); + mvwprintz( window, point( weight_startpos, 6 + item_line ), print_color, "%5.*f", w_precision, + it_weight ); //print volume column bool it_vol_truncated = false; @@ -390,12 +410,16 @@ void advanced_inventory::print_items( const advanced_inventory_pane &pane, bool } else { print_color = sitem.volume.value() > 0 ? thiscolor : thiscolordark; } - mvwprintz( window, point( vol_startpos, 6 + x ), print_color, it_vol ); + mvwprintz( window, point( vol_startpos, 6 + item_line ), print_color, it_vol ); if( active && sitem.autopickup ) { - mvwprintz( window, point( 1, 6 + x ), magenta_background( it.color_in_inventory() ), + mvwprintz( window, point( 1, 6 + item_line ), magenta_background( it.color_in_inventory() ), compact ? it.tname().substr( 0, 1 ) : ">" ); } + + if( pagination.step( i ) ) { // page end + break; + } } } @@ -431,14 +455,8 @@ struct advanced_inv_sorter { } break; case SORTBY_CATEGORY: - assert( d1.cat != nullptr ); - assert( d2.cat != nullptr ); if( d1.cat != d2.cat ) { - return *d1.cat < *d2.cat; - } else if( d1.is_category_header() ) { - return true; - } else if( d2.is_category_header() ) { - return false; + return d1.cat < d2.cat; } break; case SORTBY_DAMAGE: @@ -588,19 +606,8 @@ void advanced_inventory::recalc_pane( side p ) } else { pane.add_items_from_area( squares[pane.get_area()] ); } - // Insert category headers (only expected when sorting by category) - if( pane.sortby == SORTBY_CATEGORY ) { - std::set categories; - for( auto &it : pane.items ) { - categories.insert( it.cat ); - } - for( auto &cat : categories ) { - pane.items.push_back( advanced_inv_listitem( cat ) ); - } - } - // Finally sort all items (category headers will now be moved to their proper position) + // Sort all items std::stable_sort( pane.items.begin(), pane.items.end(), advanced_inv_sorter( pane.sortby ) ); - pane.paginate( itemsPerPage ); } void advanced_inventory::redraw_pane( side p ) @@ -642,10 +649,18 @@ void advanced_inventory::redraw_pane( side p ) mvwprintz( w, point( 2, 2 ), active ? c_light_blue : c_dark_gray, desc ); trim_and_print( w, point( 2, 3 ), width, active ? c_cyan : c_dark_gray, square.flags ); - const int max_page = ( pane.items.size() + itemsPerPage - 1 ) / itemsPerPage; - if( active && max_page > 1 ) { - const int page = pane.index / itemsPerPage; - mvwprintz( w, point( 2, 4 ), c_light_blue, _( "[<] page %1$d of %2$d [>]" ), page + 1, max_page ); + if( active ) { + advanced_inventory_pagination pagination( linesPerPage, pane ); + int cur_page = 0; + for( int i = 0; i < static_cast( pane.items.size() ); i++ ) { + pagination.step( i ); + if( i == pane.index ) { + cur_page = pagination.page; + } + } + const int max_page = pagination.page; + mvwprintz( w, point( 2, 4 ), c_light_blue, _( "[<] page %1$d of %2$d [>]" ), cur_page + 1, + max_page + 1 ); } if( active ) { @@ -1209,7 +1224,7 @@ bool advanced_inventory::action_move_item( advanced_inv_listitem *sitem, const std::string &action ) { bool exit = false; - if( sitem == nullptr || !sitem->is_item_entry() ) { + if( sitem == nullptr ) { return false; } aim_location destarea = dpane.get_area(); @@ -1406,7 +1421,7 @@ void advanced_inventory::display() headstart + head_height ) ); // 2 for the borders, 5 for the header stuff - itemsPerPage = w_height - 2 - 5; + linesPerPage = w_height - 2 - 5; if( filter_edit && spopup ) { spopup->window( panes[src].window, point( 4, w_height - 1 ), w_width / 2 - 4 ); @@ -1473,7 +1488,7 @@ void advanced_inventory::display() } else if( get_square( action, changeSquare ) ) { change_square( changeSquare, dpane, spane ); } else if( action == "TOGGLE_FAVORITE" ) { - if( sitem == nullptr || !sitem->is_item_entry() ) { + if( sitem == nullptr ) { continue; } for( auto *item : sitem->items ) { @@ -1520,7 +1535,7 @@ void advanced_inventory::display() } else if( action == "RESET_FILTER" ) { spane.set_filter( "" ); } else if( action == "TOGGLE_AUTO_PICKUP" ) { - if( sitem == nullptr || !sitem->is_item_entry() ) { + if( sitem == nullptr ) { continue; } if( sitem->autopickup ) { @@ -1532,16 +1547,16 @@ void advanced_inventory::display() } recalc = true; } else if( action == "EXAMINE" ) { - if( sitem == nullptr || !sitem->is_item_entry() ) { + if( sitem == nullptr ) { continue; } action_examine( sitem, spane ); } else if( action == "QUIT" ) { exit = true; } else if( action == "PAGE_DOWN" ) { - spane.scroll_by( +itemsPerPage ); + spane.scroll_page( linesPerPage, +1 ); } else if( action == "PAGE_UP" ) { - spane.scroll_by( -itemsPerPage ); + spane.scroll_page( linesPerPage, -1 ); } else if( action == "DOWN" ) { if( inCategoryMode ) { spane.scroll_category( +1 ); @@ -1749,7 +1764,7 @@ bool advanced_inventory::query_charges( aim_location destarea, const advanced_in // For items counted by charges, adding it adds 0 items if something there stacks with it. const bool adds0 = by_charges && std::any_of( panes[dest].items.begin(), panes[dest].items.end(), [&it]( const advanced_inv_listitem & li ) { - return li.is_item_entry() && li.items.front()->stacks_with( it ); + return li.items.front()->stacks_with( it ); } ); if( cntmax <= 0 && !adds0 ) { popup( _( "Destination area has too many items. Remove some first." ) ); diff --git a/src/advanced_inv.h b/src/advanced_inv.h index 52a6a69505d2f..29baf1e1da147 100644 --- a/src/advanced_inv.h +++ b/src/advanced_inv.h @@ -73,7 +73,7 @@ class advanced_inventory bool inCategoryMode = false; - int itemsPerPage = 0; + int linesPerPage = 0; int w_height = 0; int w_width = 0; diff --git a/src/advanced_inv_area.cpp b/src/advanced_inv_area.cpp index 260b35a3e4edb..49a1c0db86731 100644 --- a/src/advanced_inv_area.cpp +++ b/src/advanced_inv_area.cpp @@ -213,7 +213,7 @@ bool advanced_inv_area::canputitems( const advanced_inv_listitem *advitem ) item *it = nullptr; switch( id ) { case AIM_CONTAINER: - if( advitem != nullptr && advitem->is_item_entry() ) { + if( advitem != nullptr ) { it = advitem->items.front(); from_vehicle = advitem->from_vehicle; } diff --git a/src/advanced_inv_listitem.cpp b/src/advanced_inv_listitem.cpp index ebdc5f7939486..001829dcb9126 100644 --- a/src/advanced_inv_listitem.cpp +++ b/src/advanced_inv_listitem.cpp @@ -40,28 +40,3 @@ advanced_inv_listitem::advanced_inv_listitem( const std::list &list, int { assert( stacks >= 1 ); } - -advanced_inv_listitem::advanced_inv_listitem() - : area() - , id( "null" ) - , cat( nullptr ) -{ -} - -advanced_inv_listitem::advanced_inv_listitem( const item_category *cat ) - : area() - , id( "null" ) - , name( cat->name() ) - , cat( cat ) -{ -} - -bool advanced_inv_listitem::is_category_header() const -{ - return items.empty() && cat != nullptr; -} - -bool advanced_inv_listitem::is_item_entry() const -{ - return !items.empty(); -} diff --git a/src/advanced_inv_listitem.h b/src/advanced_inv_listitem.h index a815fe839d276..687e0a36b3bb9 100644 --- a/src/advanced_inv_listitem.h +++ b/src/advanced_inv_listitem.h @@ -15,8 +15,7 @@ class item_category; enum aim_location : char; /** - * Entry that is displayed in a adv. inv. pane. It can either contain a - * single item or a category header or nothing (empty entry). + * Entry that is displayed in a adv. inv. pane. It contains a single item or stack of items. * Most members are used only for sorting. */ class advanced_inv_listitem @@ -32,10 +31,10 @@ class advanced_inv_listitem aim_location area; // the id of the item itype_id id; - // The list of items, and empty when a header + // The list of items std::list items; /** - * The displayed name of the item/the category header. + * The displayed name of the item. */ std::string name; /** @@ -60,7 +59,7 @@ class advanced_inv_listitem */ units::mass weight = 0_gram; /** - * The item category, or the category header. + * The item category. */ const item_category *cat; /** @@ -68,24 +67,7 @@ class advanced_inv_listitem */ bool from_vehicle = false; /** - * Whether this is a category header entry, which does *not* have a reference - * to an item, only @ref cat is valid. - */ - bool is_category_header() const; - - /** Returns true if this is an item entry */ - bool is_item_entry() const; - /** - * Create a category header entry. - * @param cat The category reference, must not be null. - */ - advanced_inv_listitem( const item_category *cat ); - /** - * Creates an empty entry, both category and item pointer are null. - */ - advanced_inv_listitem(); - /** - * Create a normal item entry. + * Create an item entry. * @param an_item The item pointer. Must not be null. * @param index The index * @param count The stack size @@ -95,7 +77,7 @@ class advanced_inv_listitem advanced_inv_listitem( item *an_item, int index, int count, aim_location area, bool from_vehicle ); /** - * Create a normal item entry. + * Create an item entry. * @param list The list of item pointers. * @param index The index * @param area The source area. Must not be AIM_ALL. diff --git a/src/advanced_inv_pagination.cpp b/src/advanced_inv_pagination.cpp new file mode 100644 index 0000000000000..dcf60f9253c37 --- /dev/null +++ b/src/advanced_inv_pagination.cpp @@ -0,0 +1,39 @@ +#include "advanced_inv_pagination.h" + +void advanced_inventory_pagination::reset_page() +{ + line = 0; + page = 0; + last_category = nullptr; +} + +bool advanced_inventory_pagination::new_category( const item_category *cat ) +{ + return last_category != cat; +} + +int advanced_inventory_pagination::lines_needed( int index ) +{ + if( pane.sortby == SORTBY_CATEGORY && new_category( pane.items[index].cat ) ) { + return 2; + } + return 1; +} + +bool advanced_inventory_pagination::step( int index ) +{ + // item would overflow page + if( line + lines_needed( index ) > linesPerPage ) { + page++; + line = 0; + // always reprint category header on next page + last_category = nullptr; + // print item on next page + step( index ); + return true; + } + // print on this page + line += lines_needed( index ); + last_category = pane.items[index].cat; + return false; +} diff --git a/src/advanced_inv_pagination.h b/src/advanced_inv_pagination.h new file mode 100644 index 0000000000000..3284b865275c9 --- /dev/null +++ b/src/advanced_inv_pagination.h @@ -0,0 +1,33 @@ +#pragma once +#ifndef CATA_SRC_ADVANCED_INV_PAGINATION_H +#define CATA_SRC_ADVANCED_INV_PAGINATION_H + +#include "advanced_inv_pane.h" + +/** + * This class determines the page and line at which an item appears in the AIM. + */ +class advanced_inventory_pagination +{ + private: + const int linesPerPage; + const advanced_inventory_pane &pane; + int lines_needed( int index ); + public: + int line; + int page; + const item_category *last_category; + advanced_inventory_pagination( int linesPerPage, const advanced_inventory_pane &pane ) + : linesPerPage( linesPerPage ), pane( pane ), line( 0 ), page( 0 ), last_category( nullptr ) { } + + /// Reset pagination state to the start of the current page, so it can be printed. + void reset_page(); + + /// Returns true if printing an item with the category requires a category header. + bool new_category( const item_category *cat ); + + /// Step the pagination state forward for the item with this index. + /// Returns true if printing the item required starting a new page. + bool step( int index ); +}; +#endif // CATA_SRC_ADVANCED_INV_PAGINATION_H diff --git a/src/advanced_inv_pane.cpp b/src/advanced_inv_pane.cpp index 3e62e278f3cc9..5d3acd5c47ee2 100644 --- a/src/advanced_inv_pane.cpp +++ b/src/advanced_inv_pane.cpp @@ -6,6 +6,7 @@ #include #include "advanced_inv_area.h" +#include "advanced_inv_pagination.h" #include "advanced_inv_pane.h" #include "avatar.h" #include "inventory.h" @@ -193,30 +194,6 @@ void advanced_inventory_pane::add_items_from_area( advanced_inv_area &square, } } -void advanced_inventory_pane::paginate( size_t itemsPerPage ) -{ - // not needed as there are no category entries here. - if( sortby != SORTBY_CATEGORY ) { - return; - } - // first, we insert all the items, then we sort the result - for( size_t i = 0; i < items.size(); ++i ) { - if( i % itemsPerPage == 0 ) { - // first entry on the page, should be a category header - if( items[i].is_item_entry() ) { - items.insert( items.begin() + i, advanced_inv_listitem( items[i].cat ) ); - } - } - if( ( i + 1 ) % itemsPerPage == 0 && i + 1 < items.size() ) { - // last entry of the page, but not the last entry at all! - // Must *not* be a category header! - if( items[i].is_category_header() ) { - items.insert( items.begin() + i, advanced_inv_listitem() ); - } - } - } -} - void advanced_inventory_pane::fix_index() { if( items.empty() ) { @@ -228,22 +205,6 @@ void advanced_inventory_pane::fix_index() } else if( static_cast( index ) >= items.size() ) { index = static_cast( items.size() ) - 1; } - skip_category_headers( +1 ); -} - -void advanced_inventory_pane::skip_category_headers( int offset ) -{ - // 0 would make no sense - assert( offset != 0 ); - // valid index is required - assert( static_cast( index ) < items.size() ); - // only those two offsets are allowed - assert( offset == -1 || offset == +1 ); - // index would not be valid, and this would be an endless loop - assert( !items.empty() ); - while( !items[index].is_item_entry() ) { - mod_index( offset ); - } } void advanced_inventory_pane::mod_index( int offset ) @@ -267,13 +228,69 @@ void advanced_inventory_pane::scroll_by( int offset ) return; } mod_index( offset ); - skip_category_headers( offset > 0 ? +1 : -1 ); +} + +void advanced_inventory_pane::scroll_page( int linesPerPage, int offset ) +{ + // only those two offsets are allowed + assert( offset == -1 || offset == +1 ); + if( items.empty() ) { + return; + } + const int size = static_cast( items.size() ); + + advanced_inventory_pagination old_pagination( linesPerPage, *this ); + for( int i = 0; i <= index; i++ ) { + old_pagination.step( i ); + } + + // underflow + if( old_pagination.page + offset < 0 ) { + if( index > 0 ) { + // scroll to top of first page + index = 0; + } else { + // scroll wrap + index = size - 1; + } + return; + } + + int previous_line = -1; // matching line one up from our line + advanced_inventory_pagination new_pagination( linesPerPage, *this ); + for( int i = 0; i < size; i++ ) { + new_pagination.step( i ); + // right page + if( new_pagination.page == old_pagination.page + offset ) { + // right line + if( new_pagination.line == old_pagination.line ) { + index = i; + return; + } + // one up from right line + if( new_pagination.line == old_pagination.line - 1 ) { + previous_line = i; + } + } + } + // second-best matching line + if( previous_line != -1 ) { + index = previous_line; + return; + } + + // overflow + if( index < size - 1 ) { + // scroll to end of last page + index = size - 1; + } else { + // scroll wrap + index = 0; + } } void advanced_inventory_pane::scroll_category( int offset ) { - // 0 would make no sense - assert( offset != 0 ); // only those two offsets are allowed assert( offset == -1 || offset == +1 ); if( items.empty() ) { @@ -301,8 +318,6 @@ void advanced_inventory_pane::scroll_category( int offset ) } } } - // Make sure we land on an item entry. - skip_category_headers( offset > 0 ? +1 : -1 ); } advanced_inv_listitem *advanced_inventory_pane::get_cur_item_ptr() diff --git a/src/advanced_inv_pane.h b/src/advanced_inv_pane.h index e92c3f1ee0ca9..8ce9c66af5e4a 100644 --- a/src/advanced_inv_pane.h +++ b/src/advanced_inv_pane.h @@ -89,7 +89,7 @@ class advanced_inventory_pane */ void fix_index(); /** - * @param it The item to check, oly the name member is examined. + * @param it The item to check, only the name member is examined. * @return Whether the item should be filtered (and not shown). */ bool is_filtered( const advanced_inv_listitem &it ) const; @@ -103,7 +103,13 @@ class advanced_inventory_pane */ void scroll_by( int offset ); /** - * Scroll the index in category mode by given offset. + * Scroll @ref index, by given offset in pages, + * @param linesPerPage Amount of lines that can be displayed per page. + * @param offset Must be either +1 or -1. + */ + void scroll_page( int linesPerPage, int offset ); + /** + * Scroll @ref index, in category mode by given offset. * @param offset Must be either +1 or -1 */ void scroll_category( int offset ); @@ -116,13 +122,7 @@ class advanced_inventory_pane * Set the filter string, disables filtering when the filter string is empty. */ void set_filter( const std::string &new_filter ); - /** - * Insert additional category headers on the top of each page. - */ - void paginate( size_t itemsPerPage ); private: - /** Scroll to next non-header entry */ - void skip_category_headers( int offset ); /** Only add offset to index, but wrap around! */ void mod_index( int offset ); From d5e2a2a126f5cbdf8c8f8df300104a2238a52439 Mon Sep 17 00:00:00 2001 From: FeepingCreature Date: Tue, 16 Jun 2020 17:48:23 +0200 Subject: [PATCH 005/206] Switch AIM items to vectors, as insert/erase is no longer used. --- src/advanced_inv.cpp | 4 ++-- src/advanced_inv_area.cpp | 2 -- src/advanced_inv_area.h | 2 +- src/advanced_inv_listitem.cpp | 2 +- src/advanced_inv_listitem.h | 6 +++--- src/advanced_inv_pane.cpp | 26 +++++++------------------- 6 files changed, 14 insertions(+), 28 deletions(-) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index 1ad4fe22cabfa..cfe1d7c068455 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -1161,7 +1161,7 @@ void advanced_inventory::start_activity( const aim_location destarea, const aim_ } g->u.activity.values.push_back( amount_to_move ); } else { - for( std::list::iterator it = sitem->items.begin(); amount_to_move > 0 && + for( auto it = sitem->items.begin(); amount_to_move > 0 && it != sitem->items.end(); ++it ) { if( from_vehicle ) { g->u.activity.targets.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), @@ -1186,7 +1186,7 @@ void advanced_inventory::start_activity( const aim_location destarea, const aim_ } quantities.push_back( amount_to_move ); } else { - for( std::list::iterator it = sitem->items.begin(); amount_to_move > 0 && + for( auto it = sitem->items.begin(); amount_to_move > 0 && it != sitem->items.end(); ++it ) { if( from_vehicle ) { target_items.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), diff --git a/src/advanced_inv_area.cpp b/src/advanced_inv_area.cpp index 49a1c0db86731..ee86e9714d993 100644 --- a/src/advanced_inv_area.cpp +++ b/src/advanced_inv_area.cpp @@ -419,8 +419,6 @@ advanced_inv_area::itemstack advanced_inv_area::i_stacked( T items ) { //create a new container for our stacked items advanced_inv_area::itemstack stacks; - // // make a list of the items first, so we can add non stacked items back on - // std::list items(things.begin(), things.end()); // used to recall indices we stored `itype_id' item at in itemstack std::unordered_map> cache; // iterate through and create stacks diff --git a/src/advanced_inv_area.h b/src/advanced_inv_area.h index 041241ca168af..744544c279c71 100644 --- a/src/advanced_inv_area.h +++ b/src/advanced_inv_area.h @@ -42,7 +42,7 @@ class advanced_inv_area { public: // roll our own, to handle moving stacks better - using itemstack = std::vector >; + using itemstack = std::vector >; const aim_location id; // Used for the small overview 3x3 grid diff --git a/src/advanced_inv_listitem.cpp b/src/advanced_inv_listitem.cpp index 001829dcb9126..77ebbd5139a94 100644 --- a/src/advanced_inv_listitem.cpp +++ b/src/advanced_inv_listitem.cpp @@ -23,7 +23,7 @@ advanced_inv_listitem::advanced_inv_listitem( item *an_item, int index, int coun assert( stacks >= 1 ); } -advanced_inv_listitem::advanced_inv_listitem( const std::list &list, int index, +advanced_inv_listitem::advanced_inv_listitem( const std::vector &list, int index, aim_location area, bool from_vehicle ) : idx( index ), area( area ), diff --git a/src/advanced_inv_listitem.h b/src/advanced_inv_listitem.h index 687e0a36b3bb9..630bf5180fd99 100644 --- a/src/advanced_inv_listitem.h +++ b/src/advanced_inv_listitem.h @@ -2,8 +2,8 @@ #ifndef CATA_SRC_ADVANCED_INV_LISTITEM_H #define CATA_SRC_ADVANCED_INV_LISTITEM_H -#include #include +#include #include "type_id.h" #include "units.h" @@ -32,7 +32,7 @@ class advanced_inv_listitem // the id of the item itype_id id; // The list of items - std::list items; + std::vector items; /** * The displayed name of the item. */ @@ -83,7 +83,7 @@ class advanced_inv_listitem * @param area The source area. Must not be AIM_ALL. * @param from_vehicle Is the item from a vehicle cargo space? */ - advanced_inv_listitem( const std::list &list, int index, + advanced_inv_listitem( const std::vector &list, int index, aim_location area, bool from_vehicle ); }; #endif // CATA_SRC_ADVANCED_INV_LISTITEM_H diff --git a/src/advanced_inv_pane.cpp b/src/advanced_inv_pane.cpp index 5d3acd5c47ee2..60534b6f88f56 100644 --- a/src/advanced_inv_pane.cpp +++ b/src/advanced_inv_pane.cpp @@ -81,31 +81,19 @@ bool advanced_inventory_pane::is_filtered( const item &it ) const } /** converts a raw list of items to "stacks" - itms that are not count_by_charges that otherwise stack go into one stack */ -static std::list> item_list_to_stack( std::list item_list ) +static std::vector> item_list_to_stack( std::list item_list ) { - std::list> ret; - for( auto iter_outer = item_list.begin(); iter_outer != item_list.end(); ) { - std::list item_stack{}; - for( auto iter_inner = item_list.begin(); iter_inner != item_list.end(); ) { - if( iter_outer == iter_inner ) { - ++iter_inner; - } else if( ( *iter_outer )->display_stacked_with( **iter_inner ) ) { - if( item_stack.empty() ) { - item_stack.push_back( *iter_outer ); - } + std::vector> ret; + for( auto iter_outer = item_list.begin(); iter_outer != item_list.end(); ++iter_outer ) { + std::vector item_stack( { *iter_outer } ); + for( auto iter_inner = std::next( iter_outer ); iter_inner != item_list.end(); ) { + if( ( *iter_outer )->display_stacked_with( **iter_inner ) ) { item_stack.push_back( *iter_inner ); iter_inner = item_list.erase( iter_inner ); } else { ++iter_inner; } } - - if( item_stack.empty() && !item_list.empty() ) { - item_stack.push_back( *iter_outer ); - iter_outer = item_list.erase( iter_outer ); - } else { - ++iter_outer; - } ret.push_back( item_stack ); } return ret; @@ -122,7 +110,7 @@ std::vector avatar::get_AIM_inventory( const advanced_inv if( worn_item.contents.empty() ) { continue; } - for( const std::list &it_stack : item_list_to_stack( + for( const std::vector &it_stack : item_list_to_stack( worn_item.contents.all_items_top() ) ) { advanced_inv_listitem adv_it( it_stack, item_index++, square.id, false ); if( !pane.is_filtered( *adv_it.items.front() ) ) { From f7511321a3db2877de90ebce4ce12d940bb30e0e Mon Sep 17 00:00:00 2001 From: FeepingCreature Date: Wed, 17 Jun 2020 22:28:17 +0200 Subject: [PATCH 006/206] fix: use env to determine the path of bash. This makes validate_pr_in_jenkins work on untypical Linux systems. --- build-scripts/validate_pr_in_jenkins | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-scripts/validate_pr_in_jenkins b/build-scripts/validate_pr_in_jenkins index 885ed55cc70e0..18b0db2f7b322 100755 --- a/build-scripts/validate_pr_in_jenkins +++ b/build-scripts/validate_pr_in_jenkins @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash if [ -z "$ghprbPullId" ]; then exit 0; fi From 2d5948aeee906a02d56204d8fc69005edb779b68 Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Mon, 15 Jun 2020 16:49:03 -0400 Subject: [PATCH 007/206] Add zombify_into for DinoMod --- data/mods/DinoMod/monsters/dinosaur.json | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/data/mods/DinoMod/monsters/dinosaur.json b/data/mods/DinoMod/monsters/dinosaur.json index 02f4d63e989cb..31c3d55a1f949 100644 --- a/data/mods/DinoMod/monsters/dinosaur.json +++ b/data/mods/DinoMod/monsters/dinosaur.json @@ -81,6 +81,7 @@ "armor_bullet": 1, "hp": 40, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zallimimus", "description": "A feathered bipedal dinosaur, standing as tall as a human. It looks somewhat like a reptilian ostrich.", "reproduction": { "baby_egg": "egg_gallimimus", "baby_count": 3, "baby_timer": 12 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -124,6 +125,7 @@ "armor_cut": 1, "hp": 40, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zachycephalosaurus", "description": "A feathered bipedal dinosaur, standing as tall as a human. It looks like a reptilian ostrich with a round hard-looking domed head.", "reproduction": { "baby_egg": "egg_pachycephalosaurus", "baby_count": 3, "baby_timer": 12 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -169,6 +171,7 @@ "armor_bullet": 1, "hp": 80, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zamptosaurus", "description": "A large feathered bipedal dinosaur with strong legs, broad shoulders and a pointed beak. It moves slowly but with enormous strength.", "reproduction": { "baby_egg": "egg_camptosaurus", "baby_count": 3, "baby_timer": 12 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -215,6 +218,7 @@ "armor_bullet": 2, "hp": 400, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zpinosaurus", "description": "A huge dinosaur about the size of a small house, with a ferocious crocodile-like head and a sail on its back.", "reproduction": { "baby_egg": "egg_spinosaurus", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -262,6 +266,7 @@ "armor_bullet": 2, "hp": 300, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zyrannosaurus", "description": "Enormous teeth in a massive jaw, fierce eyes and a powerful frame to drive it forward.", "reproduction": { "baby_egg": "egg_tyrannosaurus", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -298,6 +303,7 @@ "armor_bullet": 2, "hp": 200, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zalbertosaurus", "description": "Looks like a smaller tyrannosaurus rex, but those arms are much longer", "reproduction": { "baby_egg": "egg_albertosaurus", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -335,6 +341,7 @@ "armor_bullet": 2, "hp": 150, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zriceratops", "description": "A massive rhino-like dinosaur with a bony crest from which three large horns emerge.", "reproduction": { "baby_egg": "egg_triceratops", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -419,6 +426,7 @@ "armor_bullet": 1, "hp": 150, "death_function": [ "NORMAL" ], + "zombify_into": "mon_ztegosaurus", "description": "A large slow quadruped dinosaur with plates on its back, and a spiked tail.", "reproduction": { "baby_egg": "egg_stegosaurus", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -453,6 +461,7 @@ "armor_bullet": 3, "hp": 120, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zankylosaurus", "special_attacks": [ { "id": "slam", "cooldown": 10, "damage_max_instance": [ { "damage_type": "bash", "amount": 12 } ] }, [ "SMASH", 30 ] @@ -489,6 +498,7 @@ "armor_bullet": 1, "hp": 400, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zapatosaurus", "special_attacks": [ { "id": "slam", "cooldown": 10, "damage_max_instance": [ { "damage_type": "bash", "amount": 12 } ] }, [ "SMASH", 30 ] @@ -528,6 +538,7 @@ "armor_bullet": 1, "hp": 70, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zeratosaurus", "description": "A large, fast predatory bipedal dinosaur, decorated with three colorful horns on its head and dotted with bright skin bones with long sharp teeth and a long flexible tail.", "reproduction": { "baby_egg": "egg_ceratosaurus", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -563,6 +574,7 @@ "armor_bullet": 1, "hp": 120, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zallosaurus", "description": "A large predatory bipedal dinosaur, with tiger-like stripes on its broad back.", "reproduction": { "baby_egg": "egg_allosaurus", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -671,6 +683,7 @@ "armor_bullet": 1, "hp": 60, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zeinonychus", "vision_night": 5, "special_attacks": [ { "type": "leap", "cooldown": 5, "max_range": 5, "allow_no_target": true } ], "description": "A medium-sized bipedal dinosaur covered with feathers. At the end of each foot is a large sickle-like claw.", @@ -762,6 +775,7 @@ "armor_bullet": 1, "hp": 100, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zutahraptor", "vision_night": 5, "special_attacks": [ { "type": "leap", "cooldown": 5, "max_range": 5, "allow_no_target": true } ], "description": "A large bipedal dinosaur with feathered arms, a long tail, and scythe-like claws.", @@ -799,6 +813,7 @@ "armor_bullet": 3, "hp": 300, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zarasaurolophus", "description": "A huge mottled dinosaur with a blunt head crest. It contentedly strips leaves from a nearby shrub.", "reproduction": { "baby_egg": "egg_parasaurolophus", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -833,6 +848,7 @@ "vision_day": 50, "hp": 30, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zimorphodon", "description": "A feathered flying reptile over three feet long, with short wings and a big colorful beak.", "reproduction": { "baby_egg": "egg_dimorphodon", "baby_count": 3, "baby_timer": 24 }, "baby_flags": [ "SPRING", "SUMMER" ], @@ -867,6 +883,7 @@ "armor_bullet": 1, "hp": 120, "death_function": [ "NORMAL" ], + "zombify_into": "mon_zilophosaurus", "description": "A medium dinosaur with sharp teeth and two prominent bony crests on its head.", "reproduction": { "baby_egg": "egg_dilophosaurus", "baby_count": 3, "baby_timer": 18 }, "baby_flags": [ "SPRING", "SUMMER" ], From 4af8441ae4b6a0dd337db5faf20d1c26883460b0 Mon Sep 17 00:00:00 2001 From: chaisawlajatang <40278862+chaisawlajatang@users.noreply.github.com> Date: Fri, 19 Jun 2020 00:55:59 +0300 Subject: [PATCH 008/206] fema fix --- .../json/overmap/overmap_special/specials.json | 18 +++++++++--------- .../overmap_terrain_military.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/data/json/overmap/overmap_special/specials.json b/data/json/overmap/overmap_special/specials.json index 3b9fc44f971eb..479b5e287cf4c 100644 --- a/data/json/overmap/overmap_special/specials.json +++ b/data/json/overmap/overmap_special/specials.json @@ -726,15 +726,15 @@ "id": "FEMA Camp", "overmaps": [ { "point": [ 1, -1, 0 ], "overmap": "road_end_north" }, - { "point": [ 0, 0, 0 ], "overmap": "fema" }, - { "point": [ 1, 0, 0 ], "overmap": "fema_entrance" }, - { "point": [ 2, 0, 0 ], "overmap": "fema_1_3" }, - { "point": [ 0, 1, 0 ], "overmap": "fema_2_1" }, - { "point": [ 1, 1, 0 ], "overmap": "fema_2_2" }, - { "point": [ 2, 1, 0 ], "overmap": "fema_2_3" }, - { "point": [ 0, 2, 0 ], "overmap": "fema_3_1" }, - { "point": [ 1, 2, 0 ], "overmap": "fema_3_2" }, - { "point": [ 2, 2, 0 ], "overmap": "fema_3_3" } + { "point": [ 0, 0, 0 ], "overmap": "fema_north" }, + { "point": [ 1, 0, 0 ], "overmap": "fema_entrance_north" }, + { "point": [ 2, 0, 0 ], "overmap": "fema_1_3_north" }, + { "point": [ 0, 1, 0 ], "overmap": "fema_2_1_north" }, + { "point": [ 1, 1, 0 ], "overmap": "fema_2_2_north" }, + { "point": [ 2, 1, 0 ], "overmap": "fema_2_3_north" }, + { "point": [ 0, 2, 0 ], "overmap": "fema_3_1_north" }, + { "point": [ 1, 2, 0 ], "overmap": "fema_3_2_north" }, + { "point": [ 2, 2, 0 ], "overmap": "fema_3_3_north" } ], "connections": [ { "point": [ 1, -1, 0 ] } ], "locations": [ "wilderness" ], diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_military.json b/data/json/overmap/overmap_terrain/overmap_terrain_military.json index a037b496c13b3..a68081bed3865 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_military.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_military.json @@ -7,7 +7,7 @@ "color": "blue", "see_cost": 5, "extras": "build", - "flags": [ "NO_ROTATE", "RISK_HIGH", "SOURCE_GUN", "SOURCE_AMMO", "SOURCE_FOOD" ] + "flags": [ "RISK_HIGH", "SOURCE_GUN", "SOURCE_AMMO", "SOURCE_FOOD" ] }, { "type": "overmap_terrain", @@ -17,7 +17,7 @@ "color": "i_blue", "see_cost": 5, "extras": "build", - "flags": [ "NO_ROTATE", "RISK_HIGH", "SOURCE_GUN", "SOURCE_AMMO", "SOURCE_FOOD" ] + "flags": [ "RISK_HIGH", "SOURCE_GUN", "SOURCE_AMMO", "SOURCE_FOOD" ] }, { "type": "overmap_terrain", From 418ac7d33bbc48d98c71a17acdd4536cdae8ad98 Mon Sep 17 00:00:00 2001 From: olanti-p Date: Fri, 19 Jun 2020 03:32:42 +0300 Subject: [PATCH 009/206] Fix cache key generation for negative Z values --- src/map.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index f5eb938a16911..e63a9395ca55e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -6003,7 +6003,10 @@ bool map::sees( const tripoint &F, const tripoint &T, const int range, int &bres const tripoint &min = F < T ? F : T; const tripoint &max = !( F < T ) ? F : T; // A little gross, just pack the values into a point. - const point key( min.x << 16 | min.y << 8 | min.z, max.x << 16 | max.y << 8 | max.z ); + const point key( + min.x << 16 | min.y << 8 | ( min.z + OVERMAP_DEPTH ), + max.x << 16 | max.y << 8 | ( max.z + OVERMAP_DEPTH ) + ); char cached = skew_vision_cache.get( key, -1 ); if( cached >= 0 ) { return cached > 0; From 99aa7cb877913ffd11d63c28f40df3b63a5f5849 Mon Sep 17 00:00:00 2001 From: Ramza13 <52087122+Ramza13@users.noreply.github.com> Date: Thu, 18 Jun 2020 20:25:30 -0400 Subject: [PATCH 010/206] Fix warning about eating meds --- src/consumption.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/consumption.cpp b/src/consumption.cpp index cb0f8ae14555c..48e5ef53c148c 100644 --- a/src/consumption.cpp +++ b/src/consumption.cpp @@ -796,8 +796,9 @@ ret_val Character::will_eat( const item &food, bool interactive ) add_consequence( _( "Your stomach won't be happy (not rotten enough)." ), ALLERGY_WEAK ); } - if( food.charges > 0 && ( food.charges_per_volume( stomach.stomach_remaining( *this ) ) < 1 || - has_effect( effect_hunger_full ) || has_effect( effect_hunger_engorged ) ) ) { + if( food.charges > 0 && food.is_food() && + ( food.charges_per_volume( stomach.stomach_remaining( *this ) ) < 1 || + has_effect( effect_hunger_full ) || has_effect( effect_hunger_engorged ) ) ) { if( edible ) { add_consequence( _( "You're full already and will be forcing yourself to eat." ), TOO_FULL ); } else { From 5b89ce90f1e9f60c86f50c1375cf0a007e978306 Mon Sep 17 00:00:00 2001 From: nexusmrsep Date: Fri, 19 Jun 2020 18:50:36 +0200 Subject: [PATCH 011/206] Progress feedback for JSON formatter script --- msvc-full-features/style-json.ps1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/msvc-full-features/style-json.ps1 b/msvc-full-features/style-json.ps1 index cd48c6c7df6ed..af8d52ed4eef2 100644 --- a/msvc-full-features/style-json.ps1 +++ b/msvc-full-features/style-json.ps1 @@ -1,5 +1,7 @@ +Write-Output "JSON formatting script begins." $scriptDir = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent Set-Location -Path (Join-Path -Path $scriptDir -ChildPath "..") $blacklist = Get-Content "json_blacklist" | Resolve-Path -Relative $files = Get-ChildItem -Recurse -Include *.json "data" | Resolve-Path -Relative | ?{$blacklist -notcontains $_} -$files | ForEach-Object { Invoke-Expression ".\tools\format\json_formatter.exe $_" } +$files | ForEach-Object -Begin { $i = 0 } -Process { $i = $i+1 } { if( $i -eq 1 -or $i % 100 -eq 0 -or $i -eq $files.count ) { Write-Output "File $i of $($files.Count)" } } { Invoke-Expression ".\tools\format\json_formatter.exe $_" } -End $null +Write-Output "JSON formatting script ends." From f273f4bbbaa10ddaba8076c760376c56733ca763 Mon Sep 17 00:00:00 2001 From: BevapDin Date: Fri, 19 Jun 2020 20:26:19 +0200 Subject: [PATCH 012/206] Fix scent shifting: The code in `scent_map::shift` calls `scent_map::inbounds(point)`, which just forwards to `inbounds(tripoint)`, using the same x,y values, but a value of 0 for z. This means the `inbounds({x,y})` calls `inbounds({x,y,0})`, and the z level is an absolute value. The inbounds function considered that point (on the ground level) to be outside of the scentmap as that point is not reachable from the location of the player (at z < 0). See comment in `scent_map::inbounds(tripoint)` for the check involving `p.z`. This commit changes the check for the 2D-point to really just make a 2D-check (only considering x and y). --- src/scent_map.cpp | 11 ++++++++--- src/scent_map.h | 4 +--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/scent_map.cpp b/src/scent_map.cpp index 6d5a8fcb01a77..a29c807c3a438 100644 --- a/src/scent_map.cpp +++ b/src/scent_map.cpp @@ -138,13 +138,18 @@ bool scent_map::inbounds( const tripoint &p ) const if( !scent_map_z_level_inbounds ) { return false; } + return inbounds( p.xy() ); +} + +bool scent_map::inbounds( const point &p ) const +{ static constexpr point scent_map_boundary_min{}; static constexpr point scent_map_boundary_max( MAPSIZE_X, MAPSIZE_Y ); - static constexpr half_open_rectangle scent_map_boundaries( - scent_map_boundary_min, scent_map_boundary_max ); + static constexpr half_open_rectangle scent_map_boundaries( scent_map_boundary_min, + scent_map_boundary_max ); - return scent_map_boundaries.contains( p.xy() ); + return scent_map_boundaries.contains( p ); } void scent_map::update( const tripoint ¢er, map &m ) diff --git a/src/scent_map.h b/src/scent_map.h index 10f7058c79e52..e370b8e450db6 100644 --- a/src/scent_map.h +++ b/src/scent_map.h @@ -80,9 +80,7 @@ class scent_map scenttype_id get_type( const tripoint &p ) const; bool inbounds( const tripoint &p ) const; - bool inbounds( const point &p ) const { - return inbounds( tripoint( p, 0 ) ); - } + bool inbounds( const point &p ) const; }; #endif // CATA_SRC_SCENT_MAP_H From acc797a8f3ad4d10d5d73749deecd29e2aa63670 Mon Sep 17 00:00:00 2001 From: BevapDin Date: Fri, 19 Jun 2020 20:33:59 +0200 Subject: [PATCH 013/206] Fix savemode not updating during a single turn. When an activity / an action ends in the middle of a turn (the action ends and the player character has some moves left), the list of seen monster was not updated at all. This means if the character kills a monster and the turn does not end with that kill, the while loop continues and the list of visible monsters is not updated. --- src/game.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/game.cpp b/src/game.cpp index 414af7c2cee53..81b108da60f58 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1456,6 +1456,7 @@ bool game::do_turn() if( u.moves > 0 || uquit == QUIT_WATCH ) { while( u.moves > 0 || uquit == QUIT_WATCH ) { cleanup_dead(); + mon_info_update(); // Process any new sounds the player caused during their turn. for( npc &guy : all_npcs() ) { if( rl_dist( guy.pos(), u.pos() ) < MAX_VIEW_DISTANCE ) { @@ -1497,6 +1498,8 @@ bool game::do_turn() start = now; } + mon_info_update(); + // If player is performing a task and a monster is dangerously close, warn them // regardless of previous safemode warnings if( u.activity && !u.has_activity( activity_id( "ACT_AIM" ) ) && From 6cd97385ebf088eba50d7f95b24ea3167735aa82 Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Fri, 19 Jun 2020 12:02:56 -0700 Subject: [PATCH 014/206] Remove erroneous Fuji dealership car spawn Atomic cars haven't been canon in vanilla for a while (#38050), and this appears to have been erroneously added in #40706 --- data/json/vehicle_groups.json | 1 - 1 file changed, 1 deletion(-) diff --git a/data/json/vehicle_groups.json b/data/json/vehicle_groups.json index 0e9e5bf4c3b39..2d85139ae9b96 100644 --- a/data/json/vehicle_groups.json +++ b/data/json/vehicle_groups.json @@ -712,7 +712,6 @@ [ "car", 500 ], [ "electric_car", 100 ], [ "car_sports", 300 ], - [ "car_sports_atomic", 100 ], [ "car_sports_electric", 300 ], [ "suv", 500 ], [ "suv_electric", 500 ], From 6a410ecce8adc7ab0e7a260257c31010294a0242 Mon Sep 17 00:00:00 2001 From: olanti-p Date: Fri, 19 Jun 2020 21:46:10 +0300 Subject: [PATCH 015/206] Fix turning on music on laptop would trap player in gaming loop --- src/iuse.cpp | 8 +++++++- src/iuse.h | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index cadba3c9d9522..900a37a409afd 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -4497,8 +4497,14 @@ int iuse::gasmask( player *p, item *it, bool t, const tripoint &pos ) return it->type->charges_to_use(); } -int iuse::portable_game( player *p, item *it, bool, const tripoint & ) +int iuse::portable_game( player *p, item *it, bool active, const tripoint & ) { + if( active ) { + // Multi-turn usage of portable games is implemented via ACT_GAME and ACT_GENERIC_GAME. + // Complex devices (e.g. laptops) may use 'active' for other iuse functions + // (e.g. playing music), so we bail here to avoid conflicts. + return 0; + } if( p->is_npc() ) { // Long action return 0; diff --git a/src/iuse.h b/src/iuse.h index c359c2ff73567..55bb787b31df7 100644 --- a/src/iuse.h +++ b/src/iuse.h @@ -163,7 +163,7 @@ int pheromone( player *, item *, bool, const tripoint & ); int pick_lock( player *p, item *it, bool, const tripoint &pos ); int pickaxe( player *, item *, bool, const tripoint & ); int play_game( player *, item *, bool, const tripoint & ); -int portable_game( player *, item *, bool, const tripoint & ); +int portable_game( player *, item *, bool active, const tripoint & ); int portal( player *, item *, bool, const tripoint & ); int radglove( player *, item *, bool, const tripoint & ); int radio_mod( player *, item *, bool, const tripoint & ); From bd93e0717a8e872c4e5afdecfc8d07becb997ad2 Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Fri, 19 Jun 2020 14:06:30 -0700 Subject: [PATCH 016/206] Update belts.json reorder tool belt pockets --- data/json/items/armor/belts.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/items/armor/belts.json b/data/json/items/armor/belts.json index 01b5b4ca4045f..8213a4ff36063 100644 --- a/data/json/items/armor/belts.json +++ b/data/json/items/armor/belts.json @@ -225,6 +225,7 @@ "encumbrance": 2, "material_thickness": 2, "pocket_data": [ + { "max_contains_volume": "1 L", "max_contains_weight": "1500 g", "moves": 100 }, { "holster": true, "min_item_volume": "50 ml", @@ -269,8 +270,7 @@ "max_item_length": "50 cm", "moves": 50, "flag_restriction": [ "BELT_CLIP", "SHEATH_KNIFE" ] - }, - { "max_contains_volume": "1 L", "max_contains_weight": "1500 g", "moves": 100 } + } ], "use_action": { "type": "holster", "holster_prompt": "Store tool or blade", "holster_msg": "You put your %1$s in your %2$s" }, "flags": [ "WAIST", "NO_QUICKDRAW", "WATER_FRIENDLY" ] From da20a9b997e942ce4f831dc676a28f6b48c4fc39 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Fri, 19 Jun 2020 23:41:36 +0200 Subject: [PATCH 017/206] Fix endless activation loop when starving (#41448) --- src/character.h | 2 ++ src/mutation.cpp | 15 +++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/character.h b/src/character.h index 369867ebd2187..c7fa82c3c7c72 100644 --- a/src/character.h +++ b/src/character.h @@ -840,6 +840,8 @@ class Character : public Creature, public visitable /**Unset switched mutation and set target mutation instead*/ void switch_mutations( const trait_id &switched, const trait_id &target, bool start_powered ); + bool can_power_mutation( const trait_id &mut ); + /**Trigger reflex activation if the mutation has one*/ void mutation_reflex_trigger( const trait_id &mut ); diff --git a/src/mutation.cpp b/src/mutation.cpp index d5cc9a446932e..137b6b0158bb4 100644 --- a/src/mutation.cpp +++ b/src/mutation.cpp @@ -182,9 +182,18 @@ void Character::switch_mutations( const trait_id &switched, const trait_id &targ my_mutations[target].powered = start_powered; } +bool Character::can_power_mutation( const trait_id &mut ) +{ + bool hunger = mut->hunger && get_kcal_percent() < 0.5f; + bool thirst = mut->thirst && get_thirst() >= 260; + bool fatigue = mut->fatigue && get_fatigue() >= fatigue_levels::EXHAUSTED; + + return !hunger && !fatigue && !thirst; +} + void Character::mutation_reflex_trigger( const trait_id &mut ) { - if( mut->triger_list.empty() ) { + if( mut->triger_list.empty() || !can_power_mutation( mut ) ) { return; } @@ -559,9 +568,7 @@ void Character::activate_mutation( const trait_id &mut ) int cost = mdata.cost; // You can take yourself halfway to Near Death levels of hunger/thirst. // Fatigue can go to Exhausted. - if( ( mdata.hunger && get_kcal_percent() < 0.5f ) || ( mdata.thirst && - get_thirst() >= 260 ) || - ( mdata.fatigue && get_fatigue() >= fatigue_levels::EXHAUSTED ) ) { + if( !can_power_mutation( mut ) ) { // Insufficient Foo to *maintain* operation is handled in player::suffer add_msg_if_player( m_warning, _( "You feel like using your %s would kill you!" ), mdata.name() ); From 93c0be4f340542326ffd6fbd157da9b28c2abee1 Mon Sep 17 00:00:00 2001 From: BevapDin Date: Fri, 19 Jun 2020 23:42:30 +0200 Subject: [PATCH 018/206] Fix "Game fails to spawn electric starting vehicles" (#41453) * Fix motors in vehicles not being enabled when the vehicle is created. An electric motor (the item) is not an engine (`item::is_engine` yields false). So those engines were not enabled when the vehicles was created. * Add default overmap locations to search to place starting vehicles. Otherwise vehicles that don't have any engine (e.g. shopping cart) can never be placed as they don't have a ground velocity, nor can they float. --- src/game.cpp | 4 ++++ src/vehicle.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/game.cpp b/src/game.cpp index 81b108da60f58..8ef03519de322 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -833,6 +833,10 @@ vehicle *game::place_vehicle_nearby( const vproto_id &id, const point &origin, i } else if( veh.can_float() ) { search_types.push_back( "river" ); search_types.push_back( "lake" ); + } else { + // some default locations + search_types.push_back( "road" ); + search_types.push_back( "field" ); } } for( const std::string &search_type : search_types ) { diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 28e8f2ead9818..4082df2262519 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -371,7 +371,7 @@ void vehicle::init_state( int init_veh_fuel, int init_veh_status ) { // vehicle parts excluding engines are by default turned off for( auto &pt : parts ) { - pt.enabled = pt.base.is_engine(); + pt.enabled = pt.is_engine(); } bool destroySeats = false; From 23565d2507177438238d7d5b8d6235ba45d866b5 Mon Sep 17 00:00:00 2001 From: BevapDin Date: Fri, 19 Jun 2020 23:46:54 +0200 Subject: [PATCH 019/206] Fix Glitched 4th of July ascii art (#41452) --- data/title/en.halloween | 52 ++++++++++++++++++++--------------------- src/main_menu.cpp | 42 +++++---------------------------- 2 files changed, 32 insertions(+), 62 deletions(-) diff --git a/data/title/en.halloween b/data/title/en.halloween index b5b2785bb65c0..2b4ddc345e658 100644 --- a/data/title/en.halloween +++ b/data/title/en.halloween @@ -1,29 +1,29 @@ # The ASCII art must be 18 lines in height (6 lines per ascii art text line). # Max length of a line is 80 characters; the following line is for reference. ################################################################################ - ▄████▄ ▄▄▄ ▄████████▓ ▄█▄ ▄████▄ ██▓ ▓██ ██▓ ████▄▄ ███▄▄███▄ -▒██▀ ▀█ ▒████▄ ▓ ██▒ ▓▒▒████▄ ▒██▀ ▀█ ▓██▒ ▒██ ██▒▒██ ▒▓██▒▀██ ██▒ -▒▓█ ▄ ▒██ ▀█▄ ▒ ▓██░ ▒░▒██ ▀█▄ ▒▓█ ▄▒██░ ▒██ ██░░ ▓██▄ ▓██ ▓██░▒ -▒▓▓▄ ▄██▒░██▄▄▄▄██░ ▓██▓ ░ ░██▄▄▄▄██▒▓▓▄ ▄██▒██░ ░ ▐██▓░ ▒ ██▒██ ▒██ ▓ -▒ ▓███▀ ░ ▓█ ▓██▒ ▒██▒ ░ ▓█ ▓██▒ ▓███▀ ░██████▒ ░ ██▒▓░▒██████▒▒██▒ ░██▒░ -░ ░▒ ▒ ░ ▒▒ ▓▒█░ ▒ ░░ ▒▒ ▓▒█░ ░▒ ▒ ░ ▒░▓ ░ ██▒▒▒ ▒ ▒▓▒ ▒ ░ ▒░ ░ ░ - ░ ▒ ▒ ▒▒ ░ ░ ▒ ▒▒ ░ ░ ▒ ░ ░ ▒ ░▓██ ░▒░ ░ ░▒ ░ ░ ░ ░ -░ ░ ▒ ░ ░ ▒ ░ ░ ░ ▒ ▒ ░░ ░ ░ ░ ░ ░ -░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ -░ ▓█████▄ ▄▄▄ ██▀███ ██ ▄█▀ ▓█████▄ ▄▄▄░ ▓██ ██▓ █████▄ - ▒██▀ ██▌▒████▄ ▓██ ▒ ██▒ ██▄█▒ ▒██▀ ██▌▒████▄ ▒██ ██▒▒██ ▒ - ░██ █▌▒██ ▀█▄ ▓██ ░▄█ ▒▓███▄░ ░██ █▌▒██ ▀█▄ ▒██ ██░░ ▓██▄ - ░▓█▄ ▌░██▄▄▄▄██ ▒██▀▀█▄ ▓██ █▄ ░▓█▄ ▌░██▄▄▄▄██ ░ ▐██▓░ ▒ ██▒ - ░▒████▓ ▓█ ▓██▒░██▓ ▒██▒▒██▒ █▄ ░▒████▓ ▓█ ▓██▒ ░ ██▒▓░▒██████▒▒ - ▒▒▓ ▒ ▒▒ ▓▒█░░ ▒▓ ░▒▓░▒ ▒▒ ▓▒ ▒▒▓ ▒ ▒▒ ▓▒█░ ██▒▒▒ ▒ ▒▓▒ ▒ ░ - ░ ▒ ▒ ▒ ▒▒ ░ ░▒ ░ ▒░░ ░▒ ▒░ ░ ▒ ▒ ▒ ▒▒ ░▓██ ░▒░ ░ ░▒ ░ ░ - ░ ░ ░ ░ ▒ ░░ ░ ░ ░░ ░ ░ ░ ░ ░ ▒ ▒ ▒ ░░ ░ ░ ░ - ░ ░▄▄▄ ░ ██░ ██ ▓█████ ▄▄▄ ▓█████▄░ ░ ░ - ░ ▒████▄ ▓██░ ██▒▓█ ▀▒████▄ ▒██▀ ██▌ ░ - ▒██ ▀█▄ ▒██▀▀██░▒███ ▒██ ▀█▄ ░██ █▌ - ░██▄▄▄▄██ ░▓█ ░██ ▒▓█ ▄░██▄▄▄▄██ ░▓█▄ ▌ - ▓█ ▓██▒░▓█▒░██▓░▒████▒▓█ ▓██▒░▒████▓ - ▒▒ ▓▒█░ ▒ ░░▒░▒░░ ▒░ ░▒▒ ▓▒█░ ▒▒▓ ▒ - ▒ ▒▒ ░ ▒ ░▒░ ░ ░ ░ ░ ▒ ▒▒ ░ ░ ▒ ▒ - ░ ▒ ░ ░░ ░ ░ ░ ▒ ░ ░ ░ - ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ +▓▓▓▓▄ ▄▄▄ ▄▓▓▓▓▓▓▓▓▓ ▄▓▄ ▄▓▓▓▓▄ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓▓▄▄ ▓▓▓▄▄▓▓▓▄ +▓▓▀ ▀▓ ▒▓▓▓▓▄ ▓ ▓▓▒ ▓▒▒▓▓▓▓▄ ▒▓▓▀ ▀▓ ▓▓▓▒ ▒▓▓ ▓▓▒▒▓▓ ▒▓▓▓▒▀▓▓ ▓▓▒ +▒▓▓ ▄ ▒▓▓ ▀▓▄ ▒ ▓▓▓░ ▒░▒▓▓ ▀▓▄ ▒▓▓ ▄▒▓▓░ ▒▓▓ ▓▓░░ ▓▓▓▄ ▓▓▓ ▓▓▓░▒ +▒▓▓▄ ▄▓▓▒░▓▓▄▄▄▄▓▓░ ▓▓▓▓ ░ ░▓▓▄▄▄▄▓▓▒▓▓▄ ▄▓▓▒▓▓░ ░ ▐▓▓▓░ ▒ ▓▓▒▓▓ ▒▓▓ ▓ +▒ ▓▓▓▓▀ ░ ▓▓ ▓▓▓▒ ▒▓▓▒ ░ ▓▓ ▓▓▓▒ ▓▓▓▓▀ ░▓▓▓▓▓▓▒ ░ ▓▓▒▓░▒▓▓▓▓▓▓▒▒▓▓▒ ░▓▓▒░ +░ ░▒ ▒ ░ ▒▒ ▓▒▓░ ▒ ░░ ▒▒ ▓▒▓░ ░▒ ▒ ░ ▒░▓ ░ ▓▓▒▒▒ ▒ ▒▓▒ ▒ ░ ▒░ ░ ░ + ░ ▒ ▒ ▒▒ ░ ░ ▒ ▒▒ ░ ░ ▒ ░ ░ ▒ ░▓▓▓ ░▒░ ░ ░▒ ░ ░ ░ ░ +░ ░ ▒ ░ ░ ▒ ░ ░ ░ ▒ ▒ ░░ ░ ░ ░ ░ ░ +░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ░ ░ +░ ▓▓▓▓▓▓▄ ▄▄▄ ▓▓▀▓▓▓ ▓▓ ▄▓▀ ▓▓▓▓▓▓▄ ▄▄▄░ ▓▓▓ ▓▓▓ ▓▓▓▓▓▄ +▓▓▀ ▓▓▌▒▓▓▓▓▄ ▓▓▓ ▒ ▓▓▒ ▓▓▄▓▒ ▒▓▓▀ ▓▓▌▒▓▓▓▓▄ ▒▓▓ ▓▓▒▒▓▓ ▒ +▓▓ ▓▌▒▓▓ ▀▓▄ ▓▓▓ ░▄▓ ▒▓▓▓▓▄░ ░▓▓ ▓▌▒▓▓ ▀▓▄ ▒▓▓ ▓▓░░ ▓▓▓▄ + ░▓▓▄ ▌░▓▓▄▄▄▄▓▓ ▒▓▓▀▀▓▄ ▓▓▓ ▓▄ ░▓▓▄ ▌░▓▓▄▄▄▄▓▓ ░ ▐▓▓▓░ ▒ ▓▓▒ + ░▒▓▓▓▓▓ ▓▓ ▓▓▓▒░▓▓▓ ▒▓▓▒▒▓▓▒ ▓▄ ░▒▓▓▓▓▓ ▓▓ ▓▓▓▒ ░ ▓▓▒▓░▒▓▓▓▓▓▓▒▒ + ▒▒▓ ▒ ▒▒ ▓▒▓░░ ▒▓ ░▒▓░▒ ▒▒ ▓▒ ▒▒▓ ▒ ▒▒ ▓▒▓░ ▓▓▒▒▒ ▒ ▒▓▒ ▒ ░ + ░ ▒ ▒ ▒ ▒▒ ░ ░▒ ░ ▒░░ ░▒ ▒░ ░ ▒ ▒ ▒ ▒▒ ░▓▓▓ ░▒░ ░ ░▒ ░ ░ + ░ ░ ░ ░ ▒ ░░ ░ ░ ░░ ░ ░ ░ ░ ░ ▒ ▒ ▒ ░░ ░ ░ ░ + ░ ░▄▄▄ ░ ▓▓░ ▓▓ ▓▓▓▓▓▓ ▄▄▄ ▓▓▓▓▓▓▄░ ░ ░ + ░ ▒▓▓▓▓▄ ▓▓▓░ ▓▓▒▓▓ ▀▒▓▓▓▓▄ ▒▓▓▀ ▓▓▌ ░ +▓▓ ▀▓▄ ▒▓▓▀▀▓▓░▒▓▓▓ ▒▓▓ ▀▓▄ ░▓▓ ▓▌ +▓▓▄▄▄▄▓▓ ░▓▓ ░▓▓ ▒▓▓ ▄░▓▓▄▄▄▄▓▓ ░▓▓▄ ▌ +▓ ▓▓▓▒░▓▓▒░▓▓▓░▒▓▓▓▓▒▓▓ ▓▓▓▒░▒▓▓▓▓▓ + ▒▒ ▓▒▓░ ▒ ░░▒░▒░░ ▒░ ░▒▒ ▓▒▓░ ▒▒▓ ▒ + ▒ ▒▒ ░ ▒ ░▒░ ░ ░ ░ ░ ▒ ▒▒ ░ ░ ▒ ▒ + ░ ▒ ░ ░░ ░ ░ ░ ▒ ░ ░ ░ + ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ diff --git a/src/main_menu.cpp b/src/main_menu.cpp index 0310a658caa79..89c437fe55200 100644 --- a/src/main_menu.cpp +++ b/src/main_menu.cpp @@ -139,10 +139,6 @@ void main_menu::print_menu( const catacurses::window &w_open, int iSel, const po int iLine = 0; const int iOffsetX = ( window_width - FULL_SCREEN_WIDTH ) / 2; - const nc_color cColor1 = c_light_cyan; - const nc_color cColor2 = c_light_blue; - const nc_color cColor3 = c_light_blue; - switch( current_holiday ) { case holiday::new_year: break; @@ -165,43 +161,17 @@ void main_menu::print_menu( const catacurses::window &w_open, int iSel, const po if( mmenu_title.size() > 1 ) { for( size_t i = 0; i < mmenu_title.size(); ++i ) { - switch( current_holiday ) { - case holiday::halloween: { - static const std::string marker = "█"; - const utf8_wrapper text( mmenu_title[i] ); - for( size_t j = 0; j < text.size(); j++ ) { - std::string temp = text.substr_display( j, 1 ).str(); - if( temp != " " ) { - mvwprintz( w_open, point( iOffsetX + j, iLine ), - ( temp != marker ) ? c_red : ( i < 9 ? cColor1 : cColor2 ), - "%s", ( temp == marker ) ? "▓" : temp ); - } - } - iLine++; - } - break; - case holiday::thanksgiving: - case holiday::new_year: - case holiday::easter: - case holiday::christmas: { - nc_color cur_color = c_white; - nc_color base_color = c_white; - print_colored_text( w_open, point( iOffsetX, iLine++ ), cur_color, base_color, mmenu_title[i] ); - } - break; - case holiday::none: - case holiday::num_holiday: - default: - mvwprintz( w_open, point( iOffsetX, iLine++ ), i < 6 ? cColor1 : cColor2, "%s", mmenu_title[i] ); - break; - } + nc_color cur_color = c_white; + nc_color base_color = c_white; + print_colored_text( w_open, point( iOffsetX, iLine++ ), cur_color, base_color, mmenu_title[i] ); } } else { - center_print( w_open, iLine++, cColor1, mmenu_title[0] ); + center_print( w_open, iLine++, c_light_cyan, mmenu_title[0] ); } iLine++; - center_print( w_open, iLine, cColor3, string_format( _( "Version: %s" ), getVersionString() ) ); + center_print( w_open, iLine, c_light_blue, string_format( _( "Version: %s" ), + getVersionString() ) ); int menu_length = 0; for( size_t i = 0; i < vMenuItems.size(); ++i ) { From c2491abc40d2614d593a1d016a340792eac78a07 Mon Sep 17 00:00:00 2001 From: eso Date: Fri, 19 Jun 2020 15:13:30 -0700 Subject: [PATCH 020/206] fix volume multiplier display in item info --- src/item_pocket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/item_pocket.cpp b/src/item_pocket.cpp index 75b4c5ecdd72f..126387176e3ed 100644 --- a/src/item_pocket.cpp +++ b/src/item_pocket.cpp @@ -772,7 +772,7 @@ void item_pocket::general_info( std::vector &info, int pocket_number, info.emplace_back( "DESCRIPTION", string_format( _( "This pocket expands at %.0f%% of the rate of volume of items inside." ), - data->weight_multiplier * 100 ) ); + data->volume_multiplier * 100 ) ); } } From 99cc76b8044dd5cd9829630a26ebf0389b1d689a Mon Sep 17 00:00:00 2001 From: Lamandus <33199510+Lamandus@users.noreply.github.com> Date: Sat, 20 Jun 2020 00:18:53 +0200 Subject: [PATCH 021/206] Add artificial sweetener into various recipes (#40955) --- data/json/items/comestibles/junkfood.json | 2 +- data/json/recipes/food/frozen.json | 16 ++-- data/json/recipes/recipe_food.json | 112 +++++++++++++++++----- tests/iteminfo_test.cpp | 2 +- 4 files changed, 99 insertions(+), 33 deletions(-) diff --git a/data/json/items/comestibles/junkfood.json b/data/json/items/comestibles/junkfood.json index 982aa481e1c3a..4d518506e6ac4 100644 --- a/data/json/items/comestibles/junkfood.json +++ b/data/json/items/comestibles/junkfood.json @@ -944,7 +944,7 @@ "spoils_in": "10 days", "comestible_type": "FOOD", "symbol": "%", - "calories": 140, + "calories": 120, "description": "Crunchy and delicious waffles with real maple syrup, with delicious chocolate baked right in.", "price": 650, "price_postapoc": 100, diff --git a/data/json/recipes/food/frozen.json b/data/json/recipes/food/frozen.json index a12f0018ed487..8889cfa1c251a 100644 --- a/data/json/recipes/food/frozen.json +++ b/data/json/recipes/food/frozen.json @@ -30,7 +30,7 @@ [ "cherries", 1 ], [ "irradiated_cherries", 1 ] ], - [ [ "sugar", 10 ] ], + [ [ "sugar", 10 ], [ "artificial_sweetener", 10 ] ], [ [ "water_clean", 1 ] ] ] }, @@ -63,7 +63,7 @@ [ "cherries", 2 ], [ "irradiated_cherries", 2 ] ], - [ [ "sugar", 20 ] ], + [ [ "sugar", 20 ], [ "artificial_sweetener", 20 ] ], [ [ "water_clean", 1 ] ] ] }, @@ -96,7 +96,7 @@ [ "blackberries", 1 ], [ "irradiated_blackberries", 1 ] ], - [ [ "sugar", 20 ] ] + [ [ "sugar", 20 ], [ "artificial_sweetener", 20 ] ] ] }, { @@ -128,7 +128,7 @@ [ "blackberries", 1 ], [ "irradiated_blackberries", 1 ] ], - [ [ "sugar", 20 ] ], + [ [ "sugar", 20 ], [ "artificial_sweetener", 20 ] ], [ [ "salt", 30 ] ], [ [ "bag_plastic", 2 ] ] ] @@ -186,7 +186,7 @@ [ "blackberries", 1 ], [ "irradiated_blackberries", 1 ] ], - [ [ "sugar", 10 ] ], + [ [ "sugar", 10 ], [ "artificial_sweetener", 10 ] ], [ [ "powder_eggs", 5 ], [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ] ] }, @@ -201,7 +201,7 @@ "book_learn": [ [ "dairy_book", 2 ] ], "qualities": [ { "id": "COOK", "level": 3 } ], "tools": [ [ [ "rock_quern", -1 ], [ "clay_quern", -1 ], [ "mortar_pestle", -1 ], [ "food_processor", 10 ] ] ], - "components": [ [ [ "yoghurt", 1 ] ], [ [ "sugar", 5 ] ] ] + "components": [ [ [ "yoghurt", 1 ] ], [ [ "sugar", 5 ], [ "artificial_sweetener", 5 ] ] ] }, { "result": "icecream_sorbet", @@ -216,7 +216,7 @@ "components": [ [ [ "water_clean", 1 ], [ "kompot", 1 ] ], [ [ "juice", 1 ], [ "oj", 1 ], [ "apple_cider", 1 ], [ "lemonade", 1 ], [ "cranberry_juice", 1 ] ], - [ [ "sugar", 5 ] ] + [ [ "sugar", 5 ], [ "artificial_sweetener", 5 ] ] ] }, { @@ -248,7 +248,7 @@ [ "blackberries", 1 ], [ "irradiated_blackberries", 1 ] ], - [ [ "sugar", 15 ] ] + [ [ "sugar", 15 ], [ "artificial_sweetener", 15 ] ] ] } ] diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index 9cf6514cf0073..f1b4bf36dc650 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -14,7 +14,7 @@ "components": [ [ [ "flour", 4 ] ], [ [ "salt", 12 ] ], - [ [ "sugar", 24 ] ], + [ [ "sugar", 24 ], [ "artificial_sweetener", 24 ] ], [ [ "chocolate", 3 ] ], [ [ "any_butter_or_oil", 2, "LIST" ] ], [ [ "powder_eggs", 2 ], [ "eggs_bird", 2, "LIST" ], [ "egg_reptile", 2 ] ], @@ -33,7 +33,12 @@ "qualities": [ { "id": "COOK", "level": 2 }, { "id": "CUT", "level": 1 } ], "tools": [ [ [ "surface_heat", 5, "LIST" ] ] ], "charges": 8, - "components": [ [ [ "flour", 10 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "salt", 1 ] ], [ [ "sugar", 5 ] ] ] + "components": [ + [ [ "flour", 10 ] ], + [ [ "water", 1 ], [ "water_clean", 1 ] ], + [ [ "salt", 1 ] ], + [ [ "sugar", 5 ], [ "artificial_sweetener", 5 ] ] + ] }, { "type": "recipe", @@ -485,7 +490,7 @@ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "dry_rice", 1 ] ], [ [ "vinegar", 1 ] ], - [ [ "sugar", 1 ], [ "soysauce", 1 ], [ "salt", 1 ], [ "seasoning_salt", 1 ] ] + [ [ "sugar", 1 ], [ "soysauce", 1 ], [ "salt", 1 ], [ "seasoning_salt", 1 ], [ "artificial_sweetener", 1 ] ] ] }, { @@ -599,6 +604,7 @@ [ "beet_syrup", 1 ], [ "syrup", 1 ], [ "sugar", 1 ], + [ "artificial_sweetener", 1 ], [ "molasses", 1 ], [ "honeycomb", 1 ], [ "honey_bottled", 1 ] @@ -1782,7 +1788,11 @@ "time": "5 m", "autolearn": true, "qualities": [ { "id": "HAMMER", "level": 1 }, { "id": "CONTAIN", "level": 1 } ], - "components": [ [ [ "irradiated_lemon", 1 ], [ "lemon", 1 ] ], [ [ "sugar", 10 ] ], [ [ "water_clean", 1 ] ] ] + "components": [ + [ [ "irradiated_lemon", 1 ], [ "lemon", 1 ] ], + [ [ "sugar", 10 ], [ "artificial_sweetener", 10 ] ], + [ [ "water_clean", 1 ] ] + ] }, { "type": "recipe", @@ -1833,7 +1843,7 @@ "autolearn": true, "flags": [ "BLIND_HARD" ], "components": [ - [ [ "sugar", 6 ] ], + [ [ "sugar", 6 ], [ "artificial_sweetener", 6 ] ], [ [ "whiskey", 1 ], [ "single_malt_whiskey", 1 ], [ "single_pot_whiskey", 1 ], [ "canadian_whiskey", 1 ] ], [ [ "coffee_syrup", 1 ], [ "coffee", 1 ] ], [ [ "milk_standard", 1, "LIST" ], [ "con_milk", 1 ] ] @@ -2222,7 +2232,13 @@ [ [ "flour", 8 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "any_butter_or_oil", 4, "LIST" ] ], - [ [ "sugar", 10 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "syrup", 1 ] ], + [ + [ "sugar", 10 ], + [ "honey_bottled", 1 ], + [ "honey_glassed", 1 ], + [ "syrup", 1 ], + [ "artificial_sweetener", 10 ] + ], [ [ "powder_eggs", 1 ], [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ] ] }, @@ -2236,7 +2252,13 @@ [ [ "flour", 8 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "any_butter_or_oil", 4, "LIST" ] ], - [ [ "sugar", 10 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "syrup", 1 ] ], + [ + [ "sugar", 10 ], + [ "honey_bottled", 1 ], + [ "honey_glassed", 1 ], + [ "syrup", 1 ], + [ "artificial_sweetener", 10 ] + ], [ [ "powder_eggs", 1 ], [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ], [ [ "weed", 5 ] ] ] @@ -2251,7 +2273,13 @@ [ [ "flour", 6 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "any_butter_or_oil", 4, "LIST" ] ], - [ [ "sugar", 10 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "syrup", 1 ] ], + [ + [ "sugar", 10 ], + [ "honey_bottled", 1 ], + [ "honey_glassed", 1 ], + [ "syrup", 1 ], + [ "artificial_sweetener", 10 ] + ], [ [ "chocolate", 1 ] ], [ [ "powder_eggs", 1 ], [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ] ] @@ -2266,7 +2294,13 @@ [ [ "flour", 6 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "any_butter_or_oil", 4, "LIST" ] ], - [ [ "sugar", 10 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "syrup", 1 ] ], + [ + [ "sugar", 10 ], + [ "honey_bottled", 1 ], + [ "honey_glassed", 1 ], + [ "syrup", 1 ], + [ "artificial_sweetener", 10 ] + ], [ [ "chocolate", 1 ] ], [ [ "powder_eggs", 1 ], [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ], [ [ "weed", 5 ] ] @@ -2561,7 +2595,8 @@ [ "molasses", 1 ], [ "honeycomb", 1 ], [ "honey_bottled", 1 ], - [ "honey_glassed", 1 ] + [ "honey_glassed", 1 ], + [ "artificial_sweetener", 10 ] ] ] }, @@ -2586,7 +2621,8 @@ [ "molasses", 1 ], [ "honeycomb", 1 ], [ "honey_bottled", 1 ], - [ "honey_glassed", 1 ] + [ "honey_glassed", 1 ], + [ "artificial_sweetener", 10 ] ] ] }, @@ -2787,6 +2823,7 @@ [ [ "oatmeal", 1 ] ], [ [ "sugar", 4 ], + [ "artificial_sweetener", 4 ], [ "syrup", 1 ], [ "beet_syrup", 1 ], [ "molasses", 1 ], @@ -3033,6 +3070,7 @@ [ "honey_bottled", 6 ], [ "honey_glassed", 3 ], [ "sugar", 20 ], + [ "artificial_sweetener", 20 ], [ "syrup", 8 ], [ "beet_syrup", 8 ] ], @@ -3058,6 +3096,7 @@ [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "sugar", 10 ], + [ "artificial_sweetener", 10 ], [ "syrup", 3 ], [ "beet_syrup", 3 ] ], @@ -3299,7 +3338,7 @@ [ [ "milk_standard_raw", 1, "LIST" ], [ "milk_powder", 1 ] ], [ [ "powder_eggs", 1 ], [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ], [ [ "syrup", 1 ] ], - [ [ "sugar", 2 ] ], + [ [ "sugar", 2 ], [ "artificial_sweetener", 2 ] ], [ [ "any_butter_or_oil", 1, "LIST" ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] @@ -3319,7 +3358,7 @@ [ [ "milk_standard_raw", 1, "LIST" ], [ "milk_powder", 1 ] ], [ [ "powder_eggs", 1 ], [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ], [ [ "syrup", 1 ] ], - [ [ "sugar", 2 ] ], + [ [ "sugar", 2 ], [ "artificial_sweetener", 2 ] ], [ [ "any_butter_or_oil", 1, "LIST" ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "sweet_fruit_like", 1, "LIST" ], [ "jam_fruit", 1 ] ] @@ -3341,7 +3380,7 @@ [ [ "milk_standard_raw", 1, "LIST" ], [ "milk_powder", 1 ] ], [ [ "powder_eggs", 1 ], [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ], [ [ "syrup", 1 ] ], - [ [ "sugar", 2 ] ], + [ [ "sugar", 2 ], [ "artificial_sweetener", 2 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "chocolate", 1 ], [ "choc_drink", 2 ] ] ] @@ -3362,6 +3401,7 @@ [ [ "sweet_fruit", 1, "LIST" ] ], [ [ "sugar", 5 ], + [ "artificial_sweetener", 5 ], [ "honeycomb", 1 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], @@ -3386,6 +3426,7 @@ [ [ "flour", 8 ], [ "oatmeal", 8 ], [ "dry_rice", 2 ] ], [ [ "sugar", 16 ], + [ "artificial_sweetener", 16 ], [ "syrup", 1 ], [ "beet_syrup", 1 ], [ "molasses", 1 ], @@ -3442,6 +3483,7 @@ [ [ "salt", 50 ] ], [ [ "sugar", 20 ], + [ "artificial_sweetener", 20 ], [ "honeycomb", 1 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], @@ -3495,7 +3537,7 @@ "components": [ [ [ "flour", 30 ] ], [ [ "sweet_fruit_like", 8, "LIST" ] ], - [ [ "sugar", 20 ], [ "syrup", 4 ], [ "beet_syrup", 4 ], [ "molasses", 4 ] ], + [ [ "sugar", 20 ], [ "syrup", 4 ], [ "beet_syrup", 4 ], [ "molasses", 4 ], [ "artificial_sweetener", 20 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] }, @@ -4912,7 +4954,7 @@ [ [ "yeast", 1 ] ], [ [ "milk_standard_raw", 1, "LIST" ], [ "milk_powder", 1 ] ], [ [ "powder_eggs", 2 ], [ "eggs_bird", 2, "LIST" ], [ "egg_reptile", 2 ] ], - [ [ "sugar", 2 ] ], + [ [ "sugar", 2 ], [ "artificial_sweetener", 2 ] ], [ [ "any_butter_or_oil", 8, "LIST" ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] @@ -4962,6 +5004,7 @@ ], [ [ "sugar", 1 ], + [ "artificial_sweetener", 1 ], [ "mustard", 1 ], [ "mayonnaise", 1 ], [ "seasoning_salt", 1 ], @@ -4998,6 +5041,7 @@ [ [ "water_clean", 1 ] ], [ [ "sugar", 10 ], + [ "artificial_sweetener", 10 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "honeycomb", 1 ], @@ -5277,7 +5321,13 @@ [ [ "tea_raw", 1 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "milk_standard_raw", 1, "LIST" ], [ "milk_powder", 1 ], [ "con_milk", 1 ] ], - [ [ "sugar", 10 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "syrup", 1 ] ], + [ + [ "sugar", 10 ], + [ "honey_bottled", 1 ], + [ "honey_glassed", 1 ], + [ "syrup", 1 ], + [ "artificial_sweetener", 10 ] + ], [ [ "pepper", 10 ] ], [ [ "cinnamon", 10 ] ] ] @@ -5503,6 +5553,7 @@ [ [ "edible_tallow_lard", 1, "LIST" ] ], [ [ "sugar", 10 ], + [ "artificial_sweetener", 10 ], [ "syrup", 1 ], [ "beet_syrup", 1 ], [ "molasses", 1 ], @@ -5554,7 +5605,7 @@ "components": [ [ [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ], [ [ "milk_standard_raw", 1, "LIST" ], [ "milk_powder", 1 ] ], - [ [ "sugar", 4 ] ], + [ [ "sugar", 4 ], [ "artificial_sweetener", 4 ] ], [ [ "con_milk", 1 ] ], [ [ "cinnamon", 2 ] ] ] @@ -5574,7 +5625,7 @@ "components": [ [ [ "eggs_bird", 1, "LIST" ], [ "egg_reptile", 1 ] ], [ [ "milk_standard_raw", 1, "LIST" ], [ "milk_powder", 1 ] ], - [ [ "sugar", 4 ] ], + [ [ "sugar", 4 ], [ "artificial_sweetener", 4 ] ], [ [ "con_milk", 1 ] ], [ [ "hard_liquor_chem", 1, "LIST" ] ], [ [ "cinnamon", 2 ] ] @@ -5596,7 +5647,7 @@ [ [ "chocolate", 1 ] ], [ [ "milk_standard_raw", 1, "LIST" ], [ "con_milk", 1 ], [ "milk_powder", 1 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ], - [ [ "sugar", 5 ] ] + [ [ "sugar", 5 ], [ "artificial_sweetener", 5 ] ] ] }, { @@ -5615,7 +5666,7 @@ [ [ "chocolate", 2 ] ], [ [ "milk_standard_raw", 1, "LIST" ], [ "con_milk", 1 ], [ "milk_powder", 1 ] ], [ [ "water", 1 ] ], - [ [ "sugar", 5 ] ], + [ [ "sugar", 5 ], [ "artificial_sweetener", 5 ] ], [ [ "chilly-p", 1 ] ], [ [ "cinnamon", 1 ] ], [ [ "water", 6 ], [ "water_clean", 6 ] ] @@ -6042,7 +6093,10 @@ "autolearn": true, "qualities": [ { "id": "COOK", "level": 1 } ], "tools": [ [ [ "food_processor", 40 ] ] ], - "components": [ [ [ "peanut_unshelled", 3 ] ], [ [ "sugar", 10 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ] ] ] + "components": [ + [ [ "peanut_unshelled", 3 ] ], + [ [ "sugar", 10 ], [ "artificial_sweetener", 10 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ] ] + ] }, { "type": "recipe", @@ -6070,7 +6124,14 @@ [ "walnut_unshelled", 5 ], [ "acorns", 5 ] ], - [ [ "sugar", 10 ], [ "honeycomb", 1 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "syrup", 1 ] ] + [ + [ "sugar", 10 ], + [ "artificial_sweetener", 10 ], + [ "honeycomb", 1 ], + [ "honey_bottled", 1 ], + [ "honey_glassed", 1 ], + [ "syrup", 1 ] + ] ] }, { @@ -6513,6 +6574,7 @@ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "sugar", 5 ], + [ "artificial_sweetener", 5 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "honeycomb", 1 ], @@ -6537,6 +6599,7 @@ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "sugar", 5 ], + [ "artificial_sweetener", 5 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "honeycomb", 1 ], @@ -6559,6 +6622,7 @@ [ [ "milk_standard", 1, "LIST" ], [ "milk_powder", 1 ], [ "con_milk", 1 ] ], [ [ "sugar", 5 ], + [ "artificial_sweetener", 5 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "honeycomb", 1 ], @@ -6583,6 +6647,7 @@ [ [ "water", 1 ], [ "water_clean", 1 ] ], [ [ "sugar", 5 ], + [ "artificial_sweetener", 5 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "honeycomb", 1 ], @@ -6605,6 +6670,7 @@ [ [ "milk_standard", 1, "LIST" ], [ "milk_powder", 1 ], [ "con_milk", 1 ] ], [ [ "sugar", 5 ], + [ "artificial_sweetener", 5 ], [ "honey_bottled", 1 ], [ "honey_glassed", 1 ], [ "honeycomb", 1 ], diff --git a/tests/iteminfo_test.cpp b/tests/iteminfo_test.cpp index 7b3bcf4ba9950..c2a7cd106adfa 100644 --- a/tests/iteminfo_test.cpp +++ b/tests/iteminfo_test.cpp @@ -1338,7 +1338,7 @@ TEST_CASE( "nutrients in food", "[iteminfo][food]" ) "--\n" "Nutrition will vary with chosen ingredients.\n" "Calories (kcal):" - " 317-469" + " 127-469" " Quench: 0\n" ); CHECK( item_info_str( ice_cream, { iteminfo_parts::FOOD_VITAMINS } ) == From c2cd66c9ca07995c7e6d5eb102d1e9e9c4ccde3c Mon Sep 17 00:00:00 2001 From: Lamandus <33199510+Lamandus@users.noreply.github.com> Date: Sat, 20 Jun 2020 00:21:04 +0200 Subject: [PATCH 022/206] Adding green tea, fruit tea and making tea to black tea. (#41096) --- data/json/itemgroups/Food/food.json | 3 +++ .../locations_commercial.json | 1 + data/json/itemgroups/SUS/domestic.json | 1 + data/json/itemgroups/food_service.json | 13 ++++++++- data/json/items/comestibles/drink.json | 27 +++++++++++++++++-- data/json/items/comestibles/other.json | 18 +++++++++++-- data/json/items/comestibles/raw_veggy.json | 9 ++++++- data/json/npcs/items_generic.json | 1 + data/json/recipes/recipe_food.json | 12 +++++++++ 9 files changed, 79 insertions(+), 6 deletions(-) diff --git a/data/json/itemgroups/Food/food.json b/data/json/itemgroups/Food/food.json index 71c41f107b53e..619ad523ac49a 100644 --- a/data/json/itemgroups/Food/food.json +++ b/data/json/itemgroups/Food/food.json @@ -456,6 +456,7 @@ { "item": "granola", "prob": 10 }, { "item": "cookies", "prob": 80 }, { "item": "tea_raw", "prob": 10 }, + { "item": "tea_green_raw", "prob": 5 }, { "item": "coffee_raw", "prob": 15 }, { "item": "choco_coffee_beans", "prob": 10 }, { "item": "salt", "prob": 10 }, @@ -798,6 +799,8 @@ "subtype": "distribution", "entries": [ { "item": "tea_bag", "prob": 20, "container-item": "box_tea", "charges-min": 1, "charges-max": 10 }, + { "item": "tea_fruit_bag", "prob": 10, "container-item": "box_tea", "charges-min": 1, "charges-max": 10 }, + { "item": "tea_green_bag", "prob": 10, "container-item": "box_tea", "charges-min": 1, "charges-max": 10 }, { "item": "herbal_tea_bag", "prob": 5, "container-item": "box_tea", "charges-min": 1, "charges-max": 10 } ] } diff --git a/data/json/itemgroups/Locations_MapExtras/locations_commercial.json b/data/json/itemgroups/Locations_MapExtras/locations_commercial.json index a1f27caac089b..634fc8280163a 100644 --- a/data/json/itemgroups/Locations_MapExtras/locations_commercial.json +++ b/data/json/itemgroups/Locations_MapExtras/locations_commercial.json @@ -716,6 +716,7 @@ { "group": "salty_snacks", "prob": 121 }, [ "sandwich_t", 22 ], [ "tea_raw", 50 ], + [ "tea_green_raw", 25 ], [ "cookies", 25 ], [ "brownie", 25 ], [ "coffee_raw", 90 ], diff --git a/data/json/itemgroups/SUS/domestic.json b/data/json/itemgroups/SUS/domestic.json index c7d93b0b641d9..d2827d3f4bca7 100644 --- a/data/json/itemgroups/SUS/domestic.json +++ b/data/json/itemgroups/SUS/domestic.json @@ -247,6 +247,7 @@ "prob": 80 }, { "item": "tea_raw", "count": [ 1, 10 ], "prob": 80 }, + { "item": "tea_green_raw", "count": [ 1, 10 ], "prob": 40 }, { "item": "teapot", "prob": 70 }, { "item": "kettle", "prob": 50 }, { "item": "sugar", "charges": [ 10, 120 ], "container-item": "jar_glass", "prob": 90 }, diff --git a/data/json/itemgroups/food_service.json b/data/json/itemgroups/food_service.json index c5df6f8bc75cd..a1bb28955faf3 100644 --- a/data/json/itemgroups/food_service.json +++ b/data/json/itemgroups/food_service.json @@ -83,6 +83,7 @@ "entries": [ { "item": "tea", "prob": 70 }, { "item": "tea_raw", "prob": 70 }, + { "item": "tea_green_raw", "prob": 35 }, { "item": "ceramic_cup", "prob": 70 }, { "item": "teapot", "prob": 70 }, { "item": "clay_teapot", "prob": 70 }, @@ -122,6 +123,13 @@ { "item": "raw_burdock", "prob": 10, "charges-min": 1, "charges-max": 48, "container-item": "jar_3l_glass" }, { "item": "chamomile", "prob": 30, "charges-min": 1, "charges-max": 2, "container-item": "jar_glass_sealed" }, { "item": "tea_raw", "prob": 60, "charges-min": 10, "charges-max": 40, "container-item": "jar_glass_sealed" }, + { + "item": "tea_green_raw", + "prob": 30, + "charges-min": 10, + "charges-max": 40, + "container-item": "jar_glass_sealed" + }, { "item": "wild_herbs", "prob": 50, @@ -149,7 +157,7 @@ { "id": "teashop_kitchen_counter", "type": "item_group", - "items": [ [ "sugar", 30 ], [ "tea_raw", 40 ], [ "teapot", 20 ], [ "spoon", 20 ] ] + "items": [ [ "sugar", 30 ], [ "tea_raw", 40 ], [ "tea_green_raw", 20 ], [ "teapot", 20 ], [ "spoon", 20 ] ] }, { "id": "bar_alcohol", @@ -386,6 +394,7 @@ { "item": "coffee_syrup", "prob": 15 }, { "item": "cookies", "prob": 35 }, { "item": "tea_raw", "prob": 50 }, + { "item": "tea_green_raw", "prob": 25 }, { "group": "teabag_box", "prob": 30 } ] }, @@ -404,6 +413,7 @@ { "item": "sugar", "prob": 70 }, { "item": "artificial_sweetener", "prob": 15 }, { "item": "tea_raw", "prob": 15 }, + { "item": "tea_green_raw", "prob": 10 }, { "item": "wrapper", "prob": 75 }, { "group": "teabag_box", "prob": 10 } ] @@ -748,6 +758,7 @@ { "item": "coffee_syrup", "prob": 35 }, { "item": "coffee_raw", "prob": 45 }, { "item": "tea_raw", "prob": 45 }, + { "item": "tea_green_raw", "prob": 20 }, { "item": "salt", "prob": 50 }, { "item": "pepper", "prob": 50 }, { "item": "soysauce", "prob": 50 }, diff --git a/data/json/items/comestibles/drink.json b/data/json/items/comestibles/drink.json index b21b1b56321cb..39ca8c3237680 100644 --- a/data/json/items/comestibles/drink.json +++ b/data/json/items/comestibles/drink.json @@ -959,7 +959,7 @@ { "type": "COMESTIBLE", "id": "tea", - "name": "tea", + "name": "black tea", "weight": "250 g", "color": "brown", "fatigue_mod": 9, @@ -969,7 +969,7 @@ "symbol": "~", "quench": 40, "calories": 2, - "description": "The beverage of gentlemen everywhere, made from applying hot water to leaves of the tea plant /Camellia sinensis/.", + "description": "The beverage of gentlemen everywhere, made from applying hot water to oxidized leaves of the tea plant /Camellia sinensis/.", "price": 90, "price_postapoc": 25, "volume": "250 ml", @@ -1042,6 +1042,29 @@ "relative": { "fun": 1 }, "use_action": [ ] }, + { + "type": "COMESTIBLE", + "id": "tea_green", + "name": "green tea", + "copy-from": "tea", + "color": "green", + "fatigue_mod": 7, + "stim": 2, + "calories": 2, + "description": "Made from applying hot water to leaves of the tea plant /Camellia sinensis/. Green tea has a lighter, fresher taste than black and is traditionally preferred in Asian cultures." + }, + { + "type": "COMESTIBLE", + "id": "tea_fruit", + "name": "fruit tea", + "copy-from": "tea", + "color": "red", + "calories": 6, + "fatigue_mod": 0, + "stim": 0, + "description": "A tasty beverage made with herbs and dried fruit from plants other than the tea plant. While colloquially called 'tea', technically it's an infusion.", + "fun": 8 + }, { "type": "COMESTIBLE", "id": "coffee_sweetened", diff --git a/data/json/items/comestibles/other.json b/data/json/items/comestibles/other.json index d99edf5b4637c..2bbdfbf5befa5 100644 --- a/data/json/items/comestibles/other.json +++ b/data/json/items/comestibles/other.json @@ -745,7 +745,7 @@ "id": "tea_bag", "type": "COMESTIBLE", "comestible_type": "FOOD", - "name": { "str": "tea bag" }, + "name": { "str": "black tea bag" }, "flags": [ "IRREPLACEABLE_CONSUMABLE", "INEDIBLE" ], "weight": "5 g", "volume": "10 ml", @@ -755,7 +755,21 @@ "material": [ "paper" ], "price": 50, "price_postapoc": 200, - "description": "Paper sachet with tea leafs inside. Put it into boiling water to get your cup of tea." + "description": "A paper sachet with tea leaves inside. Put it into boiling water to make a cup of black tea." + }, + { + "id": "tea_green_bag", + "type": "COMESTIBLE", + "name": { "str": "green tea bag" }, + "copy-from": "tea_bag", + "description": "A paper sachet with tea leaves inside. Put it into boiling water to make a cup of green tea." + }, + { + "id": "tea_fruit_bag", + "type": "COMESTIBLE", + "name": { "str": "fruit tea bag" }, + "copy-from": "tea_bag", + "description": "A paper sachet with leaves and fruit parts inside. Put it into boiling water to make a cup of fruit tea." }, { "id": "herbal_tea_bag", diff --git a/data/json/items/comestibles/raw_veggy.json b/data/json/items/comestibles/raw_veggy.json index ed8f28eec782a..26d4eba267de3 100644 --- a/data/json/items/comestibles/raw_veggy.json +++ b/data/json/items/comestibles/raw_veggy.json @@ -697,7 +697,7 @@ { "type": "COMESTIBLE", "id": "tea_raw", - "name": { "str": "tea leaf", "str_pl": "tea leaves" }, + "name": { "str": "black tea leaf", "str_pl": "black tea leaves" }, "weight": "14 g", "color": "green", "fatigue_mod": 3, @@ -716,6 +716,13 @@ "charges": 20, "fun": -1 }, + { + "type": "COMESTIBLE", + "id": "tea_green_raw", + "name": { "str": "green tea leaf", "str_pl": "green tea leaves" }, + "copy-from": "tea_raw", + "description": "Dried leaves of a tropical plant. You can boil them into green tea, or you can just eat them raw. They aren't too filling though." + }, { "type": "COMESTIBLE", "id": "tomato", diff --git a/data/json/npcs/items_generic.json b/data/json/npcs/items_generic.json index a2f03681e2e4f..ce2dfede61614 100644 --- a/data/json/npcs/items_generic.json +++ b/data/json/npcs/items_generic.json @@ -1056,6 +1056,7 @@ [ "tall_tales", 1 ], [ "tazer", 5 ], [ "tea_raw", 8 ], + [ "tea_green_raw", 4 ], [ "teapot", 8 ], [ "teleumbrella", 4 ], [ "tent_kit", 6 ], diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index f1b4bf36dc650..72efc1959606a 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -6558,6 +6558,18 @@ [ [ "water_clean", 1 ] ] ] }, + { + "type": "recipe", + "result": "tea_green", + "copy-from": "tea", + "components": [ [ [ "tea_green_raw", 1 ], [ "tea_green_bag", 1 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] + }, + { + "type": "recipe", + "result": "tea_fruit", + "copy-from": "tea", + "components": [ [ [ "tea_fruit_bag", 1 ] ], [ [ "water", 1 ], [ "water_clean", 1 ] ] ] + }, { "type": "recipe", "result": "coffee_sweetened", From 5452c9feb450d89e883872de4e4f1288b0a5fc41 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Fri, 19 Jun 2020 15:58:14 -0700 Subject: [PATCH 023/206] Apply suggestions from code review --- src/advanced_inv.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index cfe1d7c068455..914baf03a09c9 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -1161,7 +1161,7 @@ void advanced_inventory::start_activity( const aim_location destarea, const aim_ } g->u.activity.values.push_back( amount_to_move ); } else { - for( auto it = sitem->items.begin(); amount_to_move > 0 && + for( std::vector::iterator it = sitem->items.begin(); amount_to_move > 0 && it != sitem->items.end(); ++it ) { if( from_vehicle ) { g->u.activity.targets.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), @@ -1186,7 +1186,7 @@ void advanced_inventory::start_activity( const aim_location destarea, const aim_ } quantities.push_back( amount_to_move ); } else { - for( auto it = sitem->items.begin(); amount_to_move > 0 && + for( std::vector::iterator it = sitem->items.begin(); amount_to_move > 0 && it != sitem->items.end(); ++it ) { if( from_vehicle ) { target_items.emplace_back( vehicle_cursor( *squares[srcarea].veh, squares[srcarea].vstor ), From 4f891396364cf0d5b25b13b3746eee09f3ec099c Mon Sep 17 00:00:00 2001 From: raithwind <44484397+raithwind@users.noreply.github.com> Date: Fri, 19 Jun 2020 23:59:02 +0100 Subject: [PATCH 024/206] Changed tanning hide recipe to include brains as an option. (#41415) --- data/json/recipes/recipe_others.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index bc4baf648cabb..e133f16a8c9c8 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -3678,7 +3678,7 @@ "tools": [ [ [ "surface_heat", 20, "LIST" ] ] ], "components": [ [ [ "water_clean", 2 ], [ "water", 2 ] ], - [ [ "tanbark", 1 ], [ "acorns", 2 ], [ "hops", 2 ], [ "pine_bough", 6 ] ], + [ [ "tanbark", 1 ], [ "acorns", 2 ], [ "hops", 2 ], [ "pine_bough", 6 ], [ "brain", 3 ] ], [ [ "salt_water", 2 ], [ "saline", 10 ], [ "salt", 10 ] ], [ [ "edible_tallow_lard", 1, "LIST" ], [ "tallow_tainted", 1 ] ], [ [ "cured_hide", 6 ] ] From e75719edd76a2d64b6680549991b4ef2898da220 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Sat, 20 Jun 2020 02:51:47 +0300 Subject: [PATCH 025/206] Fix title colors --- data/title/en.title | 36 ++++++++++++++++++------------------ data/title/ru.title | 36 ++++++++++++++++++------------------ data/title/zh_CN.title | 36 ++++++++++++++++++------------------ 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/data/title/en.title b/data/title/en.title index bd29cf9c38118..b322a59130f31 100644 --- a/data/title/en.title +++ b/data/title/en.title @@ -1,21 +1,21 @@ # The ASCII art must be 18 lines in height (6 lines per ascii art text line). # Max length of a line is 80 characters; the following line is for reference. ################################################################################ - _________ __ .__ - \_ ___ \ _____ _/ |_ _____ ____ | | ___.__ ______ _____ - / \ \/ \__ \ \ __\\__ \ _/ ___\ | | < | | / ___/ / \ - \ \____ / __ \_ | | / __ \_\ \___ | |__ \___ | \___ \ | Y Y \ - \______ /(____ / |__| (____ / \___ >|____/ / ____|/____ >|__|_| / - \/ \/ \/ \/ \/ \/ \/ - ________ .__ ________ - \______ \ _____ _______ | | __ \______ \ _____ ___.__ ______ - | | \ \__ \ \_ __ \| |/ / | | \ \__ \ < | | / ___/ - | ` \ / __ \_ | | \/| < | ` \ / __ \_ \___ | \___ \ - /_______ /(____ / |__| |__|_ \ /_______ /(____ / / ____|/____ > - \/ \/ \/ \/ \/ \/ \/ - _____ .__ .___ - / _ \ | |__ ____ _____ __| _/ - / /_\ \ | | \ _/ __ \ \__ \ / __ | - / | \| Y \\ ___/ / __ \_/ /_/ | - \____|__ /|___| / \___ >(____ /\____ | - \/ \/ \/ \/ \/ \ No newline at end of file + _________ __ .__ + \_ ___ \ _____ _/ |_ _____ ____ | | ___.__ ______ _____ + / \ \/ \__ \ \ __\\__ \ _/ ___\ | | < | | / ___/ / \ + \ \____ / __ \_ | | / __ \_\ \___ | |__ \___ | \___ \ | Y Y \ + \______ /(____ / |__| (____ / \___ >|____/ / ____|/____ >|__|_| / + \/ \/ \/ \/ \/ \/ \/ + ________ .__ ________ + \______ \ _____ _______ | | __ \______ \ _____ ___.__ ______ + | | \ \__ \ \_ __ \| |/ / | | \ \__ \ < | | / ___/ + | ` \ / __ \_ | | \/| < | ` \ / __ \_ \___ | \___ \ + /_______ /(____ / |__| |__|_ \ /_______ /(____ / / ____|/____ > + \/ \/ \/ \/ \/ \/ \/ + _____ .__ .___ + / _ \ | |__ ____ _____ __| _/ + / /_\ \ | | \ _/ __ \ \__ \ / __ | + / | \| Y \\ ___/ / __ \_/ /_/ | + \____|__ /|___| / \___ >(____ /\____ | + \/ \/ \/ \/ \/ \ No newline at end of file diff --git a/data/title/ru.title b/data/title/ru.title index 3ae7e527729c5..eaa35a11b9a36 100644 --- a/data/title/ru.title +++ b/data/title/ru.title @@ -1,18 +1,18 @@ - ______ ___ - \_ |/ _/_____ ________ _____ ___ __ ___ __ __ ______ __ __ - | < \__ \\__ __\\__ \ \ |/ / / \ | | | \____ \ / V \ - | | \ / __ \_ | | / __ \_| < / Y \| / | _(__ <| Y Y \ - |____|__ \(____ / |__| (____ /|__|_ \|___| /\__/ //____ /|__|_| / - \/ \/ \/ \/ \/ \/ \/ \/ - ___________ .. ______ - \__ ___/____ __ __ ___ __ __ __ ____ \___ \ ___ __ __ __ - | | _/ __ \ / V \ \ | || |_| |_/ __ \ / /| \ \ | || | | - | | \ ___/ | Y Y \| || _ \ |\ ___/ _/ /_| \| || / | - |____| \___ >|__|_| /|__| ||____/__| \___ > \ _____ /|__| |\__/ / - \/ \/ \/ \/ \/ \/ \/ \/ - __________ - \______ \ ______ ____ _______ ____ __ __ __ - | | _/ \ |_/ __ \\____ \ _/ __ \ / \ | | | - | |) \ | Y |\ ___/ | |) >\ ___/ _/ /\ \_| / | - |______ / |__| / \___ >| __/ \___ >\ __ /\__/ / - \/ \/ \/ |__| \/ \/ \/ \/ + ______ ___ + \_ |/ _/_____ ________ _____ ___ __ ___ __ __ ______ __ __ + | < \__ \\__ __\\__ \ \ |/ / / \ | | | \____ \ / V \ + | | \ / __ \_ | | / __ \_| < / Y \| / | _(__ <| Y Y \ + |____|__ \(____ / |__| (____ /|__|_ \|___| /\__/ //____ /|__|_| / + \/ \/ \/ \/ \/ \/ \/ \/ + ___________ .. ______ + \__ ___/____ __ __ ___ __ __ __ ____ \___ \ ___ __ __ __ + | | _/ __ \ / V \ \ | || |_| |_/ __ \ / /| \ \ | || | | + | | \ ___/ | Y Y \| || _ \ |\ ___/ _/ /_| \| || / | + |____| \___ >|__|_| /|__| ||____/__| \___ > \ _____ /|__| |\__/ / + \/ \/ \/ \/ \/ \/ \/ \/ + __________ + \______ \ ______ ____ _______ ____ __ __ __ + | | _/ \ |_/ __ \\____ \ _/ __ \ / \ | | | + | |) \ | Y |\ ___/ | |) >\ ___/ _/ /\ \_| / | + |______ / |__| / \___ >| __/ \___ >\ __ /\__/ / + \/ \/ \/ |__| \/ \/ \/ \/ diff --git a/data/title/zh_CN.title b/data/title/zh_CN.title index bcdc98f556bff..caf6cd56a59e0 100644 --- a/data/title/zh_CN.title +++ b/data/title/zh_CN.title @@ -1,18 +1,18 @@ - ** ** ** - ** ** ************* - ** ************** ** * ** - ************* * * ** *** * * - ** ** * * ** * * *** * * *** - * * * ** ** ** * * ******** ** - ** ** ** ** * ** - ** *** ** ** ** ** - *** **** *** *** **** .-. - ****** ***** **** ***** ***** ****** _ | ` - *** **** ***** ***** ***** ***** ',| \ - *** * *** _.. ** -.,,'-., / - * * /-\ ,,,,/ | | \ - *** ==========' ---- ---- ` _/`'., \ _-- - ||'''/ | `````'- /```''- | | - ,\. | '.-_`,,,,,,,,,\.\-- - / | ^ ___,,,,,,,,,,...-------''''''`````````` -*------'''''*`````````` + ** ** ** + ** ** ************* + ** ************** ** * ** + ************* * * ** *** * * + ** ** * * ** * * *** * * *** + * * * ** ** ** * * ******** ** + ** ** ** ** * ** + ** *** ** ** ** ** + *** **** *** *** **** .-. + ****** ***** **** ***** ***** ****** _ | ` + *** **** ***** ***** ***** ***** ',| \ + *** * *** _.. ** -.,,'-., / + * * /-\ ,,,,/ | | \ + *** ==========' ---- ---- ` _/`'., \ _-- + ||'''/ | `````'- /```''- | | + ,\. | '.-_`,,,,,,,,,\.\-- + / | ^ ___,,,,,,,,,,...-------''''''`````````` +*------'''''*`````````` From 5c9a51b02d11d547ad88128b6499e3d06df45b3c Mon Sep 17 00:00:00 2001 From: anonchan <65480736+anonchan@users.noreply.github.com> Date: Fri, 19 Jun 2020 17:50:35 -0700 Subject: [PATCH 026/206] disable anonymous metrics in VCPKG setup script MS collects telemetry on users who don't explicitly opt-out of vcpkg telemetry by passing the "-disableMetrics" option to the bootstrap batch file. Since users are going to be essentially piping curl into bash with this setup guide without thinking about what's going on, let's set the defaults to something more end-user friendly. --- doc/COMPILING/COMPILING-VS-VCPKG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/COMPILING/COMPILING-VS-VCPKG.md b/doc/COMPILING/COMPILING-VS-VCPKG.md index b2637a9b6827d..376386d76bd08 100644 --- a/doc/COMPILING/COMPILING-VS-VCPKG.md +++ b/doc/COMPILING/COMPILING-VS-VCPKG.md @@ -25,7 +25,7 @@ Steps from current guide were tested on Windows 10 (64 bit), Visual Studio 2019 ```cmd git clone https://github.com/Microsoft/vcpkg.git cd vcpkg -.\bootstrap-vcpkg.bat +.\bootstrap-vcpkg.bat -disableMetrics .\vcpkg integrate install ``` From 47ab07eb36588aa4a46e135bb86c76de9c7a799c Mon Sep 17 00:00:00 2001 From: Hymore246 Date: Fri, 19 Jun 2020 21:47:19 -0500 Subject: [PATCH 027/206] [Mythical Martial Arts] Adds missing weapons to Setting Sun --- data/mods/MMA/martialarts.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/data/mods/MMA/martialarts.json b/data/mods/MMA/martialarts.json index b311eabf46790..da95694fe52d0 100644 --- a/data/mods/MMA/martialarts.json +++ b/data/mods/MMA/martialarts.json @@ -400,7 +400,18 @@ "mma_tec_setting_sun_throw", "mma_tec_setting_sun_throw_crit" ], - "weapons": [ "i_staff", "shock_staff", "sword_crude", "sword_nail", "sword_wood", "q_staff" ] + "weapons": [ + "i_staff", + "shock_staff", + "sword_crude", + "sword_nail", + "sword_wood", + "sword_xiphos", + "q_staff", + "wakizashi", + "wakizashi_inferior", + "wakizashi_fake" + ] }, { "type": "martial_art", From 5add38a526a5b04687acc155a088cfcc453af69e Mon Sep 17 00:00:00 2001 From: Hymore246 Date: Fri, 19 Jun 2020 21:53:08 -0500 Subject: [PATCH 028/206] kris too --- data/mods/MMA/martialarts.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data/mods/MMA/martialarts.json b/data/mods/MMA/martialarts.json index da95694fe52d0..be0c25296e697 100644 --- a/data/mods/MMA/martialarts.json +++ b/data/mods/MMA/martialarts.json @@ -402,6 +402,8 @@ ], "weapons": [ "i_staff", + "kris", + "kris_fake", "shock_staff", "sword_crude", "sword_nail", From 9f7844bb050fff9c343c2cebf482315a441b69d7 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Sat, 20 Jun 2020 09:23:27 +0300 Subject: [PATCH 029/206] Apply suggestions from code review --- data/title/en.title | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/title/en.title b/data/title/en.title index b322a59130f31..fd6006120b898 100644 --- a/data/title/en.title +++ b/data/title/en.title @@ -18,4 +18,4 @@ / /_\ \ | | \ _/ __ \ \__ \ / __ | / | \| Y \\ ___/ / __ \_/ /_/ | \____|__ /|___| / \___ >(____ /\____ | - \/ \/ \/ \/ \/ \ No newline at end of file + \/ \/ \/ \/ \/ From 3520b51eaa7876935425220f91e2ee06c6b9bc6d Mon Sep 17 00:00:00 2001 From: BevapDin Date: Sat, 20 Jun 2020 10:36:17 +0200 Subject: [PATCH 030/206] Fix bresenham: Subtracting `a.x` from `t` and adding it right back seems pointless. And in fact, it is. --- src/line.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/line.cpp b/src/line.cpp index b9ae11868c703..7f7420720d9bb 100644 --- a/src/line.cpp +++ b/src/line.cpp @@ -158,7 +158,7 @@ void bresenham( const tripoint &loc1, const tripoint &loc2, int t, int t2, } cur.z += s.z; cur.x += s.x; - t += a.x; + t += a.y; if( !interact( cur ) ) { break; } @@ -171,7 +171,7 @@ void bresenham( const tripoint &loc1, const tripoint &loc2, int t, int t2, } cur.y += s.y; cur.z += s.z; - t += a.z; + t += a.x; if( !interact( cur ) ) { break; } From a2792e73e5a09843df05691de538a80d059b0638 Mon Sep 17 00:00:00 2001 From: BevapDin Date: Sat, 20 Jun 2020 10:51:23 +0200 Subject: [PATCH 031/206] Move initialization out of a loop Don't need mapgen to be even slower. --- src/map_extras.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/map_extras.cpp b/src/map_extras.cpp index 97f67ac7b05df..6082676d0f87c 100644 --- a/src/map_extras.cpp +++ b/src/map_extras.cpp @@ -2243,13 +2243,13 @@ static bool mx_reed( map &m, const tripoint &abs_sub ) return false; }; + weighted_int_list vegetation; + vegetation.add( f_cattails, 15 ); + vegetation.add( f_lotus, 5 ); + vegetation.add( f_lilypad, 1 ); for( int i = 0; i < SEEX * 2; i++ ) { for( int j = 0; j < SEEY * 2; j++ ) { const tripoint loc( i, j, abs_sub.z ); - weighted_int_list vegetation; - vegetation.add( f_cattails, 15 ); - vegetation.add( f_lotus, 5 ); - vegetation.add( f_lilypad, 1 ); if( ( m.ter( loc ) == t_water_sh || m.ter( loc ) == t_water_moving_sh ) && one_in( intensity ) ) { m.furn_set( loc, vegetation.pick()->id() ); From 333619479ccc2b3a000fcc49675167b739728504 Mon Sep 17 00:00:00 2001 From: WeisserRitter Date: Sat, 20 Jun 2020 12:17:05 -0300 Subject: [PATCH 032/206] Extend modability by enabling items to place pet monsters (#41467) * Include an 'is Pet' boolean in place_monster_iuse The option to place a monster as a pet will ensure that the monster can be given names, and possibly played with if it has the CANPLAY tag. * Spawn monster as pet if it's marked as one Modifies the use actor for place_monster so that any monster that is spawned as a pet works like a pet, being able to get a name and armor if there is armor equipable by it. Additionally it also allows for monsters with the CANPLAY flag to be played with once spawned as pets. Should be backwards compatible, as 'is pet' is always false by default. * Update iuse_actor.cpp Reformatted code to more closely resemble astyle (just checking if it works) * Update iuse_actor.cpp Defined the static constant for the 'pet' effect --- src/iuse_actor.cpp | 5 +++++ src/iuse_actor.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index 2505092d11f29..8a19673d9b36d 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -97,6 +97,7 @@ static const efftype_id effect_asthma( "asthma" ); static const efftype_id effect_bandaged( "bandaged" ); static const efftype_id effect_bite( "bite" ); static const efftype_id effect_bleed( "bleed" ); +static const efftype_id effect_pet( "pet" ); static const efftype_id effect_disinfected( "disinfected" ); static const efftype_id effect_downed( "downed" ); static const efftype_id effect_infected( "infected" ); @@ -859,6 +860,7 @@ void place_monster_iuse::load( const JsonObject &obj ) obj.read( "difficulty", difficulty ); obj.read( "moves", moves ); obj.read( "place_randomly", place_randomly ); + obj.read( "is_pet", is_pet ); if( obj.has_array( "skills" ) ) { JsonArray skills_ja = obj.get_array( "skills" ); for( JsonValue s : skills_ja ) { @@ -935,6 +937,9 @@ int place_monster_iuse::use( player &p, item &it, bool, const tripoint & ) const p.add_msg_if_player( m_warning, "%s", _( friendly_msg ) ); } newmon.friendly = -1; + if( is_pet ) { + newmon.add_effect( effect_pet, 1_turns, num_bp, true ); + } } return 1; } diff --git a/src/iuse_actor.h b/src/iuse_actor.h index 08ddb919df766..e2a14bfc7b43e 100644 --- a/src/iuse_actor.h +++ b/src/iuse_actor.h @@ -328,6 +328,8 @@ class place_monster_iuse : public iuse_actor std::string hostile_msg; /** Skills used to make the monster not hostile when activated. **/ std::set skills; + /** The monster will be spawned in as a pet. False by default. Can be empty. */ + bool is_pet = false; place_monster_iuse() : iuse_actor( "place_monster" ) { } ~place_monster_iuse() override = default; From 01dc257ba5a01d0aa05cdeb5b5f9160566231b12 Mon Sep 17 00:00:00 2001 From: Anton Burmistrov Date: Sat, 20 Jun 2020 19:18:36 +0400 Subject: [PATCH 033/206] Chance to spawn intact supply drop crates decreases with every passed day after the Cataclysm (#41468) * Chance to spawn intact supply drop crates decreases with every passed day after the Cataclysm * Astyle --- src/map_extras.cpp | 70 ++++++++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/src/map_extras.cpp b/src/map_extras.cpp index 6082676d0f87c..55ffc8b999d9c 100644 --- a/src/map_extras.cpp +++ b/src/map_extras.cpp @@ -994,6 +994,9 @@ static bool mx_drugdeal( map &m, const tripoint &abs_sub ) static bool mx_supplydrop( map &m, const tripoint &/*abs_sub*/ ) { + const bool intact = x_in_y( 40, + std::max( to_days( calendar::turn - calendar::start_of_cataclysm ), 0 ) + 50 ); + int num_crates = rng( 1, 5 ); for( int i = 0; i < num_crates; i++ ) { const auto p = random_point( m, [&m]( const tripoint & n ) { @@ -1002,37 +1005,42 @@ static bool mx_supplydrop( map &m, const tripoint &/*abs_sub*/ ) if( !p ) { break; } - m.furn_set( p->xy(), f_crate_c ); - std::string item_group; - switch( rng( 1, 10 ) ) { - case 1: - item_group = "mil_bulk"; - break; - case 2: - case 3: - case 4: - item_group = "mil_food"; - break; - case 5: - case 6: - case 7: - item_group = "grenades"; - break; - case 8: - case 9: - item_group = "mil_armor"; - break; - case 10: - item_group = "guns_rifle_milspec"; - break; - } - int items_created = 0; - for( int i = 0; i < 10 && items_created < 2; i++ ) { - items_created += m.place_items( item_group, 80, *p, *p, true, calendar::start_of_cataclysm, - 100 ).size(); - } - if( m.i_at( *p ).empty() ) { - m.destroy( *p, true ); + + if( intact ) { + m.furn_set( p->xy(), f_crate_c ); + std::string item_group; + switch( rng( 1, 10 ) ) { + case 1: + item_group = "mil_bulk"; + break; + case 2: + case 3: + case 4: + item_group = "mil_food"; + break; + case 5: + case 6: + case 7: + item_group = "grenades"; + break; + case 8: + case 9: + item_group = "mil_armor"; + break; + case 10: + item_group = "guns_rifle_milspec"; + break; + } + int items_created = 0; + for( int i = 0; i < 10 && items_created < 2; i++ ) { + items_created += m.place_items( item_group, 80, *p, *p, true, calendar::start_of_cataclysm, + 100 ).size(); + } + if( m.i_at( *p ).empty() ) { + m.destroy( *p, true ); + } + } else { + m.furn_set( p->xy(), f_crate_o ); } } From 05ea82a52aa08004dcd1d17312b7ac457a83fbd3 Mon Sep 17 00:00:00 2001 From: Alexey Mostovoy <1931904+AMurkin@users.noreply.github.com> Date: Sat, 20 Jun 2020 19:19:04 +0400 Subject: [PATCH 034/206] Appease clang-tidy (#41473) * Use range-based for loop. Const ref. * !items.empty() --- src/advanced_inv.cpp | 2 +- src/main_menu.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index 914baf03a09c9..eb177cf3e2a92 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -286,7 +286,7 @@ void advanced_inventory::print_items( const advanced_inventory_pane &pane, bool int pageStart = 0; // index of first item on current page advanced_inventory_pagination pagination( linesPerPage, pane ); - if( items.size() > 0 ) { + if( !items.empty() ) { // paginate up to the current item (to count pages) for( int i = 0; i <= index; i++ ) { const bool pagebreak = pagination.step( i ); diff --git a/src/main_menu.cpp b/src/main_menu.cpp index 89c437fe55200..df548a9c31a00 100644 --- a/src/main_menu.cpp +++ b/src/main_menu.cpp @@ -160,10 +160,10 @@ void main_menu::print_menu( const catacurses::window &w_open, int iSel, const po } if( mmenu_title.size() > 1 ) { - for( size_t i = 0; i < mmenu_title.size(); ++i ) { + for( const std::string &i_title : mmenu_title ) { nc_color cur_color = c_white; nc_color base_color = c_white; - print_colored_text( w_open, point( iOffsetX, iLine++ ), cur_color, base_color, mmenu_title[i] ); + print_colored_text( w_open, point( iOffsetX, iLine++ ), cur_color, base_color, i_title ); } } else { center_print( w_open, iLine++, c_light_cyan, mmenu_title[0] ); From 845884a32b2e20ab17365957c5a7722f1b0cdbb7 Mon Sep 17 00:00:00 2001 From: Anton Burmistrov Date: Sun, 21 Jun 2020 00:28:10 +0400 Subject: [PATCH 035/206] Added ability to stop bleeding, disinfect wounds, and inject antibiotics in case of infected wounds or tetanus to an autodoc (#40474) * Added ability to stop bleeding, disinfect wounds, and inject antibiotics in case of infected wounds to an autodoc * Bail out early if no wounds need treatment Also added a small time cost. --- src/iexamine.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/iexamine.cpp b/src/iexamine.cpp index b72dc283f3485..88c31ca9e7e6d 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -102,11 +102,20 @@ static const activity_id ACT_FORAGE( "ACT_FORAGE" ); static const activity_id ACT_OPERATION( "ACT_OPERATION" ); static const activity_id ACT_PLANT_SEED( "ACT_PLANT_SEED" ); +static const efftype_id effect_antibiotic( "antibiotic" ); +static const efftype_id effect_bite( "bite" ); +static const efftype_id effect_bleed( "bleed" ); +static const efftype_id effect_disinfected( "disinfected" ); static const efftype_id effect_earphones( "earphones" ); +static const efftype_id effect_infected( "infected" ); static const efftype_id effect_mending( "mending" ); static const efftype_id effect_pkill2( "pkill2" ); static const efftype_id effect_sleep( "sleep" ); +static const efftype_id effect_strong_antibiotic( "strong_antibiotic" ); +static const efftype_id effect_strong_antibiotic_visible( "strong_antibiotic_visible" ); static const efftype_id effect_teleglow( "teleglow" ); +static const efftype_id effect_tetanus( "tetanus" ); +static const efftype_id effect_weak_antibiotic( "weak_antibiotic" ); static const itype_id itype_2x4( "2x4" ); static const itype_id itype_bot_broken_cyborg( "bot_broken_cyborg" ); @@ -4587,6 +4596,7 @@ void iexamine::autodoc( player &p, const tripoint &examp ) INSTALL_CBM, UNINSTALL_CBM, BONESETTING, + TREAT_WOUNDS, }; bool adjacent_couch = false; @@ -4669,6 +4679,7 @@ void iexamine::autodoc( player &p, const tripoint &examp ) amenu.addentry( INSTALL_CBM, true, 'i', _( "Choose Compact Bionic Module to install" ) ); amenu.addentry( UNINSTALL_CBM, true, 'u', _( "Choose installed bionic to uninstall" ) ); amenu.addentry( BONESETTING, true, 's', _( "Splint broken limbs" ) ); + amenu.addentry( TREAT_WOUNDS, true, 'w', _( "Treat wounds" ) ); amenu.query(); @@ -4831,6 +4842,69 @@ void iexamine::autodoc( player &p, const tripoint &examp ) break; } + case TREAT_WOUNDS: { + if( !patient.has_effect( effect_bleed ) && !patient.has_effect( effect_infected ) && + !patient.has_effect( effect_bite ) ) { + p.add_msg_player_or_npc( m_info, _( "You don't have any wounds that need treatment." ), + _( " doesn't have any wounds that need treatment." ) ); + return; + } + + if( patient.has_effect( effect_infected ) || patient.has_effect( effect_tetanus ) ) { + if( patient.has_effect( effect_strong_antibiotic ) || + patient.has_effect( effect_antibiotic ) || + patient.has_effect( effect_weak_antibiotic ) ) { + patient.add_msg_player_or_npc( m_info, + _( "The autodoc detected a bacterial infection in your body, but as it also detected you've already taken antibiotics, it decided not to apply another dose right now." ), + _( "The autodoc detected a bacterial infection in 's body, but as it also detected you've already taken antibiotics, it decided not to apply another dose right now." ) ); + } else { + patient.add_effect( effect_strong_antibiotic, 12_hours ); + patient.add_effect( effect_strong_antibiotic_visible, rng( 9_hours, 15_hours ) ); + patient.mod_pain( 3 ); + patient.add_msg_player_or_npc( m_good, + _( "The autodoc detected a bacterial infection in your body and injected antibiotics to treat it." ), + _( "The autodoc detected a bacterial infection in 's body and injected antibiotics to treat it." ) ); + + if( patient.has_effect( effect_tetanus ) ) { + if( one_in( 3 ) ) { + patient.remove_effect( effect_tetanus ); + patient.add_msg_if_player( m_good, _( "The muscle spasms start to go away." ) ); + } else { + patient.add_msg_if_player( m_warning, _( "The medication does nothing to help the spasms." ) ); + } + } + } + } + + for( const bodypart_id &bp_healed : patient.get_all_body_parts( true ) ) { + if( patient.has_effect( effect_bleed, bp_healed->token ) ) { + patient.remove_effect( effect_bleed, bp_healed->token ); + patient.add_msg_player_or_npc( m_good, + _( "The autodoc detected a bleeding on your %s and applied a hemostatic drug to stop it." ), + _( "The autodoc detected a bleeding on 's %s and applied a hemostatic drug to stop it." ), + body_part_name( bp_healed ) ); + } + + if( patient.has_effect( effect_bite, bp_healed->token ) ) { + patient.remove_effect( effect_bite, bp_healed->token ); + patient.add_msg_player_or_npc( m_good, + _( "The autodoc detected an open wound on your %s and applied a disinfectant to clean it." ), + _( "The autodoc detected an open wound on 's %s and applied a disinfectant to clean it." ), + body_part_name( bp_healed ) ); + + // Fixed disinfectant intensity of 4 disinfectant_power + 10 first aid skill level of autodoc. + const int disinfectant_intensity = 14; + patient.add_effect( effect_disinfected, 1_turns, bp_healed->token ); + effect &e = patient.get_effect( effect_disinfected, bp_healed->token ); + e.set_duration( e.get_int_dur_factor() * disinfectant_intensity ); + hp_part target_part = patient.bp_to_hp( bp_healed->token ); + patient.damage_disinfected[target_part] = patient.hp_max[target_part] - patient.hp_cur[target_part]; + } + } + patient.moves -= 500; + break; + } + default: return; } From 860ed7b4acc1b1859860e93fac7c521159d80fbb Mon Sep 17 00:00:00 2001 From: hexagonrecursion Date: Sun, 21 Jun 2020 03:23:36 +0000 Subject: [PATCH 036/206] Restore pocket_data of 8x40_50_mag pocket_data was mistakenly removed in https://github.com/CleverRaven/Cataclysm-DDA/pull/39556 --- data/json/items/magazine/8x40mm.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/json/items/magazine/8x40mm.json b/data/json/items/magazine/8x40mm.json index 80d2178d056f4..4aeff63438203 100644 --- a/data/json/items/magazine/8x40mm.json +++ b/data/json/items/magazine/8x40mm.json @@ -107,6 +107,7 @@ "ammo_type": [ "8x40mm" ], "capacity": 50, "reload_time": 50, - "flags": [ "MAG_COMPACT" ] + "flags": [ "MAG_COMPACT" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "8x40mm": 50 } } ] } ] From b594d7bb78dc7231bbb474d831a7f434e5687dcb Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 20 Jun 2020 22:48:27 -0500 Subject: [PATCH 037/206] Add mbag to start with both books --- data/mods/Magiclysm/professions.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/data/mods/Magiclysm/professions.json b/data/mods/Magiclysm/professions.json index 8bf2697ec6c34..0f460566c65d1 100644 --- a/data/mods/Magiclysm/professions.json +++ b/data/mods/Magiclysm/professions.json @@ -45,7 +45,7 @@ "skills": [ { "level": 3, "name": "speech" } ], "items": { "both": { - "items": [ "pants", "longshirt", "socks", "cassock", "dress_shoes", "holy_symbol", "holybook_bible1", "priest_beginner" ], + "items": [ "pants", "longshirt", "socks", "cassock", "dress_shoes", "holy_symbol", "holybook_bible1", "priest_beginner", "mbag" ], "entries": [ { "group": "charged_cell_phone" } ] }, "male": [ "briefs" ], @@ -62,7 +62,7 @@ "skills": [ { "level": 1, "name": "fabrication" }, { "level": 1, "name": "tailor" } ], "items": { "both": { - "items": [ "kariginu", "eboshi", "pants", "tabi_dress", "geta", "holy_symbol", "holybook_kojiki", "priest_beginner" ], + "items": [ "kariginu", "eboshi", "pants", "tabi_dress", "geta", "holy_symbol", "holybook_kojiki", "priest_beginner", "mbag" ], "entries": [ { "group": "charged_cell_phone" } ] }, "male": [ "briefs" ], @@ -80,7 +80,7 @@ "skills": [ { "level": 2, "name": "speech" }, { "level": 1, "name": "barter" } ], "items": { "both": { - "items": [ "pants", "tshirt", "socks", "kufi", "thawb", "lowtops", "holybook_quran", "priest_beginner" ], + "items": [ "pants", "tshirt", "socks", "kufi", "thawb", "lowtops", "holybook_quran", "priest_beginner", "mbag" ], "entries": [ { "group": "charged_cell_phone" } ] }, "male": [ "briefs" ], @@ -108,7 +108,8 @@ "holy_symbol", "holybook_talmud", "holybook_tanakh", - "priest_beginner" + "priest_beginner", + "mbag" ], "entries": [ { "group": "charged_cell_phone" } ] }, From c58fc805910188d6757b3a00d806cbef7689bd71 Mon Sep 17 00:00:00 2001 From: BevapDin Date: Sun, 21 Jun 2020 09:11:12 +0200 Subject: [PATCH 038/206] Fix "Butchering turnout gear does not yield the kevlar it says it does" (#41494) * Fix dropping salvaged items. Third parameter to `map::spawn_an_item` is "charges". It is not used when it's 0, but otherwise it overrides the charges of the item. In the given scenario: `amount` is 6 (number of salvaged items), but Kevlar sheets are default created with 100 default charges, so `result.charges` is 100. The charges are shown in the message above. `map::spawn_an_item` changes the charges of the item to be just 6 and adds that to the world. * Call 3d version of map::spawn_an_item. We already have a 3D coordinate anyway. * Remove unused 2D version of map::spawn_an_item * Call map::add_item_or_charges as it is the function that other code uses. * Inline code of map::spawn_an_item It's only called by one place anyway. And this avoids future mistakes. --- src/iuse_actor.cpp | 6 +++++- src/map.cpp | 32 +++++++++++++------------------- src/map.h | 6 +----- 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index 8a19673d9b36d..39ee0105dd193 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -1548,6 +1548,10 @@ int salvage_actor::cut_up( player &p, item &it, item_location &cut ) const int amount = salvaged.second; item result( mat_name, calendar::turn ); if( amount > 0 ) { + if( result.count_by_charges() ) { + result.charges = amount; + amount = 1; + } add_msg( m_good, ngettext( "Salvaged %1$i %2$s.", "Salvaged %1$i %2$s.", amount ), amount, result.display_name( amount ) ); if( filthy ) { @@ -1557,7 +1561,7 @@ int salvage_actor::cut_up( player &p, item &it, item_location &cut ) const p.i_add_or_drop( result, amount ); } else { for( int i = 0; i < amount; i++ ) { - g->m.spawn_an_item( pos.xy(), result, amount, 0 ); + g->m.add_item_or_charges( pos, result ); } } } else { diff --git a/src/map.cpp b/src/map.cpp index e63a9395ca55e..b7a23dacc749d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -4006,24 +4006,6 @@ void map::i_clear( const tripoint &p ) current_submap->get_items( l ).clear(); } -item &map::spawn_an_item( const tripoint &p, 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(); - if( ( new_item.made_of( phase_id::LIQUID ) && has_flag( "SWIMMABLE", p ) ) || - has_flag( "DESTROY_ITEM", p ) ) { - return null_item_reference(); - } - - new_item.set_damage( damlevel ); - - return add_item_or_charges( p, new_item ); -} - std::vector map::spawn_items( const tripoint &p, const std::vector &new_items ) { std::vector ret; @@ -4076,7 +4058,19 @@ void map::spawn_item( const tripoint &p, const itype_id &type_id, new_item.item_tags.insert( "FIT" ); } - spawn_an_item( p, new_item, charges, 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(); + if( ( new_item.made_of( phase_id::LIQUID ) && has_flag( "SWIMMABLE", p ) ) || + has_flag( "DESTROY_ITEM", p ) ) { + return; + } + + new_item.set_damage( damlevel ); + + add_item_or_charges( p, new_item ); } units::volume map::max_volume( const tripoint &p ) diff --git a/src/map.h b/src/map.h index 43b341f8b86ed..2a209ceaea716 100644 --- a/src/map.h +++ b/src/map.h @@ -1059,10 +1059,6 @@ class map void add_item( const point &p, item new_item ) { add_item( tripoint( p, abs_sub.z ), new_item ); } - item &spawn_an_item( const tripoint &p, item new_item, int charges, int damlevel ); - void spawn_an_item( const point &p, item new_item, int charges, int damlevel ) { - spawn_an_item( tripoint( p, abs_sub.z ), new_item, charges, damlevel ); - } /** * Update an item's active status, for example when adding @@ -1135,7 +1131,7 @@ class map std::vector put_items_from_loc( const items_location &loc, const tripoint &p, const time_point &turn = calendar::start_of_cataclysm ); - // Similar to spawn_an_item, but spawns a list of items, or nothing if the list is empty. + // Places a list of items, or nothing if the list is empty. std::vector spawn_items( const tripoint &p, const std::vector &new_items ); void spawn_items( const point &p, const std::vector &new_items ) { spawn_items( tripoint( p, abs_sub.z ), new_items ); From 0dd52b3e52b854195b291ccbf615c990539ea2dc Mon Sep 17 00:00:00 2001 From: olanti-p Date: Sun, 21 Jun 2020 13:26:59 +0300 Subject: [PATCH 039/206] Remove unused item flag There are no mentions of this flag anywhere, and REACH_ATTACK by default allows reach attacks of range 2. --- data/mods/Magiclysm/items/ethereal_items.json | 1 - 1 file changed, 1 deletion(-) diff --git a/data/mods/Magiclysm/items/ethereal_items.json b/data/mods/Magiclysm/items/ethereal_items.json index 7c6fc71d1432d..6d3c6a06a4757 100644 --- a/data/mods/Magiclysm/items/ethereal_items.json +++ b/data/mods/Magiclysm/items/ethereal_items.json @@ -260,7 +260,6 @@ "UNBREAKABLE_MELEE", "REACH_ATTACK", "SPEAR", - "REACH2", "NONCONDUCTIVE", "SHEATH_SPEAR", "ONLY_ONE", From e9c65e426a0a62c41145b8399d1d8f3ebc6f91bd Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Sun, 21 Jun 2020 16:41:25 +0200 Subject: [PATCH 040/206] Fix debug install CBM (#41495) --- src/bionics.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bionics.cpp b/src/bionics.cpp index 981039cd816df..8cf10484a1d75 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -2326,6 +2326,9 @@ bool Character::can_install_bionics( const itype &type, Character &installer, bo debugmsg( "Tried to install NULL bionic" ); return false; } + if( has_trait( trait_DEBUG_BIONICS ) ) { + return true; + } if( is_mounted() ) { return false; } From 4de6c5640657c97acdb9feafef8a8c9a4294ed70 Mon Sep 17 00:00:00 2001 From: Andrey Bienkowski Date: Sun, 21 Jun 2020 18:37:43 +0300 Subject: [PATCH 041/206] Modernize swords_and_blades.json --- data/json/items/melee/swords_and_blades.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/json/items/melee/swords_and_blades.json b/data/json/items/melee/swords_and_blades.json index 7be301f8b77c8..5ac895482fff9 100644 --- a/data/json/items/melee/swords_and_blades.json +++ b/data/json/items/melee/swords_and_blades.json @@ -265,7 +265,7 @@ "description": "A femur or other bone, about 20 cm long, which has been broken at one end and sharpened into a cutting tool. Its jagged edge is wicked but fragile.", "symbol": "/", "color": "white", - "weight": 169, + "weight": "169 g", "//": "literally 75% of a bone.", "volume": "188 ml", "longest_side": "20 cm", @@ -344,8 +344,8 @@ "longest_side": "50 cm", "symbol": "/", "color": "green", - "weight": 522, - "volume": 1, + "weight": "522 g", + "volume": "250 ml", "price": 2300, "price_postapoc": 1800, "to_hit": 1, From a556860d23feb748e87eec8dc207600cec97ff8f Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Sun, 21 Jun 2020 10:18:33 -0600 Subject: [PATCH 042/206] Document item_restriction usage for pocket_data --- doc/JSON_INFO.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 04aae493c43fa..b317347cd15ef 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -1992,6 +1992,7 @@ Any Item can be a container. To add the ability to contain things to an item, yo "fire_protection": false, // Default false. If true, the pocket protects the contained items from exploding if tossed into a fire. "ammo_restriction": { "ammotype": count }, // Restrict pocket to a given ammo type and count. This overrides mandatory volume and weight to use the given ammo type instead. A pocket can contain any number of unique ammotypes each with different counts, and the container will only hold one type (as of now). If this is left out, it will be empty. "flag_restriction": [ "FLAG1", "FLAG2" ], // Items can only be placed into this pocket if they have a flag that matches one of these flags. + "item_restriction": [ "item_id" ], // Only these item IDs can be placed into this pocket. Overrides ammo and flag restrictions. "sealed_data": { "spoil_multiplier": 0.0 } // Having anything in sealed_data means the pocket cannot be resealed. The sealed version of the pocket will override the unsealed version of the same datatype. } From b2657a0094f13907705ffd66c04fb400a624b95b Mon Sep 17 00:00:00 2001 From: Andrey Bienkowski Date: Sun, 21 Jun 2020 19:23:15 +0300 Subject: [PATCH 043/206] Moderinze remaining volume: 0 items From ingame testing it appears that volume: 0 actually means 1ml because 1000 diamond dental grills have a volume of 1L --- data/json/items/armor/jewelry.json | 40 +++++++++++++++--------------- data/json/items/generic.json | 4 +-- data/json/items/tool/misc.json | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/data/json/items/armor/jewelry.json b/data/json/items/armor/jewelry.json index b84acce57c3ad..6982965d88a4b 100644 --- a/data/json/items/armor/jewelry.json +++ b/data/json/items/armor/jewelry.json @@ -81,7 +81,7 @@ "name": { "str": "diamond dental grill" }, "description": "Fake teeth inlaid with diamonds, worn over the teeth. Fits horribly, but looks very shiny. For that high-class gangsta rap look.", "weight": "10 g", - "volume": 0, + "volume": "1 ml", "price": 50000, "price_postapoc": 250, "bashing": 3, @@ -100,7 +100,7 @@ "name": { "str": "garnet dental grill" }, "description": "Fake teeth inlaid with garnets, worn over the teeth. It looks very shiny.", "weight": "10 g", - "volume": 0, + "volume": "1 ml", "price": 30000, "price_postapoc": 100, "bashing": 3, @@ -212,7 +212,7 @@ "name": { "str": "diamond and gold ring" }, "description": "A gold ring with a sparkling diamond mounted on top of it. Back in the old days this could be worth a fortune. You can wear it if you like, but it won't provide any effects.", "weight": "12 g", - "volume": 0, + "volume": "1 ml", "price": 190000, "price_postapoc": 100, "material": [ "gold" ], @@ -347,7 +347,7 @@ "name": { "str": "pair of cufflinks", "str_pl": "pairs of cufflinks" }, "description": "An unmarked, pair of silver cufflinks. Cufflinks are used to secure the cuffs of dress shirts - a must-have for men in formal wear. You can wear it if you like, but it won't provide any effects.", "weight": "15 g", - "volume": 0, + "volume": "1 ml", "price": 3000, "price_postapoc": 10, "material": [ "silver" ], @@ -360,7 +360,7 @@ "name": { "str": "pair of intricate cufflinks", "str_pl": "pairs of intricate cufflinks" }, "description": "An expensive pair of silver cufflinks, stylized with detailed overlays of gold gears and fractal patterns. You can wear it if you like, but it won't provide any effects.", "weight": "21 g", - "volume": 0, + "volume": "1 ml", "price": 7000, "price_postapoc": 50, "material": [ "silver", "gold" ], @@ -373,7 +373,7 @@ "name": { "str_sp": "garnet and gold cufflinks" }, "description": "A pair of cufflinks with inset garnets.", "weight": "15 g", - "volume": 0, + "volume": "1 ml", "price": 3500, "price_postapoc": 50, "material": [ "gold", "gemstone" ], @@ -492,7 +492,7 @@ "name": { "str_sp": "garnet and silver cufflinks" }, "description": "A pair of cufflinks with inset garnets.", "weight": "15 g", - "volume": 0, + "volume": "1 ml", "price": 3500, "price_postapoc": 100, "material": [ "silver", "gemstone" ], @@ -611,7 +611,7 @@ "name": { "str_sp": "garnet and platinum cufflinks" }, "description": "A pair of cufflinks with inset garnets.", "weight": "15 g", - "volume": 0, + "volume": "1 ml", "price": 3500, "price_postapoc": 100, "material": [ "platinum", "gemstone" ], @@ -1506,7 +1506,7 @@ "name": { "str": "pair of garnet and gold earrings", "str_pl": "pairs of garnet and gold earrings" }, "description": "A pair of shiny garnet and gold earrings. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 10000, "price_postapoc": 25, "material": [ "gold", "gemstone" ], @@ -1627,7 +1627,7 @@ "name": { "str": "pair of garnet and silver earrings", "str_pl": "pairs of garnet and silver earrings" }, "description": "A pair of shiny garnet and silver earrings. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 6000, "price_postapoc": 1000, "material": [ "silver", "gemstone" ], @@ -1748,7 +1748,7 @@ "name": { "str": "pair of garnet and platinum earrings", "str_pl": "pairs of garnet and platinum earrings" }, "description": "A pair of shiny garnet and platinum earrings. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 10000, "price_postapoc": 25, "material": [ "platinum", "gemstone" ], @@ -1858,7 +1858,7 @@ "name": { "str": "garnet and gold ring" }, "description": "A gold ring with a garnet mounted on top of it. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 10000, "price_postapoc": 1800, "material": [ "gold", "gemstone" ], @@ -1979,7 +1979,7 @@ "name": { "str": "garnet and silver ring" }, "description": "A silver ring with a garnet mounted on top of it. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 10000, "price_postapoc": 25, "material": [ "silver", "gemstone" ], @@ -2100,7 +2100,7 @@ "name": { "str": "garnet and platinum ring" }, "description": "A platinum ring with a garnet mounted on top of it. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 10000, "price_postapoc": 25, "material": [ "platinum", "gemstone" ], @@ -2222,7 +2222,7 @@ "name": { "str": "garnet and gold bracelet" }, "description": "A gold bracelet with sparkling garnets. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 15000, "price_postapoc": 25, "material": [ "gold", "gemstone" ], @@ -2344,7 +2344,7 @@ "name": { "str": "garnet and silver bracelet" }, "description": "A silver bracelet with sparkling garnets. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 15000, "price_postapoc": 25, "material": [ "silver", "gemstone" ], @@ -2466,7 +2466,7 @@ "name": { "str": "garnet and platinum bracelet" }, "description": "A platinum bracelet with sparkling garnets. You can wear it if you like, but it won't provide any effects.", "weight": "2700 mg", - "volume": 0, + "volume": "1 ml", "price": 15000, "price_postapoc": 25, "material": [ "platinum", "gemstone" ], @@ -2576,7 +2576,7 @@ "name": { "str": "garnet and gold necklace" }, "description": "A shiny, gold necklace adorned with a garnet pendant. You can wear it if you like, but it won't provide any effects.", "weight": "70 g", - "volume": 0, + "volume": "1 ml", "price": 50000, "price_postapoc": 25, "material": [ "gold", "gemstone" ], @@ -2695,7 +2695,7 @@ "name": { "str": "garnet and silver necklace" }, "description": "A shiny, silver necklace adorned with a garnet pendant. You can wear it if you like, but it won't provide any effects.", "weight": "70 g", - "volume": 0, + "volume": "1 ml", "price": 50000, "price_postapoc": 25, "material": [ "silver", "gemstone" ], @@ -2814,7 +2814,7 @@ "name": { "str": "garnet and platinum necklace" }, "description": "A shiny, platinum necklace adorned with a garnet pendant. You can wear it if you like, but it won't provide any effects.", "weight": "70 g", - "volume": 0, + "volume": "1 ml", "price": 50000, "price_postapoc": 25, "material": [ "platinum", "gemstone" ], diff --git a/data/json/items/generic.json b/data/json/items/generic.json index a466900635321..9b9db1744a19e 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -874,7 +874,7 @@ "price_postapoc": 100, "material": [ "steel", "plastic" ], "weight": "5 g", - "volume": 0 + "volume": "1 ml" }, { "type": "GENERIC", @@ -888,7 +888,7 @@ "price_postapoc": 100, "material": [ "steel", "plastic" ], "weight": "5 g", - "volume": 0 + "volume": "1 ml" }, { "type": "GENERIC", diff --git a/data/json/items/tool/misc.json b/data/json/items/tool/misc.json index cc6430accba0d..58016a548f63a 100644 --- a/data/json/items/tool/misc.json +++ b/data/json/items/tool/misc.json @@ -781,7 +781,7 @@ "name": { "str": "Whistle of Tindalos", "str_pl": "Whistles of Tindalos" }, "description": "Who is this Tindalos guy?", "weight": "22 g", - "volume": 0, + "volume": "1 ml", "price": 10000, "price_postapoc": 1000, "material": [ "superalloy" ], From 624190d1d1aaa5d6a92a859c9c5d3bc7abbc512d Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Sun, 21 Jun 2020 10:13:50 -0700 Subject: [PATCH 044/206] Apease clang-tidy --- src/iexamine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 88c31ca9e7e6d..1ffff71c88e6c 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -4897,7 +4897,7 @@ void iexamine::autodoc( player &p, const tripoint &examp ) patient.add_effect( effect_disinfected, 1_turns, bp_healed->token ); effect &e = patient.get_effect( effect_disinfected, bp_healed->token ); e.set_duration( e.get_int_dur_factor() * disinfectant_intensity ); - hp_part target_part = patient.bp_to_hp( bp_healed->token ); + hp_part target_part = player::bp_to_hp( bp_healed->token ); patient.damage_disinfected[target_part] = patient.hp_max[target_part] - patient.hp_cur[target_part]; } } From 348041bcab433a1073bdcab2367ae3afa3cf917b Mon Sep 17 00:00:00 2001 From: hexagonrecursion Date: Sun, 21 Jun 2020 17:39:48 +0000 Subject: [PATCH 045/206] Make array the outer element of every file under data/json (#41498) * Make json data more uniform More uniform data makes writing tooling easier. * Remove extra trailing newlines --- .../json/mapgen/map_extras/nest_dermatik.json | 84 +++-- data/json/mapgen/map_extras/nest_wasp.json | 80 ++-- data/json/mapgen/natural_spring.json | 124 +++--- data/json/monsterdrops/robofac.json | 16 +- data/json/npcs/hints.json | 352 +++++++++--------- 5 files changed, 332 insertions(+), 324 deletions(-) diff --git a/data/json/mapgen/map_extras/nest_dermatik.json b/data/json/mapgen/map_extras/nest_dermatik.json index 69f38dd07ebc3..7642a7f4db450 100644 --- a/data/json/mapgen/map_extras/nest_dermatik.json +++ b/data/json/mapgen/map_extras/nest_dermatik.json @@ -1,42 +1,44 @@ -{ - "type": "mapgen", - "method": "json", - "update_mapgen_id": "mx_nest_dermatik", - "object": { - "rows": [ - " ", - " ", - " t ", - " ", - " t t ", - " t t---- ", - " ----:.-t ", - " t t---.:-..---t t ", - " -:-..---..--t ", - " ---.---.,---.- ", - " t-.--.,--...-.-- ", - " --...-.--.--. ", - " -..-,-.:-,-..-t t ", - " t --.:..-.-:.--- ", - " t---.,.-.---..- ", - " -.---.---..--- ", - " t --.---..---t ", - " t-...:---t t ", - " -----t ", - " t ", - " t ", - " t ", - " ", - " " - ], - "terrain": { - "t": [ "t_region_tree", "t_region_groundcover" ], - ",": [ "t_region_tree" ], - "-": [ "t_paper" ], - ".": [ "t_floor_paper" ], - ":": [ "t_floor_paper" ] - }, - "monster": { ":": { "monster": "mon_dermatik_larva" } }, - "place_monsters": [ { "monster": "GROUP_DERMATIK", "x": [ 0, 23 ], "y": [ 0, 23 ], "repeat": [ 0, 3 ], "density": 0.1 } ] +[ + { + "type": "mapgen", + "method": "json", + "update_mapgen_id": "mx_nest_dermatik", + "object": { + "rows": [ + " ", + " ", + " t ", + " ", + " t t ", + " t t---- ", + " ----:.-t ", + " t t---.:-..---t t ", + " -:-..---..--t ", + " ---.---.,---.- ", + " t-.--.,--...-.-- ", + " --...-.--.--. ", + " -..-,-.:-,-..-t t ", + " t --.:..-.-:.--- ", + " t---.,.-.---..- ", + " -.---.---..--- ", + " t --.---..---t ", + " t-...:---t t ", + " -----t ", + " t ", + " t ", + " t ", + " ", + " " + ], + "terrain": { + "t": [ "t_region_tree", "t_region_groundcover" ], + ",": [ "t_region_tree" ], + "-": [ "t_paper" ], + ".": [ "t_floor_paper" ], + ":": [ "t_floor_paper" ] + }, + "monster": { ":": { "monster": "mon_dermatik_larva" } }, + "place_monsters": [ { "monster": "GROUP_DERMATIK", "x": [ 0, 23 ], "y": [ 0, 23 ], "repeat": [ 0, 3 ], "density": 0.1 } ] + } } -} +] diff --git a/data/json/mapgen/map_extras/nest_wasp.json b/data/json/mapgen/map_extras/nest_wasp.json index b4e403ee0e19e..f3ffb4b03f4f6 100644 --- a/data/json/mapgen/map_extras/nest_wasp.json +++ b/data/json/mapgen/map_extras/nest_wasp.json @@ -1,40 +1,42 @@ -{ - "type": "mapgen", - "method": "json", - "update_mapgen_id": "mx_nest_wasp", - "object": { - "rows": [ - " ", - " ", - " t ", - " ", - " t t ", - " t t---- ", - " ----..-t ", - " t t---..-..---t t ", - " -.-..---..--t ", - " ---.---.,---.- ", - " t-.--.,--...-.-- ", - " --...-.--.--. ", - " -..-,-..-,-..-t t ", - " t --....-.-..--- ", - " t---.,.-.---..- ", - " -.---.---..--- ", - " t --.---..---t ", - " t-....---t t ", - " -----t ", - " t ", - " t ", - " t ", - " ", - " " - ], - "terrain": { - "t": [ "t_region_tree", "t_region_groundcover_swamp" ], - ",": [ "t_region_tree" ], - "-": [ "t_paper" ], - ".": [ "t_floor_paper" ] - }, - "place_monsters": [ { "monster": "GROUP_WASP", "x": [ 0, 23 ], "y": [ 0, 23 ], "repeat": [ 0, 3 ], "density": 0.1 } ] +[ + { + "type": "mapgen", + "method": "json", + "update_mapgen_id": "mx_nest_wasp", + "object": { + "rows": [ + " ", + " ", + " t ", + " ", + " t t ", + " t t---- ", + " ----..-t ", + " t t---..-..---t t ", + " -.-..---..--t ", + " ---.---.,---.- ", + " t-.--.,--...-.-- ", + " --...-.--.--. ", + " -..-,-..-,-..-t t ", + " t --....-.-..--- ", + " t---.,.-.---..- ", + " -.---.---..--- ", + " t --.---..---t ", + " t-....---t t ", + " -----t ", + " t ", + " t ", + " t ", + " ", + " " + ], + "terrain": { + "t": [ "t_region_tree", "t_region_groundcover_swamp" ], + ",": [ "t_region_tree" ], + "-": [ "t_paper" ], + ".": [ "t_floor_paper" ] + }, + "place_monsters": [ { "monster": "GROUP_WASP", "x": [ 0, 23 ], "y": [ 0, 23 ], "repeat": [ 0, 3 ], "density": 0.1 } ] + } } -} +] diff --git a/data/json/mapgen/natural_spring.json b/data/json/mapgen/natural_spring.json index 3e208242b2781..193c047be64ad 100644 --- a/data/json/mapgen/natural_spring.json +++ b/data/json/mapgen/natural_spring.json @@ -1,62 +1,64 @@ -{ - "method": "json", - "object": { - "furniture": { - "#": "f_null", - ".": "f_null", - "4": "f_null", - "7": "f_null", - "_": "f_null", - "b": "f_boulder_small", - "f": "f_dandelion", - "i": "f_cattails", - "o": "f_boulder_small", - "s": "f_null", - "t": "f_null", - "w": "f_null" +[ + { + "method": "json", + "object": { + "furniture": { + "#": "f_null", + ".": "f_null", + "4": "f_null", + "7": "f_null", + "_": "f_null", + "b": "f_boulder_small", + "f": "f_dandelion", + "i": "f_cattails", + "o": "f_boulder_small", + "s": "f_null", + "t": "f_null", + "w": "f_null" + }, + "rows": [ + "._...#.._...._...._#..._", + ".#7............4..#.....", + "...._..._t..._##.._.7.._", + "__.##....#.7..###.....#.", + "...#4#._...._..#_.......", + "..._#....__._....#..4.#_", + "....._.._.__#4..._..._._", + ".4#..__..4.__#__._.._...", + "_.._...o_#_i__.4#..t.#..", + "_.....4#.__wi__#4#......", + "#..#_._.._www__.##..#...", + ".......#__www_.#...._4_#", + "..t#...4#__w__#4..__#...", + "__#.__...____b.##.......", + ".#.._.._#4#_#4#__._f..._", + ".....4...#t..#._........", + "......__._.._.._.4...#..", + ".....#_.#._4#_...._.#4..", + "#.#._._....#._..7__.s#.#", + "..7#......_.........._..", + "......#.4_...4_#..#.4.._", + ".._.._..#.._#....t......", + "..#............_.#......", + "_..._..#...__...._...#.." + ], + "terrain": { + "#": "t_underbrush", + ".": "t_grass", + "4": "t_tree_pine", + "7": "t_tree_maple", + "_": "t_dirt", + "b": "t_dirt", + "f": "t_grass", + "i": "t_dirt", + "o": "t_grass", + "s": "t_shrub_blueberry", + "t": "t_tree_dead", + "w": "t_water_sh" + } }, - "rows": [ - "._...#.._...._...._#..._", - ".#7............4..#.....", - "...._..._t..._##.._.7.._", - "__.##....#.7..###.....#.", - "...#4#._...._..#_.......", - "..._#....__._....#..4.#_", - "....._.._.__#4..._..._._", - ".4#..__..4.__#__._.._...", - "_.._...o_#_i__.4#..t.#..", - "_.....4#.__wi__#4#......", - "#..#_._.._www__.##..#...", - ".......#__www_.#...._4_#", - "..t#...4#__w__#4..__#...", - "__#.__...____b.##.......", - ".#.._.._#4#_#4#__._f..._", - ".....4...#t..#._........", - "......__._.._.._.4...#..", - ".....#_.#._4#_...._.#4..", - "#.#._._....#._..7__.s#.#", - "..7#......_.........._..", - "......#.4_...4_#..#.4.._", - ".._.._..#.._#....t......", - "..#............_.#......", - "_..._..#...__...._...#.." - ], - "terrain": { - "#": "t_underbrush", - ".": "t_grass", - "4": "t_tree_pine", - "7": "t_tree_maple", - "_": "t_dirt", - "b": "t_dirt", - "f": "t_grass", - "i": "t_dirt", - "o": "t_grass", - "s": "t_shrub_blueberry", - "t": "t_tree_dead", - "w": "t_water_sh" - } - }, - "om_terrain": "natural_spring", - "type": "mapgen", - "weight": 100 -} + "om_terrain": "natural_spring", + "type": "mapgen", + "weight": 100 + } +] diff --git a/data/json/monsterdrops/robofac.json b/data/json/monsterdrops/robofac.json index 8969e44dba9c3..30fbf09b87fca 100644 --- a/data/json/monsterdrops/robofac.json +++ b/data/json/monsterdrops/robofac.json @@ -1,8 +1,8 @@ -{ - "type": "item_group", - "subtype": "collection", - "id": "mon_robofac_prototype_drops", - "entries": [ - { "item": "robofac_test_data" } - ] -} +[ + { + "type": "item_group", + "subtype": "collection", + "id": "mon_robofac_prototype_drops", + "entries": [ { "item": "robofac_test_data" } ] + } +] diff --git a/data/json/npcs/hints.json b/data/json/npcs/hints.json index a6494cfc0a08d..d25e659098279 100644 --- a/data/json/npcs/hints.json +++ b/data/json/npcs/hints.json @@ -1,175 +1,177 @@ -{ - "type": "snippet", - "category": "hint", - "text": [ - "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.", - "Squirrels really ain't such a bad snack if you don't blast them all to hell.", - "Ever run into those big worm things? If you see trails of churned-up dirt, you can be sure they're around.", - "Try to stay on the roads as much as you can. Giant worms can't cross them!", - "Don't relax after killing a giant worm. Little bits of them can break off and still attack!", - "If you see a big mob of zombies coming, RUN! Trying to fight them all is impossible unless you have a big tactical advantage.", - "If you see a big mob of zombies coming, you better run. Trying to fight them all is suicide!", - "When you see a swarm of zombies coming it's time to run!", - "If you're getting chased by a hoard of zombies, try ducking into the subways and traveling a block or two, then coming back up.", - "Watch out for those zombies that shriek; they'll let other zombies know where you are, and will attract them from all over.", - "Those acid-spitting zombies are pretty nasty, but if you're smart, you can get other zombies to wade through the acid.", - "If there's a pool of acid blocking your way, trying tossing a junk item into it. Eating up items will help neutralize the acid faster.", - "Rubber boots aren't as tough as combat boots and you don't run very fast in them. But I've seen zombies vomiting puddles of acid, and I'd hate to have my feet melt off, so I'd consider having a pair of those.", - "There's this type of zombie that can shoot bolts of lightning! Stay away from walls and stuff when they do… the electricity can travel along solid surfaces.", - "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!", - "If you run into a zombie hulk, it's probably a good idea to run. They're fast as hell, but pretty dumb; they'll try to smash through obstacles rather than going around, and that slows them down a lot.", - "Zombie brutes and hulks have really tough hide, but skeletal juggernauts with their bone plates are the worst. Don't bother shooting at them with lower-caliber guns, the bullet will bounce right off!", - "Try not to kill a boomer if it's standing right next to you. They tend to explode when they die, and that pink goop will get all over you.", - "Skeletons are a tough target for a gun. They're so skinny and full of holes that it's hard to make a good hit. And those big ones are hard as nails too.", - "Small skeletons are too delicate to smash through doors or windows. Big ones can walk in through a wall. At least they can't smell you, unlike zombies, so if you turn your light off at night you can sneak right past.", - "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.", - "It's a good idea to butcher corpses if you have the time. I've seen these weird zombies bring their friends back from the dead!", - "I have a buddy who was sleeping in this cabin way out in the woods, when he suddenly woke up to trees and vines growing right up through the floor and walls! He said it was some kind of huge tree beast…", - "Oh man, have you gone down into the old subway systems? I'd be careful… there's these things down there that are like zombies, but tougher.", - "There's snakes down in most of the old sewer systems. They're slow on land, but boy, those suckers can swim fast!", - "If you're planning on wandering around the sewers--not that you'd have a reason too--watch out for those fish. Those suckers are fast, and vicious too!", - "Have you seen those eyebots flying around? It's hard to say, but some faction's controlling them--maybe the military. All I know is, I don't want them taking my picture…", - "Ever go toe-to-toe with a manhack? Tiny little helicopters covered in knives. Best be packing a shotgun!", - "They're rare, but molebots are nasty things. They bore through the ground, then pop up to stab ya. Still, you're safe from them if you stay on pavement…", - "Don't fire your gun if you can help it - the noise attracts monsters. If you could get a silencer, or make one, it would give you some advantage.", - "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.", - "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.", - "I know it's tempting to just go full-auto and unload as many bullets as possible, but don't except as a last resort. It's inaccurate and wastes ammo.", - "If there's a bunch of zombies in a straight line, try unloading a burst from your gun. Be sure to aim at the zombie furthest away; you'll hit more of them that way.", - "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.", - "If you're in a corridor or something, and there's a bunch of zombies chasing you down it, try to wound the guy in front badly. He'll start moving slow and cause a serious traffic jam!", - "Here's a trick for taking care of a huge swarm of zombies chasing you: head into a liquor store, shoot out as many bottles as you can, then light the alcohol on fire. Then duck out the back door, and watch the zombies run into a burning building!", - "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.", - "For a good melee weapon, you can't beat a machete. I've seen a guy take down a zombie brute with one! Of course, if you can find a katana, that might be even better…", - "A knife spear makes a good weapon in a pinch, but a spike strapped to a stick isn't the sturdiest construction. At least you can strap the spike back on when it comes off.", - "You know, a glass bottle can make a good weapon in a pinch. If you break it over someone's head, the shattering glass will hurt them extra. Of course, it might hurt your hands, too…", - "You know what makes a nice weapon? Take a two by four, or a baseball bat or something, and stick a bunch of nails through the end!", - "BB guns may seem like a joke, but they've got their uses. They're good for hunting small game, or getting to know the basics of rifles.", - "Crossbows are a great weapon for long term use. Most of the time, you can retrieve the bolt after shooting it, so running out of ammo is less of a concern.", - "Consider going Robin Hood, if you have the strength to pull the string of a bow. Those larger ones need significant muscle power, but they hit hard, and are silent.", - "I hid in a dumpster once or twice. I may smell bad, but I'm not dead, as they say.", - "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.", - "Shotguns are nice; you can take out lots of baddies with a single shot. Just remember that they're noisy as hell, and you might end up attracting more than you kill.", - "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!", - "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.", - "You know, you don't have to go full auto with an assault rifle. Firing single shots is more accurate and efficient!", - "I've seen a couple guys running around with laser pistols. They seem like the perfect weapon: quiet, accurate, and deadly. But I've never found one, and I bet ammo is wicked scarce…", - "When it comes to footwear, you've got two basic choices as far as I see it; sneakers, for running extra fast, or boots for durability. Depends on your style, I guess.", - "You don't really need to wear gloves most of the time, but once in a while they'll really come in handy.", - "I wish I could still use those rollerblades. I would be so fast. But I took an arrow to the knee, and all that.", - "It's good to keep a filter mask or gas mask handy. You never know when you'll have to go into a smoke-filled room or something.", - "There's basically no reason not to wear safety glasses… nothing is worse than taking a hit to the eyes and getting blinded for a few seconds.", - "Ski goggles are a great choice if you're worried about getting stuff in your eyes. Perfect for dealing with boomers!", - "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. Beware that some types of zombies are camouflaged against it, and require proper light to be visible.", - "I know they look dumb, but wearing a fanny pack gives you that extra bit of storage without encumbering you.", - "Backpacks let you carry lots of stuff, but they limit your movement a lot. If you have to fight a zombie at close range, don't wear one, or at least drop it on the ground before the fight.", - "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.", - "It's a good idea to carry around a couple of empty bottles. You can fill them up with water, gasoline, or whatever!", - "First aid 101 for you. Always bandage your wounds, they will heal faster that way. Bandages are plenty and you can make makeshift ones easily, so there is no reason not to.", - "I can bandage you if you are wounded, so give me some spare bandages, if you have any.", - "If you have extra antiseptic, use it to disinfect your wounds, even if they aren't infected. They will recover faster that way.", - "Treat your infected wounds as soon as possible. If the infection spreads only antibiotics may help you, but it will take time, and you may still die from it if it's too serious.", - "If you need a bunch of rags for making Molotov cocktails, take a pair of scissors to an old t-shirt or something.", - "Carrying a lighter is something all veterans do. It takes up almost no space, and can easily save your life.", - "If you can spare the space, you might want to carry a fire extinguisher along. Nothing is worse than being trapped in a burning building!", - "Crowbars not only make a pretty good weapon, they're also useful for opening locked doors and lifting manhole covers.", - "If you're spending the night in a dangerous area, grab a shovel and dig pits all around your camp. If it's more than one night, you might want to put broken glass or sticks inside the pits for better effect.", - "A chainsaw may seem like a great weapon, but remember that they're slow, unwieldy, and very noisy.", - "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.", - "Bear traps are a nice way to cover an escape. If you place one in a doorway, the first zombie through will get stuck, and the rest won't be able to get past!", - "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.", - "Don't use Molotovs indoors. Especially in a liquor store.", - "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.", - "I once knew a guy who figured he'd survive a night in the subway by setting fires blocking off the tunnel in both directions and sleeping between them. He wound up asphyxiating on the smoke.", - "Don't light a Molotov until you're ready to throw it. Not only can they go out, but if you accidentally drop it or something, you're in trouble.", - "If you're weak or clumsy, it might be a good idea not to mess with Molotovs or grenades. Accidentally dropping them when you meant to throw them could be deadly.", - "If you're not particularly agile it might be good not to mess with Molotovs or grenades. Accidents involving these sort of items tend to be grievous.", - "If you're wandering in the wilderness, or following a road, keep an eye out for wild strawberries, blueberries and other gifts of nature.", - "Be careful eating wild mushrooms. Some are poisonous, and others can make you hallucinate.", - "Try to go around swamps, if you can. Some of them have sinkholes that can pull you right underground.", - "I heard about this group that raided a bee hive a while ago. Everyone got massacred but one, and he came home with this weird, magic honey stuff.", - "If you need to, you can swim across a river to escape; some monsters can't swim. Just make sure you drop as much stuff as possible first, and maybe strip naked, or you'll sink like a rock.", - "Houses can be a surprisingly good resource for all kinds of stuff; clothing, medication, food, books, and more. People kept all the odd things around, especially in basements.", - "While there's not much to loot, gas stations are a good source for gasoline, to power tools or to make Molotov cocktails.", - "It's not like in the movies; shooting a gas pump won't make it explode. But it WILL make it leak all over the place, which is a definite fire hazard.", - "I know grocery stores and stuff are full of fruit, but be careful, it's probably rotten.", - "Next time you visit a grocery store, load up on canned goods. They never go bad!", - "Load up on canned goods if you ever find a grocery store. Cans never go bad!", - "I've found more good weapons in hardware stores than anywhere else. Except gun stores, of course.", - "Liquor stores are a great place to pick up non-alcoholic beverages, too. Not that I mind alcohol!", - "Most gun stores follow pretty similar layouts. The restricted stuff - SMGs, assault rifles, and most importantly ammo - are always behind the counter.", - "I've spent many nights in the changing rooms at the back of clothing stores. Walls on four sides, far from the store's entrance, a corridor for easy defense… it's perfect!", - "Have you seen those weird science labs out in the middle of nowhere? I think you need some kind of special ID card to get in.", - "I have a dream of raiding a military bunker, but zombies and armor are a scary mix. And the sheer thought of being sprayed with bullets by a turret is giving me the shivers.", - "I've thought about raiding an ant hill before, but I realized it wasn't worth the risk. I doubt they have any loot beyond some scraps of food, you know?", - "This guy I know was walking through the subway when he came across a giant rift in the earth, with lava far below. Weird, huh?", - "In a lot of places, there's little hallways connecting the subways with the sewers, with heavy metal doors on both ends. It's a perfect place to sleep!", - "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.", - "Autodocs are probably your best bet to install bionics - if you can find one! However, I heard they won't work if you don't bring anesthetics to put you in a sleep.", - "Be wary of anything deeper than your average basement. Some folks heard scary screams from the ventilation shafts of mines and labs. Very unsettling screams.", - "A screwdriver a day keeps the scurvy away!", - "Hungrier than usual? Natural oils can help. Not tasty at all, but who cares when eating your leg is the second option?", - "Terrain can turn the tide of a battle. Make sure you use it against your enemies, lest it be used against you.", - "Folks that passed by the mine said something about foul smell. If you plan a visit there consider taking a gas mask with you.", - "Knowledge is power. Seriously, just pick up a book.", - "Knowledge is power. And books are power you can read.", - "Knowledge is power. But not every book you find contains true knowledge.", - "Some days are full of sadness. Reading can help, if you have the right book.", - "Nothing can kill you if everything is already dead. Well, except cold, hunger, and… never mind.", - "I met a girl that insisted that she saw a land shark boring through rock, walls, and dirt alike. I'd consider it a fable, but I've seen things, and can't just say it's a lie.", - "Boil first, then drink. Ten men caravan once drank from a spring, and they are now known as a three man caravan.", - "I've once seen a full duffel bag pass hands five times in a week. Having a lot of stuff is a moot point if you can't run from zombies.", - "Tim says you can drive a car through a horde of zombies. Tim is now a zombie. Any questions?", - "They said: go solar, save the environment and yourself. Well… there is no environment to save now, but one can still save thyself I guess.", - "If you can't find a knife try smashing potted plants. It just might give you everything you need to make one.", - "What's the difference between a good and a bad choke point? The good one has another back door behind you.", - "So, methinks: if you could convince the cop-bots that you are their superior…", - "You'd be surprised how many items can be disassembled into their components. A guy around here, McSomething whatever his name is, is a master at this.", - "A soldering iron can be an aspiring mechanic's best friend. You can also cauterize a wound with it, but as many people died as lived from that treatment, so I guess it's a last resort.", - "I've seen some folks running with freshly installed CBMs. That means there is a way to get them from places other than ransacked shops. Maybe that explains those cut-up bodies I've seen around.", - "I'm fed up with smoked meat, but it lasts so long. Well… if I had more heart for learning cooking I guess I'd be able to diversify my food without sacrificing its shelf life.", - "Tricky Joe was hanged for his inventive ways of killing zombies. Yeah, burning down a building to smoke few hordes is ok, but burning a whole town with all the loot certainly is not.", - "Mr Tombstone always said: take nothing with you for the raids, save the space for loot. He was known as Joe then and he rightfully earned his nickname as the first tombstone 'owner' around this place.", - "When the whole town is one big supermarket a shopping cart becomes your best friend.", - "A friend is a second mouth to fill, but when it comes to work four hands are always better than two.", - "I was against drugs until I was almost killed by a zombie. I was hauling my sorry ass away from the horde, with nothing more but some white powder I got from that zombie. Saved me that time.", - "Not sure if Mike is sane any more. He was unfortunate enough to be driven in to a school one time. This experience broke more than his ribs then.", - "A thought about explosives. If you can still run and it did not went boom yet, run some more. There is no such thing as excess space between you and a stick of dynamite.", - "Avoid using launchers in narrow hallways, you might miss.", - "Met a mad chemist once. She made a battery from a potato… or was it lemon?", - "Met a mad chemist once. She made a battery from a potato, and then nobody was willing to eat the potato.", - "Police brutality lives on it seems. It's just more mechanical now, with all the cops dead and cop robots roaming free on the loose. If you'll get arrested who will give you justice? A zombie judge? Will they put you in a zombie prison? No thanks, I'll pass.", - "Is it dead yet? How can you tell if it was dead before and it's dead now? I prefer asking: are? *smash* you? *smash* dead? *smash* yet? *smash smash smash*", - "I hear there's strange big berries around, but why don't I hear first hand if they are filling for their size or not?", - "I've heard of a gang called The Doctors. You know, bank robbers wearing stethoscopes. What are they trying to achieve? I use paper money to start fires now.", - "You can hole up on a roof if you need to. Yeah, the rain will fall on your head, but it's harder for the dead to get you there. Get a tent, a rollmat, a sleeping bag and you're set.", - "I thought about putting a bag on my dog to carry some of my stuff. It didn't work, because it was a chihuahua, and it was eaten by a rottweiler. Should have put some Kevlar on it like those Z9. Oh well…", - "Stuff from zombies is filthy but perfectly fine otherwise. Using soap or other detergents won't hurt you. Quick wash and you're equipped for days.", - "Civilization has made a step back in time, so let's learn from the past. No fridges? Build a root cellar or keep food cool in the basement. No guns? Make a pointy stick or a cudgel, and work from there. The end of the world is not the end, it seems.", - "Hey, if you happen to find a set of two two-way radios, give one to me and we will be able to talk while being away from each other.", - "If I had the skill to do it, I'd build a boat and sail down the river. Maybe even towards the ocean. Or make an amphibious vehicle that could drive on land too. That would be useful.", - "I sink like a rock in water, but I once used a scuba tank to cross a river that had no bridge nearby.", - "Can you imagine? I've heard of people digging graves for loot. Whole cities lay dead for the taking and they dig graves! Madness!", - "When I broke a leg few years ago they had this great machine at the hospital that set the bones in place. I'd hate to break a limb in this apocalypse, but it's something to remember. You never know.", - "You, me, and another pair of hands and we might even think of settling down. Making a base of our own. A bastion of hope in the apocalypse. Think of it.", - "Hey if you are leading, just tell me what to do. You want me to shoot, go melee, use grenades? I can adjust to your style of fighting.", - "Everything seems to mutate nowadays. Even survivors. I wonder if I would look good with bunny ears? Would I hear better?", - "Everything seems to mutate nowadays. Even survivors. Do you think I'd still look good if I had piranha teeth?", - "Everything seems to mutate nowadays. Even survivors. You think I'd look good with thorns growing from my face?", - "Everything seems to mutate nowadays. Even survivors. If my eyeballs began shooting lasers do you think I would still be able see?", - "Everything seems to mutate nowadays. Even survivors. I wonder how I would look with antlers? Hats would be out of the question…", - "Winter is a harsh lady. You need fire to survive, to heat yourself and your water and food. Keep a cooking device to melt what is frozen, and a thermos for the liquids.", - "There is not much gas left for the vehicles. If I'd plan for the long run, I'd consider learning about steam engines, or maybe making biodiesel.", - "Heard a rumor that few cities were evacuated to a place that's not on the maps. Tough luck finding them now. But perhaps they don't want to be found. Or worse - perhaps you don't know that you don't want to find them either, if you catch my drift.", - "Heard a rumor about a lady on rollerblades with a fire extinguisher strapped to her back. Zipping around, hardly wearing no clothes, smashing cannibals in the face with a baseball bat. Don't that beat all?", - "Ok, some weird shit now. Before we met I saw a knight. No, I'm fine under the hood. A guy in a full medieval armor was cornered by some zombies. Much to be said, but half an hour later, he was still alive. Guess you can take a punch being a walking tin can.", - "If you're into electronics, you may try to make a noise emitter from a talking doll, or something that has a speaker. Why? To distract the zombies, of course.", - "A friend of mine was a hunter and showed me once how to butcher properly. You need a flat clean surface to place the products, a rack to hang the carcass in the air, and a good knife. If you're in a forest you may use a tree and a rope. Big game might require a saw too.", - "A friend of mine was a hunter and told me, that if you field dress a corpse, it will stay fresh a bit longer.", - "Look at the sky before you go for adventure. You will know what weather to expect. It's nothing compared to the old meteorology and satellite pictures, but at least you may know if you need the umbrella.", - "Be extra careful on roads. They are easy to travel on, but occasional minefield or a road block can make you feel sorry in an instant. I've even seen a tank once. I ran away like never before.", - "I know it's not best of times, but try to sleep well. You're not yourself if you're sleep deprived. Grab a pillow and a blanket. If you can't, even a teddy bear under your head and a pile of clothes to keep you warm can make a difference. And pick a spot well, even a chair or a bench is better than a cold ground.", - "There's no rule against wearing more than one set of pants. Well, I mean, there probably is, but nothing stopping you from breaking it!", - "There are two ways of throwing grenades. The smart one is throwing from behind a corner. The less smart one involves getting shot while throwing in the open and being torn apart by the resulting explosion." - ] -} +[ + { + "type": "snippet", + "category": "hint", + "text": [ + "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.", + "Squirrels really ain't such a bad snack if you don't blast them all to hell.", + "Ever run into those big worm things? If you see trails of churned-up dirt, you can be sure they're around.", + "Try to stay on the roads as much as you can. Giant worms can't cross them!", + "Don't relax after killing a giant worm. Little bits of them can break off and still attack!", + "If you see a big mob of zombies coming, RUN! Trying to fight them all is impossible unless you have a big tactical advantage.", + "If you see a big mob of zombies coming, you better run. Trying to fight them all is suicide!", + "When you see a swarm of zombies coming it's time to run!", + "If you're getting chased by a hoard of zombies, try ducking into the subways and traveling a block or two, then coming back up.", + "Watch out for those zombies that shriek; they'll let other zombies know where you are, and will attract them from all over.", + "Those acid-spitting zombies are pretty nasty, but if you're smart, you can get other zombies to wade through the acid.", + "If there's a pool of acid blocking your way, trying tossing a junk item into it. Eating up items will help neutralize the acid faster.", + "Rubber boots aren't as tough as combat boots and you don't run very fast in them. But I've seen zombies vomiting puddles of acid, and I'd hate to have my feet melt off, so I'd consider having a pair of those.", + "There's this type of zombie that can shoot bolts of lightning! Stay away from walls and stuff when they do… the electricity can travel along solid surfaces.", + "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!", + "If you run into a zombie hulk, it's probably a good idea to run. They're fast as hell, but pretty dumb; they'll try to smash through obstacles rather than going around, and that slows them down a lot.", + "Zombie brutes and hulks have really tough hide, but skeletal juggernauts with their bone plates are the worst. Don't bother shooting at them with lower-caliber guns, the bullet will bounce right off!", + "Try not to kill a boomer if it's standing right next to you. They tend to explode when they die, and that pink goop will get all over you.", + "Skeletons are a tough target for a gun. They're so skinny and full of holes that it's hard to make a good hit. And those big ones are hard as nails too.", + "Small skeletons are too delicate to smash through doors or windows. Big ones can walk in through a wall. At least they can't smell you, unlike zombies, so if you turn your light off at night you can sneak right past.", + "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.", + "It's a good idea to butcher corpses if you have the time. I've seen these weird zombies bring their friends back from the dead!", + "I have a buddy who was sleeping in this cabin way out in the woods, when he suddenly woke up to trees and vines growing right up through the floor and walls! He said it was some kind of huge tree beast…", + "Oh man, have you gone down into the old subway systems? I'd be careful… there's these things down there that are like zombies, but tougher.", + "There's snakes down in most of the old sewer systems. They're slow on land, but boy, those suckers can swim fast!", + "If you're planning on wandering around the sewers--not that you'd have a reason too--watch out for those fish. Those suckers are fast, and vicious too!", + "Have you seen those eyebots flying around? It's hard to say, but some faction's controlling them--maybe the military. All I know is, I don't want them taking my picture…", + "Ever go toe-to-toe with a manhack? Tiny little helicopters covered in knives. Best be packing a shotgun!", + "They're rare, but molebots are nasty things. They bore through the ground, then pop up to stab ya. Still, you're safe from them if you stay on pavement…", + "Don't fire your gun if you can help it - the noise attracts monsters. If you could get a silencer, or make one, it would give you some advantage.", + "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.", + "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.", + "I know it's tempting to just go full-auto and unload as many bullets as possible, but don't except as a last resort. It's inaccurate and wastes ammo.", + "If there's a bunch of zombies in a straight line, try unloading a burst from your gun. Be sure to aim at the zombie furthest away; you'll hit more of them that way.", + "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.", + "If you're in a corridor or something, and there's a bunch of zombies chasing you down it, try to wound the guy in front badly. He'll start moving slow and cause a serious traffic jam!", + "Here's a trick for taking care of a huge swarm of zombies chasing you: head into a liquor store, shoot out as many bottles as you can, then light the alcohol on fire. Then duck out the back door, and watch the zombies run into a burning building!", + "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.", + "For a good melee weapon, you can't beat a machete. I've seen a guy take down a zombie brute with one! Of course, if you can find a katana, that might be even better…", + "A knife spear makes a good weapon in a pinch, but a spike strapped to a stick isn't the sturdiest construction. At least you can strap the spike back on when it comes off.", + "You know, a glass bottle can make a good weapon in a pinch. If you break it over someone's head, the shattering glass will hurt them extra. Of course, it might hurt your hands, too…", + "You know what makes a nice weapon? Take a two by four, or a baseball bat or something, and stick a bunch of nails through the end!", + "BB guns may seem like a joke, but they've got their uses. They're good for hunting small game, or getting to know the basics of rifles.", + "Crossbows are a great weapon for long term use. Most of the time, you can retrieve the bolt after shooting it, so running out of ammo is less of a concern.", + "Consider going Robin Hood, if you have the strength to pull the string of a bow. Those larger ones need significant muscle power, but they hit hard, and are silent.", + "I hid in a dumpster once or twice. I may smell bad, but I'm not dead, as they say.", + "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.", + "Shotguns are nice; you can take out lots of baddies with a single shot. Just remember that they're noisy as hell, and you might end up attracting more than you kill.", + "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!", + "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.", + "You know, you don't have to go full auto with an assault rifle. Firing single shots is more accurate and efficient!", + "I've seen a couple guys running around with laser pistols. They seem like the perfect weapon: quiet, accurate, and deadly. But I've never found one, and I bet ammo is wicked scarce…", + "When it comes to footwear, you've got two basic choices as far as I see it; sneakers, for running extra fast, or boots for durability. Depends on your style, I guess.", + "You don't really need to wear gloves most of the time, but once in a while they'll really come in handy.", + "I wish I could still use those rollerblades. I would be so fast. But I took an arrow to the knee, and all that.", + "It's good to keep a filter mask or gas mask handy. You never know when you'll have to go into a smoke-filled room or something.", + "There's basically no reason not to wear safety glasses… nothing is worse than taking a hit to the eyes and getting blinded for a few seconds.", + "Ski goggles are a great choice if you're worried about getting stuff in your eyes. Perfect for dealing with boomers!", + "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. Beware that some types of zombies are camouflaged against it, and require proper light to be visible.", + "I know they look dumb, but wearing a fanny pack gives you that extra bit of storage without encumbering you.", + "Backpacks let you carry lots of stuff, but they limit your movement a lot. If you have to fight a zombie at close range, don't wear one, or at least drop it on the ground before the fight.", + "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.", + "It's a good idea to carry around a couple of empty bottles. You can fill them up with water, gasoline, or whatever!", + "First aid 101 for you. Always bandage your wounds, they will heal faster that way. Bandages are plenty and you can make makeshift ones easily, so there is no reason not to.", + "I can bandage you if you are wounded, so give me some spare bandages, if you have any.", + "If you have extra antiseptic, use it to disinfect your wounds, even if they aren't infected. They will recover faster that way.", + "Treat your infected wounds as soon as possible. If the infection spreads only antibiotics may help you, but it will take time, and you may still die from it if it's too serious.", + "If you need a bunch of rags for making Molotov cocktails, take a pair of scissors to an old t-shirt or something.", + "Carrying a lighter is something all veterans do. It takes up almost no space, and can easily save your life.", + "If you can spare the space, you might want to carry a fire extinguisher along. Nothing is worse than being trapped in a burning building!", + "Crowbars not only make a pretty good weapon, they're also useful for opening locked doors and lifting manhole covers.", + "If you're spending the night in a dangerous area, grab a shovel and dig pits all around your camp. If it's more than one night, you might want to put broken glass or sticks inside the pits for better effect.", + "A chainsaw may seem like a great weapon, but remember that they're slow, unwieldy, and very noisy.", + "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.", + "Bear traps are a nice way to cover an escape. If you place one in a doorway, the first zombie through will get stuck, and the rest won't be able to get past!", + "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.", + "Don't use Molotovs indoors. Especially in a liquor store.", + "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.", + "I once knew a guy who figured he'd survive a night in the subway by setting fires blocking off the tunnel in both directions and sleeping between them. He wound up asphyxiating on the smoke.", + "Don't light a Molotov until you're ready to throw it. Not only can they go out, but if you accidentally drop it or something, you're in trouble.", + "If you're weak or clumsy, it might be a good idea not to mess with Molotovs or grenades. Accidentally dropping them when you meant to throw them could be deadly.", + "If you're not particularly agile it might be good not to mess with Molotovs or grenades. Accidents involving these sort of items tend to be grievous.", + "If you're wandering in the wilderness, or following a road, keep an eye out for wild strawberries, blueberries and other gifts of nature.", + "Be careful eating wild mushrooms. Some are poisonous, and others can make you hallucinate.", + "Try to go around swamps, if you can. Some of them have sinkholes that can pull you right underground.", + "I heard about this group that raided a bee hive a while ago. Everyone got massacred but one, and he came home with this weird, magic honey stuff.", + "If you need to, you can swim across a river to escape; some monsters can't swim. Just make sure you drop as much stuff as possible first, and maybe strip naked, or you'll sink like a rock.", + "Houses can be a surprisingly good resource for all kinds of stuff; clothing, medication, food, books, and more. People kept all the odd things around, especially in basements.", + "While there's not much to loot, gas stations are a good source for gasoline, to power tools or to make Molotov cocktails.", + "It's not like in the movies; shooting a gas pump won't make it explode. But it WILL make it leak all over the place, which is a definite fire hazard.", + "I know grocery stores and stuff are full of fruit, but be careful, it's probably rotten.", + "Next time you visit a grocery store, load up on canned goods. They never go bad!", + "Load up on canned goods if you ever find a grocery store. Cans never go bad!", + "I've found more good weapons in hardware stores than anywhere else. Except gun stores, of course.", + "Liquor stores are a great place to pick up non-alcoholic beverages, too. Not that I mind alcohol!", + "Most gun stores follow pretty similar layouts. The restricted stuff - SMGs, assault rifles, and most importantly ammo - are always behind the counter.", + "I've spent many nights in the changing rooms at the back of clothing stores. Walls on four sides, far from the store's entrance, a corridor for easy defense… it's perfect!", + "Have you seen those weird science labs out in the middle of nowhere? I think you need some kind of special ID card to get in.", + "I have a dream of raiding a military bunker, but zombies and armor are a scary mix. And the sheer thought of being sprayed with bullets by a turret is giving me the shivers.", + "I've thought about raiding an ant hill before, but I realized it wasn't worth the risk. I doubt they have any loot beyond some scraps of food, you know?", + "This guy I know was walking through the subway when he came across a giant rift in the earth, with lava far below. Weird, huh?", + "In a lot of places, there's little hallways connecting the subways with the sewers, with heavy metal doors on both ends. It's a perfect place to sleep!", + "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.", + "Autodocs are probably your best bet to install bionics - if you can find one! However, I heard they won't work if you don't bring anesthetics to put you in a sleep.", + "Be wary of anything deeper than your average basement. Some folks heard scary screams from the ventilation shafts of mines and labs. Very unsettling screams.", + "A screwdriver a day keeps the scurvy away!", + "Hungrier than usual? Natural oils can help. Not tasty at all, but who cares when eating your leg is the second option?", + "Terrain can turn the tide of a battle. Make sure you use it against your enemies, lest it be used against you.", + "Folks that passed by the mine said something about foul smell. If you plan a visit there consider taking a gas mask with you.", + "Knowledge is power. Seriously, just pick up a book.", + "Knowledge is power. And books are power you can read.", + "Knowledge is power. But not every book you find contains true knowledge.", + "Some days are full of sadness. Reading can help, if you have the right book.", + "Nothing can kill you if everything is already dead. Well, except cold, hunger, and… never mind.", + "I met a girl that insisted that she saw a land shark boring through rock, walls, and dirt alike. I'd consider it a fable, but I've seen things, and can't just say it's a lie.", + "Boil first, then drink. Ten men caravan once drank from a spring, and they are now known as a three man caravan.", + "I've once seen a full duffel bag pass hands five times in a week. Having a lot of stuff is a moot point if you can't run from zombies.", + "Tim says you can drive a car through a horde of zombies. Tim is now a zombie. Any questions?", + "They said: go solar, save the environment and yourself. Well… there is no environment to save now, but one can still save thyself I guess.", + "If you can't find a knife try smashing potted plants. It just might give you everything you need to make one.", + "What's the difference between a good and a bad choke point? The good one has another back door behind you.", + "So, methinks: if you could convince the cop-bots that you are their superior…", + "You'd be surprised how many items can be disassembled into their components. A guy around here, McSomething whatever his name is, is a master at this.", + "A soldering iron can be an aspiring mechanic's best friend. You can also cauterize a wound with it, but as many people died as lived from that treatment, so I guess it's a last resort.", + "I've seen some folks running with freshly installed CBMs. That means there is a way to get them from places other than ransacked shops. Maybe that explains those cut-up bodies I've seen around.", + "I'm fed up with smoked meat, but it lasts so long. Well… if I had more heart for learning cooking I guess I'd be able to diversify my food without sacrificing its shelf life.", + "Tricky Joe was hanged for his inventive ways of killing zombies. Yeah, burning down a building to smoke few hordes is ok, but burning a whole town with all the loot certainly is not.", + "Mr Tombstone always said: take nothing with you for the raids, save the space for loot. He was known as Joe then and he rightfully earned his nickname as the first tombstone 'owner' around this place.", + "When the whole town is one big supermarket a shopping cart becomes your best friend.", + "A friend is a second mouth to fill, but when it comes to work four hands are always better than two.", + "I was against drugs until I was almost killed by a zombie. I was hauling my sorry ass away from the horde, with nothing more but some white powder I got from that zombie. Saved me that time.", + "Not sure if Mike is sane any more. He was unfortunate enough to be driven in to a school one time. This experience broke more than his ribs then.", + "A thought about explosives. If you can still run and it did not went boom yet, run some more. There is no such thing as excess space between you and a stick of dynamite.", + "Avoid using launchers in narrow hallways, you might miss.", + "Met a mad chemist once. She made a battery from a potato… or was it lemon?", + "Met a mad chemist once. She made a battery from a potato, and then nobody was willing to eat the potato.", + "Police brutality lives on it seems. It's just more mechanical now, with all the cops dead and cop robots roaming free on the loose. If you'll get arrested who will give you justice? A zombie judge? Will they put you in a zombie prison? No thanks, I'll pass.", + "Is it dead yet? How can you tell if it was dead before and it's dead now? I prefer asking: are? *smash* you? *smash* dead? *smash* yet? *smash smash smash*", + "I hear there's strange big berries around, but why don't I hear first hand if they are filling for their size or not?", + "I've heard of a gang called The Doctors. You know, bank robbers wearing stethoscopes. What are they trying to achieve? I use paper money to start fires now.", + "You can hole up on a roof if you need to. Yeah, the rain will fall on your head, but it's harder for the dead to get you there. Get a tent, a rollmat, a sleeping bag and you're set.", + "I thought about putting a bag on my dog to carry some of my stuff. It didn't work, because it was a chihuahua, and it was eaten by a rottweiler. Should have put some Kevlar on it like those Z9. Oh well…", + "Stuff from zombies is filthy but perfectly fine otherwise. Using soap or other detergents won't hurt you. Quick wash and you're equipped for days.", + "Civilization has made a step back in time, so let's learn from the past. No fridges? Build a root cellar or keep food cool in the basement. No guns? Make a pointy stick or a cudgel, and work from there. The end of the world is not the end, it seems.", + "Hey, if you happen to find a set of two two-way radios, give one to me and we will be able to talk while being away from each other.", + "If I had the skill to do it, I'd build a boat and sail down the river. Maybe even towards the ocean. Or make an amphibious vehicle that could drive on land too. That would be useful.", + "I sink like a rock in water, but I once used a scuba tank to cross a river that had no bridge nearby.", + "Can you imagine? I've heard of people digging graves for loot. Whole cities lay dead for the taking and they dig graves! Madness!", + "When I broke a leg few years ago they had this great machine at the hospital that set the bones in place. I'd hate to break a limb in this apocalypse, but it's something to remember. You never know.", + "You, me, and another pair of hands and we might even think of settling down. Making a base of our own. A bastion of hope in the apocalypse. Think of it.", + "Hey if you are leading, just tell me what to do. You want me to shoot, go melee, use grenades? I can adjust to your style of fighting.", + "Everything seems to mutate nowadays. Even survivors. I wonder if I would look good with bunny ears? Would I hear better?", + "Everything seems to mutate nowadays. Even survivors. Do you think I'd still look good if I had piranha teeth?", + "Everything seems to mutate nowadays. Even survivors. You think I'd look good with thorns growing from my face?", + "Everything seems to mutate nowadays. Even survivors. If my eyeballs began shooting lasers do you think I would still be able see?", + "Everything seems to mutate nowadays. Even survivors. I wonder how I would look with antlers? Hats would be out of the question…", + "Winter is a harsh lady. You need fire to survive, to heat yourself and your water and food. Keep a cooking device to melt what is frozen, and a thermos for the liquids.", + "There is not much gas left for the vehicles. If I'd plan for the long run, I'd consider learning about steam engines, or maybe making biodiesel.", + "Heard a rumor that few cities were evacuated to a place that's not on the maps. Tough luck finding them now. But perhaps they don't want to be found. Or worse - perhaps you don't know that you don't want to find them either, if you catch my drift.", + "Heard a rumor about a lady on rollerblades with a fire extinguisher strapped to her back. Zipping around, hardly wearing no clothes, smashing cannibals in the face with a baseball bat. Don't that beat all?", + "Ok, some weird shit now. Before we met I saw a knight. No, I'm fine under the hood. A guy in a full medieval armor was cornered by some zombies. Much to be said, but half an hour later, he was still alive. Guess you can take a punch being a walking tin can.", + "If you're into electronics, you may try to make a noise emitter from a talking doll, or something that has a speaker. Why? To distract the zombies, of course.", + "A friend of mine was a hunter and showed me once how to butcher properly. You need a flat clean surface to place the products, a rack to hang the carcass in the air, and a good knife. If you're in a forest you may use a tree and a rope. Big game might require a saw too.", + "A friend of mine was a hunter and told me, that if you field dress a corpse, it will stay fresh a bit longer.", + "Look at the sky before you go for adventure. You will know what weather to expect. It's nothing compared to the old meteorology and satellite pictures, but at least you may know if you need the umbrella.", + "Be extra careful on roads. They are easy to travel on, but occasional minefield or a road block can make you feel sorry in an instant. I've even seen a tank once. I ran away like never before.", + "I know it's not best of times, but try to sleep well. You're not yourself if you're sleep deprived. Grab a pillow and a blanket. If you can't, even a teddy bear under your head and a pile of clothes to keep you warm can make a difference. And pick a spot well, even a chair or a bench is better than a cold ground.", + "There's no rule against wearing more than one set of pants. Well, I mean, there probably is, but nothing stopping you from breaking it!", + "There are two ways of throwing grenades. The smart one is throwing from behind a corner. The less smart one involves getting shot while throwing in the open and being torn apart by the resulting explosion." + ] + } +] From 2bb549b1437008d5d88c4ef1eb956e262a0f6134 Mon Sep 17 00:00:00 2001 From: WeisserRitter Date: Sun, 21 Jun 2020 17:21:26 -0300 Subject: [PATCH 046/206] Include info about spawning pets from items (#41483) * Include info about spawning pets from items The PR relating to this issue https://github.com/CleverRaven/Cataclysm-DDA/pull/41467 did not include changes to the proper documentation. I have fixed this by including the new JSON attribute in JSON_INFO.md --- doc/JSON_INFO.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index b317347cd15ef..50dc119d7c372 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -2411,7 +2411,8 @@ The contents of use_action fields can either be a string indicating a built-in f "friendly_msg": "Good!", // (optional) message when the monster is programmed properly and it's friendly. "place_randomly": true, // if true: places the monster randomly around the player, if false: let the player decide where to put it (default: false) "skills": [ "unarmed", "throw" ], // (optional) array of skill IDs. Higher skill level means more likely to place a friendly monster. - "moves": 60 // how many move points the action takes. + "moves": 60, // how many move points the action takes. + "is_pet": false // specifies if the spawned monster is a pet. The monster will only spawn as a pet if it is spawned as friendly, hostile monsters will never be pets. }, "use_action": { "type": "place_npc", // place npc of specific class on the map From cb042931f51b4d06458fa5feec563bd51bac9baa Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Sun, 21 Jun 2020 12:19:43 -0600 Subject: [PATCH 047/206] Don't generate translation strings for TEST_DATA This commit adds ignore_directories to extract_json_strings script, so the data/mods/TEST_DATA directory (and its subdirectories) will be ignored when generating translation strings. Also add a print statement to the end of the script to tell where the output files are, and remove some trailing whitespace. --- lang/extract_json_strings.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lang/extract_json_strings.py b/lang/extract_json_strings.py index 746066e3f9ad1..ba5b05020b5d4 100755 --- a/lang/extract_json_strings.py +++ b/lang/extract_json_strings.py @@ -60,6 +60,11 @@ def warning_supressed(filename): "data/raw/color_templates/no_bright_background.json" }} +# ignore these directories and their subdirectories +ignore_directories = {os.path.normpath(dir) for dir in { + "data/mods/TEST_DATA", +}} + # these objects have no translatable strings ignorable = { "ascii_art", @@ -261,7 +266,7 @@ def extract_material(item): writestr(outfile, item["dmg_adj"][3]) wrote = True if not wrote and not "copy-from" in item : - print("WARNING: {}: no mandatory field in item: {}".format("/data/json/materials.json", item)) + print("WARNING: {}: no mandatory field in item: {}".format("/data/json/materials.json", item)) def extract_martial_art(item): outfile = get_outfile("martial_art") @@ -287,7 +292,7 @@ def extract_martial_art(item): onmiss_buffs = item.get("onmiss_buffs", list()) oncrit_buffs = item.get("oncrit_buffs", list()) onkill_buffs = item.get("onkill_buffs", list()) - + buffs = onhit_buffs + static_buffs + onmove_buffs + ondodge_buffs + onattack_buffs + onpause_buffs + onblock_buffs + ongethit_buffs + onmiss_buffs + oncrit_buffs + onkill_buffs for buff in buffs: writestr(outfile, buff["name"]) @@ -799,7 +804,7 @@ def extract_field_type(item): for fd in item.get("intensity_levels"): if "name" in fd: writestr(outfile,fd.get("name")) - + def extract_ter_furn_transform_messages(item): outfile = get_outfile("ter_furn_transform_messages") writestr(outfile,item.get("fail_message")) @@ -1186,6 +1191,8 @@ def extract_all_from_dir(json_dir): dirs.append(f) elif f in skiplist or full_name in ignore_files: continue + elif any(full_name.startswith(dir) for dir in ignore_directories): + continue elif f.endswith(".json"): if full_name in git_files_list: extract_all_from_file(full_name) @@ -1249,4 +1256,6 @@ def prepare_git_file_list(): if len(needs_plural - found_types) != 0: print("WARNING: type {} from needs_plural not found in any JSON objects".format(needs_plural - found_types)) +print("Output files in %s" % to_dir) + # done. From f032511600a45d4b34ae7462397a6eaa6a782797 Mon Sep 17 00:00:00 2001 From: LaVeyanFiend <51099123+LaVeyanFiend@users.noreply.github.com> Date: Sun, 21 Jun 2020 19:35:47 -0400 Subject: [PATCH 048/206] Add zombify_into entries for Aftershock, fix rotting grodd's aggression (#41335) * Add zombify_into for Aftershock mobs * Fix rotting grodd being a wimp --- data/mods/Aftershock/mobs/uplifted_monsters.json | 2 ++ data/mods/Aftershock/mobs/zombies.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/data/mods/Aftershock/mobs/uplifted_monsters.json b/data/mods/Aftershock/mobs/uplifted_monsters.json index 68c0f64e938c9..8d0191fae4d28 100644 --- a/data/mods/Aftershock/mobs/uplifted_monsters.json +++ b/data/mods/Aftershock/mobs/uplifted_monsters.json @@ -49,6 +49,7 @@ "path_settings": { "max_dist": 10 }, "anger_triggers": [ "HURT", "PLAYER_NEAR_BABY" ], "death_function": [ "NORMAL" ], + "zombify_into": "mon_zombie_upliftedbear", "death_drops": "xl_uplift_death_drop", "harvest": "demihuman_large_fur", "reproduction": { "baby_monster": "mon_uplifted_bear_cub", "baby_count": 1, "baby_timer": 700 }, @@ -106,6 +107,7 @@ "harvest": "demihuman_large_fur", "special_attacks": [ [ "scratch", 20 ] ], "death_function": [ "NORMAL" ], + "zombify_into": "mon_uplifted_ape_zed", "flags": [ "SEES", "SMELLS", "HEARS", "WARM", "BASHES", "GROUP_BASH", "ANIMAL", "PATH_AVOID_DANGER_1", "PATH_AVOID_DANGER_1" ] } ] diff --git a/data/mods/Aftershock/mobs/zombies.json b/data/mods/Aftershock/mobs/zombies.json index de87ed9d283e1..8309ab58850d5 100644 --- a/data/mods/Aftershock/mobs/zombies.json +++ b/data/mods/Aftershock/mobs/zombies.json @@ -153,7 +153,7 @@ "material": [ "flesh" ], "symbol": "&", "color": "white", - "aggression": 0, + "aggression": 100, "morale": 100, "melee_skill": 6, "melee_dice": 2, From 7cbcfa360bd7b98e07be9e9078d75901e5750c04 Mon Sep 17 00:00:00 2001 From: CodeBandit <63547126+CodeBandit@users.noreply.github.com> Date: Sun, 21 Jun 2020 19:37:41 -0400 Subject: [PATCH 049/206] Dodge decreases linearly to 0 from 50% stamina (#41461) * Dodge decreases linearly to 0 from 50% stamina * Add test for stamina's effect on dodge --- src/melee.cpp | 6 +++++ tests/melee_dodge_hit_test.cpp | 49 ++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/src/melee.cpp b/src/melee.cpp index 386b6c70e8871..3368e8be0ec77 100644 --- a/src/melee.cpp +++ b/src/melee.cpp @@ -862,6 +862,12 @@ float player::get_dodge() const ret *= speed_stat / 100.0f; } + //Dodge decreases linearly to 0 when below 50% stamina. + const float stamina_ratio = static_cast( get_stamina() ) / get_stamina_max(); + if( stamina_ratio <= .5 ) { + ret *= 2 * stamina_ratio; + } + return std::max( 0.0f, ret ); } diff --git a/tests/melee_dodge_hit_test.cpp b/tests/melee_dodge_hit_test.cpp index c47127dd67845..0146ca8a643aa 100644 --- a/tests/melee_dodge_hit_test.cpp +++ b/tests/melee_dodge_hit_test.cpp @@ -352,3 +352,52 @@ TEST_CASE( "player::get_dodge while grabbed", "[player][melee][dodge][grab]" ) } } +TEST_CASE( "player::get_dodge stamina effects", "[player][melee][dodge][stamina]" ) +{ + avatar &dummy = g->u; + clear_character( dummy ); + + SECTION( "8/8/8/8, no skills, unencumbered" ) { + const int stamina_max = dummy.get_stamina_max(); + + SECTION( "100% stamina" ) { + CHECK( dummy.get_dodge() == 4.0f ); + } + + SECTION( "75% stamina" ) { + dummy.set_stamina( .75 * stamina_max ); + CHECK( dummy.get_dodge() == 4.0f ); + } + + SECTION( "50% stamina" ) { + dummy.set_stamina( .5 * stamina_max ); + CHECK( dummy.get_dodge() == 4.0f ); + } + + SECTION( "40% stamina" ) { + dummy.set_stamina( .4 * stamina_max ); + CHECK( dummy.get_dodge() == 3.2f ); + } + + SECTION( "30% stamina" ) { + dummy.set_stamina( .3 * stamina_max ); + CHECK( dummy.get_dodge() == 2.4f ); + } + + SECTION( "20% stamina" ) { + dummy.set_stamina( .2 * stamina_max ); + CHECK( dummy.get_dodge() == 1.6f ); + } + + SECTION( "10% stamina" ) { + dummy.set_stamina( .1 * stamina_max ); + CHECK( dummy.get_dodge() == 0.8f ); + } + + SECTION( "0% stamina" ) { + dummy.set_stamina( 0 ); + CHECK( dummy.get_dodge() == 0.0f ); + } + } +} + From ea2928fe5bb868fcf8e79c86f65a86d0459bbe06 Mon Sep 17 00:00:00 2001 From: eso Date: Sun, 21 Jun 2020 16:40:58 -0700 Subject: [PATCH 050/206] use sorted names to initialize pocket item white/blacklist rather than raw item list (#41457) * use sorted names to initialize uilist rather than raw item list --- src/item_contents.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/item_contents.cpp b/src/item_contents.cpp index 0d0d3c9e33034..247e52e4b8adc 100644 --- a/src/item_contents.cpp +++ b/src/item_contents.cpp @@ -147,8 +147,8 @@ bool pocket_favorite_callback::key( const input_context &, const input_event &ev } std::sort( itype_initializer.begin(), itype_initializer.end(), localized_compare ); - for( const std::pair it : nearby_itypes ) { - selector_menu.addentry( it.first ); + for( const std::string &it : itype_initializer ) { + selector_menu.addentry( it ); } selector_menu.query(); From 0bbd81768dfeb64e172ea915060dcb448f1da700 Mon Sep 17 00:00:00 2001 From: Andrey Bienkowski Date: Mon, 22 Jun 2020 07:33:30 +0300 Subject: [PATCH 051/206] Modernize bullwhip_razor --- data/json/items/melee/misc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/melee/misc.json b/data/json/items/melee/misc.json index 6991599a5d610..8448921cf09ca 100644 --- a/data/json/items/melee/misc.json +++ b/data/json/items/melee/misc.json @@ -23,7 +23,7 @@ "symbol": "/", "color": "brown", "weight": "3496 g", - "volume": 9, + "volume": "2250 ml", "price": 4800, "price_postapoc": 5200, "to_hit": 2, From 5f5eb7ade3a6171510088b679e3c443cfd1a0f95 Mon Sep 17 00:00:00 2001 From: Curtis Merrill Date: Mon, 22 Jun 2020 00:47:13 -0400 Subject: [PATCH 052/206] [Aftershock] Skull gun (#41396) --- data/json/flags.json | 6 +++ data/mods/Aftershock/items/cbms.json | 10 ++++ .../mods/Aftershock/items/gun/projectile.json | 25 ++++++++++ data/mods/Aftershock/player/bionics.json | 14 ++++++ data/mods/Aftershock/spells/spells.json | 14 ++++++ src/activity_handlers.cpp | 4 +- src/bionics.cpp | 6 +++ src/bionics.h | 5 ++ src/handle_action.cpp | 48 ++++++++++++++----- src/magic.cpp | 4 ++ src/magic.h | 1 + 11 files changed, 122 insertions(+), 15 deletions(-) create mode 100644 data/mods/Aftershock/items/gun/projectile.json diff --git a/data/json/flags.json b/data/json/flags.json index 01fdfd4ff8054..ae09ac004d0ff 100644 --- a/data/json/flags.json +++ b/data/json/flags.json @@ -615,6 +615,12 @@ "context": [ "SPELL" ], "//": "This makes the spell's effects permanent." }, + { + "id": "NO_FAIL", + "type": "json_flag", + "context": [ "SPELL" ], + "//": "Spellcasting never fails for this spell" + }, { "id": "IGNORE_WALLS", "type": "json_flag", diff --git a/data/mods/Aftershock/items/cbms.json b/data/mods/Aftershock/items/cbms.json index 2169f16fb3a6b..0446f6db69961 100644 --- a/data/mods/Aftershock/items/cbms.json +++ b/data/mods/Aftershock/items/cbms.json @@ -55,5 +55,15 @@ "price": 0, "price_postapoc": 0, "difficulty": 8 + }, + { + "id": "afs_bio_skullgun", + "copy-from": "bionic_general", + "type": "BIONIC_ITEM", + "name": { "str": "Skullgun CBM" }, + "description": "Concealed in your head is a single shot .40 pistol. Activate the bionic to fire and reload the skullgun.", + "price": 100000, + "price_postapoc": 1500, + "difficulty": 16 } ] diff --git a/data/mods/Aftershock/items/gun/projectile.json b/data/mods/Aftershock/items/gun/projectile.json new file mode 100644 index 0000000000000..7531f3f51c598 --- /dev/null +++ b/data/mods/Aftershock/items/gun/projectile.json @@ -0,0 +1,25 @@ +[ + { + "id": "bio_skullgun_gun", + "looks_like": "glock_17", + "type": "GUN", + "name": { "str": "bionic skullgun" }, + "description": "Bionic one-shot subdermal .40 pistol integrated with your head.", + "volume": "80 ml", + "price": 0, + "to_hit": -2, + "bashing": 3, + "material": [ "superalloy", "plastic" ], + "symbol": "(", + "color": "magenta", + "skill": "shotgun", + "ammo": [ "40" ], + "ranged_damage": { "damage_type": "bullet", "amount": -8 }, + "dispersion": 855, + "durability": 6, + "clip_size": 1, + "reload": 200, + "flags": [ "NEVER_JAMS", "RELOAD_EJECT", "NO_UNWIELD", "TRADER_AVOID" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 1 } } ] + } +] diff --git a/data/mods/Aftershock/player/bionics.json b/data/mods/Aftershock/player/bionics.json index 079cbff55c97c..9e40266d1387a 100644 --- a/data/mods/Aftershock/player/bionics.json +++ b/data/mods/Aftershock/player/bionics.json @@ -57,5 +57,19 @@ "description": "You've worked for some nasty people. People who installed a bomb at the top of your spine. They are all dead now but there is unfortunately a dead man switch if you don't check in roughly every thirty days. You need this out and fast.", "occupied_bodyparts": [ [ "head", 2 ] ], "enchantments": [ "cranial_explosion" ] + }, + { + "type": "bionic", + "id": "afs_bio_skullgun", + "name": { "str": "Skullgun CBM" }, + "description": "Concealed in your head is a single shot .40 pistol. Activate the bionic to fire and reload the skullgun.", + "occupied_bodyparts": [ [ "head", 5 ] ], + "encumbrance": [ [ "head", 5 ] ], + "act_cost": "35 J", + "fake_item": "bio_skullgun_gun", + "flags": [ "BIONIC_TOGGLED", "BIONIC_WEAPON", "NO_UNWIELD" ], + "stat_bonus": [ [ "INT", -4 ], [ "PER", -2 ] ], + "canceled_mutations": [ "INT_UP", "INT_UP_2", "INT_UP_3", "INT_UP_4", "INT_ALPHA" ], + "spell_on_activation": { "id": "skullgun_snapback", "hit_self": true } } ] diff --git a/data/mods/Aftershock/spells/spells.json b/data/mods/Aftershock/spells/spells.json index 540295dcb5968..96126eee3bbe1 100644 --- a/data/mods/Aftershock/spells/spells.json +++ b/data/mods/Aftershock/spells/spells.json @@ -10,5 +10,19 @@ "min_damage": 82, "max_damage": 166, "damage_type": "fire" + }, + { + "id": "skullgun_snapback", + "type": "SPELL", + "name": "Skullgun Snapback", + "//": "Used for activating skullgun cbm, not castable", + "description": "This fake spell occurs on skullgun activation. May be fatal if done in critical condition.", + "effect": "target_attack", + "valid_targets": [ "self" ], + "flags": [ "SILENT", "NO_LEGS", "NO_HANDS", "NO_FAIL" ], + "min_damage": 10, + "max_damage": 10, + "message": "Your head snaps back from the force of the shot.", + "damage_type": "bio" } ] diff --git a/src/activity_handlers.cpp b/src/activity_handlers.cpp index 664a2c369649e..bac976525e9cb 100644 --- a/src/activity_handlers.cpp +++ b/src/activity_handlers.cpp @@ -4427,9 +4427,7 @@ void activity_handlers::spellcasting_finish( player_activity *act, player *p ) // if level != 1 then we need to set the spell's level if( level_override != -1 ) { - while( spell_being_cast.get_level() < level_override && !spell_being_cast.is_max_level() ) { - spell_being_cast.gain_level(); - } + spell_being_cast.set_level( level_override ); } const bool no_fail = act->get_value( 1 ) == 1; diff --git a/src/bionics.cpp b/src/bionics.cpp index 8cf10484a1d75..88a7c58780ad7 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -281,6 +281,7 @@ void bionic_data::load( const JsonObject &jsobj, const std::string & ) optional( jsobj, was_loaded, "fake_item", fake_item, itype_id() ); optional( jsobj, was_loaded, "enchantments", enchantments ); + optional( jsobj, was_loaded, "spell_on_activation", spell_on_activate ); optional( jsobj, was_loaded, "weight_capacity_modifier", weight_capacity_modifier, 1.0f ); optional( jsobj, was_loaded, "exothermic_power_gen", exothermic_power_gen ); @@ -559,6 +560,11 @@ bool Character::activate_bionic( int b, bool eff_only, bool *close_bionics_ui ) } } + if( !bio.activate_spell( *this ) ) { + // the spell this bionic uses was unable to be cast + return false; + } + // We can actually activate now, do activation-y things mod_power_level( -bio.info().power_activate ); diff --git a/src/bionics.h b/src/bionics.h index 872bc68fdb18c..cbbc564606469 100644 --- a/src/bionics.h +++ b/src/bionics.h @@ -12,10 +12,12 @@ #include "bodypart.h" #include "calendar.h" #include "flat_set.h" +#include "magic.h" #include "optional.h" #include "translations.h" #include "type_id.h" #include "units.h" +#include "value_ptr.h" class JsonIn; class JsonObject; @@ -85,6 +87,7 @@ struct bionic_data { /** bionic enchantments */ std::vector enchantments; + cata::value_ptr spell_on_activate; /** * Body part slots used to install this bionic, mapped to the amount of space required. */ @@ -178,6 +181,8 @@ struct bionic { float get_auto_start_thresh() const; bool is_auto_start_on() const; + bool activate_spell( Character &caster ); + void serialize( JsonOut &json ) const; void deserialize( JsonIn &jsin ); private: diff --git a/src/handle_action.cpp b/src/handle_action.cpp index 5962b2fae79f4..6c4f0f534d61d 100644 --- a/src/handle_action.cpp +++ b/src/handle_action.cpp @@ -1389,9 +1389,11 @@ static void open_movement_mode_menu() } } +static bool assign_spellcasting( avatar &you, spell &sp, bool fake_spell ); + static void cast_spell() { - player &u = g->u; + avatar &u = g->u; std::vector spells = u.magic.spells(); @@ -1421,35 +1423,45 @@ static void cast_spell() spell &sp = *u.magic.get_spells()[spell_index]; - if( u.is_armed() && !sp.has_flag( spell_flag::NO_HANDS ) && - !u.weapon.has_flag( flag_MAGIC_FOCUS ) ) { + assign_spellcasting( u, sp, false ); +} + +// returns if the spell was assigned +static bool assign_spellcasting( avatar &you, spell &sp, bool fake_spell ) +{ + if( you.is_armed() && !sp.has_flag( spell_flag::NO_HANDS ) && + !you.weapon.has_flag( flag_MAGIC_FOCUS ) ) { add_msg( game_message_params{ m_bad, gmf_bypass_cooldown }, _( "You need your hands free to cast this spell!" ) ); - return; + return false; } - if( !u.magic.has_enough_energy( u, sp ) ) { + if( !you.magic.has_enough_energy( you, sp ) ) { add_msg( game_message_params{ m_bad, gmf_bypass_cooldown }, _( "You don't have enough %s to cast the spell." ), sp.energy_string() ); - return; + return false; } - if( sp.energy_source() == magic_energy_type::hp && !u.has_quality( qual_CUT ) ) { + if( sp.energy_source() == magic_energy_type::hp && !you.has_quality( qual_CUT ) ) { add_msg( game_message_params{ m_bad, gmf_bypass_cooldown }, _( "You cannot cast Blood Magic without a cutting implement." ) ); - return; + return false; } - player_activity cast_spell( ACT_SPELLCASTING, sp.casting_time( u ) ); + player_activity cast_spell( ACT_SPELLCASTING, sp.casting_time( you ) ); // [0] this is used as a spell level override for items casting spells - cast_spell.values.emplace_back( -1 ); + if( fake_spell ) { + cast_spell.values.emplace_back( sp.get_level() ); + } else { + cast_spell.values.emplace_back( -1 ); + } // [1] if this value is 1, the spell never fails cast_spell.values.emplace_back( 0 ); // [2] this value overrides the mana cost if set to 0 cast_spell.values.emplace_back( 1 ); cast_spell.name = sp.id().c_str(); - if( u.magic.casting_ignore ) { + if( you.magic.casting_ignore ) { const std::vector ignored_distractions = { distraction_type::noise, distraction_type::pain, @@ -1465,7 +1477,19 @@ static void cast_spell() cast_spell.ignore_distraction( ignored ); } } - u.assign_activity( cast_spell, false ); + you.assign_activity( cast_spell, false ); + return true; +} + +// this is here because it shares some things in common with cast_spell +bool bionic::activate_spell( Character &caster ) +{ + if( !caster.is_avatar() || !id->spell_on_activate ) { + // the return value tells us if the spell fails. if it has no spell it can't fail + return true; + } + spell sp = id->spell_on_activate->get_spell(); + return assign_spellcasting( *caster.as_avatar(), sp, true ); } void game::open_consume_item_menu() diff --git a/src/magic.cpp b/src/magic.cpp index eaf0831ff31cc..d359521969071 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -118,6 +118,7 @@ std::string enum_to_string( spell_flag data ) case spell_flag::PAIN_NORESIST: return "PAIN_NORESIST"; case spell_flag::WITH_CONTAINER: return "WITH_CONTAINER"; case spell_flag::SPAWN_GROUP: return "SPAWN_GROUP"; + case spell_flag::NO_FAIL: return "NO_FAIL"; case spell_flag::WONDER: return "WONDER"; case spell_flag::LAST: break; } @@ -770,6 +771,9 @@ std::string spell::message() const float spell::spell_fail( const Character &guy ) const { + if( has_flag( spell_flag::NO_FAIL ) ) { + return 0.0f; + } // formula is based on the following: // exponential curve // effective skill of 0 or less is 100% failure diff --git a/src/magic.h b/src/magic.h index 511ccb77fd51d..2f658c002889e 100644 --- a/src/magic.h +++ b/src/magic.h @@ -56,6 +56,7 @@ enum class spell_flag : int { MUTATE_TRAIT, // overrides the mutate spell_effect to use a specific trait_id instead of a category WONDER, // instead of casting each of the extra_spells, it picks N of them and casts them (where N is std::min( damage(), number_of_spells )) PAIN_NORESIST, // pain altering spells can't be resisted (like with the deadened trait) + NO_FAIL, // this spell cannot fail when you cast it WITH_CONTAINER, // items spawned with container SPAWN_GROUP, // spawn or summon from an item or monster group, instead of individual item/monster ID LAST From f557fc0a564eead26cf7ca9ff242b7aaff6f9996 Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Fri, 19 Jun 2020 17:57:17 -0600 Subject: [PATCH 053/206] Add table.py to make tables of JSON data This script prints a Markdown or CSV table of all JSON data, or just those matching a specific type. Columns are given on the command-line. --- tools/json_tools/table.py | 182 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100755 tools/json_tools/table.py diff --git a/tools/json_tools/table.py b/tools/json_tools/table.py new file mode 100755 index 0000000000000..2b4dbb6a0806b --- /dev/null +++ b/tools/json_tools/table.py @@ -0,0 +1,182 @@ +#!/usr/bin/env python2 +"""Print a Markdown or CSV table of JSON values from the given keys. +Run this script with -h for full usage information. + +Examples with basic field names: + + %(prog)s --type=TOOL id volume weight longest_side + %(prog)s --type=ARMOR --format=csv id encumbrance coverage + %(prog)s --type=COMESTIBLE id fun calories quench healthy + +Examples with nested attributes: + + %(prog)s --type=ARMOR name.str pocket_data.moves + %(prog)s --type=MAGAZINE name.str pocket_data.ammo_restriction + +""" + +import argparse +import codecs +import sys +import util + +# Avoid (most) unicode frustrations +# https://pythonhosted.org/kitchen/unicode-frustrations.html +UTF8Writer = codecs.getwriter('utf8') +sys.stdout = UTF8Writer(sys.stdout) + +# Command-line arguments +parser = argparse.ArgumentParser( + description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) +parser.add_argument( + "columns", metavar="column_key", nargs="+", + help="list of JSON object keys to be columns in the table") +parser.add_argument( + "--fnmatch", + default="*.json", + help="override with glob expression to select a smaller fileset.") +parser.add_argument( + "-f", "--format", + default="md", + help="output format: 'md' for markdown, 'csv' for comma-separated") +parser.add_argument( + "-t", "--type", + help="only include JSON data matching this type") + + +def safe_value(value, format): + """Return values with special characters escaped for the given format. + + CSV values are "quoted" if they contain a comma or quote: + + >>> safe_value('bacon, eggs, spam', 'csv') + '"bacon, eggs, spam"' + >>> safe_value('Tim "The Enchanter" Jones', 'csv') + '"Tim ""The Enchanter"" Jones"' + + Markdown values have "|" escaped to prevent breaking table layout: + + >>> safe_value('x|y|z', 'md') + 'x\\\\|y\\\\|z' + + """ + if format == 'md': + return value.replace('|', '\|') + + elif format == 'csv': + if ',' in value or '"' in value: + return '"%s"' % value.replace('"', '""') + else: + return value + + else: + raise ValueError("Unknown format '%s'" % format) + + +def print_row(values, format, is_header=False): + """Print a row of string values in markdown or csv format. + + >>> print_row(['name', 'quest', 'favorite color'], 'md') + | name | quest | favorite color + + >>> print_row(['Lancelot', 'Holy Grail', 'blue'], 'csv') + Lancelot,Holy Grail,blue + + """ + safe_values = [safe_value(v, format) for v in values] + + # Markdown: | col1 | col2 | col3 + if format == 'md': + print("| " + " | ".join(safe_values)) + # Markdown table needs a separator after the header + if is_header: + print("| --- " * len(safe_values)) + + # CSV: col1,col2,col3 + elif format == 'csv': + print(",".join(safe_values)) + + else: + raise ValueError("Unknown format: '%s'" % format) + + +def item_values(item, fields): + """Return item values from within the given fields, converted to strings. + + Fields may be plain string or numeric values: + + >>> item_values({'name': 'sword', 'length_cm': 90}, + ... ['name', 'length_cm']) + ['sword', '90'] + + Fields may also be nested objects; subkeys may be referenced like key.subkey: + + >>> item_values({'loc': {'x': 5, 'y': 10}}, ['loc.x', 'loc.y']) + ['5', '10'] + + Fields with a nested object list have their values combined with "/": + + >>> item_values({'locs': [{'x': 4, 'y': 8}, {'x': 5, 'y': 10}] }, + ... ['locs.x', 'locs.y']) + ['4 / 5', '8 / 10'] + + Fields may include both plain and dotted keys: + + >>> item_values({'id': 'd6', 'name': {'str': 'die', 'str_pl': 'dice'}}, + ... ['id', 'name.str', 'name.str_pl']) + ['d6', 'die', 'dice'] + + """ + values = [] + for field in fields: + if "." in field: + subkeys = field.split(".") + else: + subkeys = [field] + # Descend into dotted keys + it = item + for subkey in subkeys: + # Is it a dict with this subkey? + if isinstance(it, dict) and subkey in it: + it = it[subkey] + # Is it a list of dicts having this subkey? + elif isinstance(it, list) and all(subkey in o for o in it): + # Pull from all subkeys, or just the one + if len(it) == 1: + it = it[0][subkey] + else: + it = [i[subkey] for i in it] + # Stop if any subkey is not found + else: + it = "None" + break + + # Make dict presentable + if isinstance(it, dict): + values.append("%s" % it.items()) + # Separate lists with slashes + elif isinstance(it, list): + values.append(" / ".join("%s" % i for i in it)) + # Otherwise just force string + else: + values.append("%s" % it) + + return values + + +if __name__ == "__main__": + args = parser.parse_args() + + # Get data (don't care about load errors) + json_data, _ = util.import_data(json_fmatch=args.fnmatch) + + # Header row + print_row(args.columns, args.format, is_header=True) + + # One row per item, matching type if given + for item in json_data: + if args.type and item.get('type') != args.type: + continue + + print_row(item_values(item, args.columns), args.format) + From bcb44892841232004069bc623dc14e86c41d9b28 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Mon, 22 Jun 2020 02:43:10 -0400 Subject: [PATCH 054/206] Add section on adding NPC dialogue to Modding.md (#41478) --- doc/MODDING.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/doc/MODDING.md b/doc/MODDING.md index 12f4312c6519f..058164b34043f 100644 --- a/doc/MODDING.md +++ b/doc/MODDING.md @@ -199,6 +199,23 @@ The format is as follows: Valid values for `subtype` are `whitelist` and `blacklist`. `scenarios` is an array of the scenario ids that you want to blacklist or whitelist. +### Adding dialogue to existing NPCs + +You can't edit existing dialog, but you can add new dialogue by adding a new response that can kick off new dialogue and missions. Here is a working example from DinoMod: + +```json + { + "type": "talk_topic", + "id": "TALK_REFUGEE_BEGGAR_2_WEARING", + "responses": [ + { + "text": "Yes. I ask because I noticed there are dinosaurs around. Do you know anything about that?", + "topic": "TALK_REFUGEE_BEGGAR_2_DINO2" + } + ] + } +``` + ## Important note on json files The following characters: `[ { , } ] : "` are *very* important when adding or modifying JSON files. This means a single missing `,` or `[` or `}` can be the difference between a working file and a hanging game at startup. From bb7b3b7ba2e1a502a9652d7f260100f2e140cb25 Mon Sep 17 00:00:00 2001 From: eso Date: Mon, 22 Jun 2020 05:00:56 -0700 Subject: [PATCH 055/206] fix encumbrance, storage, and descriptions for dimensional toolbelts (formerly girdles of pockets) (#41437) * fix encumbrance, storage, and descriptions for girdles of pockets * lint * add volume multipliers to girdle pockets * update names/descriptions of dimensional belts * fix spacing --- .../mods/Magiclysm/items/enchanted_belts.json | 84 +++++++++++++++---- 1 file changed, 70 insertions(+), 14 deletions(-) diff --git a/data/mods/Magiclysm/items/enchanted_belts.json b/data/mods/Magiclysm/items/enchanted_belts.json index 376bd9a23aaf3..a44fbf944485a 100644 --- a/data/mods/Magiclysm/items/enchanted_belts.json +++ b/data/mods/Magiclysm/items/enchanted_belts.json @@ -47,32 +47,88 @@ "type": "TOOL_ARMOR", "copy-from": "mbelt_leather", "id": "mbelt_pockets_lesser", - "name": { "str": "Lesser Girdle of Pockets", "str_pl": "Lesser Girdles of Pockets" }, - "description": "A wide girdle that fits around your waist, coverd in numerous small pouches that hold a lot more than they should, and the weight of their contents is greatly reduced.", + "name": { "str": "lesser dimensional toolbelt" }, + "description": "A sturdy workman's belt that fits around your waist, covered in easy to access pouches. Like all dimensional spaces, they hold more than they should with a fair weight reduction.", "coverage": 10, "encumbrance": 4, - "weight_capacity_bonus": "5 kg", + "max_encumbrance": 10, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "9 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "9 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "9 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "9 kg", "moves": 80 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "9 kg", + "moves": 90, + "weight_multiplier": 0.5, + "volume_multiplier": 0.35 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "9 kg", + "moves": 90, + "weight_multiplier": 0.5, + "volume_multiplier": 0.35 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "9 kg", + "moves": 90, + "weight_multiplier": 0.5, + "volume_multiplier": 0.35 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "9 kg", + "moves": 90, + "weight_multiplier": 0.5, + "volume_multiplier": 0.35 + } ] }, { "type": "TOOL_ARMOR", "copy-from": "mbelt_leather", "id": "mbelt_pockets_greater", - "name": { "str": "Greater Girdle of Pockets", "str_pl": "Greater Girdles of Pockets" }, - "description": "A wide girdle that fits around your waist, coverd in numerous small pouches that hold a lot more than they should, and the weight of their contents is greatly reduced.", + "name": { "str": "greater dimensional toolbelt" }, + "description": "A heavy duty workman's belt that fits around your waist, covered in easy to access pouches. Like all dimensional spaces, they hold far more than they should with a substantial weight reduction.", "coverage": 10, "encumbrance": 6, - "weight_capacity_bonus": "10 kg", + "max_encumbrance": 8, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "12 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "12 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "12 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "12 kg", "moves": 80 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "12 kg", + "moves": 80, + "weight_multiplier": 0.3, + "volume_multiplier": 0.2 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "12 kg", + "moves": 80, + "weight_multiplier": 0.3, + "volume_multiplier": 0.2 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "12 kg", + "moves": 80, + "weight_multiplier": 0.3, + "volume_multiplier": 0.2 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "12 kg", + "moves": 80, + "weight_multiplier": 0.3, + "volume_multiplier": 0.2 + } ] }, { From 1a06bd788af882f3309a081c9d419941e8a48b10 Mon Sep 17 00:00:00 2001 From: Brian-Otten <47374323+Brian-Otten@users.noreply.github.com> Date: Mon, 22 Jun 2020 16:02:05 +0200 Subject: [PATCH 056/206] Add anti emetic effect to "High" effect. --- data/json/effects.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/effects.json b/data/json/effects.json index aecbe27f76858..770121b0e0f43 100644 --- a/data/json/effects.json +++ b/data/json/effects.json @@ -1310,7 +1310,7 @@ "name": [ "High" ], "desc": [ "You are high as a kite." ], "apply_message": "You feel lightheaded.", - "base_mods": { "int_mod": [ -1 ], "per_mod": [ -1 ] } + "base_mods": { "int_mod": [ -1 ], "per_mod": [ -1 ], "vomit_tick": [ 60 ] } }, { "type": "effect_type", From 50f3769a4d4ea79cabf57af2a33357a2262c7012 Mon Sep 17 00:00:00 2001 From: DarkRain Date: Mon, 22 Jun 2020 10:42:46 -0500 Subject: [PATCH 057/206] Fix ranch mission mapgen. --- data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json b/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json index 20a73f82d8e59..bf995c956e7ed 100644 --- a/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json +++ b/data/json/npcs/tacoma_ranch/NPC_ranch_foreman.json @@ -122,7 +122,7 @@ "place_nested": [ { "chunks": [ "tacoma_commune_west_wall_door" ], "x": 22, "y": 0 } ] }, { - "om_terrain": "ranch_camp_66", + "om_terrain": "ranch_camp_75", "translate_ter": [ { "from": "t_underbrush", "to": "t_dirt", "x": 0, "y": 0 } ], "place_nested": [ { "chunks": [ "tacoma_commune_east_wall_door" ], "x": 0, "y": 0 }, From a9c38c26d02a3074e590f83d53c356868f50eacc Mon Sep 17 00:00:00 2001 From: DarkRain Date: Mon, 22 Jun 2020 10:47:38 -0500 Subject: [PATCH 058/206] Fix Jack Isherwood mission target/description mismatch. --- data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json index 8814f688f6f88..1942f5f8f8420 100644 --- a/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json @@ -312,7 +312,7 @@ "difficulty": 3, "value": 20000, "item": "jar_3l_glass", - "count": 20, + "count": 10, "origins": [ "ORIGIN_SECONDARY" ], "has_generic_rewards": false, "followup": "MISSION_ISHERWOOD_JACK_2", @@ -322,7 +322,7 @@ }, "dialogue": { "describe": "I could use some help scavenging.", - "offer": "We could use some 3 liter jars to preserve our produce. Can you bring me 20 large three liter jars? I'll give you some preserves in exchange.", + "offer": "We could use some 3 liter jars to preserve our produce. Can you bring me 10 large three liter jars? I'll give you some preserves in exchange.", "accepted": "Thank you. It's important to preserve foods while we can.", "rejected": "Oh well. I'll see if I can find another way, thanks.", "advice": "Grocery stores, house kitchens, there's plenty of places to look.", From 3c56034c573c86c5da15ad532f01f124a944ba32 Mon Sep 17 00:00:00 2001 From: KorGgenT Date: Mon, 22 Jun 2020 12:51:39 -0400 Subject: [PATCH 059/206] Allow nested items to be deselected if selecting the container for dropping --- src/inventory_ui.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/inventory_ui.cpp b/src/inventory_ui.cpp index b3b8728fd825e..13d9da230ca7f 100644 --- a/src/inventory_ui.cpp +++ b/src/inventory_ui.cpp @@ -2352,18 +2352,16 @@ void inventory_drop_selector::process_selected( int &count, void inventory_drop_selector::deselect_contained_items() { - std::vector container; - std::vector contained; + std::vector inventory_items; for( std::pair &drop : dropping ) { item_location loc_front = drop.first; - if( loc_front.where() != item_location::type::container ) { - container.push_back( loc_front ); - } else { - contained.push_back( loc_front ); - } + inventory_items.push_back( loc_front ); } - for( item_location loc_contained : contained ) { - for( item_location loc_container : container ) { + for( item_location loc_contained : inventory_items ) { + for( item_location loc_container : inventory_items ) { + if( loc_container == loc_contained ) { + continue; + } if( loc_container->has_item( *loc_contained ) ) { for( inventory_column *col : get_all_columns() ) { for( inventory_entry *selected : col->get_entries( []( const inventory_entry & @@ -2373,8 +2371,10 @@ void inventory_drop_selector::deselect_contained_items() if( !selected->is_item() ) { continue; } - if( selected->locations.front() == loc_contained ) { - set_chosen_count( *selected, 0 ); + for( item_location selected_loc : selected->locations ) { + if( selected_loc == loc_contained ) { + set_chosen_count( *selected, 0 ); + } } } } From 36f533281323fdef7e7d8419963c14e5a96f3a6b Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Mon, 22 Jun 2020 14:21:07 -0400 Subject: [PATCH 060/206] Fix compound greatbow fouling --- data/json/items/ranged/archery.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/ranged/archery.json b/data/json/items/ranged/archery.json index bc0eb7f8536d6..fa3c666e5c57c 100644 --- a/data/json/items/ranged/archery.json +++ b/data/json/items/ranged/archery.json @@ -661,7 +661,7 @@ "price": 160000, "//": "120 lb draw weight, very efficient, 0.5 slugs of momentum with a 30g arrow.", "material": [ "steel", "plastic" ], - "flags": [ "FIRE_TWOHAND", "RELOAD_AND_SHOOT" ], + "flags": [ "FIRE_TWOHAND", "RELOAD_AND_SHOOT", "PRIMITIVE_RANGED_WEAPON" ], "skill": "archery", "min_strength": 15, "ammo": [ "arrow" ], From 50464fe7034f16728e424c9b29759e4eaaf72e10 Mon Sep 17 00:00:00 2001 From: Lamandus <33199510+Lamandus@users.noreply.github.com> Date: Mon, 22 Jun 2020 22:33:25 +0200 Subject: [PATCH 061/206] Adding missing residental Buildings --- .../go_overmap_terrain_residential.json | 595 ++++++++++++++++++ 1 file changed, 595 insertions(+) diff --git a/data/mods/Graphical_Overmap/go_overmap_terrain_residential.json b/data/mods/Graphical_Overmap/go_overmap_terrain_residential.json index 647c86343033e..6216b3a5d7279 100644 --- a/data/mods/Graphical_Overmap/go_overmap_terrain_residential.json +++ b/data/mods/Graphical_Overmap/go_overmap_terrain_residential.json @@ -988,6 +988,244 @@ "sym": "\u00E0", "color": "light_gray" }, + { + "type": "overmap_terrain", + "id": "house_26", + "copy-from": "house_26", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_26_roof", + "copy-from": "house_26_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_27", + "copy-from": "house_27", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_27_roof", + "copy-from": "house_27_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_28", + "copy-from": "house_28", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_28_roof", + "copy-from": "house_28_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_29", + "copy-from": "house_29", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_29_roof", + "copy-from": "house_29_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_30", + "copy-from": "house_30", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_30_roof", + "copy-from": "house_30_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_31", + "copy-from": "house_31", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_31_roof", + "copy-from": "house_31_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_32", + "copy-from": "house_32", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_32_roof", + "copy-from": "house_32_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_33", + "copy-from": "house_33", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_33_roof", + "copy-from": "house_33_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_34", + "copy-from": "house_34", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_34_roof", + "copy-from": "house_34_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_35", + "copy-from": "house_35", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_35_roof", + "copy-from": "house_35_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_36", + "copy-from": "house_36", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_36_roof", + "copy-from": "house_36_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_37", + "copy-from": "house_37", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_37_roof", + "copy-from": "house_37_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_38", + "copy-from": "house_38", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_38_roof", + "copy-from": "house_38_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_39", + "copy-from": "house_39", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_39_roof", + "copy-from": "house_39_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_40", + "copy-from": "house_40", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_40_roof", + "copy-from": "house_40_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_41", + "copy-from": "house_41", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_41_roof", + "copy-from": "house_41_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_42", + "copy-from": "house_42", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "house_42_roof", + "copy-from": "house_42_roof", + "sym": "\u00E0", + "color": "light_gray" + }, { "type": "overmap_terrain", "id": "house_vacant", @@ -1452,5 +1690,362 @@ "copy-from": "house_crack3_roof", "sym": "\u00E0", "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "2storyModern01_basement", + "copy-from": "2storyModern01_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "2storyModern01_first", + "copy-from": "2storyModern01_first", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "2storyModern01_second", + "copy-from": "2storyModern01_second", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "2storyModern01_roof", + "copy-from": "2storyModern01_roof", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_1_1", + "copy-from": "urban_1_1", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_1_2", + "copy-from": "urban_1_2", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_1_3", + "copy-from": "urban_1_3", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_1_4", + "copy-from": "urban_1_4", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_1_1_basement", + "copy-from": "urban_1_1_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_1_2_basement", + "copy-from": "urban_1_2_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_1_6", + "copy-from": "urban_1_6", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_4_1", + "copy-from": "urban_4_1", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_4_2", + "copy-from": "urban_4_2", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_4_3", + "copy-from": "urban_4_3", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_4_4", + "copy-from": "urban_4_4", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_4_5", + "copy-from": "urban_4_5", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_4_6", + "copy-from": "urban_4_6", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_4_7", + "copy-from": "urban_4_7", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_4_8", + "copy-from": "urban_4_8", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_5_1", + "copy-from": "urban_5_1", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_5_2", + "copy-from": "urban_5_2", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_5_3", + "copy-from": "urban_5_3", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_5_4", + "copy-from": "urban_5_4", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_5_5", + "copy-from": "urban_5_5", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_5_6", + "copy-from": "urban_5_6", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_5_1_basement", + "copy-from": "urban_5_1_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_5_2_basement", + "copy-from": "urban_5_2_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_6_1", + "copy-from": "urban_6_1", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_6_2", + "copy-from": "urban_6_2", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_6_3", + "copy-from": "urban_6_3", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_6_4", + "copy-from": "urban_6_4", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_6_5", + "copy-from": "urban_6_5", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_6_6", + "copy-from": "urban_6_6", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_6_1_basement", + "copy-from": "urban_6_1_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_6_2_basement", + "copy-from": "urban_6_2_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_2_1", + "copy-from": "urban_2_1", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_2_2", + "copy-from": "urban_2_2", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_2_3", + "copy-from": "urban_2_3", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_2_4", + "copy-from": "urban_2_4", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_2_5", + "copy-from": "urban_2_5", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_2_6", + "copy-from": "urban_2_6", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_2_1_basement", + "copy-from": "urban_2_1_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_2_2_basement", + "copy-from": "urban_2_2_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_3_1", + "copy-from": "urban_3_1", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_3_2", + "copy-from": "urban_3_2", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_3_3", + "copy-from": "urban_3_3", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_3_4", + "copy-from": "urban_3_4", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_3_5", + "copy-from": "urban_3_5", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_3_6", + "copy-from": "urban_3_6", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_3_1_basement", + "copy-from": "urban_3_1_basement", + "sym": "\u00E0", + "color": "light_gray" + }, + { + "type": "overmap_terrain", + "id": "urban_3_2_basement", + "copy-from": "urban_3_2_basement", + "sym": "\u00E0", + "color": "light_gray" } ] From 13c4382edbd6896229db00d7caed2596ce41afae Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Mon, 22 Jun 2020 16:42:56 -0600 Subject: [PATCH 062/206] Convert folded_volume to metric with units Contributes to #36110 --- data/json/vehicleparts/alternator.json | 4 +- data/json/vehicleparts/armor.json | 2 +- data/json/vehicleparts/battery.json | 10 +-- data/json/vehicleparts/boards.json | 2 +- data/json/vehicleparts/combustion.json | 8 +- data/json/vehicleparts/engineering.json | 6 +- data/json/vehicleparts/frames.json | 4 +- data/json/vehicleparts/lights.json | 14 ++-- data/json/vehicleparts/manual.json | 4 +- data/json/vehicleparts/motor.json | 6 +- data/json/vehicleparts/vehicle_parts.json | 80 +++++++++---------- data/json/vehicleparts/wheel.json | 14 ++-- .../vehicleparts/blaze_other_parts.json | 2 +- 13 files changed, 78 insertions(+), 78 deletions(-) diff --git a/data/json/vehicleparts/alternator.json b/data/json/vehicleparts/alternator.json index 889f25dc779ac..16bbe1aba1961 100644 --- a/data/json/vehicleparts/alternator.json +++ b/data/json/vehicleparts/alternator.json @@ -20,7 +20,7 @@ "power": -75, "epower": 36, "damage_modifier": 80, - "folded_volume": 5, + "folded_volume": "1250 ml", "breaks_into": [ { "item": "steel_lump", "count": [ 2, 5 ] }, { "item": "steel_chunk", "count": [ 2, 5 ] }, @@ -45,7 +45,7 @@ "power": -746, "epower": 360, "damage_modifier": 80, - "folded_volume": 5, + "folded_volume": "1250 ml", "breaks_into": [ { "item": "steel_lump", "count": [ 2, 5 ] }, { "item": "steel_chunk", "count": [ 2, 5 ] }, diff --git a/data/json/vehicleparts/armor.json b/data/json/vehicleparts/armor.json index ecaf99b14af4a..877bc725586b9 100644 --- a/data/json/vehicleparts/armor.json +++ b/data/json/vehicleparts/armor.json @@ -10,7 +10,7 @@ "color": "dark_gray", "broken_color": "light_gray", "durability": 150, - "folded_volume": 4, + "folded_volume": "1 L", "description": "Improvised armor plate. Will partially protect other components on the same frame from damage.", "breaks_into": [ { "item": "rebar", "count": [ 1, 2 ] }, { "item": "scrap", "count": [ 4, 8 ] } ], "requirements": { diff --git a/data/json/vehicleparts/battery.json b/data/json/vehicleparts/battery.json index 60a067d272265..146b2c24d6bf0 100644 --- a/data/json/vehicleparts/battery.json +++ b/data/json/vehicleparts/battery.json @@ -10,7 +10,7 @@ "broken_color": "red", "durability": 120, "description": "A battery for storing electrical power, and discharging it to power electrical devices built into the vehicle.", - "folded_volume": 25, + "folded_volume": "6250 ml", "breaks_into": [ { "item": "steel_lump", "count": [ 6, 9 ] }, { "item": "steel_chunk", "count": [ 6, 9 ] }, @@ -30,7 +30,7 @@ "name": { "str": "motorbike battery" }, "item": "battery_motorbike", "durability": 100, - "folded_volume": 5, + "folded_volume": "1250 ml", "breaks_into": [ { "item": "steel_lump", "count": [ 4, 7 ] }, { "item": "steel_chunk", "count": [ 4, 7 ] }, @@ -44,7 +44,7 @@ "name": { "str": "motorbike battery, small" }, "item": "battery_motorbike_small", "durability": 30, - "folded_volume": 3, + "folded_volume": "750 ml", "breaks_into": [ { "item": "steel_lump", "count": [ 4, 7 ] }, { "item": "steel_chunk", "count": [ 4, 7 ] }, @@ -87,7 +87,7 @@ "item": "medium_storage_battery", "difficulty": 1, "durability": 250, - "folded_volume": 10, + "folded_volume": "2500 ml", "breaks_into": [ { "item": "scrap", "count": [ 1, 4 ] }, { "item": "small_storage_battery", "count": [ 0, 7 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 0 ] ], "time": "200 s", "using": "vehicle_screw" }, @@ -103,7 +103,7 @@ "item": "small_storage_battery", "difficulty": 1, "durability": 100, - "folded_volume": 2, + "folded_volume": "500 ml", "breaks_into": [ { "item": "scrap", "count": [ 1, 2 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 0 ] ], "time": "100 s", "using": [ ] }, diff --git a/data/json/vehicleparts/boards.json b/data/json/vehicleparts/boards.json index 8814901c21146..be688b28d1a25 100644 --- a/data/json/vehicleparts/boards.json +++ b/data/json/vehicleparts/boards.json @@ -25,7 +25,7 @@ "broken_color": "dark_gray", "durability": 15, "description": "A cloth wall. Keeps zombies outside the vehicle and prevents people from seeing through it.", - "folded_volume": 15, + "folded_volume": "3750 ml", "breaks_into": "ig_vp_cloth", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "30 m", "using": [ [ "vehicle_nail_install", 1 ] ] }, diff --git a/data/json/vehicleparts/combustion.json b/data/json/vehicleparts/combustion.json index b0c18208eccc6..7624cca3377c9 100644 --- a/data/json/vehicleparts/combustion.json +++ b/data/json/vehicleparts/combustion.json @@ -128,7 +128,7 @@ "epower": 0, "power": 7370, "energy_consumption": 18425, - "folded_volume": 6, + "folded_volume": "1500 ml", "breaks_into": [ { "item": "steel_lump", "count": [ 5, 10 ] }, { "item": "steel_chunk", "count": [ 5, 10 ] }, @@ -152,7 +152,7 @@ "epower": 0, "power": 41000, "energy_consumption": 124500, - "folded_volume": 8, + "folded_volume": "2 L", "breaks_into": [ { "item": "steel_lump", "count": [ 6, 12 ] }, { "item": "steel_chunk", "count": [ 6, 12 ] }, @@ -177,7 +177,7 @@ "epower": 0, "power": 3728, "energy_consumption": 9320, - "folded_volume": 3, + "folded_volume": "750 ml", "breaks_into": [ { "item": "steel_lump", "count": [ 2, 4 ] }, { "item": "steel_chunk", "count": [ 2, 4 ] }, @@ -326,7 +326,7 @@ "epower": -50, "power": 37300, "energy_consumption": 124500, - "folded_volume": 8, + "folded_volume": "2 L", "breaks_into": [ { "item": "steel_lump", "count": [ 10, 20 ] }, { "item": "steel_chunk", "count": [ 10, 20 ] }, diff --git a/data/json/vehicleparts/engineering.json b/data/json/vehicleparts/engineering.json index 79d9e5f7bbd80..2070c6f612518 100644 --- a/data/json/vehicleparts/engineering.json +++ b/data/json/vehicleparts/engineering.json @@ -42,7 +42,7 @@ "broken_color": "light_blue", "durability": 100, "description": "An extendable cantilever crane. If it is in your line of sight and within two tiles of another vehicle, you will automatically use it when you want jack up the other vehicle to change the its wheels. To use it to lift a heavy component like an engine that you are installing or removing, the crane must have line of sight to where it is going and it must be within four tiles of it.", - "folded_volume": 12, + "folded_volume": "3 L", "breaks_into": [ { "item": "pipe", "count": [ 2, 8 ] }, { "item": "scrap", "count": [ 2, 6 ] } ], "qualities": [ [ "LIFT", 7 ], [ "JACK", 7 ] ], "requirements": { @@ -65,7 +65,7 @@ "broken_color": "light_blue", "durability": 100, "description": "A small pallet lifter. If it is in your line of sight and within two tiles of another vehicle, you will automatically use it when you want jack up the other vehicle to change the its wheels. To use it to lift a heavy component like an engine that you are installing or removing, the crane must have line of sight to where it is going and it must be within four tiles of it.", - "folded_volume": 12, + "folded_volume": "3 L", "breaks_into": [ { "item": "pipe", "count": [ 1, 4 ] }, { "item": "scrap", "count": [ 2, 6 ] } ], "qualities": [ [ "LIFT", 1 ], [ "JACK", 1 ] ], "requirements": { @@ -118,7 +118,7 @@ "damage_modifier": 100, "durability": 300, "description": "A large metal disc, powered by the vehicle's engines. Use the vehicle controls to turn it on or off. When turned on, it will stop the vehicle unless it has a strong engine. When turned on, it will dig a shallow pit in dirt. Mount it on the edge of your vehicle.", - "folded_volume": 12, + "folded_volume": "3 L", "power": -70000, "breaks_into": [ { "item": "steel_lump", "count": [ 4, 6 ] }, diff --git a/data/json/vehicleparts/frames.json b/data/json/vehicleparts/frames.json index defb4b4042ed0..c33698dc5e5d4 100644 --- a/data/json/vehicleparts/frames.json +++ b/data/json/vehicleparts/frames.json @@ -8,7 +8,7 @@ "symbol": "h", "durability": 50, "description": "A light metal framework, designed to fold. Other vehicle components can be mounted on it. If all the frames and components of a vehicle are foldable, the vehicle can be folding into a small package and picked up as a normal item.", - "folded_volume": 10, + "folded_volume": "2500 ml", "breaks_into": [ { "item": "steel_chunk", "count": [ 0, 2 ] }, { "item": "scrap", "count": [ 1, 2 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, @@ -29,7 +29,7 @@ "broken_color": "brown", "durability": 15, "description": "A light wooden framework, designed to fold. Other vehicle components can be mounted on it. If all the frames and components of a vehicle are foldable, the vehicle can be folding into a small package and picked up as a normal item.", - "folded_volume": 15, + "folded_volume": "3750 ml", "breaks_into": [ { "item": "splinter", "count": [ 0, 6 ] }, { "item": "nail", "charges": [ 1, 15 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_nail_install", 1 ] ] }, diff --git a/data/json/vehicleparts/lights.json b/data/json/vehicleparts/lights.json index 51caac902cb0b..c13d49af51785 100644 --- a/data/json/vehicleparts/lights.json +++ b/data/json/vehicleparts/lights.json @@ -12,7 +12,7 @@ "//": "essentially an 800lm 10W LED flashlight", "epower": -10, "bonus": 30, - "folded_volume": 2, + "folded_volume": "500 ml", "breaks_into": [ { "item": "scrap", "count": [ 0, 2 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "200 s", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -33,7 +33,7 @@ "durability": 20, "description": "A bright light, self-powered by an atomic decay reaction that never stops. When turned on, it illuminates several squares inside the vehicle.", "bonus": 30, - "folded_volume": 4, + "folded_volume": "1 L", "breaks_into": [ { "item": "scrap", "prob": 50 } ], "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "200 s", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -50,7 +50,7 @@ "item": "atomic_light", "description": "A very dim light, self-powered by an atomic decay reaction that never stops. When turned on, it illuminates a single square inside the vehicle that isn't suitable for crafting.", "bonus": 5, - "folded_volume": 2 + "folded_volume": "500 ml" }, { "id": "floodlight", @@ -67,7 +67,7 @@ "epower": -200, "bonus": 8000, "damage_modifier": 10, - "folded_volume": 8, + "folded_volume": "2 L", "breaks_into": [ { "item": "cable", "charges": [ 1, 4 ] }, { "item": "steel_chunk", "count": [ 0, 2 ] }, @@ -106,7 +106,7 @@ "epower": -100, "bonus": 8000, "damage_modifier": 10, - "folded_volume": 1, + "folded_volume": "250 ml", "breaks_into": [ { "item": "cable", "charges": [ 1, 4 ] }, { "item": "scrap", "count": [ 0, 2 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "200 s", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -129,7 +129,7 @@ "epower": -187, "bonus": 8000, "damage_modifier": 10, - "folded_volume": 1, + "folded_volume": "250 ml", "breaks_into": [ { "item": "cable", "charges": [ 1, 4 ] }, { "item": "scrap", "count": [ 0, 2 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "200 s", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -181,7 +181,7 @@ "epower": -10, "bonus": 500, "damage_modifier": 10, - "folded_volume": 2, + "folded_volume": "500 ml", "breaks_into": [ { "item": "steel_lump", "count": [ 4, 6 ] }, { "item": "steel_chunk", "count": [ 4, 6 ] }, diff --git a/data/json/vehicleparts/manual.json b/data/json/vehicleparts/manual.json index 2cff4f94bc3fd..6e7add470d963 100644 --- a/data/json/vehicleparts/manual.json +++ b/data/json/vehicleparts/manual.json @@ -25,7 +25,7 @@ "description": "A set of bicycle style foot pedals. If mounted on the same tile as seat, they allow you to move the vehicle at the cost of your stamina.", "power": 1600, "muscle_power_factor": 140, - "folded_volume": 2, + "folded_volume": "500 ml", "requirements": { "install": { "skills": [ [ "mechanics", 0 ] ], "time": "60 m", "using": [ [ "vehicle_bolt", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 0 ] ], "time": "30 m", "using": [ [ "vehicle_bolt", 1 ] ] }, @@ -46,7 +46,7 @@ "power": 800, "muscle_power_factor": 50, "damage_modifier": 50, - "folded_volume": 2, + "folded_volume": "500 ml", "requirements": { "install": { "skills": [ [ "mechanics", 0 ] ], "time": "60 m", "using": [ [ "vehicle_bolt", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 0 ] ], "time": "30 m", "using": [ [ "vehicle_bolt", 1 ] ] }, diff --git a/data/json/vehicleparts/motor.json b/data/json/vehicleparts/motor.json index 203e7d8eaa0af..eca2fe9945b12 100644 --- a/data/json/vehicleparts/motor.json +++ b/data/json/vehicleparts/motor.json @@ -25,7 +25,7 @@ "power": 800, "energy_consumption": 1000, "damage_modifier": 80, - "folded_volume": 1, + "folded_volume": "250 ml", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "60 m", "using": [ [ "vehicle_screw", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -44,7 +44,7 @@ "power": 7040, "energy_consumption": 8000, "damage_modifier": 80, - "folded_volume": 1, + "folded_volume": "250 ml", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "60 m", "using": [ [ "vehicle_screw", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -68,7 +68,7 @@ "power": 36000, "energy_consumption": 40000, "damage_modifier": 80, - "folded_volume": 6, + "folded_volume": "1500 ml", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m", "using": [ [ "vehicle_bolt", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_bolt", 1 ] ] }, diff --git a/data/json/vehicleparts/vehicle_parts.json b/data/json/vehicleparts/vehicle_parts.json index ed35d78115482..90a3c8402fdcc 100644 --- a/data/json/vehicleparts/vehicle_parts.json +++ b/data/json/vehicleparts/vehicle_parts.json @@ -247,7 +247,7 @@ "item": "veh_tracker", "//": "10W GPS transponder like an XPC-TR", "epower": -10, - "folded_volume": 2, + "folded_volume": "500 ml", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "200 s", "using": [ [ "vehicle_screw", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "200 s", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -268,7 +268,7 @@ "damage_modifier": 20, "durability": 80, "description": "A padded wedge that you straddle, like a bicycle or motorcycle.", - "folded_volume": 5, + "folded_volume": "1250 ml", "comfort": 1, "floor_bedding_warmth": 200, "item": "saddle", @@ -294,7 +294,7 @@ "durability": 20, "description": "A crude seat, too uncomfortable to sleep in.", "item": "sheet", - "folded_volume": 10, + "folded_volume": "2500 ml", "location": "anywhere", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "200 s", "using": [ [ "vehicle_bolt", 1 ] ] }, @@ -340,7 +340,7 @@ "broken_color": "light_cyan", "durability": 30, "description": "A pair of handles. You can mount other items on top of it.", - "folded_volume": 3, + "folded_volume": "750 ml", "item": "pipe", "location": "structure", "requirements": { @@ -517,7 +517,7 @@ "broken_color": "dark_gray", "durability": 15, "description": "A cloth roof.", - "folded_volume": 15, + "folded_volume": "3750 ml", "item": "sheet", "location": "roof", "requirements": { @@ -818,7 +818,7 @@ "durability": 200, "description": "A blade, welded to the vehicle, for cutting up zombies.", "item": "blade", - "folded_volume": 3, + "folded_volume": "750 ml", "location": "structure", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, @@ -840,7 +840,7 @@ "durability": 200, "description": "A blade, welded to the vehicle, for cutting up zombies.", "item": "blade", - "folded_volume": 3, + "folded_volume": "750 ml", "location": "structure", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, @@ -863,7 +863,7 @@ "durability": 250, "description": "A metal spike, welded to the vehicle, to increase injury when crashing into things.", "item": "spike", - "folded_volume": 1, + "folded_volume": "250 ml", "location": "structure", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, @@ -1237,7 +1237,7 @@ "broken_color": "brown", "damage_modifier": 60, "durability": 65, - "folded_volume": 6, + "folded_volume": "1500 ml", "size": 120, "item": "foldwoodframe", "location": "center", @@ -1260,7 +1260,7 @@ "broken_color": "dark_gray", "damage_modifier": 60, "durability": 15, - "folded_volume": 4, + "folded_volume": "1 L", "size": 60, "item": "bag_canvas", "location": "center", @@ -1283,7 +1283,7 @@ "broken_color": "brown", "damage_modifier": 60, "durability": 75, - "folded_volume": 6, + "folded_volume": "1500 ml", "size": 80, "item": "bike_basket", "location": "center", @@ -1329,7 +1329,7 @@ "damage_modifier": 60, "durability": 75, "size": 600, - "folded_volume": 24, + "folded_volume": "6 L", "item": "folding_basket", "location": "center", "requirements": { @@ -1554,7 +1554,7 @@ "durability": 50, "item": "inflatable_section", "location": "structure", - "folded_volume": 3, + "folded_volume": "750 ml", "requirements": { "install": { "skills": [ [ "mechanics", 3 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_weld_removal", 1 ] ] }, @@ -1576,7 +1576,7 @@ "durability": 40, "item": "inflatable_airbag", "location": "under", - "folded_volume": 3, + "folded_volume": "750 ml", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_weld_removal", 1 ] ] }, @@ -1603,7 +1603,7 @@ "exclusions": [ "wind" ], "item": "sail", "location": "engine_block", - "folded_volume": 2, + "folded_volume": "500 ml", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m" }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m" }, @@ -1640,7 +1640,7 @@ "exclusions": [ "manual" ], "item": "hand_paddles", "location": "engine_block", - "folded_volume": 2, + "folded_volume": "500 ml", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "60 m" }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m" }, @@ -1663,7 +1663,7 @@ "bonus": 10, "damage_modifier": 5, "item": "reins_tackle", - "folded_volume": 1, + "folded_volume": "250 ml", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "6 m", "using": [ [ "vehicle_nail_install", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 1 ] ], "time": "3 m", "using": [ [ "vehicle_nail_removal", 1 ] ] }, @@ -1684,7 +1684,7 @@ "durability": 250, "description": "A steering wheel and accelerator and brake pedals.", "bonus": 10, - "folded_volume": 6, + "folded_volume": "1500 ml", "item": "vehicle_controls", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, @@ -1782,7 +1782,7 @@ "epower": -25, "item": "electronics_controls", "description": "Some switches and knobs to control the vehicle's electrical systems.", - "folded_volume": 3, + "folded_volume": "750 ml", "requirements": { "install": { "skills": [ [ "mechanics", 3 ], [ "electronics", 3 ] ], "time": "350 s", "using": [ [ "vehicle_screw", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 3 ] ], "time": "350 s", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -1829,7 +1829,7 @@ "damage_modifier": 10, "durability": 35, "description": "A belt, attached to a seat.", - "folded_volume": 2, + "folded_volume": "500 ml", "bonus": 25, "item": "rope_6", "location": "on_seat", @@ -1854,7 +1854,7 @@ "description": "A bunch of electronics that make it difficult to start the vehicle without the proper key, and that will sound an alarm if you try. The alarm can be disabled.", "epower": -10, "bonus": 120, - "folded_volume": 1, + "folded_volume": "250 ml", "item": "processor", "location": "on_controls", "requirements": { @@ -1883,7 +1883,7 @@ "damage_modifier": 10, "durability": 100, "description": "A series of straps attached to the seat, intended to fasten together after going over your shoulders and hips and between your legs.", - "folded_volume": 4, + "folded_volume": "1 L", "bonus": 25, "item": "rope_30", "location": "on_seat", @@ -2172,7 +2172,7 @@ "damage_modifier": 10, "description": "A water faucet.", "durability": 45, - "folded_volume": 1, + "folded_volume": "250 ml", "item": "water_faucet", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "5 m", "qualities": [ { "id": "WRENCH", "level": 1 } ] }, @@ -2558,7 +2558,7 @@ "damage_modifier": 10, "durability": 75, "description": "A small horn. Use the vehicle controls and select the honk option to make noise.", - "folded_volume": 1, + "folded_volume": "250 ml", "bonus": 45, "item": "horn_bicycle", "requirements": { @@ -2623,7 +2623,7 @@ "durability": 90, "description": "An electronic noise maker. It will automatically make noise when you drive in reverse, alerting things behind you to move out of the way.", "bonus": 40, - "folded_volume": 1, + "folded_volume": "250 ml", "item": "beeper", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "150 s", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -2813,7 +2813,7 @@ "repair": { "skills": [ [ "mechanics", 4 ] ], "time": "30 m", "using": [ [ "adhesive", 1 ] ] } }, "flags": [ "INTERNAL", "RECHARGE", "FOLDABLE", "ENABLED_DRAINS_EPOWER" ], - "folded_volume": 8, + "folded_volume": "2 L ", "breaks_into": [ { "item": "steel_chunk", "count": [ 0, 2 ] }, { "item": "scrap", "count": [ 1, 2 ] }, @@ -2837,7 +2837,7 @@ "repair": { "skills": [ [ "mechanics", 3 ] ], "time": "30 m", "using": [ [ "adhesive", 1 ] ] } }, "delete": { "flags": [ "ENABLED_DRAINS_EPOWER" ] }, - "folded_volume": 1, + "folded_volume": "250 ml", "breaks_into": "ig_vp_device", "copy-from": "recharge_station" }, @@ -2852,7 +2852,7 @@ "damage_modifier": 10, "durability": 20, "description": "A small mirror, mounted outside the vehicle. If you see the mirror, your vision is expanded as though you were standing where the mirror is.", - "folded_volume": 2, + "folded_volume": "500 ml", "item": "mirror", "location": "structure", "requirements": { @@ -2874,7 +2874,7 @@ "damage_modifier": 10, "durability": 30, "description": "A small mirror, mounted inside the vehicle. If you see the mirror, your vision is expanded as though you were standing where the mirror is.", - "folded_volume": 1, + "folded_volume": "250 ml", "item": "mirror", "location": "on_windshield", "requirements": { @@ -3062,7 +3062,7 @@ "durability": 150, "description": "A wooden spike, attached to the vehicle, to increase injury when crashing into things.", "item": "pointy_stick", - "folded_volume": 5, + "folded_volume": "1250 ml", "location": "structure", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_nail_install", 1 ] ] }, @@ -3181,7 +3181,7 @@ "durability": 50, "description": "A small electric motor. Installed on the same frame as a door or curtain, it will allow you to remotely open the door or curtain from the vehicle controls.", "item": "motor_tiny", - "folded_volume": 1, + "folded_volume": "250 ml", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_screw", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "30 m", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -3222,7 +3222,7 @@ "damage_modifier": 20, "durability": 200, "description": "An LCD display attached to one or more cameras. When turned on, it lets you see from the cameras, but drains power from the vehicle's batteries. You can 'e'xamine the tile to access the controls, or use the vehicle control key (default '^').", - "folded_volume": 10, + "folded_volume": "2500 ml", "item": "camera_control", "epower": -20, "requirements": { @@ -3244,7 +3244,7 @@ "damage_modifier": 10, "durability": 100, "description": "A small camera. Will relay what it can see to a camera control station.", - "folded_volume": 8, + "folded_volume": "2 L", "bonus": 24, "item": "omnicamera", "//": "Cameras without a DVR can run on under 10W", @@ -3270,7 +3270,7 @@ "durability": 300, "description": "A set of controls to allow a vehicle to drive itself, or you to drive it remotely using a controller.", "item": "robot_controls", - "folded_volume": 5, + "folded_volume": "1250 ml", "location": "center", "requirements": { "install": { "skills": [ [ "mechanics", 4 ] ], "time": "60 m", "using": [ [ "welding_standard", 5 ] ] }, @@ -3295,7 +3295,7 @@ "durability": 20, "description": "A clock, so you know what time it is.", "epower": 0, - "folded_volume": 1, + "folded_volume": "250 ml", "item": "wristwatch", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "150 s", "using": [ [ "vehicle_screw", 1 ] ] }, @@ -3320,7 +3320,7 @@ "size": 200, "item": "leather_funnel", "location": "on_roof", - "folded_volume": 1, + "folded_volume": "250 ml", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "6 m", "using": [ [ "vehicle_nail_install", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "3 m", "using": [ [ "vehicle_nail_removal", 1 ] ] }, @@ -3344,7 +3344,7 @@ "size": 240, "item": "birchbark_funnel", "location": "on_roof", - "folded_volume": 1, + "folded_volume": "250 ml", "requirements": { "install": { "skills": [ [ "mechanics", 2 ] ], "time": "6 m", "using": [ [ "vehicle_nail_install", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "3 m", "using": [ [ "vehicle_nail_removal", 1 ] ] }, @@ -3368,7 +3368,7 @@ "size": 200, "item": "makeshift_funnel", "location": "on_roof", - "folded_volume": 1, + "folded_volume": "250 ml", "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "6 m", "using": [ [ "vehicle_nail_install", 1 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "3 m", "using": [ [ "vehicle_nail_removal", 1 ] ] }, @@ -3611,7 +3611,7 @@ "broken_color": "light_gray", "durability": 25, "description": "A set of locks. Attached to a suitable cargo space, it will prevent other people from accessing the cargo and taking your stuff.", - "folded_volume": 1, + "folded_volume": "250 ml", "item": "cargo_lock", "location": "on_lockable_cargo", "requirements": { @@ -3658,7 +3658,7 @@ "epower": -250, "item": "turret_controls", "description": "A set of motor, camera, and an AI unit which allows for tracking targets, friend-or-foe identification, and firing the connected turret in full automatic mode. When installed over the turret, it will enable auto targeting mode for said turret.", - "folded_volume": 3, + "folded_volume": "750 ml", "flags": [ "ENABLED_DRAINS_EPOWER", "TURRET_CONTROLS", "UNMOUNT_ON_DAMAGE" ], "requirements": { "install": { diff --git a/data/json/vehicleparts/wheel.json b/data/json/vehicleparts/wheel.json index 72a7a4520365d..5719224d213cc 100644 --- a/data/json/vehicleparts/wheel.json +++ b/data/json/vehicleparts/wheel.json @@ -9,7 +9,7 @@ "broken_symbol": "X", "broken_color": "light_gray", "damage_modifier": 80, - "folded_volume": 1, + "folded_volume": "250 ml", "durability": 120, "description": "A piece of metal with holes suitable for a bike or motorbike wheel.", "item": "wheel_mount_light", @@ -239,7 +239,7 @@ "durability": 70, "description": "A small wheel.", "damage_modifier": 50, - "folded_volume": 9, + "folded_volume": "2250 ml", "breaks_into": [ { "item": "steel_lump" }, { "item": "steel_chunk", "count": [ 1, 3 ] }, { "item": "scrap", "count": [ 1, 3 ] } ], "rolling_resistance": 1.62, "wheel_type": "off-road", @@ -264,7 +264,7 @@ "durability": 40, "description": "A thin bicycle wheel.", "damage_modifier": 50, - "folded_volume": 14, + "folded_volume": "3500 ml", "breaks_into": [ { "item": "steel_lump", "prob": 50 }, { "item": "steel_chunk", "count": [ 1, 2 ] }, @@ -302,7 +302,7 @@ "durability": 70, "description": "A set of small wheels, mounted on pivots, like the ones on a rolling office chair or grocery cart.", "damage_modifier": 50, - "folded_volume": 5, + "folded_volume": "1250 ml", "breaks_into": [ { "item": "steel_lump", "prob": 50 }, { "item": "steel_chunk", "count": [ 1, 2 ] }, @@ -329,7 +329,7 @@ "color": "dark_gray", "durability": 120, "description": "A set of 10\" wheels with tough rubber tires.", - "folded_volume": 10, + "folded_volume": "2500 ml", "breaks_into": [ { "item": "steel_lump", "prob": 50 }, { "item": "steel_chunk", "count": [ 1, 5 ] }, @@ -397,7 +397,7 @@ "durability": 70, "description": "A small wheel.", "damage_modifier": 50, - "folded_volume": 9, + "folded_volume": "2250 ml", "breaks_into": [ { "item": "steel_lump" }, { "item": "steel_chunk", "count": [ 1, 3 ] }, { "item": "scrap", "count": [ 1, 3 ] } ], "rolling_resistance": 1.5, "wheel_type": "racing", @@ -476,7 +476,7 @@ "durability": 40, "description": "A pair of wheelchair wheels.", "damage_modifier": 50, - "folded_volume": 25, + "folded_volume": "6250 ml", "breaks_into": [ { "item": "steel_lump", "prob": 50 }, { "item": "steel_chunk", "count": [ 1, 2 ] }, diff --git a/data/mods/BlazeIndustries/vehicleparts/blaze_other_parts.json b/data/mods/BlazeIndustries/vehicleparts/blaze_other_parts.json index 6819a22b409f4..368af3213d0a4 100644 --- a/data/mods/BlazeIndustries/vehicleparts/blaze_other_parts.json +++ b/data/mods/BlazeIndustries/vehicleparts/blaze_other_parts.json @@ -149,7 +149,7 @@ "broken_color": "white", "durability": 10, "description": "A length of heavy duty copper wire, useful for routing power from one part of a vehicle to another part.", - "folded_volume": 1, + "folded_volume": "250 ml", "breaks_into": [ { "item": "wire", "prob": 50 } ], "requirements": { "install": { "skills": [ [ "mechanics", 1 ] ], "time": "60 s" }, From 6a7b4c948b17bd0ebe1740e06a68d29c2f0510b6 Mon Sep 17 00:00:00 2001 From: KorGgenT Date: Mon, 22 Jun 2020 19:37:54 -0400 Subject: [PATCH 063/206] fix walking activity level --- data/json/move_modes.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/move_modes.json b/data/json/move_modes.json index d18a8e5d23b40..3f90b262cbcd6 100644 --- a/data/json/move_modes.json +++ b/data/json/move_modes.json @@ -7,7 +7,7 @@ "name": "walk", "panel_color": "white", "symbol_color": "white", - "exertion_level": "LIGHT_EXERCISE", + "exertion_level": "MODERATE_EXERCISE", "change_good_none": "You start walking.", "change_good_animal": "You nudge your steed into a steady trot.", "change_good_mech": "You set your mech's leg power to a loping fast walk.", From fec5b0db1dc21ac706ba1703852196d517905bfa Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Mon, 22 Jun 2020 17:46:59 -0600 Subject: [PATCH 064/206] Clean up obsolete storage code, replace with pockets (#41515) * Remove obsolete "storage" field from JSON_INFO.md * Remove unused storage code for pet armor, clothing * Give pockets to violin case and scavenger gear These items had equivalent storage before nested containers 971fff054 * Replace obsolete storage field with pocket_data For the CRIT Engineering suit, use magical "weight_multiplier" property to simulate digital storage of massive items. * Restore storage pockets to dog harnesses Kevlar and superalloy dog harness storage was removed in 971fff054. This commit restores the storage they had before, in the form of pockets. --- data/json/items/armor/pets_dog_armor.json | 64 ++++++++++++++++++- data/json/items/armor/storage.json | 1 + data/json/items/armor/suits_protection.json | 8 +++ .../deadspace/deadspaceitems.json | 11 +++- .../items/crt_makeshift_survival.json | 2 - doc/JSON_INFO.md | 6 +- src/clothing_mod.cpp | 1 - src/clothing_mod.h | 2 - src/item.cpp | 14 ---- src/item_factory.cpp | 1 - src/iteminfo_query.h | 1 - src/itype.h | 4 -- 12 files changed, 82 insertions(+), 33 deletions(-) diff --git a/data/json/items/armor/pets_dog_armor.json b/data/json/items/armor/pets_dog_armor.json index a2af87a42b003..87b886ec2068a 100644 --- a/data/json/items/armor/pets_dog_armor.json +++ b/data/json/items/armor/pets_dog_armor.json @@ -18,7 +18,37 @@ "material_thickness": 2, "max_pet_vol": "35000 ml", "min_pet_vol": "25000 ml", - "pet_bodytype": "dog" + "pet_bodytype": "dog", + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "10 kg", + "max_item_length": "60 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "10 kg", + "max_item_length": "60 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "1250 ml", + "max_contains_weight": "2 kg", + "max_item_length": "20 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "1250 ml", + "max_contains_weight": "2 kg", + "max_item_length": "20 cm", + "moves": 200 + } + ] }, { "type": "PET_ARMOR", @@ -109,6 +139,36 @@ "price_postapoc": 5000, "material": [ "superalloy" ], "weight": "3125 g", - "min_pet_vol": "20000 ml" + "min_pet_vol": "20000 ml", + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "10 L", + "max_contains_weight": "20 kg", + "max_item_length": "80 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "10 L", + "max_contains_weight": "20 kg", + "max_item_length": "80 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2500 ml", + "max_contains_weight": "5 kg", + "max_item_length": "30 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2500 ml", + "max_contains_weight": "5 kg", + "max_item_length": "30 cm", + "moves": 200 + } + ] } ] diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index 6b3ee3f0ae3a3..c1ef4398cb60b 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -291,6 +291,7 @@ "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 10, "encumbrance": 50, + "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "3500 ml", "max_contains_weight": "8 kg", "moves": 80 } ], "material_thickness": 5, "flags": [ "FANCY", "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, diff --git a/data/json/items/armor/suits_protection.json b/data/json/items/armor/suits_protection.json index e00411cba2a05..4d3b7eaacc234 100644 --- a/data/json/items/armor/suits_protection.json +++ b/data/json/items/armor/suits_protection.json @@ -385,6 +385,14 @@ "covers": [ "TORSO", "ARMS", "LEGS" ], "coverage": 100, "encumbrance": 30, + "pocket_data": [ + { "pocket_type": "CONTAINER", "max_contains_volume": "8 L", "max_contains_weight": "16 kg", "moves": 150 }, + { "pocket_type": "CONTAINER", "max_contains_volume": "4 L", "max_contains_weight": "8 kg", "moves": 100 }, + { "pocket_type": "CONTAINER", "max_contains_volume": "4 L", "max_contains_weight": "8 kg", "moves": 100 }, + { "pocket_type": "CONTAINER", "max_contains_volume": "2 L", "max_contains_weight": "3 kg", "moves": 80 }, + { "pocket_type": "CONTAINER", "max_contains_volume": "1 L", "max_contains_weight": "2 kg", "moves": 80 }, + { "pocket_type": "CONTAINER", "max_contains_volume": "1 L", "max_contains_weight": "2 kg", "moves": 80 } + ], "warmth": 40, "material_thickness": 5, "valid_mods": [ "steel_padded" ], diff --git a/data/mods/CRT_EXPANSION/deadspace/deadspaceitems.json b/data/mods/CRT_EXPANSION/deadspace/deadspaceitems.json index 5cf4fcf49f003..c5f374b482a68 100644 --- a/data/mods/CRT_EXPANSION/deadspace/deadspaceitems.json +++ b/data/mods/CRT_EXPANSION/deadspace/deadspaceitems.json @@ -38,7 +38,16 @@ "coverage": 100, "encumbrance": 25, "warmth": 15, - "storage": 50, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "12500 ml", + "max_contains_weight": "1000 kg", + "max_item_length": "500 cm", + "weight_multiplier": 0.01, + "moves": 200 + } + ], "material_thickness": 3, "environmental_protection": 18, "use_action": [ "WEATHER_TOOL" ], diff --git a/data/mods/CRT_EXPANSION/items/crt_makeshift_survival.json b/data/mods/CRT_EXPANSION/items/crt_makeshift_survival.json index 3fe7d53b9af10..1c5364d238df6 100644 --- a/data/mods/CRT_EXPANSION/items/crt_makeshift_survival.json +++ b/data/mods/CRT_EXPANSION/items/crt_makeshift_survival.json @@ -15,7 +15,6 @@ "covers": [ "TORSO", "LEGS" ], "coverage": 50, "encumbrance": 15, - "storage": 0, "warmth": 7, "material_thickness": 3, "flags": [ "OVERSIZE" ] @@ -35,7 +34,6 @@ "color": "black_green", "coverage": 0, "encumbrance": 0, - "storage": 0, "warmth": 7, "material_thickness": 1, "flags": [ "OVERSIZE" ] diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 50dc119d7c372..33fb5ac8f450e 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -1769,7 +1769,6 @@ Armor can be defined like this: ... // same entries as above for the generic item. // additional some armor specific entries: "covers" : ["FEET"], // Where it covers. Possible options are TORSO, HEAD, EYES, MOUTH, ARMS, HANDS, LEGS, FEET -"storage" : 0, // (Optional, default = 0) How many volume storage slots it adds "warmth" : 10, // (Optional, default = 0) How much warmth clothing provides "environmental_protection" : 0, // (Optional, default = 0) How much environmental protection it affords "encumbrance" : 0, // Base encumbrance (unfitted value) @@ -1787,7 +1786,6 @@ Alternately, every item (book, tool, gun, even food) can be used as armor if it ... // same entries as for the type (e.g. same entries as for any tool), "armor_data" : { // additionally the same armor data like above "covers" : ["FEET"], - "storage" : 0, "warmth" : 10, "environmental_protection" : 0, "encumbrance" : 0, @@ -1804,7 +1802,6 @@ Pet armor can be defined like this: "type" : "PET_ARMOR", // Defines this as armor ... // same entries as above for the generic item. // additional some armor specific entries: -"storage" : 0, // (Optional, default = 0) How many volume storage slots it adds "environmental_protection" : 0, // (Optional, default = 0) How much environmental protection it affords "material_thickness" : 1, // Thickness of material, in millimeter units (approximately). Generally ranges between 1 - 5, more unusual armor types go up to 10 or more "pet_bodytype": // the body type of the pet that this monster will fit. See MONSTERS.md @@ -1817,7 +1814,6 @@ Alternately, every item (book, tool, gun, even food) can be used as armor if it "type" : "TOOL", // Or any other item type ... // same entries as for the type (e.g. same entries as for any tool), "pet_armor_data" : { // additionally the same armor data like above - "storage" : 0, "environmental_protection" : 0, "pet_bodytype": "dog", "max_pet_vol": "35000 ml", @@ -3050,7 +3046,7 @@ A flat multiplier on the harvest count of the plant. For numbers greater than on "restricted": true, // (optional) If true, clothing must list this mod's flag in "valid_mods" list to use it. Defaults to false. "mod_value": [ // List of mod effect. { - "type": "bash", // "bash", "cut", "bullet", "fire", "acid", "warmth", "storage", and "encumbrance" is available. + "type": "bash", // "bash", "cut", "bullet", "fire", "acid", "warmth", and "encumbrance" is available. "value": 1, // value of effect. "round_up": false // (optional) round up value of effect. defaults to false. "proportion": [ // (optional) value of effect propotions to clothing's parameter. diff --git a/src/clothing_mod.cpp b/src/clothing_mod.cpp index 44633ab5d5592..98a57dba61f29 100644 --- a/src/clothing_mod.cpp +++ b/src/clothing_mod.cpp @@ -51,7 +51,6 @@ std::string enum_to_string( clothing_mod_type data ) case clothing_mod_type_bullet: return "bullet"; case clothing_mod_type_encumbrance: return "encumbrance"; case clothing_mod_type_warmth: return "warmth"; - case clothing_mod_type_storage: return "storage"; case clothing_mod_type_invalid: return "invalid"; // *INDENT-ON* case num_clothing_mod_types: diff --git a/src/clothing_mod.h b/src/clothing_mod.h index 2ee05a58fe5ce..dc6dab13657fa 100644 --- a/src/clothing_mod.h +++ b/src/clothing_mod.h @@ -22,7 +22,6 @@ enum clothing_mod_type : int { clothing_mod_type_bullet, clothing_mod_type_encumbrance, clothing_mod_type_warmth, - clothing_mod_type_storage, clothing_mod_type_invalid, num_clothing_mod_types }; @@ -69,7 +68,6 @@ constexpr std::array all_clothing_mod_types = {{ clothing_mod_type_bullet, clothing_mod_type_encumbrance, clothing_mod_type_warmth, - clothing_mod_type_storage, clothing_mod_type_invalid } }; diff --git a/src/item.cpp b/src/item.cpp index 465ef5bc7e1c0..8fdf9bc5a0407 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -2662,20 +2662,6 @@ void item::animal_armor_info( std::vector &info, const iteminfo_query if( !is_pet_armor() ) { return; } - int converted_storage_scale = 0; - const double converted_storage = round_up( convert_volume( type->pet_armor->storage.value(), - &converted_storage_scale ), 2 ); - if( parts->test( iteminfo_parts::ARMOR_STORAGE ) && converted_storage > 0 ) { - const std::string space = " "; - const iteminfo::flags f = converted_storage_scale == 0 ? iteminfo::no_flags : iteminfo::is_decimal; - info.push_back( iteminfo( "ARMOR", space + _( "Storage: " ), - string_format( " %s", volume_units_abbr() ), - f, converted_storage ) ); - } - - // Whatever the last entry was, we want a newline at this point - info.back().bNewLine = true; - armor_protection_info( info, parts, batch, debug ); } diff --git a/src/item_factory.cpp b/src/item_factory.cpp index 4a6db77b826ef..2455f62f717fd 100644 --- a/src/item_factory.cpp +++ b/src/item_factory.cpp @@ -1775,7 +1775,6 @@ void islot_pet_armor::load( const JsonObject &jo ) optional( jo, was_loaded, "pet_bodytype", bodytype ); optional( jo, was_loaded, "environmental_protection", env_resist, 0 ); optional( jo, was_loaded, "environmental_protection_with_filter", env_resist_w_filter, 0 ); - optional( jo, was_loaded, "storage", storage, volume_reader{}, 0_ml ); optional( jo, was_loaded, "power_armor", power_armor, false ); } diff --git a/src/iteminfo_query.h b/src/iteminfo_query.h index 4611a14d2b0c9..72036ae62d5d8 100644 --- a/src/iteminfo_query.h +++ b/src/iteminfo_query.h @@ -124,7 +124,6 @@ enum class iteminfo_parts : size_t { ARMOR_COVERAGE, ARMOR_WARMTH, ARMOR_ENCUMBRANCE, - ARMOR_STORAGE, ARMOR_PROTECTION, BOOK_SUMMARY, diff --git a/src/itype.h b/src/itype.h index d67de2ddff838..990b365ea508c 100644 --- a/src/itype.h +++ b/src/itype.h @@ -278,10 +278,6 @@ struct islot_pet_armor { * Environmental protection of a gas mask with installed filter. */ int env_resist_w_filter = 0; - /** - * How much storage this items provides when worn. - */ - units::volume storage = 0_ml; /** * The maximum volume a pet can be and wear this armor */ From ed20a56604f8b5a74400ea2672e0b49a202e4d9d Mon Sep 17 00:00:00 2001 From: Curtis Merrill Date: Mon, 22 Jun 2020 19:48:45 -0400 Subject: [PATCH 065/206] Islot load itemfactory (#41511) * add islot_milling::load * add islot_brewable::load * add islot_engine::load * add islot_wheel::load * add islot_battery::load --- src/item_factory.cpp | 97 +++++++++++++++++++++++++++++++++++--------- src/item_factory.h | 5 --- src/itype.h | 25 ++++++++++++ 3 files changed, 103 insertions(+), 24 deletions(-) diff --git a/src/item_factory.cpp b/src/item_factory.cpp index 2455f62f717fd..11817d3f48187 100644 --- a/src/item_factory.cpp +++ b/src/item_factory.cpp @@ -1544,10 +1544,16 @@ void Item_factory::load( islot_artifact &slot, const JsonObject &jo, const std:: load_optional_enum_array( slot.effects_worn, jo, "effects_worn" ); } -void Item_factory::load( islot_milling &slot, const JsonObject &jo, const std::string & ) +void islot_milling::load( const JsonObject &jo ) { - assign( jo, "into", slot.into_ ); - assign( jo, "conversion_rate", slot.conversion_rate_ ); + optional( jo, was_loaded, "into", into_ ); + optional( jo, was_loaded, "conversion_rate", conversion_rate_ ); +} + +void islot_milling::deserialize( JsonIn &jsin ) +{ + const JsonObject jo = jsin.get_object(); + load( jo ); } void islot_ammo::load( const JsonObject &jo ) @@ -1595,31 +1601,63 @@ void Item_factory::load_ammo( const JsonObject &jo, const std::string &src ) } } -void Item_factory::load( islot_engine &slot, const JsonObject &jo, const std::string & ) +void islot_engine::load( const JsonObject &jo ) { - assign( jo, "displacement", slot.displacement ); + optional( jo, was_loaded, "displacement", displacement ); +} + +void islot_engine::deserialize( JsonIn &jsin ) +{ + const JsonObject jo = jsin.get_object(); + load( jo ); } void Item_factory::load_engine( const JsonObject &jo, const std::string &src ) { itype def; if( load_definition( jo, src, def ) ) { - load_slot( def.engine, jo, src ); + if( def.was_loaded ) { + if( def.engine ) { + def.engine->was_loaded = true; + } else { + def.engine = cata::make_value(); + def.engine->was_loaded = true; + } + } else { + def.engine = cata::make_value(); + } + def.engine->load( jo ); load_basic_info( jo, def, src ); } } -void Item_factory::load( islot_wheel &slot, const JsonObject &jo, const std::string & ) +void islot_wheel::load( const JsonObject &jo ) { - assign( jo, "diameter", slot.diameter ); - assign( jo, "width", slot.width ); + optional( jo, was_loaded, "diameter", diameter ); + optional( jo, was_loaded, "width", width ); +} + +void islot_wheel::deserialize( JsonIn &jsin ) +{ + const JsonObject jo = jsin.get_object(); + load( jo ); } void Item_factory::load_wheel( const JsonObject &jo, const std::string &src ) { itype def; if( load_definition( jo, src, def ) ) { - load_slot( def.wheel, jo, src ); + if( def.was_loaded ) { + if( def.wheel ) { + def.wheel->was_loaded = true; + } else { + def.wheel = cata::make_value(); + def.wheel->was_loaded = true; + } + } else { + def.wheel = cata::make_value(); + } + def.wheel->load( jo ); load_basic_info( jo, def, src ); } } @@ -2059,10 +2097,16 @@ void Item_factory::load( islot_comestible &slot, const JsonObject &jo, const std } -void Item_factory::load( islot_brewable &slot, const JsonObject &jo, const std::string & ) +void islot_brewable::load( const JsonObject &jo ) { - assign( jo, "time", slot.time, false, 1_turns ); - jo.read( "results", slot.results, true ); + optional( jo, was_loaded, "time", time, 1_turns ); + mandatory( jo, was_loaded, "results", results ); +} + +void islot_brewable::deserialize( JsonIn &jsin ) +{ + const JsonObject jo = jsin.get_object(); + load( jo ); } void Item_factory::load_comestible( const JsonObject &jo, const std::string &src ) @@ -2167,17 +2211,32 @@ void Item_factory::load_magazine( const JsonObject &jo, const std::string &src ) } } -void Item_factory::load( islot_battery &slot, const JsonObject &jo, const std::string & ) +void islot_battery::load( const JsonObject &jo ) { - slot.max_capacity = read_from_json_string( *jo.get_raw( "max_capacity" ), - units::energy_units ); + mandatory( jo, was_loaded, "max_capacity", max_capacity ); +} + +void islot_battery::deserialize( JsonIn &jsin ) +{ + const JsonObject jo = jsin.get_object(); + load( jo ); } void Item_factory::load_battery( const JsonObject &jo, const std::string &src ) { itype def; if( load_definition( jo, src, def ) ) { - load_slot( def.battery, jo, src ); + if( def.was_loaded ) { + if( def.battery ) { + def.battery->was_loaded = true; + } else { + def.battery = cata::make_value(); + def.battery->was_loaded = true; + } + } else { + def.battery = cata::make_value(); + } + def.battery->load( jo ); load_basic_info( jo, def, src ); } } @@ -2587,10 +2646,10 @@ void Item_factory::load_basic_info( const JsonObject &jo, itype &def, const std: assign( jo, "ammo_data", def.ammo, src == "dda" ); assign( jo, "seed_data", def.seed, src == "dda" ); load_slot_optional( def.artifact, jo, "artifact_data", src ); - load_slot_optional( def.brewable, jo, "brewable", src ); + assign( jo, "brewable", def.brewable, src == "dda" ); load_slot_optional( def.fuel, jo, "fuel", src ); load_slot_optional( def.relic_data, jo, "relic_data", src ); - load_slot_optional( def.milling_data, jo, "milling", src ); + assign( jo, "milling", def.milling_data, src == "dda" ); // optional gunmod slot may also specify mod data if( jo.has_member( "gunmod_data" ) ) { diff --git a/src/item_factory.h b/src/item_factory.h index c7c853835766b..ab739ee5d775d 100644 --- a/src/item_factory.h +++ b/src/item_factory.h @@ -298,19 +298,14 @@ class Item_factory void load( islot_tool &slot, const JsonObject &jo, const std::string &src ); void load( islot_comestible &slot, const JsonObject &jo, const std::string &src ); - void load( islot_brewable &slot, const JsonObject &jo, const std::string &src ); void load( islot_mod &slot, const JsonObject &jo, const std::string &src ); - void load( islot_engine &slot, const JsonObject &jo, const std::string &src ); - void load( islot_wheel &slot, const JsonObject &jo, const std::string &src ); void load( islot_fuel &slot, const JsonObject &jo, const std::string &src ); void load( islot_gun &slot, const JsonObject &jo, const std::string &src ); void load( islot_gunmod &slot, const JsonObject &jo, const std::string &src ); void load( islot_magazine &slot, const JsonObject &jo, const std::string &src ); - void load( islot_battery &slot, const JsonObject &jo, const std::string &src ); void load( islot_bionic &slot, const JsonObject &jo, const std::string &src ); void load( islot_artifact &slot, const JsonObject &jo, const std::string &src ); void load( relic &slot, const JsonObject &jo, const std::string &src ); - void load( islot_milling &slot, const JsonObject &jo, const std::string &src ); //json data handlers void emplace_usage( std::map &container, const std::string &iuse_id ); diff --git a/src/itype.h b/src/itype.h index 990b365ea508c..9717a27d12aa1 100644 --- a/src/itype.h +++ b/src/itype.h @@ -200,6 +200,11 @@ struct islot_brewable { /** How long for this brew to ferment. */ time_duration time = 0_turns; + + bool was_loaded = false; + + void load( const JsonObject &jo ); + void deserialize( JsonIn &jsin ); }; struct islot_armor { @@ -414,6 +419,11 @@ struct islot_engine { public: /** for combustion engines the displacement (cc) */ int displacement = 0; + + bool was_loaded = false; + + void load( const JsonObject &jo ); + void deserialize( JsonIn &jsin ); }; struct islot_wheel { @@ -423,6 +433,11 @@ struct islot_wheel { /** width of wheel (inches) */ int width = 0; + + bool was_loaded = false; + + void load( const JsonObject &jo ); + void deserialize( JsonIn &jsin ); }; struct fuel_explosion { @@ -644,6 +659,11 @@ struct islot_magazine { struct islot_battery { /** Maximum energy the battery can store */ units::energy max_capacity; + + bool was_loaded = false; + + void load( const JsonObject &jo ); + void deserialize( JsonIn &jsin ); }; struct islot_ammo : common_ranged_data { @@ -805,6 +825,11 @@ class islot_milling public: itype_id into_; double conversion_rate_; + + bool was_loaded = false; + + void load( const JsonObject &jo ); + void deserialize( JsonIn &jsin ); }; struct itype { From e28673ba60e7de8d263d5d0bf60017ba797fd80d Mon Sep 17 00:00:00 2001 From: Charles Engen Date: Mon, 22 Jun 2020 17:49:46 -0600 Subject: [PATCH 066/206] Fixed a bug from #41391 that made it through. (#41439) --- src/vehicle_part.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vehicle_part.cpp b/src/vehicle_part.cpp index a11396a94d927..a1a6816942911 100644 --- a/src/vehicle_part.cpp +++ b/src/vehicle_part.cpp @@ -370,11 +370,11 @@ bool vehicle_part::can_reload( const item &obj ) const } if( is_reactor() ) { - return false; + return true; } - return base.is_reloadable() && - ammo_remaining() < ammo_capacity( item::find_type( ammo_current() )->ammo->type ); + return is_tank() && + ammo_remaining() <= ammo_capacity( item::find_type( ammo_current() )->ammo->type ); } void vehicle_part::process_contents( const tripoint &pos, const bool e_heater ) @@ -394,7 +394,7 @@ void vehicle_part::process_contents( const tripoint &pos, const bool e_heater ) bool vehicle_part::fill_with( item &liquid, int qty ) { - if( !is_tank() || !can_reload( liquid ) ) { + if( ( is_tank() && !liquid.made_of( phase_id::LIQUID ) ) || !can_reload( liquid ) ) { return false; } From 1253929540a101b103a12bbb2ddddb6fb6850555 Mon Sep 17 00:00:00 2001 From: Oleg Antipin <60584843+olanti-p@users.noreply.github.com> Date: Tue, 23 Jun 2020 02:50:47 +0300 Subject: [PATCH 067/206] Add filtering for mod list in 'new world' menu (#41442) --- src/inventory_ui.cpp | 2 +- src/worldfactory.cpp | 168 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 139 insertions(+), 31 deletions(-) diff --git a/src/inventory_ui.cpp b/src/inventory_ui.cpp index 13d9da230ca7f..eb98670ff40df 100644 --- a/src/inventory_ui.cpp +++ b/src/inventory_ui.cpp @@ -1798,7 +1798,7 @@ void inventory_selector::draw_footer( const catacurses::window &w ) const mvwprintz( w_inv, point( 2, getmaxy( w_inv ) - 1 ), c_cyan, "< " ); mvwprintz( w_inv, point( ( getmaxx( w_inv ) / 2 ) - 4, getmaxy( w_inv ) - 1 ), c_cyan, " >" ); - std::string new_filter = spopup->query_string( /*loop=*/false, /*draw_only=*/true ); + spopup->query_string( /*loop=*/false, /*draw_only=*/true ); } else { int filter_offset = 0; if( has_available_choices() || !filter.empty() ) { diff --git a/src/worldfactory.cpp b/src/worldfactory.cpp index 75a77fa683965..a9b5d99c3cb9c 100644 --- a/src/worldfactory.cpp +++ b/src/worldfactory.cpp @@ -30,6 +30,7 @@ #include "point.h" #include "string_formatter.h" #include "string_id.h" +#include "string_input_popup.h" #include "translations.h" #include "ui_manager.h" @@ -843,6 +844,12 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, ctxt.register_action( "REMOVE_MOD" ); ctxt.register_action( "SAVE_DEFAULT_MODS" ); ctxt.register_action( "VIEW_MOD_DESCRIPTION" ); + ctxt.register_action( "FILTER" ); + + point filter_pos; + int filter_view_len = 0; + std::string current_filter = "init me!"; + std::unique_ptr fpopup; catacurses::window w_header1; catacurses::window w_header2; @@ -875,6 +882,14 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, header_windows.push_back( w_header1 ); header_windows.push_back( w_header2 ); + // Specify where the popup's string would be printed + filter_pos = point( 2, TERMY - 8 ); + filter_view_len = iMinScreenWidth / 2 - 11; + if( fpopup ) { + point inner_pos = filter_pos + point( 2, 0 ); + fpopup->window( win, inner_pos, inner_pos.x + filter_view_len ); + } + ui.position_from_window( win ); }; init_windows( ui ); @@ -884,18 +899,49 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, headers.push_back( _( "Mod List" ) ); headers.push_back( _( "Mod Load Order" ) ); - int tab_output = 0; size_t active_header = 0; - size_t useable_mod_count = mman->get_usable_mods().size(); int startsel[2] = {0, 0}; size_t cursel[2] = {0, 0}; size_t iCurrentTab = 0; std::vector current_tab_mods; - bool recalc_tabs = true; + struct mod_tab { + std::string id; + std::vector mods; + std::vector mods_unfiltered; + }; + std::vector all_tabs; + + for( const std::pair &tab : get_mod_list_tabs() ) { + all_tabs.push_back( { + tab.first, + std::vector(), + std::vector() + } ); + } + + const std::map &cat_tab_map = get_mod_list_cat_tab(); + for( const mod_id &mod : mman->get_usable_mods() ) { + int cat_idx = mod->category.first; + const std::string &cat_id = get_mod_list_categories()[cat_idx].first; + + std::string dest_tab = "tab_default"; + const auto iter = cat_tab_map.find( cat_id ); + if( iter != cat_tab_map.end() ) { + dest_tab = iter->second; + } + + for( mod_tab &tab : all_tabs ) { + if( tab.id == dest_tab ) { + tab.mods_unfiltered.push_back( mod ); + break; + } + } + } // Helper function for determining the currently selected mod const auto get_selected_mod = [&]() -> const MOD_INFORMATION* { + const std::vector ¤t_tab_mods = all_tabs[iCurrentTab].mods; if( current_tab_mods.empty() ) { return nullptr; @@ -909,6 +955,42 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, return nullptr; }; + // Helper function for applying filter to mod tabs + const auto apply_filter = [&]( const std::string & filter_str ) { + if( filter_str == current_filter ) { + return; + } + const MOD_INFORMATION *selected_mod = nullptr; + if( active_header == 0 ) { + selected_mod = get_selected_mod(); + } + for( mod_tab &tab : all_tabs ) { + if( filter_str.empty() ) { + tab.mods = tab.mods_unfiltered; + } else { + tab.mods.clear(); + for( const mod_id &mod : tab.mods_unfiltered ) { + std::string name = ( *mod ).name(); + if( lcmatch( name, filter_str ) ) { + tab.mods.push_back( mod ); + } + } + } + } + startsel[0] = 0; + cursel[0] = 0; + // Try to restore cursor position + const std::vector &curr_tab = all_tabs[iCurrentTab].mods; + for( size_t i = 0; i < curr_tab.size(); i++ ) { + if( &*curr_tab[i] == selected_mod ) { + cursel[0] = i; + break; + } + } + current_filter = filter_str; + }; + apply_filter( "" ); + ui.on_redraw( [&]( const ui_adaptor & ) { draw_worldgen_tabs( win, 0 ); draw_modselection_borders( win, ctxt ); @@ -948,7 +1030,7 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, } } - //redraw tabs + // Draw tab names wmove( win, point( 2, 4 ) ); for( size_t i = 0; i < get_mod_list_tabs().size(); i++ ) { wprintz( win, c_white, "[" ); @@ -958,41 +1040,67 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, wputch( win, BORDER_COLOR, LINE_OXOX ); } + // Draw filter + if( fpopup ) { + mvwprintz( win, filter_pos, c_cyan, "< " ); + mvwprintz( win, filter_pos + point( filter_view_len + 2, 0 ), c_cyan, " >" ); + // This call makes popup draw its string at position specified on popup initialization + fpopup->query_string( /*loop=*/false, /*draw_only=*/true ); + } else { + mvwprintz( win, filter_pos, c_light_gray, "< " ); + const char *help = current_filter.empty() ? _( "[%s] Filter" ) : _( "[%s] Filter: " ); + wprintz( win, c_light_gray, help, ctxt.get_desc( "FILTER" ) ); + wprintz( win, c_white, current_filter ); + wprintz( win, c_light_gray, " >" ); + } + wnoutrefresh( w_description ); wnoutrefresh( win ); - // Redraw list - draw_mod_list( w_list, startsel[0], cursel[0], current_tab_mods, active_header == 0, - _( "--NO AVAILABLE MODS--" ), catacurses::window() ); + // Draw selected tab + const mod_tab ¤t_tab = all_tabs[iCurrentTab]; + const char *msg = current_tab.mods_unfiltered.empty() ? + _( "--NO AVAILABLE MODS--" ) : _( "--NO RESULTS FOUND--" ); + draw_mod_list( w_list, startsel[0], cursel[0], current_tab.mods, active_header == 0, + msg, catacurses::window() ); - // Redraw active + // Draw active mods draw_mod_list( w_active, startsel[1], cursel[1], active_mod_order, active_header == 1, _( "--NO ACTIVE MODS--" ), w_shift ); } ); - while( tab_output == 0 ) { - if( recalc_tabs ) { - current_tab_mods.clear(); + const auto set_filter = [&]() { + fpopup = std::make_unique(); + fpopup->max_length( 256 ); + // current_filter is modified by apply_filter(), we have to copy the value + // NOLINTNEXTLINE(performance-unnecessary-copy-initialization) + const std::string old_filter = current_filter; + fpopup->text( current_filter ); - for( const auto &item : mman->get_usable_mods() ) { - const auto &iter = get_mod_list_cat_tab().find( - get_mod_list_categories()[item->category.first].first ); + ime_sentry sentry; - std::string sCatTab = "tab_default"; - if( iter != get_mod_list_cat_tab().end() ) { - sCatTab = _( iter->second ); - } + // On next redraw, call resize callback which will configure how popup is rendered + ui.mark_resize(); - if( sCatTab == get_mod_list_tabs()[iCurrentTab].first ) { - current_tab_mods.push_back( item ); - } + for( ;; ) { + ui_manager::redraw(); + fpopup->query_string( /*loop=*/false ); - useable_mod_count = current_tab_mods.size(); + if( fpopup->canceled() ) { + apply_filter( old_filter ); + break; + } else if( fpopup->confirmed() ) { + break; + } else { + apply_filter( fpopup->text() ); } + }; - recalc_tabs = false; - } + fpopup.reset(); + }; + int tab_output = 0; + while( tab_output == 0 ) { ui_manager::redraw(); const int next_header = ( active_header == 1 ) ? 0 : 1; @@ -1003,8 +1111,9 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, size_t next_selection = selection + 1; size_t prev_selection = selection - 1; if( active_header == 0 ) { - next_selection = ( next_selection >= useable_mod_count ) ? 0 : next_selection; - prev_selection = ( prev_selection > useable_mod_count ) ? useable_mod_count - 1 : prev_selection; + size_t num_mods = all_tabs[iCurrentTab].mods.size(); + next_selection = ( next_selection >= num_mods ) ? 0 : next_selection; + prev_selection = ( prev_selection > num_mods ) ? num_mods - 1 : prev_selection; } else { next_selection = ( next_selection >= active_mod_order.size() ) ? 0 : next_selection; prev_selection = ( prev_selection > active_mod_order.size() ) ? active_mod_order.size() - 1 : @@ -1022,6 +1131,7 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, } else if( action == "LEFT" ) { active_header = prev_header; } else if( action == "CONFIRM" ) { + const std::vector ¤t_tab_mods = all_tabs[iCurrentTab].mods; if( active_header == 0 && !current_tab_mods.empty() ) { // try-add mman_ui->try_add( current_tab_mods[cursel[0]], active_mod_order ); @@ -1050,8 +1160,6 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, startsel[0] = 0; cursel[0] = 0; - - recalc_tabs = true; } } else if( action == "PREV_CATEGORY_TAB" ) { @@ -1062,8 +1170,6 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, startsel[0] = 0; cursel[0] = 0; - - recalc_tabs = true; } } else if( action == "NEXT_TAB" ) { tab_output = 1; @@ -1080,6 +1186,8 @@ int worldfactory::show_worldgen_tab_modselection( const catacurses::window &win, } } else if( action == "QUIT" && ( !on_quit || on_quit() ) ) { tab_output = -999; + } else if( action == "FILTER" ) { + set_filter(); } // RESOLVE INPUTS if( last_selection != selection ) { From 6b26febb43853eb0e6795bc6c3a00e2fa09d77d2 Mon Sep 17 00:00:00 2001 From: Fallout48 <66659071+Fallout48@users.noreply.github.com> Date: Mon, 22 Jun 2020 20:52:18 -0300 Subject: [PATCH 068/206] Add some new medical professions & a heroin addict (#41211) --- data/json/professions.json | 112 +++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/data/json/professions.json b/data/json/professions.json index 906b1d31aa10f..46ab2256392c2 100644 --- a/data/json/professions.json +++ b/data/json/professions.json @@ -4153,5 +4153,117 @@ "female": [ "sports_bra", "boy_shorts" ] }, "flags": [ "SCEN_ONLY" ] + }, + { + "type": "profession", + "ident": "emt", + "name": "EMT", + "description": "You were responding to a call with your partner before you got separated. Now all you have is your trusty ambulance, ready to transport patients through the apocalypse.", + "points": 4, + "skills": [ + { "level": 3, "name": "driving" }, + { "level": 2, "name": "mechanics" }, + { "level": 1, "name": "electronics" }, + { "level": 3, "name": "firstaid" } + ], + "vehicle": "ambulance", + "items": { + "both": { + "items": [ "technician_shirt_gray", "pants", "socks", "gloves_medical", "multitool", "wristwatch", "boots" ], + "entries": [ { "group": "charged_cell_phone" } ] + }, + "male": [ "boxer_shorts" ], + "female": [ "bra", "panties" ] + } + }, + { + "type": "profession", + "ident": "paramedic", + "name": "Paramedic", + "description": "You were separated from your partner while out on a call. You managed to hang onto some medical supplies, but it's looking like the only life that needs saving now is yours.", + "points": 3, + "skills": [ { "level": 2, "name": "driving" }, { "level": 1, "name": "mechanics" }, { "level": 5, "name": "firstaid" } ], + "items": { + "both": { + "items": [ + "technician_shirt_gray", + "pants", + "socks", + "gloves_medical", + "wristwatch", + "boots", + "mask_dust", + "mbag", + "bandages", + "stethoscope", + "scissors", + "1st_aid", + "syringe", + "morphine" + ], + "entries": [ { "group": "charged_cell_phone" } ] + }, + "male": [ "boxer_shorts" ], + "female": [ "bra", "panties" ] + } + }, + { + "type": "profession", + "ident": "mili_medic", + "name": "Combat Medic", + "description": "You were on the front-lines when everything happened, patching up the wounded and providing support. But they wouldn't stop coming. Now you're on your own.", + "points": 5, + "skills": [ + { "level": 2, "name": "gun" }, + { "level": 2, "name": "rifle" }, + { "level": 2, "name": "melee" }, + { "level": 2, "name": "stabbing" }, + { "level": 1, "name": "dodge" }, + { "level": 4, "name": "firstaid" } + ], + "items": { + "both": { + "items": [ + "pants_army", + "undershirt", + "jacket_army", + "ballistic_vest_esapi", + "helmet_army", + "gloves_liner", + "gloves_tactical", + "socks", + "boots_combat", + "wristwatch", + "thermometer", + "bandages", + "1st_aid", + "scalpel", + "syringe", + "morphine", + "molle_pack" + ], + "entries": [ + { "group": "charged_two_way_radio" }, + { "item": "legpouch_large", "contents-group": "army_mags_m4" }, + { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] }, + { "item": "gloves_medical", "custom-flags": [ "no_auto_equip" ] }, + { "item": "mask_dust", "custom-flags": [ "no_auto_equip" ] }, + { "item": "stethoscope", "custom-flags": [ "no_auto_equip" ] }, + { "item": "knife_combat", "container-item": "sheath" }, + { "item": "m4a1", "ammo-item": "556", "charges": 30, "contents-item": [ "shoulder_strap", "holo_sight" ] } + ] + }, + "male": [ "boxer_shorts" ], + "female": [ "sports_bra", "boxer_shorts" ] + } + }, + { + "type": "profession", + "ident": "heroin_addict", + "name": "Heroin Addict", + "description": "The last thing you remember was meeting God behind the local Foodplace. Then people started eating each other. This doesn't feel like a fever dream.", + "points": -3, + "items": { "both": [ "shorts", "heroin", "syringe" ], "male": [ "briefs" ], "female": [ "bra", "panties" ] }, + "addictions": [ { "intensity": 40, "type": "opiate" } ] } ] From ae2aa534a6bb8f43f77c1cc4260ce0506ba2598c Mon Sep 17 00:00:00 2001 From: nexusmrsep <39925111+nexusmrsep@users.noreply.github.com> Date: Tue, 23 Jun 2020 01:54:00 +0200 Subject: [PATCH 069/206] Feedback for burnout of candles and torches (#41481) --- data/json/flags.json | 6 ++++++ data/json/items/tool/lighting.json | 20 +++++++++++--------- src/item.cpp | 19 +++++++++++++++++++ src/iteminfo_query.h | 1 + tests/iteminfo_test.cpp | 17 +++++++++++++++++ 5 files changed, 54 insertions(+), 9 deletions(-) diff --git a/data/json/flags.json b/data/json/flags.json index ae09ac004d0ff..786c174c9e943 100644 --- a/data/json/flags.json +++ b/data/json/flags.json @@ -245,6 +245,12 @@ "context": [ "ARMOR", "TOOL_ARMOR" ], "info": "This gear is equipped with an accurate hygrometer (which is used to measure humidity)." }, + { + "id": "BURNOUT", + "type": "json_flag", + "context": [ "TOOL" ], + "//": "You can visually inspect how much it is burned out (candle, torch)." + }, { "id": "IRREMOVABLE", "type": "json_flag", diff --git a/data/json/items/tool/lighting.json b/data/json/items/tool/lighting.json index da74917f0eda9..5ce5dd4774e71 100644 --- a/data/json/items/tool/lighting.json +++ b/data/json/items/tool/lighting.json @@ -111,7 +111,8 @@ "need_fire": 1, "menu_text": "Light", "type": "transform" - } + }, + "flags": [ "BURNOUT" ] }, { "id": "candle_lit", @@ -134,7 +135,7 @@ { "type": "firestarter", "moves": 100 }, { "target": "candle", "msg": "The candle winks out.", "menu_text": "Extinguish", "type": "transform" } ], - "flags": [ "LIGHT_8", "WATER_EXTINGUISH", "TRADER_AVOID", "WIND_EXTINGUISH", "FIRESTARTER" ] + "flags": [ "LIGHT_8", "WATER_EXTINGUISH", "TRADER_AVOID", "WIND_EXTINGUISH", "FIRESTARTER", "BURNOUT" ] }, { "id": "electric_lantern", @@ -684,8 +685,8 @@ "symbol": "/", "color": "brown", "techniques": [ "WBLOCK_1" ], - "initial_charges": 25, - "max_charges": 25, + "initial_charges": 20, + "max_charges": 20, "charges_per_use": 1, "use_action": { "target": "torch_lit", @@ -694,7 +695,8 @@ "need_fire": 1, "menu_text": "Light torch", "type": "transform" - } + }, + "flags": [ "BURNOUT" ] }, { "id": "torch_lit", @@ -710,9 +712,9 @@ "material": [ "wood" ], "symbol": "/", "color": "brown", - "initial_charges": 75, - "max_charges": 75, - "turns_per_charge": 40, + "initial_charges": 20, + "max_charges": 20, + "turns_per_charge": 60, "revert_to": "torch_done", "use_action": [ { "type": "firestarter", "moves": 30 }, @@ -725,6 +727,6 @@ } ], "techniques": [ "WBLOCK_1" ], - "flags": [ "FIRE", "LIGHT_310", "CHARGEDIM", "FLAMING", "TRADER_AVOID", "WATER_EXTINGUISH" ] + "flags": [ "FIRE", "LIGHT_310", "CHARGEDIM", "FLAMING", "TRADER_AVOID", "WATER_EXTINGUISH", "BURNOUT" ] } ] diff --git a/src/item.cpp b/src/item.cpp index 8fdf9bc5a0407..c4c6526cefe76 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -193,6 +193,7 @@ static const std::string flag_HIDDEN_HALLU( "HIDDEN_HALLU" ); static const std::string flag_HIDDEN_POISON( "HIDDEN_POISON" ); static const std::string flag_HOT( "HOT" ); static const std::string flag_IRREMOVABLE( "IRREMOVABLE" ); +static const std::string flag_BURNOUT( "BURNOUT" ); static const std::string flag_IS_ARMOR( "IS_ARMOR" ); static const std::string flag_IS_PET_ARMOR( "IS_PET_ARMOR" ); static const std::string flag_IS_UPS( "IS_UPS" ); @@ -3060,6 +3061,24 @@ void item::tool_info( std::vector &info, const iteminfo_query *parts, } else if( has_flag( flag_USES_BIONIC_POWER ) ) { info.emplace_back( "DESCRIPTION", _( "* This tool runs on bionic power." ) ); + } else if( has_flag( flag_BURNOUT ) && parts->test( iteminfo_parts::TOOL_BURNOUT ) ) { + int percent_left = 100 * ammo_remaining() / type->maximum_charges(); + std::string feedback; + if( percent_left == 100 ) { + feedback = _( "It's new, and ready to burn." ); + } else if( percent_left >= 75 ) { + feedback = _( "Almost new, with much material to burn." ); + } else if( percent_left >= 50 ) { + feedback = _( "More than a quarter has burned away." ); + } else if( percent_left >= 25 ) { + feedback = _( "More than half has burned away." ); + } else if( percent_left >= 10 ) { + feedback = _( "Less than a quarter left to burn." ); + } else { + feedback = _( "Almost completely burned out." ); + } + feedback = _( "Fuel: " ) + feedback; + info.push_back( iteminfo( "DESCRIPTION", feedback ) ); } } diff --git a/src/iteminfo_query.h b/src/iteminfo_query.h index 72036ae62d5d8..89782e0bf6022 100644 --- a/src/iteminfo_query.h +++ b/src/iteminfo_query.h @@ -147,6 +147,7 @@ enum class iteminfo_parts : size_t { TOOL_MAGAZINE_CURRENT, TOOL_MAGAZINE_COMPATIBLE, TOOL_CAPACITY, + TOOL_BURNOUT, DESCRIPTION_COMPONENTS_MADEFROM, DESCRIPTION_COMPONENTS_DISASSEMBLE, diff --git a/tests/iteminfo_test.cpp b/tests/iteminfo_test.cpp index c2a7cd106adfa..be76a50d31030 100644 --- a/tests/iteminfo_test.cpp +++ b/tests/iteminfo_test.cpp @@ -1721,6 +1721,23 @@ TEST_CASE( "tool info", "[iteminfo][tool]" ) "Charges: 20\n" ); } + SECTION( "candle with feedback on burnout" ) { + std::vector burnout = { iteminfo_parts::TOOL_BURNOUT }; + + item candle( "candle" ); + REQUIRE( candle.ammo_remaining() > 0 ); + + candle.charges = candle.type->maximum_charges(); + CHECK( item_info_str( candle, burnout ) == + "--\n" + "Fuel: It's new, and ready to burn.\n" ); + + candle.charges = ( candle.type->maximum_charges() / 2 ) - 1; + CHECK( item_info_str( candle, burnout ) == + "--\n" + "Fuel: More than half has burned away.\n" ); + } + SECTION( "UPS charged tool" ) { std::vector recharge_ups = { iteminfo_parts::DESCRIPTION_RECHARGE_UPSMODDED }; From b7abf1659668304175cc7532e3aab8a7870bf541 Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Mon, 22 Jun 2020 18:16:21 -0600 Subject: [PATCH 070/206] Fix typo in folded_volume string --- data/json/vehicleparts/vehicle_parts.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/vehicleparts/vehicle_parts.json b/data/json/vehicleparts/vehicle_parts.json index 90a3c8402fdcc..ad3972da7ed0f 100644 --- a/data/json/vehicleparts/vehicle_parts.json +++ b/data/json/vehicleparts/vehicle_parts.json @@ -2813,7 +2813,7 @@ "repair": { "skills": [ [ "mechanics", 4 ] ], "time": "30 m", "using": [ [ "adhesive", 1 ] ] } }, "flags": [ "INTERNAL", "RECHARGE", "FOLDABLE", "ENABLED_DRAINS_EPOWER" ], - "folded_volume": "2 L ", + "folded_volume": "2 L", "breaks_into": [ { "item": "steel_chunk", "count": [ 0, 2 ] }, { "item": "scrap", "count": [ 1, 2 ] }, From 9de8369c32b5311823fdd4f4961c48f05397af51 Mon Sep 17 00:00:00 2001 From: Curtis Merrill Date: Tue, 23 Jun 2020 01:41:10 -0400 Subject: [PATCH 071/206] Fix bmr burning (#41525) * adjust rates.kcal to actually call get_bmr() * tweak activity levels to be more in line with exercise --- src/character.cpp | 3 +-- src/game_constants.h | 8 ++++---- tests/char_biometrics_test.cpp | 28 ++++++++++++++-------------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/character.cpp b/src/character.cpp index d56878b4269bc..2f8cbf8ee0838 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -5029,8 +5029,7 @@ needs_rates Character::calc_needs_rates() const needs_rates rates; rates.hunger = metabolic_rate(); - // TODO: this is where calculating basal metabolic rate, in kcal per day would go - rates.kcal = 2500.0; + rates.kcal = get_bmr(); add_msg_if_player( m_debug, "Metabolic rate: %.2f", rates.hunger ); diff --git a/src/game_constants.h b/src/game_constants.h index 992deb9350c07..3ca2b90b1cae7 100644 --- a/src/game_constants.h +++ b/src/game_constants.h @@ -160,10 +160,10 @@ constexpr int SIMPLEX_NOISE_RANDOM_SEED_LIMIT = 32768; * did this activity for a longer period of time. */ constexpr float NO_EXERCISE = 1.2f; -constexpr float LIGHT_EXERCISE = 1.375f; -constexpr float MODERATE_EXERCISE = 1.55f; -constexpr float ACTIVE_EXERCISE = 1.725f; -constexpr float EXTRA_EXERCISE = 1.9f; +constexpr float LIGHT_EXERCISE = 2.0f; +constexpr float MODERATE_EXERCISE = 4.5f; +constexpr float ACTIVE_EXERCISE = 8.0f; +constexpr float EXTRA_EXERCISE = 10.0f; // these are the lower bounds of each of the weight classes. namespace character_weight_category diff --git a/tests/char_biometrics_test.cpp b/tests/char_biometrics_test.cpp index 536f9271d166a..e233bbc4c6425 100644 --- a/tests/char_biometrics_test.cpp +++ b/tests/char_biometrics_test.cpp @@ -415,10 +415,10 @@ TEST_CASE( "activity level reset, increase and decrease", "[biometrics][activity // Activity level is a floating-point number, but only set to discrete values: // // NO_EXERCISE = 1.2f; - // LIGHT_EXERCISE = 1.375f; - // MODERATE_EXERCISE = 1.55f; - // ACTIVE_EXERCISE = 1.725f; - // EXTRA_EXERCISE = 1.9f; + // LIGHT_EXERCISE = 2.0f; + // MODERATE_EXERCISE = 4.5f; + // ACTIVE_EXERCISE = 8.0f; + // EXTRA_EXERCISE = 10.0f; // Functions tested: // activity_level_str (return string constant for each range) @@ -552,8 +552,8 @@ TEST_CASE( "basal metabolic rate with various size and metabolism", "[biometrics SECTION( "normal metabolism" ) { CHECK( 2087 == bmr_at_act_level( dummy, NO_EXERCISE ) ); - CHECK( 2696 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); - CHECK( 3304 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); + CHECK( 7825 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); + CHECK( 17388 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); } SECTION( "very fast metabolism" ) { @@ -561,8 +561,8 @@ TEST_CASE( "basal metabolic rate with various size and metabolism", "[biometrics REQUIRE( dummy.metabolic_rate_base() == 2.0f ); CHECK( 4174 == bmr_at_act_level( dummy, NO_EXERCISE ) ); - CHECK( 5391 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); - CHECK( 6608 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); + CHECK( 15649 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); + CHECK( 34775 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); } SECTION( "very slow (cold-blooded) metabolism" ) { @@ -570,8 +570,8 @@ TEST_CASE( "basal metabolic rate with various size and metabolism", "[biometrics REQUIRE( dummy.metabolic_rate_base() == 0.5f ); CHECK( 1044 == bmr_at_act_level( dummy, NO_EXERCISE ) ); - CHECK( 1348 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); - CHECK( 1652 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); + CHECK( 3913 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); + CHECK( 8694 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); } } @@ -580,8 +580,8 @@ TEST_CASE( "basal metabolic rate with various size and metabolism", "[biometrics REQUIRE( dummy.get_size() == creature_size::small ); CHECK( 1262 == bmr_at_act_level( dummy, NO_EXERCISE ) ); - CHECK( 1630 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); - CHECK( 1998 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); + CHECK( 4731 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); + CHECK( 10513 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); } SECTION( "large body size" ) { @@ -589,8 +589,8 @@ TEST_CASE( "basal metabolic rate with various size and metabolism", "[biometrics REQUIRE( dummy.get_size() == creature_size::large ); CHECK( 3062 == bmr_at_act_level( dummy, NO_EXERCISE ) ); - CHECK( 3955 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); - CHECK( 4848 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); + CHECK( 11481 == bmr_at_act_level( dummy, MODERATE_EXERCISE ) ); + CHECK( 25513 == bmr_at_act_level( dummy, EXTRA_EXERCISE ) ); } } From a87254b90d3045208aa96408cd4bf05a4914b0eb Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Tue, 23 Jun 2020 00:41:57 -0500 Subject: [PATCH 072/206] Pockets for tool ammo (#41519) --- data/json/items/tool/cooking.json | 9 +++++++++ data/json/items/tool/fishing.json | 1 + data/json/items/tool/lighting.json | 2 ++ data/json/items/tool/med.json | 1 + data/json/items/tool/misc.json | 1 + data/json/items/tool/pets.json | 11 ++++++++++- data/json/items/tool/tailoring.json | 3 +++ data/json/items/tool/toileteries.json | 2 ++ data/json/items/tool/woodworking.json | 1 + data/json/items/tool/workshop.json | 1 + data/mods/Magiclysm/items/tools.json | 1 + 11 files changed, 32 insertions(+), 1 deletion(-) diff --git a/data/json/items/tool/cooking.json b/data/json/items/tool/cooking.json index da051ba4beb61..f4de995bedf8b 100644 --- a/data/json/items/tool/cooking.json +++ b/data/json/items/tool/cooking.json @@ -122,6 +122,7 @@ "material": [ "wood", "plastic" ], "symbol": ";", "color": "light_gray", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "charcoal": 150 } } ], "initial_charges": 150, "max_charges": 150, "charges_per_use": 1, @@ -143,6 +144,7 @@ "symbol": ";", "color": "light_gray", "ammo": [ "charcoal" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "charcoal": 200 } } ], "max_charges": 200, "flags": [ "ALLOWS_REMOTE_USE" ] }, @@ -162,6 +164,7 @@ "color": "green", "ammo": [ "charcoal" ], "sub": "hotplate", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "charcoal": 50 } } ], "initial_charges": 50, "max_charges": 50, "charges_per_use": 1, @@ -311,6 +314,7 @@ "color": "light_gray", "ammo": [ "esbit" ], "sub": "hotplate", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "hexamine": 50 } } ], "initial_charges": 50, "max_charges": 50, "charges_per_use": 1, @@ -386,6 +390,7 @@ "color": "green", "ammo": [ "gasoline" ], "sub": "hotplate", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasoline": 500 } } ], "initial_charges": 500, "max_charges": 500, "charges_per_use": 1, @@ -440,6 +445,7 @@ "symbol": ",", "color": "light_gray", "ammo": [ "tinder" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "tinder": 100 } } ], "max_charges": 100, "charges_per_use": 25, "use_action": [ "HOTPLATE" ] @@ -749,6 +755,7 @@ "color": "green", "ammo": [ "lamp_oil" ], "sub": "hotplate", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "lamp_oil": 800 } } ], "initial_charges": 800, "max_charges": 800, "charges_per_use": 1, @@ -810,6 +817,7 @@ "color": "light_gray", "ammo": [ "conc_alcohol" ], "sub": "hotplate", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "conc_alcohol": 500 } } ], "initial_charges": 500, "max_charges": 500, "charges_per_use": 1, @@ -937,6 +945,7 @@ "color": "brown", "ammo": [ "lamp_oil" ], "sub": "hotplate", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "lamp_oil": 800 } } ], "max_charges": 800, "charges_per_use": 1, "qualities": [ [ "COOK", 3 ], [ "BOIL", 2 ], [ "CONTAIN", 1 ], [ "CHEM", 1 ] ], diff --git a/data/json/items/tool/fishing.json b/data/json/items/tool/fishing.json index 92cdd3a3b291e..fd81ac3ca3b6a 100644 --- a/data/json/items/tool/fishing.json +++ b/data/json/items/tool/fishing.json @@ -13,6 +13,7 @@ "symbol": ";", "color": "green", "ammo": [ "fish_bait" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "fish_bait": 5 } } ], "max_charges": 5, "use_action": [ "FISH_TRAP" ] }, diff --git a/data/json/items/tool/lighting.json b/data/json/items/tool/lighting.json index 5ce5dd4774e71..2213ecebe391b 100644 --- a/data/json/items/tool/lighting.json +++ b/data/json/items/tool/lighting.json @@ -256,6 +256,7 @@ "symbol": ";", "color": "yellow", "ammo": [ "gasoline" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasoline": 500 } } ], "initial_charges": 500, "max_charges": 500, "charges_per_use": 1, @@ -506,6 +507,7 @@ "symbol": ";", "color": "yellow", "ammo": [ "lamp_oil" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "lamp_oil": 750 } } ], "initial_charges": 750, "max_charges": 750, "charges_per_use": 1, diff --git a/data/json/items/tool/med.json b/data/json/items/tool/med.json index 947ee2f808496..c0db5ebb543c8 100644 --- a/data/json/items/tool/med.json +++ b/data/json/items/tool/med.json @@ -88,6 +88,7 @@ "color": "light_gray", "ammo": [ "ampoule" ], "initial_charges": 2, + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "ampoule": 2 } } ], "max_charges": 2, "charges_per_use": 1, "use_action": [ "JET_INJECTOR" ] diff --git a/data/json/items/tool/misc.json b/data/json/items/tool/misc.json index 58016a548f63a..2d1a06abe02ba 100644 --- a/data/json/items/tool/misc.json +++ b/data/json/items/tool/misc.json @@ -56,6 +56,7 @@ "volume": "500 ml", "price": 1500, "price_postapoc": 250, + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "butane": 30 } } ], "initial_charges": 30, "max_charges": 30, "charges_per_use": 1, diff --git a/data/json/items/tool/pets.json b/data/json/items/tool/pets.json index 9664a7f71b0f8..af0689312c8f8 100644 --- a/data/json/items/tool/pets.json +++ b/data/json/items/tool/pets.json @@ -66,7 +66,16 @@ "ammo": [ "battery" ], "initial_charges": 100, "max_charges": 100, - "charges_per_use": 25 + "charges_per_use": 25, + "pocket_data": [ + { + "pocket_type": "MAGAZINE_WELL", + "holster": true, + "max_contains_volume": "20 L", + "max_contains_weight": "20 kg", + "item_restriction": [ "light_minus_battery_cell", "light_minus_disposable_cell", "light_battery_cell", "light_disposable_cell" ] + } + ] }, { "id": "horse_tack", diff --git a/data/json/items/tool/tailoring.json b/data/json/items/tool/tailoring.json index e1aa31fdff119..1685eda3ccc88 100644 --- a/data/json/items/tool/tailoring.json +++ b/data/json/items/tool/tailoring.json @@ -77,6 +77,7 @@ "color": "white", "ammo": [ "thread" ], "sub": "sewing_kit", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "thread": 200 } } ], "max_charges": 200, "charges_per_use": 1, "qualities": [ [ "SEW", 2 ] ], @@ -105,6 +106,7 @@ "color": "light_gray", "ammo": [ "thread" ], "sub": "sewing_kit", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "thread": 200 } } ], "max_charges": 200, "charges_per_use": 1, "qualities": [ [ "SEW_CURVED", 1 ] ], @@ -133,6 +135,7 @@ "color": "brown", "ammo": [ "thread" ], "sub": "sewing_kit", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "thread": 200 } } ], "max_charges": 200, "charges_per_use": 1, "qualities": [ [ "SEW", 1 ] ], diff --git a/data/json/items/tool/toileteries.json b/data/json/items/tool/toileteries.json index 3c81ffde2bf13..d9f55dcddecce 100644 --- a/data/json/items/tool/toileteries.json +++ b/data/json/items/tool/toileteries.json @@ -119,6 +119,7 @@ "symbol": ";", "color": "white", "ammo": [ "soap" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "soap": 10 } } ], "initial_charges": 5, "max_charges": 10, "charges_per_use": 1, @@ -170,6 +171,7 @@ "symbol": ";", "color": "brown", "ammo": [ "soap" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "soap": 10 } } ], "max_charges": 10, "charges_per_use": 1, "use_action": [ "SHAVEKIT" ] diff --git a/data/json/items/tool/woodworking.json b/data/json/items/tool/woodworking.json index 4edcfb6c0167e..3d49e7dea2d4a 100644 --- a/data/json/items/tool/woodworking.json +++ b/data/json/items/tool/woodworking.json @@ -32,6 +32,7 @@ "symbol": "/", "color": "red", "ammo": [ "gasoline" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasoline": 450 } } ], "charges_per_use": 5, "max_charges": 450, "techniques": [ "SWEEP" ], diff --git a/data/json/items/tool/workshop.json b/data/json/items/tool/workshop.json index 836e58c7c8a6c..e9096786566fa 100644 --- a/data/json/items/tool/workshop.json +++ b/data/json/items/tool/workshop.json @@ -546,6 +546,7 @@ "color": "light_gray", "ammo": [ "tape" ], "max_charges": 200, + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "tape": 200 } } ], "charges_per_use": 5, "qualities": [ [ "CUT", 1 ], [ "CUT_FINE", 2 ], [ "AXE", 1 ], [ "SAW_W", 2 ], [ "BUTCHER", -90 ] ], "use_action": [ diff --git a/data/mods/Magiclysm/items/tools.json b/data/mods/Magiclysm/items/tools.json index 37b941a5355c2..d70976c0e1a84 100644 --- a/data/mods/Magiclysm/items/tools.json +++ b/data/mods/Magiclysm/items/tools.json @@ -52,6 +52,7 @@ "color": "red", "ammo": [ "alumentum" ], "sub": "forge", + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "charcoal": 500 } } ], "max_charges": 500, "flags": [ "ALLOWS_REMOTE_USE" ] }, From ee2491b7402a3f71899b1d566ee2bc9f0d73deba Mon Sep 17 00:00:00 2001 From: hexagonrecursion Date: Tue, 23 Jun 2020 07:18:07 +0000 Subject: [PATCH 073/206] Add json trap documentation --- doc/JSON_INFO.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 33fb5ac8f450e..095a513c78925 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -53,6 +53,7 @@ Use the `Home` key to return to the top. - [`conduct`](#conduct) + [Skills](#skills) + [Traits/Mutations](#traits-mutations) + + [Traps](#traps) + [Vehicle Groups](#vehicle-groups) + [Vehicle Parts](#vehicle-parts) + [Part Resistance](#part-resistance) @@ -1531,6 +1532,39 @@ it is present to help catch errors. | STAMINA | Trigger depends of the stamina value. | TIME | Trigger depends of the time of the day. [ 1am = 1, Midnight = 24 ] +### Traps + +```C++ + "type": "trap", + "id": "tr_beartrap", // Unique ID + "name": "bear trap", // In-game name displayed + "color": "blue", + "symbol": "^", + "visibility": 2, // 1 to ??, affects detection + "avoidance": 7, // 0 to ??, affects avoidance + "difficulty": 3, // 0 to ??, difficulty of assembly & disassembly + "trap_radius": 1, // 0 to ??, trap radius + "action": "blade", + "map_regen": "microlab_shifting_hall", // a valid overmap id, for map_regen action traps + "benign": true, + "always_invisible": true, + "funnel_radius": 200, // milimiters? + "comfort": 4, + "floor_bedding_warmth": -500, + "spell_data": { "id": "bear_trap" }, // data required for trapfunc::spell() + "trigger_weight": "200 g", // If an item with this weight or more is thrown onto the trap, it triggers. TODO: what is the default? + "drops": [ "beartrap" ], // For disassembly? + "vehicle_data": { + "damage": 300, + "sound_volume": 8, + "sound": "SNAP!", + "sound_type": "trap", + "sound_variant": "bear_trap", + "remove_trap": true, + "spawn_items": [ "beartrap" ] + } +``` + ### Vehicle Groups From 1aecbeb32092da124a17a807f80ccfa5f4f20953 Mon Sep 17 00:00:00 2001 From: hexagonrecursion Date: Tue, 23 Jun 2020 13:53:39 +0000 Subject: [PATCH 074/206] Modernize integral volume weight (#41534) * Modernize weight and volume: GUNMOD improve_sights * Modernize integral_weight and _volume for obsolete items --- data/json/items/gunmod/sights.json | 4 ++-- data/json/items/obsolete.json | 22 +++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/data/json/items/gunmod/sights.json b/data/json/items/gunmod/sights.json index 9450e1a83d712..0787a5d05d9cb 100644 --- a/data/json/items/gunmod/sights.json +++ b/data/json/items/gunmod/sights.json @@ -83,8 +83,8 @@ "description": "A basic set of iron sights", "weight": "60 g", "volume": "250 ml", - "integral_volume": 0, - "integral_weight": 0, + "integral_volume": "0 ml", + "integral_weight": "0 g", "price": 72000, "price_postapoc": 250, "material": [ "steel" ], diff --git a/data/json/items/obsolete.json b/data/json/items/obsolete.json index 98a07f0b6c10b..0770be2921370 100644 --- a/data/json/items/obsolete.json +++ b/data/json/items/obsolete.json @@ -99,7 +99,7 @@ "description": "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.", "weight": "226 g", "volume": "500 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 22000, "to_hit": 1, "bashing": 3, @@ -119,7 +119,7 @@ "description": "An improved blowback mechanism makes your firearm's automatic fire faster, at the cost of reduced accuracy and increased noise.", "weight": "114 g", "volume": "250 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 70000, "material": [ "steel" ], "symbol": ":", @@ -138,7 +138,7 @@ "description": "A simple mechanism that converts a pistol to a selective fire weapon with a burst size of three rounds. However it reduces accuracy and increases noise.", "weight": "113 g", "volume": "250 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 65000, "material": [ "steel", "plastic" ], "symbol": ":", @@ -179,7 +179,7 @@ "description": "Replacing several key parts of a 9x19mm, .38, .40, 5.7mm, 4.6mm, 7.62x39mm or .223 firearm converts it to a .22 firearm. The conversion results in a slight reduction to accuracy.", "weight": "114 g", "volume": "250 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 32000, "material": [ "steel" ], "symbol": ":", @@ -199,7 +199,7 @@ "description": "This kit is used to convert a shotgun, 5.45x39mm, 7.62x39mm, .30-06, or .308 rifle to the popular, accurate, and lighter .223 caliber. The conversion results in slight reductions to both accuracy and ammo capacity.", "weight": "114 g", "volume": "500 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 50000, "material": [ "steel" ], "symbol": ":", @@ -219,7 +219,7 @@ "description": "This kit is used to convert a shotgun or 7.62x39mm, .223 or .30-06 rifle to the popular and powerful .308 caliber. The conversion results in reduced ammo capacity and a slight reduction to accuracy.", "weight": "114 g", "volume": "500 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 52000, "material": [ "steel" ], "symbol": ":", @@ -239,7 +239,7 @@ "description": "Replacing several key parts of a 9x19mm, .38, .40 or .44 firearm converts it to a .45 firearm. The conversion results in a slight reduction to accuracy.", "weight": "226 g", "volume": "250 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 48000, "material": [ "steel" ], "symbol": ":", @@ -259,7 +259,7 @@ "description": "A conversion kit produced by Heckler and Koch, used to convert .22, 9x19mm, or .38 firearms to their proprietary 4.6x30mm, a round designed for accuracy and armor penetration.", "weight": "114 g", "volume": "250 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 46000, "material": [ "steel" ], "symbol": ":", @@ -279,7 +279,7 @@ "description": "A conversion kit produced by FN Herstal, used to convert .22, 9x19mm, or .38 firearms to their proprietary 5.7x28mm, a round designed for accuracy and armor penetration.", "weight": "114 g", "volume": "250 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 46000, "material": [ "steel" ], "symbol": ":", @@ -299,7 +299,7 @@ "description": "Replacing several key parts of a 9x18mm, .38, .40, .44 or .45 firearm converts it to a 9x19mm firearm. The conversion results in a slight reduction to accuracy.", "weight": "114 g", "volume": "250 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 42000, "material": [ "steel" ], "symbol": ":", @@ -351,7 +351,7 @@ "description": "A set of finely tuned internal components which increase the precision and reliably of a firearm.", "weight": "120 g", "volume": "250 ml", - "integral_volume": 0, + "integral_volume": "0 ml", "price": 2500, "material": [ "steel", "superalloy" ], "symbol": ":", From 34d24ac333c66bb2d92e8a1dbbc311b54ef639fa Mon Sep 17 00:00:00 2001 From: hexagonrecursion Date: Tue, 23 Jun 2020 13:54:11 +0000 Subject: [PATCH 075/206] Improve documentation for integral_volume and integral_weight (#41533) * Modernize integral_volume and _weight docs * Clarify defaults for integral_weight and _volume * Clarify comment --- doc/JSON_INFO.md | 4 ++-- src/itype.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 33fb5ac8f450e..d24174dbff80a 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -1690,8 +1690,8 @@ See also VEHICLE_JSON.md "phase": "solid", // (Optional, default = "solid") What phase it is "weight": "350 g", // Weight, weight in grams, mg and kg can be used - "50 mg", "5 g" or "5 kg". For stackable items (ammo, comestibles) this is the weight per charge. "volume": "250 ml", // Volume, volume in ml and L can be used - "50 ml" or "2 L". For stackable items (ammo, comestibles) this is the volume of stack_size charges. -"integral_volume": 0, // Volume added to base item when item is integrated into another (eg. a gunmod integrated to a gun). Volume in ml and L can be used - "50 ml" or "2 L". -"integral_weight": 0, // Weight added to base item when item is integrated into another (eg. a gunmod integrated to a gun) +"integral_volume": "50 ml", // Volume added to base item when item is integrated into another (eg. a gunmod integrated to a gun). Volume in ml and L can be used - "50 ml" or "2 L". Default is the same as volume. +"integral_weight": "50 g", // Weight added to base item when item is integrated into another (eg. a gunmod integrated to a gun). Default is the same as weight. "longest_side": "15 cm", // Length of longest item dimension. Default is cube root of volume. "rigid": false, // For non-rigid items volume (and for worn items encumbrance) increases proportional to contents "insulation": 1, // (Optional, default = 1) If container or vehicle part, how much insulation should it provide to the contents diff --git a/src/itype.h b/src/itype.h index 9717a27d12aa1..aa4e7d3b2240c 100644 --- a/src/itype.h +++ b/src/itype.h @@ -928,7 +928,7 @@ struct itype { /** Weight of item ( or each stack member ) */ units::mass weight = 0_gram; - /** Weight difference with the part it replaces for mods */ + /** Weight difference with the part it replaces for mods (defaults to weight) */ units::mass integral_weight = -1_gram; /** From 5571f7680900513ed7bc95e652d7ccfa51c051ef Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Tue, 23 Jun 2020 13:06:49 -0700 Subject: [PATCH 076/206] Bump debug spam calories to fix ci --- data/json/items/comestibles/meat_dishes.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/comestibles/meat_dishes.json b/data/json/items/comestibles/meat_dishes.json index 32b65c4d1721a..7a15dc2df74cb 100644 --- a/data/json/items/comestibles/meat_dishes.json +++ b/data/json/items/comestibles/meat_dishes.json @@ -444,7 +444,7 @@ "id": "debug_nutrition", "copy-from": "can_spam", "name": { "str": "holy SPAM of debugging", "str_pl": "holy SPAMs of debugging" }, - "calories": 2100, + "calories": 2150, "description": "A mysterious lump of SPAM that contains just enough calories and vitamins to feed you for a day. For debug use only.", "//": "This is used for the all_nutrient_starve_test.", "vitamins": [ [ "vitA", 96 ], [ "vitB", 96 ], [ "vitC", 96 ], [ "calcium", 96 ], [ "iron", 96 ] ] From 7bd86483a5b4baaf9c8c0a76bc9ed3d1f5fcac34 Mon Sep 17 00:00:00 2001 From: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> Date: Tue, 23 Jun 2020 13:43:59 -0700 Subject: [PATCH 077/206] Sandwich weight (#41529) --- data/json/items/comestibles/meat_dishes.json | 21 +++--- data/json/items/comestibles/sandwich.json | 72 ++++++++++---------- 2 files changed, 47 insertions(+), 46 deletions(-) diff --git a/data/json/items/comestibles/meat_dishes.json b/data/json/items/comestibles/meat_dishes.json index 7a15dc2df74cb..7af41504a6e57 100644 --- a/data/json/items/comestibles/meat_dishes.json +++ b/data/json/items/comestibles/meat_dishes.json @@ -102,9 +102,9 @@ "calories": 297, "description": "A type of German sausage made of finely chopped meat and meant to be pan fried or roasted. Better eat it hot and fresh.", "price": 1800, - "price_postapoc": 1500, + "volume": "1500 ml", + "//": "volume and weight for a roughly 25cm length, 2.5cm diameter link, estimated", "material": [ "flesh" ], - "volume": "500 ml", "charges": 10, "flags": [ "EATEN_HOT" ], "fun": 5 @@ -143,9 +143,10 @@ "calories": 398, "description": "A thick slab of salty cured bacon. Shelf stable, precooked and ready-to-eat, it tastes better when reheated.", "price": 1900, + "volume": "100 ml", + "//": "I am not sure how much a 'charge' is meant to be, but a slice is around 10mL displacement volume, with a weight of 8g and about 40kcal. Based this on that.", "price_postapoc": 500, "material": [ "flesh" ], - "volume": "250 ml", "charges": 2, "flags": [ "EATEN_HOT" ], "vitamins": [ [ "calcium", 1 ], [ "iron", 5 ], [ "vitB", 39 ] ], @@ -190,9 +191,9 @@ "calories": 270, "description": "Also known as pork rinds or chicharrones, these are bits of edible fat and skin that have been fried until they are crispy and delicious.", "price": 170, + "volume": "100 ml", "price_postapoc": 500, "material": [ "flesh" ], - "volume": "250 ml", "charges": 4, "flags": [ "EATEN_HOT" ], "fun": 4 @@ -1026,7 +1027,7 @@ { "type": "FLAG", "condition": "STRICT_HUMANITARIANISM", "name": { "str_sp": "elf %s" } }, { "type": "COMPONENT_ID", "condition": "mutant", "name": { "str_sp": "chilling %s" } } ], - "weight": "133 g", + "weight": "333 g", "color": "brown", "spoils_in": "1 day 12 hours", "container": "wrapper", @@ -1038,7 +1039,7 @@ "price_postapoc": 250, "material": [ "flesh", "wheat", "milk" ], "primary_material": "processed_food", - "volume": "500 ml", + "volume": "300 ml", "flags": [ "EATEN_HOT", "ALLERGEN_MILK" ], "fun": 5, "vitamins": [ [ "calcium", 9 ], [ "iron", 14 ] ] @@ -1052,7 +1053,7 @@ { "type": "FLAG", "condition": "STRICT_HUMANITARIANISM", "name": { "str_sp": "Moreauburger" } }, { "type": "COMPONENT_ID", "condition": "mutant", "name": { "str_sp": "horrible %s" } } ], - "weight": "99 g", + "weight": "300 g", "color": "brown", "spoils_in": "1 day 12 hours", "container": "wrapper", @@ -1063,7 +1064,7 @@ "price": 900, "price_postapoc": 200, "material": [ "flesh", "wheat" ], - "volume": "500 ml", + "volume": "300 ml", "flags": [ "EATEN_HOT" ], "fun": 4, "vitamins": [ [ "vitC", 2 ], [ "calcium", 8 ], [ "iron", 16 ] ] @@ -1081,7 +1082,7 @@ }, { "type": "COMPONENT_ID", "condition": "mutant", "name": { "str_sp": "suspicious %s" } } ], - "weight": "113 g", + "weight": "313 g", "color": "brown", "spoils_in": "1 day 12 hours", "container": "wrapper", @@ -1092,7 +1093,7 @@ "price": 900, "price_postapoc": 250, "material": [ "flesh", "tomato", "wheat" ], - "volume": "500 ml", + "volume": "300 ml", "flags": [ "EATEN_HOT" ], "fun": 4, "vitamins": [ [ "vitC", 5 ], [ "calcium", 4 ], [ "iron", 5 ] ] diff --git a/data/json/items/comestibles/sandwich.json b/data/json/items/comestibles/sandwich.json index 44f094f043164..9bfec30c96f03 100644 --- a/data/json/items/comestibles/sandwich.json +++ b/data/json/items/comestibles/sandwich.json @@ -3,7 +3,7 @@ "type": "COMESTIBLE", "id": "sandwich_cheese_grilled", "name": { "str": "grilled cheese sandwich", "str_pl": "grilled cheese sandwiches" }, - "weight": "106 g", + "weight": "156 g", "color": "brown", "spoils_in": "1 day 10 hours", "container": "wrapper", @@ -46,7 +46,7 @@ "price_postapoc": 300, "material": [ "flesh", "veggy", "wheat", "milk" ], "primary_material": "processed_food", - "volume": "1500 ml", + "volume": "250 ml", "charges": 2, "fun": 12, "vitamins": [ [ "vitA", 8 ], [ "vitC", 26 ], [ "calcium", 8 ], [ "iron", 49 ], [ "vitB", 389 ] ] @@ -55,18 +55,18 @@ "type": "COMESTIBLE", "id": "sandwich_cucumber", "name": { "str": "cucumber sandwich", "str_pl": "cucumber sandwiches" }, - "weight": "500 g", + "weight": "120 g", "color": "light_green", "spoils_in": "1 day 12 hours", "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "quench": 2, + "quench": 6, "healthy": 1, - "calories": 516, + "calories": 116, "description": "A refreshing cucumber sandwich. Not very filling, but quite tasty.", - "price": 250, - "volume": "1250 ml", + "price": 400, + "volume": "250 ml", "material": [ "wheat", "veggy" ], "flags": [ "EATEN_COLD" ], "fun": 8, @@ -88,7 +88,7 @@ "price_postapoc": 200, "material": [ "milk", "wheat" ], "primary_material": "wheat", - "volume": "500 ml", + "volume": "250 ml", "fun": 8, "vitamins": [ [ "vitA", 18 ], [ "calcium", 50 ], [ "iron", 12 ] ] }, @@ -96,7 +96,7 @@ "type": "COMESTIBLE", "id": "sandwich_jam", "name": { "str": "jam sandwich", "str_pl": "jam sandwiches" }, - "weight": "97 g", + "weight": "140 g", "color": "brown", "spoils_in": "1 day 13 hours", "container": "wrapper", @@ -109,7 +109,7 @@ "price_postapoc": 200, "material": [ "fruit", "wheat" ], "primary_material": "wheat", - "volume": "500 ml", + "volume": "250 ml", "fun": 15, "vitamins": [ [ "vitC", 6 ], [ "calcium", 7 ], [ "iron", 12 ] ] }, @@ -117,26 +117,26 @@ "type": "COMESTIBLE", "id": "sandwich_fairy", "name": { "str_sp": "fairy bread" }, - "weight": "114 g", + "weight": "56 g", "color": "brown", "spoils_in": "3 days", "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "calories": 640, + "calories": 120, "description": "An 'open-faced sandwich' consisting of sliced white bread, a healthy crust-to-crust slathering of butter, and sprinkles. Supposedly a staple of birthday parties in Australia.", "price": 85, "price_postapoc": 300, "material": [ "junk", "wheat" ], "primary_material": "wheat", - "volume": "250 ml", + "volume": "120 ml", "fun": 10 }, { "type": "COMESTIBLE", "id": "sandwich_honey", "name": { "str": "honey sandwich", "str_pl": "honey sandwiches" }, - "weight": "192 g", + "weight": "142 g", "color": "brown", "spoils_in": "10 days", "container": "wrapper", @@ -144,13 +144,13 @@ "symbol": "%", "quench": 1, "healthy": 1, - "calories": 535, + "calories": 328, "description": "A delicious honey sandwich.", "price": 500, "price_postapoc": 300, "material": [ "honey", "wheat" ], "primary_material": "wheat", - "volume": "500 ml", + "volume": "250 ml", "fun": 10, "vitamins": [ [ "calcium", 10 ], [ "iron", 24 ] ] }, @@ -173,7 +173,7 @@ "type": "COMESTIBLE", "id": "sandwich_veggy", "name": { "str": "vegetable sandwich", "str_pl": "vegetable sandwiches" }, - "weight": "289 g", + "weight": "189 g", "color": "light_gray", "spoils_in": "2 days", "container": "wrapper", @@ -181,12 +181,12 @@ "symbol": "%", "quench": 1, "healthy": 1, - "calories": 502, + "calories": 202, "description": "Bread and vegetables, that's it.", "price": 800, "price_postapoc": 250, "material": [ "veggy", "wheat" ], - "volume": "750 ml", + "volume": "250 ml", "flags": [ "EATEN_COLD" ], "fun": 1, "vitamins": [ [ "vitA", 16 ], [ "vitC", 36 ], [ "calcium", 14 ], [ "iron", 28 ] ] @@ -204,7 +204,7 @@ }, { "type": "COMPONENT_ID", "condition": "mutant", "name": { "str_sp": "mutant %s" } } ], - "weight": "233 g", + "weight": "203 g", "color": "light_gray", "spoils_in": "1 day 12 hours", "container": "wrapper", @@ -215,7 +215,7 @@ "price": 900, "price_postapoc": 250, "material": [ "flesh", "wheat" ], - "volume": "1 L", + "volume": "300 ml", "charges": 2, "fun": 2, "vitamins": [ [ "vitC", 8 ], [ "calcium", 6 ], [ "iron", 47 ], [ "vitB", 389 ] ] @@ -230,8 +230,8 @@ "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "quench": -10, - "calories": 658, + "quench": -1, + "calories": 358, "description": "Some peanut butter smothered between two pieces of bread. Not very filling and will stick to the roof of your mouth like glue.", "price": 250, "price_postapoc": 300, @@ -244,13 +244,13 @@ "type": "COMESTIBLE", "id": "sandwich_pbj", "name": { "str": "PB&J sandwich", "str_pl": "PB&J sandwiches" }, - "weight": "102 g", + "weight": "204 g", "color": "brown", "spoils_in": "1 day 12 hours", "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "quench": 8, + "quench": 2, "calories": 378, "description": "A delicious peanut butter and jelly sandwich. It reminds you of the times your mother would make you lunch.", "price": 175, @@ -265,13 +265,13 @@ "type": "COMESTIBLE", "id": "sandwich_pbh", "name": { "str": "PB&H sandwich", "str_pl": "PB&H sandwiches" }, - "weight": "97 g", + "weight": "207 g", "color": "brown", "spoils_in": "1 day 12 hours", "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "quench": 8, + "quench": 2, "calories": 365, "description": "Some damned fool put honey on this peanut butter sandwich, who in their right mind- oh wait this is pretty good.", "price": 175, @@ -286,14 +286,14 @@ "type": "COMESTIBLE", "id": "sandwich_pbm", "name": { "str": "PB&M sandwich", "str_pl": "PB&M sandwiches" }, - "weight": "225 g", + "weight": "205 g", "color": "brown", "spoils_in": "1 day 12 hours", "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "quench": 8, - "calories": 712, + "quench": 2, + "calories": 365, "description": "Who knew you could mix maple syrup and peanut butter to create yet another different sandwich?", "price": 175, "price_postapoc": 175, @@ -317,7 +317,7 @@ "price": 800, "price_postapoc": 250, "material": [ "flesh", "wheat" ], - "volume": "750 ml", + "volume": "250 ml", "fun": 14, "vitamins": [ [ "vitA", 4 ], [ "vitC", 5 ], [ "calcium", 19 ], [ "iron", 17 ] ] }, @@ -325,18 +325,18 @@ "type": "COMESTIBLE", "id": "fish_bagel", "name": { "str": "fish and spinach bagel" }, - "weight": "201 g", + "weight": "251 g", "color": "magenta", "spoils_in": "1 day", "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "calories": 700, + "calories": 476, "description": "A delicious fish bagel with spinach and eggs.", "price": 800, "price_postapoc": 350, "material": [ "flesh", "wheat" ], - "volume": "750 ml", + "volume": "250 ml", "fun": 14, "vitamins": [ [ "vitA", 4 ], [ "vitC", 5 ], [ "calcium", 12 ], [ "iron", 24 ] ] }, @@ -357,10 +357,10 @@ "price_postapoc": 250, "material": [ "flesh", "veggy", "wheat", "tomato" ], "primary_material": "processed_food", - "volume": "1 L", + "volume": "250 ml", "charges": 2, "flags": [ "EATEN_HOT" ], - "fun": 5, + "fun": 8, "vitamins": [ [ "vitA", 8 ], [ "vitC", 10 ], [ "calcium", 7 ], [ "iron", 18 ], [ "vitB", 20 ] ] } ] From 28fa7cb7dff0a969f4c7d687611528a9943b0867 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Tue, 23 Jun 2020 14:34:52 -0700 Subject: [PATCH 078/206] Remove water weight from stomach volume calculator (#41541) When removing the weight from water from the calculated weight of the item, it lead to the calculated effective volume of certain foods, such as sandwiches, being too high, and thus taking up too much space in the stomach. Also, add a debug message for this, enabling easier debugging in the future. --- src/consumption.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/consumption.cpp b/src/consumption.cpp index 48e5ef53c148c..08a2c91a6775b 100644 --- a/src/consumption.cpp +++ b/src/consumption.cpp @@ -1337,8 +1337,7 @@ bool Character::consume_effects( item &food ) units::volume water_vol = ( food.type->comestible->quench > 0 ) ? food.type->comestible->quench * 5_ml : 0_ml; units::volume food_vol = food.base_volume() - water_vol; - units::mass food_weight = ( food.weight() / food.count() ) - units::from_gram( units::to_milliliter( - water_vol ) ); //water is 1 gram per milliliter + units::mass food_weight = ( food.weight() / food.count() ); double ratio = 1.0f; if( units::to_gram( food_weight ) != 0 ) { ratio = std::max( static_cast( food_nutrients.kcal ) / units::to_gram( food_weight ), 1.0 ); @@ -1349,6 +1348,9 @@ bool Character::consume_effects( item &food ) food_vol * ratio, food_nutrients }; + add_msg( m_debug, "Effective volume: %d (solid) %d (liquid)\n multiplier: %g calculated: %d / %d", + units::to_milliliter( ingested.solids ), units::to_milliliter( ingested.water ), ratio, + food_nutrients.kcal, units::to_gram( food_weight ) ); // Maybe move tapeworm to digestion if( has_effect( effect_tapeworm ) ) { ingested.nutr /= 2; From 81890ede04fc0b5b312224ba0a3653519380b839 Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Wed, 17 Jun 2020 21:17:55 -0400 Subject: [PATCH 079/206] Audit MAS .223 --- data/json/items/gun/223.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/data/json/items/gun/223.json b/data/json/items/gun/223.json index d942cdd8fd0de..360c20d8b89ef 100644 --- a/data/json/items/gun/223.json +++ b/data/json/items/gun/223.json @@ -143,10 +143,11 @@ "copy-from": "rifle_auto", "looks_like": "ar15", "type": "GUN", - "name": { "str_sp": "MAS 223" }, + "name": { "str_sp": "MAS .223" }, "description": "A bullpup assault rifle that was used by French armed forces only until recently. While the FAMAS was famous for its high fire rate, the MAS .223 is a semi-auto only variation imported to the US in the late eighties. It retains the integral bipod, though.", - "weight": "3800 g", - "volume": "4162 ml", + "weight": "3610 g", + "volume": "3429 ml", + "longest_side": "759 mm", "price": 2800000, "to_hit": -1, "bashing": 12, From 2e809516a93b49313c93139e0e77f04bcc497e48 Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Wed, 17 Jun 2020 21:36:41 -0400 Subject: [PATCH 080/206] Add longest_side to FS2000 --- data/json/items/gun/223.json | 1 + 1 file changed, 1 insertion(+) diff --git a/data/json/items/gun/223.json b/data/json/items/gun/223.json index 360c20d8b89ef..82db218eaf795 100644 --- a/data/json/items/gun/223.json +++ b/data/json/items/gun/223.json @@ -193,6 +193,7 @@ "description": "A sleek bullpup carbine designed by FN Herstal, complete with an integrated sight accessory rail. The forward ejecting action and ambidextrous controls make firing comfortable for both left and right-handed shooting. The whole rifle is well sealed from mud and dust for reliability, but this makes it incompatible with many aftermarket magazines.", "weight": "3319 g", "volume": "7986 ml", + "longest_side": "740 mm", "price": 125000, "to_hit": -1, "bashing": 12, From d5ea0382a794117335fe4251030ceb740d5643da Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Tue, 23 Jun 2020 17:54:47 -0400 Subject: [PATCH 081/206] Correct longest_length for AR pistol --- data/json/items/gun/223.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/gun/223.json b/data/json/items/gun/223.json index 82db218eaf795..c1a4ae42c967d 100644 --- a/data/json/items/gun/223.json +++ b/data/json/items/gun/223.json @@ -100,7 +100,7 @@ "description": "A compact, 7.5 inch barrel version of the classic AR-15 design, commercially marketed as a home defense weapon.", "weight": "2267 g", "volume": "1758 ml", - "longest_side": "1116 mm", + "longest_side": "584 mm", "price": 91400, "price_postapoc": 3500, "to_hit": -2, From 147e16a6ad4c468c68a0b9e523116e80ae9e58ae Mon Sep 17 00:00:00 2001 From: LaVeyanFiend Date: Tue, 23 Jun 2020 21:22:02 -0400 Subject: [PATCH 082/206] Audit HK416 A5 --- data/json/items/gun/223.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/json/items/gun/223.json b/data/json/items/gun/223.json index c1a4ae42c967d..26a10ce9d8ce7 100644 --- a/data/json/items/gun/223.json +++ b/data/json/items/gun/223.json @@ -235,7 +235,8 @@ "//": "*Current* milspec gear is now ridiculously overpriced, as seen with the M2010 IRL.", "description": "Designed to replace the M4A1, the Heckler and Koch 416A5 features most of the former's strengths, while being considerably more durable.", "weight": "3490 g", - "volume": "1750 ml", + "volume": "4957 ml", + "longest_side": "798 mm", "price": 540000, "price_postapoc": 2250, "to_hit": -1, From a5833a4d4b6577ef47a4502cceebae4b95ed53cd Mon Sep 17 00:00:00 2001 From: dannyisdude <51380936+dannyisdude@users.noreply.github.com> Date: Tue, 23 Jun 2020 22:57:02 -0400 Subject: [PATCH 083/206] Add Wooden Wheel Mount (#41419) --- data/json/items/vehicle/wheel.json | 14 +++++++++++++ data/json/recipes/recipe_vehicle.json | 17 +++++++++++++++ data/json/vehicleparts/wheel.json | 30 +++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) diff --git a/data/json/items/vehicle/wheel.json b/data/json/items/vehicle/wheel.json index 2abfedeef2956..ee20fdd2ed123 100644 --- a/data/json/items/vehicle/wheel.json +++ b/data/json/items/vehicle/wheel.json @@ -1,4 +1,18 @@ [ + { + "id": "wheel_mount_wood", + "type": "GENERIC", + "category": "veh_parts", + "name": { "str": "wooden wheel mount" }, + "description": "A piece of wood with holes suitable for a bike wheel.", + "weight": "100 g", + "volume": "250 ml", + "price": 5, + "price_postapoc": 10, + "material": [ "wood" ], + "symbol": ";", + "color": "brown" + }, { "id": "wheel_mount_light", "type": "GENERIC", diff --git a/data/json/recipes/recipe_vehicle.json b/data/json/recipes/recipe_vehicle.json index bf1e03435106e..e75d6d4b01894 100644 --- a/data/json/recipes/recipe_vehicle.json +++ b/data/json/recipes/recipe_vehicle.json @@ -464,6 +464,23 @@ "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_W", "level": 1 } ], "components": [ [ [ "nail", 4 ] ], [ [ "2x4", 2 ] ], [ [ "stick", 2 ], [ "2x4", 2 ] ], [ [ "towel", 3 ] ] ] }, + { + "type": "recipe", + "result": "wheel_mount_wood", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_VEHICLE", + "skill_used": "mechanics", + "skills_required": [ "fabrication", 4 ], + "difficulty": 2, + "time": "30 m", + "autolearn": true, + "qualities": [ { "id": "DRILL", "level": 2 }, { "id": "HAMMER", "level": 2 }, { "id": "SAW_W", "level": 2 } ], + "components": [ [ [ "nail", 50 ] ], [ [ "2x4", 5 ] ], [ [ "cordage_36", 1 ] ], [ [ "scrap", 5 ], [ "steel_chunk", 4 ] ] ], + "tools": [ + [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ], + [ [ "welder", 30 ], [ "welder_crude", 40 ], [ "toolset", 40 ], [ "forge", 20 ], [ "oxy_torch", 5 ] ] + ] + }, { "type": "recipe", "result": "wheel_mount_light", diff --git a/data/json/vehicleparts/wheel.json b/data/json/vehicleparts/wheel.json index 5719224d213cc..f7d00da9402a0 100644 --- a/data/json/vehicleparts/wheel.json +++ b/data/json/vehicleparts/wheel.json @@ -1,4 +1,34 @@ [ + { + "type": "vehicle_part", + "id": "wheel_mount_wood", + "name": { "str": "wooden wheel mount" }, + "symbol": "-", + "color": "brown", + "location": "axle", + "broken_symbol": "X", + "broken_color": "light_gray", + "damage_modifier": 40, + "folded_volume": 1, + "durability": 80, + "description": "A piece of wood with holes suitable for a bike or motorbike wheel.", + "item": "wheel_mount_wood", + "requirements": { + "install": { "skills": [ [ "mechanics", 2 ] ], "time": "20 m", "using": [ [ "vehicle_nail_install", 1 ] ] }, + "removal": { "skills": [ [ "mechanics", 2 ] ], "time": "20 m", "using": [ [ "vehicle_nail_removal", 1 ] ] }, + "repair": { "skills": [ [ "mechanics", 3 ] ], "time": "10 m", "using": [ [ "adhesive", 2 ] ] } + }, + "flags": [ "WHEEL_MOUNT_LIGHT", "NEEDS_JACKING", "FOLDABLE" ], + "breaks_into": [ { "item": "2x4", "count": [ 2, 5 ] } ], + "damage_reduction": { "all": 8 } + }, + { + "id": "wheel_mount_wood_steerable", + "copy-from": "wheel_mount_wood", + "type": "vehicle_part", + "name": { "str": "wooden wheel mount (steerable)" }, + "extend": { "flags": [ "STEERABLE" ] } + }, { "type": "vehicle_part", "id": "wheel_mount_light", From 53a9316deab416a65c1db061cb83ce3259bd0cd5 Mon Sep 17 00:00:00 2001 From: Menschheit Date: Wed, 24 Jun 2020 05:16:56 +0200 Subject: [PATCH 084/206] Fix gunmods disappearing (#41484) --- src/item_contents.cpp | 24 ++++++++++++++++++------ src/item_contents.h | 2 ++ src/savegame_json.cpp | 2 +- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/item_contents.cpp b/src/item_contents.cpp index 247e52e4b8adc..6a99ea54dc081 100644 --- a/src/item_contents.cpp +++ b/src/item_contents.cpp @@ -190,6 +190,10 @@ item_contents::item_contents( const std::vector &pockets ) contents.push_back( item_pocket( &data ) ); } } +bool item_contents::empty_real() const +{ + return contents.empty(); +} bool item_contents::empty() const { @@ -266,11 +270,17 @@ void item_contents::combine( const item_contents &read_input ) std::advance( current_pocket_iter, pocket_index ); for( const item *it : pocket.all_items_top() ) { - const ret_val inserted = current_pocket_iter->insert_item( *it ); - if( !inserted.success() ) { - uninserted_items.push_back( *it ); - debugmsg( "error: tried to put an item into a pocket that can't fit into it while loading. err: %s", - inserted.str() ); + if( it->is_gunmod() || it->is_toolmod() ){ + if( !insert_item( *it, item_pocket::pocket_type::MOD ).success() ) { + uninserted_items.push_back( *it ); + } + } else { + const ret_val inserted = current_pocket_iter->insert_item( *it ); + if( !inserted.success() ) { + uninserted_items.push_back( *it ); + debugmsg( "error: tried to put an item into a pocket that can't fit into it while loading. err: %s", + inserted.str() ); + } } } @@ -287,7 +297,9 @@ void item_contents::combine( const item_contents &read_input ) } for( const item &uninserted_item : uninserted_items ) { - insert_item( uninserted_item, item_pocket::pocket_type::MIGRATION ); + if( !insert_item( uninserted_item, item_pocket::pocket_type::MOD ).success() ) { + insert_item( uninserted_item, item_pocket::pocket_type::MIGRATION ); + } } } diff --git a/src/item_contents.h b/src/item_contents.h index b6132d70f31c8..6e69350f1c42b 100644 --- a/src/item_contents.h +++ b/src/item_contents.h @@ -46,6 +46,8 @@ class item_contents ret_val can_contain_rigid( const item &it ) const; ret_val can_contain( const item &it ) const; bool can_contain_liquid( bool held_or_ground ) const; + // does not ignore mods + bool empty_real() const; bool empty() const; // ignores all pockets except CONTAINER pockets to check if this contents is empty. bool empty_container() const; diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index d1b59cae7b382..f745337811cf3 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -2411,7 +2411,7 @@ void item::serialize( JsonOut &json ) const { io::JsonObjectOutputArchive archive( json ); const_cast( this )->io( archive ); - if( !contents.empty() ) { + if( !contents.empty_real() ) { json.member( "contents", contents ); } } From b6384a2d15471a23dc5023763d4d73390d6beaea Mon Sep 17 00:00:00 2001 From: Guldane <66560663+Guldane2@users.noreply.github.com> Date: Tue, 23 Jun 2020 23:27:46 -0500 Subject: [PATCH 085/206] Redesigned land prison (#41372) * Update start_locations.json Adjust prison starting location to be aboveground * Update overmap_terrain_public_institutional.json Adding second floor and roof overmaps to prison * Update specials.json Adding 2f and roof to both land prison variants. * Update prison_1.json Updating land prison layout * Update specials.json * Update specials.json Fixing indents * Update prison_1.json Added maint. tunnels, removed guaranteed spawn, adjusted tool spawns. * Update prison_1.json Removed the linter header I accidentally added in. * Update prison_1.json Re-ran linter, adjusted floors in secret lab variant to not have dirt, fixed a gap in the concrete in maint. tunnels. * Update prison_1.json More secure maintenance tunnels and guard towers. Lowered security on door from outside into guard room. * Update prison_1.json Adding some tools lockers to the workshop area. * Update prison_1.json Adding additional fencing per suggestion. * Update prison_1.json Fixing misaligned fence. --- data/json/mapgen/prison_1.json | 528 ++++++++++++------ .../overmap/overmap_special/specials.json | 40 +- .../overmap_terrain_public_institutional.json | 18 + data/json/start_locations.json | 2 +- 4 files changed, 425 insertions(+), 163 deletions(-) diff --git a/data/json/mapgen/prison_1.json b/data/json/mapgen/prison_1.json index 9ceb7d66f377c..409cb6d12af40 100644 --- a/data/json/mapgen/prison_1.json +++ b/data/json/mapgen/prison_1.json @@ -14,77 +14,77 @@ "object": { "fill_ter": "t_dirt", "rows": [ - " ______ ", - " ______|www| ", - " ______wdxdw ", - " ______w,h,w ", - " FFFFFF|w+-| ", - " ______ ", - " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%______%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ", - " % ______ % ", - " % |--| ______ |--| % ", - " % |,,|ffffffffffffffffffffffffffHHHHHHffffffffffffffffffffffffff|,,| % ", - " % |,,| ss______ss |,,| % ", - " % |--| ss______ss |--| % ", - " % F ss______ss F % ", - " % F ss________ss F % ", - " % F |----|------|----| ss__________ss |----|------|----| F % ", - " % F |bb,,B,,,,,,B,,,T| ss____________ss |T,,,B,,,,,,B,,bb| F % ", - " % F |,,,,G,,,,,,G,,,,|ss______________ss|,,,,G,,,,,,G,,,,| F % ", - " % F |T,,,B,,,,,,B,,bb|s________________s|bb,,B,,,,,,B,,,T| F % ", - " % F |----|,,,,,,|----|s________________s|----|,,,,,,|----| F % ", - " % F |bb,,B,,,,,,B,,,T|s________________s|T,,,B,,,,,,B,,bb| F % ", - " % F |,,,,G,,,,,,G,,,,|s________________s|,,,,G,,,,,,G,,,,| F % ", - " % F |T,,,B,,,,,,B,,bb|s________________s|bb,,B,,,,,,B,,,T| F % ", - " % F |----|,,,,,,|----|s________________s|----|,,,,,,|----| F % ", - " % F |T,,,B,,,,,,B,,,T|s________________s|T,,,B,,,,,,B,,,T| F % ", - " % F |,,,,G,,,,,,G,,,,|ss______________ss|,,,,G,,,,,,G,,,,| F % ", - " % F |T,,,B,,,,,,B,,bb| ss____________ss |bb,,B,,,,,,B,,,T| F % ", - " % F |----|,,,,,,|----| ss__________ss |----|,,,,,,|----| F % ", - " % F |bb,,B,,,,,,B,,,T| ssssssssssss |T,,,B,,,,,,B,,bb| F % ", - " % F |,,,,G,,,,,,G,,,,|-ggg-|gg++gg|-ggg-|,,,,G,,,,,,G,,,,| F % ", - " % F |T,,,B,,,,,,B,,bb|,,,,,|,,,,,,|,,,,,|bb,,B,,,,,,B,,,T| F % ", - " % F |----|,,,,,,|----|,,,,,=,,,,,3|,,h,,|----|,,,,,,|----| F % ", - " % F |bb,,B,,,,,,B,,,T|,,,,,|,,,,,3|,ddd,|T,,,B,,,,,,B,,bb| F % ", - " % F |,,,,G,,,,,,G,,,,|h|h|h|3,,,,3|,,,,,|,,,,G,,,,,,G,,,,| F % ", - " % F |T,,,B,,,,,,B,,bb|g|g|g|3,,,,3|,,,,,|bb,,B,,,,,,B,,,T| F % ", - " % F |----|,,,,,,|----|h|h|h|3,,,,,|+-|--|----|,,,,,,|----| F % ", - " % F |bb,,B,,,,,,B,,,T|,,,,,|3,,,,,,,,=,,|T,,,B,,,,,,B,,bb| F % ", - " % F |,,,,G,,,,,,G,,,,|,,,,||--++---|=|,,|,,,,G,,,,,,G,,,,| F % ", - " % F |T,,,B,,,,,,B,,bb|,,,,|,,,,,,,,|l|ST|bb,,B,,,,,,B,,,T| F % ", - " % F |-|-|--|BBGGBB|----|--+-|BBBGGBBB|-|--|----|BBGGBB|--|-|-| F % ", - " % F |,,,G,,,,,,,,,,,,,,B,,,,,,,,,,,,,,,,,,B,,,,,,,,,,,,,,G,,,| F % ", - " % F |,,dB,,,,,,,,,,,,,,G,,,,,,,,,,,,,,,,,,G,,,,,,,,,,,,,,Bd,,| F % ", - " % F |,hdB,,,,,,,,,,,,,,G,,,,,,,,,,,,,,,,,,G,,,,,,,,,,,,,,Bdh,| F % ", - " % F |,,dB,,,,,,,,,,,,,,B,,,,,BBBBBBBB,,,,,B,,,,,,,,,,,,,,Bd,,| F % ", - " % F |-|-|--|BBGGBB|-++-|,,,,,BccxcccB,,,,,|-++-|BBGGBB|--|-|-| F % ", - " % F |T,,,B,,,,,,|,,,,|,,,,,Bc,h,,cB,,,,,|,,,,|,,,,,,B,,,T| F % ", - " % F |,,,,G,,,,,,|,,,,|BBGGBBc,,,,,|--+--|,,,,|,,,,,,G,,,,| F % ", - " % F |bb,,B,,,,,,|,,,<|,,,,,Bc,rr,,G,,,,o|<,,,|,,,,,,B,,bb| F % ", - " % F |----|,,,,,,|----|,,,,,|------|,,,,o|----|,,,,,,|----| F % ", - " % F |T,,,B,,,,,,B,,bb|,,,,,|m,,,,,|,,,,o|bb,,B,,,,,,B,,,T| F % ", - " % F |,,,,G,,,,,,G,,,,|,,,,,|m,,,,,=,,,,,|,,,,G,,,,,,G,,,,| F % ", - " % F |bb,,B,,,,,,B,,,T|,,,,,|m,,bb,|^^| sf f ss f s |^^>| | ", + " | |^^^@ssf3 f ss f sssss@^^^| | ", + " | |lll| sf3 f ss f s |lll| | ", + " | |---| sf3 f ss f s |---| | ", + " | sf3 3333 f ss f s | ", + " | sssssffffffffffHHffffffffffffffffffffffHHff ssssssss | ", + " | s f sssHssssssssssssssssssHssssf s | ", + " | |-@------------| ss |--RRR--------RRR--| ss |------------@-| | ", + " | |,,,,,,,,,,,lll| ss |,,,,,,,,,,,,,,,,,,| ss |lll,,,,,,,,,,,| | ", + " | |,,,,,htth,,,,l| ss |,,htth,,,,,,htth,,| ss |l,,,,htth,,,,,| | ", + " | |,,,,,htth,,,,l| ss R,,htth,,,,,,htth,,R ss |l,,,,htth,,,,,| | ", + " | |,,,,,htth,,,,l| ss R,,htth,,,,,,htth,,R ss |l,,,,htth,,,,,| | ", + " | |,,,,,,,,,,,lll| ss R,,htth,,,,,,htth,,R ss |lll,,,,,,,,,,,| | ", + " | |-G-ggggggg----| ss |,,,,,,,,,,,,,,,,,,| ss |---ggggggg--G-| | ", + " | |,,,,,,,,,,,,,,| ss |,,htth,,,,,,htth,,| ss |,,,,,,,,,,,,,,| | ", + " | R>,,,,,,,,,,,,,+ssss+,,htth,,,,,,htth,,+ssss+,,,,,,,,,,,,,>R | ", + " | R>,,,,,,,,,,,,,+ssss+,,htth,,,,,,htth,,+ssss+,,,,,,,,,,,,,>R | ", + " | |,,,,,,,,,,,,,,| ss |,,htth,,,,,,htth,,| ss |,,,,,,,,,,,,,,| | ", + " | |----|BGGB|----|fHHf|,,,,,,,,,,,,,,,,,,|fHHf|----|BGGB|----| | ", + " | |T,,,B,,,,B,,bb| ss |--ccccc--|--------| ss |T,,,B,,,,B,,bb| | ", + " | R,,,,Z,,,,Z,,,,R ss R,,,,,,,,,|zzzzzzzz| ss R,,,,Z,,,,Z,,,,R | ", + " | |bb,,B,,,,B,,,T| ss |,,ttttt,,|,,,,,,,,| ss |bb,,B,,,,B,,,T| | ", + " | |----|,,,,|----| sss+,,ttttt,,+,,,,,,,,| ss |----|,,,,|----| | ", + " | |T,,,B,,,,B,,bb| ss |,,,,,,,,,|,,,,,,,,| ss |T,,,B,,,,B,,bb| | ", + " | R,,,,Z,,,,Z,,,,R ss RSnnSceeee|zzzzzzzz| ss R,,,,G,,,,Z,,,,R | ", + " | |bb,,B,,,,B,,,T| ss |---------|--------| ss |bb,,B,,,,B,,,T| | ", + " | |----|,,,,|----| ss R,b,b,b,+<|W,W,W,W,R ss |----|,,,,|----| | ", + " | |T,,,B,,,,B,,bb| ss |,b,b,b,|-|,,,,,,,,| ss |T,,,B,,,,B,,bb| | ", + " | R,,,,Z,,,,Z,,,,R sss+,,,,,,,,m|,tttttt,+sss R,,,,Z,,,,Z,,,,R | ", + " | |bb,,B,,,,B,,,T| ss |,b,b,b,,m|,,,,,,,,| ss |bb,,B,,,,B,,,T| | ", + " | |----|,,,,|----| ss R,b,b,b,,m|D,D,D,D,R ss |----|,,,,|----| | ", + " | |T,,,B,,,,B,,bb| ss |---------|--------| ss |T,,,B,,,,B,,bb| | ", + " | R,,,,G,,,,Z,,,,R ss |,LLLLLL,C|o,,ooo,,| ss R,,,,Z,,,,Z,,,,R | ", + " | |bb,,B,,,,B,,,T| sss+,,,,,,,,C|o,,,,,,,+sss |bb,,B,,,,B,,,T| | ", + " | |----|,,,,|----|ffff|,,,CC,,hC|,,,,,,,,|ffff|----|,,,,|----| | ", + " | |T,,,B,,,,B,,bb| R,,,CC,,,C|th,,,,htR |T,,,B,,,,B,,bb| | ", + " | R,,,,Z,,,,G,,,,R R,,,CC,,,C|th,,,,htR R,,,,Z,,,,G,,,,R | ", + " | |bb,,B,,,,B,,,T| |,,,CC,,,C|,,,,,,,,| |bb,,B,,,,B,,,T| | ", + " | |----|,,,,|----| |,,,CC,,hC|th,,,,,,| |----|,,,,|----| | ", + " | |T,,,B,,,,B,,bb| R,,,,,,,,C|th,,,,htR |T,,,B,,,,B,,bb| | ", + " | R,,,,Z,,,,Z,,,,R R,h,,,h,,C|,,,hh,htR R,,,,Z,,,,G,,,,R | ", + " | |bb,,B,,,,B,,,T| |CCCCCCCCC|ooottooo| |bb,,B,,,,B,,,T| | ", + " | |----|----|----| |--RR-RR------RR---| |----|----|----| | ", + " | | ", + " | | ", + " | | ", + " | | ", + " |--------------------------------------------------------------------| ", " ", "########################################################################", "########################################################################", @@ -94,59 +94,59 @@ "########################################################################", "########################################################################", "########################################################################", + "#########################################################|--|###########", + "#########################################################|^>|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "#########################################################|^^|###########", + "########|-------------------------------------------------^^---|########", + "########|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|########", + "########|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^|########", + "########|^^|-----------------------|^^|---------------------|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "########|^^|#######################|^^|#####################|^^|########", + "#######||^^|######################||^^|#####################|^^||#######", + "#######|P^^|######################|P^^|#####################|^^P|#######", + "#######|^^^|######################|^^^|#####################|^^^|#######", + "#######|424|######################|424|#####################|424|#######", + "#######|---|######################|---|#####################|---|#######", + "########################################################################", + "########################################################################", + "########################################################################", + "########################################################################", "########################################################################", "########################################################################", + "##############################|-----------|#############################", + "##############################|m,,,,>,,,,m|#############################", + "##############################|m,,,,,,,,,m|#############################", + "##############################|m,,,,,,,,,m|#############################", + "##############################|m,,,,,,,,,m|#############################", + "##############################|m,,,,,,,,,m|#############################", + "##############################|-----------|#############################", + "########################################################################", "########################################################################", "########################################################################", "########################################################################", "########################################################################", - "#############################################|----|------|----|#########", - "#############################################|T,,,|,,,,,,|,,bb|#########", - "#############################################|,,,,G,,,,,,G,,,,|#########", - "#############################################|bb,,|,,,,,,|,,,T|#########", - "################|----------------------------|----|,,,,,,|----|#########", - "################|,,,,,,,,,,,,,,,,,,,,,,,,,,,,G,,,,,,,,,,,|,,bb|#########", - "################|,,,,,,,,,,,,,,,,,,,,,,,,,,,,G,,,,,,,,,,,G,,,,|#########", - "################|,,|-------------------------|,,,,,,,,,,,|,,,T|#########", - "################|,,|#########################|----|,,,,,,|----|#########", - "################|,,|######|------------------|T,,,|,,,,,,|,,bb|#########", - "################|,,|######|,,,,,,,,,,,,,,,,,,|,,,,G,,,,,,G,,,,|#########", - "################|,,|######|,,,,,,,,,,,,,,,,,,|bb,,|,,,,,,|,,,T|#########", - "################|,,|######|,htth,,,,,,,,htth,|----|,,,,,,|----|#########", - "################|,,|######|,htth,,,,,,,,htth,|T,,,|,,,,,,|,,bb|#########", - "################|,,|######|,htth,,,,,,,,htth,|,,,,G,,,,,,G,,,,|#########", - "################|,,|######|,htth,O,,,,O,htth,|bb,,|,,,,,,|,,,T|#########", - "################|,,|######|,htth,,,,,,,,htth,|----|-|++|-|----|#########", - "###############||++|------|,,,,,,,,,,,,,,,,,,|######|,,|################", - "###############|i,,|,,,,,,|,,,,,,,,,,,,,,,,,,|######|,,|################", - "###############|,,,g,h,h,h|,htth,,,,,,,,htth,|######|,,|################", - "###############|,t,g,h,h,h|,htth,O,,,,O,htth,|######|,,|################", - "###############|,,,g,h,h,h|,htth,,,,,,,,htth,|######|,,|################", - "###############|r,,|,,,,,,|,htth,,,,,,,,htth,|######|,,|################", - "###############|r,,+,,,,,,|,htth,,,,,,,,htth,|######|,,|################", - "#######|-------|---|-|-++-|,,,,,,,,,,,,,,,,,,|----|#|,,|################", - "#######|WWWW,,WWWW,rr|,,,,B,,,,,,,,,,,,,,,,,,B,,,,|-|GG|################", - "#######|,,,,,,,,,,,,,c,,,,G,,,,,,,,,,,,,,,,,,G,,,,,,,,,|################", - "#######|,tt,tt,tt,,,,|,,,,G,,,,,,,,,,,,,,,,,,G,,,,,,,,,|################", - "#######|,,,,,,,,,,,,,+,,,,B,,,,,BBBBBBBB,,,,,B,,,,|-|GG|################", - "#######|DDDD,,DDDD,rr|-GG-|,,,,,BccxcccB,,,,,|-GG-|#|,,|################", - "#######|-------------|,,,,|,,,,,Bc,h,,cB,,,,,|,,,,|#|,,|################", - "#####################|,,,,|cccccBc,,,,,|--+--|,,,,|#|,,|################", - "#####################|,,,>|,,,,,Bc,rr,,G,,,,h|>,,,|#|,,|---|############", - "#####################|-+--|,,,,c|------|,,,,t|----|#|,,+,,,|############", - "#############|-------|,,,,,,,,,n|ccScSc|,,,,t|######|,,|yyy|############", - "#############|z,,,,,,+,,,,,,,,,n|,,,,,,+,,,,h|##|---|++|---|############", - "#############|z,,,,,,|eeeecSSc,c|l,,,,,|>,,,,|##|..........|############", - "#############|z,,z,,z|----------|l,,,,,|-----|##|..........|############", - "#############|z,,z,,z|##########|l,,,,,,,,,,,|##|...|--|...|############", - "#############|z,,z,,z|##########|l,,,,l|=|=|=|##|...|##|...|############", - "#############|z,,z,,z|##########|l,,,,l|T|T|T|##|...|##|...|############", - "#############|-------|##########|------|-|-|-|##|...|##|...|############", - "################################################|...|##|...|############", - "################################################|...|--|...|############", - "################################################|..........|############", - "################################################|..........|############", - "################################################|----------|############", "########################################################################", "########################################################################", "########################################################################", @@ -160,12 +160,17 @@ "########################################################################" ], "palettes": [ "prison_palette" ], - "place_items": [ - { "item": "prison_weapons", "x": [ 11, 12 ], "y": [ 1, 1 ], "chance": 30 }, - { "item": "prison_armor", "x": [ 11, 12 ], "y": [ 1, 1 ], "chance": 50 }, - { "item": "prison_weapons", "x": [ 11, 12 ], "y": [ 1, 1 ], "chance": 30 }, - { "item": "prison_armor", "x": [ 11, 12 ], "y": [ 1, 1 ], "chance": 40 } - ], + "terrain": { + "2": "t_concrete", + "4": "t_concrete", + "@": "t_door_metal_pickable", + "R": "t_window_bars", + "^": "t_concrete", + "P": "t_concrete", + "Y": "t_pavement_y", + "Z": "t_door_bar_o" + }, + "furniture": { "X": "f_exercise", "C": "f_counter", "P": "f_rack", "2": "f_home_furnace", "4": "f_water_heater", "L": "f_locker" }, "items": { "l": [ { "item": "prison_weapons", "chance": 30 }, @@ -173,25 +178,231 @@ { "item": "cop_torso", "chance": 20 }, { "item": "cop_pants", "chance": 20 }, { "item": "cop_shoes", "chance": 20 } - ] + ], + "C": [ { "item": "hand_tools", "chance": 40 } ], + "L": [ { "item": "hand_tools", "chance": 40 } ], + "P": [ { "item": "tools_plumbing", "chance": 100, "repeat": [ 1, 3 ] } ] + }, + "liquids": { "4": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, + "place_monsters": [ + { "monster": "GROUP_ZOMBIE_PRISON", "x": [ 15, 23 ], "y": [ 20, 23 ], "density": 0.3 }, + { "monster": "GROUP_ZOMBIE_PRISON", "x": [ 14, 15 ], "y": [ 50, 55 ], "density": 0.3 }, + { "monster": "GROUP_ZOMBIE_PRISON", "x": [ 58, 59 ], "y": [ 50, 55 ], "density": 0.3 }, + { "monster": "GROUP_ZOMBIE_PRISON", "x": [ 29, 44 ], "y": [ 32, 40 ], "density": 0.3 }, + { "monster": "GROUP_ZOMBIE_PRISON", "x": [ 29, 35 ], "y": [ 56, 63 ], "density": 0.3 }, + { "monster": "GROUP_ZOMBIE_PRISON", "x": [ 39, 44 ], "y": [ 87, 95 ], "density": 0.3 }, + { "monster": "GROUP_ZOMBIE_COP", "x": [ 54, 59 ], "y": [ 10, 15 ], "density": 0.2 }, + { "monster": "GROUP_ZOMBIE_COP", "x": [ 53, 64 ], "y": [ 32, 34 ], "density": 0.2 }, + { "monster": "GROUP_ZOMBIE_COP", "x": [ 9, 20 ], "y": [ 32, 34 ], "density": 0.2 } + ], + "place_monster": [ + { "monster": "mon_zombie_technician", "x": [ 8, 10 ], "y": [ 110, 115 ], "chance": 100 }, + { "monster": "mon_zombie_technician", "x": [ 33, 35 ], "y": [ 110, 115 ], "chance": 100 }, + { "monster": "mon_zombie_technician", "x": [ 57, 59 ], "y": [ 110, 115 ], "chance": 100 } + ], + "place_vehicles": [ { "vehicle": "bus_prison", "x": 8, "y": 12, "chance": 25, "rotation": 180 } ] + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": [ + [ "prison_1_2f_3", "prison_1_2f_2", "prison_1_2f_1" ], + [ "prison_1_2f_6", "prison_1_2f_5", "prison_1_2f_4" ], + [ "prison_1_2f_9", "prison_1_2f_8", "prison_1_2f_7" ] + ], + "weight": 250, + "object": { + "rows": [ + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5444444444444444444444444444445A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1.............................1A", + "A|--------------------------------------------------------------------|A", + "A|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|A", + "A|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|A", + "A|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|A", + "A|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|A", + "A|AAAA|^^^|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|^^^|AAAA|A", + "A|AAAA^<^^^AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA^^^<^AAAA|A", + "A|AAAA^^^^^AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA^^^^^AAAA|A", + "A|AAAA^^^^^AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA^^^^^AAAA|A", + "A|AAAA|^^^|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|^^^|AAAA|A", + "A|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|A", + "A|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|A", + "A|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA|A", + "A|AAAA|--------------|AAAA54444444444444444445AAAA|--------------|AAAA|A", + "A|AAAA|^6^6^6^^6^6^6^|AAAA1..................1AAAA|^6^6^6^^6^6^6^|AAAA|A", + "A|AAAA|^^^^^^^^^^^^^^|AAAA1..................1AAAA|^^^^^^^^^^^^^^|AAAA|A", + "A|AAAA|^^^^^^^^^^^^^^|AAAA1..................1AAAA|^^^^^^^^^^^^^^|AAAA|A", + "A|AAAA|^^^^^^^^^^^^^^|AAAA1..................1AAAA|^^^^^^^^^^^^^^|AAAA|A", + "A|AAAA|^S^S^^^^^^S^S^|AAAA1..................1AAAA|^S^S^^^^^^S^S^|AAAA|A", + "A|AAAA|------^^------|AAAA1..................1AAAA|------^^------|AAAA|A", + "A|AAAA|,,,,,,,,,,,,,,|AAAA1..................1AAAA|,,,,,,,,,,,,,,|AAAA|A", + "A|AAAAR<,,,,,,,,,,,,,RAAAA1..................1AAAAR,,,,,,,,,,,,,,,,,|##|..........|############", - "#############|z,,z,,z|----------|l,,,,,|-----|##|..........|############", - "#############|z,,z,,z|##########|l,,,,,,,,,,,|##|...|--|...|############", - "#############|z,,z,,z|##########|l,,,,l|=|=|=|##|...|##|...|############", - "#############|z,,z,,z|##########|l,,,,l|T|T|T|##|...|##|...|############", - "#############|-------|##########|-6LL--|-|-|-|##|...|##|...|############", - "##################################|,,|##########|...|##|...|############", - "##############--------------------|,,|##########|...|--|...|############", - "##############|R,R|b,T|b,T|b,T|b,T|,7|##########|..........|############", - "#######--------R,R|b,,|b,,|b,,|b,,|,,|##########|..........|############", - "#######|,,,,,,,,,R|,Z,|,Z,|,Z,|,Z,|,,|##########|----------|############", + "########################################################################", + "################################|------|################################", + "################################|,,>>,,|################################", + "################################|,,,,,,|################################", + "################################|,,,,,,|################################", + "################################|,,,,,,|################################", + "################################|,,,,,,|################################", + "################################|-6LL--|################################", + "##################################|,,|##################################", + "##############--------------------|,,|##################################", + "##############|R,R|b,T|b,T|b,T|b,T|,,|##################################", + "#######--------R,R|b,,|b,,|b,,|b,,|,,|##################################", + "#######|,,,,,,,,,R|,Z,|,Z,|,Z,|,Z,|,,|##################################", "#######|,,,,,,,,,,|,,,|,,,|,,,|,,,|,,|##################################", "#######|,,gggggg,,|BGB|BGB|BGB|BGB|,,|##################################", "#######|,,g,,,,g,,|,,,,,,,,,,,,,,,|,,|##################################", @@ -235,7 +446,9 @@ "6": "t_card_science", "7": "t_floor", "/": "t_floor", - "?": "t_floor" + "?": "t_floor", + "C": "t_floor", + "Z": "t_floor" }, "items": { "l": [ @@ -251,12 +464,7 @@ { "item": "mut_lab", "chance": 5 } ] }, - "place_monsters": [ { "monster": "GROUP_ZOMBIE_COP", "x": [ 35, 38 ], "y": [ 2, 7 ], "density": 0.2 } ], - "monster": { - "7": { "monster": "mon_turret_riot" }, - "Z": { "monster": "mon_zombie_prisoner" }, - "C": { "monster": "mon_broken_cyborg" } - } + "monster": { "Z": { "monster": "mon_zombie_prisoner" }, "C": { "monster": "mon_broken_cyborg" } } } }, { diff --git a/data/json/overmap/overmap_special/specials.json b/data/json/overmap/overmap_special/specials.json index 479b5e287cf4c..1661462bcfcc2 100644 --- a/data/json/overmap/overmap_special/specials.json +++ b/data/json/overmap/overmap_special/specials.json @@ -869,7 +869,25 @@ { "point": [ 1, 1, -1 ], "overmap": "prison_1_b_4_north" }, { "point": [ -1, 2, -1 ], "overmap": "prison_1_b_9_north" }, { "point": [ 0, 2, -1 ], "overmap": "prison_1_b_8_north" }, - { "point": [ 1, 2, -1 ], "overmap": "prison_1_b_7_north" } + { "point": [ 1, 2, -1 ], "overmap": "prison_1_b_7_north" }, + { "point": [ -1, 0, 1 ], "overmap": "prison_1_2f_3_north" }, + { "point": [ 0, 0, 1 ], "overmap": "prison_1_2f_2_north" }, + { "point": [ 1, 0, 1 ], "overmap": "prison_1_2f_1_north" }, + { "point": [ -1, 1, 1 ], "overmap": "prison_1_2f_6_north" }, + { "point": [ 0, 1, 1 ], "overmap": "prison_1_2f_5_north" }, + { "point": [ 1, 1, 1 ], "overmap": "prison_1_2f_4_north" }, + { "point": [ -1, 2, 1 ], "overmap": "prison_1_2f_9_north" }, + { "point": [ 0, 2, 1 ], "overmap": "prison_1_2f_8_north" }, + { "point": [ 1, 2, 1 ], "overmap": "prison_1_2f_7_north" }, + { "point": [ -1, 0, 2 ], "overmap": "prison_1_3f_3_north" }, + { "point": [ 0, 0, 2 ], "overmap": "prison_1_3f_2_north" }, + { "point": [ 1, 0, 2 ], "overmap": "prison_1_3f_1_north" }, + { "point": [ -1, 1, 2 ], "overmap": "prison_1_3f_6_north" }, + { "point": [ 0, 1, 2 ], "overmap": "prison_1_3f_5_north" }, + { "point": [ 1, 1, 2 ], "overmap": "prison_1_3f_4_north" }, + { "point": [ -1, 2, 2 ], "overmap": "prison_1_3f_9_north" }, + { "point": [ 0, 2, 2 ], "overmap": "prison_1_3f_8_north" }, + { "point": [ 1, 2, 2 ], "overmap": "prison_1_3f_7_north" } ], "connections": [ { "point": [ 0, -1, 0 ] } ], "locations": [ "land", "swamp" ], @@ -961,7 +979,25 @@ { "point": [ 1, 1, -1 ], "overmap": "prison_1_b_4_north" }, { "point": [ -1, 2, -1 ], "overmap": "prison_1_b_9_hidden_north" }, { "point": [ 0, 2, -1 ], "overmap": "prison_1_b_8_hidden_lab_stairs_north" }, - { "point": [ 1, 2, -1 ], "overmap": "prison_1_b_7_hidden_north" } + { "point": [ 1, 2, -1 ], "overmap": "prison_1_b_7_hidden_north" }, + { "point": [ -1, 0, 1 ], "overmap": "prison_1_2f_3_north" }, + { "point": [ 0, 0, 1 ], "overmap": "prison_1_2f_2_north" }, + { "point": [ 1, 0, 1 ], "overmap": "prison_1_2f_1_north" }, + { "point": [ -1, 1, 1 ], "overmap": "prison_1_2f_6_north" }, + { "point": [ 0, 1, 1 ], "overmap": "prison_1_2f_5_north" }, + { "point": [ 1, 1, 1 ], "overmap": "prison_1_2f_4_north" }, + { "point": [ -1, 2, 1 ], "overmap": "prison_1_2f_9_north" }, + { "point": [ 0, 2, 1 ], "overmap": "prison_1_2f_8_north" }, + { "point": [ 1, 2, 1 ], "overmap": "prison_1_2f_7_north" }, + { "point": [ -1, 0, 2 ], "overmap": "prison_1_3f_3_north" }, + { "point": [ 0, 0, 2 ], "overmap": "prison_1_3f_2_north" }, + { "point": [ 1, 0, 2 ], "overmap": "prison_1_3f_1_north" }, + { "point": [ -1, 1, 2 ], "overmap": "prison_1_3f_6_north" }, + { "point": [ 0, 1, 2 ], "overmap": "prison_1_3f_5_north" }, + { "point": [ 1, 1, 2 ], "overmap": "prison_1_3f_4_north" }, + { "point": [ -1, 2, 2 ], "overmap": "prison_1_3f_9_north" }, + { "point": [ 0, 2, 2 ], "overmap": "prison_1_3f_8_north" }, + { "point": [ 1, 2, 2 ], "overmap": "prison_1_3f_7_north" } ], "connections": [ { "point": [ 0, -1, 0 ] } ], "locations": [ "land", "swamp" ], diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_public_institutional.json b/data/json/overmap/overmap_terrain/overmap_terrain_public_institutional.json index 609cdb67d480c..0ad3993e462e1 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_public_institutional.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_public_institutional.json @@ -206,6 +206,24 @@ "prison_1_b_7", "prison_1_b_8", "prison_1_b_9", + "prison_1_2f_1", + "prison_1_2f_2", + "prison_1_2f_3", + "prison_1_2f_4", + "prison_1_2f_5", + "prison_1_2f_6", + "prison_1_2f_7", + "prison_1_2f_8", + "prison_1_2f_9", + "prison_1_3f_1", + "prison_1_3f_2", + "prison_1_3f_3", + "prison_1_3f_4", + "prison_1_3f_5", + "prison_1_3f_6", + "prison_1_3f_7", + "prison_1_3f_8", + "prison_1_3f_9", "prison_1_b_7_hidden", "prison_1_b_8_hidden_lab_stairs", "prison_1_b_9_hidden", diff --git a/data/json/start_locations.json b/data/json/start_locations.json index 920bd7f8d173e..673ecc79b677a 100644 --- a/data/json/start_locations.json +++ b/data/json/start_locations.json @@ -305,7 +305,7 @@ "type": "start_location", "id": "sloc_prison", "name": "Prison", - "terrain": [ "prison_1_b_5" ] + "terrain": [ "prison_1_5" ] }, { "type": "start_location", From 3a8034a9b9e5658b291761f56f5237ec81d8ab55 Mon Sep 17 00:00:00 2001 From: KorGgenT Date: Wed, 24 Jun 2020 04:08:19 -0400 Subject: [PATCH 086/206] fix deleting items on insert --- src/game_inventory.cpp | 2 +- src/inventory_ui.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game_inventory.cpp b/src/game_inventory.cpp index 6fd14fd68d518..b0ace9e77847a 100644 --- a/src/game_inventory.cpp +++ b/src/game_inventory.cpp @@ -1297,7 +1297,7 @@ void game_menus::inv::insert_items( avatar &you, item_location &holster ) item &it = *holstered_item.first; bool success = false; if( !it.count_by_charges() || it.count() == holstered_item.second ) { - if( holster->can_contain( it ) ) { + if( holster->contents.can_contain( it ).success() ) { holster->put_in( it, item_pocket::pocket_type::CONTAINER ); holstered_item.first.remove_item(); success = true; diff --git a/src/inventory_ui.h b/src/inventory_ui.h index c7ca68d1c1712..70c2808689d1d 100644 --- a/src/inventory_ui.h +++ b/src/inventory_ui.h @@ -233,7 +233,7 @@ class inventory_holster_preset : public inventory_selector_preset /** Does this entry satisfy the basic preset conditions? */ bool is_shown( const item_location &contained ) const override { - return holster->can_contain( *contained ) && !holster->has_item( *contained ); + return holster->contents.can_contain( *contained ).success() && !holster->has_item( *contained ); } private: // this is the item that we are putting something into From 5e09a190ba32fc9ac62687d36d55394340cfd1d5 Mon Sep 17 00:00:00 2001 From: KorGgenT Date: Wed, 24 Jun 2020 05:05:38 -0400 Subject: [PATCH 087/206] fix astyle regression --- src/item_contents.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/item_contents.cpp b/src/item_contents.cpp index 6a99ea54dc081..f0b3fab3538f6 100644 --- a/src/item_contents.cpp +++ b/src/item_contents.cpp @@ -191,7 +191,7 @@ item_contents::item_contents( const std::vector &pockets ) } } bool item_contents::empty_real() const -{ +{ return contents.empty(); } @@ -270,7 +270,7 @@ void item_contents::combine( const item_contents &read_input ) std::advance( current_pocket_iter, pocket_index ); for( const item *it : pocket.all_items_top() ) { - if( it->is_gunmod() || it->is_toolmod() ){ + if( it->is_gunmod() || it->is_toolmod() ) { if( !insert_item( *it, item_pocket::pocket_type::MOD ).success() ) { uninserted_items.push_back( *it ); } From cd276f03ed8cc40bf75295891738e30bdef63723 Mon Sep 17 00:00:00 2001 From: Qrox Date: Wed, 24 Jun 2020 19:19:18 +0800 Subject: [PATCH 088/206] Open zone manager on the same side as sidebar --- src/game.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game.cpp b/src/game.cpp index 8ef03519de322..9abc56945f598 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -6484,7 +6484,7 @@ void game::zones_manager() ui.position( point_zero, point_zero ); return; } - offsetX = get_option( "SIDEBAR_POSITION" ) == "left" ? + offsetX = get_option( "SIDEBAR_POSITION" ) != "left" ? TERMX - width : 0; const int w_zone_height = TERMY - zone_ui_height; max_rows = w_zone_height - 2; From b3e5c40e4172564d0415b11c3ccdad1e77236a10 Mon Sep 17 00:00:00 2001 From: Brian-Otten <47374323+Brian-Otten@users.noreply.github.com> Date: Wed, 24 Jun 2020 16:26:17 +0200 Subject: [PATCH 089/206] Update s_gun.json Higher chance to find hearing protection at gun range. --- data/json/mapgen/s_gun.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/mapgen/s_gun.json b/data/json/mapgen/s_gun.json index 04d6a018200e5..9450d5c3f17b3 100644 --- a/data/json/mapgen/s_gun.json +++ b/data/json/mapgen/s_gun.json @@ -123,8 +123,8 @@ "ammo": 25, "magazine": 100 }, - { "item": "ear_plugs", "x": 2, "y": 14, "chance": 50, "repeat": 2 }, - { "item": "powered_earmuffs", "x": 2, "y": 14, "chance": 30 } + { "item": "ear_plugs", "x": 2, "y": 14, "chance": 50, "repeat": 12 }, + { "item": "powered_earmuffs", "x": 2, "y": 14, "chance": 30, "repeat": 3 } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 0, 0 ], "y": [ 23, 23 ], "chance": 2, "repeat": [ 2, 3 ] } ] } From 6e970427baa5c70c5d78c49fa800ae7aab279de2 Mon Sep 17 00:00:00 2001 From: Curtis Merrill Date: Wed, 24 Jun 2020 12:20:40 -0400 Subject: [PATCH 090/206] make comestible test clearer (#41554) * make comestible test clearer * Update comestible_test.cpp --- tests/comestible_test.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/comestible_test.cpp b/tests/comestible_test.cpp index c092c10744cee..06467d4e61fbf 100644 --- a/tests/comestible_test.cpp +++ b/tests/comestible_test.cpp @@ -152,9 +152,11 @@ TEST_CASE( "recipe_permutations", "[recipe]" ) CHECK( mystats.calories.avg() <= upper_bound ); if( mystats.calories.min() < 0 || lower_bound > mystats.calories.avg() || mystats.calories.avg() > upper_bound ) { - printf( "\n\nRecipeID: %s, Lower Bound: %f, Average: %f, Upper Bound: %f\n\n", - recipe_pair.first.c_str(), lower_bound, mystats.calories.avg(), - upper_bound ); + printf( "\n\nRecipeID: %s, default is %d Calories,\nCurrent recipe range: %d-%d, Average %.0f" + "\nAverage recipe Calories must fall within this range, derived from default Calories: %.0f-%.0f\n\n", + recipe_pair.first.c_str(), default_calories, + mystats.calories.min(), mystats.calories.max(), mystats.calories.avg(), + lower_bound, upper_bound ); } } } From 50bbc399d29557d504206197ef958e8f0e95cc45 Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Wed, 24 Jun 2020 09:54:29 -0700 Subject: [PATCH 091/206] Fix exertion level not resetting during activities If the player started running, then stopped and started a separate activity before the activity level from the running reset, they would be counted as running for the duration of the activity, even if it was a less intense activity (such as waiting, which is NO_EXERCISE). Instead of checking if the player is not in an activity before resetting the activity level, decrease the activity level to the the activity level of the activity. If the player is not in an activity, keep the old behaviour of completely resetting the activity level. Also, move the update to happen every 5 minutes - with the increased costs of various levels of exertion, it's more important to check the activity level more often. --- src/activity_type.h | 3 +++ src/character.cpp | 9 ++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/activity_type.h b/src/activity_type.h index b38b8e557f5e9..45dc96096d7f9 100644 --- a/src/activity_type.h +++ b/src/activity_type.h @@ -79,6 +79,9 @@ class activity_type bool valid_auto_needs() const { return auto_needs; } + float exertion_level() const { + return activity_level; + } void call_do_turn( player_activity *, player * ) const; /** Returns whether it had a finish function or not */ bool call_finish( player_activity *, player * ) const; diff --git a/src/character.cpp b/src/character.cpp index 2f8cbf8ee0838..ba929106fe9bd 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -12,6 +12,7 @@ #include "action.h" #include "activity_handlers.h" +#include "activity_type.h" #include "anatomy.h" #include "avatar.h" #include "bionics.h" @@ -4699,6 +4700,11 @@ void Character::update_body( const time_point &from, const time_point &to ) } const int five_mins = ticks_between( from, to, 5_minutes ); if( five_mins > 0 ) { + if( !activity.is_null() ) { + decrease_activity_level( activity.id()->exertion_level() ); + } else { + reset_activity_level(); + } check_needs_extremes(); update_needs( five_mins ); regen( five_mins ); @@ -4712,9 +4718,6 @@ void Character::update_body( const time_point &from, const time_point &to ) const int thirty_mins = ticks_between( from, to, 30_minutes ); if( thirty_mins > 0 ) { - if( activity.is_null() ) { - reset_activity_level(); - } // Radiation kills health even at low doses update_health( has_trait( trait_RADIOGENIC ) ? 0 : -get_rad() ); get_sick(); From 29c2c4c7a5071eb63c5fde5808198cfb9a8069a3 Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Wed, 24 Jun 2020 10:01:46 -0700 Subject: [PATCH 092/206] Update storage.json Update and balance storage.json values with real world measurements --- data/json/items/armor/storage.json | 664 ++++++++++++++++++++++++----- 1 file changed, 551 insertions(+), 113 deletions(-) diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index c1ef4398cb60b..f739417356cb9 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -15,8 +15,16 @@ "covers": [ "TORSO" ], "coverage": 30, "encumbrance": 2, - "max_encumbrance": 15, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "15 L", "max_contains_weight": "30 kg", "moves": 300 } ], + "max_encumbrance": 25, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "25 L", + "max_contains_weight": "30 kg", + "max_item_length": "40 cm", + "moves": 300 + } + ], "warmth": 6, "material_thickness": 2, "flags": [ "BELTED" ] @@ -41,23 +49,47 @@ "warmth": 10, "material_thickness": 2, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "50 L", "max_contains_weight": "50 kg", "moves": 450 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "4 L", "max_contains_weight": "8 kg", "moves": 450 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "2 L", "max_contains_weight": "2 kg", "moves": 450 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "2 L", "max_contains_weight": "2 kg", "moves": 450 }, { "pocket_type": "CONTAINER", - "min_item_volume": "250 ml", - "max_contains_volume": "250 ml", + "max_contains_volume": "50 L", + "max_contains_weight": "50 kg", + "max_item_length": "60 cm", + "moves": 450 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "4 L", + "max_contains_weight": "8 kg", + "max_item_length": "35 cm", + "moves": 450 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2 L", "max_contains_weight": "2 kg", + "max_item_length": "25 cm", + "moves": 450 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2 L", + "max_contains_weight": "2 kg", + "max_item_length": "25 cm", + "moves": 450 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "750 ml", + "max_contains_weight": "2 kg", + "max_item_length": "70 cm", "moves": 3, "flag_restriction": [ "SHEATH_KNIFE", "SHEATH_SWORD" ] }, { "pocket_type": "CONTAINER", - "min_item_volume": "250 ml", - "max_contains_volume": "250 ml", + "max_contains_volume": "750 ml", "max_contains_weight": "2 kg", + "max_item_length": "70 cm", "moves": 3, "flag_restriction": [ "SHEATH_KNIFE", "SHEATH_SWORD" ] } @@ -82,8 +114,16 @@ "covers": [ "TORSO", "LEGS" ], "coverage": 75, "encumbrance": 10, - "max_encumbrance": 40, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "80 L", "max_contains_weight": "40 kg", "moves": 300 } ], + "max_encumbrance": 60, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "80 L", + "max_contains_weight": "40 kg", + "max_item_length": "96 cm", + "moves": 300 + } + ], "warmth": 5, "material_thickness": 2, "flags": [ "BELTED" ] @@ -104,8 +144,16 @@ "covers": [ "TORSO" ], "coverage": 30, "encumbrance": 4, - "max_encumbrance": 17, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "15 L", "max_contains_weight": "30 kg", "moves": 300 } ], + "max_encumbrance": 26, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "25 L", + "max_contains_weight": "30 kg", + "max_item_length": "40 cm", + "moves": 300 + } + ], "warmth": 9, "material_thickness": 3, "flags": [ "BELTED", "WATER_FRIENDLY" ] @@ -128,10 +176,34 @@ "encumbrance": 10, "max_encumbrance": 55, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "55 L", "max_contains_weight": "70 kg", "moves": 300 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "10 kg", "moves": 200 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "moves": 120 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "moves": 120 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "55 L", + "max_contains_weight": "70 kg", + "max_item_length": "70 cm", + "moves": 300 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "10 kg", + "max_item_length": "40 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "3 kg", + "max_item_length": "30 cm", + "moves": 120 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "3 kg", + "max_item_length": "30 cm", + "moves": 120 + } ], "warmth": 10, "material_thickness": 2, @@ -143,7 +215,7 @@ "name": { "str": "laundry basket" }, "description": "A plastic basket meant for storing and hauling clothing.", "weight": "680 g", - "volume": "25 L", + "volume": "50 L", "price": 75, "price_postapoc": 10, "to_hit": -2, @@ -159,8 +231,9 @@ { "pocket_type": "CONTAINER", "rigid": true, - "max_contains_volume": "25 L", + "max_contains_volume": "50 L", "max_contains_weight": "50 kg", + "max_item_length": "80 cm", "moves": 300 } ], @@ -185,10 +258,34 @@ "encumbrance": 16, "max_encumbrance": 65, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "70 L", "max_contains_weight": "70 kg", "moves": 300 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "10 kg", "moves": 200 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "moves": 120 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "moves": 120 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "70 L", + "max_contains_weight": "70 kg", + "max_item_length": "75 cm", + "moves": 300 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "10 kg", + "max_item_length": "40 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "3 kg", + "max_item_length": "30 cm", + "moves": 120 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "3 kg", + "max_item_length": "30 cm", + "moves": 120 + } ], "warmth": 10, "material_thickness": 2, @@ -230,7 +327,15 @@ "material": [ "wood", "cotton" ], "volume": "15 L", "price_postapoc": 50, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "15 L", "max_contains_weight": "60 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "15 L", + "max_contains_weight": "60 kg", + "max_item_length": "50 cm", + "moves": 300 + } + ], "covers": [ "TORSO" ], "coverage": 40, "encumbrance": 15, @@ -266,6 +371,7 @@ "rigid": true, "max_contains_volume": "15 L", "max_contains_weight": "30 kg", + "max_item_length": "50 cm", "moves": 200 } ], @@ -279,7 +385,7 @@ "name": { "str": "violin case" }, "description": "Useful to carry your precious musical instrument around protected from any harm.", "weight": "2800 g", - "volume": "5 L", + "volume": "10 L", "price": 24000, "price_postapoc": 50, "to_hit": -4, @@ -290,8 +396,17 @@ "color": "dark_gray", "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 10, - "encumbrance": 50, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "3500 ml", "max_contains_weight": "8 kg", "moves": 80 } ], + "encumbrance": 30, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "rigid": true, + "max_contains_volume": "10 L", + "max_contains_weight": "20 kg", + "max_item_length": "50 cm", + "moves": 200 + } + ], "material_thickness": 5, "flags": [ "FANCY", "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, @@ -315,7 +430,15 @@ "material_thickness": 1, "encumbrance": 2, "max_encumbrance": 18, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "24 L", "max_contains_weight": "32 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "24 L", + "max_contains_weight": "32 kg", + "max_item_length": "60 cm", + "moves": 300 + } + ], "warmth": 5, "flags": [ "BELTED", "OVERSIZE", "STURDY" ] }, @@ -336,8 +459,16 @@ "covers": [ "TORSO" ], "coverage": 40, "encumbrance": 2, - "max_encumbrance": 12, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "12 L", "max_contains_weight": "24 kg", "moves": 300 } ], + "max_encumbrance": 30, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "30 L", + "max_contains_weight": "24 kg", + "max_item_length": "70 cm", + "moves": 300 + } + ], "material_thickness": 1, "flags": [ "WATER_FRIENDLY", "BELTED" ] }, @@ -358,7 +489,15 @@ "coverage": 50, "encumbrance": 5, "max_encumbrance": 35, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "35 L", "max_contains_weight": "50 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "35 L", + "max_contains_weight": "50 kg", + "max_item_length": "55 cm", + "moves": 300 + } + ], "warmth": 10, "material_thickness": 2, "flags": [ "BELTED", "WATER_FRIENDLY" ] @@ -382,7 +521,15 @@ "coverage": 10, "encumbrance": 1, "max_encumbrance": 3, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "2 L", "max_contains_weight": "4 kg", "moves": 80 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2 L", + "max_contains_weight": "4 kg", + "max_item_length": "20 cm", + "moves": 80 + } + ], "material_thickness": 1, "flags": [ "WAIST", "WATER_FRIENDLY" ] }, @@ -393,7 +540,7 @@ "name": { "str": "fanny pack" }, "description": "Provides a bit of extra storage, with minimal encumbrance.", "weight": "272 g", - "volume": "250 ml", + "volume": "500 ml", "price": 3500, "to_hit": 2, "bashing": 1, @@ -404,8 +551,16 @@ "covers": [ "TORSO" ], "coverage": 10, "encumbrance": 1, - "max_encumbrance": 2, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "1500 ml", "max_contains_weight": "5 kg", "moves": 80 } ], + "max_encumbrance": 3, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2500 ml", + "max_contains_weight": "5 kg", + "max_item_length": "25 cm", + "moves": 80 + } + ], "material_thickness": 1, "flags": [ "WAIST", "WATER_FRIENDLY" ] }, @@ -425,24 +580,24 @@ "color": "green", "covers": [ "TORSO" ], "coverage": 35, - "encumbrance": 25, - "longest_side": "900 cm", + "encumbrance": 2, + "max_encumbrance": 15, "//": "The main section of the golf bag actually assumes things will stick out of it, but specifically contains them, so some extra wiggle room was added.", "pocket_data": [ { "pocket_type": "CONTAINER", - "max_contains_volume": "42 L", + "max_contains_volume": "40 L", "max_contains_weight": "200 kg", "moves": 300, "rigid": true, - "max_item_length": "120 cm" + "max_item_length": "150 cm" }, - { "max_contains_volume": "90 ml", "max_contains_weight": "750 g", "moves": 200 }, - { "max_contains_volume": "90 ml", "max_contains_weight": "750 g", "moves": 200 }, - { "max_contains_volume": "1350 ml", "max_contains_weight": "4 kg", "moves": 300 }, - { "max_contains_volume": "675 ml", "max_contains_weight": "2 kg", "moves": 300 }, - { "max_contains_volume": "675 ml", "max_contains_weight": "2 kg", "moves": 300 }, - { "max_contains_volume": "500 ml", "max_contains_weight": "300 g", "moves": 100 } + { "max_contains_volume": "90 ml", "max_contains_weight": "750 g", "max_item_length": "10 cm", "moves": 200 }, + { "max_contains_volume": "90 ml", "max_contains_weight": "750 g", "max_item_length": "10 cm", "moves": 200 }, + { "max_contains_volume": "1350 ml", "max_contains_weight": "4 kg", "max_item_length": "25 cm", "moves": 300 }, + { "max_contains_volume": "675 ml", "max_contains_weight": "2 kg", "max_item_length": "20 cm", "moves": 300 }, + { "max_contains_volume": "675 ml", "max_contains_weight": "2 kg", "max_item_length": "20 cm", "moves": 300 }, + { "max_contains_volume": "500 ml", "max_contains_weight": "300 g", "max_item_length": "15 cm", "moves": 100 } ], "warmth": 5, "material_thickness": 3, @@ -461,7 +616,15 @@ "color": "pink", "proportional": { "weight": 6.0, "volume": 6.0, "price": 6.0, "quench": 6.0, "calories": 6.0, "healthy": 6.0, "fun": 6.0 }, "armor_data": { "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, "encumbrance": 100, "material_thickness": 1 }, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "15 L", "max_contains_weight": "30 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "15 L", + "max_contains_weight": "30 kg", + "max_item_length": "50 cm", + "moves": 300 + } + ], "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, { @@ -477,7 +640,15 @@ "price_postapoc": 10, "proportional": { "weight": 6.0, "volume": 6.0, "price": 6.0, "quench": 6.0, "calories": 6.0, "healthy": 6.0, "fun": 6.0 }, "armor_data": { "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, "encumbrance": 100, "material_thickness": 1 }, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "15 L", "max_contains_weight": "30 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "15 L", + "max_contains_weight": "30 kg", + "max_item_length": "50 cm", + "moves": 300 + } + ], "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, { @@ -488,7 +659,15 @@ "looks_like": "briefcase", "name": { "str": "H&K operational briefcase (empty)", "str_pl": "H&K operational briefcases (empty)" }, "description": "This is a plain, hard-sided black briefcase with a trigger in the handle and a concealed hole in the side. Squeezing the trigger would currently do nothing, as it is empty. Don't forget to put a suitable MP5 back inside before you try to pay any ransom fees with lead.", - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "14500 ml", "max_contains_weight": "30 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "14500 ml", + "max_contains_weight": "30 kg", + "max_item_length": "50 cm", + "moves": 300 + } + ], "price": 2000, "price_postapoc": 1250, "weight": "950 g" @@ -512,7 +691,15 @@ "encumbrance": 30, "warmth": 5, "material_thickness": 2, - "pocket_data": [ { "max_contains_volume": "10 L", "max_contains_weight": "10 kg", "watertight": true, "rigid": true } ], + "pocket_data": [ + { + "max_contains_volume": "10 L", + "max_contains_weight": "10 kg", + "max_item_volume": "65 ml", + "watertight": true, + "rigid": true + } + ], "flags": [ "OVERSIZE", "BELTED", "WATER_FRIENDLY" ] }, { @@ -534,7 +721,15 @@ "coverage": 15, "encumbrance": 1, "max_encumbrance": 3, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "1500 ml", "max_contains_weight": "5 kg", "moves": 80 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "1500 ml", + "max_contains_weight": "5 kg", + "max_item_length": "20 cm", + "moves": 80 + } + ], "material_thickness": 1, "flags": [ "WAIST", "OVERSIZE", "WATER_FRIENDLY" ] }, @@ -555,8 +750,20 @@ "encumbrance": 2, "max_encumbrance": 5, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "2250 ml", "max_contains_weight": "2 kg", "moves": 200 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "2250 ml", "max_contains_weight": "2 kg", "moves": 200 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2250 ml", + "max_contains_weight": "2 kg", + "max_item_length": "30 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2250 ml", + "max_contains_weight": "2 kg", + "max_item_length": "30 cm", + "moves": 200 + } ], "material_thickness": 2, "flags": [ "VARSIZE", "WATER_FRIENDLY", "BELTED" ] @@ -578,7 +785,15 @@ "coverage": 30, "encumbrance": 2, "max_encumbrance": 9, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "10 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "10 kg", + "max_item_length": "70 cm", + "moves": 300 + } + ], "warmth": 5, "material_thickness": 1, "flags": [ "BELTED", "WATER_FRIENDLY" ] @@ -601,7 +816,15 @@ "coverage": 40, "encumbrance": 4, "max_encumbrance": 15, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "10 L", "max_contains_weight": "15 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "10 L", + "max_contains_weight": "15 kg", + "max_item_length": "50 cm", + "moves": 300 + } + ], "warmth": 10, "material_thickness": 1, "flags": [ "OVERSIZE", "BELTED", "WATER_FRIENDLY" ] @@ -613,8 +836,8 @@ "name": { "str": "messenger bag" }, "//": "KA101's ran about $90 but is ballistic nylon. Bit tougher than the DDA model.", "description": "Light and easy to wear, but doesn't offer much storage.", - "weight": "760 g", - "volume": "1 L", + "weight": "690 g", + "volume": "2500 ml", "price": 7900, "price_postapoc": 250, "to_hit": 1, @@ -626,8 +849,16 @@ "covers": [ "TORSO" ], "coverage": 30, "encumbrance": 1, - "max_encumbrance": 6, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "6 L", "max_contains_weight": "18 kg", "moves": 150 } ], + "max_encumbrance": 12, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "15 L", + "max_contains_weight": "18 kg", + "max_item_length": "50 cm", + "moves": 150 + } + ], "material_thickness": 1, "flags": [ "BELTED", "WATER_FRIENDLY" ] }, @@ -637,8 +868,8 @@ "type": "ARMOR", "name": { "str": "MOLLE pack" }, "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.", - "weight": "966 g", - "volume": "2500 ml", + "weight": "1300 g", + "volume": "5000 ml", "price": 6700, "price_postapoc": 1500, "material": [ "cotton", "nylon" ], @@ -650,10 +881,34 @@ "encumbrance": 2, "max_encumbrance": 20, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "20 L", "max_contains_weight": "35 kg", "moves": 300 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "6 kg", "moves": 200 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "2 L", "max_contains_weight": "3 kg", "moves": 120 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "2 L", "max_contains_weight": "3 kg", "moves": 120 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "20 L", + "max_contains_weight": "35 kg", + "max_item_length": "50 cm", + "moves": 300 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "6 kg", + "max_item_length": "30 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2 L", + "max_contains_weight": "3 kg", + "max_item_length": "25 cm", + "moves": 120 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2 L", + "max_contains_weight": "3 kg", + "max_item_length": "25 cm", + "moves": 120 + } ], "warmth": 10, "material_thickness": 2, @@ -664,8 +919,8 @@ "type": "ARMOR", "name": { "str": "petpack" }, "description": "Before the Cataclysm this would allow your four-legged friend to see the world, now it's used to shield them from the world.", - "weight": "1316 g", - "volume": "10 L", + "weight": "900 g", + "volume": "35 L", "price": 7900, "price_postapoc": 250, "material": [ "cotton", "plastic" ], @@ -674,13 +929,21 @@ "color": "blue", "covers": [ "TORSO" ], "coverage": 40, - "encumbrance": 5, - "max_encumbrance": 10, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "4 L", "max_contains_weight": "16 kg", "moves": 300 } ], + "encumbrance": 10, + "max_encumbrance": 35, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "35 L", + "max_contains_weight": "16 kg", + "max_item_length": "45 cm", + "moves": 300 + } + ], "warmth": 8, "material_thickness": 2, "properties": [ [ "creature_size_capacity", "SMALL" ] ], - "use_action": [ "CAPTURE_MONSTER_ACT" ], + "use_action": "CAPTURE_MONSTER_ACT", "flags": [ "BELTED", "WATERPROOF" ] }, { @@ -689,7 +952,7 @@ "name": { "str": "plastic shopping bag" }, "description": "A bag used to carry groceries home.", "weight": "2 g", - "volume": "250 ml", + "volume": "30 ml", "price": 1, "price_postapoc": 10, "to_hit": -2, @@ -700,7 +963,14 @@ "coverage": 4, "encumbrance": 40, "max_encumbrance": 60, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "3 kg", "moves": 150 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "3 kg", + "moves": 150 + } + ], "material_thickness": 1, "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, @@ -724,7 +994,15 @@ "coverage": 10, "encumbrance": 2, "max_encumbrance": 7, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "10 kg", "moves": 150 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "10 kg", + "max_item_length": "30 cm", + "moves": 150 + } + ], "material_thickness": 2, "flags": [ "FANCY", "BELTED", "WATER_FRIENDLY" ] }, @@ -746,7 +1024,15 @@ "coverage": 15, "encumbrance": 5, "max_encumbrance": 10, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "2250 ml", "max_contains_weight": "2 kg", "moves": 200 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "2250 ml", + "max_contains_weight": "2 kg", + "max_item_length": "30 cm", + "moves": 200 + } + ], "material_thickness": 1, "flags": [ "WAIST", "OVERSIZE", "WATER_FRIENDLY" ] }, @@ -769,10 +1055,34 @@ "encumbrance": 8, "max_encumbrance": 50, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "40 L", "max_contains_weight": "60 kg", "moves": 300 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "10 kg", "moves": 200 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "moves": 120 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "moves": 120 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "40 L", + "max_contains_weight": "60 kg", + "max_item_length": "55 cm", + "moves": 300 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "5 L", + "max_contains_weight": "10 kg", + "max_item_length": "35 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "3 kg", + "max_item_length": "30 cm", + "moves": 120 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "3 L", + "max_contains_weight": "3 kg", + "max_item_length": "30 cm", + "moves": 120 + } ], "warmth": 8, "material_thickness": 2, @@ -783,7 +1093,7 @@ "type": "ARMOR", "name": { "str": "runner pack" }, "description": "The obvious choice for outdoor athletes, this ergonomic backpack is light and easy to wear, ensuring comfort when carrying heavy and bulky items.", - "weight": "840 g", + "weight": "300 g", "volume": "1500 ml", "price": 24000, "price_postapoc": 500, @@ -797,7 +1107,15 @@ "coverage": 20, "encumbrance": 1, "max_encumbrance": 6, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "7 L", "max_contains_weight": "14 kg", "moves": 250 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "7 L", + "max_contains_weight": "14 kg", + "max_item_length": "40 cm", + "moves": 250 + } + ], "warmth": 2, "material_thickness": 1, "flags": [ "BELTED", "WATER_FRIENDLY" ] @@ -822,7 +1140,15 @@ "coverage": 30, "encumbrance": 2, "max_encumbrance": 9, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "8 L", "max_contains_weight": "16 kg", "moves": 200 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "8 L", + "max_contains_weight": "16 kg", + "max_item_length": "40 cm", + "moves": 200 + } + ], "warmth": 2, "material_thickness": 1, "flags": [ "BELTED", "WATER_FRIENDLY" ] @@ -833,7 +1159,7 @@ "name": { "str": "straw basket" }, "description": "Hand made straw basket. Carry it with you for extra storage.", "weight": "100 g", - "volume": "2500 ml", + "volume": "10 L", "price": 200, "price_postapoc": 50, "to_hit": -1, @@ -845,7 +1171,15 @@ "coverage": 4, "encumbrance": 21, "max_encumbrance": 30, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "2250 ml", "max_contains_weight": "3 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "10 L", + "max_contains_weight": "3 kg", + "max_item_length": "40 cm", + "moves": 300 + } + ], "material_thickness": 2, "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, @@ -857,7 +1191,7 @@ "//": "You drag it along with you, so it taking a hit is Rare.", "description": "A huge wheeled suitcase used mainly for transporting clothes and other possessions during trips, provides a decent amount of storage but hauling it around is neither fast nor comfortable.", "weight": "5000 g", - "volume": "25 L", + "volume": "110 L", "price": 21000, "price_postapoc": 500, "material": [ "plastic" ], @@ -868,7 +1202,15 @@ "coverage": 5, "encumbrance": 50, "max_encumbrance": 100, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "20 L", "max_contains_weight": "80 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "110 L", + "max_contains_weight": "80 kg", + "max_item_length": "90 cm", + "moves": 300 + } + ], "material_thickness": 3, "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, @@ -877,20 +1219,28 @@ "repairs_like": "backpack_hiking", "type": "ARMOR", "name": { "str": "suitcase" }, - "description": "A mid-sized suitcase used mainly for transporting clothes and other possessions during trips, provides a decent amount of storage but hauling it around is not exactly comfortable.", - "weight": "900 g", - "volume": "2500 ml", + "description": "A mid-sized wheeled suitcase used mainly for transporting clothes and other possessions during trips, provides a decent amount of storage but hauling it around is not exactly comfortable.", + "weight": "3000 g", + "volume": "45 L", "price": 21000, "price_postapoc": 250, "material": [ "cotton" ], "symbol": "[", "looks_like": "briefcase", "color": "blue", - "covers": [ "ARM_EITHER", "HAND_EITHER" ], + "covers": [ "ARM_EITHER", "HAND_EITHER", "LEG_EITHER" ], "coverage": 5, - "encumbrance": 60, - "max_encumbrance": 100, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "10 L", "max_contains_weight": "40 kg", "moves": 250 } ], + "encumbrance": 20, + "max_encumbrance": 60, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "45 L", + "max_contains_weight": "40 kg", + "max_item_length": "70 cm", + "moves": 250 + } + ], "material_thickness": 3, "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, @@ -910,8 +1260,16 @@ "covers": [ "TORSO" ], "coverage": 40, "encumbrance": 8, - "max_encumbrance": 28, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "38 L", "max_contains_weight": "60 kg", "moves": 300 } ], + "max_encumbrance": 30, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "38 L", + "max_contains_weight": "60 kg", + "max_item_length": "60 cm", + "moves": 300 + } + ], "material_thickness": 2, "flags": [ "WATER_FRIENDLY", "STURDY", "BELTED", "OVERSIZE" ] }, @@ -921,7 +1279,7 @@ "name": { "str": "survivor backpack" }, "description": "A custom-built backpack. Durable and carefully crafted to hold as much stuff as possible.", "weight": "600 g", - "volume": "2500 ml", + "volume": "5000 ml", "price": 24000, "price_postapoc": 2250, "material": [ "leather", "cotton" ], @@ -931,8 +1289,16 @@ "covers": [ "TORSO" ], "coverage": 30, "encumbrance": 3, - "max_encumbrance": 12, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "16 L", "max_contains_weight": "32 kg", "moves": 300 } ], + "max_encumbrance": 24, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "30 L", + "max_contains_weight": "32 kg", + "max_item_length": "50 cm", + "moves": 300 + } + ], "material_thickness": 2, "flags": [ "WATER_FRIENDLY", "STURDY", "BELTED" ] }, @@ -942,7 +1308,7 @@ "name": { "str": "survivor rucksack" }, "description": "A custom-built heavy backpack. Durable and carefully crafted to hold as much stuff as possible.", "weight": "800 g", - "volume": "5 L", + "volume": "10 L", "price": 24000, "price_postapoc": 3000, "material": [ "leather", "cotton" ], @@ -952,8 +1318,16 @@ "covers": [ "TORSO" ], "coverage": 40, "encumbrance": 3, - "max_encumbrance": 18, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "25 L", "max_contains_weight": "40 kg", "moves": 300 } ], + "max_encumbrance": 28, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "35 L", + "max_contains_weight": "40 kg", + "max_item_length": "55 cm", + "moves": 300 + } + ], "material_thickness": 2, "flags": [ "WATER_FRIENDLY", "STURDY", "BELTED", "OVERSIZE" ] }, @@ -963,7 +1337,7 @@ "name": { "str": "survivor runner pack" }, "description": "A custom-built lightweight runner pack. Durable and carefully crafted to hold as much stuff as possible.", "weight": "440 g", - "volume": "1750 ml", + "volume": "2500 ml", "price": 24000, "price_postapoc": 2500, "material": [ "leather", "cotton" ], @@ -973,8 +1347,16 @@ "covers": [ "TORSO" ], "coverage": 30, "encumbrance": 1, - "max_encumbrance": 6, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "8 L", "max_contains_weight": "16 kg", "moves": 250 } ], + "max_encumbrance": 12, + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "20 L", + "max_contains_weight": "16 kg", + "max_item_length": "40 cm", + "moves": 250 + } + ], "material_thickness": 2, "flags": [ "WATER_FRIENDLY", "STURDY", "BELTED" ] }, @@ -996,7 +1378,15 @@ "coverage": 5, "encumbrance": 50, "max_encumbrance": 100, - "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "15 L", "max_contains_weight": "30 kg", "moves": 300 } ], + "pocket_data": [ + { + "pocket_type": "CONTAINER", + "max_contains_volume": "25 L", + "max_contains_weight": "30 kg", + "max_item_length": "60 cm", + "moves": 300 + } + ], "material_thickness": 1, "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, @@ -1018,10 +1408,34 @@ "encumbrance": 3, "max_encumbrance": 25, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "25 L", "max_contains_weight": "40 kg", "moves": 300 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "4 L", "max_contains_weight": "10 kg", "moves": 200 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "1 L", "max_contains_weight": "2 kg", "moves": 120 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "1 L", "max_contains_weight": "2 kg", "moves": 120 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "25 L", + "max_contains_weight": "40 kg", + "max_item_length": "50 cm", + "moves": 300 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "4 L", + "max_contains_weight": "10 kg", + "max_item_length": "35 cm", + "moves": 200 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "1 L", + "max_contains_weight": "2 kg", + "max_item_length": "20 cm", + "moves": 120 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "1 L", + "max_contains_weight": "2 kg", + "max_item_length": "20 cm", + "moves": 120 + } ], "warmth": 8, "material_thickness": 2, @@ -1046,10 +1460,34 @@ "encumbrance": 2, "max_encumbrance": 5, "pocket_data": [ - { "pocket_type": "CONTAINER", "max_contains_volume": "750 ml", "max_contains_weight": "2 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "750 ml", "max_contains_weight": "2 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "750 ml", "max_contains_weight": "2 kg", "moves": 80 }, - { "pocket_type": "CONTAINER", "max_contains_volume": "750 ml", "max_contains_weight": "2 kg", "moves": 80 } + { + "pocket_type": "CONTAINER", + "max_contains_volume": "750 ml", + "max_contains_weight": "2 kg", + "max_item_length": "20 cm", + "moves": 80 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "750 ml", + "max_contains_weight": "2 kg", + "max_item_length": "20 cm", + "moves": 80 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "750 ml", + "max_contains_weight": "2 kg", + "max_item_length": "20 cm", + "moves": 80 + }, + { + "pocket_type": "CONTAINER", + "max_contains_volume": "750 ml", + "max_contains_weight": "2 kg", + "max_item_length": "20 cm", + "moves": 80 + } ], "warmth": 5, "material_thickness": 2, From eac1d1d20897bd47f7e5b12c003c547368060bfd Mon Sep 17 00:00:00 2001 From: Duck Date: Wed, 24 Jun 2020 14:36:29 -0500 Subject: [PATCH 093/206] Rigidify some items in tool_armor --- data/json/items/tool_armor.json | 65 ++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/data/json/items/tool_armor.json b/data/json/items/tool_armor.json index d874be4037e12..e4905f29d4478 100644 --- a/data/json/items/tool_armor.json +++ b/data/json/items/tool_armor.json @@ -171,6 +171,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -322,6 +323,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "light_minus_battery_cell", "light_minus_atomic_battery_cell", "light_minus_disposable_cell" ] @@ -427,6 +429,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -486,6 +489,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -545,6 +549,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -604,6 +609,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -685,6 +691,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -744,6 +751,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -876,7 +884,7 @@ "weight": "6820 g", "volume": "9 L", "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "plutonium": 5000 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "plutonium": 5000 } } ], "ammo": "plutonium", "charges_per_use": 5, "use_action": [ "RM13ARMOR_OFF" ], @@ -931,7 +939,7 @@ "material": [ "ceramic", "kevlar" ], "weight": "1250 g", "volume": "4500 ml", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "plutonium": 1000 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "plutonium": 1000 } } ], "ammo": "plutonium", "initial_charges": 1000, "use_action": { @@ -982,7 +990,7 @@ "material": [ "carbide" ], "weight": "1250 g", "volume": "4500 ml", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "plutonium": 2500 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "plutonium": 2500 } } ], "ammo": "plutonium", "initial_charges": 1000, "use_action": { @@ -1062,7 +1070,7 @@ "weight": "720 g", "volume": "500 ml", "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "rebreather_filter": 60 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "rebreather_filter": 60 } } ], "ammo": "rebreather_filter", "initial_charges": 60, "charges_per_use": 1, @@ -1110,7 +1118,7 @@ "weight": "960 g", "volume": "1250 ml", "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "rebreather_filter": 60 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "rebreather_filter": 60 } } ], "ammo": "rebreather_filter", "initial_charges": 60, "charges_per_use": 1, @@ -1165,7 +1173,7 @@ "material_thickness": 2, "environmental_protection": 1, "environmental_protection_with_filter": 7, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_s": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_s": 100 } } ], "ammo": "gasfilter_s", "initial_charges": 100, "use_action": [ "GASMASK" ] @@ -1192,7 +1200,7 @@ "material_thickness": 2, "environmental_protection": 1, "environmental_protection_with_filter": 16, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ] @@ -1218,7 +1226,7 @@ "material_thickness": 2, "environmental_protection": 1, "environmental_protection_with_filter": 16, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1246,7 +1254,7 @@ "material_thickness": 3, "environmental_protection": 1, "environmental_protection_with_filter": 15, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1274,7 +1282,7 @@ "material_thickness": 3, "environmental_protection": 1, "environmental_protection_with_filter": 15, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1296,7 +1304,7 @@ "weight": "1260 g", "volume": "1500 ml", "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1320,7 +1328,7 @@ "price": 24000, "price_postapoc": 2000, "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1348,7 +1356,7 @@ "price": 24000, "price_postapoc": 1500, "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "charges_per_use": 1, @@ -1377,7 +1385,7 @@ "price": 24000, "price_postapoc": 1750, "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1405,7 +1413,7 @@ "price": 24000, "price_postapoc": 1500, "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1433,7 +1441,7 @@ "price": 24000, "price_postapoc": 1750, "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1461,7 +1469,7 @@ "price": 24000, "price_postapoc": 1500, "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasfilter_m": 100 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, "use_action": [ "GASMASK" ], @@ -1513,6 +1521,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -1577,6 +1586,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -1620,7 +1630,7 @@ "flags": [ "OVERSIZE" ], "weight": "364 g", "volume": "750 ml", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "ampoule": 2 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "ampoule": 2 } } ], "charges_per_use": 1, "use_action": [ "JET_INJECTOR" ], "material_thickness": 3 @@ -1639,7 +1649,7 @@ "flags": [ "OVERSIZE" ], "weight": "212 g", "volume": "750 ml", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "stimpack_ammo": 5 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "stimpack_ammo": 5 } } ], "ammo": "stimpack_ammo", "initial_charges": 5, "charges_per_use": 1, @@ -1661,7 +1671,7 @@ "weight": "982 g", "volume": "1500 ml", "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "rebreather_filter": 120 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "rebreather_filter": 120 } } ], "ammo": "rebreather_filter", "charges_per_use": 1, "use_action": { @@ -1709,7 +1719,7 @@ "weight": "1302 g", "volume": "2 L", "to_hit": -3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "rebreather_filter": 120 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "rebreather_filter": 120 } } ], "ammo": "rebreather_filter", "charges_per_use": 1, "use_action": { @@ -1843,6 +1853,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "light_minus_battery_cell", "light_minus_atomic_battery_cell" ] @@ -2425,6 +2436,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] @@ -2781,6 +2793,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -2969,7 +2982,7 @@ "color": "light_gray", "initial_charges": 60, "ammo": "nitrox", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "nitrox": 60 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nitrox": 60 } } ], "covers": [ "TORSO" ], "flags": [ "WATER_FRIENDLY", "BELTED", "ONLY_ONE", "STURDY", "NO_UNLOAD" ], "environmental_protection": 1, @@ -2997,7 +3010,7 @@ "symbol": ";", "color": "light_gray", "ammo": "nitrox", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "nitrox": 60 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nitrox": 60 } } ], "charges_per_use": 1, "turns_per_charge": 60, "covers": [ "TORSO", "MOUTH" ], @@ -3026,7 +3039,7 @@ "symbol": ";", "color": "light_gray", "ammo": "nitrox", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "nitrox": 20 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nitrox": 20 } } ], "max_charges": 20, "covers": [ "TORSO" ], "flags": [ "WATER_FRIENDLY", "BELTED", "ONLY_ONE", "STURDY", "NO_UNLOAD" ], @@ -3055,7 +3068,7 @@ "symbol": ";", "color": "light_gray", "ammo": "nitrox", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "nitrox": 20 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nitrox": 20 } } ], "charges_per_use": 1, "turns_per_charge": 60, "covers": [ "TORSO", "MOUTH" ], @@ -3101,6 +3114,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] @@ -3155,6 +3169,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] From 7ee2728de7f04d285fbd0cf3514d471bd6753b38 Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Wed, 24 Jun 2020 14:39:48 -0600 Subject: [PATCH 094/206] Add bundle of planks and bundle of stout branches Define crafting recipes and item definitions for: - bundle of planks: 10 planks (2x4) lashed together with rope - bundle of stout branches: 10 stout branches (stick) " " " " Both recipes are reversible, easy to to in the dark, and cannot fail. Their purpose is to make it more practical to carry many long pieces of wood around, since they are too long to fit in most containers. Partial solution to #41182 --- data/json/items/generic.json | 32 ++++++++++++++++++++++++++++ data/json/recipes/recipe_others.json | 24 +++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/data/json/items/generic.json b/data/json/items/generic.json index 9b9db1744a19e..56c232bcc8776 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -419,6 +419,38 @@ "symbol": ",", "color": "white" }, + { + "id": "bundle_plank", + "type": "GENERIC", + "category": "spare_parts", + "name": { "str": "bundle of planks", "str_pl": "bundles of planks" }, + "description": "Ten construction planks securely lashed together with a rope. Disassemble to unpack.", + "//": "total volume is equal to 10 planks, assuming uniformity and tight stacking", + "volume": "44 L", + "weight": "26 kg", + "longest_side": "130 cm", + "price": 10000, + "price_postapoc": 100, + "material": [ "wood" ], + "symbol": "H", + "color": "brown" + }, + { + "id": "bundle_branch", + "type": "GENERIC", + "category": "spare_parts", + "name": { "str": "bundle of stout branches", "str_pl": "bundles of stout branches" }, + "description": "Ten stout branches securely lashed together with a rope. Disassemble to untie them.", + "//": "total volume is greater than 10 stout branches; irregular dimensions leave air gaps", + "volume": "30 L", + "weight": "15 kg", + "longest_side": "130 cm", + "price": 0, + "price_postapoc": 50, + "material": [ "wood" ], + "symbol": "H", + "color": "brown" + }, { "type": "GENERIC", "id": "sample_t_substrate", diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index e133f16a8c9c8..1804daf373e29 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -4296,6 +4296,30 @@ "components": [ [ [ "felt_patch", 10 ] ] ], "flags": [ "BLIND_HARD" ] }, + { + "result": "bundle_plank", + "type": "recipe", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_MATERIALS", + "skill_used": "fabrication", + "time": "1 m", + "autolearn": true, + "reversible": true, + "components": [ [ [ "2x4", 10 ] ], [ [ "rope_6", 1 ] ] ], + "flags": [ "BLIND_EASY" ] + }, + { + "result": "bundle_branch", + "type": "recipe", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_MATERIALS", + "skill_used": "fabrication", + "time": "1 m", + "autolearn": true, + "reversible": true, + "components": [ [ [ "stick", 10 ] ], [ [ "rope_6", 1 ] ] ], + "flags": [ "BLIND_EASY" ] + }, { "type": "recipe", "result": "metal_butcher_rack", From bdbc3a56c5e3f9897f53ae92fba4627b971c859e Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Wed, 24 Jun 2020 14:56:55 -0700 Subject: [PATCH 095/206] Update storage.json add magazine_well and adjusted encumbrances where necessary --- data/json/items/armor/storage.json | 78 +++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 24 deletions(-) diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index f739417356cb9..174e482f5b65f 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -51,9 +51,11 @@ "pocket_data": [ { "pocket_type": "CONTAINER", + "max_contains_volume": "50 L", "max_contains_weight": "50 kg", "max_item_length": "60 cm", + "magazine_well": "15 L", "moves": 450 }, { @@ -61,6 +63,7 @@ "max_contains_volume": "4 L", "max_contains_weight": "8 kg", "max_item_length": "35 cm", + "magazine_well": "1 L", "moves": 450 }, { @@ -68,6 +71,7 @@ "max_contains_volume": "2 L", "max_contains_weight": "2 kg", "max_item_length": "25 cm", + "magazine_well": "500 ml", "moves": 450 }, { @@ -75,6 +79,7 @@ "max_contains_volume": "2 L", "max_contains_weight": "2 kg", "max_item_length": "25 cm", + "magazine_well": "500 ml", "moves": 450 }, { @@ -113,7 +118,7 @@ "color": "green", "covers": [ "TORSO", "LEGS" ], "coverage": 75, - "encumbrance": 10, + "encumbrance": 20, "max_encumbrance": 60, "pocket_data": [ { @@ -121,6 +126,7 @@ "max_contains_volume": "80 L", "max_contains_weight": "40 kg", "max_item_length": "96 cm", + "magazine_well": "20 L", "moves": 300 } ], @@ -181,6 +187,7 @@ "max_contains_volume": "55 L", "max_contains_weight": "70 kg", "max_item_length": "70 cm", + "magazine_well": "10 L", "moves": 300 }, { @@ -188,6 +195,7 @@ "max_contains_volume": "5 L", "max_contains_weight": "10 kg", "max_item_length": "40 cm", + "magazine_well": "1 L", "moves": 200 }, { @@ -195,6 +203,7 @@ "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "max_item_length": "30 cm", + "magazine_well": "800 ml", "moves": 120 }, { @@ -202,6 +211,7 @@ "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "max_item_length": "30 cm", + "magazine_well": "800 ml", "moves": 120 } ], @@ -263,6 +273,7 @@ "max_contains_volume": "70 L", "max_contains_weight": "70 kg", "max_item_length": "75 cm", + "magazine_well": "10 L", "moves": 300 }, { @@ -270,6 +281,7 @@ "max_contains_volume": "5 L", "max_contains_weight": "10 kg", "max_item_length": "40 cm", + "magazine_well": "1 L", "moves": 200 }, { @@ -277,6 +289,7 @@ "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "max_item_length": "30 cm", + "magazine_well": "800 ml", "moves": 120 }, { @@ -284,6 +297,7 @@ "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "max_item_length": "30 cm", + "magazine_well": "800 ml", "moves": 120 } ], @@ -308,8 +322,7 @@ "color": "light_gray", "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 4, - "encumbrance": 20, - "max_encumbrance": 40, + "encumbrance": 30, "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "15 kg", "moves": 300 } ], "material_thickness": 1, "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] @@ -338,8 +351,7 @@ ], "covers": [ "TORSO" ], "coverage": 40, - "encumbrance": 15, - "max_encumbrance": 30, + "encumbrance": 20, "warmth": 5, "bashing": 16, "cutting": 4, @@ -436,6 +448,7 @@ "max_contains_volume": "24 L", "max_contains_weight": "32 kg", "max_item_length": "60 cm", + "magazine_well": "2 L", "moves": 300 } ], @@ -495,6 +508,7 @@ "max_contains_volume": "35 L", "max_contains_weight": "50 kg", "max_item_length": "55 cm", + "magazine_well": "5 L", "moves": 300 } ], @@ -527,6 +541,7 @@ "max_contains_volume": "2 L", "max_contains_weight": "4 kg", "max_item_length": "20 cm", + "magazine_well": "500 ml", "moves": 80 } ], @@ -558,6 +573,7 @@ "max_contains_volume": "2500 ml", "max_contains_weight": "5 kg", "max_item_length": "25 cm", + "magazine_well": "1 L", "moves": 80 } ], @@ -580,8 +596,7 @@ "color": "green", "covers": [ "TORSO" ], "coverage": 35, - "encumbrance": 2, - "max_encumbrance": 15, + "encumbrance": 30, "//": "The main section of the golf bag actually assumes things will stick out of it, but specifically contains them, so some extra wiggle room was added.", "pocket_data": [ { @@ -755,6 +770,7 @@ "max_contains_volume": "2250 ml", "max_contains_weight": "2 kg", "max_item_length": "30 cm", + "magazine_well": "1 L", "moves": 200 }, { @@ -762,6 +778,7 @@ "max_contains_volume": "2250 ml", "max_contains_weight": "2 kg", "max_item_length": "30 cm", + "magazine_well": "1 L", "moves": 200 } ], @@ -822,6 +839,7 @@ "max_contains_volume": "10 L", "max_contains_weight": "15 kg", "max_item_length": "50 cm", + "magazine_well": "2 L", "moves": 300 } ], @@ -848,8 +866,7 @@ "color": "green", "covers": [ "TORSO" ], "coverage": 30, - "encumbrance": 1, - "max_encumbrance": 12, + "encumbrance": 12, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -878,7 +895,7 @@ "color": "green", "covers": [ "TORSO" ], "coverage": 35, - "encumbrance": 2, + "encumbrance": 5, "max_encumbrance": 20, "pocket_data": [ { @@ -886,6 +903,7 @@ "max_contains_volume": "20 L", "max_contains_weight": "35 kg", "max_item_length": "50 cm", + "magazine_well": "5 L", "moves": 300 }, { @@ -893,6 +911,7 @@ "max_contains_volume": "3 L", "max_contains_weight": "6 kg", "max_item_length": "30 cm", + "magazine_well": "2 L", "moves": 200 }, { @@ -900,6 +919,7 @@ "max_contains_volume": "2 L", "max_contains_weight": "3 kg", "max_item_length": "25 cm", + "magazine_well": "1 L", "moves": 120 }, { @@ -907,6 +927,7 @@ "max_contains_volume": "2 L", "max_contains_weight": "3 kg", "max_item_length": "25 cm", + "magazine_well": "1 L", "moves": 120 } ], @@ -929,8 +950,7 @@ "color": "blue", "covers": [ "TORSO" ], "coverage": 40, - "encumbrance": 10, - "max_encumbrance": 35, + "encumbrance": 35, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -961,7 +981,7 @@ "color": "white", "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 4, - "encumbrance": 40, + "encumbrance": 1, "max_encumbrance": 60, "pocket_data": [ { @@ -992,8 +1012,7 @@ "color": "dark_gray", "covers": [ "TORSO" ], "coverage": 10, - "encumbrance": 2, - "max_encumbrance": 7, + "encumbrance": 7, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -1052,7 +1071,7 @@ "color": "green", "covers": [ "TORSO" ], "coverage": 40, - "encumbrance": 8, + "encumbrance": 10, "max_encumbrance": 50, "pocket_data": [ { @@ -1060,6 +1079,7 @@ "max_contains_volume": "40 L", "max_contains_weight": "60 kg", "max_item_length": "55 cm", + "magazine_well": "8 L", "moves": 300 }, { @@ -1067,6 +1087,7 @@ "max_contains_volume": "5 L", "max_contains_weight": "10 kg", "max_item_length": "35 cm", + "magazine_well": "1 L", "moves": 200 }, { @@ -1074,6 +1095,7 @@ "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "max_item_length": "30 cm", + "magazine_well": "800 ml", "moves": 120 }, { @@ -1081,6 +1103,7 @@ "max_contains_volume": "3 L", "max_contains_weight": "3 kg", "max_item_length": "30 cm", + "magazine_well": "800 ml", "moves": 120 } ], @@ -1113,6 +1136,7 @@ "max_contains_volume": "7 L", "max_contains_weight": "14 kg", "max_item_length": "40 cm", + "magazine_well": "1 L", "moves": 250 } ], @@ -1146,6 +1170,7 @@ "max_contains_volume": "8 L", "max_contains_weight": "16 kg", "max_item_length": "40 cm", + "magazine_well": "2 L", "moves": 200 } ], @@ -1169,8 +1194,7 @@ "color": "light_gray", "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 4, - "encumbrance": 21, - "max_encumbrance": 30, + "encumbrance": 30, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -1200,8 +1224,7 @@ "color": "red", "covers": [ "ARM_EITHER", "HAND_EITHER", "LEG_EITHER" ], "coverage": 5, - "encumbrance": 50, - "max_encumbrance": 100, + "encumbrance": 70, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -1230,8 +1253,7 @@ "color": "blue", "covers": [ "ARM_EITHER", "HAND_EITHER", "LEG_EITHER" ], "coverage": 5, - "encumbrance": 20, - "max_encumbrance": 60, + "encumbrance": 50, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -1267,6 +1289,7 @@ "max_contains_volume": "38 L", "max_contains_weight": "60 kg", "max_item_length": "60 cm", + "magazine_well": "8 L", "moves": 300 } ], @@ -1296,6 +1319,7 @@ "max_contains_volume": "30 L", "max_contains_weight": "32 kg", "max_item_length": "50 cm", + "magazine_well": "5 L", "moves": 300 } ], @@ -1325,6 +1349,7 @@ "max_contains_volume": "35 L", "max_contains_weight": "40 kg", "max_item_length": "55 cm", + "magazine_well": "6 L", "moves": 300 } ], @@ -1346,7 +1371,7 @@ "color": "brown", "covers": [ "TORSO" ], "coverage": 30, - "encumbrance": 1, + "encumbrance": 3, "max_encumbrance": 12, "pocket_data": [ { @@ -1354,6 +1379,7 @@ "max_contains_volume": "20 L", "max_contains_weight": "16 kg", "max_item_length": "40 cm", + "magazine_well": "4 L", "moves": 250 } ], @@ -1376,7 +1402,7 @@ "color": "brown", "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, - "encumbrance": 50, + "encumbrance": 4, "max_encumbrance": 100, "pocket_data": [ { @@ -1413,6 +1439,7 @@ "max_contains_volume": "25 L", "max_contains_weight": "40 kg", "max_item_length": "50 cm", + "magazine_well": "5 L", "moves": 300 }, { @@ -1420,6 +1447,7 @@ "max_contains_volume": "4 L", "max_contains_weight": "10 kg", "max_item_length": "35 cm", + "magazine_well": "500 ml", "moves": 200 }, { @@ -1427,6 +1455,7 @@ "max_contains_volume": "1 L", "max_contains_weight": "2 kg", "max_item_length": "20 cm", + "magazine_well": "200 ml", "moves": 120 }, { @@ -1434,6 +1463,7 @@ "max_contains_volume": "1 L", "max_contains_weight": "2 kg", "max_item_length": "20 cm", + "magazine_well": "200 ml", "moves": 120 } ], From 2bb57f1f75b863fea2eedfbaf58121f98cb5f6ce Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Wed, 24 Jun 2020 15:25:22 -0700 Subject: [PATCH 096/206] Update storage.json linting --- data/json/items/armor/storage.json | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index 174e482f5b65f..1c7431caa40f8 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -51,7 +51,6 @@ "pocket_data": [ { "pocket_type": "CONTAINER", - "max_contains_volume": "50 L", "max_contains_weight": "50 kg", "max_item_length": "60 cm", @@ -983,14 +982,7 @@ "coverage": 4, "encumbrance": 1, "max_encumbrance": 60, - "pocket_data": [ - { - "pocket_type": "CONTAINER", - "max_contains_volume": "5 L", - "max_contains_weight": "3 kg", - "moves": 150 - } - ], + "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "3 kg", "moves": 150 } ], "material_thickness": 1, "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] }, From b46c137928059814ebb175c5a15afc8795d44b5f Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Wed, 24 Jun 2020 16:42:20 -0700 Subject: [PATCH 097/206] Update storage.json edit magazine_wells and volumes to prevent pocket being larger than item --- data/json/items/armor/storage.json | 32 +++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index 1c7431caa40f8..9ebd944db4999 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -54,7 +54,7 @@ "max_contains_volume": "50 L", "max_contains_weight": "50 kg", "max_item_length": "60 cm", - "magazine_well": "15 L", + "magazine_well": "12 L", "moves": 450 }, { @@ -125,7 +125,7 @@ "max_contains_volume": "80 L", "max_contains_weight": "40 kg", "max_item_length": "96 cm", - "magazine_well": "20 L", + "magazine_well": "8750 ml", "moves": 300 } ], @@ -554,7 +554,7 @@ "name": { "str": "fanny pack" }, "description": "Provides a bit of extra storage, with minimal encumbrance.", "weight": "272 g", - "volume": "500 ml", + "volume": "1000 ml", "price": 3500, "to_hit": 2, "bashing": 1, @@ -753,7 +753,7 @@ "name": { "str": "pair of drop leg pouches", "str_pl": "pairs of drop leg pouches" }, "description": "A set of pouches that can be worn on the thighs using buckled straps. This variety is favored by the military.", "weight": "205 g", - "volume": "500 ml", + "volume": "1 L", "price": 3000, "price_postapoc": 250, "material": [ "cotton" ], @@ -769,7 +769,7 @@ "max_contains_volume": "2250 ml", "max_contains_weight": "2 kg", "max_item_length": "30 cm", - "magazine_well": "1 L", + "magazine_well": "500 ml", "moves": 200 }, { @@ -777,7 +777,7 @@ "max_contains_volume": "2250 ml", "max_contains_weight": "2 kg", "max_item_length": "30 cm", - "magazine_well": "1 L", + "magazine_well": "500 ml", "moves": 200 } ], @@ -902,7 +902,7 @@ "max_contains_volume": "20 L", "max_contains_weight": "35 kg", "max_item_length": "50 cm", - "magazine_well": "5 L", + "magazine_well": "3 L", "moves": 300 }, { @@ -910,7 +910,7 @@ "max_contains_volume": "3 L", "max_contains_weight": "6 kg", "max_item_length": "30 cm", - "magazine_well": "2 L", + "magazine_well": "750 ml", "moves": 200 }, { @@ -918,7 +918,7 @@ "max_contains_volume": "2 L", "max_contains_weight": "3 kg", "max_item_length": "25 cm", - "magazine_well": "1 L", + "magazine_well": "500 ml", "moves": 120 }, { @@ -926,7 +926,7 @@ "max_contains_volume": "2 L", "max_contains_weight": "3 kg", "max_item_length": "25 cm", - "magazine_well": "1 L", + "magazine_well": "500 ml", "moves": 120 } ], @@ -1054,7 +1054,7 @@ "name": { "str": "military rucksack" }, "description": "A huge military rucksack, provides a lot of storage.", "weight": "1140 g", - "volume": "4 L", + "volume": "11 L", "price": 9200, "price_postapoc": 1250, "material": [ "cotton", "plastic" ], @@ -1144,7 +1144,7 @@ "//": "Depends on if you're getting a cheap school version or something more like a range bag.", "description": "A simple single-sling backpack. Easier to access than a normal backpack, but can't comfortably hold as much.", "weight": "566 g", - "volume": "1500 ml", + "volume": "2 L", "price": 2900, "price_postapoc": 750, "bashing": 1, @@ -1281,7 +1281,7 @@ "max_contains_volume": "38 L", "max_contains_weight": "60 kg", "max_item_length": "60 cm", - "magazine_well": "8 L", + "magazine_well": "7500 ml", "moves": 300 } ], @@ -1354,7 +1354,7 @@ "name": { "str": "survivor runner pack" }, "description": "A custom-built lightweight runner pack. Durable and carefully crafted to hold as much stuff as possible.", "weight": "440 g", - "volume": "2500 ml", + "volume": "4 L", "price": 24000, "price_postapoc": 2500, "material": [ "leather", "cotton" ], @@ -1414,7 +1414,7 @@ "name": { "str": "travelpack" }, "description": "A hiking pack used for short trips.", "weight": "636 g", - "volume": "3 L", + "volume": "5 L", "price": 7000, "price_postapoc": 1500, "material": [ "cotton" ], @@ -1431,7 +1431,7 @@ "max_contains_volume": "25 L", "max_contains_weight": "40 kg", "max_item_length": "50 cm", - "magazine_well": "5 L", + "magazine_well": "4 L", "moves": 300 }, { From 7bd496c52565758f915a7b16478de0306f78771e Mon Sep 17 00:00:00 2001 From: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> Date: Wed, 24 Jun 2020 17:51:33 -0700 Subject: [PATCH 098/206] Fix errors related to food calories and further audit item volumes (#41553) * Update sandwich.json * values calculated manually * fix two recipes that were contributing to errors Fried fish makes for a pretty different sandwich that should be a different item, ultimately. Fairy bread recipe used much too much butter and two slices of bread. * audit junkfood Tried to only change volumes, but nachos needed work. * Found the error on my end for sandwich calculations and fixed that too Also further tweaked nachos which I am sure will mean more CI calorie fixing * adjustments to fit ci * Update junkfood.json * Update junkfood.json * adjust nacho calories to single serving * wtf is going on with nachos * Update junkfood.json * forgot to save file after deleting this --- data/json/items/comestibles/junkfood.json | 44 ++++++++++---------- data/json/items/comestibles/meat_dishes.json | 2 +- data/json/items/comestibles/sandwich.json | 6 +-- data/json/recipes/recipe_food.json | 4 +- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/data/json/items/comestibles/junkfood.json b/data/json/items/comestibles/junkfood.json index 4d518506e6ac4..4b3289ff5ddc1 100644 --- a/data/json/items/comestibles/junkfood.json +++ b/data/json/items/comestibles/junkfood.json @@ -187,7 +187,7 @@ "price": 200, "price_postapoc": 350, "material": [ "wheat", "junk" ], - "volume": "500 ml", + "volume": "300 ml", "flags": [ "EDIBLE_FROZEN" ], "charges": 3, "fun": 6 @@ -268,7 +268,7 @@ "price": 180, "price_postapoc": 150, "material": [ "junk" ], - "volume": "250 ml", + "volume": "90 ml", "flags": [ "EDIBLE_FROZEN" ], "charges": 3, "fun": 4 @@ -289,7 +289,7 @@ "price": 180, "price_postapoc": 400, "material": [ "junk" ], - "volume": "250 ml", + "volume": "90 ml", "flags": [ "EDIBLE_FROZEN" ], "charges": 3, "vitamins": [ [ "iron", 9 ] ], @@ -311,7 +311,7 @@ "price": 180, "price_postapoc": 200, "material": [ "junk" ], - "volume": "250 ml", + "volume": "90 ml", "flags": [ "EDIBLE_FROZEN" ], "charges": 3, "fun": 3 @@ -598,7 +598,7 @@ "price": 130, "price_postapoc": 100, "material": [ "junk" ], - "volume": "250 ml", + "volume": "90 ml", "flags": [ "EDIBLE_FROZEN" ], "charges": 3, "fun": 4 @@ -607,19 +607,19 @@ "type": "COMESTIBLE", "id": "sugar_fried", "name": { "str_sp": "caramel" }, - "weight": "67 g", + "weight": "77 g", "color": "white", "container": "box_small", "comestible_type": "FOOD", "symbol": "%", "quench": -2, "healthy": -2, - "calories": 257, + "calories": 267, "description": "Some caramel. Still bad for your health.", "price": 150, "price_postapoc": 500, "material": [ "junk" ], - "volume": "250 ml", + "volume": "150 ml", "charges": 5, "vitamins": [ [ "calcium", 9 ], [ "vitB", 8 ] ], "fun": 2 @@ -650,14 +650,14 @@ "type": "COMESTIBLE", "id": "nachos", "name": { "str_sp": "tortilla chips" }, - "weight": "80 g", + "weight": "60 g", "color": "yellow", "spoils_in": "30 days", "container": "bag_plastic", "comestible_type": "FOOD", "symbol": "%", "quench": -10, - "calories": 280, + "calories": 260, "description": "Salted chips made from corn tortillas, could really use some cheese, maybe some beef.", "price": 170, "price_postapoc": 150, @@ -671,7 +671,7 @@ "type": "COMESTIBLE", "id": "nachosc", "name": { "str_sp": "cheese nachos" }, - "weight": "85 g", + "weight": "95 g", "color": "yellow", "spoils_in": "1 day", "container": "bag_plastic", @@ -683,7 +683,7 @@ "price": 250, "price_postapoc": 200, "material": [ "junk", "milk" ], - "primary_material": "wheat", + "primary_material": "processed_food", "volume": "250 ml", "flags": [ "EATEN_HOT" ], "fun": 16, @@ -698,20 +698,20 @@ { "type": "FLAG", "condition": "STRICT_HUMANITARIANISM", "name": { "str_sp": "nibelung nachos" } }, { "type": "COMPONENT_ID", "condition": "mutant", "name": { "str_sp": "nachos con chupacabra" } } ], - "weight": "125 g", + "weight": "110 g", "color": "yellow", "spoils_in": "1 day", "container": "bag_plastic", "comestible_type": "FOOD", "symbol": "%", "quench": -10, - "calories": 226, + "calories": 280, "description": "Salted chips made from corn tortillas, now with meat. Could probably use some cheese, though.", "price": 250, "price_postapoc": 600, "material": [ "junk", "flesh" ], - "volume": "750 ml", - "charges": 3, + "primary_material": "processed_food", + "volume": "250 ml", "flags": [ "EATEN_HOT" ], "fun": 16, "vitamins": [ [ "vitC", 5 ], [ "calcium", 2 ], [ "iron", 24 ], [ "vitB", 259 ] ] @@ -725,20 +725,20 @@ { "type": "FLAG", "condition": "STRICT_HUMANITARIANISM", "name": { "str_sp": "nibelung nachos with cheese" } }, { "type": "COMPONENT_ID", "condition": "mutant", "name": { "str_sp": "cheese and chupacabra nachos" } } ], - "weight": "22 g", + "weight": "140 g", "color": "yellow", "spoils_in": "20 hours", "container": "bag_plastic", "comestible_type": "FOOD", "symbol": "%", "quench": -10, - "calories": 495, + "calories": 424, "description": "Salted chips made from corn tortillas with ground meat and smothered in cheese. Delicious.", "price": 300, "price_postapoc": 500, "material": [ "flesh", "milk", "junk" ], "primary_material": "processed_food", - "volume": "500 ml", + "volume": "250 ml", "flags": [ "EATEN_HOT" ], "fun": 20, "vitamins": [ [ "vitA", 10 ], [ "calcium", 10 ], [ "iron", 12 ], [ "vitB", 29 ] ] @@ -868,7 +868,7 @@ "price": 900, "price_postapoc": 150, "material": [ "flesh", "junk", "wheat" ], - "volume": "500 ml", + "volume": "400 ml", "charges": 2, "flags": [ "EATEN_HOT" ], "fun": 15, @@ -1068,7 +1068,7 @@ "price": 800, "price_postapoc": 350, "material": [ "flesh", "junk", "wheat" ], - "volume": "500 ml", + "volume": "250 ml", "flags": [ "EATEN_HOT" ], "fun": 12, "vitamins": [ [ "vitC", 85 ], [ "calcium", 22 ], [ "iron", 15 ] ] @@ -1091,7 +1091,7 @@ "price_postapoc": 300, "material": [ "junk", "milk" ], "primary_material": "processed_food", - "volume": "500 ml", + "volume": "200 ml", "flags": [ "EDIBLE_FROZEN" ], "charges": 4, "vitamins": [ [ "calcium", 4 ] ], diff --git a/data/json/items/comestibles/meat_dishes.json b/data/json/items/comestibles/meat_dishes.json index 7af41504a6e57..65f8206049028 100644 --- a/data/json/items/comestibles/meat_dishes.json +++ b/data/json/items/comestibles/meat_dishes.json @@ -521,7 +521,7 @@ "price": 600, "price_postapoc": 350, "material": [ "flesh", "veggy" ], - "volume": "250 ml", + "volume": "120 ml", "vitamins": [ [ "vitC", 3 ], [ "calcium", 24 ], [ "iron", 14 ] ], "fun": 3 }, diff --git a/data/json/items/comestibles/sandwich.json b/data/json/items/comestibles/sandwich.json index 9bfec30c96f03..3f1094f15ee90 100644 --- a/data/json/items/comestibles/sandwich.json +++ b/data/json/items/comestibles/sandwich.json @@ -63,7 +63,7 @@ "symbol": "%", "quench": 6, "healthy": 1, - "calories": 116, + "calories": 227, "description": "A refreshing cucumber sandwich. Not very filling, but quite tasty.", "price": 400, "volume": "250 ml", @@ -123,7 +123,7 @@ "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "calories": 120, + "calories": 220, "description": "An 'open-faced sandwich' consisting of sliced white bread, a healthy crust-to-crust slathering of butter, and sprinkles. Supposedly a staple of birthday parties in Australia.", "price": 85, "price_postapoc": 300, @@ -331,7 +331,7 @@ "container": "wrapper", "comestible_type": "FOOD", "symbol": "%", - "calories": 476, + "calories": 694, "description": "A delicious fish bagel with spinach and eggs.", "price": 800, "price_postapoc": 350, diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index 72efc1959606a..38dda2bf038ea 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -4296,7 +4296,7 @@ "book_learn": [ [ "family_cookbook", 2 ], [ "mag_cooking", 2 ] ], "qualities": [ { "id": "CUT", "level": 1 } ], "components": [ - [ [ "fish_cooked", 1 ], [ "fish_fried", 1 ], [ "can_salmon", 1 ] ], + [ [ "fish_cooked", 1 ], [ "can_salmon", 1 ] ], [ [ "bread_sandwich", 2, "LIST" ] ], [ [ "spinach", 1 ] ], [ [ "cooking_oil", 1 ] ], @@ -4679,7 +4679,7 @@ "skill_used": "cooking", "time": "1 m", "book_learn": [ [ "mag_glam", 1 ] ], - "components": [ [ [ "bread_sandwich", 2, "LIST" ] ], [ [ "any_butter", 4, "LIST" ], [ "ghee", 4 ] ], [ [ "sprinkles", 3 ] ] ] + "components": [ [ [ "bread_sandwich", 1, "LIST" ] ], [ [ "any_butter", 1, "LIST" ] ], [ [ "sprinkles", 3 ] ] ] }, { "type": "recipe", From 8f8cf2c2f6d998e99f4c1194438e486870c9fb1a Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Wed, 24 Jun 2020 21:32:16 -0700 Subject: [PATCH 099/206] Update storage.json fix conflics with non rigid items and unspecified max_encumbrance, add rigid to appropriate items --- data/json/items/armor/storage.json | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index 9ebd944db4999..e00a760784ee9 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -322,6 +322,7 @@ "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 4, "encumbrance": 30, + "max_encumbrance": 35, "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "5 L", "max_contains_weight": "15 kg", "moves": 300 } ], "material_thickness": 1, "flags": [ "OVERSIZE", "BELTED", "RESTRICT_HANDS", "WATER_FRIENDLY" ] @@ -342,6 +343,7 @@ "pocket_data": [ { "pocket_type": "CONTAINER", + "rigid": true, "max_contains_volume": "15 L", "max_contains_weight": "60 kg", "max_item_length": "50 cm", @@ -596,6 +598,7 @@ "covers": [ "TORSO" ], "coverage": 35, "encumbrance": 30, + "max_encumbrance": 35, "//": "The main section of the golf bag actually assumes things will stick out of it, but specifically contains them, so some extra wiggle room was added.", "pocket_data": [ { @@ -629,7 +632,7 @@ "looks_like": "plastic_shopping_bag", "color": "pink", "proportional": { "weight": 6.0, "volume": 6.0, "price": 6.0, "quench": 6.0, "calories": 6.0, "healthy": 6.0, "fun": 6.0 }, - "armor_data": { "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, "encumbrance": 100, "material_thickness": 1 }, + "armor_data": { "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, "encumbrance": 10, "max_encumbrance": 100, "material_thickness": 1 }, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -653,7 +656,7 @@ "color": "pink", "price_postapoc": 10, "proportional": { "weight": 6.0, "volume": 6.0, "price": 6.0, "quench": 6.0, "calories": 6.0, "healthy": 6.0, "fun": 6.0 }, - "armor_data": { "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, "encumbrance": 100, "material_thickness": 1 }, + "armor_data": { "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, "encumbrance": 10, "max_encumbrance": 100, "material_thickness": 1 }, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -676,6 +679,7 @@ "pocket_data": [ { "pocket_type": "CONTAINER", + "rigid": true, "max_contains_volume": "14500 ml", "max_contains_weight": "30 kg", "max_item_length": "50 cm", @@ -865,13 +869,15 @@ "color": "green", "covers": [ "TORSO" ], "coverage": 30, - "encumbrance": 12, + "encumbrance": 8, + "max_encumbrance": 12, "pocket_data": [ { "pocket_type": "CONTAINER", "max_contains_volume": "15 L", "max_contains_weight": "18 kg", "max_item_length": "50 cm", + "magazine_well": "2500 ml", "moves": 150 } ], @@ -953,6 +959,7 @@ "pocket_data": [ { "pocket_type": "CONTAINER", + "rigid": true, "max_contains_volume": "35 L", "max_contains_weight": "16 kg", "max_item_length": "45 cm", @@ -1004,7 +1011,8 @@ "color": "dark_gray", "covers": [ "TORSO" ], "coverage": 10, - "encumbrance": 7, + "encumbrance": 2, + "max_encumbrance": 7, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -1190,6 +1198,7 @@ "pocket_data": [ { "pocket_type": "CONTAINER", + "rigid": true, "max_contains_volume": "10 L", "max_contains_weight": "3 kg", "max_item_length": "40 cm", @@ -1220,6 +1229,7 @@ "pocket_data": [ { "pocket_type": "CONTAINER", + "rigid": true, "max_contains_volume": "110 L", "max_contains_weight": "80 kg", "max_item_length": "90 cm", @@ -1249,6 +1259,7 @@ "pocket_data": [ { "pocket_type": "CONTAINER", + "rigid": true, "max_contains_volume": "45 L", "max_contains_weight": "40 kg", "max_item_length": "70 cm", From 35a8381e55ae3722d81e940dd9b72ebb403b51ae Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Wed, 24 Jun 2020 23:02:49 -0700 Subject: [PATCH 100/206] Update storage.json linting --- data/json/items/armor/storage.json | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index e00a760784ee9..33ed9b9068752 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -632,7 +632,13 @@ "looks_like": "plastic_shopping_bag", "color": "pink", "proportional": { "weight": 6.0, "volume": 6.0, "price": 6.0, "quench": 6.0, "calories": 6.0, "healthy": 6.0, "fun": 6.0 }, - "armor_data": { "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, "encumbrance": 10, "max_encumbrance": 100, "material_thickness": 1 }, + "armor_data": { + "covers": [ "ARM_EITHER", "HAND_EITHER" ], + "coverage": 5, + "encumbrance": 10, + "max_encumbrance": 100, + "material_thickness": 1 + }, "pocket_data": [ { "pocket_type": "CONTAINER", @@ -656,7 +662,13 @@ "color": "pink", "price_postapoc": 10, "proportional": { "weight": 6.0, "volume": 6.0, "price": 6.0, "quench": 6.0, "calories": 6.0, "healthy": 6.0, "fun": 6.0 }, - "armor_data": { "covers": [ "ARM_EITHER", "HAND_EITHER" ], "coverage": 5, "encumbrance": 10, "max_encumbrance": 100, "material_thickness": 1 }, + "armor_data": { + "covers": [ "ARM_EITHER", "HAND_EITHER" ], + "coverage": 5, + "encumbrance": 10, + "max_encumbrance": 100, + "material_thickness": 1 + }, "pocket_data": [ { "pocket_type": "CONTAINER", From 6fd965374654df5a34c40aeb2d7443857eca0096 Mon Sep 17 00:00:00 2001 From: Brian-Otten <47374323+Brian-Otten@users.noreply.github.com> Date: Thu, 25 Jun 2020 14:38:15 +0200 Subject: [PATCH 101/206] Update spears_and_polearms.json Adds longest side for spears and polearms. --- .../json/items/melee/spears_and_polearms.json | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/data/json/items/melee/spears_and_polearms.json b/data/json/items/melee/spears_and_polearms.json index c9ef02464d616..ba1c803d2a06c 100644 --- a/data/json/items/melee/spears_and_polearms.json +++ b/data/json/items/melee/spears_and_polearms.json @@ -11,6 +11,7 @@ "material": [ "steel", "wood" ], "techniques": [ "WBLOCK_1", "DEF_DISARM" ], "volume": "1750 ml", + "longest_side": "140 cm", "bashing": 5, "cutting": 18, "qualities": [ [ "COOK", 1 ] ], @@ -27,6 +28,7 @@ "description": "A simple wood pole with one end sharpened.", "material": [ "wood" ], "volume": "1250 ml", + "longest_side": "80 cm", "weight": "900 g", "bashing": 5, "cutting": 9, @@ -49,6 +51,7 @@ "material": [ "wood" ], "techniques": [ "WBLOCK_1" ], "volume": "1250 ml", + "longest_side": "150 cm", "bashing": 4, "cutting": 15, "flags": [ "SPEAR", "REACH_ATTACK", "NPC_THROWN", "SHEATH_SPEAR" ], @@ -63,6 +66,7 @@ "description": "This farming tool has been modified into an improvised weapon by rotating its blade 90 degrees, transforming it into a deadly giant blade on the end of a stick. However it's quite fragile.", "weight": "3013 g", "volume": "3250 ml", + "longest_side": "180 cm", "price": 16000, "price_postapoc": 50, "bashing": 7, @@ -82,6 +86,7 @@ "description": "A flimsy pole made of wood with a basic metal spike tied to it. It's barely sharp, and crudely constructed, but it will keep the zombies out of arm's reach until you can find something better.", "weight": "1487 g", "volume": "1250 ml", + "longest_side": "120 cm", "price": 400, "price_postapoc": 50, "bashing": 4, @@ -101,6 +106,7 @@ "description": "A flimsy pole made of wood with a knife bound to the end. It's long enough to slice from a distance, but the knife isn't that well attached. You could take a bit more time to carefully split the shaft and attach the knife blade more permanently.", "weight": "1487 g", "volume": "1250 ml", + "longest_side": "130 cm", "price": 700, "price_postapoc": 150, "to_hit": 1, @@ -121,6 +127,7 @@ "description": "A sturdy wooden pole that has been carefully split and reinforced. At the split point, a sharp blade has been bolted into place and reinforced with layers of sturdy wrapped bindings.", "weight": "1487 g", "volume": "1250 ml", + "longest_side": "130 cm", "price": 12000, "price_postapoc": 500, "to_hit": 1, @@ -141,6 +148,7 @@ "description": "A short do-it-yourself spear made out of a smooth wooden shaft with a metal spike seated and bound into place at its tip. Its functional grip and decent construction makes it a usable, if not effective, weapon.", "weight": "1814 g", "volume": "1500 ml", + "longest_side": "150 cm", "price": 1400, "price_postapoc": 750, "bashing": 7, @@ -164,6 +172,7 @@ "material": [ "wood", "steel" ], "techniques": [ "WBLOCK_2", "DEF_DISARM" ], "volume": "1500 ml", + "longest_side": "150 cm", "bashing": 6, "cutting": 18, "flags": [ "SPEAR", "REACH_ATTACK", "NONCONDUCTIVE", "FRAGILE_MELEE", "SHEATH_SPEAR" ], @@ -183,6 +192,7 @@ "material": [ "copper", "wood" ], "techniques": [ "WBLOCK_1" ], "volume": "1500 ml", + "longest_side": "180 cm", "bashing": 6, "cutting": 20, "flags": [ "SPEAR", "REACH_ATTACK", "NONCONDUCTIVE", "SHEATH_SPEAR" ], @@ -202,6 +212,7 @@ "material": [ "steel", "wood" ], "techniques": [ "WBLOCK_1", "IMPALE" ], "volume": "3 L", + "longest_side": "180 cm", "bashing": 6, "cutting": 30, "flags": [ "DURABLE_MELEE", "SPEAR", "REACH_ATTACK", "NONCONDUCTIVE", "SHEATH_SPEAR" ], @@ -222,6 +233,7 @@ "material": [ "steel" ], "techniques": [ "WBLOCK_1", "IMPALE" ], "volume": "1250 ml", + "longest_side": "150 cm", "bashing": 6, "cutting": 25, "flags": [ "SPEAR", "REACH_ATTACK", "SHEATH_SPEAR" ], @@ -240,6 +252,7 @@ "material": [ "iron" ], "weight": "908 g", "volume": "1500 ml", + "longest_side": "80 cm", "bashing": 5, "techniques": [ "WBLOCK_1" ], "flags": [ "SPEAR", "REACH_ATTACK", "SHEATH_SPEAR" ], @@ -258,6 +271,7 @@ "material": [ "steel", "wood" ], "techniques": [ "WBLOCK_1", "PRECISE", "IMPALE" ], "volume": "2500 ml", + "longest_side": "180 cm", "bashing": 5, "cutting": 31, "flags": [ "DURABLE_MELEE", "SPEAR", "REACH_ATTACK", "NONCONDUCTIVE", "SHEATH_SPEAR" ], @@ -277,6 +291,7 @@ "techniques": [ "WBLOCK_1", "WIDE", "SWEEP" ], "weight": "3175 g", "volume": "3750 ml", + "longest_side": "180 cm", "bashing": 19, "cutting": 51, "price_postapoc": 10000, @@ -295,6 +310,7 @@ "techniques": [ "WBLOCK_1", "SWEEP" ], "weight": "1644 g", "volume": "3750 ml", + "longest_side": "180 cm", "bashing": 22, "cutting": 4, "to_hit": 1, @@ -315,6 +331,7 @@ "techniques": [ "WIDE", "WBLOCK_1" ], "weight": "2100 g", "volume": "2500 ml", + "longest_side": "180 cm", "bashing": 17, "cutting": 40, "price_postapoc": 8000 @@ -330,6 +347,7 @@ "material": [ "steel", "wood" ], "techniques": [ "WIDE", "WBLOCK_1" ], "volume": "2500 ml", + "longest_side": "180 cm", "bashing": 7, "cutting": 45, "qualities": [ [ "CUT", 1 ], [ "BUTCHER", -24 ] ], @@ -348,6 +366,7 @@ "material": [ "budget_steel", "wood" ], "techniques": [ "WIDE", "WBLOCK_1" ], "volume": "2500 ml", + "longest_side": "180 cm", "bashing": 29, "cutting": 11, "qualities": [ [ "CUT", 1 ], [ "BUTCHER", -24 ] ], @@ -366,6 +385,7 @@ "material": [ "aluminum", "wood" ], "techniques": [ "WIDE", "WBLOCK_1" ], "volume": "2500 ml", + "longest_side": "180 cm", "bashing": 12, "cutting": 2, "to_hit": 1, @@ -385,6 +405,7 @@ "material": [ "steel" ], "techniques": [ "IMPALE", "WIDE", "WBLOCK_1" ], "volume": "2250 ml", + "longest_side": "180 cm", "bashing": 6, "cutting": 40, "flags": [ "POLEARM", "REACH_ATTACK", "SHEATH_SPEAR" ], @@ -405,6 +426,7 @@ "material": [ "wood" ], "techniques": [ "WBLOCK_1" ], "volume": "1 L", + "longest_side": "80 cm", "cutting": 11, "thrown_damage": [ { "damage_type": "bash", "amount": 5 }, { "damage_type": "stab", "amount": 11 } ], "flags": [ "SPEAR", "SHEATH_SPEAR", "JAVELIN" ], @@ -424,6 +446,7 @@ "material": [ "wood", "iron" ], "techniques": [ "WBLOCK_1" ], "volume": "1 L", + "longest_side": "80 cm", "bashing": 5, "cutting": 19, "thrown_damage": [ { "damage_type": "bash", "amount": 5 }, { "damage_type": "stab", "amount": 17 } ], @@ -440,6 +463,7 @@ "description": "This is a medieval weapon consisting of a wood shaft with a fire hardened point.", "weight": "2300 g", "volume": "3500 ml", + "longest_side": "300 cm", "price": 10000, "price_postapoc": 750, "bashing": 9, @@ -460,6 +484,7 @@ "description": "This is a medieval weapon consisting of a wood shaft tipped with a copper spearhead.", "weight": "2500 g", "volume": "3500 ml", + "longest_side": "300 cm", "price": 15000, "price_postapoc": 1000, "bashing": 9, @@ -480,6 +505,7 @@ "description": "This is a medieval weapon consisting of a wood shaft tipped with an iron spearhead.", "weight": "2500 g", "volume": "3500 ml", + "longest_side": "300 cm", "price": 40000, "price_postapoc": 5000, "bashing": 9, @@ -499,6 +525,7 @@ "description": "This is a dull, cheaply made replica of a medieval weapon consisting of a wood shaft tipped with an iron spearhead.", "weight": "2000 g", "volume": "3500 ml", + "longest_side": "300 cm", "price": 4000, "price_postapoc": 500, "to_hit": 1, @@ -520,6 +547,7 @@ "description": "This is a medieval weapon consisting of a wood shaft tipped with an iron spearhead. The head seems to be pretty dull, and the whole thing feels poorly made.", "weight": "2500 g", "volume": "3500 ml", + "longest_side": "300 cm", "price": 40000, "price_postapoc": 1250, "bashing": 25, @@ -539,6 +567,7 @@ "description": "A pole weapon with a curving single-edged blade. Its blade bears some superficial resemblance to that of an agricultural scythe from which it likely evolved.", "weight": "3013 g", "volume": "3250 ml", + "longest_side": "150 cm", "price": 16000, "price_postapoc": 2500, "bashing": 17, @@ -557,6 +586,7 @@ "description": "A well-made spear with a bronze head, Greek in origin.", "weight": "1598 g", "volume": "3500 ml", + "longest_side": "180 cm", "price": 10000, "price_postapoc": 3500, "to_hit": 1, @@ -577,6 +607,7 @@ "description": "This is a bronze polearm that originated in the Shang dynasty of China, if not earlier. It combines a spear head with the perpendicular blade of the earlier ge or dagger-axe.", "weight": "3175 g", "volume": "3750 ml", + "longest_side": "180 cm", "price": 50000, "price_postapoc": 3500, "bashing": 11, @@ -594,6 +625,7 @@ "description": "A stout wooden pole with a sharp stone spearhead.", "weight": "1098 g", "volume": "1250 ml", + "longest_side": "180 cm", "price": 1300, "price_postapoc": 50, "to_hit": 1, From 96fac079ad8d7f7c3a4e7c9e66be0eefef22fbf9 Mon Sep 17 00:00:00 2001 From: cass-wedson <58050969+cass-wedson@users.noreply.github.com> Date: Thu, 25 Jun 2020 11:42:55 -0500 Subject: [PATCH 102/206] Light survivor mask consumes charges on activation --- data/json/items/tool_armor.json | 1 - 1 file changed, 1 deletion(-) diff --git a/data/json/items/tool_armor.json b/data/json/items/tool_armor.json index e4905f29d4478..b5c89e26b1e6a 100644 --- a/data/json/items/tool_armor.json +++ b/data/json/items/tool_armor.json @@ -1359,7 +1359,6 @@ "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "gasfilter_m": 100 } } ], "ammo": "gasfilter_m", "initial_charges": 100, - "charges_per_use": 1, "use_action": [ "GASMASK" ], "material": [ "kevlar_layered", "cotton" ], "symbol": "[", From 15b86f9538160f990af1142d6ad12494c8a733cb Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Thu, 25 Jun 2020 14:38:25 -0600 Subject: [PATCH 103/206] Use correct ammo type for hexamine stove Fix #41539 --- data/json/items/tool/cooking.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/tool/cooking.json b/data/json/items/tool/cooking.json index f4de995bedf8b..f0a9298c97859 100644 --- a/data/json/items/tool/cooking.json +++ b/data/json/items/tool/cooking.json @@ -314,7 +314,7 @@ "color": "light_gray", "ammo": [ "esbit" ], "sub": "hotplate", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "hexamine": 50 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "esbit": 50 } } ], "initial_charges": 50, "max_charges": 50, "charges_per_use": 1, From 58d73ac4f6b66f7dbcd7baa99b5e71205e0bae6f Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Thu, 25 Jun 2020 14:13:14 -0700 Subject: [PATCH 104/206] Allow randomizing scenario and profession --- data/raw/keybindings.json | 14 ++++++++++++++ src/newcharacter.cpp | 6 ++++++ 2 files changed, 20 insertions(+) diff --git a/data/raw/keybindings.json b/data/raw/keybindings.json index d5c5154fa7a23..5a0d798c2df3e 100644 --- a/data/raw/keybindings.json +++ b/data/raw/keybindings.json @@ -1108,6 +1108,20 @@ "name": "Toggle sorting order", "bindings": [ { "input_method": "keyboard", "key": "s" } ] }, + { + "type": "keybinding", + "id": "RANDOMIZE", + "category": "NEW_CHAR_PROFESSIONS", + "name": "Randomize profession", + "bindings": [ { "input_method": "keyboard", "key": "*" } ] + }, + { + "type": "keybinding", + "id": "RANDOMIZE", + "category": "NEW_CHAR_SCENARIOS", + "name": "Randomize scenario", + "bindings": [ { "input_method": "keyboard", "key": "*" } ] + }, { "type": "keybinding", "id": "SORT", diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index fc05a757fb91a..ea0f8821c4a14 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -1369,6 +1369,7 @@ tab_direction set_profession( avatar &u, points_left &points, ctxt.register_action( "HELP_KEYBINDINGS" ); ctxt.register_action( "FILTER" ); ctxt.register_action( "QUIT" ); + ctxt.register_action( "RANDOMIZE" ); bool recalc_profs = true; int profs_length = 0; @@ -1689,6 +1690,8 @@ tab_direction set_profession( avatar &u, points_left &points, recalc_profs = true; } else if( action == "QUIT" && query_yn( _( "Return to main menu?" ) ) ) { retval = tab_direction::QUIT; + } else if( action == "RANDOMIZE" ) { + cur_id = rng( 0, profs_length - 1 ); } } while( retval == tab_direction::NONE ); @@ -1990,6 +1993,7 @@ tab_direction set_scenario( avatar &u, points_left &points, ctxt.register_action( "HELP_KEYBINDINGS" ); ctxt.register_action( "FILTER" ); ctxt.register_action( "QUIT" ); + ctxt.register_action( "RANDOMIZE" ); bool recalc_scens = true; int scens_length = 0; @@ -2280,6 +2284,8 @@ tab_direction set_scenario( avatar &u, points_left &points, recalc_scens = true; } else if( action == "QUIT" && query_yn( _( "Return to main menu?" ) ) ) { retval = tab_direction::QUIT; + } else if( action == "RANDOMIZE" ) { + cur_id = rng( 0, scens_length - 1 ); } } while( retval == tab_direction::NONE ); From 937fb094196fe0c333c43d548241cf441705ef62 Mon Sep 17 00:00:00 2001 From: KorGgenT Date: Thu, 25 Jun 2020 22:51:41 -0400 Subject: [PATCH 105/206] fix magiclysm breach test --- data/mods/Magiclysm/traits/manatouched.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/traits/manatouched.json b/data/mods/Magiclysm/traits/manatouched.json index 6941c40c94613..138cb2e0af7e4 100644 --- a/data/mods/Magiclysm/traits/manatouched.json +++ b/data/mods/Magiclysm/traits/manatouched.json @@ -78,7 +78,7 @@ "passive_mods": { "str_mod": -2 }, "points": -1, "description": "Your body is unnaturally weak. -2 Strength.", - "category": [ "MANATOUCHED" ], + "category": [ "MANATOUCHED", "MOUSE", "RAT", "BIRD", "SLIME" ], "cancels": [ "STR_UP_2", "STR_UP_3", "STR_UP_4", "STR_ALPHA" ] }, { @@ -121,6 +121,12 @@ "copy-from": "ALBINO", "extend": { "category": [ "MANATOUCHED" ] } }, + { + "type": "mutation", + "id": "BIOLUM0", + "copy-from": "BIOLUM0", + "extend": { "category": [ "MANATOUCHED" ] } + }, { "type": "mutation", "id": "ROT2", From 7ec22e8a83baada72f5924896079296f06749e4d Mon Sep 17 00:00:00 2001 From: Brett Dong Date: Fri, 26 Jun 2020 13:08:40 +0800 Subject: [PATCH 106/206] Routine i18n updates on 26 Jun 2020 --- lang/extract_json_strings.py | 4 +- lang/po/cataclysm-dda.pot | 3297 ++++++++--- lang/po/de.po | 6585 +++++++++++++++------ lang/po/es_AR.po | 10051 ++++++++++++++++++++++++--------- lang/po/es_ES.po | 6571 +++++++++++++++------ lang/po/ja.po | 7433 ++++++++++++++++++------ lang/po/pl.po | 6953 +++++++++++++++++------ lang/po/ru.po | 9946 ++++++++++++++++++++++---------- lang/po/zh_CN.po | 6610 ++++++++++++++++------ lang/po/zh_TW.po | 6460 ++++++++++++++++----- 10 files changed, 47630 insertions(+), 16280 deletions(-) diff --git a/lang/extract_json_strings.py b/lang/extract_json_strings.py index ba5b05020b5d4..b1313bd274a1d 100755 --- a/lang/extract_json_strings.py +++ b/lang/extract_json_strings.py @@ -589,7 +589,7 @@ def extract_dynamic_line_optional(line, member, outfile): if member in line: extract_dynamic_line(line[member], outfile) -dynamic_line_string_keys = { +dynamic_line_string_keys = [ # from `simple_string_conds` in `condition.h` "u_male", "u_female", "npc_male", "npc_female", "has_no_assigned_mission", "has_assigned_mission", "has_many_assigned_missions", @@ -603,7 +603,7 @@ def extract_dynamic_line_optional(line, member, outfile): "has_pickup_list", "is_by_radio", "has_reason", # yes/no strings for complex conditions, 'and' list "yes", "no", "and" -} +] def extract_dynamic_line(line, outfile): if type(line) == list: diff --git a/lang/po/cataclysm-dda.pot b/lang/po/cataclysm-dda.pot index 80ecee2f3d096..3863d4ff443f4 100644 --- a/lang/po/cataclysm-dda.pot +++ b/lang/po/cataclysm-dda.pot @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-13 17:48+0800\n" +"POT-Creation-Date: 2020-06-26 12:50+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -254,7 +254,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -5317,7 +5316,6 @@ msgstr[1] "" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -5391,7 +5389,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "" @@ -6724,70 +6721,6 @@ msgstr[1] "" msgid "Seeing this is a bug." msgstr "" -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "" -msgstr[1] "" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -7046,7 +6979,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "" @@ -8787,7 +8719,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "" @@ -10506,6 +10437,17 @@ msgid "" "heat." msgstr "" +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -16592,7 +16534,6 @@ msgstr[1] "" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "" @@ -16912,7 +16853,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "" @@ -17019,7 +16959,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "" @@ -17906,7 +17845,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -18772,7 +18710,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "" @@ -19488,6 +19425,19 @@ msgid "" "A large sleeping bag that covers you head to toe. This one is medium weight." msgstr "" +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -20920,61 +20870,15 @@ msgid "" msgstr "" #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" msgstr[0] "" msgstr[1] "" +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "" - -#: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test power armor'} -#: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." msgstr "" #: lang/json/BATTERY_from_json.py @@ -21396,8 +21300,8 @@ msgid_plural "Aero-Evaporator CBMs" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -22550,8 +22454,8 @@ msgid_plural "Internal Furnace CBMs" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel " @@ -22658,8 +22562,8 @@ msgid_plural "Wind Turbine CBMs" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -22667,20 +22571,6 @@ msgid "" "power level." msgstr "" -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire " -"cutters. They serve no purpose on their own, but are required for crafting " -"bionics." -msgstr "" - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -22737,14 +22627,41 @@ msgid "" "from installation and you don't have the codes to reset the timer." msgstr "" +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire " +"cutters. They serve no purpose on their own, but are required for crafting " +"bionics." +msgstr "" + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -24232,8 +24149,8 @@ msgstr[1] "" #. ~ Description for {'str': 'a smoking device and a source of flame', 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py #: lang/json/TOOL_from_json.py @@ -30687,6 +30604,19 @@ msgid "" "away." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -31019,34 +30949,6 @@ msgid "" " - F. \"." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -34491,16 +34393,16 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "" #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" +msgid "black tea" +msgid_plural "black teas" msgstr[0] "" msgstr[1] "" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves " -"of the tea plant /Camellia sinensis/." +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -34549,6 +34451,33 @@ msgstr[1] "" msgid "Fancy mineral water, so fancy it makes you feel fancy just holding it." msgstr "" +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia " +"sinensis/. Green tea has a lighter, fresher taste than black and is " +"traditionally preferred in Asian cultures." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -40112,7 +40041,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "" @@ -41084,16 +41012,42 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "" #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" +msgid "black tea bag" +msgid_plural "black tea bags" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'black tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'green tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'fruit tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -42014,18 +41968,31 @@ msgid "" msgstr "" #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" +msgid "black tea leaf" +msgid_plural "black tea leaves" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " "just eat them raw. They aren't too filling though." msgstr "" +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "tomato" msgid_plural "tomatoes" @@ -45552,7 +45519,7 @@ msgid_plural "scream mushrooms" msgstr[0] "" msgstr[1] "" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -45739,113 +45706,6 @@ msgid "" "see this? We will not permit you to join us while we are modded out." msgstr "" -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when " -"eaten raw." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do " -"not drink!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "" - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -46703,19 +46563,6 @@ msgstr[1] "" msgid "An aluminum can, like what soda comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -46729,19 +46576,6 @@ msgid "" "laminate. It has a threaded cap for easy resealing." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate. " -"This one is open and its contents will spoil." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" msgid_plural "vacuum-packed bags" @@ -46764,19 +46598,6 @@ msgstr[1] "" msgid "A small tin can, like what tuna comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -46788,19 +46609,6 @@ msgstr[1] "" msgid "A medium tin can, like what soup comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -46875,17 +46683,6 @@ msgstr[1] "" msgid "A small, vacuum formed cup." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -47053,7 +46850,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "" @@ -47152,7 +46948,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of " @@ -47281,19 +47076,6 @@ msgid "" "food." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -47883,6 +47665,32 @@ msgid "" "Felt patches, bundled tightly together for storage. Disassemble to unpack." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "bundle of planks" +msgid_plural "bundles of planks" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'bundle of planks', 'str_pl': 'bundles of planks'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Ten construction planks securely lashed together with a rope. Disassemble " +"to unpack." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "bundle of stout branches" +msgid_plural "bundles of stout branches" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'bundle of stout branches', 'str_pl': 'bundles of stout branches'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Ten stout branches securely lashed together with a rope. Disassemble to " +"untie them." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "t-substrate sample" msgid_plural "t-substrate samples" @@ -49050,8 +48858,8 @@ msgid_plural "lotus flowers" msgstr[0] "" msgstr[1] "" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -55002,7 +54810,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "" @@ -55711,19 +55518,6 @@ msgid "" "from India designed to be concealed under and against the palm." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -55964,7 +55758,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -56171,7 +55964,13 @@ msgid "" "been used for commercial wrapping or for weather-sealing a home." msgstr "" -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -57506,6 +57305,19 @@ msgid "" "until it floats. Then attach oars or a motor to get the boat to move." msgstr "" +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -58431,7 +58243,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "" @@ -58818,8 +58629,8 @@ msgid_plural "workbenches" msgstr[0] "" msgstr[1] "" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and " @@ -59000,6 +58811,17 @@ msgstr[1] "" msgid "A metal faucet that can be attached to a water tank for easy access." msgstr "" +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "wooden wheel mount" +msgid_plural "wooden wheel mounts" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'wooden wheel mount'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of wood with holes suitable for a bike wheel." +msgstr "" + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "light wheel mount" msgid_plural "light wheel mounts" @@ -59608,6 +59430,18 @@ msgstr[1] "" msgid "It has given you an answer, but you are yet to ask anything." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -59701,7 +59535,20 @@ msgstr[1] "" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." +msgid "A powerful electromagnet made from a room temperature superconductor." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." msgstr "" #: lang/json/GENERIC_from_json.py @@ -60383,6 +60230,28 @@ msgid "" "combat: Shii-Cho." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -60405,7 +60274,7 @@ msgstr[1] "" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." msgstr "" @@ -60527,7 +60396,7 @@ msgstr[1] "" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." +"Crystalized mana in powdered form. It faintly pulses with arcane energy." msgstr "" #: lang/json/GENERIC_from_json.py @@ -61904,140 +61773,6 @@ msgid "" "much more expensive." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional " -"lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "" - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "" @@ -65331,28 +65066,6 @@ msgid "" "tips." msgstr "" -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "" - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "" - #: lang/json/MOD_INFO_from_json.py src/color.cpp #: src/color.cpp msgid "default" @@ -65414,8 +65127,9 @@ msgstr "" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." msgstr "" #: lang/json/MOD_INFO_from_json.py @@ -65618,16 +65332,6 @@ msgstr "" msgid "Allows stats to raise via skill progression." msgstr "" -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "" - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "" @@ -67548,6 +67252,17 @@ msgid "" "about rapidly and the mouths form a chorus of groaning screams." msgstr "" +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -69600,6 +69315,19 @@ msgstr "" msgid "Lightning arcs from the leech stalk!" msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -70189,6 +69917,92 @@ msgid "" "for patient to assist." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo " +"seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -73045,6 +72859,89 @@ msgid_plural "magenta and green hatchlings" msgstr[0] "" msgstr[1] "" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs, " +"broad shoulders and a pointed beak. Its tattered feathers are stained with " +"black, sticky liquid." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Spinosaurus zombie" msgid_plural "Spinosaurus zombies" @@ -73058,6 +72955,20 @@ msgid "" "black eyes, and a tattered sail on its back." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a " +"huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -73069,6 +72980,20 @@ msgstr[1] "" msgid "Massive piles of ragged, stinking flesh lifting enormous teeth." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a " +"huge bipedal dinosaur with feathery edges. The head looks big, lots of big " +"teeth would fit in it." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "S-Rex" msgid_plural "S-Rexes" @@ -73082,6 +73007,100 @@ msgid "" "dripping with black goo." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Deinonychus zombie" msgid_plural "Deinonychus zombies" @@ -73096,6 +73115,73 @@ msgid "" "sickle-like claw." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a " +"medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms, " +"a long tail, and long sharp scythe-like claws." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent " +"bony crests on its head with ragged strips of ripped flesh hanging down like " +"a frill." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" msgid_plural "improvised SMG turrets" @@ -73835,18 +73921,6 @@ msgid "" "traditional forces." msgstr "" -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "" - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -74213,19 +74287,6 @@ msgid "" "chitin fitted to a thin mesh. You could put this on a friendly horse." msgstr "" -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "" - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "" @@ -74973,6 +75034,22 @@ msgstr "" msgid "This fake spell occurs on cranial bomb activation. Likely fatal." msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "" @@ -75376,8 +75453,8 @@ msgstr "" msgid "Debug Full Protection" msgstr "" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "" @@ -75865,10 +75942,10 @@ msgstr "" msgid "Jolt" msgstr "" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py #: lang/json/mutation_category_from_json.py msgid "a crackle" @@ -75938,6 +76015,31 @@ msgstr "" msgid "Wall of Fog" msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "" + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "" @@ -76083,56 +76185,6 @@ msgid "" "have this spell you probably debugged it in." msgstr "" -#: lang/json/SPELL_from_json.py -msgid "Pew, Pew" -msgstr "" - -#. ~ Description for Pew, Pew -#: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "" - -#. ~ Description for The Floor is Lava -#: lang/json/SPELL_from_json.py -msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" -msgstr "" - -#. ~ Description for Sports Training Montage -#: lang/json/SPELL_from_json.py -msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "" - -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" -msgstr "" - -#. ~ Description for Summon Mummy -#: lang/json/SPELL_from_json.py -msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." -msgstr "" - #: lang/json/TOOLMOD_from_json.py msgid "reactor core expansion device" msgid_plural "reactor core expansion devices" @@ -78369,26 +78421,33 @@ msgid "" msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater Girdles of Pockets'} +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" msgstr[0] "" msgstr[1] "" +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" + #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" msgid_plural "Belts of Weaponry" @@ -82840,13 +82899,11 @@ msgstr[1] "" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "" #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "" @@ -84202,7 +84259,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -84216,7 +84272,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -84452,6 +84507,30 @@ msgid "" "shovel but really can't compare to a real shovel." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than " +"raking leaves." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -84477,6 +84556,28 @@ msgstr[1] "" msgid "This is a digging tool. Use it to dig pits adjacent to your location." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -85183,6 +85284,12 @@ msgid "" "the right tools, you could use this for metalworking." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -85317,6 +85424,18 @@ msgid "" "metalworking fabrication recipes." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -85475,6 +85594,19 @@ msgid "" "and place on the ground." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -87287,7 +87419,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -87850,6 +87981,12 @@ msgid "" "but you could use it to fire anything made of clay." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -88009,7 +88146,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "" @@ -88236,7 +88372,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -88277,7 +88412,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -88674,14 +88808,14 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" +msgid "pseudo atomic butter churn" +msgid_plural "pseudo atomic butter churns" msgstr[0] "" msgstr[1] "" #: lang/json/TOOL_from_json.py -msgid "pseudo atomic butter churn" -msgid_plural "pseudo atomic butter churns" +msgid "precision solderers" +msgid_plural "precision solderers" msgstr[0] "" msgstr[1] "" @@ -88875,6 +89009,21 @@ msgid "" "specialized tools." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -90098,75 +90247,6 @@ msgid "" "magical metals into their workable ingot form." msgstr "" -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "" - #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" msgid_plural "yokes and harnesses" @@ -91390,10 +91470,6 @@ msgstr "" msgid "mana energy" msgstr "" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "" @@ -92783,19 +92859,6 @@ msgstr "" msgid "Wind Turbines" msgstr "" -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" - #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" msgstr "" @@ -92842,6 +92905,19 @@ msgid "" "and fast." msgstr "" +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" + #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" msgid_plural "Ionic Overload Generators" @@ -93195,7 +93271,8 @@ msgid "Merciful" msgstr "" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp +#: src/scenario.cpp msgid "All" msgstr "" @@ -95666,7 +95743,7 @@ msgstr "" msgid "You mount your steed." msgstr "" -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "" @@ -98098,66 +98175,6 @@ msgstr "" msgid "The gum webs constrict your movement." msgstr "" -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "" - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "" - #: lang/json/faction_from_json.py msgid "Your Followers" msgstr "" @@ -102846,7 +102863,6 @@ msgid "" msgstr "" #: lang/json/gun_from_json.py -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py #: lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" @@ -103004,6 +103020,7 @@ msgid "" msgstr "" #: lang/json/gun_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py #: lang/json/gunmod_from_json.py #: src/item.cpp msgctxt "gun_type_type" @@ -103523,8 +103540,8 @@ msgid "" msgstr "" #: lang/json/gun_from_json.py -msgid "MAS 223" -msgid_plural "MAS 223" +msgid "MAS .223" +msgid_plural "MAS .223" msgstr[0] "" msgstr[1] "" @@ -106442,6 +106459,18 @@ msgid "" "have to suffice." msgstr "" +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "" + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -107113,6 +107142,16 @@ msgstr "" msgid "trilaser" msgstr "" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -107898,6 +107937,12 @@ msgid "" "reliability." msgstr "" +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "" +msgstr[1] "" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -107977,22 +108022,6 @@ msgstr "" msgid "Fake gun that fires barbed javelins." msgstr "" -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "" - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -109870,16 +109899,6 @@ msgid "" "replacing the iron sights. Increases accuracy and weight." msgstr "" -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "" - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "" @@ -114647,6 +114666,15 @@ msgstr "" msgid "Zombie trap." msgstr "" +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "" + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -116216,6 +116244,21 @@ msgid "" "Lasts 3 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to " +"start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "" @@ -116370,6 +116413,22 @@ msgid "" "+2 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity " +"presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "" @@ -116407,6 +116466,33 @@ msgid "" "Blocked damage reduced by 50% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -116455,6 +116541,32 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "" @@ -116694,6 +116806,30 @@ msgid "" "+1 Dodge attempts, blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "" @@ -116732,6 +116868,22 @@ msgid "" "Blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win " +"this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% " +"of Strength.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "" @@ -116798,6 +116950,34 @@ msgid "" "Last 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack " +"again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "" @@ -116869,6 +117049,37 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi-Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi-Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "" @@ -117017,6 +117228,21 @@ msgid "" "25% of Perception but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents " +"approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "" @@ -117170,6 +117396,22 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body " +"fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "" @@ -117223,6 +117465,21 @@ msgid "" "Accuracy increased by 25% of Strength but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your " +"opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "" @@ -117278,6 +117535,22 @@ msgid "" "50% of Perception." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can " +"strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch " +"(Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "" @@ -117391,6 +117664,32 @@ msgid "" "armor, +Perception fire armor." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2 " +"times." +msgstr "" + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "" @@ -117429,6 +117728,21 @@ msgid "" "+2 Blocks attempts, +1 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "" @@ -117466,6 +117780,19 @@ msgid "" "Lasts 3 turns. Stacks 4 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "" @@ -117583,6 +117910,20 @@ msgid "" "Stacks 2 times. Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at " +"bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "" @@ -117632,6 +117973,33 @@ msgid "" "Lasts 6 turns. Stacks 6 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron " +"skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "" @@ -117969,6 +118337,35 @@ msgid "" "Lasts 1 turn. Stacks 2 times" msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Quicksilver Motion" +msgstr "" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and " +"boundless confidence combine to allow you to make a fast, bold move that " +"catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome " +"physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Hylian Swordsmanship" msgstr "" @@ -118061,6 +118458,20 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Iron Heart" msgstr "" @@ -118161,6 +118572,48 @@ msgstr "" msgid "%s is about to challenge someone to a battle." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Setting Sun" msgstr "" @@ -118185,6 +118638,36 @@ msgstr "" msgid "%s shifts their weight and assumes a new stance." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw " +"off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and " +"\"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend " +"and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Shii-Cho" msgstr "" @@ -118212,10 +118695,6 @@ msgstr "" msgid "%s places one foot back and hold their weapon vertically." msgstr "" -#: lang/json/martial_art_from_json.py -msgid "Determination" -msgstr "" - #. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' #: lang/json/martial_art_from_json.py #, no-python-format @@ -118264,6 +118743,197 @@ msgid "" "+1 block attempts, +1 block effectiveness." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your " +"weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of " +"the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to " +"avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a " +"short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves " +"you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to " +"die.\n" +"\n" +"+5% critical hit chance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike " +"first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no " +"different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a " +"herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "" @@ -118749,7 +119419,7 @@ msgid "Emulsified Hydrogel" msgstr "" #: lang/json/material_from_json.py -msgid "pupled" +msgid "pulped" msgstr "" #: lang/json/material_from_json.py @@ -120720,7 +121390,7 @@ msgstr "" #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20 " +"We could use some 3 liter jars to preserve our produce. Can you bring me 10 " "large three liter jars? I'll give you some preserves in exchange." msgstr "" @@ -122446,6 +123116,87 @@ msgstr "" msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check " +"it out, I'll owe you a favor." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "" @@ -126076,6 +126827,7 @@ msgid "Reflex Photophore" msgstr "" #. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} #: lang/json/mutation_from_json.py msgid "" "A photophore has grown from your head. You can't consciously control it, " @@ -126083,6 +126835,10 @@ msgid "" "physiological state." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "" @@ -126095,13 +126851,31 @@ msgid "" "mating season." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." +msgid "You can make your photophore glow brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." msgstr "" #: lang/json/mutation_from_json.py @@ -126215,9 +126989,11 @@ msgstr "" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." msgstr "" #: lang/json/mutation_from_json.py @@ -126840,7 +127616,10 @@ msgstr "" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." msgstr "" #: lang/json/mutation_from_json.py @@ -126849,9 +127628,10 @@ msgstr "" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to " -"recover only a third of usual HP." +"Your health recovery is severely impaired. Your HP whilst asleep as well as " +"your broken limbs heal at 33% the regular rate." msgstr "" #: lang/json/mutation_from_json.py @@ -126860,9 +127640,10 @@ msgstr "" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth " -"of usual HP." +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP " +"whilst asleep as well as your broken limbs heal at 10% the regular rate." msgstr "" #: lang/json/mutation_from_json.py @@ -127567,8 +128348,10 @@ msgstr "" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not sleeping." +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." msgstr "" #: lang/json/mutation_from_json.py @@ -127577,7 +128360,11 @@ msgstr "" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster " +"whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16 " +"times faster than usual." msgstr "" #: lang/json/mutation_from_json.py @@ -127586,7 +128373,9 @@ msgstr "" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." msgstr "" #: lang/json/mutation_from_json.py @@ -131643,7 +132432,8 @@ msgstr "" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." msgstr "" #: lang/json/mutation_from_json.py @@ -132894,7 +133684,8 @@ msgstr "" #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." msgstr "" #: lang/json/mutation_from_json.py @@ -141533,6 +142324,116 @@ msgid "" "time before the horrors patrolling the skies shot you down." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever dream." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever dream." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -141701,8 +142602,9 @@ msgstr "" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -141715,8 +142617,9 @@ msgstr "" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -142959,6 +143862,226 @@ msgid "" "find some other use." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse " +"won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse " +"won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for " +"acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for " +"acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -144625,7 +145748,7 @@ msgid "build a metalworking forge" msgstr "" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." +msgid "Let's build an anvil and crucible to increase our crafting options." msgstr "" #: lang/json/recipe_from_json.py @@ -166767,6 +167890,10 @@ msgstr "" msgid "Middle of Nowhere" msgstr "" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "" @@ -168103,11 +169230,11 @@ msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "" #: lang/json/talk_topic_from_json.py -#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp +#: lang/json/talk_topic_from_json.py src/action.cpp +#: src/activity_handlers.cpp src/avatar.cpp #: src/avatar.cpp src/avatar_action.cpp -#: src/avatar_action.cpp #: src/avatar_action.cpp src/crafting.cpp -#: src/game.cpp +#: src/crafting.cpp src/game.cpp #: src/handle_action.cpp #: src/handle_action.cpp src/handle_liquid.cpp #: src/handle_liquid.cpp src/iexamine.cpp @@ -179522,6 +180649,18 @@ msgstr "" msgid "Got it." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "" @@ -179535,11 +180674,11 @@ msgid "Hey." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Yes?" +msgid "Good to see you." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Good to see you." +msgid "About those jobs…" msgstr "" #: lang/json/talk_topic_from_json.py @@ -179551,7 +180690,7 @@ msgid "Want help with something else?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." +msgid "Lets set a combat strategy" msgstr "" #: lang/json/talk_topic_from_json.py @@ -179605,6 +180744,10 @@ msgstr "" msgid "Anything on your mind?" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "" @@ -181391,10 +182534,6 @@ msgstr "" msgid " blocks %s" msgstr "" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -184126,6 +185265,62 @@ msgstr "" msgid " quickly sweeps through %s and those nearby" msgstr "" +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "" @@ -191673,6 +192868,11 @@ msgstr "" msgid "A wooden board that keeps the water out of your boat." msgstr "" +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -192105,14 +193305,19 @@ msgid "" msgstr "" #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" +msgid "flimsy wooden seat" msgstr "" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "" +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "" @@ -192312,6 +193517,15 @@ msgid "" "extending the time until the food spoils." msgstr "" +#. ~ Description for {'str': 'wooden wheel mount'} +#: lang/json/vehicle_part_from_json.py +msgid "A piece of wood with holes suitable for a bike or motorbike wheel." +msgstr "" + +#: lang/json/vehicle_part_from_json.py +msgid "wooden wheel mount (steerable)" +msgstr "" + #: lang/json/vehicle_part_from_json.py msgid "light wheel mount (steerable)" msgstr "" @@ -194868,7 +196082,7 @@ msgstr "" msgid "< [%s] Sort: %s >" msgstr "" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "" @@ -197975,6 +199189,10 @@ msgstr "" msgid "Accuracy" msgstr "" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "" @@ -204218,138 +205436,182 @@ msgid "Liked" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" msgstr "" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" msgstr "" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" msgstr "" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" msgstr "" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" msgstr "" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" msgstr "" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" msgstr "" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" msgstr "" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" msgstr "" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" msgstr "" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" msgstr "" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" msgstr "" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" msgstr "" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" msgstr "" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" msgstr "" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" msgstr "" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "" @@ -206303,6 +207565,11 @@ msgctxt "action" msgid "open" msgstr "" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -207812,11 +209079,24 @@ msgstr "" msgid "You cannot haul items here." msgstr "" +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -209188,11 +210468,6 @@ msgstr "" msgid "The %s is in the way!" msgstr "" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -211646,6 +212921,10 @@ msgstr "" msgid "Splint broken limbs" msgstr "" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "" @@ -211672,6 +212951,76 @@ msgstr "" msgid " doesn't have limbs that require splinting." msgstr "" +#: src/iexamine.cpp +msgid "You don't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid " doesn't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" + #: src/iexamine.cpp #, c-format msgid "This mill contains %s, which can't be milled!" @@ -212643,7 +213992,7 @@ msgstr "" msgid "There are no available choices" msgstr "" -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "" @@ -213510,10 +214859,6 @@ msgstr "" msgid "Weight capacity bonus: " msgstr "" -#: src/item.cpp -msgid "Storage: " -msgstr "" - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "" @@ -213779,6 +215124,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "" +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "" + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "" + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "" + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "" + +#: src/item.cpp +msgid "Fuel: " +msgstr "" + #: src/item.cpp #, c-format msgid "Using: %s" @@ -213802,9 +215175,19 @@ msgstr "" msgid "* This item is not repairable." msgstr "" +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "" + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a list of items. +#. ~ Bold text in the middle makes it easier to see where the second list starts. +#: src/item.cpp +#, c-format +msgid "" +"Disassembly takes %1$s, requires %2$s and might yield: %3$s." msgstr "" #: src/item.cpp @@ -214512,8 +215895,9 @@ msgstr "" msgid "That %s doesn't have room to expand." msgstr "" -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" msgstr "" @@ -214637,6 +216021,56 @@ msgstr "" msgid "Execute which action?" msgstr "" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "" + +#: src/item_contents.cpp +msgid " item, " +msgstr "" + +#: src/item_contents.cpp +msgid " category, " +msgstr "" + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "" + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "" + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "" + +#: src/item_contents.cpp +msgid "item id" +msgstr "" + +#: src/item_contents.cpp +msgid "item category" +msgstr "" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "" + #: src/item_contents.cpp msgid "is not a container" msgstr "" @@ -214677,6 +216111,11 @@ msgstr "" msgid "Result of 100 spawns:" msgstr "" +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "" + #: src/item_location.cpp msgid "inventory" msgstr "" @@ -214858,6 +216297,34 @@ msgstr "" msgid "not enough space" msgstr "" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "" + #: src/itype.h msgid "click." msgstr "" @@ -214925,14 +216392,6 @@ msgstr "" msgid " takes some antibiotics." msgstr "" -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "" - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "" - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -220501,6 +221960,10 @@ msgstr "" msgid "Intermediate" msgstr "" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "" @@ -227866,12 +229329,6 @@ msgstr "" msgid "You feel bugs crawl over your skin." msgstr "" -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "" -msgstr[1] "" - #: src/mutation.cpp #, c-format msgid "Your %s is destroyed!" @@ -230585,6 +232042,14 @@ msgstr "" msgid "Pulp Adjacent" msgstr "" +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "" + #: src/options.cpp msgid "Auto mining" msgstr "" @@ -233217,6 +234682,10 @@ msgstr "" msgid "Very hot!" msgstr "" +#: src/panels.cpp +msgid "Comfortable" +msgstr "" + #: src/panels.cpp msgid "Very cold!" msgstr "" @@ -234658,6 +236127,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "" +#: src/player_display.cpp +msgid "Starving" +msgstr "" + #: src/player_display.cpp msgid "Underfed" msgstr "" @@ -234751,6 +236224,10 @@ msgid "" "\n" msgstr "" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help " @@ -235866,6 +237343,14 @@ msgid_plural "%1$d tools with %2$s of %3$d or more." msgstr[0] "" msgstr[1] "" +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "" +msgstr[1] "" + #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp #, c-format @@ -239885,6 +241370,10 @@ msgstr "" msgid "--NO AVAILABLE MODS--" msgstr "" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "" diff --git a/lang/po/de.po b/lang/po/de.po index c6cd91e0ff9af..08c69d286bab3 100644 --- a/lang/po/de.po +++ b/lang/po/de.po @@ -30,7 +30,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-06 11:53+0800\n" +"POT-Creation-Date: 2020-06-23 10:06+0800\n" "PO-Revision-Date: 2018-04-26 14:47+0000\n" "Last-Translator: Wuzzy , 2020\n" "Language-Team: German (https://www.transifex.com/cataclysm-dda-translators/teams/2217/de/)\n" @@ -313,7 +313,6 @@ msgstr[0] "Stein" msgstr[1] "Steine" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -6278,7 +6277,6 @@ msgstr[1] "Gold" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -6366,7 +6364,6 @@ msgstr[0] "kleines Metallblech" msgstr[1] "kleine Metallbleche" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "Ein kleines Metallblech." @@ -7900,70 +7897,6 @@ msgstr[1] "" msgid "Seeing this is a bug." msgstr "Das ist ein Bug, der an sich nicht zu sehen sein sollte." -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "" -msgstr[1] "" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -8288,8 +8221,6 @@ msgstr[1] "Paar Ohrstöpsel" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear #. plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs -#. of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "Ohrstöpsel in Industriestärke. Sie passen ins Ohr." @@ -10281,8 +10212,6 @@ msgstr[0] "Paar Socken" msgstr[1] "Paar Socken" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of -#. socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "Socken. Sie gehören auf die Füße." @@ -12275,6 +12204,18 @@ msgid "" "heat." msgstr "" +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of +#. studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -18764,7 +18705,6 @@ msgstr[1] "" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "Deine Energierüstung aktiviert sich." @@ -19133,7 +19073,6 @@ msgstr[0] "Rucksack" msgstr[1] "Rucksäcke" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "" @@ -19244,7 +19183,6 @@ msgstr[0] "Aktentasche" msgstr[1] "Aktentaschen" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "Nützlich zum Transport von Geld, Dokumenten oder Schmuggelwaren." @@ -20246,7 +20184,6 @@ msgstr[0] "Schutzanzug" msgstr[1] "Schutzanzüge" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -21229,7 +21166,6 @@ msgstr[0] "langärmeliges Hemd" msgstr[1] "langärmelige Hemden" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "Ein langärmeliges Hemd." @@ -22021,6 +21957,19 @@ msgid "" "weight." msgstr "" +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "Cestus" +msgstr[1] "Cestusse" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -23502,61 +23451,15 @@ msgid "" msgstr "" #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" msgstr[0] "" msgstr[1] "" +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "" - -#: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test power armor'} -#: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." msgstr "" #: lang/json/BATTERY_from_json.py @@ -23983,8 +23886,8 @@ msgid_plural "Aero-Evaporator CBMs" msgstr[0] "Luftverdampfungs-KBM" msgstr[1] "Luftverdampfungs-KBMs" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -25145,8 +25048,8 @@ msgid_plural "Internal Furnace CBMs" msgstr[0] "Interner-Ofen-KBM" msgstr[1] "Interner-Ofen-KBMs" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel" @@ -25261,8 +25164,8 @@ msgid_plural "Wind Turbine CBMs" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -25270,19 +25173,6 @@ msgid "" "power level." msgstr "" -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire cutters." -" They serve no purpose on their own, but are required for crafting bionics." -msgstr "" - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -25339,14 +25229,40 @@ msgid "" "from installation and you don't have the codes to reset the timer." msgstr "" +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire cutters." +" They serve no purpose on their own, but are required for crafting bionics." +msgstr "" + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" msgstr[0] "Ionenüberlastungserzeuger-KBM" msgstr[1] "Ionenüberlastungserzeuger-KBMs" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -25518,6 +25434,35 @@ msgstr[1] "" msgid "template for a paperback nonfiction book" msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Generic Pulp Book" +msgid_plural "Generic Pulp Books" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Generic Pulp Book +#: lang/json/BOOK_from_json.py +msgid "" +"This is a template for pulp books. Which really all ought to be paperbacks," +" right?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Generic SciFi Book" +msgid_plural "Generic SciFi Books" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for paperback scifi books." +msgstr "" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for a hard cover scifi book." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "Homemaking Book" msgid_plural "Homemaking Books" @@ -26997,8 +26942,8 @@ msgstr[1] "" #. 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py lang/json/TOOL_from_json.py #: lang/json/furniture_from_json.py lang/json/skill_from_json.py @@ -28189,10 +28134,8 @@ msgstr[1] "Abenteuerromane" #: lang/json/BOOK_from_json.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." +"in the heart of the African continent." msgstr "" -"Die bewegende Erzählung vom Wettlauf gegen die Zeit nach der Suche nach " -"einer verlorenen Stadt im dunklen Herzen des afrikanischen Kontinents." #: lang/json/BOOK_from_json.py msgid "buddy novel" @@ -28209,32 +28152,6 @@ msgstr "" "Eine packende Erzählung über zwei Freunde, die mit dem Überleben in den " "Staßen von New York City kämpfen." -#: lang/json/BOOK_from_json.py -msgid "coming of age novel" -msgid_plural "coming of age novels" -msgstr[0] "Bildungsroman" -msgstr[1] "Bildungsromane" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." -msgstr "" -"Eine klassische Erzählung über das Erwachsenwerden. Sie zeigt die lustigen " -"und schmerzhaften Erfahrungen eines jungen Mannes mit dem Leben, der Liebe " -"und dem Sex." - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A graphic novel about a young girl living in Iran during the 1980's, seeing " -"the world change around her as Iraq invaded her country." -msgstr "" -"Ein Bilderroman über ein junges Mädchen, das im Iran während der 1980er lebt" -" und sieht, wie sich die Welt um sie herum verändert, während Irak ihr Land " -"erobert." - #: lang/json/BOOK_from_json.py msgid "crime novel" msgid_plural "crime novels" @@ -28367,77 +28284,6 @@ msgid "A detective investigates an unusual murder in a secluded location." msgstr "" "Ein Detektiv geht einem ungewöhnlichen Mord in einer abgelegenen Villa nach." -#: lang/json/BOOK_from_json.py -msgid "pulp novel" -msgid_plural "pulp novels" -msgstr[0] "Groschenroman" -msgstr[1] "Groschenromane" - -#. ~ Description for {'str': 'pulp novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "" -"Eine Erzählung über einen hartgesottenen Inspektor mit knallharter Action " -"und Intrige." - -#: lang/json/BOOK_from_json.py -msgid "Planet of the Murderous Squids that Time Forgot!" -msgid_plural "Planet of the Murderous Squids that Time Forgot!s" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for Planet of the Murderous Squids that Time Forgot! -#: lang/json/BOOK_from_json.py -msgid "" -"In this psychedelic adventure novel of cosmic exploration, an elderly " -"assassin discovers a planet too good to be true. Only once it is too late " -"does she discover the harrowing truth at the center of \"The Planet of the " -"Murderous Squids that Time Forgot!\"" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "The Great Capes of Metropolis" -msgid_plural "The Great Capes of Metropoliss" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for The Great Capes of Metropolis -#: lang/json/BOOK_from_json.py -msgid "" -"In this classic pulp paperback of superheroic exploits, a group of masked " -"vigilantes with diverse superpowers learn to work together to defeat the " -"ultimate villain." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Yesterday's Murdered" -msgid_plural "Yesterday's Murdereds" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for Yesterday's Murdered -#: lang/json/BOOK_from_json.py -msgid "" -"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" -" has one last shot at vengeance." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Flashgun Condor and the Crimson Criminal" -msgid_plural "Flashgun Condor and the Crimson Criminals" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for Flashgun Condor and the Crimson Criminal -#: lang/json/BOOK_from_json.py -msgid "" -"A hot-blooded photographer who fights crime with film, footage, and fists, " -"Condor is more than a mere shutterbug on the crime beat. But will she be " -"able to unravel a devious deception and bring the \"Crimson Criminal\" to " -"justice?" -msgstr "" - #: lang/json/BOOK_from_json.py msgid "road novel" msgid_plural "road novels" @@ -28610,11 +28456,8 @@ msgstr[1] "Samurai-Romane" 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." +"marauding outlaws. This hardback is quite hefty." msgstr "" -"Die klassische Erzählung eines wandernden Schwertkämpfers, der in eine " -"kleine Siedlung kommt und dafür angeheuert wird, den Bürgern dabei zu " -"helfen, sich vor einer Bande plündernder Banditen zu verteidigen." #: lang/json/BOOK_from_json.py msgid "satire novel" @@ -28661,16 +28504,18 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Master and Margarita" -msgid_plural "The Master and Margaritas" +msgid_plural "copies of Master and Margarita" msgstr[0] "" msgstr[1] "" -#. ~ Description for The Master and Margarita +#. ~ Description for {'str': 'The Master and Margarita', 'str_pl': 'copies of +#. Master and Margarita'} #: lang/json/BOOK_from_json.py msgid "" "Featuring a cast that includes Satan, Pontius Pilate, Jesus Christ, " -"vampires, a talking cat, and the literary elite of Moscow, this is a satire " -"on Stalinist tyranny written by Mikhail Bulgakov." +"vampires, a talking cat, and the literary elite of Moscow, this novel by " +"Mikhail Bulgakov explores philosophical issues on the nature of good and " +"evil." msgstr "" #: lang/json/BOOK_from_json.py @@ -28699,327 +28544,6 @@ msgid "" "nuclear destruction isn't much of an influence on human nature." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "scifi novel" -msgid_plural "scifi novels" -msgstr[0] "Science-Fiction-Roman" -msgstr[1] "Science-Fiction-Romane" - -#. ~ Description for {'str': 'scifi novel'} -#: lang/json/BOOK_from_json.py -msgid "Aliens, ray guns, and space ships." -msgstr "Aliens, Strahlenkanonen und Raumschiffe." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" -" surprisingly accurate in predicting much of modern society… Until " -"recently." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" -"\n" -"Tyger, Tyger, Burning bright,\n" -"In the forests of the night:\n" -"What immortal hand or eye,\n" -"Dare frame thy fearful symmetry?" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" -"stains have smudged the occasional word." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This copy of Ray Bradbury's \"Fahrenheit 451\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Hyperion\" by Dan Simmons." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" -"\n" -"Give us gods. Oh give them us!\n" -"Give us gods.\n" -"We are so tired of men\n" -"And motor-power." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " -"ripped off." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " -"some of its pages. Weird." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " -"you wonder how Thailand fared the end of the world." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " -"contains a hand-written grocery list." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " -"still has the smell of new books within its pages." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " -"Sterling. The cover has rings of coffee stains over it." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " -"looks to have been used to press flowers." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " -"the monster?" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" -" handbook." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " -"covered in dried blood." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Roadside Picnic\" by Arkady and Boris Strugatsky." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " -"if it's been slightly chewed by a dog or other large animal." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Cat's Cradle\" by Kurt Vonnegut. You notice there is a " -"typo in the authors name on the spine of the book." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " -"Copy. Not for re-sale.\"" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " -"the first pages in crayon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " -"with 'Library Copy'. And a sticker reading 'Science Fiction'." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Fifth Season\" by N.K. Jemsin. It smells faintly of" -" dirt." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" -" almost brand new." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " -"and worn, some pages appear to be loose." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " -"and thin. You should probably be careful with this copy." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " -"dog-eared and worn." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a weather worn copy of \"Brave New World\" by Aldous Huxley." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"Solaris\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Vurt\" by Jeff Noon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " -"blurb reminds you of a Japanese movie you think you once caught on the " -"television late at night." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " -"missing from the end of the book. Luckily only mail-order advertisements." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " -"Douglas Adams." -msgstr "" - #: lang/json/BOOK_from_json.py msgid "spy novel" msgid_plural "spy novels" @@ -30234,6 +29758,584 @@ msgid "" " key work in the existentialist tradition." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "pulp novel" +msgid_plural "pulp novels" +msgstr[0] "Groschenroman" +msgstr[1] "Groschenromane" + +#. ~ Description for {'str': 'pulp novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hardboiled detective tale filled with hard hitting action and intrigue." +msgstr "" +"Eine Erzählung über einen hartgesottenen Inspektor mit knallharter Action " +"und Intrige." + +#: lang/json/BOOK_from_json.py +msgid "Black Valkyries From Venus" +msgid_plural "copies of Black Valkyries" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Black Valkyries From Venus', 'str_pl': 'copies +#. of Black Valkyries'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a weather-beaten novel written by someone named \"Lee" +" Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Wrong Tomorrow" +msgid_plural "copies of Wrong Tomorrow" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'The Wrong Tomorrow', 'str_pl': 'copies of Wrong +#. Tomorrow'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a cheap drugstore paperback written by someone named " +"\"Lee Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "No God From a Corpse" +msgid_plural "copies of No God" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'No God From a Corpse', 'str_pl': 'copies of No +#. God'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a weatherworn paperback written by some skirt named \"Lee Racket.\"" +" It tells how rage and jealousy can turn a man, or a woman, into a monster." +" This story is hard-boiled enough to break a spoon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Deep Dive" +msgid_plural "copies of Deep Dive" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'The Deep Dive', 'str_pl': 'copies of Deep Dive'} +#: lang/json/BOOK_from_json.py +msgid "" +"This dimestore short story about space travel is written by a broad named " +"\"Lee Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Planet of the Murderous Squids that Time Forgot!" +msgid_plural "Planet of the Murderous Squids that Time Forgot!s" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Planet of the Murderous Squids that Time Forgot! +#: lang/json/BOOK_from_json.py +msgid "" +"In this psychedelic adventure novel of cosmic exploration, an elderly " +"assassin discovers a planet too good to be true. Only once it is too late " +"does she discover the harrowing truth at the center of \"The Planet of the " +"Murderous Squids that Time Forgot!\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Great Capes of Metropolis" +msgid_plural "The Great Capes of Metropoliss" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for The Great Capes of Metropolis +#: lang/json/BOOK_from_json.py +msgid "" +"In this classic pulp paperback of superheroic exploits, a group of masked " +"vigilantes with diverse superpowers learn to work together to defeat the " +"ultimate villain." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Yesterday's Murdered" +msgid_plural "Yesterday's Murdereds" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Yesterday's Murdered +#: lang/json/BOOK_from_json.py +msgid "" +"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" +" has one last shot at vengeance." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Flashgun Condor and the Crimson Criminal" +msgid_plural "Flashgun Condor and the Crimson Criminals" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Flashgun Condor and the Crimson Criminal +#: lang/json/BOOK_from_json.py +msgid "" +"A hot-blooded photographer who fights crime with film, footage, and fists, " +"Condor is more than a mere shutterbug on the crime beat. But will she be " +"able to unravel a devious deception and bring the \"Crimson Criminal\" to " +"justice?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "scifi novel" +msgid_plural "scifi novels" +msgstr[0] "Science-Fiction-Roman" +msgstr[1] "Science-Fiction-Romane" + +#. ~ Description for {'str': 'scifi novel'} +#: lang/json/BOOK_from_json.py +msgid "Aliens, ray guns, and space ships." +msgstr "Aliens, Strahlenkanonen und Raumschiffe." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" +" surprisingly accurate in predicting much of modern society… Until " +"recently." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" +"\n" +"Tyger, Tyger, Burning bright,\n" +"In the forests of the night:\n" +"What immortal hand or eye,\n" +"Dare frame thy fearful symmetry?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" +"stains have smudged the occasional word." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Hyperion\" by Dan Simmons." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" +"\n" +"Give us gods. Oh give them us!\n" +"Give us gods.\n" +"We are so tired of men\n" +"And motor-power." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " +"ripped off." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " +"you wonder how Thailand fared the end of the world." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " +"contains a hand-written grocery list." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " +"still has the smell of new books within its pages." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " +"Sterling. The cover has rings of coffee stains over it." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " +"looks to have been used to press flowers." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " +"the monster?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" +" handbook." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " +"covered in dried blood." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " +"if it's been slightly chewed by a dog or other large animal." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " +"Copy. Not for re-sale.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " +"the first pages in crayon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " +"with 'Library Copy'. And a sticker reading 'Science Fiction'." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" +" almost brand new." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " +"and worn, some pages appear to be loose." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " +"and thin. You should probably be careful with this copy." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " +"dog-eared and worn." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"Solaris\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Vurt\" by Jeff Noon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " +"blurb reminds you of a Japanese movie you think you once caught on the " +"television late at night." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " +"missing from the end of the book. Luckily only mail-order advertisements." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " +"Douglas Adams." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Dune" +msgid_plural "copies of Dune" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " +"some of its pages. Weird." +msgstr "" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Dune\" by Frank Herbert. It is a fairly new " +"reprint with the words \"SOON TO BE A MAJOR MOTION PICTURE\" splashed across" +" its dust jacket." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Parable of the Talents" +msgid_plural "copies of Parable of the Talents" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Parable of the Talents', 'str_pl': 'copies of +#. Parable of the Talents'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Parable of the Talents.\". It is Octavia " +"Butler's sequel to her book \"Parable of the Sower.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Fifth Season" +msgid_plural "signed copies of Fifth Season" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'The Fifth Season', 'str_pl': 'signed copies of +#. Fifth Season'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a signed hardcover copy of the Hugo award winning \"The Fifth " +"Season\" by N.K. Jemisin. It smells faintly of dirt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "We" +msgid_plural "copies of We" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"This hardback book is titled \"The Annotated We: A New Translation of Evgeny Zamiatin's Novel.\"\n" +"\n" +"It is Vladimir Wozniuk's 2015 translation of \"We,\" originally published in 1924 and generally seen as the first modern dystopian novel. The commentary examines the profusive allusions and highlights the poetic nature of Zamiatin's language." +msgstr "" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"A seminal work of dystopian fiction, Evgeny Zamiatin's \"We\" was first published in 1924 but suppresed by the Soviet Union until 1988.\n" +"\n" +"This mass-market 1993 edition you've found was translated from the Russian by Clarence Brown and includes a short introduction. The slightly worn cover features a surrealist photo of a person gazing backward suspiciouly." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Cyberiad" +msgid_plural "copies of The Cyberiad" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'The Cyberiad', 'str_pl': 'copies of The +#. Cyberiad'} +#: lang/json/BOOK_from_json.py +msgid "" +"This 350 page paperback presents the exploits and robotic rivalries of Trurl" +" and Klapaucius. Originally written in Polish by Stanislaw Lem, it has been" +" masterfully translated into English by Michael Kandel." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Brave New World" +msgid_plural "copies of Brave New World" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Brave New World', 'str_pl': 'copies of Brave New +#. World'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is weather worn copy of \"Brave New World\" by Aldous Huxley looks like" +" it has been left out in rain. The novel begins in a bleak building where " +"fetuses are grown in bottles on an assembly line." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Roadside Picnic" +msgid_plural "copies of Roadside Picnic" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Roadside Picnic', 'str_pl': 'copies of Roadside +#. Picnic'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a paperback copy of \"Roadside Picnic\" by Arkady and Boris " +"Strugatsky. It has been translated into over 20 languages, occasionally " +"under the name \"Stalker.\" This copy, fortunately for you, just happens to" +" be in your native tongue." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Fahrenheit 451" +msgid_plural "copies of Fahrenheit 451" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Fahrenheit 451', 'str_pl': 'copies of Fahrenheit +#. 451'} +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"Some joker has gently burnt the exterior edge of this paperback dystopia. " +"It's still perfectly readable." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"\"It was a pleasure to burn. It was a special pleasure to see things eaten," +" to see things blackened and changed.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This 1979 softcover edition of Ray Bradbury's \"Fahrenheit 451\" was once a " +"library book. It still has a light blue checkout card pocketed on the torn " +"back cover. One \"Suzanne Collins\" borrowed it in 1981." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"The red and black paperback novel you hold in your hands is a modern reprint" +" of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This scifi novel is divided into three parts: \"The Hearth and the " +"Salamander,\" \"The Sieve and the Sand,\", and \"Burning Bright.\"" +msgstr "" + #: lang/json/BOOK_from_json.py msgid "sports novel" msgid_plural "sports novels" @@ -30557,8 +30659,9 @@ msgstr[1] "" #: lang/json/BOOK_from_json.py msgid "" "This book is for the delightful little ring bearer in your wedding. The " -"author depicts the responsibility and the honor in being a ring bearer your " -"little angel will cherish." +"author depicts the responsibility and honor in being a ring bearer. Your " +"little angel will cherish this book as he or she learns how to behave on " +"your perfect day." msgstr "" #: lang/json/BOOK_from_json.py @@ -32005,11 +32108,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Adorkable Girl" -msgid_plural "The Adorkable Girls" +msgid_plural "copies of Adorkable" msgstr[0] "" msgstr[1] "" -#. ~ Description for The Adorkable Girl +#. ~ Description for {'str': 'The Adorkable Girl', 'str_pl': 'copies of +#. Adorkable'} #: lang/json/BOOK_from_json.py msgid "" "When a therapist's daughter transfers to a new school, she decides to change" @@ -32019,24 +32123,26 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Becoming Jackson" -msgid_plural "Becoming Jacksons" +msgid_plural "copies of Becoming Jackson" msgstr[0] "" msgstr[1] "" -#. ~ Description for Becoming Jackson +#. ~ Description for {'str': 'Becoming Jackson', 'str_pl': 'copies of Becoming +#. Jackson'} #: lang/json/BOOK_from_json.py msgid "" "When Jackson gains the mystical talent to alter his appearance on command, " -"how will he continue to recognize himself in his own mirror?" +"will he be able to recognize himself in his own mirror?" msgstr "" #: lang/json/BOOK_from_json.py msgid "Nothing Burned" -msgid_plural "Nothing Burneds" +msgid_plural "copies of Nothing Burned" msgstr[0] "" msgstr[1] "" -#. ~ Description for Nothing Burned +#. ~ Description for {'str': 'Nothing Burned', 'str_pl': 'copies of Nothing +#. Burned'} #: lang/json/BOOK_from_json.py msgid "" "A teenage influencer becomes fast friends with someone who may or may not be" @@ -32045,11 +32151,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "High and Low" -msgid_plural "High and Lows" +msgid_plural "copies of High and Low" msgstr[0] "" msgstr[1] "" -#. ~ Description for High and Low +#. ~ Description for {'str': 'High and Low', 'str_pl': 'copies of High and +#. Low'} #: lang/json/BOOK_from_json.py msgid "" "In this work of adolescent fiction, a young gemini discovers that the " @@ -32060,11 +32167,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Fire When You See My Eyes" -msgid_plural "Fire When You See My Eyess" +msgid_plural "copies of Fire When" msgstr[0] "" msgstr[1] "" -#. ~ Description for Fire When You See My Eyes +#. ~ Description for {'str': 'Fire When You See My Eyes', 'str_pl': 'copies of +#. Fire When'} #: lang/json/BOOK_from_json.py msgid "" "In a cataclysmic future, advanced technology gives parents access to video " @@ -32073,11 +32181,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Peanut Butter Bruised" -msgid_plural "Peanut Butter Bruiseds" +msgid_plural "copies of Peanut Butter Bruised" msgstr[0] "" msgstr[1] "" -#. ~ Description for Peanut Butter Bruised +#. ~ Description for {'str': 'Peanut Butter Bruised', 'str_pl': 'copies of +#. Peanut Butter Bruised'} #: lang/json/BOOK_from_json.py msgid "" "In this work of young adult fiction, a woman raised on food stamps falls in " @@ -32087,11 +32196,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Ready When You Are" -msgid_plural "Ready When You Ares" +msgid_plural "copies of Ready When" msgstr[0] "" msgstr[1] "" -#. ~ Description for Ready When You Are +#. ~ Description for {'str': 'Ready When You Are', 'str_pl': 'copies of Ready +#. When'} #: lang/json/BOOK_from_json.py msgid "" "When three teenage girls ditch class to drive cross country together they " @@ -32101,11 +32211,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Study of a Boy" -msgid_plural "Study of a Boys" +msgid_plural "copies of \"Study of a Boy\"" msgstr[0] "" msgstr[1] "" -#. ~ Description for Study of a Boy +#. ~ Description for {'str': 'Study of a Boy', 'str_pl': 'copies of "Study of +#. a Boy"'} #: lang/json/BOOK_from_json.py msgid "" "A high school sophomore's personal journal is stolen and then leaked on " @@ -32115,11 +32226,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Summer Variables" -msgid_plural "Summer Variabless" +msgid_plural "copies of Summer Variables" msgstr[0] "" msgstr[1] "" -#. ~ Description for Summer Variables +#. ~ Description for {'str': 'Summer Variables', 'str_pl': 'copies of Summer +#. Variables'} #: lang/json/BOOK_from_json.py msgid "" "In this book written primarily for young adults, a woman's modest summer " @@ -32127,6 +32239,65 @@ msgid "" " unsavory elements." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "In a Dark Place" +msgid_plural "copies of Dark Place" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'In a Dark Place', 'str_pl': 'copies of Dark +#. Place'} +#: lang/json/BOOK_from_json.py +msgid "" +"Markia dreams about the future. Theo longs for the past. Together can they" +" find a way to live in the now?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Betrayal Takes Two" +msgid_plural "copies of Betrayal" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Betrayal Takes Two', 'str_pl': 'copies of +#. Betrayal'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a hard cover book for older teens. The two main characters pull a " +"cruel prank on their classmates, and are brought together both by their " +"frantic efforts to avoid being caught and their shared sense of guilt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "coming of age novel" +msgid_plural "coming of age novels" +msgstr[0] "Bildungsroman" +msgstr[1] "Bildungsromane" + +#. ~ Description for {'str': 'coming of age novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." +msgstr "" +"Eine klassische Erzählung über das Erwachsenwerden. Sie zeigt die lustigen " +"und schmerzhaften Erfahrungen eines jungen Mannes mit dem Leben, der Liebe " +"und dem Sex." + +#: lang/json/BOOK_from_json.py +msgid "Pantheon: The Story of an Iranian Youth" +msgid_plural "copies of Pantheon" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Pantheon: The Story of an Iranian Youth', +#. 'str_pl': 'copies of Pantheon'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hard cover graphic novel about a young girl living in Iran during the " +"1980's, seeing the world change around her as Iraq invaded her country." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "original copy of Housefly" msgid_plural "original copies of Housefly" @@ -33808,6 +33979,47 @@ msgid "" "harmless." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Scroll of Knock" +msgid_plural "Scrolls of Knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Scroll of Knock', 'str_pl': 'Scrolls of Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open locked wooden doors from a short " +"range away." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Improved Knock" +msgid_plural "Scrolls of Improved Knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Scroll of Improved Knock', 'str_pl': 'Scrolls of +#. Improved Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open any locked door from a short range " +"away." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of +#. Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers" +" with baleful lightning." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -34159,36 +34371,6 @@ msgid "" " - F. \"." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', -#. 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': -#. 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -35951,12 +36133,7 @@ msgstr[1] "" #. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py -msgid "" -"Meat from a heavily mutated animal. It has an unsettling loose and spongy " -"texture, but smells… mostly normal. There are strange tangles and " -"formations in it that don't appear natural at all: bits of bone and hair " -"crusted up inside the muscle, as if trying to form another organism. Still," -" seems digestible at least, if you cook it and remove the worst parts." +msgid "Meat from a heavily mutated animal." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -35969,10 +36146,8 @@ msgstr[1] "" #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"A tiny scrap of meat from a heavily mutated animal. It smells a bit odd, " -"and has bits of hair and bone mixed in that seem like they grew inside the " -"muscle itself. Still, seems digestible at least, if you cook it and remove " -"the worst parts." +"A tiny scrap of meat from a heavily mutated animal. It smells unappealing, " +"to say the least." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -36052,15 +36227,8 @@ msgstr[1] "" #. ~ Description for cooked mutant meat #: lang/json/COMESTIBLE_from_json.py -msgid "" -"This is a cooked chunk of meat from a mutated animal. It has an unsettling," -" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" -" the bits of hair and bone out…" +msgid "This is a cooked chunk of meat from a mutated animal." msgstr "" -"Dies ist ein gekochtes Fleischstück von einem mutierten Tier. Es hat eine " -"beunruhigende, schwammige Struktur, aber ansonsten schmeckt es… im " -"Wesentlichen normal. Hoffentlich hast du all die Haare und Knochenstückchen " -"herausbekommen…" #: lang/json/COMESTIBLE_from_json.py msgid "cooked scrap of mutant meat" @@ -36068,6 +36236,14 @@ msgid_plural "cooked scraps of mutant meat" msgstr[0] "gekochter Mutantenfleischfetzen" msgstr[1] "gekochte Mutantenfleischfetzen" +#. ~ Description for {'str': 'cooked scrap of mutant meat', 'str_pl': 'cooked +#. scraps of mutant meat'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"This is a tiny scrap of cooked mutant meat. It is small enough that it's " +"hard to tell how disgusting it is." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "raw offal" msgid_plural "raw offals" @@ -36102,6 +36278,17 @@ msgstr "" "lebenswichtiger Vitamine, aber für die meisten Menschen jedoch eher etwas " "Ekliges, zumindest dann, wenn es nicht sehr sorgfältig zubereitet wurde." +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant organs" +msgid_plural "mutant organs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'mutant organs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "These organs came from a giant mutant bug." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "pickled offal" msgid_plural "pickled offal" @@ -36306,6 +36493,17 @@ msgstr "" "rohen Gestalt, aber zumindest wurden alle Parasiten durch das Kochen " "abgetötet." +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant lungs" +msgid_plural "mutant lungs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'mutant lungs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "You're pretty sure this is lung tissue." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "raw liver" msgid_plural "raw livers" @@ -36492,12 +36690,10 @@ msgstr[1] "Mutantenfettklumpen" #. mutant fat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Freshly butchered fat from a heavily mutated animal. You could eat it raw, " -"but it is better used as an ingredient in other foods or projects." +"Freshly butchered fat from a heavily mutated animal. It smells, if " +"anything, even more disgusting than the rest of the mutant. There are " +"little puddles of unidentified oils dripping from it." msgstr "" -"Frisch geschlachtetes Fett von einem stark mutierten Tier. Du könntest es " -"roh essen, aber es ist besser als Zutat in anderen Nahrungsmitteln oder " -"Projekten geeignet." #: lang/json/COMESTIBLE_from_json.py msgid "mutant tallow" @@ -37967,19 +38163,17 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "Wasser mit Zucker- oder Honigzugabe. Schmeckt okay." #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" +msgid "black tea" +msgid_plural "black teas" msgstr[0] "" msgstr[1] "" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves" -" of the tea plant /Camellia sinensis/." +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." msgstr "" -"Das Getränk der Gentlemen überall, es wird gemacht, indem man heißes Wasser " -"auf die Blätter der Teepflanze /Camellia sinensis/ gießt." #: lang/json/COMESTIBLE_from_json.py msgid "bark tea" @@ -38034,6 +38228,33 @@ msgstr "" "Schrilles Mineralwasser, so schrill, dass es dich nur beim Festhalten der " "Flasche schrill fühlen lässt." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia sinensis/." +" Green tea has a lighter, fresher taste than black and is traditionally " +"preferred in Asian cultures." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -44191,7 +44412,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "" @@ -45224,16 +45444,42 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "" #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" +msgid "black tea bag" +msgid_plural "black tea bags" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'black tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'green tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'fruit tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -45332,14 +45578,11 @@ msgstr[1] "Proteinrationen" #. ~ Description for {'str': 'protein ration'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"SoyPelusa ran a highly successful crowdfunding campaign for their signature " -"protein bar, dubbed \"DaiZoom.\" A person can live on one of these bars, " -"three times a day, presumably forever. After backers received their " -"product, a single flaw was found: most consumers found starvation preferable" -" to the flavor. Warehouses of the product went unsold as the company went " -"bankrupt, providing the perfect opportunity for FEMA to scoop them up and " -"stock the evac shelters. Now, you hold a piece of famous crowdfunding " -"history in your hands. How exciting." +"SoyPelusa ran a highly successful crowdfunding campaign for their signature protein bar, dubbed \"DaiZoom.\"\n" +"\n" +"A person can live on one of these bars, three times a day, presumably forever. After backers received their product, a single flaw was found: most consumers found starvation preferable to the flavor. Warehouses of the product went unsold as the company went bankrupt, providing the perfect opportunity for FEMA to scoop them up and stock the evac shelters.\n" +"\n" +"Now, you hold a piece of famous crowdfunding history in your hands. How exciting." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -46214,12 +46457,12 @@ msgstr "" "etwas Weiterverarbeitung, um ihn zu extrahieren." #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" -msgstr[0] "Teeblatt" -msgstr[1] "Teeblätter" +msgid "black tea leaf" +msgid_plural "black tea leaves" +msgstr[0] "" +msgstr[1] "" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " @@ -46228,6 +46471,19 @@ msgstr "" "Getrocknete Blätter einer Tropenpflanze. Du kannst sie zu Tee kochen oder du" " kannst sie einfach roh essen. Sie sind allerdings nicht sehr sättigend." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "tomato" msgid_plural "tomatoes" @@ -49115,6 +49371,72 @@ msgid "" "to bake bread more efficiently than with just flour." msgstr "" +#: lang/json/COMESTIBLE_from_json.py +msgid "pineapple stem" +msgid_plural "pineapple stem" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'pineapple stem'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Roots of a pineapple plant, for growing your own." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "melon seeds" +msgid_plural "melon seeds" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'melon seeds'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some melon seeds." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "banana saplings" +msgid_plural "banana saplings" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'banana saplings'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some banana saplings." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "orange vine" +msgid_plural "orange vine" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'orange vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some orange vine. Definitely GMO." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "lemon vine" +msgid_plural "lemon vine" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'lemon vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some lemon vines. Definitely GMO." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "subterraenean coconut" +msgid_plural "subterraenean coconut" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'subterraenean coconut'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Proof that man went too far before the Cataclysm." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "vampire mutagen" msgid_plural "vampire mutagens" @@ -49504,6 +49826,12 @@ msgid_plural "ankylosaurus eggs" msgstr[0] "" msgstr[1] "" +#: lang/json/COMESTIBLE_from_json.py +msgid "apatosaurus egg" +msgid_plural "apatosaurus eggs" +msgstr[0] "" +msgstr[1] "" + #: lang/json/COMESTIBLE_from_json.py msgid "ceratosaurus egg" msgid_plural "ceratosaurus eggs" @@ -49838,7 +50166,7 @@ msgid_plural "scream mushrooms" msgstr[0] "" msgstr[1] "" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -50028,113 +50356,6 @@ msgid "" "see this? We will not permit you to join us while we are modded out." msgstr "" -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when" -" eaten raw." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do" -" not drink!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "" - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -51081,21 +51302,6 @@ msgstr[1] "Aluminiumdosen" msgid "An aluminum can, like what soda comes in." msgstr "Eine Aluminiumdose, wo Sachen wie Limo reinkommen." -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "geöffnete Aluminiumdose" -msgstr[1] "geöffnete Aluminiumdosen" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Eine Aluminiumdose, wo Sachen wie Limo reinkommen. Diese hier ist geöffnet " -"und kann nicht so einfach dicht verschlossen werden." - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -51105,23 +51311,10 @@ msgstr[1] "Pappkartons" #. ~ Description for {'str': 'paper carton'} #: lang/json/GENERIC_from_json.py msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." +"A half gallon carton constructed of a paper, aluminum, and plastic laminate." " It has a threaded cap for easy resealing." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "geöffneter Pappkarton" -msgstr[1] "geöffnete Pappkartons" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." -" This one is open and its contents will spoil." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" msgid_plural "vacuum-packed bags" @@ -51144,19 +51337,6 @@ msgstr[1] "Kleine Konservendosen" msgid "A small tin can, like what tuna comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "Kleine Konservendose (offen)" -msgstr[1] "Kleine Konservendosen (offen)" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -51168,19 +51348,6 @@ msgstr[1] "Mittlere Konservendosen" msgid "A medium tin can, like what soup comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "Mittlere Konservendose (offen)" -msgstr[1] "Mittlere Konservendosen (offen)" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -51264,17 +51431,6 @@ msgstr[1] "Plastikbecher" msgid "A small, vacuum formed cup." msgstr "Ein kleiner vakuumgeformter Becher." -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "geöffneter Plastikbecher" -msgstr[1] "geöffnete Plastikbecher" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "Ein kleiner vakuumgeformter Becher. Praktisch Müll." - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -51463,7 +51619,6 @@ msgstr[0] "Plastikkrug" msgstr[1] "Plastikkrüge" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "" @@ -51580,7 +51735,6 @@ msgstr[0] "kleiner Wasserbeutel" msgstr[1] "kleine Wasserbeutel" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of" @@ -51720,19 +51874,6 @@ msgid "" "food." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "Große Konservendose (offen)" -msgstr[1] "Große Konservendosen (offen)" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -52284,6 +52425,34 @@ msgstr "" "Ein Stück eines Exoskeletts eines Insekten. Es ist leicht und sehr " "langlebig." +#: lang/json/GENERIC_from_json.py +msgid "strand of endochitin" +msgid_plural "strands of endochitin" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'strand of endochitin', 'str_pl': 'strands of +#. endochitin'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of an insect's endoskeleton." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "cluster of gas sacs" +msgid_plural "clusters of gas sacs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'cluster of gas sacs', 'str_pl': 'clusters of gas +#. sacs'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This is a cluster of membranous bubbles, each about the size of a grape, " +"retrieved from inside a mutant insect. They float like tiny helium " +"balloons, and are likely full of a lighter-than-air gas helping the bug to " +"fly." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "set of 100 ceramic disk" msgid_plural "ceramic disks" @@ -53658,8 +53827,8 @@ msgid_plural "lotus flowers" msgstr[0] "" msgstr[1] "" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -55230,6 +55399,17 @@ msgstr "" "entfernt wurde. Sie ist für sich alleine und ohne die notwendigen Teile als " "Waffe unbrauchbar." +#: lang/json/GENERIC_from_json.py +msgid "bone armor kit" +msgid_plural "bone armor kits" +msgstr[0] "Knochenrüstungssatz" +msgstr[1] "Knochenrüstungssätze" + +#. ~ Description for {'str': 'bone armor kit'} +#: lang/json/GENERIC_from_json.py +msgid "Bone plating made for a vehicle." +msgstr "Leichte Knochenrüstungsplattierung für Fahrzeuge." + #: lang/json/GENERIC_from_json.py msgid "module template" msgid_plural "module templates" @@ -59690,7 +59870,7 @@ msgstr[1] "" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with a spiked hammer head, a spike, and a hook " -"attached to a long stick." +"attached to a beefy wooden pole." msgstr "" #. ~ Description for {'str': 'lucerne hammer'} @@ -60128,7 +60308,6 @@ msgstr[0] "spitzer Stock" msgstr[1] "spitze Stöcke" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "Ein einfacher Holzstock, vom dem sein Ende geschärft wurde." @@ -60236,20 +60415,15 @@ msgstr[1] "Hellebarden" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with an axe blade, a spike, and other fun things" -" attached to a long stick." +" attached to a long sturdy stick." msgstr "" -"Dies ist eine vielseitige Stangenwaffe mit einer Axtklinge, einem Stachel " -"und anderen lustigen Dingen, die an einem langen Stock befestigt wurden." #. ~ Description for {'str': 'halberd'} #: lang/json/GENERIC_from_json.py msgid "" "This is a dull, cheaply made replica of a polearm with an axe blade, a " -"spike, and other fun things attached to a long stick." +"spike, and other fun things attached to a thick pole." msgstr "" -"Dies ist ein stumpfes, billig angefertigtes Replikat einer Stangenwaffe mit " -"einer Axtklinge, einem Stachel und anderen lustigen Dingen, die an einem " -"langen Stock befestigt wurden." #: lang/json/GENERIC_from_json.py msgid "glaive" @@ -60937,19 +61111,6 @@ msgstr "" "gestaltet wurde, dass sie unter und gegen die Handinnenseite verborgen " "werden kann. Auch »Baghnakh« genannt." -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "Cestus" -msgstr[1] "Cestusse" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -61223,7 +61384,6 @@ msgstr[0] "Rohr" msgstr[1] "Rohre" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -61455,7 +61615,13 @@ msgstr "" "kommerziellen Verpacken oder zum Schutz eines Hauses vor schweren " "Wettereinflüssen benutzt wird. " -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -62433,11 +62599,9 @@ msgstr[1] "selbstgebaute Glefen" #. ~ Description for {'str': 'makeshift glaive'} #: lang/json/GENERIC_from_json.py msgid "" -"This is a large blade attached to a long stick. It could do a considerable " -"amount of damage." +"This is a large blade attached to a stout section of tree branch. It could " +"do a considerable amount of damage." msgstr "" -"Dies ist eine große Klinge, die an einem langen Stock angebracht wurde. Sie " -"könnte einen bemerkenswerten Schaden verursachen." #: lang/json/GENERIC_from_json.py msgid "mind splicer kit" @@ -62616,6 +62780,21 @@ msgstr[1] "" msgid "A stapler for fastening sheets of paper together." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "hole puncher" +msgid_plural "hole punchers" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'hole puncher'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This metal tool can help you punch a single hole in a piece of paper. I " +"mean, you could do more if you wanted, but you'd have to do them one at a " +"time. Or, if you really wanted more holes with one punch, I suppose you " +"could fold the paper… This is a one cylinder hole puncher." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "pen" msgid_plural "pens" @@ -62910,6 +63089,19 @@ msgstr "" "Fahrzeug solange mit Bootsrümpfe, bis es schwimmt. Befestige dann Ruder oder" " einen Motor, um das Boot in Fahrt zu bringen." +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -63954,7 +64146,6 @@ msgstr[0] "Metallblech" msgstr[1] "Metallbleche" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "Ein dünnes Blech." @@ -64083,17 +64274,6 @@ msgstr "" "Widerstandsfähige siliziumdioxidbeschichtete Chitinplattierung für " "Fahrzeuge." -#: lang/json/GENERIC_from_json.py -msgid "bone armor kit" -msgid_plural "bone armor kits" -msgstr[0] "Knochenrüstungssatz" -msgstr[1] "Knochenrüstungssätze" - -#. ~ Description for {'str': 'bone armor kit'} -#: lang/json/GENERIC_from_json.py -msgid "Bone plating made for a vehicle." -msgstr "Leichte Knochenrüstungsplattierung für Fahrzeuge." - #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "shredder" msgid_plural "shredders" @@ -64416,8 +64596,8 @@ msgid_plural "workbenches" msgstr[0] "Arbeitstisch" msgstr[1] "Arbeitstische" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and" @@ -65237,6 +65417,18 @@ msgstr[1] "" msgid "It has given you an answer, but you are yet to ask anything." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -65331,7 +65523,20 @@ msgstr[1] "" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." +msgid "A powerful electromagnet made from a room temperature superconductor." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." msgstr "" #: lang/json/GENERIC_from_json.py @@ -65954,6 +66159,17 @@ msgid "" "battles is bookmarked." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Stormguard Warrior" +msgid_plural "Stormguard Warrior" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Stormguard Warrior'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Iron Heart discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "The Life and Work of Tiger Sauer" msgid_plural "The Life and Work of Tiger Sauer" @@ -65967,6 +66183,66 @@ msgid "" "art." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Pocket Monster Encyclopedia" +msgid_plural "Pocket Monster Encyclopedia" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Pocket Monster Encyclopedia'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This encyclopedia contains a detailed listing of the strengths and " +"techniques of various fictional monsters and how to apply them the in a real" +" fight." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Distant Horizon" +msgid_plural "Distant Horizon" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Distant Horizon'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Setting Sun discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Jedi Holocrons: Form I" +msgid_plural "Jedi Holocrons: Form I" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Jedi Holocrons: Form I'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This device contains the teachings of the first form of Jedi lightsaber " +"combat: Shii-Cho." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -65989,7 +66265,7 @@ msgstr[1] "" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." msgstr "" @@ -66114,7 +66390,7 @@ msgstr[1] "" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." +"Crystalized mana in powdered form. It faintly pulses with arcane energy." msgstr "" #: lang/json/GENERIC_from_json.py @@ -67501,140 +67777,6 @@ msgid "" "much more expensive." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional" -" lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "" - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "FEUERWAFFEN" @@ -71098,30 +71240,6 @@ msgid "" "tips." msgstr "" -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test -#. disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "" - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test -#. rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "" - #: lang/json/MOD_INFO_from_json.py src/color.cpp src/color.cpp msgid "default" msgstr "Standard" @@ -71137,8 +71255,11 @@ msgstr "" #. ~ Description for Aftershock #: lang/json/MOD_INFO_from_json.py -msgid "Drifts the game away from realism and more towards sci-fi." -msgstr "Verschiebt das Spiel vom Realismus mehr hin zu Sci-Fi." +msgid "" +"Drifts the game away from realism and more towards sci-fi. Long term goal " +"of being a significantly different experience that remains compatible with " +"other mods." +msgstr "" #: lang/json/MOD_INFO_from_json.py msgid "Blaze Industries" @@ -71179,8 +71300,9 @@ msgstr "" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." msgstr "" #: lang/json/MOD_INFO_from_json.py @@ -71390,16 +71512,6 @@ msgstr "" msgid "Allows stats to raise via skill progression." msgstr "" -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "" - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "Städtebildung" @@ -73534,6 +73646,17 @@ msgstr "" "Augen all der Köpfe huschen schnell umher und die Münder bilden einen Chor " "aus ächzenden Schreien." +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "Mensch" +msgstr[1] "Menschen" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -75881,6 +76004,19 @@ msgstr "" msgid "Lightning arcs from the leech stalk!" msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -76540,6 +76676,92 @@ msgid "" "looking for patient to assist." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo" +" seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -79361,6 +79583,19 @@ msgstr "" "Ein gewaltiger nashornähnlicher Dinosaurier mit einer knochigen Mähne, aus " "der drei große Hörner heraustreten." +#: lang/json/MONSTER_from_json.py +msgid "Triceratops bio-operator" +msgid_plural "Triceratops bio-operator" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Triceratops bio-operator'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive three-horned four-legged dinosaur dotted with crackling bionics. " +"The horns glow menacingly." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Stegosaurus" msgid_plural "Stegosaurus" @@ -79388,6 +79623,19 @@ msgstr "" "Dieser Dinosaurier sieht wie ein gigantisches prähistorisches Gürteltier " "aus. Sein Schwanz endet mit einem gewaltigen stacheligem Knochenknüppel." +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus" +msgid_plural "Apatosaurus" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Apatosaurus'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur with a long, whip-like tail. The" +" head is upright and the neck looks like it would make a good strong club." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Ceratosaurus" msgid_plural "Ceratosaurus" @@ -79620,6 +79868,116 @@ msgid_plural "magenta and green hatchlings" msgstr[0] "" msgstr[1] "" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs," +" broad shoulders and a pointed beak. Its tattered feathers are stained with" +" black, sticky liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus zombie" +msgid_plural "Spinosaurus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Enormous putrid dinosaur corpse with a ferocious crocodile-like head, oozing" +" black eyes, and a tattered sail on its back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -79632,12 +79990,133 @@ msgid "Massive piles of ragged, stinking flesh lifting enormous teeth." msgstr "" #: lang/json/MONSTER_from_json.py -msgid "Z-Deinonychus" -msgid_plural "Z-Deinonychus" +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with feathery edges. The head looks big, lots of big" +" teeth would fit in it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "S-Rex" +msgid_plural "S-Rexes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'S-Rex', 'str_pl': 'S-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Monstrous columns of dense bone lifting enormous sharp pointed teeth " +"dripping with black goo." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str_sp': 'Z-Deinonychus'} +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus zombie" +msgid_plural "Deinonychus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Deinonychus zombie'} #: lang/json/MONSTER_from_json.py msgid "" "The shuffling corpse of a medium-sized bipedal dinosaur covered with " @@ -79645,6 +80124,73 @@ msgid "" "sickle-like claw." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms," +" a long tail, and long sharp scythe-like claws." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent" +" bony crests on its head with ragged strips of ripped flesh hanging down " +"like a frill." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" msgid_plural "improvised SMG turrets" @@ -80400,19 +80946,6 @@ msgstr "" "Hilfstruppen für den Einzelkampf. Entworfen, um sich nahtlos mit " "traditionelleren Truppen zu integrieren." -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper -#. mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "" - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -80787,19 +81320,6 @@ msgid "" "chitin fitted to a thin mesh. You could put this on a friendly horse." msgstr "" -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "" - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "" @@ -81546,6 +82066,22 @@ msgstr "" msgid "This fake spell occurs on cranial bomb activation. Likely fatal." msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "" @@ -81949,8 +82485,8 @@ msgstr "" msgid "Debug Full Protection" msgstr "" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "" @@ -82438,10 +82974,10 @@ msgstr "" msgid "Jolt" msgstr "" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py lang/json/mutation_category_from_json.py msgid "a crackle" msgstr "" @@ -82510,6 +83046,31 @@ msgstr "" msgid "Wall of Fog" msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "" + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "" @@ -82622,65 +83183,37 @@ msgstr "" msgid "X-ray Vision" msgstr "" -#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py -msgid "Mana Siphon" -msgstr "" - -#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py -msgid "" -"This is the spell portion of the mana siphon series of mutations. If you " -"have this spell you probably debugged it in." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Pew, Pew" +msgid "Knock" msgstr "" -#. ~ Description for Pew, Pew -#: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "" - -#. ~ Description for The Floor is Lava +#. ~ Description for Knock #: lang/json/SPELL_from_json.py msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" +"You channel magic into a force capable of opening doors. This variant can " +"only open wooden doors." msgstr "" #: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" +msgid "Improved Knock" msgstr "" -#. ~ Description for Sports Training Montage +#. ~ Description for Improved Knock #: lang/json/SPELL_from_json.py msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "" - -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." +"You channel magic into a force capable of opening doors. This variant can " +"open any locked door." msgstr "" -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" +#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py +msgid "Mana Siphon" msgstr "" -#. ~ Description for Summon Mummy +#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." +"This is the spell portion of the mana siphon series of mutations. If you " +"have this spell you probably debugged it in." msgstr "" #: lang/json/TOOLMOD_from_json.py @@ -85326,28 +85859,33 @@ msgid "" msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser -#. Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater -#. Girdles of Pockets'} +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" msgstr[0] "" msgstr[1] "" +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" + #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" msgid_plural "Belts of Weaponry" @@ -90410,13 +90948,11 @@ msgstr[1] "Smartphones" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "Du aktivierst das Taschenlampen-Programm." #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "Das Smartphone ist nicht ausreichend geladen." @@ -91929,7 +92465,6 @@ msgstr[0] "Feuerwehraxt" msgstr[1] "Feuerwehräxte" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -91946,7 +92481,6 @@ msgstr[0] "Halligan-Tool" msgstr[1] "Halligan-Tools" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -92237,6 +92771,30 @@ msgstr "" "funktioniert schon ganz gut als Schaufel, aber ist wahrhaft kein Vergleich " "zu einer richtigen Schaufel." +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than" +" raking leaves." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -92267,6 +92825,28 @@ msgid "This is a digging tool. Use it to dig pits adjacent to your location." msgstr "" "Dies ist ein Grabewerkzeug. Benutze es, um Gruben neben dir zu graben." +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -93110,6 +93690,12 @@ msgstr "" "richtigen Werkzeugen kombiniert wird, kannst du sie für die Metallarbeit " "benutzen." +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -93267,6 +93853,18 @@ msgstr "" "Dies ist eine lange Metallzange. Sie wird überlicherweise zum Kochen oder in" " Metallverarbeitungsrezepten benutzt." +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -93441,6 +94039,19 @@ msgstr "" " dich vorm Boden, was das Schlafen erleichtert. Aktiviere die Matte, um sie " "aufzurollen oder auf den Boden zu platzieren." +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -95459,7 +96070,6 @@ msgstr[0] "Lumpen" msgstr[1] "Lumpen" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -95957,12 +96567,12 @@ msgstr "" "auszuschalten." #: lang/json/TOOL_from_json.py -msgid "stone hand axe" -msgid_plural "stone hand axes" -msgstr[0] "Steinerne Handaxt" -msgstr[1] "Steinerne Handäxte" +msgid "stone axe head" +msgid_plural "stone axe heads" +msgstr[0] "" +msgstr[1] "" -#. ~ Description for {'str': 'stone hand axe'} +#. ~ Description for {'str': 'stone axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a broad piece of stone with an edge narrow enough to roughly chop " @@ -95970,12 +96580,12 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "metal hand axe" -msgid_plural "metal hand axes" -msgstr[0] "Metallene Handaxt" -msgstr[1] "Metallene Handäxte" +msgid "metal axe head" +msgid_plural "metal axe heads" +msgstr[0] "" +msgstr[1] "" -#. ~ Description for {'str': 'metal hand axe'} +#. ~ Description for {'str': 'metal axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a chunk of steel with one edge hammered down to something resembling" @@ -96102,6 +96712,12 @@ msgstr "" " Ziegel zu brennen, aber du könntest ihn dazu verwenden, alles Mögliche aus " "Ton zu machen." +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -96280,7 +96896,6 @@ msgstr[0] "Scherenwagenheber" msgstr[1] "Scherenwagenheber" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "" @@ -96543,7 +97158,6 @@ msgstr[0] "Schraubenzieher" msgstr[1] "Schraubenzieher" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -96594,7 +97208,6 @@ msgstr[0] "Lötkolben" msgstr[1] "Lötkolben" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -97039,14 +97652,14 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" +msgid "pseudo atomic butter churn" +msgid_plural "pseudo atomic butter churns" msgstr[0] "" msgstr[1] "" #: lang/json/TOOL_from_json.py -msgid "pseudo atomic butter churn" -msgid_plural "pseudo atomic butter churns" +msgid "precision solderers" +msgid_plural "precision solderers" msgstr[0] "" msgstr[1] "" @@ -97246,6 +97859,21 @@ msgid "" "specialized tools." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -98100,6 +98728,66 @@ msgid_plural "greater wands of cone of cold" msgstr[0] "" msgstr[1] "" +#: lang/json/TOOL_from_json.py +msgid "minor wand of knock" +msgid_plural "minor wands of knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'minor wand of knock', 'str_pl': 'minor wands of +#. knock'} +#. ~ Description for {'str': 'lesser wand of knock', 'str_pl': 'lesser wands +#. of knock'} +#. ~ Description for {'str': 'greater wand of knock', 'str_pl': 'greater wands +#. of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of knock" +msgid_plural "lesser wands of knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of knock" +msgid_plural "greater wands of knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "minor wand of improved knock" +msgid_plural "minor wands of improved knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'minor wand of improved knock', 'str_pl': 'minor +#. wands of improved knock'} +#. ~ Description for {'str': 'lesser wand of improved knock', 'str_pl': +#. 'lesser wands of improved knock'} +#. ~ Description for {'str': 'greater wand of improved knock', 'str_pl': +#. 'greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts improved knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of improved knock" +msgid_plural "lesser wands of improved knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of improved knock" +msgid_plural "greater wands of improved knock" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "disposable minor wand of magic missile" msgid_plural "disposable minor wands of magic missile" @@ -98280,6 +98968,66 @@ msgid_plural "disposable greater wands of cone of cold" msgstr[0] "" msgstr[1] "" +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of knock" +msgid_plural "disposable minor wands of knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'disposable minor wand of knock', 'str_pl': +#. 'disposable minor wands of knock'} +#. ~ Description for {'str': 'disposable lesser wand of knock', 'str_pl': +#. 'disposable lesser wands of knock'} +#. ~ Description for {'str': 'disposable greater wand of knock', 'str_pl': +#. 'disposable greater wands of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of knock" +msgid_plural "disposable lesser wands of knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of knock" +msgid_plural "disposable greater wands of knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of improved knock" +msgid_plural "disposable minor wands of improved knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'disposable minor wand of improved knock', +#. 'str_pl': 'disposable minor wands of improved knock'} +#. ~ Description for {'str': 'disposable lesser wand of improved knock', +#. 'str_pl': 'disposable lesser wands of improved knock'} +#. ~ Description for {'str': 'disposable greater wand of improved knock', +#. 'str_pl': 'disposable greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts improved knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of improved knock" +msgid_plural "disposable lesser wands of improved knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of improved knock" +msgid_plural "disposable greater wands of improved knock" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "finger firelighter" msgid_plural "finger firelighters" @@ -98416,75 +99164,6 @@ msgid "" "magical metals into their workable ingot form." msgstr "" -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "" - #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" msgid_plural "yokes and harnesses" @@ -98882,14 +99561,42 @@ msgstr "" msgid "Freeman's favorite" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Wield a crowbar" +msgstr "" + #: lang/json/achievement_from_json.py msgid "Impenetrable" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Wear a tank suit" +msgstr "" + #: lang/json/achievement_from_json.py msgid "What are they hiding?" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Enter a lab finale room" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "The Last Homely House" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Reach a refugee center" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Return to your roots" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Return to the location you started the game" +msgstr "" + #: lang/json/achievement_from_json.py msgid "Would-be Wizard" msgstr "" @@ -99696,10 +100403,6 @@ msgstr "" msgid "mana energy" msgstr "" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "Adrenalinpumpe" @@ -101329,23 +102032,6 @@ msgstr "" msgid "Wind Turbines" msgstr "" -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" -"Ihre Hände wurden mit präzisen Lötwerkzeugen, Drahtschneidern und " -"Kabelspulen ausgestattet. Sie sind zu klein, um in den meisten Handwerken " -"verwendet zu werden, aber da keine geeigneten Maschinen vorhanden sind, sind" -" sie für die Erstellung von Bioniken ohne bessere Werkzeuge unerlässlich." - #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" msgstr "" @@ -101392,6 +102078,23 @@ msgid "" "and fast." msgstr "" +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" +"Ihre Hände wurden mit präzisen Lötwerkzeugen, Drahtschneidern und " +"Kabelspulen ausgestattet. Sie sind zu klein, um in den meisten Handwerken " +"verwendet zu werden, aber da keine geeigneten Maschinen vorhanden sind, sind" +" sie für die Erstellung von Bioniken ohne bessere Werkzeuge unerlässlich." + #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" msgid_plural "Ionic Overload Generators" @@ -101740,7 +102443,7 @@ msgid "Merciful" msgstr "" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp src/scenario.cpp msgid "All" msgstr "Alle" @@ -104439,7 +105142,7 @@ msgstr "" msgid "You mount your steed." msgstr "" -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "In Flammen" @@ -106975,66 +107678,6 @@ msgstr "" msgid "The gum webs constrict your movement." msgstr "" -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "" - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "" - #: lang/json/faction_from_json.py msgid "Your Followers" msgstr "Deine Gefährten" @@ -107233,6 +107876,17 @@ msgid "" " the kind words used about them." msgstr "" +#: lang/json/faction_from_json.py +msgid "Swampers Religious Community and Hotels and Casinos" +msgstr "" + +#. ~ Description for Swampers Religious Community and Hotels and Casinos +#: lang/json/faction_from_json.py +msgid "" +"A prosperous but secretive group of churchgoers and entertainment moguls " +"with an affection for dinosaurs. They welcome all untainted humans." +msgstr "" + #: lang/json/faction_from_json.py msgid "The Ancient Ones" msgstr "" @@ -111337,6 +111991,77 @@ msgid "" "temperature. You'll need to take it down first." msgstr "" +#: lang/json/furniture_from_json.py +msgid "sleep pod" +msgstr "" + +#. ~ Description for sleep pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a climate controlled sleep pod. An easy way to reduce energy costs " +"in dense urban environments." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "cryo pod" +msgstr "" + +#. ~ Description for cryo pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a long term sleep pod. Cryo pods are mostly used by people waiting " +"a short term for organs or criminals avoiding heat right after a crime." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "CRISPR Biolab" +msgstr "" + +#. ~ Description for CRISPR Biolab +#: lang/json/furniture_from_json.py +msgid "" +"A boxy looking device of arms, droppers and pipettes. It was used pre-" +"Cataclysm to do expirements in gene editing." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "3D printer" +msgstr "" + +#. ~ Description for 3D printer +#: lang/json/furniture_from_json.py +msgid "" +"This box was used for rapid prototyping of products and for general " +"entertainment purposes in the masses." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "neural net inserter" +msgstr "" + +#. ~ Description for neural net inserter +#: lang/json/furniture_from_json.py +msgid "" +"This device looks like a cross between some kind of nightmare dentistry " +"equipment and socketing tool mounted on a slide that lets it drop precisely " +"down. Useful for those project that require putting delicate items into " +"hard to reach spaces." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "monomolecular saw" +msgstr "" + +#. ~ Description for monomolecular saw +#: lang/json/furniture_from_json.py +msgid "" +"A wire the size of a cheescutter runs in a single direction in this tool, " +"allowing atomically precise cuts at almost any angle. Even unpowered it " +"gives off a visual distortion for several inches around it to prevent you " +"from losing a hand. It is impossible to deconstruct this device without the" +" wire self destructing." +msgstr "" + #. ~ Description for dresser #: lang/json/furniture_from_json.py msgid "Dress yourself!" @@ -111708,8 +112433,7 @@ msgstr "" " anderen für Schrotmunition. Sie wurde aus Rohren und Teilen, die aus einer " "doppelläufigen Flinte ausgeschlachtet wurden, gebaut." -#: lang/json/gun_from_json.py lang/json/gun_from_json.py -#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" msgstr "Schrotflinte" @@ -111887,7 +112611,8 @@ msgstr "" "Isolierband und Elektronik besteht, wird sie von einer Standard-Esz. " "betrieben." -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py src/item.cpp +#: lang/json/gun_from_json.py lang/json/gun_from_json.py +#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py src/item.cpp msgctxt "gun_type_type" msgid "pistol" msgstr "Pistole" @@ -115775,6 +116500,18 @@ msgid "" "will have to suffice." msgstr "" +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "" + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -116565,6 +117302,16 @@ msgstr "" msgid "trilaser" msgstr "" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -117356,6 +118103,12 @@ msgid "" "reliability." msgstr "" +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "" +msgstr[1] "" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -117436,22 +118189,6 @@ msgstr "" msgid "Fake gun that fires barbed javelins." msgstr "" -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "" - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -119540,16 +120277,6 @@ msgid "" "replacing the iron sights. Increases accuracy and weight." msgstr "" -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "" - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "Du nimmst den Fisch aus und entgrätest ihn" @@ -119583,8 +120310,32 @@ msgstr "" "Fleisch und hältst Ausschau nach allem, was hervorsticht." #: lang/json/harvest_from_json.py -msgid "You laboriously dissect the colossal insect." -msgstr "Mühselig sezierst du das riesige Insekt." +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "You laboriously dissect the colossal insect. " +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"What appeared to be insect hairs on the chitin of this creature look more " +"like tiny feathers as you pare them back. Inside is a bundle of bubble-like" +" tissue sacs that appear to be floating, which doesn't fit with what you " +"know about real bees." +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"There's a faintly hairy, skin-like membrane, covered in blood vessels, " +"beneath the chitin of this creature. Inside it is a bundle of bubble-like " +"tissue sacs that appear to be floating, which doesn't fit with what you know" +" about real wasps." +msgstr "" #: lang/json/harvest_from_json.py msgid "You laboriously hack and dig through the remains of the fungal mass." @@ -122041,6 +122792,13 @@ msgstr "" msgid "This item can be used to communicate with radio waves." msgstr "" +#. ~ Please leave anything in unchanged. +#: lang/json/json_flag_from_json.py +msgid "" +"This item can be used to pick locks with zero " +"effort." +msgstr "" + #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is designed to keep you dry in the rain." @@ -124399,6 +125157,15 @@ msgstr "" msgid "Zombie trap." msgstr "" +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "Reed" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "" + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -125718,6 +126485,11 @@ msgid "" "years.'" msgstr "" +#. ~ Computer name +#: lang/json/mapgen_from_json.py +msgid "DinoLab Operating Theater Controls" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "No style" msgstr "Kein Stil" @@ -125975,6 +126747,21 @@ msgid "" "Lasts 3 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "Capoeira-Tempo" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': +#. 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "Kranich-Kung-Fu" @@ -126133,6 +126920,22 @@ msgid "" "+2 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "Eskrima-Kombi" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': +#. 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "Fechten" @@ -126170,6 +126973,33 @@ msgid "" "Blocked damage reduced by 50% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "Parieren" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -126218,6 +127048,34 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "Judo" @@ -126466,6 +127324,32 @@ msgid "" "+1 Dodge attempts, blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "Muay Thai" @@ -126504,6 +127388,21 @@ msgid "" "Blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay +#. Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% of Strength.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "Ninjutsu" @@ -126569,6 +127468,34 @@ msgid "" "Last 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': +#. 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "Niten Ichiryū" @@ -126642,6 +127569,39 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "Pankration" @@ -126794,6 +127754,21 @@ msgid "" "Perception increases Accuracy instead of Dexterity. Accuracy increased by 25% of Perception but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "Sōjutsu" @@ -126948,6 +127923,21 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "Tiger-Kung-Fu" @@ -127005,6 +127995,21 @@ msgid "" "Accuracy increased by 25% of Strength but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "" @@ -127058,6 +128063,20 @@ msgid "" " Dodging Skill increased by 15% of Perception. Blocked damage reduced by 50% of Perception." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch (Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "Zui Quan" @@ -127175,6 +128194,34 @@ msgstr "" "+Stärke Schlagpanzerung, +Geschick Säurepanzerung, +Intelligenz " "Elektropanzerung, +Wahrnehmung Feuerpanzerung." +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2" +" times." +msgstr "" + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "Bionik-Kampfgeist" @@ -127214,6 +128261,22 @@ msgid "" "+2 Blocks attempts, +1 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic +#. Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "Tausendfüßler-Kung-Fu" @@ -127251,6 +128314,20 @@ msgid "" "Lasts 3 turns. Stacks 4 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': +#. 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "Echsen-Kung-Fu" @@ -127370,6 +128447,20 @@ msgid "" "Stacks 2 times. Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': +#. 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "Kröten-Kung-Fu" @@ -127421,6 +128512,34 @@ msgid "" "Lasts 6 turns. Stacks 6 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad +#. Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "Viper-Kung-Fu" @@ -127762,6 +128881,34 @@ msgid "" "Lasts 1 turn. Stacks 2 times" msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Quicksilver Motion" +msgstr "" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': +#. 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence combine to allow you to make a fast, bold move that catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond +#. Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Hylian Swordsmanship" msgstr "" @@ -127855,6 +129002,46 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Heart" +msgstr "" + +#. ~ Description for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Absolute mastery of the sword is the goal of the Iron Heart discipline. " +"Through unending practice and study, the Iron Heart adept achieves " +"superhuman skill with her weapons. Iron Heart maneuvers are demonstrations " +"of uncanny martial skill—weaving patterns of steel that dizzy, confuse, and " +"ultimately kill with no recourse." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "You push away your fear and stand tall." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s takes a bold and fearless stance." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Panzer Kunst" msgstr "" @@ -127906,6 +129093,393 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Pokken" +msgstr "" + +#. ~ Description for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Pokken or \"Pocket Fist\" is a strange martial art developed from the famous" +" Pokemon video game series. Somehow, a group of dedicated fans managed to " +"combine the moves used by various pokemon with multiple existing martial " +"arts such as boxing and karate. Amazingly, it actually works. Some might " +"even say it's a super effective way to fight." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "You get ready to battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s is about to challenge someone to a battle." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Setting Sun" +msgstr "" + +#. ~ Description for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Setting Sun discipline teaches its initiates to turn their opponents' " +"strength against them. With a quick shift in stance and carefully aimed " +"attack, a Setting Sun warrior sends a charging enemy tumbling in a new " +"direction." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "You shift your weight and prepare to defend yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s shifts their weight and assumes a new stance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and \"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Shii-Cho" +msgstr "" + +#. ~ Description for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Shii-Cho, \"The way of the Sarlacc\" was the first form lightsaber combat " +"developed by the Jedi during their transition from metal weaponry to " +"lightsabers. Shii-Cho is regarded as a training form that all Jedi learn to" +" understand the basics of armed combat. Shii-Cho excels at fighting against" +" groups but lacks the offensive power of the other lightsaber forms." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You place one foot back and hold your weapon vertically on your dominant " +"side." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s places one foot back and hold their weapon vertically." +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are a determined warrior. Your inner calm aids you in landing your strikes and protecting yourself.\n" +"\n" +"Blocked damage reduced by 100% of Strength, +1 Accuracy." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Apprentice Training" +msgstr "" + +#. ~ Description of buff 'Apprentice Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training in Shii-Cho teaches you how to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Knight Training" +msgstr "" + +#. ~ Description of buff 'Knight Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Further training in Shii-Cho improves your ability to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Master Training" +msgstr "" + +#. ~ Description of buff 'Master Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"As a master of Shii-Cho, your ability to fight against groups is second to none.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to die.\n" +"\n" +"+5% critical hit chance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "Alkohol" @@ -128389,7 +129963,7 @@ msgid "Emulsified Hydrogel" msgstr "" #: lang/json/material_from_json.py -msgid "pupled" +msgid "pulped" msgstr "" #: lang/json/material_from_json.py @@ -130311,7 +131885,7 @@ msgid "Can you go find my son and tell him to check in with us." msgstr "" #: lang/json/mission_def_from_json.py lang/json/mission_def_from_json.py -#: lang/json/talk_topic_from_json.py +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py msgid "Thank you." msgstr "Danke." @@ -130604,7 +132178,7 @@ msgstr "" #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20" +"We could use some 3 liter jars to preserve our produce. Can you bring me 10" " large three liter jars? I'll give you some preserves in exchange." msgstr "" @@ -132498,6 +134072,87 @@ msgstr "Ja, sicher." msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check" +" it out, I'll owe you a favor." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "2 Destillationsapparate herstellen" @@ -133982,6 +135637,54 @@ msgstr "" msgid "I can't be Dr Frankenstein unless you get me these." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Gather meat for Bo Baronyx. About 8 should do it." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters are hungry. They need meat" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"If you wish to feed the eaters, your work will be rewarded. Go out, butcher" +" a pure animal. Not a false eater, the meat must be good to eat. Then " +"bring me the meat and I will see to the eaters." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Excellent. The eaters must feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Understood. The great eaters will feed either way." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"Some of the animals have become touched by the pretenders in recent days, " +"larger and more dangerous, producing tainted mutant meat. This will not " +"work for the great eaters, it must be the true meat." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Have you brought meat?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed I am sure." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I see no meat. There is meat in the forests and swamps waiting for the " +"eaters." +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Retrieve Magic Book" msgstr "" @@ -136320,6 +138023,23 @@ msgstr "" "Du kannst dich schneller bewegen als die Meisten, was dir bei sicherem Halt " "einen Geschwindigkeitsbonus von 15% gibt." +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore" +msgstr "" + +#. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "" +"A photophore has grown from your head. You can't consciously control it, " +"and it might start to shine in response to your emotions or your " +"physiological state." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "" @@ -136332,13 +138052,50 @@ msgid "" "mating season." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." +msgid "You can make your photophore glow brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Normal Human" +msgstr "" + +#. ~ Description for {'str': 'Normal Human'} +#: lang/json/mutation_from_json.py +msgid "" +"You're a normal human, there's nothing wrong with you. No need to worry." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Violent Monster" +msgstr "" + +#. ~ Description for {'str': 'Violent Monster'} +#: lang/json/mutation_from_json.py +msgid "Anger clouds your mind, you can't think straight but you feel strong." msgstr "" #: lang/json/mutation_from_json.py @@ -136449,12 +138206,12 @@ msgstr "Schneller Heiler" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." msgstr "" -"Du heilst dich im Schlaf schneller und wirst sogar einige wenige TP " -"regenerieren, wenn du nicht schläfst." #: lang/json/mutation_from_json.py msgid "Light Eater" @@ -137178,10 +138935,11 @@ msgstr "Langsamer Heiler" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." msgstr "" -"Du heilst ein bisschen langsamer als die meisten; der Schlaf wird weniger " -"verlorene Trefferpunkte wiederherstellen." #: lang/json/mutation_from_json.py msgid "Poor Healer" @@ -137189,12 +138947,11 @@ msgstr "Dürftiger Heiler" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to" -" recover only a third of usual HP." +"Your health recovery is severely impaired. Your HP whilst asleep as well as" +" your broken limbs heal at 33% the regular rate." msgstr "" -"Deine Gesundheitsregeneration im Schlaf ist stark beeinträchtigt. Du wirst " -"nur ein Drittel der gewöhnlichen TP zurückerlangen." #: lang/json/mutation_from_json.py msgid "Imperceptive Healer" @@ -137202,12 +138959,11 @@ msgstr "Unmerklicher Heiler" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth" -" of usual HP." +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP" +" whilst asleep as well as your broken limbs heal at 10% the regular rate." msgstr "" -"Im Schlaf erlangst du kaum Gesundheit zurück – nur ein Zehntel der " -"gewöhnlichen TP werden geheilt." #: lang/json/mutation_from_json.py msgid "Far-Sighted" @@ -138038,12 +139794,11 @@ msgstr "Sehr schneller Heiler" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not " -"sleeping." +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." msgstr "" -"Dein Fleisch regeneriert sich langsam und du wirst Trefferpunkte " -"wiedererhalten, sogar, wenn du nicht schläft." #: lang/json/mutation_from_json.py msgid "Regeneration" @@ -138051,8 +139806,12 @@ msgstr "Regeneration" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." -msgstr "Dein Fleisch reneriert sich von Wunden unglaublich schnell." +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster" +" whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16" +" times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Reptilian Healing" @@ -138060,9 +139819,10 @@ msgstr "Reptilienheilung" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." msgstr "" -"Deine gebrochenen Gelenke heilen sich ohne große Schwierigkeiten von selbst." #: lang/json/mutation_from_json.py msgid "Very Little Sleep" @@ -142850,7 +144610,8 @@ msgstr "" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." msgstr "" #: lang/json/mutation_from_json.py @@ -144168,6 +145929,28 @@ msgid "" "improves as your unarmed skill increases." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Jedi Training" +msgstr "" + +#. ~ Description for {'str': 'Jedi Training'} +#: lang/json/mutation_from_json.py +msgid "" +"You are trained in the ways of the Jedi. Your knowledge allows you to " +"utilize a form of lightsaber combat." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Pokken Master" +msgstr "" + +#. ~ Description for {'str': 'Pokken Master'} +#: lang/json/mutation_from_json.py +msgid "" +"You are well versed in the monsterous Pocket Fist martial art. Train well, " +"because it is your destiny to be a master." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Martial Adept" msgstr "" @@ -144176,7 +145959,8 @@ msgstr "" #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." msgstr "" #: lang/json/mutation_from_json.py @@ -145157,6 +146941,14 @@ msgstr "" msgid "Humans created me. Let's see what I can be on my own." msgstr "" +#: lang/json/npc_class_from_json.py +msgid "Swamper" +msgstr "" + +#: lang/json/npc_class_from_json.py +msgid "The great eaters have returned and they must be fed" +msgstr "" + #: lang/json/npc_class_from_json.py msgid "Operator" msgstr "" @@ -145442,6 +147234,14 @@ msgstr "" msgid "Millyficen Whately" msgstr "" +#: lang/json/npc_from_json.py +msgid "CEO" +msgstr "" + +#: lang/json/npc_from_json.py +msgid "Bo Baronyx" +msgstr "" + #: lang/json/npc_from_json.py msgid "magus" msgstr "" @@ -152887,6 +154687,118 @@ msgid "" "time before the horrors patrolling the skies shot you down." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "Sanitäter" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "Sanitäter" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -153055,8 +154967,9 @@ msgstr "" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -153069,8 +154982,9 @@ msgstr "" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -154323,6 +156237,226 @@ msgid "" "find some other use." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -155989,7 +158123,7 @@ msgid "build a metalworking forge" msgstr "" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." +msgid "Let's build an anvil and crucible to increase our crafting options." msgstr "" #: lang/json/recipe_from_json.py @@ -160351,6 +162485,40 @@ msgctxt "start_name" msgid "Wizard's Retreat Vacation" msgstr "" +#. ~ Name for scenario 'Exile' for a male character +#: lang/json/scenario_from_json.py +msgctxt "scenario_male" +msgid "Exile" +msgstr "" + +#. ~ Name for scenario 'Exile' for a female character +#: lang/json/scenario_from_json.py +msgctxt "scenario_female" +msgid "Exile" +msgstr "" + +#. ~ Description for scenario 'Exile' for a male character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_male" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Description for scenario 'Exile' for a female character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_female" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Starting location for scenario 'Exile'. +#: lang/json/scenario_from_json.py +msgctxt "start_name" +msgid "Exiled" +msgstr "" + #. ~ Name for scenario 'The Sweet Life' for a male character #: lang/json/scenario_from_json.py msgctxt "scenario_male" @@ -170884,6 +173052,330 @@ msgstr "Style" msgid "-chant" msgstr "Chant" +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. It has an unsettling loose and spongy " +"texture, but smells… mostly normal. There are strange tangles and " +"formations in it that don't appear natural at all: bits of bone and hair " +"crusted up inside the muscle, as if trying to form another organism. Still," +" seems digestible at least, if you cook it and remove the worst parts." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although it came from muscle tissue, it" +" has a curious swirling grain pattern, and at the center of each grain is a " +"knot of hard, cartilaginous tissue. It smells offputting." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. This is from muscle, but in the fascial" +" tissue between the muscles, thick spiny hairs have grown. Foul smelling, " +"cream-colored fluid gushes out whenever a hair pulls loose." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although this came from muscle, it has " +"a thick cordlike texture and smells like leather and bread mold." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. It has an unsettling," +" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" +" the bits of hair and bone out…" +msgstr "" +"Dies ist ein gekochtes Fleischstück von einem mutierten Tier. Es hat eine " +"beunruhigende, schwammige Struktur, aber ansonsten schmeckt es… im " +"Wesentlichen normal. Hoffentlich hast du all die Haare und Knochenstückchen " +"herausbekommen…" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. You thought you'd " +"cleared out all the gross parts, but while cooking, a fluid-filled sac " +"inside burst and covered it in some kind of thick grease." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. The surface is " +"peppered with divets from the pieces you had to dig out to make it seem " +"edible." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. Heat caused the " +"muscles to twist and move as if they were alive, and now it has writhed " +"itself into a dense knot." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug, and you really aren't sure what " +"to make of them. There are things you've never seen in any anatomy book, " +"with spines and hair and other unidentified parts protruding off seemingly " +"at random." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug. They have a sickly green color, " +"and one of them ripped when you were removing it, revealing an inner surface" +" that looks like row upon row of human fingers, nails and all." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a huge, thick, fleshy sac you removed from a giant mutant bug. The " +"surface is covered in smooth, soft skin, and beneath it is a coiled, twisted" +" mess of cordlike tissue." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a long, corded organ you removed from a giant mutant bug. It ran " +"from the head to the abdomen and has long tendrils coming off it, not unlike" +" a spinal cord." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a meaty grey organ you removed from a mutant. It has a chalky " +"yellow coating that burns your skin, and several unidentifiable fleshy tubes" +" sticking out of it. The smell it gives off stings your nostrils. You're " +"pretty confident no natural creature has one of these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This organ meat, retrieved from a mutated creature, looks like a series of " +"small mammalian hearts arranged in series on a long fleshy tube. At the end" +" of the chain is a large fleshy sac resembling a stomach." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It looks like a lung from a larger " +"mammal, like a dog, but instead of a few distinct lobes, it has dozens of " +"lobes arranged in sheets. Strange spindles and gnarled tumescences dot the " +"surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It has a vaguely wing-like shape, " +"with a series of nodules around what would be the trailing edge of the " +"'wing'. A cluster of quills in each corner of the organ held it to the " +"bug's carapace like clasps." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton, but mutated. The inner side is lined with " +"veins and strange hooked protuberances." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton. Stringy lines of nervous tissue and blood " +"vessels still cling to the inner surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of rigid, tube-shaped chitin from the inside of a giant bug. It " +"seemed to be performing some kind of support role. You're quite sure normal" +" insects don't have these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A long, flexible rod of chitin from inside a giant mutant bug. It is laced " +"with blood vessels and chitinous nodules." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"As you peel away the outer shell, you find veins lining the chitin plates" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "With the creature dead, its carapace comes away surprisingly easily" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"There's a thin membrane, much like skin, spread over the chitin of this " +"creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Under the carapace of this mutant is a bristly, velcro-like material" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The anatomy concealed beneath seems almost like a small mammal given a shell" +" and twisted into the shape of an arthropod" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "You crack the beast open like a horrific lobster" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The chitin holds tight to the creature, and you need to snap and tear it " +"away, sawing at tough fibers beneath" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside, half-formed organs press against spongy meat that doesn't look " +"anything like raw arthropod meat from normal creatures" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You find a collection of hooked spines beneath that seem to have been " +"clasping it on somehow" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a complex, still-squirming mess of strange appendages and organs " +"that bear only a passing resemblance to any natural creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Beneath the chitin, the meat is covered in thick, bristly hair hiding a " +"chaotic bramble of half-formed, mutated organs" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a tangled mess of organs and tissues that do not appear to " +"entirely natural" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside the creature you find lungs, hearts, and intestines more like a " +"mammal than a giant bug" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The meat inside gives off a horrifying stench, and seems to be covered in " +"thin damp hair, like a newborn animal gone horribly wrong" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Small bundles of fiber break loose as you work, splitting open to reveal " +"twisted, half-formed copies of the creature itself" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"It is difficult to work, as the spongey tissue tears apart under your tools" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Steaming puddles of acid spill from its outer shell as you pull it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Steaming acid burbles from the creature's chitin as you peel it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several acid glands rupture as you peel back the carapace, sending streams " +"of steaming caustic fluids spraying around" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The organs themselves have an acrid odour, but don't seem as caustically " +"acidic as the outer shell" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You carefully avoid breaking through pockets of what you think may be acid-" +"secreting glands" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Thick, ropey cords of tissue beneath its chitin protect an inner layer of " +"strange organs, resembling those of a bird more than anything" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The powerfully acidic vapors coming from the carcass make it hard to work" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The tissues of the creature are full of half-formed organs, their purpose " +"unclear" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several times, you nearly burn yourself piercing a concealed gland full of " +"acid" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + #: lang/json/snippet_from_json.py msgid "" "ATOMIC DEREGULATION! President Toffer announced to a mixed crowd today that" @@ -179316,6 +181808,10 @@ msgstr "" msgid "Middle of Nowhere" msgstr "Mitten im Nirgendwo" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "Experiment Zelle" @@ -179612,6 +182108,12 @@ msgstr "" msgid "Yeah, alright." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"The song is… quiet for now. Perhaps with time, more notes will be etched in" +" the bones of this world." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "An acolyte should not take on too many songs at once." msgstr "" @@ -179621,9 +182123,7 @@ msgid "That is all for now." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"The song is… quiet for now. Perhaps with time, more notes will be etched in" -" the bones of this world." +msgid "There are bones to etch, songs to sing. Wish to join me?" msgstr "" #: lang/json/talk_topic_from_json.py @@ -179635,7 +182135,7 @@ msgid "Do you believe you can take on the burden of additional bones?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "There are bones to etch, songs to sing. Wish to join me?" +msgid "A song may yet be sung by you, should you wish to." msgstr "" #: lang/json/talk_topic_from_json.py @@ -179647,10 +182147,6 @@ msgid "" "I know of certain bones that could be of use, if you'd like to know more." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "A song may yet be sung by you, should you wish to." -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "I see." msgstr "Ich verstehe." @@ -180245,11 +182741,11 @@ msgid "no, go back to sleep." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "What is it, friend?" +msgid " *pshhhttt* I'm reading you boss, over." msgstr "" #: lang/json/talk_topic_from_json.py -msgid " *pshhhttt* I'm reading you boss, over." +msgid "What is it, friend?" msgstr "" #: lang/json/talk_topic_from_json.py @@ -180488,15 +182984,15 @@ msgstr "" msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "" -#: lang/json/talk_topic_from_json.py src/action.cpp src/activity_handlers.cpp -#: src/avatar.cpp src/avatar.cpp src/avatar_action.cpp src/avatar_action.cpp -#: src/avatar_action.cpp src/crafting.cpp src/game.cpp src/handle_action.cpp -#: src/handle_action.cpp src/handle_liquid.cpp src/handle_liquid.cpp -#: src/iexamine.cpp src/iexamine.cpp src/iexamine.cpp src/iuse.cpp -#: src/iuse.cpp src/iuse.cpp src/iuse_actor.cpp src/iuse_actor.cpp -#: src/iuse_actor.cpp src/monexamine.cpp src/monexamine.cpp src/npc.cpp -#: src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp -#: src/veh_interact.cpp src/vehicle_use.cpp +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py +#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp src/avatar.cpp +#: src/avatar_action.cpp src/avatar_action.cpp src/crafting.cpp +#: src/crafting.cpp src/game.cpp src/handle_action.cpp src/handle_action.cpp +#: src/handle_liquid.cpp src/handle_liquid.cpp src/iexamine.cpp +#: src/iexamine.cpp src/iexamine.cpp src/iuse.cpp src/iuse.cpp src/iuse.cpp +#: src/iuse_actor.cpp src/iuse_actor.cpp src/iuse_actor.cpp src/monexamine.cpp +#: src/monexamine.cpp src/npc.cpp src/pickup.cpp src/player.cpp src/player.cpp +#: src/player.cpp src/veh_interact.cpp src/vehicle_use.cpp msgid "Never mind." msgstr "Ach, schon gut." @@ -180702,11 +183198,11 @@ msgid "OVERRIDE: " msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" +msgid "" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" +msgid "" msgstr "" #: lang/json/talk_topic_from_json.py @@ -181068,14 +183564,14 @@ msgstr "Okay, keine plötzlichen Bewegungen!" msgid "Keep your distance!" msgstr "Bleib fern!" -#: lang/json/talk_topic_from_json.py -msgid "This is my territory, ." -msgstr "Das ist mein Gebiet, ." - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "This is my territory, ." +msgstr "Das ist mein Gebiet, ." + #: lang/json/talk_topic_from_json.py msgid "Calm down. I'm not going to hurt you." msgstr "Ruhig Blut. Ich habe nicht vor, dich zu verletzen." @@ -181128,30 +183624,30 @@ msgstr "Worum geht’s?" msgid "I don't care." msgstr "Ist mir egal." -#: lang/json/talk_topic_from_json.py -msgid "I don't have any more jobs for you." -msgstr "Ich hab nichts weiteres für dich zu tun." - #: lang/json/talk_topic_from_json.py msgid "I don't have any jobs for you." msgstr "Ich hab nichts für dich zu tun." #: lang/json/talk_topic_from_json.py -msgid "I have more jobs for you. Want to hear about them?" -msgstr "" +msgid "I don't have any more jobs for you." +msgstr "Ich hab nichts weiteres für dich zu tun." #: lang/json/talk_topic_from_json.py msgid "I have other jobs for you. Want to hear about them?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "I just have one job for you. Want to hear about it?" -msgstr "Ich hab nur eine Aufgabe für dich. Willst du sie hören?" +msgid "I have more jobs for you. Want to hear about them?" +msgstr "" #: lang/json/talk_topic_from_json.py msgid "I have another job for you. Want to hear about it?" msgstr "Ich habe noch eine Aufgabe für dich. Willst du sie hören?" +#: lang/json/talk_topic_from_json.py +msgid "I just have one job for you. Want to hear about it?" +msgstr "Ich hab nur eine Aufgabe für dich. Willst du sie hören?" + #: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py #: src/npctalk.cpp msgid "Oh, okay." @@ -181161,6 +183657,10 @@ msgstr "Oh, okay." msgid "Never mind, I'm not interested." msgstr "Vergiss es, ich bin nicht interessiert." +#: lang/json/talk_topic_from_json.py +msgid "You're not working on anything for me now." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Which job?" msgstr "Welche Aufgabe?" @@ -181169,10 +183669,6 @@ msgstr "Welche Aufgabe?" msgid "What about it?" msgstr "Wie wär’s?" -#: lang/json/talk_topic_from_json.py -msgid "You're not working on anything for me now." -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "I'll do it!" msgstr "Ich mach’s!" @@ -181391,6 +183887,10 @@ msgstr "Hmm, okay." msgid "Thanks!" msgstr "Danke!" +#: lang/json/talk_topic_from_json.py +msgid "Focus on the road, mate!" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "I must focus on the road!" msgstr "" @@ -181415,10 +183915,6 @@ msgstr "" msgid "I have some reason for not telling you." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "Focus on the road, mate!" -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "Ah, okay." msgstr "Ah, okay." @@ -181523,6 +184019,10 @@ msgstr "Nein, wir sind hier okay." msgid "On second thought, never mind." msgstr "Wenn ich darüber nachdenke, vergiss es." +#: lang/json/talk_topic_from_json.py +msgid "I can't train you properly while you're operating a vehicle!" +msgstr "Ich kann dich nicht trainieren, solange du ein Fahrzeug benutzt!" + #: lang/json/talk_topic_from_json.py msgid "I can't train you properly while I'm operating a vehicle!" msgstr "" @@ -181535,10 +184035,6 @@ msgstr "Nur Geduld, ich werd dir später etwas neues zeigen …" msgid "I have some reason for denying you training." msgstr "Ich habe Gründe, um dir die Ausbildung zu verweigern." -#: lang/json/talk_topic_from_json.py -msgid "I can't train you properly while you're operating a vehicle!" -msgstr "Ich kann dich nicht trainieren, solange du ein Fahrzeug benutzt!" - #: lang/json/talk_topic_from_json.py msgid "Not a bloody chance, I'm going to get left behind!" msgstr "Auf keinen Fall! Ich würde alleine zurückgelassen werden." @@ -188253,12 +190749,12 @@ msgid "All right! Let's get going." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"How's things with you? My cardboard collection is getting quite impressive." +msgid "We've done it! We've solved the list!" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "We've done it! We've solved the list!" +msgid "" +"How's things with you? My cardboard collection is getting quite impressive." msgstr "" #: lang/json/talk_topic_from_json.py @@ -192924,6 +195420,18 @@ msgstr "" msgid "Got it." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "" @@ -192937,11 +195445,11 @@ msgid "Hey." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Yes?" +msgid "Good to see you." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Good to see you." +msgid "About those jobs…" msgstr "" #: lang/json/talk_topic_from_json.py @@ -192953,7 +195461,7 @@ msgid "Want help with something else?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." +msgid "Lets set a combat strategy" msgstr "" #: lang/json/talk_topic_from_json.py @@ -193007,6 +195515,10 @@ msgstr "" msgid "Anything on your mind?" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "" @@ -194096,6 +196608,263 @@ msgstr "" msgid "Now I choose the cause I'll die for." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"Yes. I ask because I noticed there are dinosaurs around. Do you know " +"anything about that?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"I know all kinds of weird useless stuff. I've seen things at churches, I've" +" seen things on farms, I've seen whole exhibits way out. Those Swampers, " +"they know what's happening. They're creatures of light come back to save us" +" all. Or eat us, I forget." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters will be fed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Welcome. Are you hungry friend?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You look hungry friend. So much hunger in this world. This is the time of " +"the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Hello. Who are the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So about the eaters…" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You mentioned some pretenders before. What does that mean?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Is there a way I can help feed the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I have to get going. Take care, CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters have returned, along with the false ones. We must feed the" +" eaters and destroy the pretenders child." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are you talking about?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No thank you, I'd like to leave now." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"This Cataclysm has woken the great eaters, lost in time, returned them to " +"the world to do their great work, to multiply and fill the land with their " +"song. The time of man is over, but we few who remain can do our part to " +"protect this new world from the pretenders, who would steal the meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So what do you do with the meat?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are the great eaters and the pretenders?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Are there any others left?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are the ones that were lost, what we call dinosaurs whose " +"meat we took and who are taking it back. The pretenders are those others " +"that have come to steal the meat of this world. It does not belong to them " +"and we will take it from their mouths." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Okay, so you worship dinosaurs. Understood." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The Swampers knew these times would return and we prepared for them. When " +"others wasted their time and meat, we fed and grew strong, and we filled our" +" stores with meat for this day." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes, very good." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You keep talking about meat. Why is meat so important?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The meat makes the great eaters strong. We gather the meat and feed them, " +"and in the end we too will serve the eaters in death as we do in life. This" +" was always our purpose and we lucky few have lived to see it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Our purpose? How do you know?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The return of the great eaters was fortold by a prophet. We faithful have " +"been waiting and preparing since the revelation." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I guess it must be nice to be proven right." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This is crazy." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You understand our purpose. I welcome you to this work, all are needed to " +"feed the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You deny what you see right in front of you. This world is what was " +"fortold." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters have fed. They will be hungry again in time" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You know what to do." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The great eaters must be fed. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is still more work to do. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is meat ready for the feeding. Are you ready to gather it?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters are hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is more meat needed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I know of eaters ready for meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Maybe another time CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"If you are ready to be of service to the great eaters, go and find meat and " +"bring it back. There is always need for more." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Happy to be of service to the great eaters. I'm in." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Excellent. Make it happen." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are not picky, any pure meat will do, but mutant and " +"tainted meat are not good enough." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"So, meat from a creature that isn't a zombie, or a giant monster. Got it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course, you should find everything you need here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "That explains the knives then." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Oh, you know my friend Brigitte. Well in that case, let's go!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No, I must remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Sweet!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Not just now. You should remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"Of course, the company will be ready when you are and the great eaters will " +"feed either way." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"It was fortold that as the great eaters returned, so too would the " +"pretenders, who would come to steal the meat. Very little is asked of us, " +"except that we do all we can to ensure that the true great eaters received " +"as much meat as possible and the pretenders go hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes CEO Baronyx, very good CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This makes no sense and I'm done talking about it." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Heya, scav." msgstr "Hey, Sammler." @@ -194635,10 +197404,6 @@ msgstr "Du blockierst %s" msgid " blocks %s" msgstr " blockt %s" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "Parieren" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -197080,6 +199845,90 @@ msgstr "" msgid " unleashes a spin attack against %s and those nearby" msgstr "" +#: lang/json/technique_from_json.py +msgid "Disarming Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You skillfully disarm %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " skillfully disarms %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Lightning Recovery" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You miss %s but recover in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " misses %s but recovers in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Finishing Move" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You finish off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " finishes off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Dazing Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You harshly stun %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " harshly stuns %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Steel Wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleave through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleaves through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Scything Blade" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleanly reap through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleanly reap throug %s and those nearby" +msgstr "" + #: lang/json/technique_from_json.py msgid "Ausstoß" msgstr "" @@ -197136,6 +199985,216 @@ msgstr "" msgid " launches a supersonic punch at %s" msgstr "" +#: lang/json/technique_from_json.py +msgid "Mega Kick" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Darkest Lariat" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Smart Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Low Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Fool's Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely fool %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely fools %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Hydra Slaying Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You toss %s aside with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " tosses %s with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You spin and hurl %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " spins and hurls %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Flowing Water" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You deflect %s's attack and counter in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " deflects %s's attack and counters in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Disarming Slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You disarm %s with a quick flick of your weapon" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " disarms %s with a quick flick of their weapon" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Sarlacc Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You quickly sweep through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " quickly sweeps through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "" @@ -197181,6 +200240,10 @@ msgstr "" msgid "Life springs anew from the dead grass." msgstr "" +#: lang/json/ter_furn_transform_messages_from_json.py +msgid "The door opens forcefully!" +msgstr "" + #: lang/json/terrain_from_json.py msgid "scorched earth" msgstr "verbrannte Erde" @@ -205458,6 +208521,11 @@ msgstr "Holz-Bootsrumpf" msgid "A wooden board that keeps the water out of your boat." msgstr "Eine hölzerne Schiffswand, die das Wasser aus deinem Boot heraushält." +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -205984,14 +209052,19 @@ msgid "" msgstr "" #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" -msgstr "Holzsitz" +msgid "flimsy wooden seat" +msgstr "" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "Eine Sitzgelegenheit." +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "Holzsitz" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "Holzstachel" @@ -206846,6 +209919,11 @@ msgstr "" msgid "At least %s from %s (%s remaining)" msgstr "" +#: src/achievement.cpp +#, c-format +msgid "Exactly %s from %s" +msgstr "" + #: src/achievement.cpp #, c-format msgid "Within %s of %s (%s remaining)" @@ -206862,12 +209940,13 @@ msgid "Within %s of %s (passed)" msgstr "" #: src/achievement.cpp -msgid "Triggered by " +#, c-format +msgid "Triggered by %s" msgstr "" #: src/achievement.cpp #, c-format -msgid "%s/%s " +msgid "%s/%s %s" msgstr "" #: src/achievement.cpp @@ -208868,7 +211947,7 @@ msgstr "" msgid "< [%s] Sort: %s >" msgstr "" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "" @@ -212026,10 +215105,18 @@ msgstr "" msgid "Accuracy" msgstr "Treffgenauigkeit" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "Ausweichen" +#: src/bonuses.cpp +msgid "Block effectiveness" +msgstr "" + #: src/bonuses.cpp src/panels.cpp msgid "Speed" msgstr "Geschwindigkeit" @@ -212522,22 +215609,27 @@ msgstr " steht auf." #: src/character.cpp src/monster.cpp #, c-format -msgid "The %s breaks free of the webs!" -msgstr "%s bricht aus den Netzen aus!" +msgid "The %s escapes the bear trap!" +msgstr "%s entkommt aus der Bärenfalle!" #: src/character.cpp -msgid "You free yourself from the webs!" -msgstr "Du befreist dich aus den Spinnennetzen!" +#, c-format +msgid "Your %s tries to free itself from the bear trap, but can't get loose!" +msgstr "" +"Dein %s versucht sich aus der Bärenfalle zu befreien, aber kommt nicht los." #: src/character.cpp -msgid " frees themselves from the webs!" -msgstr " befreit sich aus den Spinnennetzen!" +msgid "You free yourself from the bear trap!" +msgstr "Du befreist dich aus der Bärenfalle!" #: src/character.cpp -msgid "You try to free yourself from the webs, but can't get loose!" +msgid " frees themselves from the bear trap!" +msgstr " befreit sich aus der Bärenfalle!" + +#: src/character.cpp +msgid "You try to free yourself from the bear trap, but can't get loose!" msgstr "" -"Du versuchst, dich aus den Spinnennetzen zu befreien, doch du kommst nicht " -"los!" +"Du versuchst, dich aus der Bärenfalle zu befreien, aber du kommst nicht los!" #: src/character.cpp src/monster.cpp #, c-format @@ -212577,30 +215669,6 @@ msgstr "" "Du versuchst, dich aus dem schweren Fallstrick zu befreien, aber du kommst " "nicht los!" -#: src/character.cpp src/monster.cpp -#, c-format -msgid "The %s escapes the bear trap!" -msgstr "%s entkommt aus der Bärenfalle!" - -#: src/character.cpp -#, c-format -msgid "Your %s tries to free itself from the bear trap, but can't get loose!" -msgstr "" -"Dein %s versucht sich aus der Bärenfalle zu befreien, aber kommt nicht los." - -#: src/character.cpp -msgid "You free yourself from the bear trap!" -msgstr "Du befreist dich aus der Bärenfalle!" - -#: src/character.cpp -msgid " frees themselves from the bear trap!" -msgstr " befreit sich aus der Bärenfalle!" - -#: src/character.cpp -msgid "You try to free yourself from the bear trap, but can't get loose!" -msgstr "" -"Du versuchst, dich aus der Bärenfalle zu befreien, aber du kommst nicht los!" - #: src/character.cpp msgid "You free yourself from the rubble!" msgstr "Du befreist dich aus dem Schutt!" @@ -212614,18 +215682,6 @@ msgid "You try to free yourself from the rubble, but can't get loose!" msgstr "" "Du versucht, dich aus dem Schutt zu befreien, aber zu kommst nicht los!" -#: src/character.cpp -msgid "You try to escape the pit, but slip back in." -msgstr "Du versucht, dem Abgrund zu entkommen, aber rutschst wieder herein." - -#: src/character.cpp -msgid "You escape the pit!" -msgstr "Du entkommst der Grube!" - -#: src/character.cpp -msgid " escapes the pit!" -msgstr " entkommt der Grube!" - #: src/character.cpp #, c-format msgid "Your %s tries to break free, but fails!" @@ -212665,6 +215721,37 @@ msgstr "Du brichst aus dem Griff frei!" msgid " breaks out of the grab!" msgstr " bricht aus dem Griff frei!" +#: src/character.cpp src/monster.cpp +#, c-format +msgid "The %s breaks free of the webs!" +msgstr "%s bricht aus den Netzen aus!" + +#: src/character.cpp +msgid "You free yourself from the webs!" +msgstr "Du befreist dich aus den Spinnennetzen!" + +#: src/character.cpp +msgid " frees themselves from the webs!" +msgstr " befreit sich aus den Spinnennetzen!" + +#: src/character.cpp +msgid "You try to free yourself from the webs, but can't get loose!" +msgstr "" +"Du versuchst, dich aus den Spinnennetzen zu befreien, doch du kommst nicht " +"los!" + +#: src/character.cpp +msgid "You try to escape the pit, but slip back in." +msgstr "Du versucht, dem Abgrund zu entkommen, aber rutschst wieder herein." + +#: src/character.cpp +msgid "You escape the pit!" +msgstr "Du entkommst der Grube!" + +#: src/character.cpp +msgid " escapes the pit!" +msgstr " entkommt der Grube!" + #: src/character.cpp #, c-format msgid "Your %s bionic comes back online." @@ -216477,14 +219564,6 @@ msgstr "Benchmark zeichnen (X Sekunden)" msgid "Test trait group" msgstr "Wesenszuggruppe testen" -#: src/debug_menu.cpp -msgid "Show debug message" -msgstr "Debug-Nachricht anzeigen" - -#: src/debug_menu.cpp -msgid "Crash game (test crash handling)" -msgstr "Spiel-Absturz (Test-Absturz-Handhabung)" - #: src/debug_menu.cpp msgid "Toggle NPC pathfinding on map" msgstr "" @@ -216513,6 +219592,18 @@ msgstr "" msgid "Enable achievements" msgstr "" +#: src/debug_menu.cpp +msgid "Show debug message" +msgstr "Debug-Nachricht anzeigen" + +#: src/debug_menu.cpp +msgid "Crash game (test crash handling)" +msgstr "Spiel-Absturz (Test-Absturz-Handhabung)" + +#: src/debug_menu.cpp +msgid "Quit to main menu" +msgstr "" + #: src/debug_menu.cpp msgid "Game…" msgstr "" @@ -216609,10 +219700,6 @@ msgstr "" msgid "Map…" msgstr "" -#: src/debug_menu.cpp -msgid "Quit to main menu" -msgstr "" - #: src/debug_menu.cpp msgid "" "Debug Functions - Using these will cheat not only the game, but yourself.\n" @@ -217130,6 +220217,10 @@ msgstr "Als abgeschlossen markieren" msgid "Remove mission without proper cleanup" msgstr "Mission ohne anständiges Aufräumen löschen" +#: src/debug_menu.cpp +msgid "Benchmark in progress…" +msgstr "" + #: src/debug_menu.cpp #, c-format msgid "Drew %d times in %.3f seconds. (%.3f fps average)" @@ -218371,138 +221462,182 @@ msgid "Liked" msgstr "Gemocht" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "Legendär" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" msgstr "Unangefochten" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" msgstr "Mächtig" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" msgstr "Ruhms" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" msgstr "Recht bekannt" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" msgstr "Gesprächsthema" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" msgstr "Wertloser Abschaum" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "Gesindel" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "Verachtenswert" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "Parasit" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "Blutsauger" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "Lachnummer" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "Neutral" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" msgstr "Stinkreich" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "Reich" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" msgstr "Begütert" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" msgstr "Gut situiert" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" msgstr "Bequem" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "Gering" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" msgstr "Versagend" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" msgstr "Bedürftig" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" msgstr "Bettelarm" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "Überlaufend" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" msgstr "Gut gefüllt" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "Mittelmaß" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" msgstr "Unterernährt" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" msgstr "Verhungernd" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "Legendär" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" msgstr "Experte" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" msgstr "Veteran" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" msgstr "Erfahren" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "Kompetent" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" msgstr "Ungeübt" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" msgstr "Verkrüppelt" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" msgstr "Zerbrechlich" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "Wertlos" @@ -219096,12 +222231,12 @@ msgstr "" #, c-format msgid "" "Notes:\n" -"Send a companion to gather light brush and heavy sticks.\n" +"Send a companion to gather light brush and stout branches.\n" "\n" "Skill used: survival\n" "Difficulty: N/A\n" "Gathering Possibilities:\n" -"> heavy sticks\n" +"> stout branches\n" "> withered plants\n" "> splintered wood\n" "\n" @@ -220125,7 +223260,7 @@ msgid "You do not have a camp food zone. Aborting…" msgstr "" #: src/faction_camp.cpp -msgid "No items are located at the drop point…" +msgid "No suitable items are located at the drop points…" msgstr "" #: src/faction_camp.cpp @@ -220346,6 +223481,13 @@ msgstr "%s ist gefährlich nah!" msgid "Wait till you wake up…" msgstr "Warte bis du aufgewacht bist..." +#: src/game.cpp +#, c-format +msgid "" +"\n" +"%s to interrupt" +msgstr "" + #: src/game.cpp #, c-format msgid "%s, cancel Auto-move?" @@ -220456,6 +223598,11 @@ msgctxt "action" msgid "open" msgstr "" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -222019,11 +225166,25 @@ msgstr "" msgid "You cannot haul items here." msgstr "Du kannst hier keine Gegenstände mitschleifen." +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "%s ist im Weg!" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "Dort ist 1 %s im Weg!" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a +#. zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -223424,11 +226585,6 @@ msgstr "Da ist irgendsoein Witzbold im Weg!" msgid "The %s is in the way!" msgstr "%s ist im Weg!" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "%s ist im Weg!" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -224703,6 +227859,11 @@ msgstr "Du fängst an, den Tresor zu knacken." msgid "Attempt to hack this safe?" msgstr "Versuchen, den Tresor zu hacken?" +#: src/iexamine.cpp +#, c-format +msgid "The %s is locked. You could pry it open with the right tool…" +msgstr "" + #: src/iexamine.cpp #, c-format msgid "The %s is locked. If only you had something to pry it with…" @@ -225939,6 +229100,10 @@ msgstr "" msgid "Splint broken limbs" msgstr "" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "Du hast keine Bioniken installiert." @@ -225966,16 +229131,78 @@ msgid " doesn't have limbs that require splinting." msgstr "" #: src/iexamine.cpp -msgid "This mill already contains flour." +msgid "You don't have any wounds that need treatment." msgstr "" #: src/iexamine.cpp -msgid "Remove it before starting the mill again." +msgid " doesn't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "Die Muskelkrämpe gehen allmählich weg." + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "Die Medizin hat keine Wirkung auf die Krämpfe." + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." msgstr "" #: src/iexamine.cpp #, c-format -msgid "This rack contains %s, which can't be milled!" +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "This mill contains %s, which can't be milled!" msgstr "" #: src/iexamine.cpp @@ -226162,7 +229389,8 @@ msgid "Remove brake and start milling" msgstr "" #: src/iexamine.cpp -msgid "Remove brake and start milling, milling will take about 6 hours." +#, c-format +msgid "Remove brake and start milling, milling will take about %s." msgstr "" #: src/iexamine.cpp @@ -226196,18 +229424,7 @@ msgstr "" #: src/iexamine.cpp #, c-format -msgid "It will finish milling in about %d hour." -msgid_plural "It will finish milling in about %d hours." -msgstr[0] "" -msgstr[1] "" - -#: src/iexamine.cpp -msgid "It will finish milling in less than an hour." -msgstr "" - -#: src/iexamine.cpp -#, c-format -msgid "It should take about %d minutes to finish milling." +msgid "It should take about %s to finish milling." msgstr "" #: src/iexamine.cpp @@ -226979,7 +230196,7 @@ msgstr "Volumen (%s):" msgid "There are no available choices" msgstr "Keine Auswahlmöglichkeiten vorhanden" -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "" @@ -227896,10 +231113,6 @@ msgstr "" msgid "Weight capacity bonus: " msgstr "" -#: src/item.cpp -msgid "Storage: " -msgstr "Lagerplatz: " - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "" @@ -228207,6 +231420,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "* Dieses Werkzeug arbeitet mit bionischem Strom. " +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "" + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "" + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "" + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "" + +#: src/item.cpp +msgid "Fuel: " +msgstr "" + #: src/item.cpp #, c-format msgid "Using: %s" @@ -228230,10 +231471,22 @@ msgstr "* Dieser Gegenstand kann verstärkt werden." msgid "* This item is not repairable." msgstr "* Dieser Gegenstand ist nicht reparierbar." +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items +#: src/item.cpp +#, c-format +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "" + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a +#. list of items. +#. ~ Bold text in the middle makes it easier to see where the second list +#. starts. #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." -msgstr "Zerlegen dauert %s und könnte %s ergeben. " +msgid "" +"Disassembly takes %1$s, requires %2$s and might " +"yield: %3$s." +msgstr "" #: src/item.cpp #, c-format @@ -228351,31 +231604,28 @@ msgid "Critical hit chance %d%% - %d%%" msgstr "Kritischer Treffer Chance %d%% - %d%% " #: src/item.cpp -#, c-format -msgid "" -"%d bashing (%d on a critical hit)" +msgid "Bashing: " msgstr "" -"%d Schlag (%d bei Kritischer Treffer) " #: src/item.cpp -#, c-format -msgid "" -"%d cutting (%d on a critical hit)" +msgid "Critical bash: " msgstr "" -"%d Schnitt (%d bei Kritischer Treffer)" -" " #: src/item.cpp -#, c-format -msgid "" -"%d piercing (%d on a critical hit)" +msgid "Cutting: " msgstr "" -"%d Stich (%d Kritischer Treffer) " #: src/item.cpp -#, c-format -msgid "%d moves per attack" -msgstr "%d Züge pro Angriff" +msgid "Critical cut: " +msgstr "" + +#: src/item.cpp +msgid "Piercing: " +msgstr "" + +#: src/item.cpp +msgid "Critical pierce: " +msgstr "" #: src/item.cpp msgid "Integrated mod: " @@ -228978,8 +232228,9 @@ msgstr "%1$s kann nicht mehr von %2$s enthalten." msgid "That %s doesn't have room to expand." msgstr "%s hat keinen Platz, um sich auszubreiten." -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" msgstr "%d × %s" @@ -229105,6 +232356,56 @@ msgstr "Du hast keinerlei Gegenstände mit registrierten Verwendungszwecken" msgid "Execute which action?" msgstr "Welche Aktion ausführen?" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "" + +#: src/item_contents.cpp +msgid " item, " +msgstr "" + +#: src/item_contents.cpp +msgid " category, " +msgstr "" + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "" + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "" + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "" + +#: src/item_contents.cpp +msgid "item id" +msgstr "" + +#: src/item_contents.cpp +msgid "item category" +msgstr "" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "" + #: src/item_contents.cpp msgid "is not a container" msgstr "" @@ -229148,6 +232449,11 @@ msgstr "Welche Gruppe testen?" msgid "Result of 100 spawns:" msgstr "Ergebnis von 100 Spawns:" +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "%d × %s" + #: src/item_location.cpp msgid "inventory" msgstr "Inventar" @@ -229330,6 +232636,34 @@ msgstr "" msgid "not enough space" msgstr "" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "" + #: src/itype.h msgid "click." msgstr "»Klick«." @@ -229399,14 +232733,6 @@ msgstr "Du nimmst ein paar Antibiotika ein." msgid " takes some antibiotics." msgstr " nimmt ein paar Antibiotika ein." -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "Die Muskelkrämpe gehen allmählich weg." - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "Die Medizin hat keine Wirkung auf die Krämpfe." - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -235153,6 +238479,10 @@ msgstr "Anfänger" msgid "Intermediate" msgstr "Mittelschwer" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "Experte" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "Levelbreite:" @@ -238809,6 +242139,18 @@ msgctxt "memorial_female" msgid "Set off an alarm." msgstr "Löste einen Alarm aus." +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_male" +msgid "Used the debug menu (%s)." +msgstr "" + +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_female" +msgid "Used the debug menu (%s)." +msgstr "" + #. ~ Message %s on the message log was repeated %d times, e.g. "You hear a #. whack! x 12" #: src/messages.cpp @@ -242623,12 +245965,6 @@ msgstr "" msgid "You feel bugs crawl over your skin." msgstr "" -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "Mensch" -msgstr[1] "Menschen" - #: src/mutation.cpp #, c-format msgid "Your %s is destroyed!" @@ -243617,17 +246953,6 @@ msgstr "Alter:" msgid "Blood type:" msgstr "" -#: src/newcharacter.cpp -#, c-format -msgid "" -"* Random location * (%d variants)" -msgstr "" - -#: src/newcharacter.cpp -#, c-format -msgid "%s (%d variants)" -msgstr "" - #: src/newcharacter.cpp msgid "Name:" msgstr "Name:" @@ -243640,6 +246965,22 @@ msgstr "Geschlecht:" msgid "Select a starting location." msgstr "Wähle einen Startort." +#: src/newcharacter.cpp +#, c-format +msgid "" +"* Random location * (%d variant)" +msgid_plural "" +"* Random location * (%d variants)" +msgstr[0] "" +msgstr[1] "" + +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" +msgstr[1] "" + #: src/newcharacter.cpp msgid "Stats:" msgstr "Werte:" @@ -243709,6 +247050,13 @@ msgstr "Drücke %s um Umgebung zu wählen" msgid "Starting location:" msgstr "Startort:" +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" +msgstr[1] "" + #: src/newcharacter.cpp msgid "Starting Vehicle: " msgstr "Start Auto:" @@ -245416,6 +248764,14 @@ msgstr "Zermalmen" msgid "Pulp Adjacent" msgstr "Nachbarn zerm." +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "" + #: src/options.cpp msgid "Auto mining" msgstr "Automatisches Graben" @@ -247976,6 +251332,16 @@ msgstr "Zone:" msgid "# Unexplored" msgstr "# Unerforscht" +#: src/overmap_ui.cpp +#, c-format +msgid "oter: %s" +msgstr "" + +#: src/overmap_ui.cpp +#, c-format +msgid "oter_type: %s" +msgstr "" + #: src/overmap_ui.cpp msgid "Distance to active mission:" msgstr "" @@ -248303,6 +251669,10 @@ msgstr "Verbrennend!" msgid "Very hot!" msgstr "Sehr heiß!" +#: src/panels.cpp +msgid "Comfortable" +msgstr "Bequem" + #: src/panels.cpp msgid "Very cold!" msgstr "Sehr kalt!" @@ -249776,6 +253146,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "Durst -%2d%%" +#: src/player_display.cpp +msgid "Starving" +msgstr "Verhungernd" + #: src/player_display.cpp msgid "Underfed" msgstr "Unterernährt" @@ -249868,6 +253242,10 @@ msgid "" "\n" msgstr "" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "Unterernährt" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help you recover.\n" @@ -251012,6 +254390,15 @@ msgid_plural "%1$d tools with %2$s of %3$d or more." msgstr[0] " %1$d Werkzeug mit %2$squalität %3$d" msgstr[1] "%1$d Werkzeuge mit %2$squalität %3$d" +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level +#. requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "" +msgstr[1] "" + #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp #, c-format @@ -255112,6 +258499,10 @@ msgstr "" msgid "--NO AVAILABLE MODS--" msgstr "--KEINE MODS VERFÜGBAR--" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "Aktuelle Liste aktiver Mods als Standard gespeichert" diff --git a/lang/po/es_AR.po b/lang/po/es_AR.po index 9558f52271ee0..301b8ddb86cab 100644 --- a/lang/po/es_AR.po +++ b/lang/po/es_AR.po @@ -2,13 +2,14 @@ # Translators: # Brett Dong , 2020 # Vlasov Vitaly , 2020 +# Diego Gonzalo Ballesteros Palomo , 2020 # Noctivagante , 2020 # msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-06 11:53+0800\n" +"POT-Creation-Date: 2020-06-23 10:06+0800\n" "PO-Revision-Date: 2018-04-26 14:47+0000\n" "Last-Translator: Noctivagante , 2020\n" "Language-Team: Spanish (Argentina) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/es_AR/)\n" @@ -291,7 +292,6 @@ msgstr[0] "piedra" msgstr[1] "piedras" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -685,8 +685,8 @@ msgid "" "A powdered mixture of coke and lime ready to be smelted into usable calcium " "carbide in an arc furnace." msgstr "" -"Es una mezcla en polvo de carbón y cal, lista para ser fundida en un horno " -"de arco para convertirla en carburo de calcio." +"Es una mezcla en polvo de coque y cal, lista para ser fundida en un horno de" +" arco para convertirla en carburo de calcio." #: lang/json/AMMO_from_json.py msgid "coal" @@ -6190,7 +6190,6 @@ msgstr[1] "oro" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -6276,7 +6275,6 @@ msgstr[0] "lámina pequeña de metal" msgstr[1] "láminas pequeñas de metal" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "Es una pequeña lámina de metal." @@ -7836,70 +7834,6 @@ msgstr[1] "núcleos de energía de maná" msgid "Seeing this is a bug." msgstr "Si ves esto es un bug." -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "TEST piedra" -msgstr[1] "TEST piedras" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "TEST lámina pequeña de metal" -msgstr[1] "TEST láminas pequeñas de metal" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "TEST pedazo de platino" -msgstr[1] "TEST pedazos de platino" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -8226,8 +8160,6 @@ msgstr[1] "pares de tapones para los oídos" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear #. plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs -#. of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "Tapones industriales para los oídos. Se ponen adentro de la oreja." @@ -10326,8 +10258,6 @@ msgstr[0] "par de medias" msgstr[1] "pares de medias" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of -#. socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "Son medias. Se ponen en los pies." @@ -12351,6 +12281,18 @@ msgstr "" "traje antiexplosivos. Están diseñados para proteger contra la fragmentación " "y el calor." +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "par de guantes tachonados" +msgstr[1] "pares de guantes tachonados" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of +#. studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "Es un par de guantes con nudillos metálicos tachonados." + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -14714,7 +14656,7 @@ msgid "" "A platinum ring, engraved with all manner of swirls and spirals. You can " "wear it if you like, but it won't provide any effects." msgstr "" -"Es un anillo de platino, gravado con varios espirales y remolinos. Te lo " +"Es un anillo de platino, grabado con varios espirales y remolinos. Te lo " "podés poner si querés, pero no causa ningún efecto." #: lang/json/ARMOR_from_json.py @@ -19314,7 +19256,6 @@ msgstr[1] "exoesqueletos de combate" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "Tu armadura de poder se activa." @@ -19733,7 +19674,6 @@ msgstr[0] "mochila" msgstr[1] "mochilas" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "Es una mochila pequeña. Buena capacidad y poca incomodidad." @@ -19853,7 +19793,6 @@ msgstr[0] "maletín" msgstr[1] "maletines" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "Útil para llevar plata, documentos, o contrabando." @@ -20324,13 +20263,14 @@ msgstr "" #: lang/json/ARMOR_from_json.py msgid "debug pocket universe" msgid_plural "debug pocket universes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "universo de bolsillo para debug" +msgstr[1] "universos de bolsillo para debug" #. ~ Description for {'str': 'debug pocket universe'} #: lang/json/ARMOR_from_json.py msgid "A pocket universe. Can store approximately 384 * 10^6 bugs." msgstr "" +"Es universo de bolsillo. Puede almacenar aproximadamente 384 * 10^6 bugs." #: lang/json/ARMOR_from_json.py msgid "bondage suit" @@ -20886,7 +20826,6 @@ msgstr[0] "traje NBQ" msgstr[1] "trajes NBQ" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -21914,7 +21853,6 @@ msgstr[0] "remera de mangas largas" msgstr[1] "remeras de mangas largas" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "Es una remera de algodón de mangas largas." @@ -22735,6 +22673,21 @@ msgstr "" "Es una bolsa de dormir grande que te cubre desde la cabeza hasta los pies. " "Esta es de peso medio." +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "caestus" +msgstr[1] "caestus" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "" +"Es un brazo y mano envueltos en cuero que incorporan placas metálicas sobre " +"los nudillos para mejorar la potencia del golpe y la defensa." + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -23865,7 +23818,7 @@ msgid "" "This bracelet has runes engraved on it. You sense a faint air of mysticism " "when you look at it. It would be useful for imbuing mana into material." msgstr "" -"Esta pulsera tiene runas gravadas. Sentís un cierto aire místico cuando la " +"Esta pulsera tiene runas grabadas. Sentís un cierto aire místico cuando la " "mirás. Podría ser útil para imbuir maná en un material." #: lang/json/ARMOR_from_json.py @@ -24480,62 +24433,18 @@ msgstr "" "ambiente." #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" -msgstr[0] "TEST par de medias" -msgstr[1] "TEST pares de medias" - -#: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "TEST remera de mangas largas" -msgstr[1] "TEST remeras de mangas largas" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" -msgstr[0] "TEST par de tapones para los oídos" -msgstr[1] "TEST pares de tapones para los oídos" - -#: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "TEST traje NBQ" -msgstr[1] "TEST trajes NBQ" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" -msgstr[0] "TEST mochila" -msgstr[1] "TEST mochilas" - -#: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "TEST maletín" -msgstr[1] "TEST maletines" - -#: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" +msgstr[0] "aura de arco repelente" +msgstr[1] "auras de arco repelente" +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test power armor'} -#: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." msgstr "" +"Es un aura invisible que golpea a los atacantes de cuerpo a cuerpo con un " +"arco voltaico." #: lang/json/BATTERY_from_json.py msgid "test battery" @@ -25041,8 +24950,8 @@ msgid_plural "Aero-Evaporator CBMs" msgstr[0] "MCB Aero-vaporador" msgstr[1] "MCB Aero-vaporador" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -26254,7 +26163,7 @@ msgid "" "A mess of pierced pipes and broken seals, something unpleasant is leaking " "from it." msgstr "" -"Es un lío de caños agujereados y sellos rotos, y está perdiendo algo " +"Es una mezcla de caños agujereados y sellos rotos, y está chorreando algo " "desagradable." #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py @@ -26430,8 +26339,8 @@ msgid_plural "Internal Furnace CBMs" msgstr[0] "MCB Horno interno" msgstr[1] "MCB Horno interno" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel" @@ -26560,8 +26469,8 @@ msgid_plural "Wind Turbine CBMs" msgstr[0] "MCB Turbina de Viento" msgstr[1] "MCB Turbina de Viento" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -26572,22 +26481,6 @@ msgstr "" "Cuando están activadas, se desplegarán y lentamente usarán el viento para " "recargar tu energía." -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "MCB Soldadora de Precisión" -msgstr[1] "MCB Soldadora de Precisión" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire cutters." -" They serve no purpose on their own, but are required for crafting bionics." -msgstr "" -"Es un conjunto de herramientas electrónicas que incluye soldadora de mano y " -"pinza cortaalambre. Así por sí mismo, no sirve de nada, pero son necesarios " -"para crear biónicos." - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -26625,8 +26518,8 @@ msgstr "" #: lang/json/BIONIC_ITEM_from_json.py msgid "Dopamine Stimulators CBM" msgid_plural "Dopamine Stimulators CBMs" -msgstr[0] "MCB Simulador de Dopamina" -msgstr[1] "MCB Simulador de Dopamina" +msgstr[0] "MCB Estimulador de Dopamina" +msgstr[1] "MCB Estimulador de Dopamina" #. ~ Description for {'str': 'Dopamine Stimulators CBM'} #: lang/json/BIONIC_ITEM_from_json.py @@ -26657,14 +26550,45 @@ msgstr "" "cerebral. Tiene un temporizador desde su instalación y no tenés los códigos " "para resetearlo." +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "MCB Arma Craneal" +msgstr[1] "MCB Arma Craneal" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" +"Tenés una pistola de un disparo calibre .40 escondida en la cabeza. Activá " +"el biónico para disparar y recargar la escopeta." + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "MCB Soldadora de Precisión" +msgstr[1] "MCB Soldadora de Precisión" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire cutters." +" They serve no purpose on their own, but are required for crafting bionics." +msgstr "" +"Es un conjunto de herramientas electrónicas que incluye soldadora de mano y " +"alicate. Así por sí mismo, no sirve de nada, pero son necesarios para crear " +"biónicos." + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" msgstr[0] "MCB Generador de Sobrecarga Iónica" msgstr[1] "MCB Generador de Sobrecarga Iónica" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -26792,41 +26716,43 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Generic Nonfiction Book" msgid_plural "Generic Nonfiction Books" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de No Ficción Genérico" +msgstr[1] "Libros de No Ficción Genéricos" #. ~ Description for Generic Nonfiction Book #: lang/json/BOOK_from_json.py msgid "template for a manuscript purporting to be factual" msgstr "" +"Es una plantilla para un manuscrito que pretende ser basado en hechos " +"reales." #: lang/json/BOOK_from_json.py msgid "Generic Fiction Book" msgid_plural "Generic Fiction Books" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de Ficción Genérico" +msgstr[1] "Libros de Ficción Genéricos" #. ~ Description for Generic Fiction Book #: lang/json/BOOK_from_json.py msgid "template for a work of fiction" -msgstr "" +msgstr "Es una plantilla para una obra de ficción." #: lang/json/BOOK_from_json.py msgid "Generic Hard Bound Fiction Book" msgid_plural "Generic Hard Bound Fiction Books" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de Tapa Dura de Ficción Genérico" +msgstr[1] "Libros de Tapa Dura de Ficción Genéricos" #. ~ Description for Generic Hard Bound Fiction Book #: lang/json/BOOK_from_json.py msgid "Template for hard bound book of fiction" -msgstr "" +msgstr "Es la plantilla para libros en tapa dura de ficción." #: lang/json/BOOK_from_json.py msgid "paperback novel" msgid_plural "paperbacks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "novela en rústica" +msgstr[1] "novelas en rústica" #. ~ Description for {'str': 'paperback novel', 'str_pl': 'paperbacks'} #: lang/json/BOOK_from_json.py @@ -26836,30 +26762,61 @@ msgstr "Es un libro común con tapa blanda. ¿O no? Sí." #: lang/json/BOOK_from_json.py msgid "Nonfiction Book" msgid_plural "Nonfiction Books" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de No Ficción" +msgstr[1] "Libros de No Ficción" #. ~ Description for Nonfiction Book #: lang/json/BOOK_from_json.py msgid "template for hard bound nonfiction book" -msgstr "" +msgstr "Es la plantilla para libros en tapa dura de no ficción." #: lang/json/BOOK_from_json.py msgid "Nonfiction Paperback" msgid_plural "Nonfiction Paperbacks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "libro en rústica de no ficción" +msgstr[1] "libros en rústica de no ficción" #. ~ Description for Nonfiction Paperback #: lang/json/BOOK_from_json.py msgid "template for a paperback nonfiction book" +msgstr "Es una plantilla para libros en rústica de no ficción." + +#: lang/json/BOOK_from_json.py +msgid "Generic Pulp Book" +msgid_plural "Generic Pulp Books" +msgstr[0] "Novela Sensacionalista Genérica" +msgstr[1] "Novelas Sensacionalistas Genéricas" + +#. ~ Description for Generic Pulp Book +#: lang/json/BOOK_from_json.py +msgid "" +"This is a template for pulp books. Which really all ought to be paperbacks," +" right?" msgstr "" +"Es una plantilla para novelas sensacionalistas. Que deben ser todas con tapa" +" blanda, ¿no?" + +#: lang/json/BOOK_from_json.py +msgid "Generic SciFi Book" +msgid_plural "Generic SciFi Books" +msgstr[0] "Libro de Ciencia Ficción Genérico" +msgstr[1] "Libros de Ciencia Ficción Genéricos" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for paperback scifi books." +msgstr "Es una plantilla para libros en rústica de ciencia ficción." + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for a hard cover scifi book." +msgstr "Es una plantilla para libros de tapa dura de ciencia ficción." #: lang/json/BOOK_from_json.py msgid "Homemaking Book" msgid_plural "Homemaking Books" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de Amo de Casa" +msgstr[1] "Libros de Amo de Casa" #. ~ Description for Homemaking Book #: lang/json/BOOK_from_json.py @@ -26867,30 +26824,32 @@ msgid "" "This is a template for books about homemaking, style, home decor, and home " "economics." msgstr "" +"Es una plantilla para libros acerca de reparaciones hogareñas, estilos, " +"decoración y economía del hogar." #: lang/json/BOOK_from_json.py msgid "Hardcover Cookbook" msgid_plural "Hardcover Cookbooks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de Tapa Dura de Recetas" +msgstr[1] "Libros de Tapa Dura de Recetas" #. ~ Description for Hardcover Cookbook #. ~ Description for Softcover Cookbook #: lang/json/BOOK_from_json.py msgid "This is a template for books about cooking." -msgstr "" +msgstr "Es una plantilla para libros de recetas." #: lang/json/BOOK_from_json.py msgid "Softcover Cookbook" msgid_plural "Softcover Cookbooks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro en Rústica de Recetas" +msgstr[1] "Libros en Rústica de Recetas" #: lang/json/BOOK_from_json.py msgid "dodge skillbook abstract" msgid_plural "dodge skillbook abstracts" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "nota sobre habilidad esquivar" +msgstr[1] "notas sobre habilidad esquivar" #. ~ Description for dodge skillbook abstract #: lang/json/BOOK_from_json.py @@ -26900,30 +26859,30 @@ msgstr "Es un libro común. ¿O no? Sí, lo es." #: lang/json/BOOK_from_json.py msgid "Hardcover Philosophy" msgid_plural "Hardcover Philosophys" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de Tapa Dura de Filosofía" +msgstr[1] "Libros de Tapa Dura de Filosofía" #. ~ Description for Hardcover Philosophy #: lang/json/BOOK_from_json.py msgid "This is a template for books about philosophy." -msgstr "" +msgstr "Es una plantilla para libros de filosofía." #: lang/json/BOOK_from_json.py msgid "Softcover Philosophy." msgid_plural "Softcover Philosophy.s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro en Rústica de Filosofía" +msgstr[1] "Libros en Rústica de Filosofía" #. ~ Description for Softcover Philosophy. #: lang/json/BOOK_from_json.py msgid "This is a template for paperbacks about philosophy." -msgstr "" +msgstr "Es una plantilla para libros en rústica de filosofía." #: lang/json/BOOK_from_json.py msgid "Hardcover Nonfiction Sports Book" msgid_plural "Hardcover Nonfiction Sports Books" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de Tapa Dura No Ficticio sobre Deportes" +msgstr[1] "Libros de Tapa Dura No Ficticios sobre Deportes" #. ~ Description for Hardcover Nonfiction Sports Book #. ~ Description for Softcover Nonfiction Sports Book. @@ -26931,31 +26890,31 @@ msgstr[1] "" #. ~ Description for Softcover Fictional Sports Book. #: lang/json/BOOK_from_json.py msgid "This is a template." -msgstr "" +msgstr "Esto es una plantilla." #: lang/json/BOOK_from_json.py msgid "Softcover Nonfiction Sports Book." msgid_plural "Softcover Nonfiction Sports Book.s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro en Rústica No Ficticio de Deportes" +msgstr[1] "Libros en Rústica No Ficticios de Deportes" #: lang/json/BOOK_from_json.py msgid "Hardcover Fictional Sports Book" msgid_plural "Hardcover Fictional Sports Books" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro de Tapa Dura Ficticio sobre Deportes" +msgstr[1] "Libros de Tapa Dura Ficticios sobre Deportes" #: lang/json/BOOK_from_json.py msgid "Softcover Fictional Sports Book." msgid_plural "Softcover Fictional Sports Book.s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Libro en Rústica Ficticio sobre Deportes" +msgstr[1] "Libros en Rústica Ficticios sobre Deportes" #: lang/json/BOOK_from_json.py msgid "template for mass produced books on esoteric subjects" msgid_plural "template for mass produced books on esoteric subjectss" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "plantilla para libros de producción masiva sobre esoterismo" +msgstr[1] "plantillas para libros de producción masiva sobre esoterismo" #. ~ Description for template for mass produced books on esoteric subjects #: lang/json/BOOK_from_json.py @@ -27073,35 +27032,36 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Satire Template" msgid_plural "Satire Templates" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Plantilla para Sátira" +msgstr[1] "Plantillas para Sátira" #. ~ Description for Satire Template #: lang/json/BOOK_from_json.py msgid "template for mass produced satirical fiction" msgstr "" +"Es una plantilla para un libro de producción masiva satírico y de ficción." #: lang/json/BOOK_from_json.py msgid "Magazine Template" msgid_plural "Magazine Templates" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Plantilla para Revista" +msgstr[1] "Plantillas para Revista" #. ~ Description for Magazine Template #: lang/json/BOOK_from_json.py msgid "template for magazine" -msgstr "" +msgstr "Es una plantilla para revista." #: lang/json/BOOK_from_json.py msgid "News Magazine Template" msgid_plural "News Magazine Templates" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Plantilla para Revista de Noticias" +msgstr[1] "Plantillas para Revista de Noticias" #. ~ Description for News Magazine Template #: lang/json/BOOK_from_json.py msgid "template for news magazine" -msgstr "" +msgstr "Es una plantilla para una revista de noticias." #: lang/json/BOOK_from_json.py msgid "readable magazine" @@ -27112,13 +27072,14 @@ msgstr[1] "revistas legibles" #: lang/json/BOOK_from_json.py msgid "archery skill training abstract" msgid_plural "archery skill training abstracts" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "nota sobre habilidad esquivar" +msgstr[1] "notas sobre habilidad esquivar" #. ~ Description for archery skill training abstract #: lang/json/BOOK_from_json.py msgid "template for heavy books that confer archery skill training" msgstr "" +"Es una plantilla para libros grandes que otorgan entrenamiento en arquería." #: lang/json/BOOK_from_json.py msgid "Lessons for the Novice Bowhunter" @@ -27730,10 +27691,10 @@ msgid "" "You could probably learn a lot about cooking from studying this domestic " "artifact." msgstr "" -"Una gran carpeta llena de recetas de alguna familia. Las elegantes páginas y" -" esquinas arrugadas nos da una idea de la cantidad de conocimiento culinario" -" que contiene. Probablemente, puedas aprender mucho sobre cocina estudiando " -"este libro casero." +"Es una gran carpeta llena de recetas de alguna familia. Las elegantes " +"páginas y esquinas arrugadas nos da una idea de la cantidad de conocimiento " +"culinario que contiene. Probablemente, puedas aprender mucho sobre cocina " +"estudiando este libro casero." #: lang/json/BOOK_from_json.py msgid "Bon Appetit" @@ -28229,7 +28190,7 @@ msgid "" "A thick textbook for beginning drivers. It contains chapters on laws, safe " "vehicle operation, and defensive driving concepts." msgstr "" -"Un libro grueso para conductores principiantes. Contiene capítulos sobre " +"Es un libro grueso para conductores principiantes. Contiene capítulos sobre " "leyes, operación segura del vehículo y conceptos de conducción defensiva." #. ~ Description for {'str': 'AAA Guide', 'str_pl': 'copies of AAA Guide'} @@ -28439,8 +28400,8 @@ msgstr[1] "esquemas" #. 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py lang/json/TOOL_from_json.py #: lang/json/furniture_from_json.py lang/json/skill_from_json.py @@ -29706,10 +29667,10 @@ msgstr[1] "novelas de aventura" #: lang/json/BOOK_from_json.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." +"in the heart of the African continent." msgstr "" -"Una excitante historia sobre una carrera contra el tiempo, en busca de una " -"ciudad perdida localizada en el corazón oscuro del continente africano." +"Es una excitante historia sobre una carrera contra el tiempo, en busca de " +"una ciudad perdida localizada en el corazón del continente africano." #: lang/json/BOOK_from_json.py msgid "buddy novel" @@ -29726,30 +29687,6 @@ msgstr "" "Es una atrapante historia de dos amigos luchando por sobrevivir en las " "calles de la ciudad de Nueva York." -#: lang/json/BOOK_from_json.py -msgid "coming of age novel" -msgid_plural "coming of age novels" -msgstr[0] "novela de iniciación" -msgstr[1] "novelas de iniciación" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." -msgstr "" -"Una clásica historia sobre madurar, narra las emotivas y divertidas " -"experiencias de un joven sobre la vida, el amor y el sexo." - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A graphic novel about a young girl living in Iran during the 1980's, seeing " -"the world change around her as Iraq invaded her country." -msgstr "" -"Es una novela gráfica acerca de una joven mujer viviendo en Irán durante los" -" 80, viendo cómo el mundo cambia a su alrededor cuando Irak invade su país." - #: lang/json/BOOK_from_json.py msgid "crime novel" msgid_plural "crime novels" @@ -29892,88 +29829,6 @@ msgstr[1] "novelas de misterio" msgid "A detective investigates an unusual murder in a secluded location." msgstr "Un detective investiga un inusual asesinato en un lugar aislado." -#: lang/json/BOOK_from_json.py -msgid "pulp novel" -msgid_plural "pulp novels" -msgstr[0] "novela pulp" -msgstr[1] "novelas pulp" - -#. ~ Description for {'str': 'pulp novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "" -"Un historia dura de detectives, llena de acción contundente e intriga." - -#: lang/json/BOOK_from_json.py -msgid "Planet of the Murderous Squids that Time Forgot!" -msgid_plural "Planet of the Murderous Squids that Time Forgot!s" -msgstr[0] "¡Planeta de Calamares Asesinos que el Tiempo Olvidó!" -msgstr[1] "¡Planeta de Calamares Asesinos que el Tiempo Olvidó!" - -#. ~ Description for Planet of the Murderous Squids that Time Forgot! -#: lang/json/BOOK_from_json.py -msgid "" -"In this psychedelic adventure novel of cosmic exploration, an elderly " -"assassin discovers a planet too good to be true. Only once it is too late " -"does she discover the harrowing truth at the center of \"The Planet of the " -"Murderous Squids that Time Forgot!\"" -msgstr "" -"En esta psicodélica novela de aventura y exploración cósmica, una asesina " -"anciana descubre un planeta demasiado bueno para ser cierto. Una vez que es " -"demasiado tarde, ella descubre la horrorosa verdad en el medio de \"¡El " -"Planeta de Calamares Asesinos que el Tiempo Olvidó!\"" - -#: lang/json/BOOK_from_json.py -msgid "The Great Capes of Metropolis" -msgid_plural "The Great Capes of Metropoliss" -msgstr[0] "Las Grandes Capas de Metrópolis" -msgstr[1] "Las Grandes Capas de Metrópolis" - -#. ~ Description for The Great Capes of Metropolis -#: lang/json/BOOK_from_json.py -msgid "" -"In this classic pulp paperback of superheroic exploits, a group of masked " -"vigilantes with diverse superpowers learn to work together to defeat the " -"ultimate villain." -msgstr "" -"En esta clásica novela sensacionalista en rústica de abusos de superhéroes, " -"un grupo de vigilantes enmascarados con diversos poderes aprenden a trabajar" -" en equipo para vencer al principal villano." - -#: lang/json/BOOK_from_json.py -msgid "Yesterday's Murdered" -msgid_plural "Yesterday's Murdereds" -msgstr[0] "Asesinatos de Ayer" -msgstr[1] "Asesinatos de Ayer" - -#. ~ Description for Yesterday's Murdered -#: lang/json/BOOK_from_json.py -msgid "" -"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" -" has one last shot at vengeance." -msgstr "" -"En esta novela noir sensacionalista y rápida, un detective de buen tomar con" -" los nervios de acero tiene una última oportunidad para vengarse." - -#: lang/json/BOOK_from_json.py -msgid "Flashgun Condor and the Crimson Criminal" -msgid_plural "Flashgun Condor and the Crimson Criminals" -msgstr[0] "Flashgun Condor y los Criminales Carmesí" -msgstr[1] "Flashgun Condor y los Criminales Carmesí" - -#. ~ Description for Flashgun Condor and the Crimson Criminal -#: lang/json/BOOK_from_json.py -msgid "" -"A hot-blooded photographer who fights crime with film, footage, and fists, " -"Condor is more than a mere shutterbug on the crime beat. But will she be " -"able to unravel a devious deception and bring the \"Crimson Criminal\" to " -"justice?" -msgstr "" -"Una fotógrafa de sangre caliente que lucha contra el crimen con película, " -"grabaciones y puños, Condor es más que una mera fotógrafa de policiales. " -"Pero ¿podrá descubrir el retorcido engaño de los \"Criminales Carmesí\"?" - #: lang/json/BOOK_from_json.py msgid "road novel" msgid_plural "road novels" @@ -30175,11 +30030,11 @@ msgstr[1] "novelas de samurai" 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." +"marauding outlaws. This hardback is quite hefty." msgstr "" "La clásica historia de un espadachín errante que llega a un pequeño poblado " "y es contratado para ayudar a sus habitantes a defenderse de una banda de " -"forajidos saqueadores." +"forajidos saqueadores. Esta versión de tapa dura es bastante pesada." #: lang/json/BOOK_from_json.py msgid "satire novel" @@ -30231,20 +30086,23 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Master and Margarita" -msgid_plural "The Master and Margaritas" +msgid_plural "copies of Master and Margarita" msgstr[0] "Margarita y el Maestro" -msgstr[1] "Margarita y el Maestro" +msgstr[1] "copias de Margarita y el Maestro" -#. ~ Description for The Master and Margarita +#. ~ Description for {'str': 'The Master and Margarita', 'str_pl': 'copies of +#. Master and Margarita'} #: lang/json/BOOK_from_json.py msgid "" "Featuring a cast that includes Satan, Pontius Pilate, Jesus Christ, " -"vampires, a talking cat, and the literary elite of Moscow, this is a satire " -"on Stalinist tyranny written by Mikhail Bulgakov." +"vampires, a talking cat, and the literary elite of Moscow, this novel by " +"Mikhail Bulgakov explores philosophical issues on the nature of good and " +"evil." msgstr "" "Con personajes que incluyen a Satán, Poncio Pilatos, Jesucristo, vampiros, " -"un gato parlante y la elite literaria de Moscú, esto es una sátira de la " -"tiranía estalinista escrita por Mikhail Bulgakov." +"un gato parlante y la elite literaria de Moscú, esta novela de Mikhail " +"Bulgakov explora los problemas filosóficos de la naturaleza del bien y del " +"mal." #: lang/json/BOOK_from_json.py msgid "A Handful of Dust" @@ -30278,399 +30136,6 @@ msgstr "" " amenaza de una destrucción nuclear no es mucha influencia en la naturaleza " "humana." -#: lang/json/BOOK_from_json.py -msgid "scifi novel" -msgid_plural "scifi novels" -msgstr[0] "novela de ciencia ficción" -msgstr[1] "novelas de ciencia ficción" - -#. ~ Description for {'str': 'scifi novel'} -#: lang/json/BOOK_from_json.py -msgid "Aliens, ray guns, and space ships." -msgstr "Extraterrestres, pistolas de rayos y naves espaciales." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" -" surprisingly accurate in predicting much of modern society… Until " -"recently." -msgstr "" -"Es una copia de \"Neuromante\" de Gibson. Escrito en los ochenta, fue " -"sorprendentemente preciso al predecir la sociedad moderna... Hasta hace " -"poco." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" -"\n" -"Tyger, Tyger, Burning bright,\n" -"In the forests of the night:\n" -"What immortal hand or eye,\n" -"Dare frame thy fearful symmetry?" -msgstr "" -"Esto es una copia de \"Las estrellas mi destino\" de Alfred Bester.\n" -"\n" -" ¡Tigre! ¡Tigre! Ardiendo brillante,\n" -"en los bosques de la noche:\n" -"¿qué inmortal mano u ojo\n" -"podrá reflejar tu terrible simetría?" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" -"stains have smudged the occasional word." -msgstr "" -"Es una copia de \"La rueda celeste\" de Ursula Le Guin. Tiene manchas de " -"dedos sucios en algunas palabras." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." -msgstr "Es una copia de \"Los desposeídos\" de Ursula Le Guin." - -#: lang/json/BOOK_from_json.py -msgid "This copy of Ray Bradbury's \"Fahrenheit 451\"." -msgstr "Es una copia de \"Fahrenheit 451\" de Ray Bradbury." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Hyperion\" by Dan Simmons." -msgstr "Es una copia de \"Hyperion\" de Dan Simmons." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" -"\n" -"Give us gods. Oh give them us!\n" -"Give us gods.\n" -"We are so tired of men\n" -"And motor-power." -msgstr "" -"Es una copia de \"Endymion\" de Dan Simmons. Comienza con un poema de D.H. Lawrence:\n" -"\n" -"Danos dioses, ¡oh dánoslos!\n" -"Danos dioses.\n" -"Estamos cansados del hombre\n" -"y el poder del motor." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." -msgstr "" -"Es una copia de \"¿Sueñan los androides con ovejas eléctricas?\" de Phillip " -"K. Dick." - -#: lang/json/BOOK_from_json.py -msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." -msgstr "" -"Es una copia con las puntas dobladas de \"Nova Express\" de William " -"Burroughs." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " -"ripped off." -msgstr "" -"Es una copia de \"Fundación\" de Isaac Asimov. La contratapa fue arrancada." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " -"some of its pages. Weird." -msgstr "" -"Es una copia con las puntas dobladas de \"Dune\" de Frank Herbert. Tiene " -"arena entre algunas de sus páginas. Raro." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." -msgstr "" -"Es una copia de \"El juicio\" de Franz Kafka. El libro está bastante " -"gastado." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." -msgstr "Es una copia de \"El cuento de la criada\" de Margaret Atwood." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " -"you wonder how Thailand fared the end of the world." -msgstr "" -"Es una copia de \"La chica mecánica\" de Paolo Bacigalupi. La nota en la " -"solapa te hace preguntarte cómo le fue a Tailandia en el fin del mundo. " - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." -msgstr "Es una copia de \"Islas en la red\" de Bruce Sterling." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " -"contains a hand-written grocery list." -msgstr "" -"Es una copia de \"Fundación e imperio\" de Isaac Asimov. La última página " -"tiene una lista de compra del supermercado." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " -"still has the smell of new books within its pages." -msgstr "" -"Esto es una copia casi nueva de \"Una mirada en la oscuridad\" de Phillip K." -" Dick. Todavía conserva el olor de los libros nuevos." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " -"Sterling. The cover has rings of coffee stains over it." -msgstr "" -"Es una copia de \"Mirrorshades: Un antología ciberpunk\", compilado por " -"Bruce Sterling. La tapa tiene machas de café." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " -"looks to have been used to press flowers." -msgstr "" -"Es una copia de \"El mundo de los No-A\" de A. E. van Vogt. Esta copia " -"parece que ha sido usada para secar flores." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." -msgstr "Es una copia de \"Carbono modificado\" de Richard Morgan." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " -"the monster?" -msgstr "" -"Es una copia de \"Frankenstein\" de Mary Shelly. ¿Ese no era el nombre del " -"monstruo?" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" -" handbook." -msgstr "" -"Es una copa de \"Avispa\" de Eric Frank Russel. La guía del terrorista " -"futurista." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " -"covered in dried blood." -msgstr "" -"Es una copia de \"Soy leyenda\" de Richard Matheson. La portada está " -"cubierta de sangre seca." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Roadside Picnic\" by Arkady and Boris Strugatsky." -msgstr "Es una copia de \"Picnic junto al camino\" de Arkady y Boris Strugatsky." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " -"if it's been slightly chewed by a dog or other large animal." -msgstr "" -"Es una copia de \"La guerra interminable\" de Joe Haldeman. Esta copia " -"parece como si hubiera sido masticada un poco por un perro o algún otro " -"animal grande." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." -msgstr "Es una copia de \"La luna es una cruel amante\" de Robert A. Heinlein." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Cat's Cradle\" by Kurt Vonnegut. You notice there is a " -"typo in the authors name on the spine of the book." -msgstr "" -"Es una copia de \"Cuna de gato\" de Kurt Vonnegut. Te llama la atención que " -"hay un error de tipografía en el nombre del autor en el lomo del libro." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " -"Copy. Not for re-sale.\"" -msgstr "" -"Es una copia de \"Nova\" de Samuel R. Delany. La tapa dice \"Copia de " -"reseña. Prohibida su reventa\"." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." -msgstr "Es una copia de \"Las sirenas de Titán\" de Vonnegut." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " -"the first pages in crayon." -msgstr "" -"Es una copia de \"Hierba\" de Sheri S. Tepper. Tiene garabatos de algún " -"chico hechos con crayón en las primeras páginas." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " -"with 'Library Copy'. And a sticker reading 'Science Fiction'." -msgstr "" -"Es una copia de \"Conde Cero\" de William Gibson. El lomo tiene un sello que" -" dice \"Copia de biblioteca\". Y un sticker que dice \"Ciencia ficción\"." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Fifth Season\" by N.K. Jemsin. It smells faintly of" -" dirt." -msgstr "" -"Es una copia de \"La quinta estación\" de N.K. Jemsin. Tiene un poco de olor" -" a tierra." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." -msgstr "Es una copia de \"Los fabricantes de armas\" de A. E. van Vogt." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" -" almost brand new." -msgstr "" -"Es una copia de \"Record of a Spaceborn Few\" de Becky Chambers. Parece casi" -" como nuevo." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " -"and worn, some pages appear to be loose." -msgstr "" -"Es una copia de \"El uso de las armas\" de Ian M. Banks. El lomo está rajado" -" y desgastado, y algunas páginas parecen estar sueltas." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." -msgstr "" -"Es una copia de \"El último hombre\" de Jean-Baptiste Cousin de Grainville." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " -"and thin. You should probably be careful with this copy." -msgstr "" -"Es una copia de \"1984\" de Orwell. Las páginas son finitas y están un poco " -"sueltas. Vas a tener que ser cuidadoso con este libro." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " -"dog-eared and worn." -msgstr "" -"Es una copia de \"Forastero en tierra extraña\" de Heinlein. La tapa tiene " -"la punta doblada y está desgastada." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." -msgstr "Es una copia de \"El juego de Ender\" de Orson Scott Card." - -#: lang/json/BOOK_from_json.py -msgid "This is a weather worn copy of \"Brave New World\" by Aldous Huxley." -msgstr "" -"Es una copia desgastada por el clima de \"Un mundo feliz\" de Aldous Huxley." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." -msgstr "Es una copia de \"El mundo perdido\" de Arthur Conan Doyle." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." -msgstr "Es una copia de \"Islas en el cielo\" de Arthur C. Clarke." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." -msgstr "Es una copia de \"La isla del Doctor Moreau\" de H. G. Wells." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." -msgstr "Es una copia de \"La voz de su amo\" de Stanislaw Lem." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." -msgstr "Es una copia de \"La nube negra\" de Fred Hoyle." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." -msgstr "Es una copia de \"La última y la primera humanidad\" de Olaf Stapledon." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"Solaris\"." -msgstr "Es una copia de \"Solaris\" de Stanislaw Lem." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." -msgstr "Es una copia de \"Más que humano\" de Theodore Sturgeon." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Vurt\" by Jeff Noon." -msgstr "Es una copia de \"Vurt\" de Jeff Noon." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." -msgstr "Es una copia de \"Cántico por Leibowitz\" de Walter M. Miller Jr." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." -msgstr "Es una copia de \"La guerra de los mundos\" de H.G. Wells." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." -msgstr "Es una copia de \"Amanecer de hierro\" de Charles Stross." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " -"blurb reminds you of a Japanese movie you think you once caught on the " -"television late at night." -msgstr "" -"Es una copia de \"Los juegos del hambre\" de Suzanne Collins. La nota de la " -"tapa te hace acordar de una película japonesa que una vez viste en " -"televisión a la noche." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." -msgstr "Es una copia de \"El día de los trífidos\" de John Wyndham." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." -msgstr "Es una copia de \"La naranja mecánica\" de Anthony Burges." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." -msgstr "Es una copia de \"El hombre que cayó en la Tierra\" de Walter Tevis." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." -msgstr "Es una copia de \"Simulacron-3\" de Daniel F. Galouye." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." -msgstr "Es una copia de \"Abejas de cristal\" de Ernst Jünger." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." -msgstr "Es una copia de \"VIaje al centro de la Tierra\" de Jules Verne." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " -"missing from the end of the book. Luckily only mail-order advertisements." -msgstr "" -"Es una copia de \"Mundo Anillo\" de Larry Niven. Le faltan un par de páginas" -" al final del libro. Por suerte, solo eran publicidades." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " -"Douglas Adams." -msgstr "" -"Es una copia bastante gastada de \"Guía del autoestopista galáctico\" de " -"Douglas Adams." - #: lang/json/BOOK_from_json.py msgid "spy novel" msgid_plural "spy novels" @@ -32112,6 +31577,705 @@ msgstr "" "Es una copia de tapa blanda de \"El ser y la nada\" de Jean-Paul Sartre. En " "trabajo esencial de la tradición existencialista." +#: lang/json/BOOK_from_json.py +msgid "pulp novel" +msgid_plural "pulp novels" +msgstr[0] "novela pulp" +msgstr[1] "novelas pulp" + +#. ~ Description for {'str': 'pulp novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hardboiled detective tale filled with hard hitting action and intrigue." +msgstr "" +"Un historia dura de detectives, llena de acción contundente e intriga." + +#: lang/json/BOOK_from_json.py +msgid "Black Valkyries From Venus" +msgid_plural "copies of Black Valkyries" +msgstr[0] "Valquirias Negras de Venus" +msgstr[1] "copias de Valquirias Negras" + +#. ~ Description for {'str': 'Black Valkyries From Venus', 'str_pl': 'copies +#. of Black Valkyries'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a weather-beaten novel written by someone named \"Lee" +" Racket.\"" +msgstr "" +"Tenés en tus manos una novela desgastada por el tiempo, escrita por alguien " +"llamado \"Lee Racket\"." + +#: lang/json/BOOK_from_json.py +msgid "The Wrong Tomorrow" +msgid_plural "copies of Wrong Tomorrow" +msgstr[0] "El Mañana Equivocado" +msgstr[1] "copias de Mañana Equivocado" + +#. ~ Description for {'str': 'The Wrong Tomorrow', 'str_pl': 'copies of Wrong +#. Tomorrow'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a cheap drugstore paperback written by someone named " +"\"Lee Racket.\"" +msgstr "" +"Tenés en tus manos una versión barata en rústica de un libro escrito por " +"alguien llamado \"Lee Racket\"." + +#: lang/json/BOOK_from_json.py +msgid "No God From a Corpse" +msgid_plural "copies of No God" +msgstr[0] "Sin Dios de un Cadáver" +msgstr[1] "copias de Sin Dios" + +#. ~ Description for {'str': 'No God From a Corpse', 'str_pl': 'copies of No +#. God'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a weatherworn paperback written by some skirt named \"Lee Racket.\"" +" It tells how rage and jealousy can turn a man, or a woman, into a monster." +" This story is hard-boiled enough to break a spoon." +msgstr "" +"Es un libro en rústica gastado por el tiempo, escrito por alguien llamado " +"\"Lee Racket\". Cuenta cómo la ira y los celos pueden convertir a un hombre," +" o a una mujer, en un monstruo. Esta historia es tan dura que podría romper " +"una cuchara." + +#: lang/json/BOOK_from_json.py +msgid "The Deep Dive" +msgid_plural "copies of Deep Dive" +msgstr[0] "El Buceo Profundo" +msgstr[1] "copias de Buceo Profundo" + +#. ~ Description for {'str': 'The Deep Dive', 'str_pl': 'copies of Deep Dive'} +#: lang/json/BOOK_from_json.py +msgid "" +"This dimestore short story about space travel is written by a broad named " +"\"Lee Racket.\"" +msgstr "" +"Esta historia corta vendida en locales de todo por dos pesos, habla del " +"viaje por el espacio. Está escrita por \"Lee Racket\"." + +#: lang/json/BOOK_from_json.py +msgid "Planet of the Murderous Squids that Time Forgot!" +msgid_plural "Planet of the Murderous Squids that Time Forgot!s" +msgstr[0] "¡Planeta de Calamares Asesinos que el Tiempo Olvidó!" +msgstr[1] "¡Planeta de Calamares Asesinos que el Tiempo Olvidó!" + +#. ~ Description for Planet of the Murderous Squids that Time Forgot! +#: lang/json/BOOK_from_json.py +msgid "" +"In this psychedelic adventure novel of cosmic exploration, an elderly " +"assassin discovers a planet too good to be true. Only once it is too late " +"does she discover the harrowing truth at the center of \"The Planet of the " +"Murderous Squids that Time Forgot!\"" +msgstr "" +"En esta psicodélica novela de aventura y exploración cósmica, una asesina " +"anciana descubre un planeta demasiado bueno para ser cierto. Una vez que es " +"demasiado tarde, ella descubre la horrorosa verdad en el medio de \"¡El " +"Planeta de Calamares Asesinos que el Tiempo Olvidó!\"" + +#: lang/json/BOOK_from_json.py +msgid "The Great Capes of Metropolis" +msgid_plural "The Great Capes of Metropoliss" +msgstr[0] "Las Grandes Capas de Metrópolis" +msgstr[1] "Las Grandes Capas de Metrópolis" + +#. ~ Description for The Great Capes of Metropolis +#: lang/json/BOOK_from_json.py +msgid "" +"In this classic pulp paperback of superheroic exploits, a group of masked " +"vigilantes with diverse superpowers learn to work together to defeat the " +"ultimate villain." +msgstr "" +"En esta clásica novela sensacionalista en rústica de abusos de superhéroes, " +"un grupo de vigilantes enmascarados con diversos poderes aprenden a trabajar" +" en equipo para vencer al principal villano." + +#: lang/json/BOOK_from_json.py +msgid "Yesterday's Murdered" +msgid_plural "Yesterday's Murdereds" +msgstr[0] "Asesinatos de Ayer" +msgstr[1] "Asesinatos de Ayer" + +#. ~ Description for Yesterday's Murdered +#: lang/json/BOOK_from_json.py +msgid "" +"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" +" has one last shot at vengeance." +msgstr "" +"En esta novela noir sensacionalista y rápida, un detective de buen tomar con" +" los nervios de acero tiene una última oportunidad para vengarse." + +#: lang/json/BOOK_from_json.py +msgid "Flashgun Condor and the Crimson Criminal" +msgid_plural "Flashgun Condor and the Crimson Criminals" +msgstr[0] "Flashgun Condor y los Criminales Carmesí" +msgstr[1] "Flashgun Condor y los Criminales Carmesí" + +#. ~ Description for Flashgun Condor and the Crimson Criminal +#: lang/json/BOOK_from_json.py +msgid "" +"A hot-blooded photographer who fights crime with film, footage, and fists, " +"Condor is more than a mere shutterbug on the crime beat. But will she be " +"able to unravel a devious deception and bring the \"Crimson Criminal\" to " +"justice?" +msgstr "" +"Una fotógrafa de sangre caliente que lucha contra el crimen con película, " +"grabaciones y puños, Condor es más que una mera fotógrafa de policiales. " +"Pero ¿podrá descubrir el retorcido engaño de los \"Criminales Carmesí\"?" + +#: lang/json/BOOK_from_json.py +msgid "scifi novel" +msgid_plural "scifi novels" +msgstr[0] "novela de ciencia ficción" +msgstr[1] "novelas de ciencia ficción" + +#. ~ Description for {'str': 'scifi novel'} +#: lang/json/BOOK_from_json.py +msgid "Aliens, ray guns, and space ships." +msgstr "Extraterrestres, pistolas de rayos y naves espaciales." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" +" surprisingly accurate in predicting much of modern society… Until " +"recently." +msgstr "" +"Es una copia de \"Neuromante\" de Gibson. Escrito en los ochenta, fue " +"sorprendentemente preciso al predecir la sociedad moderna... Hasta hace " +"poco." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" +"\n" +"Tyger, Tyger, Burning bright,\n" +"In the forests of the night:\n" +"What immortal hand or eye,\n" +"Dare frame thy fearful symmetry?" +msgstr "" +"Esto es una copia de \"Las estrellas mi destino\" de Alfred Bester.\n" +"\n" +" ¡Tigre! ¡Tigre! Ardiendo brillante,\n" +"en los bosques de la noche:\n" +"¿qué inmortal mano u ojo\n" +"podrá reflejar tu terrible simetría?" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" +"stains have smudged the occasional word." +msgstr "" +"Es una copia de \"La rueda celeste\" de Ursula Le Guin. Tiene manchas de " +"dedos sucios en algunas palabras." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." +msgstr "Es una copia de \"Los desposeídos\" de Ursula Le Guin." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Hyperion\" by Dan Simmons." +msgstr "Es una copia de \"Hyperion\" de Dan Simmons." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" +"\n" +"Give us gods. Oh give them us!\n" +"Give us gods.\n" +"We are so tired of men\n" +"And motor-power." +msgstr "" +"Es una copia de \"Endymion\" de Dan Simmons. Comienza con un poema de D.H. Lawrence:\n" +"\n" +"Danos dioses, ¡oh dánoslos!\n" +"Danos dioses.\n" +"Estamos cansados del hombre\n" +"y el poder del motor." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." +msgstr "" +"Es una copia de \"¿Sueñan los androides con ovejas eléctricas?\" de Phillip " +"K. Dick." + +#: lang/json/BOOK_from_json.py +msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." +msgstr "" +"Es una copia con las puntas dobladas de \"Nova Express\" de William " +"Burroughs." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " +"ripped off." +msgstr "" +"Es una copia de \"Fundación\" de Isaac Asimov. La contratapa fue arrancada." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." +msgstr "" +"Es una copia de \"El juicio\" de Franz Kafka. El libro está bastante " +"gastado." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." +msgstr "Es una copia de \"El cuento de la criada\" de Margaret Atwood." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " +"you wonder how Thailand fared the end of the world." +msgstr "" +"Es una copia de \"La chica mecánica\" de Paolo Bacigalupi. La nota en la " +"solapa te hace preguntarte cómo le fue a Tailandia en el fin del mundo. " + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." +msgstr "Es una copia de \"Islas en la red\" de Bruce Sterling." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " +"contains a hand-written grocery list." +msgstr "" +"Es una copia de \"Fundación e imperio\" de Isaac Asimov. La última página " +"tiene una lista de compra del supermercado." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " +"still has the smell of new books within its pages." +msgstr "" +"Esto es una copia casi nueva de \"Una mirada en la oscuridad\" de Phillip K." +" Dick. Todavía conserva el olor de los libros nuevos." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " +"Sterling. The cover has rings of coffee stains over it." +msgstr "" +"Es una copia de \"Mirrorshades: Un antología ciberpunk\", compilado por " +"Bruce Sterling. La tapa tiene machas de café." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " +"looks to have been used to press flowers." +msgstr "" +"Es una copia de \"El mundo de los No-A\" de A. E. van Vogt. Esta copia " +"parece que ha sido usada para secar flores." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." +msgstr "Es una copia de \"Carbono modificado\" de Richard Morgan." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " +"the monster?" +msgstr "" +"Es una copia de \"Frankenstein\" de Mary Shelly. ¿Ese no era el nombre del " +"monstruo?" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" +" handbook." +msgstr "" +"Es una copa de \"Avispa\" de Eric Frank Russel. La guía del terrorista " +"futurista." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " +"covered in dried blood." +msgstr "" +"Es una copia de \"Soy leyenda\" de Richard Matheson. La portada está " +"cubierta de sangre seca." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " +"if it's been slightly chewed by a dog or other large animal." +msgstr "" +"Es una copia de \"La guerra interminable\" de Joe Haldeman. Esta copia " +"parece como si hubiera sido masticada un poco por un perro o algún otro " +"animal grande." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." +msgstr "Es una copia de \"La luna es una cruel amante\" de Robert A. Heinlein." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " +"Copy. Not for re-sale.\"" +msgstr "" +"Es una copia de \"Nova\" de Samuel R. Delany. La tapa dice \"Copia de " +"reseña. Prohibida su reventa\"." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." +msgstr "Es una copia de \"Las sirenas de Titán\" de Vonnegut." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " +"the first pages in crayon." +msgstr "" +"Es una copia de \"Hierba\" de Sheri S. Tepper. Tiene garabatos de algún " +"chico hechos con crayón en las primeras páginas." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " +"with 'Library Copy'. And a sticker reading 'Science Fiction'." +msgstr "" +"Es una copia de \"Conde Cero\" de William Gibson. El lomo tiene un sello que" +" dice \"Copia de biblioteca\". Y un sticker que dice \"Ciencia ficción\"." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." +msgstr "Es una copia de \"Los fabricantes de armas\" de A. E. van Vogt." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" +" almost brand new." +msgstr "" +"Es una copia de \"Record of a Spaceborn Few\" de Becky Chambers. Parece casi" +" como nuevo." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " +"and worn, some pages appear to be loose." +msgstr "" +"Es una copia de \"El uso de las armas\" de Ian M. Banks. El lomo está rajado" +" y desgastado, y algunas páginas parecen estar sueltas." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." +msgstr "" +"Es una copia de \"El último hombre\" de Jean-Baptiste Cousin de Grainville." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " +"and thin. You should probably be careful with this copy." +msgstr "" +"Es una copia de \"1984\" de Orwell. Las páginas son finitas y están un poco " +"sueltas. Vas a tener que ser cuidadoso con este libro." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " +"dog-eared and worn." +msgstr "" +"Es una copia de \"Forastero en tierra extraña\" de Heinlein. La tapa tiene " +"la punta doblada y está desgastada." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." +msgstr "Es una copia de \"El juego de Ender\" de Orson Scott Card." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." +msgstr "Es una copia de \"El mundo perdido\" de Arthur Conan Doyle." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." +msgstr "Es una copia de \"Islas en el cielo\" de Arthur C. Clarke." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." +msgstr "Es una copia de \"La isla del Doctor Moreau\" de H. G. Wells." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." +msgstr "Es una copia de \"La voz de su amo\" de Stanislaw Lem." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." +msgstr "Es una copia de \"La nube negra\" de Fred Hoyle." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." +msgstr "Es una copia de \"La última y la primera humanidad\" de Olaf Stapledon." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"Solaris\"." +msgstr "Es una copia de \"Solaris\" de Stanislaw Lem." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." +msgstr "Es una copia de \"Más que humano\" de Theodore Sturgeon." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Vurt\" by Jeff Noon." +msgstr "Es una copia de \"Vurt\" de Jeff Noon." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." +msgstr "Es una copia de \"Cántico por Leibowitz\" de Walter M. Miller Jr." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." +msgstr "Es una copia de \"La guerra de los mundos\" de H.G. Wells." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." +msgstr "Es una copia de \"Amanecer de hierro\" de Charles Stross." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " +"blurb reminds you of a Japanese movie you think you once caught on the " +"television late at night." +msgstr "" +"Es una copia de \"Los juegos del hambre\" de Suzanne Collins. La nota de la " +"tapa te hace acordar de una película japonesa que una vez viste en " +"televisión a la noche." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." +msgstr "Es una copia de \"El día de los trífidos\" de John Wyndham." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." +msgstr "Es una copia de \"La naranja mecánica\" de Anthony Burges." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." +msgstr "Es una copia de \"El hombre que cayó en la Tierra\" de Walter Tevis." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." +msgstr "Es una copia de \"Simulacron-3\" de Daniel F. Galouye." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." +msgstr "Es una copia de \"Abejas de cristal\" de Ernst Jünger." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." +msgstr "Es una copia de \"VIaje al centro de la Tierra\" de Jules Verne." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " +"missing from the end of the book. Luckily only mail-order advertisements." +msgstr "" +"Es una copia de \"Mundo Anillo\" de Larry Niven. Le faltan un par de páginas" +" al final del libro. Por suerte, solo eran publicidades." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " +"Douglas Adams." +msgstr "" +"Es una copia bastante gastada de \"Guía del autoestopista galáctico\" de " +"Douglas Adams." + +#: lang/json/BOOK_from_json.py +msgid "Dune" +msgid_plural "copies of Dune" +msgstr[0] "Dune" +msgstr[1] "copias de Dune" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " +"some of its pages. Weird." +msgstr "" +"Es una copia con las puntas dobladas de \"Dune\" de Frank Herbert. Tiene " +"arena entre algunas de sus páginas. Raro." + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Dune\" by Frank Herbert. It is a fairly new " +"reprint with the words \"SOON TO BE A MAJOR MOTION PICTURE\" splashed across" +" its dust jacket." +msgstr "" +"Es una copia robusta de \"Dune\" de Frank Herbert. Es una reedición bastante" +" nueva que tiene escrito \"PRONTA A SER UNA IMPORTANTE PELÍCULA\" en la " +"funda." + +#: lang/json/BOOK_from_json.py +msgid "Parable of the Talents" +msgid_plural "copies of Parable of the Talents" +msgstr[0] "Parábola de los Talentos" +msgstr[1] "copias de Parábola de los Talentos" + +#. ~ Description for {'str': 'Parable of the Talents', 'str_pl': 'copies of +#. Parable of the Talents'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Parable of the Talents.\". It is Octavia " +"Butler's sequel to her book \"Parable of the Sower.\"" +msgstr "" +"Es una copia robusta de \"Parábola de los Talentos\". Es la secuela de " +"Octavia Butler a su libro \"Parabóla del Sembrador\"." + +#: lang/json/BOOK_from_json.py +msgid "The Fifth Season" +msgid_plural "signed copies of Fifth Season" +msgstr[0] "La Quinta Estación" +msgstr[1] "copias autografiadas de Quinta Estación" + +#. ~ Description for {'str': 'The Fifth Season', 'str_pl': 'signed copies of +#. Fifth Season'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a signed hardcover copy of the Hugo award winning \"The Fifth " +"Season\" by N.K. Jemisin. It smells faintly of dirt." +msgstr "" +"Es una copia autografiada de tapa dura de \"La Quinta Estación\" de N.K. " +"Jemisin, ganadora del premio Hugo. Tiene un olor usave a tierra." + +#: lang/json/BOOK_from_json.py +msgid "We" +msgid_plural "copies of We" +msgstr[0] "Nosotros" +msgstr[1] "copias de Nosotros" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"This hardback book is titled \"The Annotated We: A New Translation of Evgeny Zamiatin's Novel.\"\n" +"\n" +"It is Vladimir Wozniuk's 2015 translation of \"We,\" originally published in 1924 and generally seen as the first modern dystopian novel. The commentary examines the profusive allusions and highlights the poetic nature of Zamiatin's language." +msgstr "" +"Este libro de tapa dura se llama \"Nostros Anotado: Una Nueva Traducción de la Novela de Yevgueni Zamiatin.\"\n" +"\n" +"Es la traducción de 2015 de Vladimir Wozniuk de \"Nosotros\" originalmente publicada en 1924 y generalmente vista como la primera novela distópica moderna. Las notas examinan las profusas alusiones y partes más importantes en la naturaleza poética del lengua de Zamiatin." + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"A seminal work of dystopian fiction, Evgeny Zamiatin's \"We\" was first published in 1924 but suppresed by the Soviet Union until 1988.\n" +"\n" +"This mass-market 1993 edition you've found was translated from the Russian by Clarence Brown and includes a short introduction. The slightly worn cover features a surrealist photo of a person gazing backward suspiciouly." +msgstr "" +"Es un trabajo fundamental de la ficción distópica, \"Nosotros\" de Yevgueni Zamiatin fue publicada en 1924 pero oculta por la Unión Soviética hasta 1988.\n" +"\n" +"Esta edición masiva de 1993 que encontraste ha sido traducida del ruso por Clarence Brown e incluye una breve introducción. La tapa levemente gastada tiene una imagen surrealista de una persona mirando hacia atrás sospechosamente." + +#: lang/json/BOOK_from_json.py +msgid "The Cyberiad" +msgid_plural "copies of The Cyberiad" +msgstr[0] "La Ciberíada" +msgstr[1] "copias de La Ciberíada" + +#. ~ Description for {'str': 'The Cyberiad', 'str_pl': 'copies of The +#. Cyberiad'} +#: lang/json/BOOK_from_json.py +msgid "" +"This 350 page paperback presents the exploits and robotic rivalries of Trurl" +" and Klapaucius. Originally written in Polish by Stanislaw Lem, it has been" +" masterfully translated into English by Michael Kandel." +msgstr "" +"Este libro en rústica de 350 páginas presenta los abusos y rivalidades " +"robóticas de Trurl y Klapaucius. Originalmente escrito en polaco por " +"Stanislaw Lem, ha sido traducida al inglés por Michael Kandel." + +#: lang/json/BOOK_from_json.py +msgid "Brave New World" +msgid_plural "copies of Brave New World" +msgstr[0] "Un Mundo Feliz" +msgstr[1] "copias de Un Mundo Feliz" + +#. ~ Description for {'str': 'Brave New World', 'str_pl': 'copies of Brave New +#. World'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is weather worn copy of \"Brave New World\" by Aldous Huxley looks like" +" it has been left out in rain. The novel begins in a bleak building where " +"fetuses are grown in bottles on an assembly line." +msgstr "" +"Es una copia desgastade de \"Un Mundo Feliz\" de Aldous Huxley, que parece " +"haber agarrada por la lluvia. La novela comienza en un lúgubre edificio " +"donde se crian fetos en botellas en una línea de montaje." + +#: lang/json/BOOK_from_json.py +msgid "Roadside Picnic" +msgid_plural "copies of Roadside Picnic" +msgstr[0] "Picnic al Borde del Camino" +msgstr[1] "copias de Picnic al Borde del Camino" + +#. ~ Description for {'str': 'Roadside Picnic', 'str_pl': 'copies of Roadside +#. Picnic'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a paperback copy of \"Roadside Picnic\" by Arkady and Boris " +"Strugatsky. It has been translated into over 20 languages, occasionally " +"under the name \"Stalker.\" This copy, fortunately for you, just happens to" +" be in your native tongue." +msgstr "" +"Es una copia en rústica de \"Picnic al Borde del Camino\" de Arkady y Boris " +"Strugatsky. Ha sido traducido a más de 20 idiomas, a veces con el nombre " +"\"Stalker\". Esta versión, por suerte, está en tu idioma." + +#: lang/json/BOOK_from_json.py +msgid "Fahrenheit 451" +msgid_plural "copies of Fahrenheit 451" +msgstr[0] "Fahrenheit 451" +msgstr[1] "copias de Fahrenheit 451" + +#. ~ Description for {'str': 'Fahrenheit 451', 'str_pl': 'copies of Fahrenheit +#. 451'} +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "Es una copia de \"Fahrenheit 451\" de Ray Bradbury." + +#: lang/json/BOOK_from_json.py +msgid "" +"Some joker has gently burnt the exterior edge of this paperback dystopia. " +"It's still perfectly readable." +msgstr "" +"Algún chistoso le quemó levemente el borde a esta versión en rústica de esta" +" distopía. Igual, es perfectamente legible." + +#: lang/json/BOOK_from_json.py +msgid "" +"\"It was a pleasure to burn. It was a special pleasure to see things eaten," +" to see things blackened and changed.\"" +msgstr "" +"\"Fue un placer quemarlos. Fue especialmente un placer ver cosas devoradas, " +"ver cosas ennegrecidas y cambiadas.\"" + +#: lang/json/BOOK_from_json.py +msgid "" +"This 1979 softcover edition of Ray Bradbury's \"Fahrenheit 451\" was once a " +"library book. It still has a light blue checkout card pocketed on the torn " +"back cover. One \"Suzanne Collins\" borrowed it in 1981." +msgstr "" +"Esta versión de tapa blanda de 1979 de \"Fahrenheit 451\" de Ray Bradbury " +"pertenecía a una biblioteca. Todavía tiene la tarjetita celeste de los " +"préstamos en la tapa de atrás. Una tal Suzanne Collins lo sacó en 1981." + +#: lang/json/BOOK_from_json.py +msgid "" +"The red and black paperback novel you hold in your hands is a modern reprint" +" of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" +"La novela roja y negra en rústica que tenés en las manos, es una reimpresión" +" moderna de \"Fahrenheit 451\" de Ray Bradbury." + +#: lang/json/BOOK_from_json.py +msgid "" +"This scifi novel is divided into three parts: \"The Hearth and the " +"Salamander,\" \"The Sieve and the Sand,\", and \"Burning Bright.\"" +msgstr "" +"Esta novela de ciencia ficción está dividida en tres partes: \"Era Estupendo" +" Quemar\", \"La Criba y la Arena\" y \"Fuego Vivo\"." + #: lang/json/BOOK_from_json.py msgid "sports novel" msgid_plural "sports novels" @@ -32496,12 +32660,14 @@ msgstr[1] "10 Cosas Copadas de los Portadores de Anillo" #: lang/json/BOOK_from_json.py msgid "" "This book is for the delightful little ring bearer in your wedding. The " -"author depicts the responsibility and the honor in being a ring bearer your " -"little angel will cherish." +"author depicts the responsibility and honor in being a ring bearer. Your " +"little angel will cherish this book as he or she learns how to behave on " +"your perfect day." msgstr "" "Este libro es para los encantadores y pequeños portadores de anillos en tu " "casamiento. El autor describe la responsabilidad y el honor de ser un " -"portador de anillo que tu pequeño ángel valorará." +"portador de anillo. Tu pequeño ángel valorará este libro y él o ella " +"aprenderá cómo comportarse en tu día perfecto." #: lang/json/BOOK_from_json.py msgid "How to Raise a Gentleman: A Civilized Guide to Parenting" @@ -34073,11 +34239,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Adorkable Girl" -msgid_plural "The Adorkable Girls" -msgstr[0] "La Chica Tontadorable" -msgstr[1] "La Chica Tontadorable" +msgid_plural "copies of Adorkable" +msgstr[0] "La Chica Adorkable" +msgstr[1] "copias de Adorkable" -#. ~ Description for The Adorkable Girl +#. ~ Description for {'str': 'The Adorkable Girl', 'str_pl': 'copies of +#. Adorkable'} #: lang/json/BOOK_from_json.py msgid "" "When a therapist's daughter transfers to a new school, she decides to change" @@ -34090,26 +34257,28 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Becoming Jackson" -msgid_plural "Becoming Jacksons" +msgid_plural "copies of Becoming Jackson" msgstr[0] "Volviéndose Jackson" -msgstr[1] "Volviéndose Jackson" +msgstr[1] "copias de Volviéndose Jackson" -#. ~ Description for Becoming Jackson +#. ~ Description for {'str': 'Becoming Jackson', 'str_pl': 'copies of Becoming +#. Jackson'} #: lang/json/BOOK_from_json.py msgid "" "When Jackson gains the mystical talent to alter his appearance on command, " -"how will he continue to recognize himself in his own mirror?" +"will he be able to recognize himself in his own mirror?" msgstr "" "Cuando Jackson obtiene el talento místico de alterar su apariencia cuando " -"quiere, ¿podrá continuar reconociéndose a sí mismo en el espejo?" +"quiere, ¿podrá reconocerse a sí mismo en el espejo?" #: lang/json/BOOK_from_json.py msgid "Nothing Burned" -msgid_plural "Nothing Burneds" +msgid_plural "copies of Nothing Burned" msgstr[0] "Nada Quemado" -msgstr[1] "Nada Quemado" +msgstr[1] "copias de Nada Quemado" -#. ~ Description for Nothing Burned +#. ~ Description for {'str': 'Nothing Burned', 'str_pl': 'copies of Nothing +#. Burned'} #: lang/json/BOOK_from_json.py msgid "" "A teenage influencer becomes fast friends with someone who may or may not be" @@ -34120,11 +34289,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "High and Low" -msgid_plural "High and Lows" +msgid_plural "copies of High and Low" msgstr[0] "Alto y Bajo" -msgstr[1] "Alto y Bajo" +msgstr[1] "copias de Alto y Bajo" -#. ~ Description for High and Low +#. ~ Description for {'str': 'High and Low', 'str_pl': 'copies of High and +#. Low'} #: lang/json/BOOK_from_json.py msgid "" "In this work of adolescent fiction, a young gemini discovers that the " @@ -34139,11 +34309,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Fire When You See My Eyes" -msgid_plural "Fire When You See My Eyess" -msgstr[0] "Fuego Cuando Miras Mis Ojos" -msgstr[1] "Fuego Cuando Miras Mis Ojos" +msgid_plural "copies of Fire When" +msgstr[0] "Dispara Cuando Veas Mis Ojos" +msgstr[1] "copias de Dispara Cuando" -#. ~ Description for Fire When You See My Eyes +#. ~ Description for {'str': 'Fire When You See My Eyes', 'str_pl': 'copies of +#. Fire When'} #: lang/json/BOOK_from_json.py msgid "" "In a cataclysmic future, advanced technology gives parents access to video " @@ -34154,11 +34325,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Peanut Butter Bruised" -msgid_plural "Peanut Butter Bruiseds" -msgstr[0] "Moretones de Mantequilla de Maní" -msgstr[1] "Moretones de Mantequilla de Maní" +msgid_plural "copies of Peanut Butter Bruised" +msgstr[0] "Moretón de Crema de Maní" +msgstr[1] "copias de Moretón de Crema de Maní" -#. ~ Description for Peanut Butter Bruised +#. ~ Description for {'str': 'Peanut Butter Bruised', 'str_pl': 'copies of +#. Peanut Butter Bruised'} #: lang/json/BOOK_from_json.py msgid "" "In this work of young adult fiction, a woman raised on food stamps falls in " @@ -34171,11 +34343,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Ready When You Are" -msgid_plural "Ready When You Ares" -msgstr[0] "Listo Cuando Vos Lo Estés" -msgstr[1] "Listo Cuando Vos Lo Estés" +msgid_plural "copies of Ready When" +msgstr[0] "Listo Cuando Estés Listo" +msgstr[1] "copias de Listo Cuando" -#. ~ Description for Ready When You Are +#. ~ Description for {'str': 'Ready When You Are', 'str_pl': 'copies of Ready +#. When'} #: lang/json/BOOK_from_json.py msgid "" "When three teenage girls ditch class to drive cross country together they " @@ -34189,11 +34362,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Study of a Boy" -msgid_plural "Study of a Boys" +msgid_plural "copies of \"Study of a Boy\"" msgstr[0] "Estudio de un Chico" -msgstr[1] "Estudio de un Chico" +msgstr[1] "copias de \"Estudio de un Chico\"" -#. ~ Description for Study of a Boy +#. ~ Description for {'str': 'Study of a Boy', 'str_pl': 'copies of "Study of +#. a Boy"'} #: lang/json/BOOK_from_json.py msgid "" "A high school sophomore's personal journal is stolen and then leaked on " @@ -34206,11 +34380,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Summer Variables" -msgid_plural "Summer Variabless" -msgstr[0] "Variables de Verano" -msgstr[1] "Variables de Verano" +msgid_plural "copies of Summer Variables" +msgstr[0] "Variaciones de Verano" +msgstr[1] "copias de Variaciones de Verano" -#. ~ Description for Summer Variables +#. ~ Description for {'str': 'Summer Variables', 'str_pl': 'copies of Summer +#. Variables'} #: lang/json/BOOK_from_json.py msgid "" "In this book written primarily for young adults, a woman's modest summer " @@ -34221,6 +34396,73 @@ msgstr "" "pasantía de verano de una mujer se convierte en un increíble descubrimiento " "que atrae la atención de elementos desagradables." +#: lang/json/BOOK_from_json.py +msgid "In a Dark Place" +msgid_plural "copies of Dark Place" +msgstr[0] "En un Lugar Oscuro" +msgstr[1] "copias de Lugar Oscuro" + +#. ~ Description for {'str': 'In a Dark Place', 'str_pl': 'copies of Dark +#. Place'} +#: lang/json/BOOK_from_json.py +msgid "" +"Markia dreams about the future. Theo longs for the past. Together can they" +" find a way to live in the now?" +msgstr "" +"Markia sueña con el futuro. Theo añora el pasado. ¿Podrán encontrar juntos " +"una manera de vivir en el presente?" + +#: lang/json/BOOK_from_json.py +msgid "Betrayal Takes Two" +msgid_plural "copies of Betrayal" +msgstr[0] "Se Necesitan Dos Para Traicionar" +msgstr[1] "copias de Se Necesitan Dos Para Traicionar" + +#. ~ Description for {'str': 'Betrayal Takes Two', 'str_pl': 'copies of +#. Betrayal'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a hard cover book for older teens. The two main characters pull a " +"cruel prank on their classmates, and are brought together both by their " +"frantic efforts to avoid being caught and their shared sense of guilt." +msgstr "" +"Es una copia de tapa dura para adolescentes tardíos. Los dos personajes " +"principales le hacen una broma a sus compañeros de clase, y estrechan su " +"relación tanto por sus esfuerzos frenéticos para evitar ser atrapados y su " +"sentimiento compartido de culpabilidad." + +#: lang/json/BOOK_from_json.py +msgid "coming of age novel" +msgid_plural "coming of age novels" +msgstr[0] "novela de iniciación" +msgstr[1] "novelas de iniciación" + +#. ~ Description for {'str': 'coming of age novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." +msgstr "" +"Una clásica historia sobre madurar, narra las emotivas y divertidas " +"experiencias de un joven sobre la vida, el amor y el sexo." + +#: lang/json/BOOK_from_json.py +msgid "Pantheon: The Story of an Iranian Youth" +msgid_plural "copies of Pantheon" +msgstr[0] "Panteón: La Historia de la Juventud Iraní" +msgstr[1] "copias de Panteón" + +#. ~ Description for {'str': 'Pantheon: The Story of an Iranian Youth', +#. 'str_pl': 'copies of Pantheon'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hard cover graphic novel about a young girl living in Iran during the " +"1980's, seeing the world change around her as Iraq invaded her country." +msgstr "" +"Es una novela gráfica con tapa dura acerca de una joven mujer viviendo en " +"Irán durante los 80, viendo cómo el mundo cambia a su alrededor cuando Irak " +"invade su país." + #: lang/json/BOOK_from_json.py msgid "original copy of Housefly" msgid_plural "original copies of Housefly" @@ -36116,6 +36358,53 @@ msgstr "" "presión del aire hará caer a los enemigos al suelo, el conjuro es " "inofensivo." +#: lang/json/BOOK_from_json.py +msgid "Scroll of Knock" +msgid_plural "Scrolls of Knock" +msgstr[0] "Pergamino de Abrir" +msgstr[1] "Pergaminos de Abrir" + +#. ~ Description for {'str': 'Scroll of Knock', 'str_pl': 'Scrolls of Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open locked wooden doors from a short " +"range away." +msgstr "" +"Podés canalizar la energía mágica para abrir puertas de madera cerradas " +"desde una corta distancia." + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Improved Knock" +msgid_plural "Scrolls of Improved Knock" +msgstr[0] "Pergamino de Abrir Mejorado" +msgstr[1] "Pergaminos de Abrir Mejorado" + +#. ~ Description for {'str': 'Scroll of Improved Knock', 'str_pl': 'Scrolls of +#. Improved Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open any locked door from a short range " +"away." +msgstr "" +"Podés canalizar la energía mágica para abrir cualquier puerta cerrada desde " +"una corta distancia." + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "Pergamino de Arco Repelente" +msgstr[1] "Pergaminos de Arco Repelente" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of +#. Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers" +" with baleful lightning." +msgstr "" +"Manifestás un aura de electricidad chisporroteante alrededor tuyo para " +"golpear a los atacantes con rayos malignos." + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -36523,43 +36812,6 @@ msgstr "" " Te quiero,\n" " - F. \"." -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "En el Principio... Fue la Línea de Comando" -msgstr[1] "copias de En el Principio... Fue la Línea de Comando" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', -#. 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "" -"Es un ensayo humorístico de 1999 escrito por Neal Stephenson, comparando a " -"los vendedores de sistemas operativos con los vendedores de autos." - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "Principios de Diseño del Compilador" -msgstr[1] "copias de Principios de Diseño del Compilador" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': -#. 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" -"Es el libro de texto clásico de informática de 1977 escrito por Alfred Aho y" -" Jeffrey Ullman. También conocido como El libro del dragón verde porque en " -"la tapa tiene el dibujo de un caballero empuñando un parser LALR y la " -"traducción dirigida a sintaxis contra un dragón verde metafórico, La " -"Complejidad del Diseño del Compilador." - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -38382,18 +38634,8 @@ msgstr[1] "pedazos de carne mutante" #. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py -msgid "" -"Meat from a heavily mutated animal. It has an unsettling loose and spongy " -"texture, but smells… mostly normal. There are strange tangles and " -"formations in it that don't appear natural at all: bits of bone and hair " -"crusted up inside the muscle, as if trying to form another organism. Still," -" seems digestible at least, if you cook it and remove the worst parts." -msgstr "" -"Es la carne de un animal muy mutado. Tiene una textura perturbadoramente " -"floja y esponjosa, pero el olor... es casi normal. Tiene extraños nudos y " -"formaciones que no parece nada naturales: pedazos de hueso y pelo " -"incrustados en el músculo, como si intentaran formar otro organismo. De " -"todas maneras, para digerible, si lo cocinás y le sacás las peores partes." +msgid "Meat from a heavily mutated animal." +msgstr "Es carne de un animal muy mutado." #: lang/json/COMESTIBLE_from_json.py msgid "scrap of mutant meat" @@ -38405,15 +38647,11 @@ msgstr[1] "pedazos de carne mutante" #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"A tiny scrap of meat from a heavily mutated animal. It smells a bit odd, " -"and has bits of hair and bone mixed in that seem like they grew inside the " -"muscle itself. Still, seems digestible at least, if you cook it and remove " -"the worst parts." +"A tiny scrap of meat from a heavily mutated animal. It smells unappealing, " +"to say the least." msgstr "" -"Es un pedacito de carne de un animal muy mutado. Tiene un olor raro, y " -"pedazos de pelo y hueso mezclados que parecen haber crecido dentro de los " -"mismos músculos. Igual, parece ser digerible, por lo menos, si lo cocinás y " -"le sacás las peores partes." +"Es un pequeño pedazo de carne de un animal muy mutado. Tiene un olor poco " +"atractivo, por decir lo menos." #: lang/json/COMESTIBLE_from_json.py msgid "mutant humanoid meat" @@ -38497,14 +38735,8 @@ msgstr[1] "carnes mutantes cocinadas" #. ~ Description for cooked mutant meat #: lang/json/COMESTIBLE_from_json.py -msgid "" -"This is a cooked chunk of meat from a mutated animal. It has an unsettling," -" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" -" the bits of hair and bone out…" -msgstr "" -"Es un pedazo cocinado de carne de un animal mutante. Tiene una textura " -"perturbadoramente esponjosa, pero el gusto... es bastante normal. Con " -"suerte, ya le pudiste sacar todos los pedazos de pelo y hueso..." +msgid "This is a cooked chunk of meat from a mutated animal." +msgstr "Esto es un pedazo de carne cocinada de un animal mutado." #: lang/json/COMESTIBLE_from_json.py msgid "cooked scrap of mutant meat" @@ -38512,6 +38744,16 @@ msgid_plural "cooked scraps of mutant meat" msgstr[0] "pedazo de carne mutante cocinada" msgstr[1] "pedazos de carne mutante cocinada" +#. ~ Description for {'str': 'cooked scrap of mutant meat', 'str_pl': 'cooked +#. scraps of mutant meat'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"This is a tiny scrap of cooked mutant meat. It is small enough that it's " +"hard to tell how disgusting it is." +msgstr "" +"Esto es un pedacito de carne mutante cocinada. Es lo suficientemente pequeña" +" para que no te des cuenta de lo desagradable que es." + #: lang/json/COMESTIBLE_from_json.py msgid "raw offal" msgid_plural "raw offals" @@ -38546,6 +38788,17 @@ msgstr "" " esenciales, pero mucha gente lo considera desagradable salvo que sea " "cuidadosamente preparado." +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant organs" +msgid_plural "mutant organs" +msgstr[0] "órganos mutantes" +msgstr[1] "órganos mutantes" + +#. ~ Description for {'str_sp': 'mutant organs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "These organs came from a giant mutant bug." +msgstr "Estos órganos pertenecieron a un insecto gigante mutado." + #: lang/json/COMESTIBLE_from_json.py msgid "pickled offal" msgid_plural "pickled offal" @@ -38748,6 +39001,17 @@ msgstr "" " sabor. No parece más sabroso que cuando estaba crudo, pero al menos los " "parásitos han sido eliminados." +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant lungs" +msgid_plural "mutant lungs" +msgstr[0] "pulmones mutantes" +msgstr[1] "pulmones mutantes" + +#. ~ Description for {'str_sp': 'mutant lungs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "You're pretty sure this is lung tissue." +msgstr "Estás bastante seguro que esto es tejido de pulmón." + #: lang/json/COMESTIBLE_from_json.py msgid "raw liver" msgid_plural "raw livers" @@ -38934,11 +39198,13 @@ msgstr[1] "pedazos de grasa mutante" #. mutant fat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Freshly butchered fat from a heavily mutated animal. You could eat it raw, " -"but it is better used as an ingredient in other foods or projects." +"Freshly butchered fat from a heavily mutated animal. It smells, if " +"anything, even more disgusting than the rest of the mutant. There are " +"little puddles of unidentified oils dripping from it." msgstr "" -"Es grasa recién carneada de un animal muy mutado. La podés comer cruda, pero" -" es mejor usarla como ingrediente para otras comidas o proyectos." +"Es grasa recién carneada de un animal muy mutado. Tiene un olor, si es " +"posible, más desagradable que el resto del mutante. Hay algunos charquitos " +"de un aceite desconocido que gotean de la carne." #: lang/json/COMESTIBLE_from_json.py msgid "mutant tallow" @@ -40501,19 +40767,19 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "Es agua con azúcar o miel agregada. El gusto está bien." #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" -msgstr[0] "té" -msgstr[1] "té" +msgid "black tea" +msgid_plural "black teas" +msgstr[0] "té negro" +msgstr[1] "tés negros" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves" -" of the tea plant /Camellia sinensis/." +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." msgstr "" -"La bebida del caballero, hecha aplicando agua caliente a hojas de la planta " -"del té, Camellia sinensis." +"La bebida del caballero, hecha poniendo agua caliente a hojas oxidadas de la" +" planta del té, /Camellia sinensis/." #: lang/json/COMESTIBLE_from_json.py msgid "bark tea" @@ -40566,6 +40832,39 @@ msgstr "" "Agua mineral extravagante, tan extravagante que tenerla en la mano te hace " "sentir extravagante." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "té verde" +msgstr[1] "tés verdes" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia sinensis/." +" Green tea has a lighter, fresher taste than black and is traditionally " +"preferred in Asian cultures." +msgstr "" +"Se hace poniendo agua caliente a hojas de la planta del té /Camellia " +"sinensis/. El té verde es más de sabor más fresco y liviano que el negro, y " +"es tradicionalmente preferido en las culturas asiáticas." + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "té frutal" +msgstr[1] "tés frutales" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "" +"Es una sabrosa bebida que se hace con hierbas y fruta disecada de otras " +"plantas que no sean la del té. Aunque coloquialmente se lo llama 'té', " +"técnicamente es una infusión." + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -40597,7 +40896,7 @@ msgid "" "The beverage of gentlemen everywhere, made from applying hot water to leaves" " of the tea plant /Camellia sinensis/. Added sweetener for a better taste." msgstr "" -"Es la bebida del caballero, hecha aplicando agua caliente a hojas de la " +"Es la bebida del caballero, hecha poniendo agua caliente a hojas de la " "planta del té, Camellia sinensis. Con edulcorante agregado para mejorar su " "sabor." @@ -42147,14 +42446,14 @@ msgstr "" #: lang/json/COMESTIBLE_from_json.py msgid "peanut butter candy" msgid_plural "peanut butter candies" -msgstr[0] "golosina de mantequilla de maní" -msgstr[1] "golosinas de mantequilla de maní" +msgstr[0] "golosina de crema de maní" +msgstr[1] "golosinas de crema de maní" #. ~ Description for {'str': 'peanut butter candy', 'str_pl': 'peanut butter #. candies'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of peanut butter cups… your favorite!" -msgstr "Es un puñado de bocaditos de mantequilla de maní... ¡tus favoritos!" +msgstr "Es un puñado de bocaditos de crema de maní… ¡tus favoritos!" #: lang/json/COMESTIBLE_from_json.py msgid "chocolate candy" @@ -46880,7 +47179,6 @@ msgstr[0] "piñones" msgstr[1] "piñones" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "Es un puñado de frutos secos sabrosos y crujientes de una piña." @@ -47155,8 +47453,8 @@ msgstr "" #: lang/json/COMESTIBLE_from_json.py msgid "peanut butter" msgid_plural "peanut butters" -msgstr[0] "mantequilla de maní" -msgstr[1] "mantequilla de maní" +msgstr[0] "crema de maní" +msgstr[1] "crema de maní" #. ~ Description for peanut butter #: lang/json/COMESTIBLE_from_json.py @@ -47170,8 +47468,8 @@ msgstr "" #: lang/json/COMESTIBLE_from_json.py msgid "imitation peanutbutter" msgid_plural "imitation peanutbutters" -msgstr[0] "imitación de mantequilla de maní" -msgstr[1] "imitación de mantequilla de maní" +msgstr[0] "imitación de crema de maní" +msgstr[1] "imitación de crema de maní" #. ~ Description for imitation peanutbutter #: lang/json/COMESTIBLE_from_json.py @@ -47181,13 +47479,13 @@ msgstr "Es una pasta espesa y marrón, con gusto a nuez." #: lang/json/COMESTIBLE_from_json.py msgid "peanut butter spread" msgid_plural "peanut butter spreads" -msgstr[0] "mantequilla de maní untable" -msgstr[1] "mantequilla de maní untable" +msgstr[0] "crema de maní untable" +msgstr[1] "crema de maní untable" #. ~ Description for peanut butter spread #: lang/json/COMESTIBLE_from_json.py msgid "Processed peanut butter spread.." -msgstr "Es mantequilla de maní procesada para untar." +msgstr "Es crema de maní procesada para untar." #: lang/json/COMESTIBLE_from_json.py msgid "acorns" @@ -47943,19 +48241,49 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "Es néctar. Si ves esto es un bug." #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" -msgstr[0] "saquito de té" -msgstr[1] "saquitos de té" +msgid "black tea bag" +msgid_plural "black tea bags" +msgstr[0] "saquito de té negro" +msgstr[1] "saquitos de té negro" + +#. ~ Description for {'str': 'black tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "" +"Es un saquito de papel con hojas de té adentro. Ponelo en agua hirviendo " +"para hacer una taza de té negro." + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "saquito de té verde" +msgstr[1] "saquitos de té verde" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'green tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." msgstr "" "Es un saquito de papel con hojas de té adentro. Ponelo en agua hirviendo " -"para hacer una taza de té." +"para hacer una taza de té verde." + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" +msgstr[0] "saquito de té frutal" +msgstr[1] "saquitos de té frutal" + +#. ~ Description for {'str': 'fruit tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." +msgstr "" +"Es un saquito de papel con hojas de té y pedazos de frutas adentro. Ponelo " +"en agua hirviendo para hacer una taza de té frutal." #: lang/json/COMESTIBLE_from_json.py msgid "herbal tea bag" @@ -48055,25 +48383,17 @@ msgstr[1] "raciones de proteína" #. ~ Description for {'str': 'protein ration'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"SoyPelusa ran a highly successful crowdfunding campaign for their signature " -"protein bar, dubbed \"DaiZoom.\" A person can live on one of these bars, " -"three times a day, presumably forever. After backers received their " -"product, a single flaw was found: most consumers found starvation preferable" -" to the flavor. Warehouses of the product went unsold as the company went " -"bankrupt, providing the perfect opportunity for FEMA to scoop them up and " -"stock the evac shelters. Now, you hold a piece of famous crowdfunding " -"history in your hands. How exciting." +"SoyPelusa ran a highly successful crowdfunding campaign for their signature protein bar, dubbed \"DaiZoom.\"\n" +"\n" +"A person can live on one of these bars, three times a day, presumably forever. After backers received their product, a single flaw was found: most consumers found starvation preferable to the flavor. Warehouses of the product went unsold as the company went bankrupt, providing the perfect opportunity for FEMA to scoop them up and stock the evac shelters.\n" +"\n" +"Now, you hold a piece of famous crowdfunding history in your hands. How exciting." msgstr "" -"SoyPelusa hizo una campaña muy exitosa para juntar fondos para su clásica " -"barra de proteínas, apodada \"DaiZoom\". Una persona puede vivir con una de " -"estas barras, tres veces por día, presumiblemente para siempre. Luego de que" -" los patrocinadores recibieron el producto, solo se encontró una falla: la " -"mayoría de los consumidores decidieron que era mejor la hambruna que el " -"sabor que tenía. Quedaron sin vender depósitos enteros del producto cuando " -"la compañía quedó en bancarrota, lo que le dio la oportunidad perfecta a " -"FEMA para agarrarlas y guardarlas en los refugios de evacuación. Ahora, " -"tenés un pedazo de la historia de las campañas de recolección de dinero en " -"tus manos. Qué excitante." +"SoyPelusa hizo una campaña muy exitosa para juntar fondos para su clásica barra de proteínas, apodada \"DaiZoom\".\n" +"\n" +"Una persona puede vivir con una de estas barras, tres veces por día, presumiblemente para siempre. Luego de que los patrocinadores recibieron el producto, solo se encontró una falla: la mayoría de los consumidores decidieron que era mejor la hambruna que el sabor que tenía. Quedaron sin vender depósitos enteros del producto cuando la compañía quedó en bancarrota, lo que le dio la oportunidad perfecta a FEMA para agarrarlas y guardarlas en los refugios de evacuación.\n" +"\n" +"Ahora, tenés un pedazo de la historia de las campañas de recolección de dinero en tus manos. Qué excitante." #: lang/json/COMESTIBLE_from_json.py msgid "protein shake" @@ -48966,12 +49286,12 @@ msgstr "" " para extraer la azúcar." #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" -msgstr[0] "hoja de té" -msgstr[1] "hojas de té" +msgid "black tea leaf" +msgid_plural "black tea leaves" +msgstr[0] "hoja de té negro" +msgstr[1] "hojas de té negro" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " @@ -48980,6 +49300,21 @@ msgstr "" "Hojas secas de una planta tropical. La podés hervir para hacer té, o las " "podés comer crudas. No te van a llenar mucho, igual." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "hoja de té verde" +msgstr[1] "hojas de té verde" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "" +"Son hojas secas de una planta tropical. La podés hervir para hacer té verde," +" o te las podés comer crudas. No te van a llenar mucho, igual." + #: lang/json/COMESTIBLE_from_json.py msgid "tomato" msgid_plural "tomatoes" @@ -49284,8 +49619,8 @@ msgstr "Pan y carne, eso." #: lang/json/COMESTIBLE_from_json.py msgid "peanut butter sandwich" msgid_plural "peanut butter sandwiches" -msgstr[0] "sánguche de mantequilla de maní" -msgstr[1] "sánguches de mantequilla de maní" +msgstr[0] "sánguche de crema de maní" +msgstr[1] "sánguches de crema de maní" #. ~ Description for {'str': 'peanut butter sandwich', 'str_pl': 'peanut #. butter sandwiches'} @@ -49294,8 +49629,8 @@ msgid "" "Some peanut butter smothered between two pieces of bread. Not very filling " "and will stick to the roof of your mouth like glue." msgstr "" -"Es un poco de mantequilla de maní entre dos pedazos de pan. No te llena " -"mucho y se te pega al paladar como pegamento." +"Es un poco de crema de maní entre dos pedazos de pan. No te llena mucho y se" +" te pega al paladar como pegamento." #: lang/json/COMESTIBLE_from_json.py msgid "PB&J sandwich" @@ -49309,8 +49644,8 @@ msgid "" "A delicious peanut butter and jelly sandwich. It reminds you of the times " "your mother would make you lunch." msgstr "" -"Es un delicioso sánguche de mantequilla de maní y mermelada. Te hace acordar" -" a cuando tu vieja te preparaba el almuerzo (si hubieras vivido en EE.UU.)" +"Es un delicioso sánguche de crema de maní y mermelada. Te hace acordar a " +"cuando tu vieja te preparaba el almuerzo (si hubieras vivido en EE.UU.)" #: lang/json/COMESTIBLE_from_json.py msgid "PB&H sandwich" @@ -49324,8 +49659,8 @@ msgid "" "Some damned fool put honey on this peanut butter sandwich, who in their " "right mind- oh wait this is pretty good." msgstr "" -"Algún estúpido puso miel en su sánguche de mantequilla de maní, que en su " -"sano juicio- ah, pará, está bastante bueno." +"Algún estúpido puso miel en su sánguche de crema de maní, que en su sano " +"juicio- ah, pará, está bastante bueno." #: lang/json/COMESTIBLE_from_json.py msgid "PB&M sandwich" @@ -49339,8 +49674,8 @@ msgid "" "Who knew you could mix maple syrup and peanut butter to create yet another " "different sandwich?" msgstr "" -"¿Quién hubiera dicho que se podía mezclar jarabe de arce y mantequilla de " -"maní para crear otro sánguche más?" +"¿Quién hubiera dicho que se podía mezclar jarabe de arce y crema de maní " +"para crear otro sánguche más?" #: lang/json/COMESTIBLE_from_json.py msgid "fish sandwich" @@ -49409,7 +49744,7 @@ msgstr[1] "rizomas de lúpulo" #. ~ Description for {'str_sp': 'hop rhizomes'} #: lang/json/COMESTIBLE_from_json.py msgid "Roots of a hop plant, for growing your own." -msgstr "Raíces de una planta de lúpulo, para poder hacer crecer más." +msgstr "Son raíces de una planta de lúpulo, para poder cultivar más." #: lang/json/COMESTIBLE_from_json.py msgid "hops" @@ -51941,6 +52276,74 @@ msgstr "" " puede ser usada para hornear pan, de manera más efectiva que si fuera solo " "harina." +#: lang/json/COMESTIBLE_from_json.py +msgid "pineapple stem" +msgid_plural "pineapple stem" +msgstr[0] "tallo de ananá" +msgstr[1] "tallo de ananá" + +#. ~ Description for {'str_sp': 'pineapple stem'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Roots of a pineapple plant, for growing your own." +msgstr "Son raíces de una planta de ananá, para poder cultivar más." + +#: lang/json/COMESTIBLE_from_json.py +msgid "melon seeds" +msgid_plural "melon seeds" +msgstr[0] "semillas de melón" +msgstr[1] "semillas de melón" + +#. ~ Description for {'str_sp': 'melon seeds'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some melon seeds." +msgstr "Son unas semillas de melón." + +#: lang/json/COMESTIBLE_from_json.py +msgid "banana saplings" +msgid_plural "banana saplings" +msgstr[0] "brotes de banano" +msgstr[1] "brotes de banano" + +#. ~ Description for {'str_sp': 'banana saplings'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some banana saplings." +msgstr "Son unos brotes de banano." + +#: lang/json/COMESTIBLE_from_json.py +msgid "orange vine" +msgid_plural "orange vine" +msgstr[0] "liana de naranja" +msgstr[1] "liana de naranja" + +#. ~ Description for {'str_sp': 'orange vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some orange vine. Definitely GMO." +msgstr "Son unas lianas de naranja. Definitivamente, transgénicas." + +#: lang/json/COMESTIBLE_from_json.py +msgid "lemon vine" +msgid_plural "lemon vine" +msgstr[0] "liana de limón" +msgstr[1] "liana de limón" + +#. ~ Description for {'str_sp': 'lemon vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some lemon vines. Definitely GMO." +msgstr "Son unas lianas de limón. Definitivamente, transgénicas." + +#: lang/json/COMESTIBLE_from_json.py +msgid "subterraenean coconut" +msgid_plural "subterraenean coconut" +msgstr[0] "coco subterráneo" +msgstr[1] "coco subterráneo" + +#. ~ Description for {'str_sp': 'subterraenean coconut'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Proof that man went too far before the Cataclysm." +msgstr "" +"Es una prueba de que el hombre había ido demasiado lejos antes del " +"Cataclismo." + #: lang/json/COMESTIBLE_from_json.py msgid "vampire mutagen" msgid_plural "vampire mutagens" @@ -52407,6 +52810,12 @@ msgid_plural "ankylosaurus eggs" msgstr[0] "huevo de ankylosaurus" msgstr[1] "huevos de ankylosaurus" +#: lang/json/COMESTIBLE_from_json.py +msgid "apatosaurus egg" +msgid_plural "apatosaurus eggs" +msgstr[0] "huevo de apatosaurus" +msgstr[1] "huevos de apatosaurus" + #: lang/json/COMESTIBLE_from_json.py msgid "ceratosaurus egg" msgid_plural "ceratosaurus eggs" @@ -52785,7 +53194,7 @@ msgid_plural "scream mushrooms" msgstr[0] "grithongo" msgstr[1] "grithongos" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -53012,115 +53421,6 @@ msgstr "" "No existimos en este momento. Pequeño humano inteligente, ¿así que debugging" " para ver esto? No te vamos a permitir unirte mientras estamos modeando." -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "TEST piñones" -msgstr[1] "TEST piñones" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when" -" eaten raw." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do" -" not drink!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "mosto de vino de pelota de tenis" -msgstr[1] "mostos de vino de pelota de tenis" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "" -"Es vino sin fermentar de pelota de tenis. Un jugo gomoso y hervido hecho con" -" pelotas de tenis aplastadas." - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "" - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -54100,21 +54400,6 @@ msgstr[1] "latas de aluminio" msgid "An aluminum can, like what soda comes in." msgstr "Es una lata de aluminio, como la de las gaseosas." -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "lata abierta de aluminio" -msgstr[1] "latas abiertas de aluminio" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Es una lata de aluminio, como las de las gaseosas. Esta ha sido abierto y no" -" puede ser sellada fácilmente." - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -54124,27 +54409,12 @@ msgstr[1] "tetras" #. ~ Description for {'str': 'paper carton'} #: lang/json/GENERIC_from_json.py msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." +"A half gallon carton constructed of a paper, aluminum, and plastic laminate." " It has a threaded cap for easy resealing." msgstr "" "Es un tetra de dos litros de cartón fino, laminado de aluminio y plástico. " "Tiene una tapa a rosca para resellarla fácilmente." -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "tetra abierto" -msgstr[1] "tetras abiertos" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." -" This one is open and its contents will spoil." -msgstr "" -"Es un tetra de dos litros de cartón fino, laminado de aluminio y plástico. " -"Está abierto y su contenido se va a pudrir." - #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" msgid_plural "vacuum-packed bags" @@ -54167,21 +54437,6 @@ msgstr[1] "latas pequeñas de estaño" msgid "A small tin can, like what tuna comes in." msgstr "Es una lata chica de estaño, como las del atún." -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "lata pequeña de estaño abierta" -msgstr[1] "latas pequeñas de estaño abiertas" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Es una lata chica de estaño, como las de atún. Está abierta y no puede ser " -"sellada fácilmente." - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -54193,21 +54448,6 @@ msgstr[1] "latas medianas de estaño" msgid "A medium tin can, like what soup comes in." msgstr "Es una lata mediana de estaño, como las de tomate." -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "lata mediana de estaño abierta" -msgstr[1] "latas medianas de estaño abiertas" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Es una lata mediana de estaño, como las de tomate. Está abierta y no puede " -"ser sellada fácilmente." - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -54293,19 +54533,6 @@ msgstr[1] "vasos de plástico" msgid "A small, vacuum formed cup." msgstr "Es un vaso pequeño que en algún momento estuvo sellado al vacío." -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "vaso abierto de plástico" -msgstr[1] "vasos abiertos de plástico" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "" -"Es un vaso pequeño que en algún momento estuvo sellado al vacío. Ahora es " -"esencialmente basura." - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -54505,7 +54732,6 @@ msgstr[0] "jarro de galón" msgstr[1] "jarros de galón" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "" @@ -54622,7 +54848,6 @@ msgstr[0] "odre pequeño" msgstr[1] "odres pequeños" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of" @@ -54771,21 +54996,6 @@ msgstr "" "Es una lata grande de estaño, como las del ananá. Contiene una buena " "cantidad de comida." -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "lata grande de estaño abierta" -msgstr[1] "latas grandes de estaño abiertas" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Es una lata grande de estaño, como las del ananá. Esta ha sido abierta y no " -"puede ser sellada fácilmente." - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -55354,6 +55564,38 @@ msgid "A piece of an insect's exoskeleton. It is light and very durable." msgstr "" "Es un pedazo del exoesqueleto de un insecto. Es liviano y muy resistente." +#: lang/json/GENERIC_from_json.py +msgid "strand of endochitin" +msgid_plural "strands of endochitin" +msgstr[0] "hebra de endoquitina" +msgstr[1] "hebras de endoquitina" + +#. ~ Description for {'str': 'strand of endochitin', 'str_pl': 'strands of +#. endochitin'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of an insect's endoskeleton." +msgstr "Es un pedazo del endoesqueleto de un insecto." + +#: lang/json/GENERIC_from_json.py +msgid "cluster of gas sacs" +msgid_plural "clusters of gas sacs" +msgstr[0] "racimo de sacos de gas" +msgstr[1] "racimos de sacos de gas" + +#. ~ Description for {'str': 'cluster of gas sacs', 'str_pl': 'clusters of gas +#. sacs'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This is a cluster of membranous bubbles, each about the size of a grape, " +"retrieved from inside a mutant insect. They float like tiny helium " +"balloons, and are likely full of a lighter-than-air gas helping the bug to " +"fly." +msgstr "" +"Es un racimo de burbujas membranosas, cada una del tamaño de una uva, y que " +"está sacado del interior de un insecto mutante. Flotan como pequeños globos " +"de helio y deben estar llenos de un gas más liviano que el aire que les " +"permite volar al insectos." + #: lang/json/GENERIC_from_json.py msgid "set of 100 ceramic disk" msgid_plural "ceramic disks" @@ -56774,8 +57016,8 @@ msgid_plural "lotus flowers" msgstr[0] "flor de loto" msgstr[1] "flores de loto" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -58404,6 +58646,17 @@ msgstr "" "Es un cañón láser que pertenecía a una torreta láser TX-5LR Cerberus. No se " "puede usar como arma así solo sin las partes necesarias." +#: lang/json/GENERIC_from_json.py +msgid "bone armor kit" +msgid_plural "bone armor kits" +msgstr[0] "conjunto de corazas de hueso" +msgstr[1] "conjuntos de corazas de hueso" + +#. ~ Description for {'str': 'bone armor kit'} +#: lang/json/GENERIC_from_json.py +msgid "Bone plating made for a vehicle." +msgstr "Son placas de hueso para ser usadas como armadura en un vehículo." + #: lang/json/GENERIC_from_json.py msgid "module template" msgid_plural "module templates" @@ -63122,10 +63375,10 @@ msgstr[1] "martillos Lucernas" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with a spiked hammer head, a spike, and a hook " -"attached to a long stick." +"attached to a beefy wooden pole." msgstr "" "Es un arma de asta versátil con una cabeza de martillo con púas, una punta y" -" un gancho unidos a un palo largo." +" un gancho unidos a una robusta vara de madera." #. ~ Description for {'str': 'lucerne hammer'} #: lang/json/GENERIC_from_json.py @@ -63557,7 +63810,6 @@ msgstr[0] "palo con punta" msgstr[1] "palos con punta" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "Es un simple palo de madera con una punta afilada." @@ -63662,19 +63914,19 @@ msgstr[1] "alabardas" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with an axe blade, a spike, and other fun things" -" attached to a long stick." +" attached to a long sturdy stick." msgstr "" "Es un arma de asta versátil con una cuchilla de hacha, una púa, y otras " -"cosas divertidas unidas a un palo largo." +"cosas divertidas agregadas a un palo robusto y largo." #. ~ Description for {'str': 'halberd'} #: lang/json/GENERIC_from_json.py msgid "" "This is a dull, cheaply made replica of a polearm with an axe blade, a " -"spike, and other fun things attached to a long stick." +"spike, and other fun things attached to a thick pole." msgstr "" "Es una réplica berreta sin filo de una arma de asta con una cuchilla de " -"hacha, una púa, y otras cosas divertidas unidas a un palo largo." +"hacha, una púa, y otras cosas divertidas agregadas a una vara gruesa." #: lang/json/GENERIC_from_json.py msgid "glaive" @@ -64390,21 +64642,6 @@ msgstr "" "cuchilla similar a una garra, proveniente de India y diseñada para estar " "oculta en la palma de la mano." -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "caestus" -msgstr[1] "caestus" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "" -"Es un brazo y mano envueltos en cuero que incorporan placas metálicas sobre " -"los nudillos para mejorar la potencia del golpe y la defensa." - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -64688,7 +64925,6 @@ msgstr[0] "caño" msgstr[1] "caños" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -64931,7 +65167,13 @@ msgstr "" "Es una lámina grande de plástico pesado y flexible, del tipo que usan para " "hacer envolturas o para hacer burletes." -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "lámina de plástico rígido" +msgstr[1] "láminas de plástico rígido" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -66001,11 +66243,11 @@ msgstr[1] "gujas improvisadas" #. ~ Description for {'str': 'makeshift glaive'} #: lang/json/GENERIC_from_json.py msgid "" -"This is a large blade attached to a long stick. It could do a considerable " -"amount of damage." +"This is a large blade attached to a stout section of tree branch. It could " +"do a considerable amount of damage." msgstr "" -"Es una gran cuchilla unida a un palo largo. Puede causar un daño " -"considerable." +"Es una gran cuchilla unida a un robusto pedazo de rama. Puede causar un daño" +" considerable." #: lang/json/GENERIC_from_json.py msgid "mind splicer kit" @@ -66199,6 +66441,25 @@ msgstr[1] "abrochadoras" msgid "A stapler for fastening sheets of paper together." msgstr "Es una abrochadora para enganchar hojas juntas." +#: lang/json/GENERIC_from_json.py +msgid "hole puncher" +msgid_plural "hole punchers" +msgstr[0] "perforadora" +msgstr[1] "perforadoras" + +#. ~ Description for {'str': 'hole puncher'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This metal tool can help you punch a single hole in a piece of paper. I " +"mean, you could do more if you wanted, but you'd have to do them one at a " +"time. Or, if you really wanted more holes with one punch, I suppose you " +"could fold the paper… This is a one cylinder hole puncher." +msgstr "" +"Esta herramienta de metal puede ayudarte a hacer un agujero en un pedazo de " +"papel. Digo, hacer más de un agujero si querés, pero vas a tener que " +"hacerlos de a uno. O, si tanto querés hacer más de un agujero a la vez, " +"supongo que podrías plegar el papel… Es una perforadora cilíndrica." + #: lang/json/GENERIC_from_json.py msgid "pen" msgid_plural "pens" @@ -66502,6 +66763,22 @@ msgstr "" " al vehículo hasta que flote. Después ponele los remos o el motor para que " "se pueda mover." +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "casco de balsa" +msgstr[1] "cascos de balsa" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" +"Son troncos atados para hacer que flote un vehículo. Agregale cascos de bote" +" a un vehículo hasta que flote. Después ponele los remos o el motor para que" +" se pueda mover." + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -67558,7 +67835,6 @@ msgstr[0] "lámina de metal" msgstr[1] "lámina de metal" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "Es una lámina fina de metal." @@ -67688,17 +67964,6 @@ msgstr "" "Son unas placas durables de quitina recubierta en silicio, hechas para " "cubrir un vehículo." -#: lang/json/GENERIC_from_json.py -msgid "bone armor kit" -msgid_plural "bone armor kits" -msgstr[0] "conjunto de corazas de hueso" -msgstr[1] "conjuntos de corazas de hueso" - -#. ~ Description for {'str': 'bone armor kit'} -#: lang/json/GENERIC_from_json.py -msgid "Bone plating made for a vehicle." -msgstr "Son placas de hueso para ser usadas como armadura en un vehículo." - #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "shredder" msgid_plural "shredders" @@ -68017,8 +68282,8 @@ msgid_plural "workbenches" msgstr[0] "mesa de trabajo" msgstr[1] "mesas de trabajo" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and" @@ -68942,6 +69207,20 @@ msgid "It has given you an answer, but you are yet to ask anything." msgstr "" "Te ha dado una respuesta y sin embargo, todavía estás por preguntar algo." +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "lámina de metamaterial tejido" +msgstr[1] "láminas de metamaterial tejido" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "" +"Es una lámina intrincadamente tejida y cuidadosamente diseñada de fibras " +"iridiscentes." + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -69047,11 +69326,26 @@ msgstr[1] "electroimanes superconductores" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." +msgid "A powerful electromagnet made from a room temperature superconductor." msgstr "" "Es un poderoso electroimán hecho con un superconductor de temperatura " "ambiente." +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "dínamo de ferrofluido" +msgstr[1] "dínamos de ferrofluido" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." +msgstr "" +"Es un fluido metálico negro, que fluye armónicamente de una figura fractal " +"hacia otra." + #: lang/json/GENERIC_from_json.py msgid "composite alloy" msgid_plural "composite alloys" @@ -69775,6 +70069,18 @@ msgstr "" "Es una colección de antiguas historias y conocimiento hyliano. Tiene marcada" " una sección sobre batallas históricas." +#: lang/json/GENERIC_from_json.py +msgid "Stormguard Warrior" +msgid_plural "Stormguard Warrior" +msgstr[0] "Guerrero de Tormenta" +msgstr[1] "Guerrero de Tormenta" + +#. ~ Description for {'str_sp': 'Stormguard Warrior'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Iron Heart discipline." +msgstr "" +"Este libro contiene las enseñanzas de la disciplina del Corazón de Hierro." + #: lang/json/GENERIC_from_json.py msgid "The Life and Work of Tiger Sauer" msgid_plural "The Life and Work of Tiger Sauer" @@ -69790,6 +70096,72 @@ msgstr "" "Es una biografía de un agente ciborg de combate, que detalla su filosofía y " "su arte marcial." +#: lang/json/GENERIC_from_json.py +msgid "Pocket Monster Encyclopedia" +msgid_plural "Pocket Monster Encyclopedia" +msgstr[0] "Enciclopedia de Bolsillo de Monstruos" +msgstr[1] "Enciclopedia de Bolsillo de Monstruos" + +#. ~ Description for {'str_sp': 'Pocket Monster Encyclopedia'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This encyclopedia contains a detailed listing of the strengths and " +"techniques of various fictional monsters and how to apply them the in a real" +" fight." +msgstr "" +"Esta enciclopedia contiene un listado detallado de las fortalezas y técnicas" +" de varios monstruos ficticios, y cómo aplicarlo en las peleas reales." + +#: lang/json/GENERIC_from_json.py +msgid "Distant Horizon" +msgid_plural "Distant Horizon" +msgstr[0] "Horizonte Distante" +msgstr[1] "Horizonte Distante" + +#. ~ Description for {'str_sp': 'Distant Horizon'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Setting Sun discipline." +msgstr "Este libro contiene las enseñanzas de la disciplina del Sol Poniente." + +#: lang/json/GENERIC_from_json.py +msgid "Jedi Holocrons: Form I" +msgid_plural "Jedi Holocrons: Form I" +msgstr[0] "Holocrones Jedi: Forma I" +msgstr[1] "Holocrones Jedi: Forma I" + +#. ~ Description for {'str_sp': 'Jedi Holocrons: Form I'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This device contains the teachings of the first form of Jedi lightsaber " +"combat: Shii-Cho." +msgstr "" +"Este dispositivo contiene las enseñanzas de la primera forma del sable de " +"luz de combate Jedi: Shii-Cho." + +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "Esquirlas de Granito" +msgstr[1] "Esquirlas de Granito" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "" +"Este libro contiene las enseñanzas de la disciplina del Dragón de Piedra." + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "Zarpas Segadoras" +msgstr[1] "Zarpas Segadoras" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "" +"Este libro contiene las enseñanzas de la disciplina de la Garra de Tigre." + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -69815,10 +70187,10 @@ msgstr[1] "polvos brillantes" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." msgstr "" -"Es los restos en polvo de la forma física de una luz mala. Parece que " +"Son los restos en polvo de la forma física de una luz mala. Parece que " "todavía conserva un brillo sobrenatural." #: lang/json/GENERIC_from_json.py @@ -69964,9 +70336,9 @@ msgstr[1] "polvos de maná" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." +"Crystalized mana in powdered form. It faintly pulses with arcane energy." msgstr "" -"Es maná cristalizado forma de polvo. Parece latir levemente con energía " +"Es maná cristalizado en forma de polvo. Parece latir levemente con energía " "arcana." #: lang/json/GENERIC_from_json.py @@ -71518,140 +71890,6 @@ msgstr "" "Es una armazón hecha de oricalco. Bastante más resistente que el acero, pero" " también mucho más caro." -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional" -" lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "TEST jarro de galón" -msgstr[1] "TEST jarros de galón" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "TEST odre pequeño" -msgstr[1] "TEST odres pequeños" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "" - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "ARMAS" @@ -75382,30 +75620,6 @@ msgstr "" "Es un pequeño cristal de maná, específicamente diseñado para ser puesto en " "puntas de varitas." -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test -#. disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "" - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test -#. rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "" - #: lang/json/MOD_INFO_from_json.py src/color.cpp src/color.cpp msgid "default" msgstr "predeterminado" @@ -75421,8 +75635,14 @@ msgstr "Aftershock" #. ~ Description for Aftershock #: lang/json/MOD_INFO_from_json.py -msgid "Drifts the game away from realism and more towards sci-fi." -msgstr "Aleja el juego del realismo y lo lleva más a la ciencia ficción." +msgid "" +"Drifts the game away from realism and more towards sci-fi. Long term goal " +"of being a significantly different experience that remains compatible with " +"other mods." +msgstr "" +"Acerca el juego más a la ciencia ficción, alejándolo del realismo. El " +"objetivo buscado hace tiempo es ser una experiencia significativamente " +"diferente que igual sea compatible con otros mods." #: lang/json/MOD_INFO_from_json.py msgid "Blaze Industries" @@ -75468,11 +75688,13 @@ msgstr "Dark Skies Above" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." msgstr "" -"Es una conversión total que lleva Cataclysm hacia un estilo XCOM 2 de " -"ocupación alienígena. ¡Usalo con otros mods a tu propio riesgo!" +"Es una conversión completa que lleva el Cataclysm hacia un escenario de " +"ocupación alienígena. ESTE MOD ROMPERÁ LA FUNCIONALIDAD DE OTROS MODS! USALO" +" CON OTROS MODS A TU PROPIO RIESGO." #: lang/json/MOD_INFO_from_json.py msgid "DinoMod" @@ -75700,18 +75922,6 @@ msgstr "" "Permite que las características del personaje mejoren con la progresión de " "las habilidades." -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "TESTING DATA" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "" -"Agrega bosquejos de objetos, recetas y otro contenido que utilizan los tests" -" automatizados." - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "Desarrollo Urbano" @@ -77247,9 +77457,9 @@ msgid "" "Once human, fungal tendrils now sprout from its mouth, eyes, and other " "orifices, holding together a shambling mass of mold-covered flesh." msgstr "" -"Una vez fue un humano, ahora brotan tallos de hongos de su boca, ojos y " -"otros orificios, manteniendo unido la masa desordenada de carne cubierta con" -" moho." +"Lo que alguna vez fue humano, ahora tiene tallos fúngicos brotando de su " +"boca, ojos y otros orificios. Esos tallos mantienen unido esta masa " +"desordenada de carne cubierta con moho." #: lang/json/MONSTER_from_json.py msgid "bloated fungal zombie" @@ -77961,6 +78171,17 @@ msgstr "" "todas las cabezas se mueven rápidamente y las bocas arman un coro de gritos " "y quejidos." +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "humano" +msgstr[1] "humanos" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "Esto es para poner cadáveres humanos. Si te aparece, es un bug." + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -80465,6 +80686,22 @@ msgstr "" msgid "Lightning arcs from the leech stalk!" msgstr "¡Se ven rayos que salen del tallo chupasangre!" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "árbol señal" +msgstr[1] "árboles señal" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "" +"Es un tronco que se eleva alto hacia el cielo, con sus ramas más altas " +"brillando con una luz amarilla. Un tamborileo suave hace temblar " +"periódicamente sus alrededores." + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -80887,9 +81124,9 @@ msgid "" " speed. The tangle is thick enough that the center from which they grow is " "concealed." msgstr "" -"Una masa animada de enredaderas y raíces, que se arrastra por el suelo con " -"una velocidad alarmante. La maraña es tan gruesa que el centro del cual está" -" creciendo, queda oculto." +"Es una masa animada de enredaderas y raíces que se arrastra por el suelo con" +" una velocidad alarmante. La maraña es tan gruesa que el centro del cual " +"está creciendo, queda oculto." #: lang/json/MONSTER_from_json.py msgid "fungal fighter" @@ -80935,8 +81172,9 @@ 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 "" -"Un nudo de raíces tubulares, con savia fluyendo y latiendo como un corazón. " -"Las hebras de tejido vascular se estiran hacia las raíces de alrededor." +"Es un nudo de raíces tubulares con savia fluyendo y latiendo como un " +"corazón. Las hebras de tejido vascular se estiran hacia las raíces de " +"alrededor." #: lang/json/MONSTER_from_json.py msgid "improvised MP5 turret" @@ -81183,6 +81421,112 @@ msgstr "" "sentir muy incómodo. El fin del mundo no evitó que todavía esté esperando un" " paciente para asistir." +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "cazador gatolanza" +msgstr[1] "cazadores gatolanza" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" +"Los ojos de este puma rezuman un fluido espeso, negro y aceitoso, y su piel " +"está desgarrada dejando ver heridas infectadas. Sus garras y dientes son de " +"un largo y filo sobrenatural, similares a peligrosas púas filosas." + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "ozombi esquelético" +msgstr[1] "ozombis esqueléticos" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo" +" seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" +"La piel podrida de este ozombi ha sido reemplazada por una monstruosa " +"exuberancia de tejido osificado, creando una armadura densa de hueso. " +"Grandes pedazos de viscosidad negra se filtran por las articulaciones " +"mientras camina, haciendo enfermizos ruidos de quebraduras que llenan el " +"aire." + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "gatosombra" +msgstr[1] "gatosombras" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" +"Una extraña sombra envuelve a esta criatura, como si la misma luz evitara " +"tocarla. Lo único que ves es una silueta felina grande y tambaleante." + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "ozombi ácido" +msgstr[1] "ozombis ácidos" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "" +"Es un oso negro muerto de apariencia enfermiza y la piel despedazada. Su " +"piel parece especialmente delgada, con un fluido pegajoso y amarillo " +"corriéndole por sus venas claramente visibles." + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "martillo cornudo" +msgstr[1] "martillos cornudos" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" +"Lo que fue alguna vez un gran alce ahora tiene los ojos rezumantes de un " +"fluido negro y aceitoso, con su carne destrozada y con cicatrices. Su cuerpo" +" entero está repleto de músculos dilatadas y heridas hinchadas e infectadas." + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "desorden osuno espinoso" +msgstr[1] "desórdenes osunos espinosos" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" +"Lo que fue alguna vez un gran alce ahora está cubierto de pelo largo " +"apelmazado mezclado con lianas espinosas que se juntan en la parte posterior" +" del cuerpo. Unas espinas largas entrelazadas cubren los cuernos, chorreando" +" una misterioso líquido plateado." + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -81281,8 +81625,8 @@ msgstr "" #: lang/json/MONSTER_from_json.py msgid "zombear" msgid_plural "zombears" -msgstr[0] "osombi" -msgstr[1] "osombis" +msgstr[0] "ozombi" +msgstr[1] "ozombis" #. ~ Description for {'str': 'zombear'} #: lang/json/MONSTER_from_json.py @@ -81333,8 +81677,8 @@ msgstr "" #: lang/json/MONSTER_from_json.py msgid "antlered horror" msgid_plural "antlered horrors" -msgstr[0] "horror con cuernos" -msgstr[1] "horrores con cuernos" +msgstr[0] "horror cornudo" +msgstr[1] "horrores cornudos" #. ~ Description for {'str': 'antlered horror'} #: lang/json/MONSTER_from_json.py @@ -84398,6 +84742,21 @@ msgstr "" "Es un dinosaurio enorme con similitudes al rinoceronte, con una cresta de " "huesos de la que le salen tres cuernos grandes." +#: lang/json/MONSTER_from_json.py +msgid "Triceratops bio-operator" +msgid_plural "Triceratops bio-operator" +msgstr[0] "Triceratops bio-operador" +msgstr[1] "Triceratops bio-operador" + +#. ~ Description for {'str_sp': 'Triceratops bio-operator'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive three-horned four-legged dinosaur dotted with crackling bionics. " +"The horns glow menacingly." +msgstr "" +"Es un enorme dinosaurio de tres cuernos y cuatro patas, con manchas y " +"biónicos chisporroteantes. Los cuernos brillan amenazantes." + #: lang/json/MONSTER_from_json.py msgid "Stegosaurus" msgid_plural "Stegosaurus" @@ -84427,6 +84786,22 @@ msgstr "" "Este dinosaurio parece como un quirquincho prehistórico gigante. Su cola " "termina en lo que parece un garrote enorme de hueso con púas." +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus" +msgid_plural "Apatosaurus" +msgstr[0] "Apatosaurus" +msgstr[1] "Apatosaurus" + +#. ~ Description for {'str_sp': 'Apatosaurus'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur with a long, whip-like tail. The" +" head is upright and the neck looks like it would make a good strong club." +msgstr "" +"Es un gigantesco dinosaurio de cuello largo y cuatro patas, con una cola " +"larga y similar a un látigo. Tiene la cabeza erguida y el cuello podría " +"funcionar como un fuerte garrote." + #: lang/json/MONSTER_from_json.py msgid "Ceratosaurus" msgid_plural "Ceratosaurus" @@ -84672,6 +85047,139 @@ msgid_plural "magenta and green hatchlings" msgstr[0] "cría magenta y verde" msgstr[1] "crías magenta y verde" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "Spinosaurus zombi fúngico" +msgstr[1] "Spinosaurus zombis fúngicos" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" +"Lo que alguna vez fue un enorme dinosaurio carnívoro con cabeza de cocodrilo" +" con una vela en su espalda, ahora tiene tallos fúngicos brotando de su " +"boca, ojos y otros orificios, que logran mantener unido esta enorme masa " +"temblorosa de carne cubierta de moho." + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "Z-Rex fúngico" +msgstr[1] "Z-Rexes fúngicos" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "" +"Alguna vez fue el monarca de los dinosaurios, tiene tallos fúngicos brotando" +" de su boca, ojos y otros orificios. Esos tallos mantienen unido esta enorme" +" masa desordenada de carne cubierta con moho." + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "zombi Deinonychus fúngico" +msgstr[1] "zombis Deinonychus fúngicos" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" +"Lo que alguna vez fue un dinosaurio carnívoro mediano con plumas, ahora " +"tiene tallos fúngicos brotando de su boca, ojos y otros orificios, que " +"logran mantener unido esta enorme masa temblorosa de carne cubierta de moho." + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "zombi Gallimimus" +msgstr[1] "zombis Gallimimus" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "" +"Es el cuerpo que va arrastrándose de un dinosaurio bípedo de tamaño medio " +"cubierto con plumas rotas y un líquido pútrido negro." + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "zombi Pachy" +msgstr[1] "zombis Pachy" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" +"Es el cuerpo que va arrastrándose de un dinosaurio bípedo de tamaño medio " +"cubierto con plumas rotas y un líquido pútrido negro. Se parece a una " +"avestruz reptiliana con la cabeza redondeada." + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "zombi Campto" +msgstr[1] "zombis Campto" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs," +" broad shoulders and a pointed beak. Its tattered feathers are stained with" +" black, sticky liquid." +msgstr "" +"Es el cuerpo que va arrastrándose de un dinosaurio bípedo grande, con " +"plumas, piernas robustas. hombros anchos y un pico puntiagudo. Sus plumas " +"rotas están manchadas con un líquido pegajoso y negro." + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus zombie" +msgid_plural "Spinosaurus zombies" +msgstr[0] "Spinosaurus zombi" +msgstr[1] "Spinosaurus zombis" + +#. ~ Description for {'str': 'Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Enormous putrid dinosaur corpse with a ferocious crocodile-like head, oozing" +" black eyes, and a tattered sail on its back." +msgstr "" +"Es un enorme cadáver pútrido de dinosaurio con una feroz cabeza similar a un" +" cocodrilo, ojos negros purulentos y una vela medio rota en la espalda." + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "zombi Spinosaurus sombrío" +msgstr[1] "zombis Spinosaurus sombríos" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "" +"Una extraña sombra envuelve a este dinosaurio. Podés distinguir la forma de " +"un enorme dinosaurio bípedo con una vela rota. La cabeza es larga y fina con" +" una trompa en forma de V." + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -84685,21 +85193,245 @@ msgstr "" "Enormes pilas de carne irregular y maloliente sostienen dientes enormes." #: lang/json/MONSTER_from_json.py -msgid "Z-Deinonychus" -msgid_plural "Z-Deinonychus" -msgstr[0] "Z-Deinonychus" -msgstr[1] "Z-Deinonychus" +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "Z-Rex sombrío" +msgstr[1] "Z-Rexes sombríos" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with feathery edges. The head looks big, lots of big" +" teeth would fit in it." +msgstr "" +"Una extraña sombra envuelve a este dinosaurio. Podés distinguir la forma de " +"un enorme dinosaurio bípedo con bordes con plumas. La cabeza parece grande, " +"donde muchos dientes grandes podrían entrar bien." + +#: lang/json/MONSTER_from_json.py +msgid "S-Rex" +msgid_plural "S-Rexes" +msgstr[0] "S-Rex" +msgstr[1] "S-Rexes" + +#. ~ Description for {'str': 'S-Rex', 'str_pl': 'S-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Monstrous columns of dense bone lifting enormous sharp pointed teeth " +"dripping with black goo." +msgstr "" +"Es una monstruosa columna de hueso denso sosteniendo enormes dientes filosos" +" que chorrean una viscosidad negra." + +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" +msgstr[0] "zombi Albertosaurus" +msgstr[1] "zombis Albertosaurus" + +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "" +"Es un cuerpo gigante de dinosaurio con mandíbulas enormes que babean un " +"líquido negro y unas garras preocupantes." + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "Triceraterror" +msgstr[1] "Triceraterrores" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "" +"Es un enorme dinosaurio tambaleante similar al rinoceronte, con una cresta " +"ósea desde la que le salen tres cuernos malvados. Desde sus ojos negros " +"gotea algo similar a lágrimas." + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "zombi Stegosaurus" +msgstr[1] "zombis Stegosaurus" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" +"Es un gran dinosaurio cuadrúpedo tambaleante que se arrastra por el peso de " +"las placas en su espalda, y va ondeando una cola con púas que parece mucho " +"más vivaz." + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" +msgstr[0] "zombi Ankylosaurus" +msgstr[1] "zombis Ankylosaurus" -#. ~ Description for {'str_sp': 'Z-Deinonychus'} +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "" +"Es el cuerpo que va arrastrándose de lo que parece un armadillo gigantesco, " +"con placas despellejadas de armadura y brillantes ojos negros. Su cola " +"termina en un enorme garrote de hueso con puntas." + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" +msgstr[0] "zombi Apatosaurus" +msgstr[1] "zombis Apatosaurus" + +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "" +"Es el gigantesco cuerpo de un dinosaurio de cuello largo y cuatro patas, con" +" una cola larga y similar a un látigo. Tiene la cabeza erguida y el cuello " +"podría funcionar como un fuerte garrote." + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "dragón zombi" +msgstr[1] "dragones zombi" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "" +"Este zombi es enorme, escamoso, con muchas púas óseas, y se mueve a una " +"velocidad enorme. Sus coloridos cuernos están desgastados y mojados de " +"desechos, y sus escamas brillantes y púas óseas están golpeadas." + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "zombi Allosaurus" +msgstr[1] "zombis Allosaurus" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "" +"Es el cuerpo que va arrastrándose de un dinosaurio bípedo depredador, con " +"rayas como las de un tigre en su ancha espalda escamada." + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus zombie" +msgid_plural "Deinonychus zombies" +msgstr[0] "zombi Deinonychus" +msgstr[1] "zombis Deinonychus" + +#. ~ Description for {'str': 'Deinonychus zombie'} #: lang/json/MONSTER_from_json.py msgid "" "The shuffling corpse of a medium-sized bipedal dinosaur covered with " "tattered feathers and black putrid liquid. Both feet brandish a large " "sickle-like claw." msgstr "" -"Es un cuerpo reorganizado de tamaño medio de un dinosaurio bípedo cubierto " -"con plumas rotas y un líquido pútrido negro. Los dos pies lucen un garra " -"grande similar a un hoz." +"Es el cuerpo que va arrastrándose de un dinosaurio bípedo de tamaño medio " +"cubierto con plumas rotas y un líquido pútrido negro. Los dos pies lucen un " +"garra grande similar a un hoz." + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "zombi Deinonychus sombrío" +msgstr[1] "zombis Deinonychus sombríos" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" +"Una extraña sombra envuelve a este dinosaurio. Podés distinguir la forma de " +"un dinosaurio bípedo de tamaño mediano con bordes con plumas. Los dos pies " +"lucen grandes garras como hoces." + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "zombi Utahraptor" +msgstr[1] "zombis Utahraptor" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms," +" a long tail, and long sharp scythe-like claws." +msgstr "" +"Es el cuerpo bamboleante de un gran dinosaurio bípedo con plumas en los " +"brazos, una cola larga, y garras largas como hoces." + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "zombi Parasaurolophus" +msgstr[1] "zombis Parasaurolophus" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "" +"Es un dinosaurio enorme con manchas y una cresta en la cabeza, caminando " +"como muerto, con los ojos vacíos e hinchados." + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "zombi Dimorphodon" +msgstr[1] "zombis Dimorphodon" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "" +"Es el cuerpo harapiento de un reptil volador con plumas de más de un metro " +"de largo, con alas cortas y un pico grande y colorido." + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "zombi Dilophosaurus" +msgstr[1] "zombis Dilophosaurus" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent" +" bony crests on its head with ragged strips of ripped flesh hanging down " +"like a frill." +msgstr "" +"Es el cuerpo que va arrastrándose de un dinosaurio de tamaño medio con " +"dientes filosos y dos crestas óseas prominentes en la cabeza, con tiras de " +"carne arrancada colgando como un volado." #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" @@ -85599,21 +86331,6 @@ msgstr "" "Wraitheon de auxiliares uno a uno diseñados para integrarse con fuerzas más " "tradicionales." -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "momia de papel higiénico" -msgstr[1] "momias de papel higiénico" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper -#. mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "" -"Tiene una forma vagamente humanoide, cubierta de capas de algo que parece " -"papel higiénico." - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -86073,22 +86790,6 @@ msgstr "" "Es un conjunto de cuello, pechera y grupera hechos de quitina demoníaca con " "una malla fina. Podés ponerle esto a un caballo amaestrado." -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "armadura para meower" -msgstr[1] "armaduras para meower" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "" -"Es un arnés de kevlar elegante y liviano para gato, con una capucha y " -"pechera de protección. Incluye un bolsillo muy pequeño de velcro en la parte" -" de atrás." - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "un mamífero" @@ -86840,6 +87541,24 @@ msgstr "" "Este falso hechizo ocurre con la activación de la bomba craneal. " "Probablemente, fatal." +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "Retroceso de Arma Craneal" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" +"Este hechizo falso ocurre con la activación del arma craneal. Puede ser " +"fatal si sucede en una situación crítica." + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "Tu cuello da un golpe brusco hacia atrás por la fuerza del disparo." + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "aturdimiento psíquico" @@ -87209,7 +87928,7 @@ msgstr "" #. ~ Description for Debug HP Spell #: lang/json/SPELL_from_json.py msgid "Uses a little HP" -msgstr "" +msgstr "Usa un poco de HP" #: lang/json/SPELL_from_json.py msgid "Debug Bionic Spell" @@ -87218,7 +87937,7 @@ msgstr "" #. ~ Description for Debug Bionic Spell #: lang/json/SPELL_from_json.py msgid "Uses a little Bionic Power" -msgstr "" +msgstr "Usa un poco de Poder Biónico" #: lang/json/SPELL_from_json.py msgid "Debug effect spell" @@ -87260,8 +87979,8 @@ msgstr "" msgid "Debug Full Protection" msgstr "" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "" @@ -87273,17 +87992,17 @@ msgstr "" #: lang/json/SPELL_from_json.py msgid "Debug Feather Falling" -msgstr "" +msgstr "Debug Caída de Pluma" #. ~ Description for Debug Feather Falling #: lang/json/SPELL_from_json.py msgid "You are light as a feather and fall like." -msgstr "" +msgstr "Sos liviano como una pluma y caerás así de suave." #. ~ Message for SPELL 'Debug Feather Falling' #: lang/json/SPELL_from_json.py msgid "You eat a feather!" -msgstr "" +msgstr "¡Te comés una pluma!" #: lang/json/SPELL_from_json.py msgid "Black Dragons' Breath" @@ -87437,7 +88156,7 @@ msgstr "Esquirla de Bomba de Lava" #. ~ Description for Lava Bomb Terrain #: lang/json/SPELL_from_json.py msgid "This is a sub spell for the Lava Bomb spell." -msgstr "Es un sub hechizo del hechizo Bomba de Lava. " +msgstr "Es un sub hechizo del hechizo Bomba de Lava." #: lang/json/SPELL_from_json.py msgid "Lava Bomb Heat" @@ -87780,10 +88499,10 @@ msgstr "Conjura 4 arañitas demoníacas permanentes." msgid "Jolt" msgstr "Descarga" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py lang/json/mutation_category_from_json.py msgid "a crackle" msgstr "un chisporroteo" @@ -87856,6 +88575,33 @@ msgstr "Agrega el efecto de destello." msgid "Wall of Fog" msgstr "Pared de Niebla" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "Aura de Arco Repelente" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "Es un sub hechizo del hechizo Arco Repelente." + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "arco eléctrico!" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "Arco Repelente" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" +"Se manifiesta un aura de electricidad chisporroteante alrededor tuyo para " +"golpear a los atacantes con rayos malignos." + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "Bendición" @@ -87978,77 +88724,44 @@ msgstr "" msgid "X-ray Vision" msgstr "Visión de Rayos-X" -#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py -msgid "Mana Siphon" -msgstr "Succión de Maná" - -#. ~ Description for Mana Siphon -#: lang/json/SPELL_from_json.py -msgid "" -"This is the spell portion of the mana siphon series of mutations. If you " -"have this spell you probably debugged it in." -msgstr "" -"Este es el hechizo de la serie de mutaciones de succión de maná. Si tenés " -"este hechizo debe ser por que lo hiciste por debug." - #: lang/json/SPELL_from_json.py -msgid "Pew, Pew" -msgstr "Piú, Piú" - -#. ~ Description for Pew, Pew -#: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." -msgstr "" -"Apuntás tu dedo hacia tu oponente y hacés el siguiente sonido 'Piú, piú'." - -#: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "El Suelo es Lava" +msgid "Knock" +msgstr "Abrir" -#. ~ Description for The Floor is Lava +#. ~ Description for Knock #: lang/json/SPELL_from_json.py msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" +"You channel magic into a force capable of opening doors. This variant can " +"only open wooden doors." msgstr "" -"Es mejor que encuentres una silla o una mesada para subirte, porque ¡el " -"suelo es lava!" +"Canalizás tu magia en una fuerza capaz de abrir puertas. Esta variante del " +"hechizo solo puede abrir puertas de madera." #: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" -msgstr "Montaje de Entrenamiento" +msgid "Improved Knock" +msgstr "Abrir Mejorado" -#. ~ Description for Sports Training Montage +#. ~ Description for Improved Knock #: lang/json/SPELL_from_json.py msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." +"You channel magic into a force capable of opening doors. This variant can " +"open any locked door." msgstr "" -"Cuando algo dura mucho tiempo y querés saltearlo hasta llegar al final, vas " -"a necesitar un montaje." - -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "Sana Sana Colita de Rana" +"Canalizás tu magia en una fuerza capaz de abrir puertas. Esta variante del " +"hechizo puede abrir cualquier puerta." -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." -msgstr "" -"Es una caricia que hará que el dolor se vaya, como las que te hacía tu " -"madre." - -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" -msgstr "Conjurar Momia" +#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py +msgid "Mana Siphon" +msgstr "Succión de Maná" -#. ~ Description for Summon Mummy +#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." +"This is the spell portion of the mana siphon series of mutations. If you " +"have this spell you probably debugged it in." msgstr "" -"Conjura una criatura endeble de tejido, desde el placard de las escobas de " -"tu alma." +"Este es el hechizo de la serie de mutaciones de succión de maná. Si tenés " +"este hechizo debe ser por que lo hiciste por debug." #: lang/json/TOOLMOD_from_json.py msgid "reactor core expansion device" @@ -90827,30 +91540,40 @@ msgstr "" "parece. Duplica la fuerza del usuario." #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" -msgstr[0] "Faja Menor con Bolsillos" -msgstr[1] "Fajas Menores con Bolsillos" - -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser -#. Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater -#. Girdles of Pockets'} +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" +msgstr[0] "cinturón dimensional menor" +msgstr[1] "cinturones dimensionales menores" + +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." msgstr "" -"Es una faja ancha que se ajusta alrededor de tu cintura, cubierta con varios" -" pequeñas bolsas que pueden contener más de lo que deberían, y además " -"reducen el peso de su contenido." +"Es un cinturón resistente de trabajo que va alrededor de tu cintura, " +"cubierto de bolsas de fácil acceso. Como todos los espacios dimensionales, " +"pueden contener más de lo que deberían con una reducción considerable del " +"peso del contenido." #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" -msgstr[0] "Faja Mayor con Bolsillos" -msgstr[1] "Fajas Mayores con Bolsillos" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" +msgstr[0] "cinturón dimensional mayor" +msgstr[1] "cinturones dimensionales mayores" + +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" +"Es un cinturón muy resistente de trabajo que va alrededor de tu cintura, " +"cubierto de bolsas de fácil acceso. Como todos los espacios dimensionales, " +"pueden contener más de lo que deberían con una reducción sustancial del peso" +" del contenido." #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" @@ -90947,7 +91670,7 @@ msgid "" "with a light aura to reduce damage you take." msgstr "" "Es un brazal de acero liviano pero extremadamente resistente, adornado con " -"un escudo gravado en la parte superior, y plata acentuando el intrincado " +"un escudo grabado en la parte superior, y plata acentuando el intrincado " "diseño. Protege tu cuerpo con un aura leve que reduce el daño que recibís." #: lang/json/TOOL_ARMOR_from_json.py @@ -90965,7 +91688,7 @@ msgid "" "a strong aura to reduce damage you take." msgstr "" "Es un brazal de acero liviano pero extremadamente resistente, adornado con " -"un escudo gravado en la parte superior, y oro acentuando el intrincado " +"un escudo grabado en la parte superior, y oro acentuando el intrincado " "diseño. Protege tu cuerpo con un aura fuerte que reduce el daño que recibís." #: lang/json/TOOL_ARMOR_from_json.py @@ -90984,7 +91707,7 @@ msgid "" "as well as being able to release a Jolt spell 3 times a day." msgstr "" "Es un brazal de acero liviano pero extremadamente resistente, adornado con " -"rayos gravados en la parte superior, y plata acentuando el intrincado " +"rayos grabados en la parte superior, y plata acentuando el intrincado " "diseño. Protege tu cuerpo con un aura leve que reduce el daño eléctrico que " "recibís, y también te permite usar el hechizo Descarga, 3 veces por día." @@ -91004,7 +91727,7 @@ msgid "" "as well as being able to release a Lightning Bolt spell 3 times a day." msgstr "" "Es un brazal de acero liviano pero extremadamente resistente, adornado con " -"rayos gravados en la parte superior, y oro acentuando el intrincado diseño. " +"rayos grabados en la parte superior, y oro acentuando el intrincado diseño. " "Protege tu cuerpo con un aura fuerte que reduce el daño eléctrico que " "recibís, y también te permite usar el hechizo Rayo Eléctrico, 3 veces por " "día." @@ -91098,7 +91821,7 @@ msgid "" "An ornate silver ring engraved with daggers that conjures a near perfect " "throwing knife into your hand on activation." msgstr "" -"Es un decorado anillo de plata gravado con dagas que conjura un cuchillo " +"Es un decorado anillo de plata grabado con dagas que conjura un cuchillo " "arrojadizo casi perfecto en tu mano al activarlo." #: lang/json/TOOL_ARMOR_from_json.py @@ -92481,7 +93204,7 @@ msgid "" " can be made scorching hot to singe enemies and light your way. Use to " "ignite." msgstr "" -"Es un cuchillo largo con un caño de combustible al costado, y un pequeño " +"Es un cuchillo largo con un caño para combustible al costado, y un pequeño " "tanque y un encendedor integrado en la empuñadura aislada. Cuando se le pone" " nafta, la cuchilla puede volverse abrasadora para chamuscar enemigos e " "iluminar tu camino. Usala para encenderla." @@ -92529,7 +93252,7 @@ msgid "" "igniter built into the insulated hilt. The blade is glowing brightly. Use " "to shut off the gas." msgstr "" -"Es un cuchillo largo con un caño de combustible al costado, y un pequeño " +"Es un cuchillo largo con un caño para combustible al costado, y un pequeño " "tanque y un encendedor integrado en la empuñadura aislada. La cuchilla está " "brillando. Usala para cerrar el gas." @@ -96233,13 +96956,11 @@ msgstr[1] "smartphones" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "Activás la aplicación de linterna." #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "La batería del smartphone tiene muy poca carga." @@ -97873,7 +98594,6 @@ msgstr[0] "hacha de bombero" msgstr[1] "hachas de bombero" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -97890,7 +98610,6 @@ msgstr[0] "barra halligan" msgstr[1] "barras halligan" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -98177,6 +98896,32 @@ msgstr "" "Es una piedra aplanada sujetada a un palo. Funciona bastante bien como pala," " pero la verdad es que no se puede comparar con una pala seria." +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "rastrillo de metal" +msgstr[1] "rastrillos de metal" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "Es un resistente rastrillo de metal, esencial para el otoño." + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "rastrillo de plástico" +msgstr[1] "rastrillos de plástico" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than" +" raking leaves." +msgstr "" +"Es un rastrillo barato de plástico. Se va a romper bastante rápido si lo " +"usás para otra cosa que no sea arrastrar hojas." + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -98207,6 +98952,28 @@ msgstr "" "Es una herramienta para cavar. Usala para cavar pozos en los espacios " "adyacentes al lugar donde estés parado." +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "pala para nieve" +msgstr[1] "palas para nieve" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "Es una herramienta resistente utilizada para palear nieve." + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "pala de plástico para nieve" +msgstr[1] "palas de plástico para nieve" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "Es una pala barata de plástico que se usa para palear nieve." + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -99044,6 +99811,12 @@ msgstr "" "Es una forja portátil para metalurgia, alimentada a carbón. Si se combina " "con las herramientas adecuadas, se puede usar para trabajar el metal." +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "Forja de Piedra" +msgstr[1] "Forjas de Piedra" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -99198,6 +99971,20 @@ msgstr "" "Son unas largas pinzas de metal. Son comúnmente usadas para cocinar o para " "trabajar el metal." +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "papel de lija" +msgstr[1] "papeles de lija" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "" +"Es una lámina de papel áspero. Es comúnmente utilizado en trabajos de " +"herrería y carpintería." + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -99378,6 +100165,21 @@ msgstr "" "fácil de transportar. Te aísla del suelo, lo que facilita dormir. Usala para" " desenrollarla y ponerla en el suelo." +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "manguera de patio" +msgstr[1] "mangueras de patio" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "" +"Es una manguera flexible de patio. Si la cortás en pedazos más chicos " +"podrías usarlo para alguna fabricación, o para chupar nafta de un vehículo." + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -101521,7 +102323,6 @@ msgstr[0] "trapo" msgstr[1] "trapos" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -102016,12 +102817,12 @@ msgstr "" "apagarla." #: lang/json/TOOL_from_json.py -msgid "stone hand axe" -msgid_plural "stone hand axes" -msgstr[0] "hacha de piedra de mano" -msgstr[1] "hachas de piedra de mano" +msgid "stone axe head" +msgid_plural "stone axe heads" +msgstr[0] "cabeza de hacha de piedra" +msgstr[1] "cabezas de hacha de piedra" -#. ~ Description for {'str': 'stone hand axe'} +#. ~ Description for {'str': 'stone axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a broad piece of stone with an edge narrow enough to roughly chop " @@ -102031,12 +102832,12 @@ msgstr "" "cortar madera con algo de dificultad." #: lang/json/TOOL_from_json.py -msgid "metal hand axe" -msgid_plural "metal hand axes" -msgstr[0] "hacha de metal de mano" -msgstr[1] "hachas de metal de mano" +msgid "metal axe head" +msgid_plural "metal axe heads" +msgstr[0] "cabeza de hacha de metal" +msgstr[1] "cabezas de hacha de metal" -#. ~ Description for {'str': 'metal hand axe'} +#. ~ Description for {'str': 'metal axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a chunk of steel with one edge hammered down to something resembling" @@ -102178,6 +102979,12 @@ msgstr "" " para cocinar ladrillos, pero la podés usar para cocinar cualquier cosa " "hecha de arcilla." +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "Kiln" +msgstr[1] "Kilns" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -102362,7 +103169,6 @@ msgstr[0] "gato hidráulico de tipo tijera" msgstr[1] "gatos hidráulicos de tipo tijera" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "" @@ -102636,7 +103442,6 @@ msgstr[0] "destornillador" msgstr[1] "destornilladores" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -102686,7 +103491,6 @@ msgstr[0] "soldadora de mano" msgstr[1] "soldadoras de mano" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -103170,18 +103974,18 @@ msgstr "" "Es un dron sabueso inactivo. Si es desplegado exitosamente, volará hacia el " "enemigo y los iluminará con un poderoso reflector." -#: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" -msgstr[0] "soldadora de precisión" -msgstr[1] "soldadoras de precisión" - #: lang/json/TOOL_from_json.py msgid "pseudo atomic butter churn" msgid_plural "pseudo atomic butter churns" msgstr[0] "pseudo mantequera atómica" msgstr[1] "pseudo mantequeras atómicas" +#: lang/json/TOOL_from_json.py +msgid "precision solderers" +msgid_plural "precision solderers" +msgstr[0] "soldadora de precisión" +msgstr[1] "soldadoras de precisión" + #: lang/json/TOOL_from_json.py msgid "atomic smartphone" msgid_plural "atomic smartphones" @@ -103417,6 +104221,25 @@ msgstr "" "en condiciones clínicas. Te permiten desarmar biónicos simples, pero algo " "más complejo requerirá herramientas especiales." +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "equipo de herramientas completo de biónicos" +msgstr[1] "equipos de herramientas completos de biónicos" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" +"Es un grupo de herramientas robóticas muy chiquitas y de llaves digitales " +"encriptadas, diseñadas originalmente para desarmar y probar la calidad de " +"los biónicos producidos industrialmente. Un ingeniero habilidoso y paciente " +"podría usarlas para armar manualmente nuevos cibernéticos." + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -103948,7 +104771,7 @@ msgid "" "This is a short stone chisel. It can be used to engrave on stone, wood, or " "soft metals." msgstr "" -"Es un cincel corto de piedra. Se puede usar para gravar en piedra, madera o " +"Es un cincel corto de piedra. Se puede usar para grabar en piedra, madera o " "metales suaves." #: lang/json/TOOL_from_json.py @@ -104197,7 +105020,7 @@ msgid "" "This is a high quality engraved wooden torch. On command, the tip bursts " "into flame and produces a fair amount of light. It will burn forever." msgstr "" -"Es una antorcha de madera gravada de alta calidad. Cuando quieras, la punta " +"Es una antorcha de madera grabada de alta calidad. Cuando quieras, la punta " "arderá y producirá una cantidad considerable de luz. Y arderá por siempre." #: lang/json/TOOL_from_json.py @@ -104215,7 +105038,7 @@ msgid "" "clothing and armor. This uses your tailoring skill. It also contains one " "of those magic spiders that constantly, if slowly, makes new thread." msgstr "" -"Es un equipo de muy buena calidad de acera gravado, con una variedad de " +"Es un equipo de muy buena calidad de acera grabado, con una variedad de " "agujas, algunos carreteles de hilo, pequeñas tijeras de plástico, incluso " "una resistencia térmica chica para fundir plástico. Podés usar el equipo de " "sastre para personalizar tu ropa y armadura. Con esto estás usando tu " @@ -104449,6 +105272,72 @@ msgid_plural "greater wands of cone of cold" msgstr[0] "vara mayor de cono de frío" msgstr[1] "varas mayores de cono de frío" +#: lang/json/TOOL_from_json.py +msgid "minor wand of knock" +msgid_plural "minor wands of knock" +msgstr[0] "vara menor de abrir" +msgstr[1] "varas menores de abrir" + +#. ~ Description for {'str': 'minor wand of knock', 'str_pl': 'minor wands of +#. knock'} +#. ~ Description for {'str': 'lesser wand of knock', 'str_pl': 'lesser wands +#. of knock'} +#. ~ Description for {'str': 'greater wand of knock', 'str_pl': 'greater wands +#. of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts knock." +msgstr "" +"Es una vara fina de madera con un cristal de maná en la base que puede " +"conjurar un hechizo cuando se lo activa. Esta vara puede lanzar el hechizo " +"abrir." + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of knock" +msgid_plural "lesser wands of knock" +msgstr[0] "vara inferior de abrir" +msgstr[1] "varas inferiores de abrir" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of knock" +msgid_plural "greater wands of knock" +msgstr[0] "vara mayor de abrir" +msgstr[1] "varas mayores de abrir" + +#: lang/json/TOOL_from_json.py +msgid "minor wand of improved knock" +msgid_plural "minor wands of improved knock" +msgstr[0] "vara menor de abrir mejorado" +msgstr[1] "varas menores de abrir mejorado" + +#. ~ Description for {'str': 'minor wand of improved knock', 'str_pl': 'minor +#. wands of improved knock'} +#. ~ Description for {'str': 'lesser wand of improved knock', 'str_pl': +#. 'lesser wands of improved knock'} +#. ~ Description for {'str': 'greater wand of improved knock', 'str_pl': +#. 'greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts improved knock." +msgstr "" +"Es una vara fina de madera con un cristal de maná en la base que puede " +"conjurar un hechizo cuando se lo activa. Esta vara puede lanzar el hechizo " +"abrir mejorado." + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of improved knock" +msgid_plural "lesser wands of improved knock" +msgstr[0] "vara inferior de abrir mejorado" +msgstr[1] "varas inferiores de abrir mejorado" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of improved knock" +msgid_plural "greater wands of improved knock" +msgstr[0] "vara mayor de abrir mejorado" +msgstr[1] "varas mayores de abrir mejorado" + #: lang/json/TOOL_from_json.py msgid "disposable minor wand of magic missile" msgid_plural "disposable minor wands of magic missile" @@ -104647,6 +105536,72 @@ msgid_plural "disposable greater wands of cone of cold" msgstr[0] "vara mayor descartable de cono de frío" msgstr[1] "varas mayores descartables de cono de frío" +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of knock" +msgid_plural "disposable minor wands of knock" +msgstr[0] "vara menor descartable de abrir" +msgstr[1] "varas menores descartables de abrir" + +#. ~ Description for {'str': 'disposable minor wand of knock', 'str_pl': +#. 'disposable minor wands of knock'} +#. ~ Description for {'str': 'disposable lesser wand of knock', 'str_pl': +#. 'disposable lesser wands of knock'} +#. ~ Description for {'str': 'disposable greater wand of knock', 'str_pl': +#. 'disposable greater wands of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts knock." +msgstr "" +"Es una vara fina de madera con un cristal imbuido de maná en la base que " +"puede conjurar un hechizo cuando se lo activa. Esta vara puede lanzar el " +"hechizo abrir." + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of knock" +msgid_plural "disposable lesser wands of knock" +msgstr[0] "vara inferior descartable de abrir" +msgstr[1] "varas inferiores descartables de abrir" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of knock" +msgid_plural "disposable greater wands of knock" +msgstr[0] "vara mayor descartable de abrir" +msgstr[1] "varas mayores descartables de abrir" + +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of improved knock" +msgid_plural "disposable minor wands of improved knock" +msgstr[0] "vara menor descartable de abrir mejorado" +msgstr[1] "varas menores descartables de abrir mejorado" + +#. ~ Description for {'str': 'disposable minor wand of improved knock', +#. 'str_pl': 'disposable minor wands of improved knock'} +#. ~ Description for {'str': 'disposable lesser wand of improved knock', +#. 'str_pl': 'disposable lesser wands of improved knock'} +#. ~ Description for {'str': 'disposable greater wand of improved knock', +#. 'str_pl': 'disposable greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts improved knock." +msgstr "" +"Es una vara fina de madera con un cristal imbuido de maná en la base que " +"puede conjurar un hechizo cuando se lo activa. Esta vara puede lanzar el " +"hechizo abrir mejorado." + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of improved knock" +msgid_plural "disposable lesser wands of improved knock" +msgstr[0] "vara inferior descartable de abrir mejorado" +msgstr[1] "varas inferiores descartables de abrir mejorado" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of improved knock" +msgid_plural "disposable greater wands of improved knock" +msgstr[0] "vara mayor descartable de abrir mejorado" +msgstr[1] "varas mayores descartables de abrir mejorado" + #: lang/json/TOOL_from_json.py msgid "finger firelighter" msgid_plural "finger firelighters" @@ -104803,77 +105758,8 @@ msgid "" "magical metals into their workable ingot form." msgstr "" "Es una versión portátil de la forja de carbón, mejorada mágicamente y " -"fortificada con quitina de araña demoníaca para hacerla capaz de derretir " -"metales mágicos para darles forma de lingote." - -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "" +"fortificada con quitina de araña demoníaca para hacerla capaz de fundir " +"metales mágicos para darles forma de lingote para trabajarlos." #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" @@ -105284,14 +106170,42 @@ msgstr "No hay valle lo suficientemente bajo" msgid "Freeman's favorite" msgstr "Favorito del hombre libre" +#: lang/json/achievement_from_json.py +msgid "Wield a crowbar" +msgstr "Empuñar barreta" + #: lang/json/achievement_from_json.py msgid "Impenetrable" msgstr "Impenetrable" +#: lang/json/achievement_from_json.py +msgid "Wear a tank suit" +msgstr "Ponerse traje tanque" + #: lang/json/achievement_from_json.py msgid "What are they hiding?" msgstr "¿Qué están escondiendo?" +#: lang/json/achievement_from_json.py +msgid "Enter a lab finale room" +msgstr "Entrar a la habitación final de laboratorio" + +#: lang/json/achievement_from_json.py +msgid "The Last Homely House" +msgstr "La Última Casa Familiar" + +#: lang/json/achievement_from_json.py +msgid "Reach a refugee center" +msgstr "Llegar al centro de refugiados" + +#: lang/json/achievement_from_json.py +msgid "Return to your roots" +msgstr "Volver a tus raíces" + +#: lang/json/achievement_from_json.py +msgid "Return to the location you started the game" +msgstr "Volver al lugar de donde empezaste" + #: lang/json/achievement_from_json.py msgid "Would-be Wizard" msgstr "Aspirante a Mago" @@ -106109,10 +107023,6 @@ msgstr "mercurio" msgid "mana energy" msgstr "energía maná" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "vapores tóxicos" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "Bomba de Adrenalina" @@ -106285,8 +107195,8 @@ msgid "" "Concealed in your left arm is a single shot 12 gauge shotgun. Activate the " "bionic to fire and reload the shotgun." msgstr "" -"Escondida en tu brazo izquierdo hay una escopeta de un disparo calibre 12 " -"gauge. Activá el biónico para disparar y recargar la escopeta." +"Tenés una escopeta de un disparo calibre 12 gauge escondida en el brazo " +"izquierdo. Activá el biónico para disparar y recargar la escopeta." #: lang/json/bionic_from_json.py msgid "Optical Dampers" @@ -107161,6 +108071,8 @@ msgstr "Almacenamiento de Energía Mk. II" #: lang/json/bionic_from_json.py msgid "A Compact Bionics Module that increases your power capacity by 250 kJ." msgstr "" +"Es un Módulo Compacto de Bónicos que incremente tu almacenamiento de energía" +" en 250 kJ." #. ~ Description for {'str': 'Power Overload'} #: lang/json/bionic_from_json.py @@ -107201,6 +108113,9 @@ msgid "" "toxins, or airborne diseases find their way into your windpipe, the filter " "will attempt to remove them." msgstr "" +"Se ha instalado quirúrgicamente en tu tráquea un sistema avanzado de " +"filtración. Si alguna toxina o enfermedad transmitida por aire se mete por " +"ella, el filtro intentará eliminarla." #: lang/json/bionic_from_json.py msgid "Radiation Scrubber System" @@ -107243,6 +108158,8 @@ msgid "" "You possess razor-sharp claws underneath your fingernails that do a small " "amount of unarmed slashing damage whenever your fingertips are uncovered." msgstr "" +"Tenés garras afiladas como navajas debajo de tus uñas que hacen un poco de " +"daño de corte cuando tus dedos están descubiertos." #: lang/json/bionic_from_json.py msgid "Recycler Unit" @@ -107283,6 +108200,9 @@ msgid "" "shockwave. While it will not do much damage to creatures, solid objects " "such as walls and doors will be damaged." msgstr "" +"Tu cuerpo entero puede resonar con mucha fuerza, creando una onda sísmica de" +" corto alcance. Aunque no hará mucho daño a las criaturas, los objetos " +"sólidos como las paredes y puertas serán dañados." #: lang/json/bionic_from_json.py msgid "Olfactory Mask" @@ -107430,6 +108350,9 @@ msgid "" "allow you to make automated precise cuts and can also be used as a high-" "quality butchering tool." msgstr "" +"Es un sistema de escalpelos quirúrgicos implantados en tus dedos. Te " +"permiten realizar cortes precisos automatizados y también pueden ser usados " +"como una herramienta de carneo de alta calidad." #: lang/json/bionic_from_json.py msgid "Anti-Glare Compensators" @@ -107484,6 +108407,10 @@ msgid "" " don't let go (even when you'd rather they did). Increases hand encumbrance" " by ten, while failing to improve your ability to hold objects whatsoever." msgstr "" +"Los pulgares auto-trabables se traban firmemente (incluso cuando vos no " +"querés que suceda) y no se sueltan (incluso cuando vos preferirías que se " +"suelten). Incrementa la incomodidad de las manos en diez puntos, y no mejora" +" tu habilidad para agarrar objetos." #: lang/json/bionic_from_json.py msgid "Time Dilation" @@ -107512,10 +108439,14 @@ msgid "" "screwdriver, hammer, wrench, hacksaw, drill, welder, and heating elements. " "You can use this in place of many tools when crafting." msgstr "" +"En tus manos y dedos tenés implantados quirúrgicamente un juego de " +"herramientas -destornillador, martillo, llave inglesa, taladro, soldadora y " +"resistencias térmicas. Podés usar esto para reemplazar muchas herramientas " +"cuando fabricás cosas." #: lang/json/bionic_from_json.py msgid "Extended Toolset" -msgstr "" +msgstr "Caja de Herramientas Extendida" #. ~ Description for {'str': 'Extended Toolset'} #: lang/json/bionic_from_json.py @@ -107523,6 +108454,8 @@ msgid "" "Extend or withdraw your integrated toolset to cut metal, pry things, or " "other stuff. This takes up your hands." msgstr "" +"Extendé o replegá tu caja de herramientas integrada para cortar metal, " +"barretear algo, y otras cosas más. Esto ocupa tus manos." #: lang/json/bionic_from_json.py msgid "Joint Torsion Ratchet" @@ -107535,10 +108468,14 @@ msgid "" "generate power when you move. Whilst this is toggled, moving will require " "more effort, though more power will be generated." msgstr "" +"Tus articulaciones han sido quirúrgicamente equipadas con un sistema " +"cinético, lo que te permite generar energía lentamente mientras te movés. " +"Cuando está activado, vas a necesitar un esfuerzo mayor para moverte, pero " +"vas a generar más energía." #: lang/json/bionic_from_json.py msgid "Joint Servo" -msgstr "" +msgstr "Articulaciones Servo" #. ~ Description for {'str': 'Joint Servo'} #: lang/json/bionic_from_json.py @@ -107587,6 +108524,9 @@ msgid "" "You have a Unified Power System wired into your power banks. Objects that " "run on a UPS can now draw directly from your bionic power supply." msgstr "" +"Tenés un sistema de alimentación ininterrumpida (UPS) conectada a tus bancos" +" de energía. Los objetos que funcionan con un UPS ahora pueden usar " +"directamente tu suministro de energía biónica." #. ~ Description for {'str': 'Voice Remodulator'} #: lang/json/bionic_from_json.py @@ -107640,6 +108580,11 @@ msgid "" " your back. A diffuse network of bio-plastic bladders has been meshed with " "your circulatory system and serves as a fuel tank." msgstr "" +"Es una pequeña celda de nafta unida a tu omóplato. A pesar de su limitada " +"producción de energía comparada a otras celdas, este dispositivo produce una" +" cantidad significativa de calor disipado a través de un tubo de escape de " +"calor que sale de tu espalda. Una red de vejigas bioplásticas dispersas por " +"tu sistema circulatorio funcionan como tanques de combustible." #: lang/json/bionic_from_json.py msgid "Intravenous Needletip" @@ -107694,7 +108639,7 @@ msgstr "" #: lang/json/bionic_from_json.py msgid "Taste Modifier" -msgstr "" +msgstr "Modificador de Gusto" #. ~ Description for {'str': 'Taste Modifier'} #: lang/json/bionic_from_json.py @@ -107704,10 +108649,14 @@ msgid "" "active bionic will nullify the taste of all comestibles with negative " "enjoyment value at the cost of draining bionic power." msgstr "" +"Un grupo de sensores ha sido instalados en tu boca y un analizador " +"sofisticado y más pequeño aún, en la cavidad de tu cráneo. El biónico activo" +" anulará los valores negativos de disfrute en los comestibles a cambio de " +"energía biónica." #: lang/json/bionic_from_json.py msgid "Soporific Induction" -msgstr "" +msgstr "Inducción Soporífera" #. ~ Description for {'str': 'Soporific Induction'} #: lang/json/bionic_from_json.py @@ -107716,6 +108665,9 @@ msgid "" "nucleus. It turns on whenever you're trying to fall asleep, creating an " "artificial but effective sensation of fatigue." msgstr "" +"Se ha implantado un electrodo en el núcleo ventrolateral preóptico de tu " +"cerebro. Se enciende cuando intentás quedarte dormido, creando un sensación " +"de fatiga artificial pero efectiva." #: lang/json/bionic_from_json.py msgid "Advanced Microreactor System" @@ -107728,6 +108680,10 @@ msgid "" "model due to integrated radiation cleansers. There is no way to shut it " "down once active, but you can toggle additional fuel intake." msgstr "" +"Este mini-reactor con solo lo esencial es más eficiente y seguro que el " +"modelo base debido a sus limpiadores integrados de radiación. No hay manera " +"de apagarlo cuando está activo, pero podés activar o desactivar el consumo " +"adicional de combustible." #: lang/json/bionic_from_json.py msgid "Plutonium Filter" @@ -107739,6 +108695,8 @@ msgid "" "This set of tanks and filters allows you to extract plutonium from " "radioactive slurry." msgstr "" +"Este equipo de tanques y filtros te permite extraer plutonio de la lechada " +"radioactiva." #: lang/json/bionic_from_json.py msgid "Plutonium Purger" @@ -107750,6 +108708,8 @@ msgid "" "Triggers an emergency reactor fuel purge that ejects all fuel from your " "reactor." msgstr "" +"Se activa una purga de emergencia del reactor, lo que expulsa todo el " +"combustible del reactor." #: lang/json/bionic_from_json.py msgid "Microreactor System" @@ -107762,6 +108722,10 @@ msgid "" "power. There is no way to shut it down, but you can toggle additional fuel " "intake. Irradiates your body when active." msgstr "" +"Este mini-reactor reducido al máximo genera cantidades impresionantes de " +"energía biónica. No hay manera de apagarlo pero podés activar o desactivar " +"el consumo adicional de combustible. Irradiará tu cuerpo cuando está " +"activado." #: lang/json/bionic_from_json.py msgid "Internal Furnace" @@ -107809,6 +108773,8 @@ msgid "" "making it possible for you to recognize your surroundings even in complete " "darkness." msgstr "" +"Mientras este sistema está encendido, podrás ver tu propio olor, haciendo " +"que puedas reconocer los lugares aunque estés en completa oscuridad." #: lang/json/bionic_from_json.py msgid "Solar Panels" @@ -107821,27 +108787,17 @@ msgid "" "resembling angular butterfly wings. When in direct sunlight, they will " "automatically deploy and slowly recharge your power level." msgstr "" +"Tenés instalados en tu espalda, una serie de paneles solares reforzados " +"retráctiles, que parecen alas de una mariposa. Cuando la luz solar les llega" +" directa, se desplegarán automáticamente y cargarán tu energía lentamente." #: lang/json/bionic_from_json.py msgid "Wind Turbines" -msgstr "" - -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" +msgstr "Turbinas de Viento" #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" -msgstr "" +msgstr "Lanzagranadas Desplegable" #. ~ Description for {'str': 'Deployable Grenade Launcher'} #: lang/json/bionic_from_json.py @@ -107849,10 +108805,12 @@ msgid "" "Your right hand can fold inward to reveal a mechanism capable of igniting " "and firing 40mm grenades across medium distances." msgstr "" +"Tu mano derecha puede doblarse hacia adentro para revelar un mecanismo capaz" +" de disparar granadas 40mm a una distancia media." #: lang/json/bionic_from_json.py msgid "Linguistic Coprocessor" -msgstr "" +msgstr "Coprocesador Lingüístico" #. ~ Description for {'str': 'Linguistic Coprocessor'} #: lang/json/bionic_from_json.py @@ -107862,10 +108820,14 @@ msgid "" "that moderately increases the speed that language and written words are " "processed, granting a 15% increase to reading speed." msgstr "" +"El hemisferio izquierdo de tu cerebro ha sido mejorado con una " +"microcomputadora que incrementa moderadamente la velocidad en que el " +"lenguaje y las palabras escritas son procesadas, lo que te otorga un 15% de " +"incremento en la velocidad de lectura." #: lang/json/bionic_from_json.py msgid "Dopamine Stimulators" -msgstr "" +msgstr "Estimuladores de Dopamina" #. ~ Description for {'str': 'Dopamine Stimulators'} #: lang/json/bionic_from_json.py @@ -107875,6 +108837,11 @@ msgid "" "slowly releases a stream of reward chemicals and hormones into your brain, " "inducing a state of euphoria that notably elevates mood." msgstr "" +"Se han instalado pequeños estimuladores cibernéticos por toda tu área " +"tegmental ventral, y se activarán a intervalos establecidos utilizando " +"energía biónica. Esto enviará lentamente una corriente de químicos y " +"hormonas de recompensa a tu cerebro, induciendo un estado de euforia que " +"mejora notablemente tu humor." #. ~ Description for {'str': 'Cranium Bomb'} #: lang/json/bionic_from_json.py @@ -107884,6 +108851,27 @@ msgid "" " switch if you don't check in roughly every thirty days. You need this out " "and fast." msgstr "" +"Trabajaste para algunas personas bastante complicadas. Personas que " +"instalaron una bomba en la parte superior de tu columna. Ahora ya están " +"todos muertos pero tiene una activación por muerte si no probas que estás " +"vivo cada treinta días. Necesitás sacarte esto y rápido." + +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "Soldadoras de Precisión" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" +"Tus manos han sido equipadas con herramientas precisas de soldadura, alicate" +" y carretes para cable. Son demasiado pequeñas para usar en la mayoría de " +"las fabricaciones pero en ausencia de la maquinaria adecuada, son esenciales" +" para crear biónicos sin mejores herramientas." #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" @@ -107898,6 +108886,10 @@ msgid "" "powerfull spell focus able to consume blood from dead creatures to produce " "bionic power. It can store up to 100 mL of blood." msgstr "" +"Metido en tu espalda y conectado a tu fuente de energía biónica hay un " +"poderoso hechizo de enfoque capas de consumir sangre de las criaturas " +"muertas para producir energía biónica. Puede almacenar hasta 100 mL de " +"sangre." #: lang/json/bodypart_from_json.py msgid "torso" @@ -107981,7 +108973,7 @@ msgstr "brazo izquierdo" #: lang/json/bodypart_from_json.py msgid "arms" -msgstr "" +msgstr "brazos" #: lang/json/bodypart_from_json.py msgctxt "bodypart_accusative" @@ -107991,7 +108983,7 @@ msgstr "brazo izquierdo" #: lang/json/bodypart_from_json.py msgctxt "bodypart_accusative" msgid "arms" -msgstr "" +msgstr "brazos" #: lang/json/bodypart_from_json.py msgid "Melee and ranged combat is hampered." @@ -108032,7 +109024,7 @@ msgstr "mano izquierda" #: lang/json/bodypart_from_json.py msgid "hands" -msgstr "" +msgstr "manos" #: lang/json/bodypart_from_json.py msgctxt "bodypart_accusative" @@ -108042,7 +109034,7 @@ msgstr "mano izquierda" #: lang/json/bodypart_from_json.py msgctxt "bodypart_accusative" msgid "hands" -msgstr "" +msgstr "manos" #: lang/json/bodypart_from_json.py msgid "Manual tasks are slowed." @@ -108075,7 +109067,7 @@ msgstr "pierna izquierda" #: lang/json/bodypart_from_json.py msgid "legs" -msgstr "" +msgstr "piernas" #: lang/json/bodypart_from_json.py msgctxt "bodypart_accusative" @@ -108085,7 +109077,7 @@ msgstr "pierna izquierda" #: lang/json/bodypart_from_json.py msgctxt "bodypart_accusative" msgid "legs" -msgstr "" +msgstr "piernas" #: lang/json/bodypart_from_json.py msgid "Running and swimming are slowed." @@ -108126,7 +109118,7 @@ msgstr "pie izquierdo" #: lang/json/bodypart_from_json.py msgid "feet" -msgstr "" +msgstr "pies" #: lang/json/bodypart_from_json.py msgctxt "bodypart_accusative" @@ -108136,7 +109128,7 @@ msgstr "pie izquierdo" #: lang/json/bodypart_from_json.py msgctxt "bodypart_accusative" msgid "feet" -msgstr "" +msgstr "pies" #: lang/json/bodypart_from_json.py src/armor_layers.cpp msgid "L. Foot" @@ -108186,11 +109178,11 @@ msgstr "Destruir relleno de cuero" #: lang/json/clothing_mod_from_json.py msgid "Pad with steel" -msgstr "" +msgstr "Rellenar con acer" #: lang/json/clothing_mod_from_json.py msgid "Destroy steel padding" -msgstr "" +msgstr "Destruir relleno de acero" #: lang/json/clothing_mod_from_json.py msgid "Pad with Kevlar" @@ -108222,18 +109214,18 @@ msgstr "Pacifista" #: lang/json/conduct_from_json.py msgid "Kill no monsters" -msgstr "" +msgstr "No matar monstruos" #: lang/json/conduct_from_json.py msgid "Kill no characters" -msgstr "" +msgstr "No matar personajes" #: lang/json/conduct_from_json.py msgid "Merciful" -msgstr "" +msgstr "Compasivo" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp src/scenario.cpp msgid "All" msgstr "Todo/as" @@ -108267,7 +109259,7 @@ msgstr "Granja y Leña" #: lang/json/construction_category_from_json.py msgid "Windows" -msgstr "" +msgstr "Ventanas" #: lang/json/construction_category_from_json.py msgid "Others" @@ -108292,7 +109284,7 @@ msgstr "Algunos muebles y terreno puede ser desarmado sin herramientas." #: lang/json/construction_from_json.py msgid "Make crafting spot" -msgstr "" +msgstr "Hacer lugar de fabricación" #: lang/json/construction_from_json.py msgid "" @@ -108302,6 +109294,11 @@ msgid "" "Does not prevent using a proper workbench, if available. Deconstruct or " "smash to remove." msgstr "" +"Marca un lugar para fabricar. Las tareas de fabricación junto a este espacio" +" usarán automáticamente este lugar en lugar de intentar la fabricación en " +"tus manos, con la penalidad normal a la velocidad por trabajar en el suelo. " +"No evita que uses una mesa de trabajo adecuada, si hay. Deconstruila o " +"rompela para quitarla." #: lang/json/construction_from_json.py msgid "Spike Pit" @@ -108329,7 +109326,7 @@ msgstr "Puede ser desarmado sin herramientas." #: lang/json/construction_from_json.py msgid "Build Beaded Curtain" -msgstr "" +msgstr "Construir Cortina de Cuentas" #: lang/json/construction_from_json.py msgid "Build Makeshift Door" @@ -108341,11 +109338,11 @@ msgstr "Construir Puerta" #: lang/json/construction_from_json.py msgid "Fill Shallow Water With Dirt" -msgstr "" +msgstr "Rellenar Agua Poco Profunda Con Tierra" #: lang/json/construction_from_json.py msgid "Fill Salt Water With Dirt" -msgstr "" +msgstr "Rellenar Agua Salada Con Tierra" #: lang/json/construction_from_json.py msgid "Repair Wood Door" @@ -108425,7 +109422,7 @@ msgstr "Construir Pared de Bolsas de Arena" #: lang/json/construction_from_json.py msgid "Build Earthbag Wall" -msgstr "" +msgstr "Construir Pared de Bolsas de Tierra" #: lang/json/construction_from_json.py msgid "Build Metal Wall" @@ -108437,31 +109434,31 @@ msgstr "Construir Pared de Ladrillos" #: lang/json/construction_from_json.py msgid "Build Concrete Floor" -msgstr "" +msgstr "Construir Suelo de Concreto" #: lang/json/construction_from_json.py msgid "Fill Pit With Dirt" -msgstr "" +msgstr "Rellenar Pozo Con Tierra" #: lang/json/construction_from_json.py msgid "Make Woodchip Floor" -msgstr "" +msgstr "Hacer Piso Aglomerado" #: lang/json/construction_from_json.py msgid "Make Gravel Floor" -msgstr "" +msgstr "Hacer Piso de Gravilla" #: lang/json/construction_from_json.py msgid "Build Straight Small Railroad Track" -msgstr "" +msgstr "Construir Pequeña Vía Derecha" #: lang/json/construction_from_json.py msgid "Build Diagonal Small Railroad Track" -msgstr "" +msgstr "Construir Pequeña Vía Diagonal" #: lang/json/construction_from_json.py msgid "Build Wooden Floor" -msgstr "" +msgstr "Construir Piso de Madera" #: lang/json/construction_from_json.py msgid "Build Simple Concrete Wall" @@ -108473,7 +109470,7 @@ msgstr "Construir Pared de Concreto Reforzado" #: lang/json/construction_from_json.py msgid "Build Concrete Column" -msgstr "" +msgstr "Construir Columna de Concreto" #: lang/json/construction_from_json.py msgid "Build Metal Roof" @@ -108501,11 +109498,11 @@ msgstr "Construir Pared de Piedra" #: lang/json/construction_from_json.py msgid "Build Dry Stone Wall" -msgstr "" +msgstr "Construir Pared de Piedra Seca" #: lang/json/construction_from_json.py msgid "Build Pony Wall" -msgstr "" +msgstr "Construir Pared Petisa" #: lang/json/construction_from_json.py msgid "Build Roof" @@ -108521,7 +109518,7 @@ msgstr "Construir Techo de Tronco y Césped" #: lang/json/construction_from_json.py msgid "Build Roof Over Dirt Floor" -msgstr "" +msgstr "Construir Techo Sobre Piso de Tierra" #: lang/json/construction_from_json.py msgid "Build Rope & Pulley System" @@ -108585,19 +109582,19 @@ msgstr "Debe ser apoyado de los dos lados por una reja, pared, etcétera." #: lang/json/construction_from_json.py msgid "Build Screen Door" -msgstr "" +msgstr "Construir Puerta Mosquitera" #: lang/json/construction_from_json.py msgid "Build Screen Mesh Wall" -msgstr "" +msgstr "Construir Pared de Malla" #: lang/json/construction_from_json.py msgid "Build Chickenwire Fence" -msgstr "" +msgstr "Construir Valla de Alambre Tejido" #: lang/json/construction_from_json.py msgid "Build Chickenwire Gate" -msgstr "" +msgstr "Construir Puerta de Alambre Tejido" #: lang/json/construction_from_json.py msgid "Seal Crate" @@ -108617,7 +109614,7 @@ msgstr "Sellar Ataúd" #: lang/json/construction_from_json.py msgid "Dig Grave and Bury Sealed Coffin" -msgstr "" +msgstr "Cavar Tumba y Enterrar Ataúd Sellado" #: lang/json/construction_from_json.py msgid "Build Bulletin Board" @@ -108633,7 +109630,7 @@ msgstr "Construir Biblioteca" #: lang/json/construction_from_json.py msgid "Build Entertainment Center" -msgstr "" +msgstr "Construir Centro de Entretenimiento" #: lang/json/construction_from_json.py msgid "Build Locker" @@ -108641,7 +109638,7 @@ msgstr "Construir Casillero" #: lang/json/construction_from_json.py msgid "Build Wooden Rack" -msgstr "" +msgstr "Construir Estante de Madera" #: lang/json/construction_from_json.py msgid "Build Metal Rack" @@ -108649,7 +109646,7 @@ msgstr "Construir Estante de Metal" #: lang/json/construction_from_json.py msgid "Build Warehouse Shelf" -msgstr "" +msgstr "Construir Estantes Metálicos" #: lang/json/construction_from_json.py msgid "Build Coat Rack" @@ -108669,11 +109666,11 @@ msgstr "Construir Mesa" #: lang/json/construction_from_json.py msgid "Place Table" -msgstr "" +msgstr "Poner Mesa" #: lang/json/construction_from_json.py msgid "Build Coffee Table" -msgstr "" +msgstr "Construir Mesita Ratona" #: lang/json/construction_from_json.py msgid "Build Workbench" @@ -108705,23 +109702,23 @@ msgstr "Construir Cama de Paja" #: lang/json/construction_from_json.py msgid "Build Pile of Leaves" -msgstr "" +msgstr "Construir Pila de Hojas" #: lang/json/construction_from_json.py msgid "Build Bed from Scratch" -msgstr "" +msgstr "Construir Cama desde Cero" #: lang/json/construction_from_json.py msgid "Build Bunk Bed" -msgstr "" +msgstr "Construir Cucheta" #: lang/json/construction_from_json.py msgid "Build Bed Frame" -msgstr "" +msgstr "Construir Marco de Cama" #: lang/json/construction_from_json.py msgid "Add Mattress to Bed Frame" -msgstr "" +msgstr "Poner Colchón a Marco de Cama" #: lang/json/construction_from_json.py msgid "Build Armchair" @@ -108769,67 +109766,67 @@ msgstr "Construir Pozo de Agua" #: lang/json/construction_from_json.py msgid "Place Hay Bale" -msgstr "" +msgstr "Ubicar Atado de Heno" #: lang/json/construction_from_json.py msgid "Build Desk" -msgstr "" +msgstr "Construir Escritorio" #: lang/json/construction_from_json.py msgid "Build Wardrobe" -msgstr "" +msgstr "Construir Ropero" #: lang/json/construction_from_json.py msgid "Build Safe" -msgstr "" +msgstr "Construir Caja Fuerte" #: lang/json/construction_from_json.py msgid "Build Dumpster" -msgstr "" +msgstr "Construir Contenedor" #: lang/json/construction_from_json.py msgid "Build Mailbox" -msgstr "" +msgstr "Construir Buzón" #: lang/json/construction_from_json.py msgid "Build Bar Door" -msgstr "" +msgstr "Construir Puerta de Bar" #: lang/json/construction_from_json.py msgid "Install Bars Onto Window" -msgstr "" +msgstr "Instalar Barras a Ventana" #: lang/json/construction_from_json.py msgid "Build Large Metal Support" -msgstr "" +msgstr "Construir Soporte Grande de Metal" #: lang/json/construction_from_json.py msgid "Build Small Metal Support" -msgstr "" +msgstr "Construir Soporte Chico de Metal" #: lang/json/construction_from_json.py msgid "Paint Grass White" -msgstr "" +msgstr "Pintar Pasto de Blanco" #: lang/json/construction_from_json.py msgid "Paint Pavement Yellow" -msgstr "" +msgstr "Pintar Pavimento de Amarillo" #: lang/json/construction_from_json.py msgid "Take Paint Off Pavement" -msgstr "" +msgstr "Quitar Pintura de Pavimento" #: lang/json/construction_from_json.py msgid "Build Wooden Railing" -msgstr "" +msgstr "Construir Baranda de Madera" #: lang/json/construction_from_json.py msgid "Cover Manhole" -msgstr "" +msgstr "Cubrir Cámara de Inspección" #: lang/json/construction_from_json.py msgid "Remove Wax From Floor" -msgstr "" +msgstr "Quitar Cera del Piso" #: lang/json/construction_from_json.py msgid "Paint Wall Red" @@ -108841,7 +109838,7 @@ msgstr "Pintar Pared de Azul" #: lang/json/construction_from_json.py msgid "Paint Wall White" -msgstr "" +msgstr "Pintar Pared de Blanco" #: lang/json/construction_from_json.py msgid "Paint Wall Green" @@ -108881,7 +109878,7 @@ msgstr "Alfombrar con Verde" #: lang/json/construction_from_json.py msgid "Wax Floor" -msgstr "" +msgstr "Encerar Piso" #: lang/json/construction_from_json.py msgid "Dig Downstair" @@ -108893,11 +109890,11 @@ msgstr "Hacer Mina hacia Abajo" #: lang/json/construction_from_json.py msgid "Repair Wooden Staircase" -msgstr "" +msgstr "Arreglar Escalera de Madera" #: lang/json/construction_from_json.py msgid "Build Wooden Staircase" -msgstr "" +msgstr "Construir Escalera de Madera" #: lang/json/construction_from_json.py msgid "Mine Upstair" @@ -108917,31 +109914,31 @@ msgstr "Construir Puente Flotante" #: lang/json/construction_from_json.py msgid "Build River Bridge" -msgstr "" +msgstr "Construir Puente sobre Río" #: lang/json/construction_from_json.py msgid "Build River Dock/Shallow Bridge" -msgstr "" +msgstr "Construir Muelle de Río/Puente Pequeño" #: lang/json/construction_from_json.py msgid "Build Deep River Dock" -msgstr "" +msgstr "Construir Muelle de Río Profundo" #: lang/json/construction_from_json.py msgid "Place Water Mill" -msgstr "" +msgstr "Ubicar Molino de Agua" #: lang/json/construction_from_json.py msgid "Place Wind Mill" -msgstr "" +msgstr "Ubicar Molino de Viento" #: lang/json/construction_from_json.py msgid "Build Shallow Temporary Bridge" -msgstr "" +msgstr "Construir Puente Pequeño Temporal" #: lang/json/construction_from_json.py msgid "Build Planter" -msgstr "" +msgstr "Construir Macetero" #: lang/json/construction_from_json.py msgid "Cut Grass" @@ -109046,11 +110043,11 @@ msgstr "Construir Fuerte de Almohadas" #: lang/json/construction_from_json.py msgid "Build Cardboard Fort" -msgstr "" +msgstr "Construir Fuerte de Cartón" #: lang/json/construction_from_json.py msgid "Build Sand Castle" -msgstr "" +msgstr "Construir Castillo de Arena" #: lang/json/construction_from_json.py msgid "Build Fire Ring" @@ -109058,51 +110055,51 @@ msgstr "Construir Anillo de Fuego" #: lang/json/construction_from_json.py msgid "Build Rammed Earth Wall" -msgstr "" +msgstr "Construir Tapial" #: lang/json/construction_from_json.py msgid "Hang Hanging Meathook" -msgstr "" +msgstr "Colgar Gancho para Carne" #: lang/json/construction_from_json.py msgid "Build Counter Gate" -msgstr "" +msgstr "Construir Puerta Mostrador" #: lang/json/construction_from_json.py msgid "Build Split Rail Fence Gate" -msgstr "" +msgstr "Construir Puerta de Valla de Madera" #: lang/json/construction_from_json.py msgid "Build Privacy Fence Gate" -msgstr "" +msgstr "Construir Puerta de Valla Ciega" #: lang/json/construction_from_json.py msgid "Build Split Rail Fence" -msgstr "" +msgstr "Construir Valla de Madera" #: lang/json/construction_from_json.py msgid "Build Privacy Fence" -msgstr "" +msgstr "Construir Valla Ciega" #: lang/json/construction_from_json.py msgid "Build Brick Wall from Adobe" -msgstr "" +msgstr "Construir Pared de Ladrillos de Adobe" #: lang/json/construction_from_json.py msgid "Extrude Resin Lattice" -msgstr "" +msgstr "Extrudir Enrejado de Resina" #: lang/json/construction_from_json.py msgid "Extrude Resin Wall" -msgstr "" +msgstr "Extrudir Pared de Resina" #: lang/json/construction_from_json.py msgid "Extrude Resin Floor and Roof" -msgstr "" +msgstr "Extrudir Piso y Techo de Resina" #: lang/json/construction_from_json.py msgid "Extrude Resin Floor (no roof)" -msgstr "" +msgstr "Extrudir Piso de Resina (no el techo)" #: lang/json/construction_from_json.py msgid "Build Pine Lean-To" @@ -109114,119 +110111,123 @@ msgstr "Construir Cobertizo de Lona" #: lang/json/construction_from_json.py msgid "Dig a Shallow Pit" -msgstr "" +msgstr "Cavar Pozo Poco Profundo" #: lang/json/construction_from_json.py msgid "Dig a Deep Pit" -msgstr "" +msgstr "Cavar Pozo Profundo" #: lang/json/construction_from_json.py msgid "Build Arc Furnace" -msgstr "" +msgstr "Construir Horno de Arco Eléctrico" #: lang/json/construction_from_json.py msgid "Build a bellow." -msgstr "" +msgstr "Construir Fuelle" #: lang/json/construction_from_json.py msgid "Build a drop hammer." -msgstr "" +msgstr "Construir Martillo Pilón" #: lang/json/construction_from_json.py msgid "Build a radio tower." -msgstr "" +msgstr "Construir Torre de Radio" #: lang/json/construction_from_json.py msgid "Build a radio tower console." -msgstr "" +msgstr "Construir Consola de Torre de Radio" #: lang/json/construction_from_json.py msgid "Build Log Stool" -msgstr "" +msgstr "Construir Banquito de Troncos" #: lang/json/construction_from_json.py msgid "Build Decorative Tree" -msgstr "" +msgstr "Construir Árbol Decorativo" #: lang/json/construction_from_json.py msgid "Build Metal Grate Over a Window" -msgstr "" +msgstr "Construir Rejilla de Metal Sobre Ventana" #: lang/json/construction_from_json.py msgid "Build Metal Grate Over a Window Without Glass" -msgstr "" +msgstr "Construir Rejilla de Metal Sobre Ventana sin Vidrio" #: lang/json/construction_from_json.py msgid "Build Single Glazed Glass Window" -msgstr "" +msgstr "Construir Ventana de Vidrio Sencillo" #: lang/json/construction_from_json.py msgid "Build Reinforced Single Glazed Glass Window" -msgstr "" +msgstr "Construir Ventana de Vidrio Sencillo Reforzado" #: lang/json/construction_from_json.py msgid "Build Double Glazed Glass Window" -msgstr "" +msgstr "Construir Ventana de Vidrio Doble" #: lang/json/construction_from_json.py msgid "Build Reinforced Double Glazed Glass Window" -msgstr "" +msgstr "Construir Ventana de Vidrio Doble Reforzado" #: lang/json/construction_from_json.py msgid "Build Triple Glazed Glass Window" -msgstr "" +msgstr "Construir Ventana de Vidrio Triple" #: lang/json/construction_from_json.py msgid "Build Reinforced Triple Glazed Glass Window" -msgstr "" +msgstr "Construir Ventana de Vidrio Triple Reforzado" #: lang/json/construction_from_json.py msgid "Build Quadruple Glazed Glass Window" -msgstr "" +msgstr "Construir Ventana de Vidrio Cuádruple" #: lang/json/construction_from_json.py msgid "Build Reinforced Quadruple Glazed Glass Window" -msgstr "" +msgstr "Construir Ventana de Vidrio Cuádruple Reforzado" #: lang/json/construction_from_json.py msgid "Build Plastic Window" -msgstr "" +msgstr "Construir Ventana Plástica" #: lang/json/construction_from_json.py msgid "Build Reinforced Plastic Window" -msgstr "" +msgstr "Construir Ventana de Plástico Reforzado" #: lang/json/construction_from_json.py msgid "Build Window from Tempered Glass" -msgstr "" +msgstr "Construir Ventana de Vidrio Templado" #: lang/json/construction_from_json.py msgid "Build Sky Light Frame" -msgstr "" +msgstr "Construir Estructura de Claraboya" #: lang/json/construction_from_json.py msgid "Build Sky Light" -msgstr "" +msgstr "Construir Claraboya" #: lang/json/construction_from_json.py msgid "Convert Fridge Power Supply" -msgstr "" +msgstr "Convertir Alimentación de Heladera" #: lang/json/construction_from_json.py msgid "" "Converts a fridge to run off of vehicle power. You can 'e'xamine it " "afterwards to take it down for mounting." msgstr "" +"Hace que una heladera pueda funcionar con la energía de un vehículo. Podés " +"apretar 'e' para examinarla después para montarla." #: lang/json/construction_from_json.py msgid "Convert Vehicle Fridge to Freezer" -msgstr "" +msgstr "Convertir Heladera de Vehículo a Freezer" #: lang/json/construction_from_json.py msgid "" "Further modifies a converted fridge to function as a freezer. You can " "'e'xamine it afterwards to take it down for mounting." msgstr "" +"Modifica una heladera reconvertido para funcionar como freezer. Podés " +"apretar 'e' para examinarla después para montarla." #: lang/json/construction_from_json.py msgid "Chop Tree Trunk Into Logs" @@ -109234,11 +110235,11 @@ msgstr "Cortar Árbol en Troncos" #: lang/json/construction_from_json.py msgid "Makeshift Wall" -msgstr "" +msgstr "Pared Improvisada" #: lang/json/construction_from_json.py msgid "Build Translocator Gate" -msgstr "" +msgstr "Construir Puerta de Translocador" #: lang/json/dream_from_json.py msgid "You have a strange dream about lizards." @@ -109344,7 +110345,7 @@ msgstr "Tenés un extraño sueño acerca de vivir en una cueva." #: lang/json/dream_from_json.py msgid "Your dreams give you a strange reclusive feeling." -msgstr "" +msgstr "Tus sueños te hacen sentir una extraña sensación solitaria." #: lang/json/dream_from_json.py msgid "You have a strange dream about sea creatures." @@ -109376,7 +110377,7 @@ msgstr "Tenés un extraño sueño." #: lang/json/dream_from_json.py msgid "You feel… OK." -msgstr "" +msgstr "Te sentís… bien." #: lang/json/dream_from_json.py msgid "You feel a yearning..." @@ -109388,7 +110389,7 @@ msgstr "Soñás con el zoológico, por alguna razón." #: lang/json/dream_from_json.py msgid "Your dreams… are complex and multifaceted." -msgstr "" +msgstr "Tus sueños son… complejos y multifacéticos." #: lang/json/dream_from_json.py msgid "You dream of the tropics." @@ -109478,7 +110479,7 @@ msgstr "" #: lang/json/dream_from_json.py msgid "You dream of foraging in the woods… mouth-first?" -msgstr "" +msgstr "Tenés un sueño en el que buscás comida en el bosque… ¿con la boca?" #: lang/json/dream_from_json.py msgid "Your dream-reflection is rather bearish." @@ -109500,7 +110501,7 @@ msgstr "" #: lang/json/dream_from_json.py msgid "Your dream-self's muzzle looks… wait, muzzle?" -msgstr "" +msgstr "En tu sueño, tu hocico parece que se… momento, ¿hocico?" #: lang/json/dream_from_json.py msgid "You dream of grazing in an open field." @@ -109599,6 +110600,8 @@ msgstr "Te sentís hermoso, pero también desgarrado por la preocupación..." msgid "" "You can't quite work out what the dream is about… it just keeps changing." msgstr "" +"No llegás a darte cuenta qué es lo que estás soñando… porque cambia " +"constantemente." #: lang/json/dream_from_json.py msgid "Your dream is filled with creatures, and yet all seem like you." @@ -109608,6 +110611,8 @@ msgstr "Tu sueño está repleto de criaturas, y todas se parecen a vos." msgid "" "You dream of stalking some sort of lizard… no, that can't be right, can it?" msgstr "" +"Soñás que estás acechando a alguna clase de lagarto… no, no creo que sea " +"eso, ¿o sí?" #: lang/json/dream_from_json.py msgid "" @@ -109619,7 +110624,7 @@ msgstr "" #: lang/json/dream_from_json.py msgid "You dream of… sneaking." -msgstr "" +msgstr "Soñás con… moverte de manera furtiva." #: lang/json/dream_from_json.py msgid "You dream of a cold winter night. Your jacket is too big to put on." @@ -109693,6 +110698,8 @@ msgid "" "Your dream of raiding a giant beehive has you licking your… muzzle in " "anticipation." msgstr "" +"El sueño que tuviste acerca de asaltar una colmena gigante, te hace " +"relamerte el… hocico de ansiedad." #: lang/json/dream_from_json.py msgid "" @@ -109975,36 +110982,46 @@ msgid "" "How grand it would be to sink your roots deep into the soil as the seasons " "pass you by." msgstr "" +"Qué bueno sería poder hundir tus raíces profundo en el suelo, mientras las " +"estaciones pasan." #: lang/json/dream_from_json.py msgid "You dream of a gigantic knot of roots, beating like a heart." -msgstr "" +msgstr "Soñás con un gigantesco nudo de raíces, latiendo como un corazón." #: lang/json/dream_from_json.py msgid "You have a disturbing dream of termites chewing all over your body." msgstr "" +"Tenés un sueño perturbador acerca de termitas masticándote todo el cuerpo." #: lang/json/dream_from_json.py msgid "" "You dream of sharing your roots with a vast forest, all plants provided for " "as the canopy grows ever upwards." msgstr "" +"Soñás con compartir tus raíces en un vasto bosque, todas las plantas " +"participando mientras el dosel crece siempre arriba." #: lang/json/dream_from_json.py msgid "A family of caterpillars munches away at your leaves." -msgstr "" +msgstr "Una familia de orugas masticándote las hojas." #: lang/json/dream_from_json.py msgid "" "Fire rages around you, licking at your bark and engulfing the saplings and " "bushes near your roots. The once chatty forest is quiet in its wake." msgstr "" +"El fuego ruge a tu alrededor, lamiéndote la corteza y rodeando los brotes y " +"arbustos cerca de tus raíces. Lo que era un bosque hablador ahora es " +"silencioso." #: lang/json/dream_from_json.py msgid "" "You dream of communing with an ancient pine. Trees are the true survivors " "of this world, it tells you." msgstr "" +"Soñás con comunicarte con un pino antiguo. Te dice que los árboles son los " +"verdaderos sobrevivientes en este mundo." #: lang/json/dream_from_json.py msgid "" @@ -110055,6 +111072,8 @@ msgstr "" #: lang/json/dream_from_json.py msgid "You excitedly web up an interloper and prepare to feast… nope, dream." msgstr "" +"Con mucha excitación, enredás con tu telaraña al intruso y te preparás para " +"el festín… ah, no, era un sueño." #: lang/json/dream_from_json.py msgid "Your dreams of having to live without a web frighten you." @@ -110095,6 +111114,8 @@ msgstr "Te gustaría que otros pudieran entender, y unirse a tu lucha..." #: lang/json/dream_from_json.py msgid "Your body flows slightly faster than you expected… oh, just a dream." msgstr "" +"Tu cuerpo fluye un poco más rápido de lo que esperabas… ah, era solo un " +"sueño." #: lang/json/dream_from_json.py msgid "FIGHT. FEED. FORWARD." @@ -110167,55 +111188,67 @@ msgstr "" #: lang/json/dream_from_json.py msgid "You dream of warm, alien winds." -msgstr "" +msgstr "Soñás con vientos tibios alienígenas." #: lang/json/dream_from_json.py msgid "You dream of landscapes lit by the light of alien moons." -msgstr "" +msgstr "Soñás con paisajes encendidos por la luz de lunas alienígenas." #: lang/json/dream_from_json.py msgid "" "You stand at the edge of a fissure into strange earth. Mustard brown gasses" " caress and lift your fronds" msgstr "" +"Te parás en el borde de una fisura en una tierra desconocida. Pastos de " +"amarillo oscuro acarician y levantan tus hojas." #: lang/json/dream_from_json.py msgid "" "You dream of being vivsected by humans. One asks if the other thinks you " "can feel pain." msgstr "" +"Soñás con humanos practicándote una vivisección. Uno pregunta a otro si cree" +" que podrás sentir dolor." #: lang/json/dream_from_json.py msgid "" "Trapped in a cage, you mimic the sounds of your guard's spawn. He threatens" " you and enters the cage. He screams, you recall." msgstr "" +"Atrapado en una jaula, imitás el sonido de la cría de tu guardia. Te amenaza" +" y entra en la jaula. Recordás que él grita." #: lang/json/dream_from_json.py msgid "" "It's your birthday. But everyone has given you these hideous metal and " "plastic objects." msgstr "" +"Es tu cumpleaños. Pero todos te dieron estos espantosos objetos metálicos y " +"plásticos." #: lang/json/dream_from_json.py msgid "" "The stars await you, your chariot of fire is ready. The holds are full of " "slaves." msgstr "" +"La estrella te espera, tu carroza de fuego está preparada. Las bodegas están" +" llenas de esclavos." #: lang/json/dream_from_json.py msgid "You have transitioned from a dying race to a glorious future." -msgstr "" +msgstr "Has transitado de una raza agonizante a un futuro glorioso." #: lang/json/dream_from_json.py msgid "" "You have a strange dream about thundering ponderously through ancient, " "brittle tundras that crackle under your thick round feet." msgstr "" +"Tenés un extraño sueño donde atravesás lentamente tundras antiguas y " +"frágiles que se rajan bajo tus gruesos pies redondos." #: lang/json/dream_from_json.py msgid "Your dreams give you a strange, langourous, heavy feeling." -msgstr "" +msgstr "Tus sueños te hacen sentir una extraña sensación pesada y lánguida." #: lang/json/dream_from_json.py msgid "" @@ -110225,6 +111258,10 @@ msgid "" " by snow and bitter pelting winds, you feel confident and toasty-warm " "beneath your shaggy coat." msgstr "" +"Soñás con mover tu pesada cabeza para sacarte la nieve y el hielo de tus " +"grandes ojos límpidos y marrones. El peso está raro, como si tuvieras algo… " +"extra en alguno de los lados de tu boca, y aunque estás rodeado de nieve y " +"vientos crudos, te sentís confiado y calentito bajo tu abrigo peludo." #: lang/json/dream_from_json.py msgid "" @@ -110233,6 +111270,10 @@ msgid "" "you see elephantine faces looking back from all angles and you know they " "mirror your own. You just… know." msgstr "" +"Soñás con una corriente de piel peluda marrón arrastrándose por un océano de" +" un severo hielo blanco. Juntos, son fuertes. Cuando mirás alrededor, ves " +"rostros elefantinos en todos los ángulos y sabés que son un espejo del tuyo." +" Solamente… lo sabés." #: lang/json/dream_from_json.py msgid "" @@ -110244,6 +111285,12 @@ msgid "" "red into the icy white and causing it to steam Just like that, your calm is" " restored." msgstr "" +"Soñás con tu paciente languidez usual siendo interrumpida por un destello de" +" dientes blancos contra un hocico carmín. En un instante, una furia " +"estruendosa te domina y barritás tu ira… justo antes de tu barrito, bajás " +"tus pesadas lanzas de marfil de cada lado de tu hocico, hacia tu atancante. " +"Quedan tirados, huesos rotos, sangrando su rojo en el hielo blanco y creando" +" vapor. Y así, vuelve tu calma." #: lang/json/dream_from_json.py msgid "" @@ -110254,6 +111301,12 @@ msgid "" "fear and dysphoria, for your body feels so weak and fragile and incorrect " "compared to the powerful thing you know you are." msgstr "" +"Soñás con tu avanzar lento, paciente y laborioso por el mundo para ir de un " +"objetivo a otro, sin apuro, sin preocupaciones, porque sos tan grande y " +"resistente para matar a cualquiera o cualquier cosa que intente atacarte. Y " +"si lo hacen… será el último error de su vida. Al despertar sentís una breve " +"sacudida de miedo y disforia, tu cuerpo se siente débil y frágil e " +"incorrecto comparado con la poderosa cosa que sabés que sos." #: lang/json/dream_from_json.py msgid "" @@ -110264,6 +111317,12 @@ msgid "" "superior. You are huge and powerful and all that work against you shall " "fall. You… you have all the time in the world, now." msgstr "" +"Tus pensamientos dentro del sueño pueden ser lentos, y podés tardar un " +"tiempo en llegar a una conclusión, pero ¿qué apuro hay? ¿Cuál es la prisa? " +"Sos una cosa enorme y antigua con un pedigrí que se hunde en el pasado, " +"antes incluso que la vida sapiente tuviera el descaro de levantar un palo " +"filoso y creerse superior. Sos enorme y poderoso y todo ese trabajo en tu " +"contra fracasará. Tenés… tenés todo el tiempo del mundo, ahora." #: lang/json/dream_from_json.py msgid "" @@ -110271,70 +111330,86 @@ msgid "" " through this desolate world in search of the hidden places. Perhaps… " "perhaps you should start your family." msgstr "" +"La vida es solitaria sin una familia de Colmilludos a tu lado, rugiendo como" +" uno solo a través de este desolado mundo, buscando lugares ocultos. Tal " +"vez… tal vez deberías empezar tu familia." #: lang/json/dream_from_json.py msgid "You have a strange dream about the shadows." -msgstr "" +msgstr "Tenés un extraño sueño con sombras." #: lang/json/dream_from_json.py msgid "Your dreams give you a peculiar feeling of sinking into the dark." msgstr "" +"Tus sueños te hacen sentir una peculiar sensación de hundirte en la " +"oscuridad." #: lang/json/dream_from_json.py msgid "You have a vivid dream of talking a midnight stroll." -msgstr "" +msgstr "Tenés un sueño vívido de estar haciendo un paseo de medianoche." #: lang/json/dream_from_json.py msgid "You dream of drinking copious amounts of warm water." -msgstr "" +msgstr "Soñás con estar tomando copiosas cantidades de agua tibia." #: lang/json/dream_from_json.py msgid "" "You have a dream of being chased by dogs as something warm drips from your " "mouth." msgstr "" +"Soñás con ser perseguido por perros mientras algo tibio cae de tu boca." #: lang/json/dream_from_json.py msgid "Snippets of stalking something in the star-lit night shakes you awake." msgstr "" +"Pedazos de estar acechando algo en la noche iluminada por las estrellas, te " +"hace temblar y despertarte." #: lang/json/dream_from_json.py msgid "You dream of sinking your fangs into more and more enemies." -msgstr "" +msgstr "Soñás con hundir tus colmillos en más y más enemigos." #: lang/json/dream_from_json.py msgid "" "You have a lucid dream where streams of blood are slowly pooling around your" " feet." msgstr "" +"Tenés un sueño vívido donde arroyos de sangre van lentamente armando charcos" +" alrededor de tus pies." #: lang/json/dream_from_json.py msgid "You have a strange dream about the mountain forests." -msgstr "" +msgstr "Tenés un extraño sueño acerca de los bosques de las montañas." #: lang/json/dream_from_json.py msgid "Your dreams give you a peculiar feeling of sinking into the treelines." msgstr "" +"Tus sueños te dan la peculiar sensación de hundirte entre los árboles." #: lang/json/dream_from_json.py msgid "You have a vivid dream of strolling through the woods." -msgstr "" +msgstr "Tenés un sueño vívido de pasear por el bosque." #: lang/json/dream_from_json.py msgid "You have a dream of chasing something as a raw hunger sears your mind." msgstr "" +"Tenés un sueño de estar persiguiendo algo mientras el hambre hace arder tu " +"mente." #: lang/json/dream_from_json.py msgid "Recollections of stalking a human shakes you awake." msgstr "" +"Recuerdos de estar persiguiendo un humano te hacen temblar y despertarte." #: lang/json/dream_from_json.py msgid "You dream of tearing into more and more enemies." -msgstr "" +msgstr "Soñás en destrozar más y más enemigos." #: lang/json/dream_from_json.py msgid "You have a lucid dream where nature carefully welcomes your body." msgstr "" +"Tenés un sueño vívido donde la naturaleza le da la bienvenida cuidadosamente" +" a tu cuerpo." #: lang/json/effects_from_json.py msgid "Hit By Player" @@ -110775,25 +111850,25 @@ msgstr "¡Te caés al suelo!" #: lang/json/effects_from_json.py msgid "Assisted" -msgstr "" +msgstr "Asistido" #. ~ Description of effect 'Assisted'. #: lang/json/effects_from_json.py msgid "You're receiving assistance to practice a surgery." -msgstr "" +msgstr "Estás recibiendo asistencia para hacer una cirugía." #: lang/json/effects_from_json.py msgid "Masked scent" -msgstr "" +msgstr "Olor oculto" #. ~ Description of effect 'Masked scent'. #: lang/json/effects_from_json.py msgid "Your scent is masked by another one." -msgstr "" +msgstr "Tu olor está tapado por otro olor" #: lang/json/effects_from_json.py msgid "Got a check-up" -msgstr "" +msgstr "Te hicieron un chequeo" #. ~ Description of effect 'Got a check-up'. #: lang/json/effects_from_json.py @@ -110801,15 +111876,16 @@ msgid "" "Your received a complete check-up and are now aware of the state of your " "health." msgstr "" +"Recibiste un examen completo y ahora estás consciente de tu estado de salud." #: lang/json/effects_from_json.py msgid "Heated" -msgstr "" +msgstr "Calentado" #. ~ Description of effect 'Heated'. #: lang/json/effects_from_json.py msgid "At least one of your bionics is producing heat and warming you." -msgstr "" +msgstr "Por lo menos uno de tus biónicos está produciendo calor y te abriga." #: lang/json/effects_from_json.py msgid "Winded" @@ -110876,19 +111952,19 @@ msgstr "¡El grito te deja aturdido!" #: lang/json/effects_from_json.py msgid "Riding" -msgstr "" +msgstr "Montando" #. ~ Description of effect 'Riding'. #: lang/json/effects_from_json.py msgid "You are riding an animal." -msgstr "" +msgstr "Estás montando un animal." #. ~ Apply message for effect(s) 'Riding'. #: lang/json/effects_from_json.py msgid "You mount your steed." -msgstr "" +msgstr "Montás tu corcel." -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "En LLamas" @@ -111020,7 +112096,7 @@ msgstr "¡Podés escuchar otra vez!" #: lang/json/effects_from_json.py msgid "A bionic LED is glowing softly beneath your skin." -msgstr "" +msgstr "El LED de un biónico está brillando suavemente bajo tu piel." #: lang/json/effects_from_json.py src/bionics.cpp msgid "Stung" @@ -111122,6 +112198,8 @@ msgid "" "Your sleep debt has been steadily increasing for a while. You should get " "some rest." msgstr "" +"La falta de sueño se te ha ido incrementando por un rato ya. Deberías " +"descansar." #. ~ Apply message for effect(s) 'Sleep Deprived'. #: lang/json/effects_from_json.py @@ -111141,7 +112219,7 @@ msgstr "" #: lang/json/effects_from_json.py msgid "Melatonin Supplements" -msgstr "" +msgstr "Suplementos de Melatonina" #. ~ Description of effect 'Melatonin Supplements'. #: lang/json/effects_from_json.py @@ -111149,6 +112227,8 @@ msgid "" "You took some melatonin supplements. These will help with sleep " "deprivation." msgstr "" +"Te tomás unos suplementos de melatonina. Esto te va a ayudar con los " +"síntomas de la privación de sueño." #: lang/json/effects_from_json.py msgid "Stuck in beartrap" @@ -111270,12 +112350,12 @@ msgstr "¡Estás recubierto por una viscosidad brillante!" #: lang/json/effects_from_json.py msgid "Invisible" -msgstr "" +msgstr "Invisible" #. ~ Description of effect 'Invisible'. #: lang/json/effects_from_json.py msgid "You are invisible." -msgstr "" +msgstr "Sos invisible." #: lang/json/effects_from_json.py msgid "Took Xanax" @@ -111325,17 +112405,17 @@ msgstr "" #: lang/json/effects_from_json.py msgid "Poor sight" -msgstr "" +msgstr "Mala vista" #. ~ Description of effect 'Poor sight'. #: lang/json/effects_from_json.py msgid "You can't see very far from this spot." -msgstr "" +msgstr "No podés ver muy lejos desde este punto." #. ~ Apply message for effect(s) 'Poor sight'. #: lang/json/effects_from_json.py msgid "Your sight distance is impaired." -msgstr "" +msgstr "La distancia de tu vista está disminuida." #: lang/json/effects_from_json.py msgid "Webbed" @@ -111437,14 +112517,14 @@ msgstr "Contrajiste una infección." #: lang/json/effects_from_json.py msgctxt "memorial_male" msgid "Recovered from an infection… this time." -msgstr "" +msgstr "Recuperado de la infección… por esta vez." #. ~ Female memorial remove log for effect(s) 'Infected, Badly Infected, Pus #. Filled'. #: lang/json/effects_from_json.py msgctxt "memorial_female" msgid "Recovered from an infection… this time." -msgstr "" +msgstr "Recuperada de la infección… por esta vez." #: lang/json/effects_from_json.py msgid "Recovering From Infection" @@ -111521,12 +112601,12 @@ msgstr "Curada de la infección fúngica." #: lang/json/effects_from_json.py msgid "Touched mind" -msgstr "" +msgstr "Mente tocada" #. ~ Description of effect 'Touched mind'. #: lang/json/effects_from_json.py msgid "You are disoriented as strange visions flash through your mind." -msgstr "" +msgstr "Estás desorientado por las extrañas visiones que pasan por tu mente." #. ~ Description of effect 'Touched mind'. #: lang/json/effects_from_json.py @@ -111534,36 +112614,38 @@ msgid "" "You are overwhelmed by the disturbing imagery and concepts you're flooded " "with." msgstr "" +"Estás sobrecargado por las perturbadoras imágenes y conceptos que te " +"invaden." #: lang/json/effects_from_json.py msgid "Tainted mind" -msgstr "" +msgstr "Mente contaminada" #. ~ Description of effect 'Tainted mind'. #: lang/json/effects_from_json.py msgid "You can't comprehend the things around you…" -msgstr "" +msgstr "No podés comprender las cosas que te rodean…" #: lang/json/effects_from_json.py msgid "Badly tainted mind" -msgstr "" +msgstr "Mente muy contaminada" #. ~ Description of effect 'Badly tainted mind'. #: lang/json/effects_from_json.py msgid "You don't know what is and isn't real anymore…" -msgstr "" +msgstr "Ya no sabés lo que es real y lo que no…" #. ~ Miss message for effect(s) 'Touched mind, Touched mind, Tainted mind, #. Badly tainted mind'. #: lang/json/effects_from_json.py msgid "Your sense of reality warps!" -msgstr "" +msgstr "¡Tu sentido de la realidad se deforma!" #. ~ Speed name of effect(s) 'Touched mind, Touched mind, Tainted mind, Badly #. tainted mind'. #: lang/json/effects_from_json.py msgid "Tainted" -msgstr "" +msgstr "Contaminado" #: lang/json/effects_from_json.py msgid "Hallucinating" @@ -111599,22 +112681,22 @@ msgstr "Temblás." #: lang/json/effects_from_json.py msgid "Seizure" -msgstr "" +msgstr "Convulsión" #. ~ Description of effect 'Seizure'. #: lang/json/effects_from_json.py msgid "Your muscles have seized up, and you can't control them!" -msgstr "" +msgstr "¡Tus músculos convulsionan y no los podés controlar!" #. ~ Remove message for effect(s) 'Seizure'. #: lang/json/effects_from_json.py msgid "You regain control of your muscles!" -msgstr "" +msgstr "¡Recuperás el control de tus músculos!" #. ~ Miss message for effect(s) 'Seizure'. #: lang/json/effects_from_json.py msgid "Your muscles won't cooperate!" -msgstr "" +msgstr "¡Tus músculos no estarían cooperando!" #: lang/json/effects_from_json.py msgid "Bleeding" @@ -111726,12 +112808,12 @@ msgstr "¡Tu %s te está transpirando mucho!" #: lang/json/effects_from_json.py msgid "Slowdown" -msgstr "" +msgstr "Ralentización" #. ~ Description of effect 'Slowdown'. #: lang/json/effects_from_json.py msgid "The heat slows you down." -msgstr "" +msgstr "El calor te hace ir más despacio." #: lang/json/effects_from_json.py msgid "Hampered" @@ -111740,21 +112822,21 @@ msgstr "Obstaculizado" #. ~ Description of effect 'Hampered'. #: lang/json/effects_from_json.py msgid "You struggle to move in this heat." -msgstr "" +msgstr "Te cuesta moverte con estos calores." #: lang/json/effects_from_json.py msgid "Crushed" -msgstr "" +msgstr "Aplastado" #. ~ Description of effect 'Crushed'. #: lang/json/effects_from_json.py msgid "The heat is crushing you." -msgstr "" +msgstr "Te sentís aplastado por el calor." #. ~ Speed name of effect(s) 'Slowdown, Hampered, Crushed'. #: lang/json/effects_from_json.py msgid "Heat slowdown" -msgstr "" +msgstr "Ralentización por calor" #: lang/json/effects_from_json.py msgid "Frostnip" @@ -111932,21 +113014,21 @@ msgstr "Ya se te pasó la gripe." #: lang/json/effects_from_json.py msgid "Vaccinated" -msgstr "" +msgstr "Vacunado" #. ~ Description of effect 'Vaccinated'. #: lang/json/effects_from_json.py msgid "You have been vaccinated for the flu recently." -msgstr "" +msgstr "Has sido vacunado contra la gripe recientemente." #: lang/json/effects_from_json.py msgid "Took antiasthmatic drugs" -msgstr "" +msgstr "Tomaste drogas antiasmáticas" #. ~ Description of effect 'Took antiasthmatic drugs'. #: lang/json/effects_from_json.py msgid "You have taken an antiasthmatic drug recently." -msgstr "" +msgstr "Te tomaste una droga contra el asma recientemente." #: lang/json/effects_from_json.py msgid "RX12 Healing Comedown" @@ -112175,7 +113257,7 @@ msgstr "" #: lang/json/effects_from_json.py msgid "Dead Drunk" -msgstr "" +msgstr "Borrachazo" #. ~ Description of effect 'Dead Drunk'. #: lang/json/effects_from_json.py @@ -112183,6 +113265,8 @@ msgid "" "You embalmed yourself alive with so much alcohol, that even zombies will " "leave your dead body alone." msgstr "" +"Te metiste tanto alcohol adentro que ni siquiera los zombis se atreverían a " +"tocar tu cadáver." #. ~ Miss message for effect(s) 'Tipsy, Drunk, Trashed, Wasted, Dead Drunk'. #. ~ Miss message for effect(s) 'Depressants'. @@ -112223,7 +113307,7 @@ msgstr "" #. Asthma, Heavy Asthma'. #: lang/json/effects_from_json.py msgid "You can't breathe… asthma attack!" -msgstr "" +msgstr "No podés respirar… ¡un ataque de asma!" #. ~ Miss message for effect(s) 'Asthma, Asthma, Asthma, Asthma, Heavy Asthma, #. Heavy Asthma'. @@ -112290,15 +113374,17 @@ msgid "" "You have been grabbed by an attack.\n" "You are being held in place, and dodging and blocking are very difficult." msgstr "" +"Fuiste agarrado en la pelea.\n" +"Estás retenido en el lugar, esquivar y bloquear ataques es muy difícil." #: lang/json/effects_from_json.py msgid "Grabbing" -msgstr "" +msgstr "Agarrando" #. ~ Description of effect 'Grabbing'. #: lang/json/effects_from_json.py msgid "Grabbing another creature and holding them in place." -msgstr "" +msgstr "Agarrando a otra criatura y manteniéndola en su lugar." #: lang/json/effects_from_json.py msgid "Lacking Sleep" @@ -112333,12 +113419,12 @@ msgstr "Te despertás." #: lang/json/effects_from_json.py msgid "Under operation" -msgstr "" +msgstr "En operación" #. ~ Description of effect 'Under operation'. #: lang/json/effects_from_json.py msgid "You are being operated on. Try to stay still." -msgstr "" +msgstr "Estás siendo operado. Quedate quieto." #: lang/json/effects_from_json.py msgid "Playing an instrument" @@ -112600,16 +113686,16 @@ msgstr "Tu metabolismo se vuelve más estable." #: lang/json/effects_from_json.py msgid "Concerning symptoms" -msgstr "" +msgstr "Síntomas preocupantes" #. ~ Description of effect 'Concerning symptoms'. #: lang/json/effects_from_json.py msgid "Your muscles keep twitching strangely." -msgstr "" +msgstr "Tus músculos siguen sacudiéndose de manera extraña." #: lang/json/effects_from_json.py msgid "Unnerving symptoms" -msgstr "" +msgstr "Síntomas inquietantes" #. ~ Description of effect 'Unnerving symptoms'. #: lang/json/effects_from_json.py @@ -112617,28 +113703,30 @@ msgid "" "Your nervous system is malfunctioning, almost like it's being torn apart " "from the inside." msgstr "" +"Tu sistema nervioso está funcionando mal, casi como si te lo estuvieran " +"arrancando." #: lang/json/effects_from_json.py msgid "Gross food" -msgstr "" +msgstr "Comida desagradable" #. ~ Description of effect 'Gross food'. #: lang/json/effects_from_json.py msgid "The food you eat is disgusting." -msgstr "" +msgstr "Lo que te comiste fue desagradable." #: lang/json/effects_from_json.py msgid "Demoralizing food" -msgstr "" +msgstr "Comida desmoralizante" #. ~ Description of effect 'Demoralizing food'. #: lang/json/effects_from_json.py msgid "Eating nothing but disgusting rations is starting to get you down." -msgstr "" +msgstr "Comer solamente raciones desagradables está empezando a deprimirte." #: lang/json/effects_from_json.py msgid "Depressing food" -msgstr "" +msgstr "Comida deprimente" #. ~ Description of effect 'Depressing food'. #: lang/json/effects_from_json.py @@ -112646,6 +113734,8 @@ msgid "" "Sure, you survived, but what kind of survival is this, eating these " "disgusting rations day in and day out?" msgstr "" +"Sí, sobreviviste, pero ¿qué clase de supervivencia es esta, comiendo estas " +"raciones desagradables día por medio?" #: lang/json/effects_from_json.py msgid "Lit up" @@ -112705,12 +113795,12 @@ msgstr "Esta criatura ha sido ordeñada completa o parcialmente." #: lang/json/effects_from_json.py msgid "Sheared" -msgstr "" +msgstr "Esquilada" #. ~ Description of effect 'Sheared'. #: lang/json/effects_from_json.py msgid "The creature has been fully sheared." -msgstr "" +msgstr "La criatura ha sido completamente esquilada." #: lang/json/effects_from_json.py msgid "Painkillers" @@ -112895,7 +113985,7 @@ msgstr "Supercarga" #. ~ Description of effect 'Supercharged'. #: lang/json/effects_from_json.py msgid "You've been struck by lightning, and feel… different." -msgstr "" +msgstr "Has sido golpeado por un rayo, y te sentís… diferente." #: lang/json/effects_from_json.py msgid "Grown of Fusion" @@ -112910,16 +114000,16 @@ msgstr "" #: lang/json/effects_from_json.py msgid "Stinking air" -msgstr "" +msgstr "Aire apestoso" #. ~ Description of effect 'Stinking air'. #: lang/json/effects_from_json.py msgid "The air in here smells like vinegar and mold." -msgstr "" +msgstr "Acá el aire huele a vinagre y moho." #: lang/json/effects_from_json.py msgid "Disorienting air" -msgstr "" +msgstr "Aire desorientador" #. ~ Description of effect 'Disorienting air'. #: lang/json/effects_from_json.py @@ -112927,10 +114017,11 @@ msgid "" "The air in here smells like vinegar and mold. It makes you feel soft-headed" " and confused." msgstr "" +"Acá el aire huele a vinagre y moho. Te hace sentir mareado y confundido." #: lang/json/effects_from_json.py msgid "Smothering air" -msgstr "" +msgstr "Aire asfixiante" #. ~ Description of effect 'Smothering air'. #: lang/json/effects_from_json.py @@ -112938,23 +114029,25 @@ msgid "" "The air in here smells like vinegar and mold. It is closing in and " "smothering you, making it impossible to think clearly." msgstr "" +"Acá el aire huele a vinagre y moho. Pareciera cerrarse y empezar a " +"asfixiarte, haciéndote imposible pensar con claridad." #. ~ Apply message for effect(s) 'Stinking air, Disorienting air, Disorienting #. air, Smothering air, Smothering air'. #: lang/json/effects_from_json.py msgid "" "The air in here smells like vinegar and mold, and hurts your lungs a bit." -msgstr "" +msgstr "Acá el aire huele a vinagre y moho y te duelen un poco los pulmones." #. ~ Miss message for effect(s) 'Stinking air, Disorienting air, Disorienting #. air, Smothering air, Smothering air'. #: lang/json/effects_from_json.py msgid "You feel groggy in this sweltering, foul air." -msgstr "" +msgstr "Te sentís atontado en este aire sofocante y nauseabundo." #: lang/json/effects_from_json.py msgid "Covered in fetid goop" -msgstr "" +msgstr "Cubierto por un pegote fétido" #. ~ Description of effect 'Covered in fetid goop'. #: lang/json/effects_from_json.py @@ -112962,11 +114055,13 @@ msgid "" "The feeling of the goop slowly sliding on your skin revulses you and the " "smell makes you gag." msgstr "" +"La sensación del pegote chorreando lentamente por tu piel te repugna y el " +"olor te da arcadas." #. ~ Apply message for effect(s) 'Covered in fetid goop'. #: lang/json/effects_from_json.py msgid "You're disgusted by the goop." -msgstr "" +msgstr "Estás asqueado por el pegote." #: lang/json/effects_from_json.py src/character.cpp msgid "Full" @@ -112976,7 +114071,7 @@ msgstr "Lleno" #. ~ Apply message for effect(s) 'Full'. #: lang/json/effects_from_json.py msgid "You feel quite full, and a bit sluggish." -msgstr "" +msgstr "Te sentís bastante lleno y un poco perezoso." #: lang/json/effects_from_json.py src/character.cpp msgid "Engorged" @@ -112986,7 +114081,7 @@ msgstr "Panza llena" #. ~ Apply message for effect(s) 'Engorged'. #: lang/json/effects_from_json.py msgid "Your stomach is full to bursting. This was a mistake." -msgstr "" +msgstr "Tu estómago casi no da más de lleno. Esto fue un error." #: lang/json/effects_from_json.py msgid "Magnesium Supplements" @@ -113018,24 +114113,25 @@ msgstr "" #: lang/json/effects_from_json.py msgid "This beggar in the refugee center has had something to eat recently." msgstr "" +"Este mendigo en el centro de refugiados tuvo algo para comer recientemente." #: lang/json/effects_from_json.py msgid "Insulted" -msgstr "" +msgstr "Insultado" #. ~ Description of effect 'Insulted'. #: lang/json/effects_from_json.py msgid "Oh, you went there." -msgstr "" +msgstr "Oh, con que esas tenemos." #: lang/json/effects_from_json.py msgid "Panicking" -msgstr "" +msgstr "En pánico" #. ~ Description of effect 'Panicking'. #: lang/json/effects_from_json.py msgid "You just can't stop shaking and are overwhelmed by fear." -msgstr "" +msgstr "No podés dejar de temblar y estás agobiado por el miedo." #. ~ Apply message for effect(s) 'Panicking'. #: lang/json/effects_from_json.py @@ -113043,114 +114139,116 @@ msgid "" "An all consuming dread overwhelms your mind and you begin to shake " "uncontrollably!" msgstr "" +"Te consume un pavor que agobia tu mente ¡y comenzás a temblar " +"descontroladamente!" #. ~ Remove message for effect(s) 'Panicking'. #: lang/json/effects_from_json.py msgid "Your heartrate slows back to normal!" -msgstr "" +msgstr "¡Tu ritmo cardíaco se desacelera y vuelve a ser normal!" #. ~ Miss message for effect(s) 'Panicking'. #: lang/json/effects_from_json.py msgid "You shake uncontrollably" -msgstr "" +msgstr "Temblás descontroladamente" #. ~ Description of effect 'Mana Fatigue'. #: lang/json/effects_from_json.py msgid "You are exhausted from channeling a lot of mana." -msgstr "" +msgstr "Estás exhausto por haber canalizado mucho maná." #. ~ Apply message for effect(s) 'Mana Fatigue'. #: lang/json/effects_from_json.py msgid "Channeling so much mana is making you tired" -msgstr "" +msgstr "Canalizar tanto maná te está cansando" #. ~ Remove message for effect(s) 'Mana Fatigue'. #: lang/json/effects_from_json.py msgid "The burden of mana fatigue has faded" -msgstr "" +msgstr "El agobio de la fatiga de maná ya terminó" #. ~ Description of effect 'Windrunning'. #: lang/json/effects_from_json.py msgid "You are bolstered and pushed along by the power of the wind." -msgstr "" +msgstr "Sos sostenido y empujado por el poder del viento." #. ~ Apply message for effect(s) 'Windrunning'. #: lang/json/effects_from_json.py msgid "You are bolstered and pushed along by the power of the wind" -msgstr "" +msgstr "Sos sostenido y empujado por el poder del viento" #. ~ Remove message for effect(s) 'Windrunning'. #: lang/json/effects_from_json.py msgid "The wind at your back dies down." -msgstr "" +msgstr "El viento de tu espalda frena." #. ~ Description of effect 'Dark Sight'. #: lang/json/effects_from_json.py msgid "You can see in the dark." -msgstr "" +msgstr "Podés ver en la oscuridad." #. ~ Apply message for effect(s) 'Dark Sight'. #: lang/json/effects_from_json.py msgid "Your sight adjusts to the darkness." -msgstr "" +msgstr "Tu vista se ajusta a la oscuridad." #. ~ Remove message for effect(s) 'Dark Sight'. #: lang/json/effects_from_json.py msgid "The darkness loses its shape." -msgstr "" +msgstr "La oscuridad pierde su forma." #: lang/json/effects_from_json.py msgid "Ethereal Hold" -msgstr "" +msgstr "Abrazo Etéreo" #. ~ Description of effect 'Ethereal Hold'. #: lang/json/effects_from_json.py msgid "Ghostly arms are trying to hold you in place!" -msgstr "" +msgstr "¡Unos brazos fantasmales intentan sostenerte en el lugar!" #. ~ Apply message for effect(s) 'Ethereal Hold'. #: lang/json/effects_from_json.py msgid "Ethereal arms shoot out of the ground and grab onto you!" -msgstr "" +msgstr "¡Unos brazos etéreos salen del suelo y te agarran!" #. ~ Remove message for effect(s) 'Ethereal Hold'. #: lang/json/effects_from_json.py msgid "The ghostly arms fade away." -msgstr "" +msgstr "Los brazos fantasmales desaparecen." #. ~ Description of effect 'Invisibility'. #: lang/json/effects_from_json.py msgid "Nothing can see you." -msgstr "" +msgstr "Nada te puede ver." #. ~ Apply message for effect(s) 'Invisibility'. #: lang/json/effects_from_json.py msgid "You fade away." -msgstr "" +msgstr "Desaparecés." #. ~ Remove message for effect(s) 'Invisibility'. #: lang/json/effects_from_json.py msgid "You can see your hands again." -msgstr "" +msgstr "Podés volver a verte las manos." #: lang/json/effects_from_json.py msgid "Blessed" -msgstr "" +msgstr "Bendecido" #. ~ Description of effect 'Blessed'. #: lang/json/effects_from_json.py msgid "You are filled with energy that improves everything you do." -msgstr "" +msgstr "Estás lleno de energía que mejora todo lo que hacés." #. ~ Apply message for effect(s) 'Blessed'. #: lang/json/effects_from_json.py msgid "You are filled with energy that improves everything you do!" -msgstr "" +msgstr "¡Estás lleno de energía que mejora todo lo que hacés!" #. ~ Remove message for effect(s) 'Blessed'. #: lang/json/effects_from_json.py msgid "Your energy fades." -msgstr "" +msgstr "Tu energía desaparece." #. ~ Description of effect 'Grotesque Enhancement'. #. ~ Apply message for effect(s) 'Grotesque Enhancement'. @@ -113159,181 +114257,184 @@ msgid "" "Your body ripples with writhing alien muscles, your limbs lengthen, and your" " eyes glow with a faint green." msgstr "" +"Tu cuerpo ondea con músculos alienígenas que se retuercen, tus miembros se " +"alargan y tus ojos brillan de un verde suave." #. ~ Remove message for effect(s) 'Grotesque Enhancement'. #: lang/json/effects_from_json.py msgid "Your body rapidly returns to normal." -msgstr "" +msgstr "Tu cuerpo vuelve rápidamente a su normalidad." #. ~ Description of effect 'Vegetative Grasp'. #. ~ Description of effect 'Root Impale'. #: lang/json/effects_from_json.py msgid "Roots and vines entangle your foes." -msgstr "" +msgstr "Raíces y lianas atrapan a tus enemigos." #. ~ Apply message for effect(s) 'Vegetative Grasp'. #: lang/json/effects_from_json.py msgid "Roots and vines entangle your foes to slow them!" -msgstr "" +msgstr "¡Raíces y lianas atrapan a tus enemigos y los ralentizan!" #. ~ Remove message for effect(s) 'Vegetative Grasp'. #: lang/json/effects_from_json.py msgid "The roots and vines wither up and die." -msgstr "" +msgstr "Las raíces y lianas se marchitan y mueren." #: lang/json/effects_from_json.py msgid "Root Impale" -msgstr "" +msgstr "Empalamiento de Raíz" #. ~ Apply message for effect(s) 'Root Impale'. #: lang/json/effects_from_json.py msgid "Roots rip out from the ground and impale your enemies!" -msgstr "" +msgstr "¡Salen raíces del suelo e empalan a tus enemigos!" #. ~ Remove message for effect(s) 'Root Impale'. #: lang/json/effects_from_json.py msgid "The roots wither up and die." -msgstr "" +msgstr "Las raíces se marchitan y mueren." #: lang/json/effects_from_json.py msgid "Acidic burn" -msgstr "" +msgstr "Quemadura ácida" #. ~ Description of effect 'Acidic burn'. #: lang/json/effects_from_json.py msgid "Burned with acid" -msgstr "" +msgstr "Quemado por ácido" #: lang/json/effects_from_json.py msgid "Hasted" -msgstr "" +msgstr "Apurado" #. ~ Description of effect 'Hasted'. #: lang/json/effects_from_json.py msgid "Your speed is boosted enormously." -msgstr "" +msgstr "Tu velocidad está muy incrementada." #. ~ Apply message for effect(s) 'Hasted'. #: lang/json/effects_from_json.py msgid "Your speed is boosted to superhuman levels!" -msgstr "" +msgstr "¡Tu velocidad es incrementada a niveles superhumanos!" #. ~ Remove message for effect(s) 'Hasted'. #: lang/json/effects_from_json.py msgid "You return to your normal speed." -msgstr "" +msgstr "Volvés a tener tu velocidad normal." #. ~ Description of effect 'Synaptic Stimulation'. #: lang/json/effects_from_json.py msgid "Your mental processing is increased." -msgstr "" +msgstr "Tu procesamiento mental está incrementado." #. ~ Apply message for effect(s) 'Synaptic Stimulation'. #: lang/json/effects_from_json.py msgid "Your mind accelerates." -msgstr "" +msgstr "Tu mente se acelera." #. ~ Remove message for effect(s) 'Synaptic Stimulation'. #: lang/json/effects_from_json.py msgid "Your mind returns to normal speed." -msgstr "" +msgstr "Tu mente vuelve a tener su velocidad normal." #. ~ Description of effect 'Ogre's Strength'. #: lang/json/effects_from_json.py msgid "You have the strength of an Ogre!" -msgstr "" +msgstr "¡Tenés la fuerza de un Ogro!" #. ~ Apply message for effect(s) 'Ogre's Strength'. #: lang/json/effects_from_json.py msgid "You feel strong!" -msgstr "" +msgstr "¡Te sentís fuerte!" #. ~ Remove message for effect(s) 'Ogre's Strength'. #: lang/json/effects_from_json.py msgid "Your strength deflates." -msgstr "" +msgstr "Tu fuerza se reduce." #. ~ Description of effect 'Eagle's Sight'. #: lang/json/effects_from_json.py msgid "You have the perception of an Eagle!" -msgstr "" +msgstr "¡Tenés la percepción de un Águila!" #. ~ Apply message for effect(s) 'Eagle's Sight'. #: lang/json/effects_from_json.py msgid "You notice small details!" -msgstr "" +msgstr "¡Podés notar los detalles pequeños!" #. ~ Remove message for effect(s) 'Eagle's Sight'. #: lang/json/effects_from_json.py msgid "Your vision returns to normal." -msgstr "" +msgstr "Tu visión vuelve a ser normal." #. ~ Description of effect 'Cat's Grace'. #: lang/json/effects_from_json.py msgid "You have the dexterity of a cat!" -msgstr "" +msgstr "¡Tenés la destreza de un gato!" #. ~ Apply message for effect(s) 'Cat's Grace'. #: lang/json/effects_from_json.py msgid "Your reflexes are heightened!" -msgstr "" +msgstr "¡Tus reflejos están intensificados!" #. ~ Remove message for effect(s) 'Cat's Grace'. #: lang/json/effects_from_json.py msgid "Your reflexes return to normal." -msgstr "" +msgstr "Tus reflejos vuelven a la normalidad." #. ~ Description of effect 'Fox's Cunning'. #: lang/json/effects_from_json.py msgid "You have the cunning of a Fox!" -msgstr "" +msgstr "¡Tenés la astucia de un Zorro!" #. ~ Apply message for effect(s) 'Fox's Cunning'. #: lang/json/effects_from_json.py msgid "Your intelligence is heightened!" -msgstr "" +msgstr "¡Tu inteligencia se agudiza!" #. ~ Remove message for effect(s) 'Fox's Cunning'. #: lang/json/effects_from_json.py msgid "Your intelligence returns to normal." -msgstr "" +msgstr "Tu inteligencia vuelve a la normalidad." #. ~ Apply message for effect(s) 'Debug Full Protection'. #: lang/json/effects_from_json.py msgid "Your skin tingle with the power of the Devs!" -msgstr "" +msgstr "¡Tu piel se estremece con el poder de los Desarrolladores!" #. ~ Remove message for effect(s) 'Debug Full Protection'. #: lang/json/effects_from_json.py msgid "Your skin stops tingling, your life is empty and meaningless again." msgstr "" +"Tu piel deja de estremecerse, tu vida es vacío y sin sentido otra vez." #: lang/json/effects_from_json.py msgid "Debug Feather Fall" -msgstr "" +msgstr "Debug Caída de Pluma" #. ~ Description of effect 'Debug Feather Fall'. #: lang/json/effects_from_json.py msgid "You are light as a feather and fall like one." -msgstr "" +msgstr "Sos liviano como una pluma y caerás igual de suave." #. ~ Apply message for effect(s) 'Debug Feather Fall'. #: lang/json/effects_from_json.py msgid "Your body feels light as a feather." -msgstr "" +msgstr "Tu cuerpo se siente liviano como una pluma." #. ~ Remove message for effect(s) 'Debug Feather Fall'. #: lang/json/effects_from_json.py msgid "The earth pulls you down hard." -msgstr "" +msgstr "La tierra te atrae fuertemente." #: lang/json/effects_from_json.py msgid "Scared" -msgstr "" +msgstr "Asustado" #: lang/json/effects_from_json.py msgid "Frightened" -msgstr "" +msgstr "Aterrado" #: lang/json/effects_from_json.py src/npc.cpp msgid "Terrified" @@ -113343,20 +114444,22 @@ msgstr "Aterrado" msgid "" "Your knees are shaking, your heart beats fast, and your stomach rebels." msgstr "" +"Te tiemblan las rodillas, tu corazón late rápidamente y tu estómago se " +"rebela." #. ~ Apply message for effect(s) 'Scared, Frightened, Terrified'. #: lang/json/effects_from_json.py msgid "You are afraid!" -msgstr "" +msgstr "¡Estás asustado!" #. ~ Remove message for effect(s) 'Scared, Frightened, Terrified'. #: lang/json/effects_from_json.py msgid "Your fear dissipates." -msgstr "" +msgstr "Desaparece tu miedo." #: lang/json/effects_from_json.py msgid "Visceral Overexertion" -msgstr "" +msgstr "Esfuerzo Visceral" #. ~ Description of effect 'Visceral Overexertion'. #: lang/json/effects_from_json.py @@ -113364,6 +114467,8 @@ msgid "" "You feel sickened from overtaxing your body, having extended your influence " "over such a wide area." msgstr "" +"Te sentís enfermo por exigir demasiado a tu cuerpo, habiendo extendido tu " +"influencia sobre un área tan grande." #. ~ Description of effect 'Coagulant Weave'. #: lang/json/effects_from_json.py @@ -113371,106 +114476,48 @@ msgid "" "Immunity to bleeding and bites, increased stamina regeneration, increased " "hunger and thirst gain." msgstr "" +"Inmunidad contra sangrado y mordeduras, regeneración mejorada de " +"resistencia, hambre incrementada y aumento de sed." #. ~ Remove message for effect(s) 'Coagulant Weave'. #: lang/json/effects_from_json.py msgid "The tension running through your flesh fades." -msgstr "" +msgstr "Desaparece la tensión que corría por tu carne." #: lang/json/effects_from_json.py msgid "Biomantic Venom" -msgstr "" +msgstr "Veneno Biomántico" #. ~ Description of effect 'Biomantic Venom'. #: lang/json/effects_from_json.py msgid "You feel sluggish and weak, from magically-induced poisoning." -msgstr "" +msgstr "Te sentís débil y perezoso, por el veneno inducido mágicamente." #: lang/json/effects_from_json.py msgid "Gummed" -msgstr "" +msgstr "Engomado" #: lang/json/effects_from_json.py msgid "You have some gum on you." -msgstr "" +msgstr "Tenés algo de goma encima." #: lang/json/effects_from_json.py msgid "You are covered in gum!" -msgstr "" +msgstr "¡Estás cubierto de goma!" #: lang/json/effects_from_json.py msgid "You're trapped in gum!" -msgstr "" +msgstr "¡Estás atrapado en goma!" #. ~ Apply message for effect(s) 'Gummed'. #: lang/json/effects_from_json.py msgid "You're covered in gum!" -msgstr "" +msgstr "¡Estás recubierto de goma!" #. ~ Miss message for effect(s) 'Gummed'. #: lang/json/effects_from_json.py msgid "The gum webs constrict your movement." -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "" - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "" +msgstr "La red de goma restringe tus movimientos." #: lang/json/faction_from_json.py msgid "Your Followers" @@ -113487,7 +114534,7 @@ msgstr "" #: lang/json/faction_from_json.py msgid "AMF" -msgstr "" +msgstr "AMF" #. ~ Description for AMF #: lang/json/faction_from_json.py @@ -113496,10 +114543,12 @@ msgid "" " mutinied because of your abuse and incompetence. They will kill you if " "they can." msgstr "" +"Los sobrevivientes que antes te confiaban su bienestar, ahora se han " +"amotinado a causa de tus abusos e incompetencia. Te van a matar si pueden." #: lang/json/faction_from_json.py msgid "Hub 01" -msgstr "" +msgstr "Hub 01" #. ~ Description for Hub 01 #: lang/json/faction_from_json.py @@ -113508,10 +114557,13 @@ msgid "" "leave their lab, if at all, and rely on their robots and advanced technology" " to survive." msgstr "" +"El plantel superviviente del Hub 01, un laboratorio de investigación de " +"antes del Cataclismo. Muy raramente salen del laboratorio, si es que salen, " +"y dependen de sus robots y tecnología de avanzada para sobrevivir." #: lang/json/faction_from_json.py msgid "Hub 01 Ancillia" -msgstr "" +msgstr "Hub 01 Ancillia" #. ~ Description for Hub 01 Ancillia #: lang/json/faction_from_json.py @@ -113519,6 +114571,8 @@ msgid "" "A loose association of skilled wastelanders, traders, mercenaries and " "scouts. All working on behalf of Hub 01, for their own reasons." msgstr "" +"Es una asociación libre de piratas, comerciantes, mercenarios y " +"exploradores. Todos trabajando de parte de Hub 01, por sus propias razones." #: lang/json/faction_from_json.py msgid "The Old Guard" @@ -113548,7 +114602,7 @@ msgstr "" #: lang/json/faction_from_json.py msgid "The Beggars in the Lobby" -msgstr "" +msgstr "Los Mendigos en el Hall" #. ~ Description for The Beggars in the Lobby #: lang/json/faction_from_json.py @@ -113556,6 +114610,8 @@ msgid "" "A collection of mentally and physically disadvantaged survivors who beg for " "food in the Evac Center lobby." msgstr "" +"Es una colección de sobrevivientes desvalidos mental y físicamente, que " +"piden comida en el hall del Centro de Evacuados." #: lang/json/faction_from_json.py msgid "The Tacoma Commune" @@ -113572,7 +114628,7 @@ msgstr "" #: lang/json/faction_from_json.py msgid "Marloss Evangelists" -msgstr "" +msgstr "Evangelistas Marloss" #. ~ Description for Marloss Evangelists #: lang/json/faction_from_json.py @@ -113580,15 +114636,18 @@ msgid "" "Diverse bands, congregations and organizations with the common goal of " "preaching human survival through symbiosis with fungaloids." msgstr "" +"Diversas bandas, congregaciones y organizaciones con el objetivo común de " +"predicar la supervivencia humana a través de la simbiosis con los " +"fungaloides." #: lang/json/faction_from_json.py msgid "No Faction" -msgstr "" +msgstr "Sin Bando" #. ~ Description for No Faction #: lang/json/faction_from_json.py msgid "A lone wolf, not aligned with any faction." -msgstr "" +msgstr "Un lobo solitario, sin alineación con ningún bando." #: lang/json/faction_from_json.py msgid "The Wasteland Scavengers" @@ -113619,25 +114678,25 @@ msgstr "" #: lang/json/faction_from_json.py msgid "Mutants Bees" -msgstr "" +msgstr "Abejas Mutantes" #. ~ Description for Mutants Bees #: lang/json/faction_from_json.py msgid "Mutant bees who hate everyone." -msgstr "" +msgstr "Son abejas mutantes que odian a todos." #: lang/json/faction_from_json.py msgid "Isherwood family" -msgstr "" +msgstr "Familia Isherwood" #. ~ Description for Isherwood family #: lang/json/faction_from_json.py msgid "A small family surviving on their generational land." -msgstr "" +msgstr "Es una pequeña familia sobreviviendo en su tierra generacional." #: lang/json/faction_from_json.py msgid "New England Church Community" -msgstr "" +msgstr "Comunidad de la Iglesia de New England" #. ~ Description for New England Church Community #: lang/json/faction_from_json.py @@ -113645,10 +114704,12 @@ msgid "" "A small group of churchgoers that formed a community in the woods. They " "welcome anyone in their faction, but hate the unnatural." msgstr "" +"Es un pequeño grupo de feligreses que formaron una comunidad en los bosques." +" Aceptan la llegada de cualquier a su bando pero odian lo sobrenatural." #: lang/json/faction_from_json.py msgid "PrepNet Phyle" -msgstr "" +msgstr "PrepNet Phyle" #. ~ Description for PrepNet Phyle #: lang/json/faction_from_json.py @@ -113657,10 +114718,13 @@ msgid "" "global chaos, instead they were slightly more ready than others for the " "Cataclysm." msgstr "" +"Es un grupo de survivalistas biónicos que esperaban el colapso de la " +"economía y el caos global, pero por lo menos estuvieron un poco más " +"preparados que los otros para el Cataclismo." #: lang/json/faction_from_json.py msgid "Whately Family" -msgstr "" +msgstr "Familia Whately" #. ~ Description for Whately Family #: lang/json/faction_from_json.py @@ -113668,10 +114732,26 @@ msgid "" "The Whately's are an old New England family of eccentrics. Eccentrics being" " the kind words used about them." msgstr "" +"Los Whately son una vieja familia de excéntricos de New England. Excéntricos" +" es la palabra buena que se puede usar acerca de ellos." #: lang/json/faction_from_json.py -msgid "The Ancient Ones" +msgid "Swampers Religious Community and Hotels and Casinos" +msgstr "Comunidad de Pantaneros Religiosos y Hoteles y Casinos" + +#. ~ Description for Swampers Religious Community and Hotels and Casinos +#: lang/json/faction_from_json.py +msgid "" +"A prosperous but secretive group of churchgoers and entertainment moguls " +"with an affection for dinosaurs. They welcome all untainted humans." msgstr "" +"Es un grupo próspero pero reservado de feligreses y magnates del " +"entretenimiento con afección por los dinosaurios. Aceptan a todos los " +"humanos incontaminados." + +#: lang/json/faction_from_json.py +msgid "The Ancient Ones" +msgstr "Los Antiguos" #. ~ Description for The Ancient Ones #: lang/json/faction_from_json.py @@ -113679,10 +114759,12 @@ msgid "" "The spellcrafters of old. Hidden from the world until the cataclysm, they " "have their own agenda and care little for you or yours." msgstr "" +"Son los antiguos hechiceros. Ocultos del mundo hasta el Cataclismo, tienen " +"sus propios planes y les importan muy poco los tuyos." #: lang/json/faction_from_json.py msgid "The Grey Flame" -msgstr "" +msgstr "La Llama Gris" #. ~ Description for The Grey Flame #: lang/json/faction_from_json.py @@ -113690,6 +114772,9 @@ msgid "" "A collection of those cursed by the cataclysm. They have sworn to rid this " "world of its curse and will stop at nothing to accomplish their task." msgstr "" +"Es una colección de aquellos que han sido maldecidos por el Cataclismo. Han " +"jurado liberar al mundo de su maldición y no pararán ante nada para cumplir " +"con su tarea." #: lang/json/faction_from_json.py msgid "Captives" @@ -113719,52 +114804,58 @@ msgid "" " more. It's only a matter of time before they too become the prey of " "otherwordly creatures, or of all-too-human monsters." msgstr "" +"Remanentes desperdigados de la civilización, estos pocos afortunados " +"lograron permanecer encerrados durante las primeras etapas del Cataclismo. " +"Aunque por un tiempo estuvieron seguros, se están quedando sin suministros y" +" no tienen la capacidad de conseguir más. Es cuestión de tiempo que también " +"se conviertan en las presas de criaturas de otros mundos, o de otros " +"monstruos humanos." #: lang/json/fault_from_json.py msgid "Dusty" -msgstr "" +msgstr "Polvoriento" #. ~ description for fault '{'str': 'Dusty'}' #: lang/json/fault_from_json.py msgid "It's dusty. Has no effect - obsolete fault." -msgstr "" +msgstr "Está con polvo. No tiene efecto - falla obsoleta." #. ~ name of mending method for fault '{'str': 'Dusty'}' #: lang/json/fault_from_json.py msgid "Wipe clean" -msgstr "" +msgstr "Pasar un trapo" #. ~ success message for mending method 'Wipe clean' of fault '{'str': #. 'Dusty'}' #: lang/json/fault_from_json.py #, python-format msgid "You clean you %s." -msgstr "" +msgstr "Limpiás tu %s." #: lang/json/fault_from_json.py msgid "Already deployed" -msgstr "" +msgstr "Ya desplegado" #. ~ description for fault '{'str': 'Already deployed'}' #: lang/json/fault_from_json.py msgid "This bionic needs to be reset to its factory state." -msgstr "" +msgstr "Este biónico necesita ser reseteado a su estado de fábrica." #. ~ name of mending method for fault '{'str': 'Already deployed'}' #: lang/json/fault_from_json.py msgid "Reset to factory state" -msgstr "" +msgstr "Resetear a estado de fábrica" #. ~ success message for mending method 'Reset to factory state' of fault #. '{'str': 'Already deployed'}' #: lang/json/fault_from_json.py #, python-format msgid "You successfully reset the %s to its factory state" -msgstr "" +msgstr "Lográs resetear el %s a su estado de fábrica" #: lang/json/fault_from_json.py msgid "Blackpowder fouling" -msgstr "" +msgstr "Suciedad de pólvora" #. ~ description for fault '{'str': 'Blackpowder fouling'}' #: lang/json/fault_from_json.py @@ -113775,11 +114866,16 @@ msgid "" "impact on reliability at high levels, but black powder fouling accumulates " "quickly." msgstr "" +"Disparar cargas de pólvora de un arma la ensucia, lo que reduce la " +"fiabilidad y, si se deja sucia, se oxidará. Ensucia el arma mucho más rápido" +" que el uso de cartuchos modernos sin humo. Esta suciedad solo impacta en la" +" fiabilidad en grandes niveles, pero la suciedad de la pólvora se acumula " +"rápidamente." #. ~ name of mending method for fault '{'str': 'Blackpowder fouling'}' #: lang/json/fault_from_json.py msgid "Clean blackpowder fouling" -msgstr "" +msgstr "Limpiar suciedad de pólvora" #. ~ success message for mending method 'Clean blackpowder fouling' of fault #. '{'str': 'Blackpowder fouling'}' @@ -113788,12 +114884,12 @@ msgstr "" #: lang/json/fault_from_json.py #, python-format msgid "You clean your %s." -msgstr "" +msgstr "Limpiás tu %s." #. ~ name of mending method for fault '{'str': 'Blackpowder fouling'}' #: lang/json/fault_from_json.py msgid "Clean blackpowder fouling and lubricate" -msgstr "" +msgstr "Limpiar suciedad de pólvora y lubricar" #. ~ success message for mending method 'Clean blackpowder fouling and #. lubricate' of fault '{'str': 'Blackpowder fouling'}' @@ -113802,11 +114898,11 @@ msgstr "" #: lang/json/fault_from_json.py #, python-format msgid "You clean and lubricate your %s." -msgstr "" +msgstr "Limpiás y lubricás tu %s." #: lang/json/fault_from_json.py msgid "Spent casing in chamber" -msgstr "" +msgstr "Vaina servida en cámara" #. ~ description for fault '{'str': 'Spent casing in chamber'}' #: lang/json/fault_from_json.py @@ -113814,22 +114910,24 @@ msgid "" "This gun currently has an empty casing chambered. It will have to be " "removed before firing." msgstr "" +"Este arma tiene actualmente una vaina servida en la cámara. Tiene que ser " +"quitada antes de disparar." #. ~ name of mending method for fault '{'str': 'Spent casing in chamber'}' #: lang/json/fault_from_json.py msgid "Eject spent casing" -msgstr "" +msgstr "Expulsar vaina servida" #. ~ success message for mending method 'Eject spent casing' of fault '{'str': #. 'Spent casing in chamber'}' #: lang/json/fault_from_json.py #, python-format msgid "You eject the spent casing from the %s." -msgstr "" +msgstr "Expulsás la vaina servida del %s." #: lang/json/fault_from_json.py msgid "Unlubricated" -msgstr "" +msgstr "Sin lubricar" #. ~ description for fault '{'str': 'Unlubricated'}' #: lang/json/fault_from_json.py @@ -113838,22 +114936,25 @@ msgid "" " cleaned with a solvent without oiling afterwards. Either way, it's not " "lubricated and will not cycle properly, and can even be damaged." msgstr "" +"O esta arma es nueva y vino sin lubricación o fue limpiada recientemente con" +" un solvente sin aceitarla luego. De cualquier manera, no está lubricada y " +"no funcionará apropiadamente, e incluso puede dañarse." #. ~ name of mending method for fault '{'str': 'Unlubricated'}' #: lang/json/fault_from_json.py msgid "Lubricate" -msgstr "" +msgstr "Lubricar" #. ~ success message for mending method 'Lubricate' of fault '{'str': #. 'Unlubricated'}' #: lang/json/fault_from_json.py #, python-format msgid "You lubricate the %s." -msgstr "" +msgstr "Lubricás el %s." #: lang/json/fault_from_json.py msgid "Fouling" -msgstr "" +msgstr "Suciedad" #. ~ description for fault '{'str': 'Fouling'}' #: lang/json/fault_from_json.py @@ -113865,20 +114966,26 @@ msgid "" "significant problem until high levels of fouling are reached due to firing " "thousands of rounds without cleaning your firearm." msgstr "" +"La suciedad se produce al disparar cargas de pólvora de manera repetida, lo " +"que reduce la fiabilidad y eventualmente puede dañar el arma. La suciedad se" +" acumula lentamente (salvo que se use pólvora) debido al diseño de la " +"pólvora moderna sin humo, usada en la vasta mayoría de los cartuchos y no es" +" un problema significativo salvo a grandes niveles de suciedad que se " +"alcanzan al disparar miles de balas sin limpiar el arma." #. ~ name of mending method for fault '{'str': 'Fouling'}' #: lang/json/fault_from_json.py msgid "Clean gun" -msgstr "" +msgstr "Limpiar arma" #. ~ name of mending method for fault '{'str': 'Fouling'}' #: lang/json/fault_from_json.py msgid "Clean gun and lubricate" -msgstr "" +msgstr "Limpiar arma y lubricar" #: lang/json/fault_from_json.py msgid "Worn drive belt" -msgstr "" +msgstr "Correa de transmisión gastada" #. ~ description for fault '{'str': 'Worn drive belt'}' #: lang/json/fault_from_json.py @@ -113888,18 +114995,18 @@ msgstr "Se necesita para operar un alternador unido." #. ~ name of mending method for fault '{'str': 'Worn drive belt'}' #: lang/json/fault_from_json.py msgid "Replace worn drive belt" -msgstr "" +msgstr "Reemplazar correa de transmisión" #. ~ success message for mending method 'Replace worn drive belt' of fault #. '{'str': 'Worn drive belt'}' #: lang/json/fault_from_json.py #, python-format msgid "You replace the worn drive belt of the %s." -msgstr "" +msgstr "Reemplazás la correa de transmisión del %s." #: lang/json/fault_from_json.py msgid "Faulty glow plugs" -msgstr "" +msgstr "Bujías defectuosas" #. ~ description for fault '{'str': 'Faulty glow plugs'}' #: lang/json/fault_from_json.py @@ -113909,18 +115016,18 @@ msgstr "Ayuda a arrancar un motor con bajas temperaturas ambientales." #. ~ name of mending method for fault '{'str': 'Faulty glow plugs'}' #: lang/json/fault_from_json.py msgid "Replace faulty glow plugs" -msgstr "" +msgstr "Reemplazar las bujías defectuosas" #. ~ success message for mending method 'Replace faulty glow plugs' of fault #. '{'str': 'Faulty glow plugs'}' #: lang/json/fault_from_json.py #, python-format msgid "You replace the faulty glow plugs of the %s." -msgstr "" +msgstr "Reemplazás las bujías defectuosas del %s." #: lang/json/fault_from_json.py msgid "Active immobiliser" -msgstr "" +msgstr "Activar inmovilizador" #. ~ description for fault '{'str': 'Active immobiliser'}' #: lang/json/fault_from_json.py @@ -113930,7 +115037,7 @@ msgstr "Evita arrancar un vehículo sin la llave apropiada." #. ~ name of mending method for fault '{'str': 'Active immobiliser'}' #: lang/json/fault_from_json.py msgid "Deactivate immobiliser" -msgstr "" +msgstr "Desactivar inmovilizador" #. ~ description for mending method 'Deactivate immobiliser' of fault '{'str': #. 'Active immobiliser'}' @@ -113938,17 +115045,18 @@ msgstr "" msgid "" "Deactivate the immobiliser that is preventing the vehicle from starting." msgstr "" +"Desactivar el inmovilizador que está evitando que el vehículo arranque." #. ~ success message for mending method 'Deactivate immobiliser' of fault #. '{'str': 'Active immobiliser'}' #: lang/json/fault_from_json.py #, python-format msgid "You successfully deactivate the immobiliser of the %s." -msgstr "" +msgstr "Desactivaste exitosamente el inmovilizador del %s." #: lang/json/fault_from_json.py msgid "Faulty diesel pump" -msgstr "" +msgstr "Bomba de gasoil defectuosa" #. ~ description for fault '{'str': 'Faulty diesel pump'}' #: lang/json/fault_from_json.py @@ -113960,18 +115068,18 @@ msgstr "" #. ~ name of mending method for fault '{'str': 'Faulty diesel pump'}' #: lang/json/fault_from_json.py msgid "Replace faulty diesel pump" -msgstr "" +msgstr "Reemplazar bomba de gasoil defectuosa" #. ~ success message for mending method 'Replace faulty diesel pump' of fault #. '{'str': 'Faulty diesel pump'}' #: lang/json/fault_from_json.py #, python-format msgid "You replace the faulty diesel pump of the %s" -msgstr "" +msgstr "Reemplazás la bomba de gasoil defectuosa del %s" #: lang/json/fault_from_json.py msgid "Expired air filter" -msgstr "" +msgstr "Filtro de aire vencido" #. ~ description for fault '{'str': 'Expired air filter'}' #: lang/json/fault_from_json.py @@ -113984,18 +115092,18 @@ msgstr "" #. ~ name of mending method for fault '{'str': 'Expired air filter'}' #: lang/json/fault_from_json.py msgid "Replace expired air filter" -msgstr "" +msgstr "Reemplazar filtro de aire vencido" #. ~ success message for mending method 'Replace expired air filter' of fault #. '{'str': 'Expired air filter'}' #: lang/json/fault_from_json.py #, python-format msgid "You replace the expired air filter of the %s." -msgstr "" +msgstr "Reemplazás el filtro de aire vencido del %s." #: lang/json/fault_from_json.py msgid "Expired fuel filter" -msgstr "" +msgstr "Filtro de nafta vencido" #. ~ description for fault '{'str': 'Expired fuel filter'}' #: lang/json/fault_from_json.py @@ -114008,18 +115116,18 @@ msgstr "" #. ~ name of mending method for fault '{'str': 'Expired fuel filter'}' #: lang/json/fault_from_json.py msgid "Replace expired fuel filter" -msgstr "" +msgstr "Reemplazar filtro de nafta vencido" #. ~ success message for mending method 'Replace expired fuel filter' of fault #. '{'str': 'Expired fuel filter'}' #: lang/json/fault_from_json.py #, python-format msgid "You replace the expired fuel filter of the %s." -msgstr "" +msgstr "Reemplazás el filtro de nafta vencido del %s." #: lang/json/fault_from_json.py msgid "Faulty fuel pump" -msgstr "" +msgstr "Bomba de nafta defectuosa" #. ~ description for fault '{'str': 'Faulty fuel pump'}' #: lang/json/fault_from_json.py @@ -114029,18 +115137,18 @@ msgstr "Se necesita para bombear nafta desde el tanque del vehículo." #. ~ name of mending method for fault '{'str': 'Faulty fuel pump'}' #: lang/json/fault_from_json.py msgid "Replace faulty fuel pump" -msgstr "" +msgstr "Reemplazar bomba de nafta defectuosa" #. ~ success message for mending method 'Replace faulty fuel pump' of fault #. '{'str': 'Faulty fuel pump'}' #: lang/json/fault_from_json.py #, python-format msgid "You replace the faulty fuel pump of the %s." -msgstr "" +msgstr "Reemplazás la bomba de nafta defectuosa del %s." #: lang/json/fault_from_json.py msgid "Faulty water pump" -msgstr "" +msgstr "Bomba de agua defectuosa" #. ~ description for fault '{'str': 'Faulty water pump'}' #: lang/json/fault_from_json.py @@ -114050,18 +115158,18 @@ msgstr "Se necesita para bombear agua hacia un radiador externo o disipador." #. ~ name of mending method for fault '{'str': 'Faulty water pump'}' #: lang/json/fault_from_json.py msgid "Replace faulty water pump" -msgstr "" +msgstr "Reemplazar bomba de agua defectuosa" #. ~ success message for mending method 'Replace faulty water pump' of fault #. '{'str': 'Faulty water pump'}' #: lang/json/fault_from_json.py #, python-format msgid "You replace the faulty water pump of the %s." -msgstr "" +msgstr "Reemplazás la bomba de agua defectuosa del %s." #: lang/json/fault_from_json.py msgid "Faulty starter motor" -msgstr "" +msgstr "Burro de arranque defectuoso" #. ~ description for fault '{'str': 'Faulty starter motor'}' #: lang/json/fault_from_json.py @@ -114071,14 +115179,14 @@ msgstr "Se necesita para iniciar el motor." #. ~ name of mending method for fault '{'str': 'Faulty starter motor'}' #: lang/json/fault_from_json.py msgid "Replace faulty starter motor" -msgstr "" +msgstr "Reemplazar burro de arranque defectuoso" #. ~ success message for mending method 'Replace faulty starter motor' of #. fault '{'str': 'Faulty starter motor'}' #: lang/json/fault_from_json.py #, python-format msgid "You replace the faulty starter motor of %s." -msgstr "" +msgstr "Reemplazás el burro de arranque defectuoso del %s." #: lang/json/field_type_from_json.py lang/json/overmap_terrain_from_json.py #: lang/json/overmap_terrain_from_json.py src/mapdata.cpp src/mapdata.cpp @@ -114253,23 +115361,23 @@ msgstr "gas radiactivo denso" #: lang/json/field_type_from_json.py msgid "gas vent" -msgstr "conducto de gas" +msgstr "ventilación de gas" #: lang/json/field_type_from_json.py msgid "angular ripple" -msgstr "" +msgstr "ola angular" #: lang/json/field_type_from_json.py msgid "angular rift" -msgstr "" +msgstr "grieta angular" #: lang/json/field_type_from_json.py msgid "fractal fissure" -msgstr "" +msgstr "fisura fractal" #: lang/json/field_type_from_json.py msgid "fire vent" -msgstr "" +msgstr "ventilación de fuego" #: lang/json/field_type_from_json.py msgid "sparks" @@ -114297,15 +115405,15 @@ msgstr "tajo en la realidad" #: lang/json/field_type_from_json.py msgid "push items" -msgstr "" +msgstr "empujar objetos" #: lang/json/field_type_from_json.py msgid "shock vent" -msgstr "" +msgstr "ventilación eléctrica" #: lang/json/field_type_from_json.py msgid "acid vent" -msgstr "" +msgstr "ventilación ácida" #: lang/json/field_type_from_json.py msgid "faint plasma" @@ -114445,19 +115553,19 @@ msgstr "humo de metanfetaminas" #: lang/json/field_type_from_json.py msgid "thick meth smoke" -msgstr "" +msgstr "humo denso de metanfetaminas" #: lang/json/field_type_from_json.py msgid "swirl of fog" -msgstr "" +msgstr "espiral de niebla" #: lang/json/field_type_from_json.py msgid "foul fog" -msgstr "" +msgstr "niebla nauseabunda" #: lang/json/field_type_from_json.py msgid "thick foul fog" -msgstr "" +msgstr "niebla espesa nauseabunda" #: lang/json/field_type_from_json.py msgid "some bees" @@ -114485,19 +115593,19 @@ msgstr "gas relajante" #: lang/json/field_type_from_json.py lang/json/furniture_from_json.py msgid "swamp gas" -msgstr "" +msgstr "gas de pantano" #: lang/json/field_type_from_json.py msgid "mist" -msgstr "" +msgstr "neblina" #: lang/json/field_type_from_json.py lang/json/furniture_from_json.py msgid "fog" -msgstr "" +msgstr "niebla" #: lang/json/field_type_from_json.py msgid "dense fog" -msgstr "" +msgstr "niebla densa" #: lang/json/field_type_from_json.py msgid "fungal haze" @@ -114509,67 +115617,67 @@ msgstr "neblina densa fúngica" #: lang/json/field_type_from_json.py msgid "cold air 1" -msgstr "" +msgstr "aire frío 1" #: lang/json/field_type_from_json.py msgid "cold air 2" -msgstr "" +msgstr "aire frío 2" #: lang/json/field_type_from_json.py msgid "cold air 3" -msgstr "" +msgstr "aire frío 3" #: lang/json/field_type_from_json.py msgid "cold air 4" -msgstr "" +msgstr "aire frío 4" #: lang/json/field_type_from_json.py msgid "hot air 1" -msgstr "" +msgstr "aire caliente 1" #: lang/json/field_type_from_json.py msgid "hot air 2" -msgstr "" +msgstr "aire caliente 2" #: lang/json/field_type_from_json.py msgid "hot air 3" -msgstr "" +msgstr "aire caliente 3" #: lang/json/field_type_from_json.py msgid "hot air 4" -msgstr "" +msgstr "aire caliente 4" #: lang/json/field_type_from_json.py msgid "hot air sauna" -msgstr "" +msgstr "aire caliente de sauna" #: lang/json/field_type_from_json.py msgid "foul-smelling air" -msgstr "" +msgstr "aire con olor nauseabundo" #: lang/json/field_type_from_json.py msgid "fungicidal mist" -msgstr "" +msgstr "neblina fungicida" #: lang/json/field_type_from_json.py msgid "fungicidal haze" -msgstr "" +msgstr "bruma fungicida" #: lang/json/field_type_from_json.py msgid "thick fungicidal haze" -msgstr "" +msgstr "bruma espesa fungicida" #: lang/json/field_type_from_json.py msgid "insecticidal mist" -msgstr "" +msgstr "neblina insecticida" #: lang/json/field_type_from_json.py msgid "insecticidal haze" -msgstr "" +msgstr "bruma insecticida" #: lang/json/field_type_from_json.py msgid "thick insecticidal haze" -msgstr "" +msgstr "bruma espesa insecticida" #: lang/json/field_type_from_json.py msgid "smoke vent" @@ -114577,31 +115685,31 @@ msgstr "salida de humo" #: lang/json/field_type_from_json.py msgid "clairvoyance" -msgstr "" +msgstr "clarividencia" #: lang/json/field_type_from_json.py msgid "dreadful presense" -msgstr "" +msgstr "presencia espantosa" #: lang/json/field_type_from_json.py msgid "frightful presense" -msgstr "" +msgstr "presencia aterradora" #: lang/json/field_type_from_json.py msgid "terrifying presense" -msgstr "" +msgstr "presencia terrorífica" #: lang/json/field_type_from_json.py msgid "flimsy gum webs" -msgstr "" +msgstr "red endeble de goma" #: lang/json/field_type_from_json.py msgid " gum webs" -msgstr "" +msgstr "red de goma" #: lang/json/field_type_from_json.py msgid "thick gum webs" -msgstr "" +msgstr "red dura de goma" #: lang/json/furniture_from_json.py msgid "mutated cactus" @@ -114609,7 +115717,7 @@ msgstr "cactus mutado" #: lang/json/furniture_from_json.py msgid "cooling unit" -msgstr "" +msgstr "aire acondicionado" #. ~ Description for cooling unit #: lang/json/furniture_from_json.py @@ -114617,6 +115725,8 @@ msgid "" "A large, blocky appliance encased in sheet metal. This commonplace fixture " "is used for cooling large indoor areas." msgstr "" +"Es un electrodoméstico grande y cuadrado cubierto por una caja de metal. " +"Este mueble amurado es usado para refrescar grandes áreas internas." #: lang/json/furniture_from_json.py lang/json/furniture_from_json.py #: lang/json/terrain_from_json.py lang/json/terrain_from_json.py @@ -114629,7 +115739,7 @@ msgstr "¡clang!" #: lang/json/furniture_from_json.py msgid "central air filter" -msgstr "" +msgstr "filtro de aire central" #. ~ Description for central air filter #: lang/json/furniture_from_json.py @@ -114637,6 +115747,8 @@ msgid "" "A large synthetic membrane used to filter out dust, smoke, mites, and other " "contaminants from air that passes through it." msgstr "" +"Es una membrana grande sintética que filtra polvo, humo, ácaros y otros " +"contaminantes del aire al pasar." #. ~ Description for dishwasher #: lang/json/furniture_from_json.py @@ -114645,6 +115757,9 @@ msgid "" "batches of dishes. Now that it's sat powerless for a while, a putrid scent " "of rot is leaking from inside." msgstr "" +"Es una máquina grande y cuadrada que utiliza agua caliente y jabón para " +"lavar de manera eficiente, varios platos a la vez. Ahora que está ahí sin " +"alimentación eléctrica, un pútrido aroma a podrido le sale del interior." #: lang/json/furniture_from_json.py msgid "dryer" @@ -114656,6 +115771,8 @@ msgid "" "A common household appliance used to quickly dry large batches of clothing " "after they have been washed." msgstr "" +"Es un electrodoméstico de uso común, que sirve para secar grandes cantidades" +" de ropa luego de que han sido lavadas." #: lang/json/furniture_from_json.py lang/json/vehicle_part_from_json.py msgid "refrigerator" @@ -114667,6 +115784,8 @@ msgid "" "A tall metal storage container that, if powered, will freeze food and other " "perishables for preservation." msgstr "" +"Es un recipiente alto de metal que, si tiene alimentación eléctrica, " +"congelará la comida y otros elementos perecederos." #: lang/json/furniture_from_json.py msgid "glass door fridge" @@ -114680,6 +115799,10 @@ msgid "" " letting out the cold air, which used to be a minor convenience, and now " "saves precious minutes until spoilage." msgstr "" +"Es una heladera moderna con una gruesa lámina de vidrio en la puerta, " +"tratado especialmente para ser más aislante. Permite ver su contenido sin " +"dejar que se escape el aire frío, que era un inconveniente, y ahorra " +"valiosos minutos de refrigeración." #: lang/json/furniture_from_json.py msgid "furnace" @@ -114691,6 +115814,9 @@ msgid "" "A gas-powered forced-air central heating unit, with an internal fan to push " "the air through a building's ventilation system to keep it warm." msgstr "" +"Es una unidad central de calentamiento alimentada por gas, con un ventilador" +" interior que empuja el aire a través del sistema de ventilación del " +"edificio, manteniéndolo caliente." #. ~ Description for washing machine #: lang/json/furniture_from_json.py @@ -114698,6 +115824,8 @@ msgid "" "A large, chunky machine that uses soap and large amounts of water to wash " "batches of clothes with minimal effort." msgstr "" +"Es una máquina robusta que utiliza jabón y grandes cantidades de agua para " +"lavar grupos de ropa con el mínimo esfuerzo." #: lang/json/furniture_from_json.py msgid "oven" @@ -114709,10 +115837,13 @@ msgid "" "A standard convection-based oven, commonly used for heating and cooking " "food. Despite it no longer working, you could safely light a fire inside." msgstr "" +"Es un horno estándar por convección usado comúnmente para calentar y cocinar" +" comida. A pesar de que ya no funciona, podrías encender un fuego en su " +"interior de manera segura." #: lang/json/furniture_from_json.py msgid "blacksmith bellows" -msgstr "" +msgstr "fuelles de herrero" #. ~ Description for blacksmith bellows #: lang/json/furniture_from_json.py @@ -114721,10 +115852,13 @@ msgid "" "fire and maintain a high temperature. Useless in its current state, but " "good for parts." msgstr "" +"Es un antiguo dispositivo para empujar aire hacia la forja de un herrero, " +"para fortalecer el fuego y mantenerlo a altas temperaturas. En este estado " +"es totalmente inútil, pero se le pueden sacar algunas partes." #: lang/json/furniture_from_json.py msgid "blacksmith drop hammer" -msgstr "" +msgstr "martillón pilón de herrero" #. ~ Description for blacksmith drop hammer #: lang/json/furniture_from_json.py @@ -114733,10 +115867,14 @@ msgid "" " If it were working, it would be useful for shaping softened metal plates, " "though now it is only useful for parts." msgstr "" +"Es un yunque con un gran martillo de metal suspendido encima en una " +"estructura metálica. Si estuviera funcionando, podría ser usado para darle " +"forma a placas metálicas blandas, aunque ahora es solamente útil por sus " +"partes." #: lang/json/furniture_from_json.py msgid "document shredder" -msgstr "" +msgstr "trituradora de papel" #. ~ Description for document shredder #: lang/json/furniture_from_json.py @@ -114746,10 +115884,14 @@ msgid "" "parts, as identity theft and corporate espionage probably aren't big " "concerns anymore." msgstr "" +"Es un simple dispositivo electrónico montado sobre una cesto grande. Está " +"diseñado para destrozar documentos de papel con información importante de " +"manera eficiente. Se le pueden sacar las partes, ya que el robo de identidad" +" y el espionaje corporativo probablemente ya no sean tan importantes." #: lang/json/furniture_from_json.py msgid "server stack" -msgstr "" +msgstr "servidor" #. ~ Description for server stack #: lang/json/furniture_from_json.py @@ -114758,10 +115900,14 @@ msgid "" "information. Powerless and largely useless for its intended purpose, the " "laptops mounted inside can still be used if removed." msgstr "" +"Es un estante grande para computadoras que se usan para almacenar y " +"transmitir información. Sin alimentación eléctrica y así de inútil para su " +"propósito inicial, las notebooks que tiene adentro pueden ser útiles si se " +"sacan." #: lang/json/furniture_from_json.py msgid "large satellite dish" -msgstr "" +msgstr "antena satelital grande" #. ~ Description for large satellite dish #: lang/json/furniture_from_json.py @@ -114771,10 +115917,14 @@ msgid "" "planet will likely continue to function indefinately, their various purposes" " have all been lost." msgstr "" +"Es un panel metálico grande y cóncavo con electrónicos simples usado para " +"recibir señales de los satélites. Aunque las miles de máquinas caras " +"orbitando el planeta deben continuar con su función indefinidamente, sus " +"variados propósitos se han perdido para siempre." #: lang/json/furniture_from_json.py msgid "mounted solar panel" -msgstr "" +msgstr "panel solar montado" #. ~ Description for mounted solar panel #: lang/json/furniture_from_json.py @@ -114783,6 +115933,10 @@ msgid "" "useable electricity. While useful before the cataclysm, they have become " "priceless tools, invaluable to any survivor." msgstr "" +"Es un conjunto de generadores fotovoltaicos que convierten la radiación " +"solar en electricidad utilizable. Aunque ya eran útiles antes del " +"Cataclismo, ahora se han convertido en herramientas invalorables para " +"cualquier sobreviviente." #: lang/json/furniture_from_json.py lang/json/furniture_from_json.py #: lang/json/terrain_from_json.py lang/json/terrain_from_json.py @@ -114800,6 +115954,10 @@ msgid "" "with reflective tape to increase visibility. Despite the name, it does " "little to stop a moving car." msgstr "" +"Es un gran obstáculo de madera que se usa para bloquear el tránsito de una " +"calle. Está bordeado con cinta adhesiva reflectante para incrementar su " +"visibilidad. A pesar de su nombre, no logra mucho para detener a un vehículo" +" en movimiento." #: lang/json/furniture_from_json.py lang/json/furniture_from_json.py #: lang/json/terrain_from_json.py lang/json/terrain_from_json.py src/map.cpp @@ -114813,7 +115971,7 @@ msgstr "whump." #: lang/json/furniture_from_json.py msgid "earthbag barricade" -msgstr "" +msgstr "barricada de bolsas de tierra" #. ~ Description for earthbag barricade #: lang/json/furniture_from_json.py @@ -114821,6 +115979,8 @@ msgid "" "A low wall made of stacked earthbags, commonly used to catch bullets and " "block flooding." msgstr "" +"Es una pared petisa hecha de bolsas de tierra apiladas, comúnmente utilizada" +" para frenar balas e inundaciones." #: lang/json/furniture_from_json.py msgid "rrrip!" @@ -114828,21 +115988,25 @@ msgstr "¡rrrip!" #: lang/json/furniture_from_json.py msgid "earthbag wall" -msgstr "" +msgstr "pared de bolsas de tierra" #. ~ Description for earthbag wall #: lang/json/furniture_from_json.py msgid "A wall of stacked earthbags, a bit taller than an average adult." msgstr "" +"Es una pared de bolsas de tierra apiladas, un poquito más alta que un adulto" +" normal." #: lang/json/furniture_from_json.py msgid "lane guard" -msgstr "guardarraíl" +msgstr "separador vial" #. ~ Description for lane guard #: lang/json/furniture_from_json.py msgid "A simple wooden post to mark the separation between street lanes." msgstr "" +"Es un simple poste de madera que marca la separación entre los carriles de " +"la calle." #: lang/json/furniture_from_json.py msgid "sandbag barricade" @@ -114854,6 +116018,8 @@ msgid "" "A low wall made of canvas sacks filled with sand, commonly used to catch " "bullets and prevent flooding." msgstr "" +"Es una pared petisa hecha de bolsas de tela llenas de arena, comúnmente " +"utilizada para frenar balas y prevenir inundaciones." #: lang/json/furniture_from_json.py msgid "sandbag wall" @@ -114863,6 +116029,8 @@ msgstr "pared de bolsas de arena" #: lang/json/furniture_from_json.py msgid "A wall of stacked sandbags, a bit taller than an average adult." msgstr "" +"Es una pared de bolsas de arena apiladas, un poquito más alta que un adulto " +"normal." #: lang/json/furniture_from_json.py msgid "standing mirror" @@ -114874,6 +116042,9 @@ msgid "" "A full-length mirror mounted in a sleek metal frame. You can easily see all" " of the dirt and blood on your clothes, and the weariness in your eyes." msgstr "" +"Es un espejo de cuerpo entero montado en un elegante marco metálico. Podés " +"fácilmente ver toda la tierra y sangre de tu ropa, y el cansancio en tus " +"ojos." #: lang/json/furniture_from_json.py msgid "glass breaking" @@ -114890,10 +116061,13 @@ msgid "" "What remains in the frame are large dangerous-looking shards of fractured " "glass." msgstr "" +"Es un marco metálico con un espejo de cuerpo entero montado, aunque la mayor" +" parte del espejo no está. Lo que queda en el marco son grandes pedazos " +"peligrosos de vidrio roto." #: lang/json/furniture_from_json.py msgid "bitts" -msgstr "" +msgstr "norayes dobles" #. ~ Description for bitts #: lang/json/furniture_from_json.py @@ -114901,6 +116075,8 @@ msgid "" "A pair of vertical iron posts mounted on a wharf, pier, or other form of " "dock. They are used to secure mooring lines, ropes, and similar." msgstr "" +"Es un par de postes de hierro montados en un muelle, embarcadero y otra " +"forma de dársena. Son usados para anclar las líneas, sogas o similares." #: lang/json/furniture_from_json.py msgid "manacles" @@ -114910,6 +116086,8 @@ msgstr "esposas" #: lang/json/furniture_from_json.py msgid "A pair of metal shackles with heavy chains mounted to a wall or floor." msgstr "" +"Es un par de grilletes metálicos con cadenas pesadas montadas a una pared o " +"al suelo." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py @@ -114926,6 +116104,8 @@ msgid "" "A massive block of stone that has been carefully carved into a work of " "timeless art." msgstr "" +"Es un enorme pedazo de piedra que ha sido tallada cuidadosamente en una " +"forma de arte atemporal." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py msgid "thump." @@ -114942,10 +116122,13 @@ msgid "" "clothing in stores, or for tailors to design outfits on. Considering all " "that's happened, something about it is somewhat unnerving." msgstr "" +"Es una figura en madera de una persona en tamaño real, más comúnmente usada " +"para mostrara ropa en los comercios, o para que los sastres diseñen prendas." +" Considerando todo lo que pasó, algo acerca de esto es perturbador." #: lang/json/furniture_from_json.py msgid "birdbath" -msgstr "" +msgstr "bebedero para aves" #. ~ Description for birdbath #: lang/json/furniture_from_json.py @@ -114953,10 +116136,12 @@ msgid "" "A wide stone bowl mounted to a pedestal, usually filled with rainwater, " "meant for birds to play or bathe in." msgstr "" +"Es un recipiente ancho de piedra montado en un pedestal, usualmente lleno de" +" agua de lluvia, pensado para que los pájaros jueguen o se bañen." #: lang/json/furniture_from_json.py msgid "rotary clothes dryer line" -msgstr "" +msgstr "tender giratorio" #. ~ Description for rotary clothes dryer line #: lang/json/furniture_from_json.py @@ -114964,10 +116149,12 @@ msgid "" "A central metal pole holding up a wide rotating frame, this would be used to" " hang up clothes to dry in the sunlight." msgstr "" +"Es una vara metálica central que sostiene una estructura ancha que gira. Es " +"utilizada para colgar la ropa y que se seque al sol." #: lang/json/furniture_from_json.py msgid "floor lamp" -msgstr "" +msgstr "lámpara de pie" #. ~ Description for floor lamp #: lang/json/furniture_from_json.py @@ -114975,23 +116162,25 @@ msgid "" "A light mounted on the top of a metal pole, this would be plugged into a " "wall socket to illuminate a room." msgstr "" +"Es una luz montada en la punta de una vara metálica. Va enchufada y puede " +"iluminar una habitación." #: lang/json/furniture_from_json.py msgid "bonk!" -msgstr "" +msgstr "bonk!" #: lang/json/furniture_from_json.py msgid "pine wreath" -msgstr "" +msgstr "corona de pino" #. ~ Description for pine wreath #: lang/json/furniture_from_json.py msgid "A decorative wreath for the winter holidays." -msgstr "" +msgstr "Es una corona decorativa para las festividades invernales." #: lang/json/furniture_from_json.py msgid "sand castle" -msgstr "" +msgstr "castillo de arena" #. ~ Description for sand castle #: lang/json/furniture_from_json.py @@ -114999,6 +116188,9 @@ msgid "" "A glorious castle made of sand. This mighty fortress will stand tall for " "the ages to come, a true testimony of the skills of its builder." msgstr "" +"Es un glorioso castillo hecho de arena. Esta poderosa fortaleza se mantendrá" +" erguida por años, un verdadero testimonio de la habilidad de su " +"constructor." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py msgid "crunch." @@ -115006,13 +116198,13 @@ msgstr "crunch." #: lang/json/furniture_from_json.py msgid "decorative tree" -msgstr "" +msgstr "árbol decorativo" #. ~ Description for decorative tree #: lang/json/furniture_from_json.py msgid "" "A decorative pine tree littered with ornaments for the winter holidays." -msgstr "" +msgstr "Es un pino decorativo cubierto de adornos de festividades invernales." #: lang/json/furniture_from_json.py msgid "indoor plant" @@ -115024,6 +116216,8 @@ msgid "" "A small potted plant, used for decoration indoors. It appears to have dried" " up and died a while ago." msgstr "" +"Es una pequeña maceta con una planta, usada como decoración de interiores. " +"Parece haberse secado y muerto hace rato." #: lang/json/furniture_from_json.py msgid "yellow indoor plant" @@ -115035,6 +116229,8 @@ msgid "" "A decorative potted plant with a yellow flower, it looks to have wilted and " "died some time ago." msgstr "" +"Es una maceta decorativa con una planta con una flor amarilla, parece " +"haberse marchitado y muerto hace algún tiempo." #: lang/json/furniture_from_json.py msgid "harvestable plant" @@ -115046,6 +116242,8 @@ msgid "" "This plant is fully grown and ready to be harvested. Identifying how to " "harvest it requires closer examination." msgstr "" +"Esta planta está totalmente crecida y lista para cosechar. Identificar cómo " +"se debe cosechar, requiere un examen más cercano." #: lang/json/furniture_from_json.py lang/json/furniture_from_json.py #: lang/json/terrain_from_json.py lang/json/terrain_from_json.py @@ -115059,7 +116257,7 @@ msgstr "planta madura" #. ~ Description for mature plant #: lang/json/furniture_from_json.py msgid "This plant has matured, and will be ready to harvest before long." -msgstr "" +msgstr "Está planta está madura y lista para cosechar en breve." #: lang/json/furniture_from_json.py msgid "seed" @@ -115071,6 +116269,8 @@ msgid "" "A freshly planted seed. If properly tended to, it could grow into a healthy" " plant." msgstr "" +"Es un semilla recién plantada. Si se la atiende de manera apropiada, podría " +"crecer y convertirse en una saludable planta." #: lang/json/furniture_from_json.py msgid "seedling" @@ -115079,7 +116279,7 @@ msgstr "brote" #. ~ Description for seedling #: lang/json/furniture_from_json.py msgid "A seed that has just begun to sprout its first roots." -msgstr "" +msgstr "Es una semilla que ha comenzado a brotar sus primeras raíces." #: lang/json/furniture_from_json.py msgid "planter" @@ -115091,10 +116291,12 @@ msgid "" "A garden planter full of soil and slatted to allow adequate drainage. Can " "be used for planting crops." msgstr "" +"Es un cantero lleno de tierra y preparada con un sistema de drenaje " +"adecuado. Puede usarse para cultivar plantas." #: lang/json/furniture_from_json.py msgid "planter with harvestable plant" -msgstr "" +msgstr "maceta con planta cosechable" #. ~ Description for planter with harvestable plant #: lang/json/furniture_from_json.py @@ -115102,10 +116304,13 @@ msgid "" "A garden planter full of soil and slatted to allow adequate drainage. This " "one has a fully grown plant, and will need closer examination to harvest." msgstr "" +"Es un cantero lleno de tierra y preparada con un sistema de drenaje " +"adecuado. Este tiene una planta completamente madura y con un examen más " +"cercano podrías ver cómo cosecharla." #: lang/json/furniture_from_json.py msgid "planter with mature plant" -msgstr "" +msgstr "maceta con planta madura" #. ~ Description for planter with mature plant #: lang/json/furniture_from_json.py @@ -115113,10 +116318,13 @@ msgid "" "A garden planter full of soil and slatted to allow adequate drainage. This " "one has a matured plant that should be ready for harvest before long." msgstr "" +"Es un cantero lleno de tierra y preparada con un sistema de drenaje " +"adecuado. Este tiene una planta completamente madura que debería estar " +"preparada para cosechar en breve." #: lang/json/furniture_from_json.py msgid "planter with seed" -msgstr "" +msgstr "maceta con semilla" #. ~ Description for planter with seed #: lang/json/furniture_from_json.py @@ -115124,10 +116332,13 @@ msgid "" "A garden planter full of soil and slatted to allow adequate drainage. This " "one contains a planted seed, and will need attention to grow fully." msgstr "" +"Es un cantero lleno de tierra y preparada con un sistema de drenaje " +"adecuado. Este tiene una semilla plantada y necesitará de tu atención para " +"crecer completamente." #: lang/json/furniture_from_json.py msgid "planter with seedling" -msgstr "" +msgstr "maceta con plantín" #. ~ Description for planter with seedling #: lang/json/furniture_from_json.py @@ -115135,6 +116346,9 @@ msgid "" "A garden planter full of soil and slatted to allow adequate drainage. This " "one has a seed that has just begun to sprout its first roots." msgstr "" +"Es un cantero lleno de tierra y preparada con un sistema de drenaje " +"adecuado. Este tiene una semilla que ya ha comenzado a brotar sus primeras " +"raíces." #: lang/json/furniture_from_json.py msgid "spider egg sack" @@ -115146,6 +116360,8 @@ msgid "" "A sizable, off-white sac of large eggs. Upon watching closer, you can see " "them moving slightly. Gross." msgstr "" +"Es un saco de huevos grandes blanquecinos. Al examinarlos podés ver cómo se " +"mueven levemente. Un asco." #: lang/json/furniture_from_json.py msgid "splat!" @@ -115157,6 +116373,8 @@ msgid "" "A bulbous mass of off-white spider eggs. Upon watching closer, you can see " "them moving a bit. Really gross." msgstr "" +"Es una protuberante masa de huevos blanquecinos de araña. Al examinarlos " +"podés ver como se están moviendo un poco. Un verdadero asco." #. ~ Description for spider egg sack #: lang/json/furniture_from_json.py @@ -115165,6 +116383,9 @@ msgid "" "definitely moving around. Really gross, just seeing it makes your skin " "crawl." msgstr "" +"Es un gigantesco saco de huevos de araña, cada uno más grande que tu mano. " +"Definitivamente, se están moviendo. Un verdadero asco, de solo mirarlos ya " +"te da escolfríos." #: lang/json/furniture_from_json.py msgid "ruptured egg sack" @@ -115176,6 +116397,9 @@ msgid "" "A disgusting ruptured sac of giant spider eggs. The thought of all those " "massive baby spiders pouring out of it is almost terrifying on its own." msgstr "" +"Es un desagradable saco roto de huevos de araña gigante. El pensamiento de " +"todos esos bebés enormes de araña saliendo de ahí es casi tan terrorífico " +"como ellas mismas." #. ~ Description for swamp gas #: lang/json/furniture_from_json.py @@ -115183,6 +116407,8 @@ msgid "" "This is a pool of murky water, it occasionally bubbles, releasing a mildly " "toxic gas." msgstr "" +"Es un charco de agua sucia que ocasionalmente burbujea, liberando un gas " +"moderadamente tóxico." #: lang/json/furniture_from_json.py src/ballistics.cpp src/map.cpp msgid "splash!" @@ -115191,20 +116417,22 @@ msgstr "splash!" #. ~ Description for fog #: lang/json/furniture_from_json.py msgid "This is a misty cloud of fog." -msgstr "" +msgstr "Es una nube de niebla." #: lang/json/furniture_from_json.py msgid "fake workbench hands" -msgstr "" +msgstr "manos de mesa de trabajo falsa" #. ~ Description for fake workbench hands #: lang/json/furniture_from_json.py msgid "This fake workbench holds the stats for working on a wielded item." msgstr "" +"Esta mesa de trabajo falsa tiene las características para trabajar sobre un " +"objeto empuñado." #: lang/json/furniture_from_json.py msgid "ground crafting spot" -msgstr "" +msgstr "lugar de fabricación en el piso" #. ~ Description for ground crafting spot #: lang/json/furniture_from_json.py @@ -115212,11 +116440,14 @@ msgid "" "A cleared spot on the ground for crafting. Slower than using a workbench or" " holding a project in your hands, but readily available." msgstr "" +"Es un espacio limpio en el piso para fabricar. Es más lento que hacerlo en " +"una mesa de trabajo o que tener el proyecto en tus manos, pero " +"inmediatamente disponible." #. ~ Description for seeing this is a bug #: lang/json/furniture_from_json.py msgid "Seeing this is a bug. If seen, please report and destroy." -msgstr "" +msgstr "Ver esto es un bug. Si te pasó, reportalo y destruilo." #: lang/json/furniture_from_json.py msgid "fireplace" @@ -115228,6 +116459,9 @@ msgid "" "A common fixture for safely hosting a fire indoors, with a chimney to vent " "the smoke to the outside. Dangerous to leave unattended while lit." msgstr "" +"Es un mueble empotrado común, usado para encender fuegos en interiores de " +"manera segura, con una chimenea para ventilar el humo. Igual, es peligroso " +"dejar un fuego sin atender." #: lang/json/furniture_from_json.py lang/json/furniture_from_json.py #: lang/json/terrain_from_json.py lang/json/terrain_from_json.py @@ -115250,11 +116484,15 @@ msgid "" "A simple metal stove for hosting wood-fueled fires. Good for cooking or " "heating food, and safe to have indoors." msgstr "" +"Es una simple cocina de metal para contener fuegos prendidos con madera. " +"Buena para cocinar o calentar comida, y segura para usar en interiores." #. ~ Description for brazier #: lang/json/furniture_from_json.py msgid "A raised metal dish in which to safely burn things." msgstr "" +"Es un disco de metal levantado en el cual se pueden quemar cosas de manera " +"segura." #. ~ Description for fire barrel (200L) #: lang/json/furniture_from_json.py @@ -115262,6 +116500,9 @@ msgid "" "A huge metal barrel used to safely contain a fire. It has multiple holes " "punched in the walls for air supply." msgstr "" +"Es un tambor enorme de metal que puede ser usado para contener un fuego de " +"manera segura. Tiene varios agujeros hechos en los costados para que ingrese" +" el aire." #. ~ Description for fire barrel (100L) #: lang/json/furniture_from_json.py @@ -115269,6 +116510,9 @@ msgid "" "A large metal barrel used to safely contain a fire. It has multiple holes " "punched in the walls for air supply." msgstr "" +"Es un tambor grande de metal que puede ser usado para contener un fuego de " +"manera segura. Tiene varios agujeros hechos en los costados para que ingrese" +" el aire." #: lang/json/furniture_from_json.py msgid "fire ring" @@ -115278,6 +116522,8 @@ msgstr "anillo de fuego" #: lang/json/furniture_from_json.py msgid "A ring of stones to safely contain a fire." msgstr "" +"Es un anillo de piedras en el cual se puede encender un fuego de manera " +"segura." #: lang/json/furniture_from_json.py msgid "mutated poppy flower" @@ -115292,6 +116538,11 @@ msgid "" "writhe beneath the soil, and it's surrounded by an overwhelming floral smell" " that makes you feel sleepy." msgstr "" +"Estas extrañas flores han aparecido en los inicios del Cataclismo, y sus " +"capullos pueden usarse con fines medicinales, como las semillas de la " +"amapola común de la cual recibe el nombre. La tierra a su alrededor se agita" +" levemente mientras sus raíces se retuercen debajo, y está rodeada de un " +"aroma floral abrumador que te hace sentir somnoliento." #. ~ Description for dandelion #: lang/json/furniture_from_json.py @@ -115299,6 +116550,8 @@ msgid "" "A common weed with a yellow flower. Produces seeds that get carried on the " "wind by thin, gray filaments." msgstr "" +"Es un yuyo común con flor amarilla. Produce semillas que son llevadas por el" +" viento por los llamativos panaderos." #. ~ Description for burdock #: lang/json/furniture_from_json.py @@ -115306,16 +116559,19 @@ msgid "" "A common weed with a purple thistle-like flower. Its seeds tend to stick to" " clothing and fur." msgstr "" +"Es un yuyo común con flor púrpura similar al cardo. Sus semillas tienden a " +"pegarse a la ropa y al pelo." #. ~ Description for chamomile #: lang/json/furniture_from_json.py msgid "Ahh, soothing chamomile tea." -msgstr "" +msgstr "Ahh, reconfortante té de manzanliia." #. ~ Description for tulip #: lang/json/furniture_from_json.py msgid "A bright, colorful flower with petals forming a small cup at its top." msgstr "" +"Es un flor colorida y brillante con sus pétalos formando una pequeña copa." #: lang/json/furniture_from_json.py msgid "spurge flower" @@ -115324,7 +116580,7 @@ msgstr "flor de euforbio" #. ~ Description for spurge flower #: lang/json/furniture_from_json.py msgid "A yellow-green flower that grows in densely packed bushes." -msgstr "" +msgstr "Es un flor amarilla y verde que crece densamente en los arbustos." #: lang/json/furniture_from_json.py msgid "cattails" @@ -115336,6 +116592,8 @@ msgid "" "This useful plant is available all year round. Many parts of the plant are " "edible." msgstr "" +"Esta útil planta está disponible durante todo el año. Muchas partes de esta " +"planta son comestibles." #. ~ Description for black eyed susan #: lang/json/furniture_from_json.py @@ -115343,11 +116601,13 @@ msgid "" "A yellow flower that has a dark ball in the middle. Sometimes known as an " "ox-eye daisy." msgstr "" +"Es una flor amarilla que tiene una pelotita oscura en el medio. A veces es " +"conocida como crisantemo." #. ~ Description for lily #: lang/json/furniture_from_json.py msgid "A pretty flower that comes in a variety of colors." -msgstr "" +msgstr "Es una linda flor que aparece en varios colores." #. ~ Description for sunflower #: lang/json/furniture_from_json.py @@ -115355,6 +116615,8 @@ msgid "" "A tall, wide-headed flower with a large dark center. Produces many " "nutritious seeds." msgstr "" +"Es una flor alta de cabeza ancha con una centro grande y oscuro. Produce " +"muchas semillas nutritivas." #: lang/json/furniture_from_json.py msgid "lilypad" @@ -115366,30 +116628,33 @@ msgid "" "These lilypads don't look they'd support the weight of the things you've " "heard croaking in the swamp." msgstr "" +"Estos nenúfares no parece que vayan a poder soportar el peso de las cosas " +"que escuchaste croando en el pantano." #. ~ Description for bluebell #: lang/json/furniture_from_json.py msgid "A common bluebell flower. Pretty." -msgstr "" +msgstr "Es un jacinto común. Lindo." #. ~ Description for dahlia #: lang/json/furniture_from_json.py msgid "A puffy flower with many tightly layered petals." -msgstr "" +msgstr "Es una flor hinchada con muchas capas de pétalos apretados." #. ~ Description for chicory #: lang/json/furniture_from_json.py msgid "A blue flower imported from Europe, also known as a Cornflower." msgstr "" +"Es una flor azul importada de Europa, también conocida como radicheta." #. ~ Description for datura #: lang/json/furniture_from_json.py msgid "A pretty moonflower." -msgstr "" +msgstr "Es una linda flor de luna." #: lang/json/furniture_from_json.py msgid "pile of leaves" -msgstr "" +msgstr "pila de hojas" #. ~ Description for pile of leaves #: lang/json/furniture_from_json.py @@ -115397,6 +116662,8 @@ msgid "" "A sizable pile of leaves. You could sleep on it if you don't care about " "comfort or warmth." msgstr "" +"Es una gran pila de hojas. Podrías dormir ahí encima si no te preocupa el " +"confort o el frío." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py src/iuse.cpp @@ -115409,6 +116676,8 @@ msgid "" "Yellow flower known as Brassica Nigra. Known for its seeds that can be used" " for making table mustard." msgstr "" +"Es una flor amarilla conocida como Brassica Nigra. Es reconocida por sus " +"semillas que pueden usarse para hacer mostaza de mesa." #: lang/json/furniture_from_json.py msgid "marloss flower" @@ -115421,6 +116690,9 @@ msgid "" "is colored a brilliant cyan color. It emits an aroma both overwhelming and " "strangely alluring." msgstr "" +"Esta flor es como las otras flores invadidas por los hongos, pero su bulbo " +"es de un color cian brillante. Emite un aroma abrumador y extrañamente " +"atractivo." #: lang/json/furniture_from_json.py msgid "poof." @@ -115433,6 +116705,9 @@ msgid "" "color has been leached from its petals and stem. It gently sways of its own" " volition, maintaining an unsettling rhythm." msgstr "" +"Esta flor ha sido invadida por grises zarcillos fibrosos de hongos, y el " +"color ha sido quitado de sus pétalos y su tallo. Se mece suavemente por su " +"propia voluntad, manteniendo un ritmo perturbador." #: lang/json/furniture_from_json.py msgid "fungal mass" @@ -115444,6 +116719,8 @@ msgid "" "Thick ropes of mycal matter have covered the ground here completely. It's " "soft to the touch, but not firm enough to hold any weight." msgstr "" +"Unas sogas de materia mycus han cubierto el suelo acá completamente. Es " +"suave al tacto pero no lo suficientemente firme para aguantar algún peso." #: lang/json/furniture_from_json.py msgid "fungal clump" @@ -115455,10 +116732,12 @@ msgid "" "Alien mold and stems mingle tightly here, swaying around and weaving " "together, creating a sort of fungal bush." msgstr "" +"Tallos y moho alienígenas se mezclan apretados acá, meciéndose y ondeando " +"juntos, creando una especie de arbusto fúngico." #: lang/json/furniture_from_json.py msgid "fungal tangle" -msgstr "" +msgstr "enredo fúngico" #. ~ Description for fungal tangle #: lang/json/furniture_from_json.py @@ -115466,10 +116745,12 @@ msgid "" "Thick, ropy tendrils of fungus have risen from the ground and gathered into " "an impenetrable clump." msgstr "" +"Son zarcillos gruesos y fibrosos de hongos que se levantan del suelo y se " +"juntan armando una mata impenetrable." #: lang/json/furniture_from_json.py msgid "squelch." -msgstr "" +msgstr "chapoteo." #: lang/json/furniture_from_json.py msgid "stone slab" @@ -115478,7 +116759,7 @@ msgstr "escalón de piedra" #. ~ Description for stone slab #: lang/json/furniture_from_json.py msgid "A slab of heavy stone, with a reasonably flat surface." -msgstr "" +msgstr "Es un escalón pesado de piedra, con una superficie bastante plana." #: lang/json/furniture_from_json.py msgid "headstone" @@ -115491,6 +116772,10 @@ msgid "" "buried beneath. While only a solemn reminder of the uncountable losses of " "the Cataclysm, a proper final resting place grants an odd sense of peace." msgstr "" +"Es un escalón grande de piedra, grabado con información del difunto " +"enterrado debajo. Aunque sea solo un recuerdo solemne de las incontables " +"pérdidas del Cataclismo, un apropiado lugar de descanso final garantiza una " +"extraña sensación de paz." #: lang/json/furniture_from_json.py lang/json/furniture_from_json.py #: lang/json/terrain_from_json.py lang/json/terrain_from_json.py @@ -115509,6 +116794,10 @@ msgid "" " lies beneath. While only a solemn reminder of the countless casualties of " "the Cataclysm, a proper final resting place grants an odd sense of peace." msgstr "" +"Es un escalón vertical de piedra, grabado con información del difunto " +"enterrado debajo. Aunque sea solo un recuerdo solemne de las innumerables " +"víctimas del Cataclismo, un apropiado lugar de descanso final garantiza una " +"extraña sensación de paz." #: lang/json/furniture_from_json.py msgid "worn gravestone" @@ -115521,6 +116810,9 @@ msgid "" "inscription illegible. Whoever's buried here was probably lucky enough to " "pass before all this chaos began." msgstr "" +"Es una lápida vieja y desgastada, tan dañada que la inscripción ya es " +"ilegible. Sea quien sea quien esté enterrado aquí, probablemente haya tenido" +" la suerte de irse antes de que comience todo este caos." #: lang/json/furniture_from_json.py msgid "obelisk" @@ -115533,6 +116825,9 @@ msgid "" "serves to honor the passing of somebody significant, something one wishes " "was still a practical goal." msgstr "" +"Es una magnífica estatua tallada con una placa grabada puesta en la base. " +"Está para hacer honor al fallecimiento de alguien querido, algo que uno " +"desea que todavía sea un objetivo." #: lang/json/furniture_from_json.py msgid "thunk!" @@ -115549,6 +116844,10 @@ msgid "" "working on an assembly line. Despite its specialized purpose being all but " "lost now, it could provide a plethora of useful parts if disassembled." msgstr "" +"Es un brazo robótico resistente y versátil con una herramienta en la punta, " +"diseñado para trabajar en una línea de montaje. A pesar de que su propósito " +"especializado ya se ha perdido, ahora puede proveer de una cantidad de " +"partes útiles si se lo desarma." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py msgid "chemical mixer" @@ -115560,6 +116859,8 @@ msgid "" "A large vat with a motorized mixing device for combining large quantities of" " chemicals." msgstr "" +"Es un gran tanque con un dispositivo motorizado de mezclado para combinar " +"grandes cantidades de químicos." #: lang/json/furniture_from_json.py msgid "robotic arm" @@ -115572,6 +116873,9 @@ msgid "" "general-purpose than specially designed assemblers. Despite being " "functionless now, the parts could be useful." msgstr "" +"Es un brazo robótico automatizado utilizado en líneas de montaje, que parece" +" haber tenido un propósito más general que los diseñados especialmente. A " +"pesar de que ahora no tiene función, sus partes pueden ser útiles." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py @@ -115590,6 +116894,10 @@ msgid "" "programmed beforehand, something that a plethora of labels warn against " "doing without expertise." msgstr "" +"Es un aparato quirúrgico usado para la instalación y extracción de biónicos." +" El nombre 'Autodoc' no es muy apropiado, ya que solo puede ser operado si " +"se lo programa previamente, algo que una cantidad enorme de etiquetas " +"advierten de no hacer si no se es un experto en el tema." #: lang/json/furniture_from_json.py msgid "Autodoc operation couch" @@ -115612,14 +116920,17 @@ msgid "" "A device that can steam its contents at high enough tempuratures to " "completely sterilize them, killing any possible contaminants." msgstr "" +"Es un dispositivo que puede cocinar al vapor su contenido a temperaturas lo " +"suficientemente altas como para esterilizarlo, matando todos los posibles " +"contaminantes." #: lang/json/furniture_from_json.py msgid "filled autoclave" -msgstr "" +msgstr "autoclave lleno" #: lang/json/furniture_from_json.py msgid "sample freezer" -msgstr "" +msgstr "freezer de muestras" #. ~ Description for sample freezer #: lang/json/furniture_from_json.py @@ -115627,10 +116938,12 @@ msgid "" "A specialized freezer capable of maintaining tempuratures of -80 Celsieus, " "and is often used only for the preservation of delicate scientific samples." msgstr "" +"Es un freezer especial capaz de mantener temperaturas de -80°C, y a menudo " +"es usado solo para preservar muestras científicas delicadas." #: lang/json/furniture_from_json.py msgid "lab workbench" -msgstr "" +msgstr "mesa de trabajo de laboratorio" #. ~ Description for lab workbench #: lang/json/furniture_from_json.py @@ -115639,10 +116952,13 @@ msgid "" "most chemical spills and burns. It has wired in electrical and gas " "fittings." msgstr "" +"Es una mesada de resina que puede resistir la mayoría de salpicaduras y " +"quemaduras químicas, sobre un armario de metal. Tiene conectado equipamiento" +" eléctrico y de gas." #: lang/json/furniture_from_json.py msgid "fume hood" -msgstr "" +msgstr "campana de gases" #. ~ Description for fume hood #: lang/json/furniture_from_json.py @@ -115651,10 +116967,14 @@ msgid "" " in the hood draws fumes and smoke from dangerous chemicals up into a " "ventilation duct." msgstr "" +"Es una campana para gases sobre un espacio de trabajo de laboratorio, con " +"persianas de vidrio resistente. Un ventilador en la campana extrae los gases" +" y humos de químicos peligrosos y los expulsa por el conducto de " +"ventilación." #: lang/json/furniture_from_json.py msgid "shaker incubator" -msgstr "" +msgstr "incubadora con agitador" #. ~ Description for shaker incubator #: lang/json/furniture_from_json.py @@ -115663,10 +116983,13 @@ msgid "" "temperature to grow bacteria. Although, more bacteria is probably the last " "thing you need, considering the circumstances." msgstr "" +"Es una herramienta para contener mezclas químicas a la temperatura justa " +"para cultivar bacterias. Aunque más bacterias sea probablemente lo último " +"que necesitás, considerando las circunstancias." #: lang/json/furniture_from_json.py msgid "emergency wash station" -msgstr "" +msgstr "estación de lavado de emergencia" #. ~ Description for emergency wash station #: lang/json/furniture_from_json.py @@ -115676,10 +116999,14 @@ msgid "" "from the eyes, and is easily usable without being able to see very well. A " "sizable notice warns against drinking the water it uses." msgstr "" +"Es un lavamanos con pie con un par de mangueritas, y una manija grande y de " +"color brillante. Está especialmente diseñada para quitar rápidamente los " +"contaminantes de los ojos, y es fácilmente utilizable sin necesidad de ver " +"muy bien. Una nota grande desaconseja beber el agua que utiliza." #: lang/json/furniture_from_json.py msgid "IV pole" -msgstr "" +msgstr "palo IV" #. ~ Description for IV pole #: lang/json/furniture_from_json.py @@ -115687,10 +117014,12 @@ msgid "" "A tall wire frame on a set of small wheels used for holding an IV bag, " "useful for unattended administration." msgstr "" +"Es un fierro alto con un grupo de rueditas debajo que se usa para sostener " +"bolsas de IV, útil para la administración sin supervisión." #: lang/json/furniture_from_json.py msgid "high performance liquid chromatographer" -msgstr "" +msgstr "cromatógrafo de líquido de alta resolución" #. ~ Description for high performance liquid chromatographer #: lang/json/furniture_from_json.py @@ -115700,10 +117029,14 @@ msgid "" " their affinity, to the stationary phase in a tube. At least, that's what " "the label says." msgstr "" +"Es un herramienta de tecnología avanzada que, con electricidad y un operario" +" experimentado, es muy útil para separar químicos en fase líquida o acuosa, " +"basado en su afinidad, hacia la fase estacionaria en un tubo. Por lo menos, " +"eso es lo que dice la etiqueta." #: lang/json/furniture_from_json.py msgid "gas chromatographer" -msgstr "" +msgstr "cromatógrafo de gases" #. ~ Description for gas chromatographer #: lang/json/furniture_from_json.py @@ -115713,10 +117046,14 @@ msgid "" "affinity, to a stationary phase in a tube. At least, that's what the label " "says." msgstr "" +"Es un herramienta de tecnología avanzada que, con electricidad y un operario" +" experimentado, es muy útil para separar químicos en fase gaseosa, basado en" +" su afinidad, hacia una fase estacionaria en un tubo. Por lo menos, eso es " +"lo que dice la etiqueta." #: lang/json/furniture_from_json.py msgid "mass spectrometer" -msgstr "" +msgstr "espectómetro de masa" #. ~ Description for mass spectrometer #: lang/json/furniture_from_json.py @@ -115727,10 +117064,15 @@ msgid "" "mass of the particle hitting it. Invaluable for chemical analysis and other" " advanced sciences, it's not as useful anymore." msgstr "" +"Adentro de esta gran caja blanca hay un grupo cuidadosamente balanceado de " +"generadores de campo eléctrico que pueden separar precisamente partículas " +"ionizadas basado en su relación de carga a masa, tirándolos dentro de un " +"detector que mide la masa exacta de la partícula. Es invaluable para los " +"análisis químicos y otras ciencias avanzadas, ya no es tan útil." #: lang/json/furniture_from_json.py msgid "nuclear magnetic resonance spectrometer" -msgstr "" +msgstr "espectómetro de resonancia magnética nuclear" #. ~ Description for nuclear magnetic resonance spectrometer #: lang/json/furniture_from_json.py @@ -115739,10 +117081,14 @@ msgid "" "used to observe how magnetic fields affect nuclear spins. It is a common " "workhorse for the discovery and study of chemical structures." msgstr "" +"Es un electroimán gigante con equipo de medición cuidadosamente calibrado " +"que se usa para observar cómo afectan los campos magnéticos a los espines " +"nucleares. Es una herramienta confiable común para descubrir y estudiar las " +"estructuras químicas." #: lang/json/furniture_from_json.py msgid "electron microscope" -msgstr "" +msgstr "microscopio de electrones" #. ~ Description for electron microscope #: lang/json/furniture_from_json.py @@ -115750,10 +117096,12 @@ msgid "" "An enormous observational tool for studying the details of samples on an " "immensely small scale." msgstr "" +"Es una enorme herramienta de observación para estudiar los detalles de las " +"muestras a una inmensamente pequeña escala." #: lang/json/furniture_from_json.py msgid "CT scanner" -msgstr "" +msgstr "tomógrafo" #. ~ Description for CT scanner #: lang/json/furniture_from_json.py @@ -115761,10 +117109,12 @@ msgid "" "A massive piece of machinery used to take hundreds of X-ray images from 360 " "degrees, often used for medical examinations of patients." msgstr "" +"Es una máquina enorme que se utiliza para tomar cientos de imágenes rayos X " +"de 360 grados, se usa comúnmente para exámenes médicos de pacientes." #: lang/json/furniture_from_json.py msgid "MRI machine" -msgstr "" +msgstr "máquina de resonancia magnética" #. ~ Description for MRI machine #: lang/json/furniture_from_json.py @@ -115772,10 +117122,13 @@ msgid "" "A massive tool used to take NMR images of a patient placed inside, providing" " invaluable medical insight." msgstr "" +"Es una enorme herramienta que se usa para tomar imágenes de resonancia " +"magnética nuclear del paciente que se mete adentro, lo que brinda " +"información médica invaluable." #: lang/json/furniture_from_json.py msgid "scanner bed" -msgstr "" +msgstr "camilla para escaneo" #. ~ Description for scanner bed #: lang/json/furniture_from_json.py @@ -115783,10 +117136,12 @@ msgid "" "This is a narrow, flat, and frankly uncomfortable bed for putting someone " "into an imaging machine for medical observations." msgstr "" +"Es una cama plana, fina y francamente incómoda que se utiliza para meter a " +"una persona en una máquina de escaneo para observaciones médicas." #: lang/json/furniture_from_json.py msgid "anesthetic machine" -msgstr "" +msgstr "máquina de anestesia" #. ~ Description for anesthetic machine #: lang/json/furniture_from_json.py @@ -115795,10 +117150,14 @@ msgid "" "maintain precise levels of anesthesia in a patient to ensure they, at least " "ideally, remain asleep, unfeeling, but alive." msgstr "" +"Es una máquina grande con varios tanques, tubos y aparatos de monitoreo que " +"se usan para mantener niveles precisos de anestesia en un paciente para " +"asegurar que, en el mejor de los casos, se mantenga dormido, sin sentir, " +"pero vivo." #: lang/json/furniture_from_json.py msgid "dialysis machine" -msgstr "" +msgstr "máquina de diálisis" #. ~ Description for dialysis machine #: lang/json/furniture_from_json.py @@ -115807,10 +117166,13 @@ msgid "" "function of their kidneys. Largely obsolete for those with access to " "bionics, but a lifeline to those that need it." msgstr "" +"Es una máquina grande para bombear y filtrar sangre a una persona sin la " +"función de sus riñones. Muy obsoleta para aquellos que tengan acceso a los " +"biónicos, pero un salvavidas para aquél que lo necesita." #: lang/json/furniture_from_json.py msgid "medical ventilator" -msgstr "" +msgstr "respirador médico" #. ~ Description for medical ventilator #: lang/json/furniture_from_json.py @@ -115819,36 +117181,39 @@ msgid "" "patient's lungs when they are incapable of breathing, though often only " "needed temporarily." msgstr "" +"Es una caja grande con un grupo de ruedas que bombea aire a los pulmones de " +"un paciente cuando es incapaz de respirar, aunque a menudo solo se necesita " +"temporariamente." #: lang/json/furniture_from_json.py msgid "privacy curtain" -msgstr "" +msgstr "cortina de privacidad" #. ~ Description for privacy curtain #: lang/json/furniture_from_json.py msgid "No peeking!" -msgstr "" +msgstr "¡Sin espiar!" #: lang/json/furniture_from_json.py msgid "swish!" -msgstr "" +msgstr "suishh!" #: lang/json/furniture_from_json.py msgid "clattering metal!" -msgstr "" +msgstr "golpes metálicos!" #: lang/json/furniture_from_json.py msgid "open privacy curtain" -msgstr "" +msgstr "abrir cortina de privacidad" #. ~ Description for open privacy curtain #: lang/json/furniture_from_json.py msgid "Stop peeking!" -msgstr "" +msgstr "¡Dejá de espiar!" #: lang/json/furniture_from_json.py msgid "glowing tendril" -msgstr "" +msgstr "zarcillo brillante" #. ~ Description for glowing tendril #: lang/json/furniture_from_json.py @@ -115856,14 +117221,16 @@ msgid "" "A willowy tendril growing from the floor, gently waving back and forth. A " "faint light spills from it." msgstr "" +"Es un zarcillo esbelto que crece desde el suelo, meciéndose gentilmente " +"hacia atrás y adelante. Una suave luz se desprende de él." #: lang/json/furniture_from_json.py msgid "splorch!" -msgstr "" +msgstr "splorch!" #: lang/json/furniture_from_json.py msgid "wafting anemone" -msgstr "" +msgstr "anémona flotante" #. ~ Description for wafting anemone #: lang/json/furniture_from_json.py @@ -115872,10 +117239,13 @@ msgid "" "tendrils pouring out of it. It looks almost exactly like a sea anemone, " "even waving gently as though underwater." msgstr "" +"Es una protuberancia carnosa blanca que crece del suelo, con un grupo de " +"zarcillos saliendo de ella. Es casi igual a una anémona de mar, incluso se " +"mece suavemente como si estuviera bajo el agua." #: lang/json/furniture_from_json.py msgid "gasping tube" -msgstr "" +msgstr "tubo de respiración" #. ~ Description for gasping tube #: lang/json/furniture_from_json.py @@ -115885,10 +117255,14 @@ msgid "" "series of ports somewhat like mouths, from which pour bursts of a vile-" "smelling gas." msgstr "" +"Es una estalactita carnosa verde con una piel gruesa como el de una estrella" +" de mar, que se extiende desde el suelo hasta el techo. En el medio hay una " +"serie de puertos que parecen bocas, desde las cuales expulsa unas nubes de " +"gas de olor repugnante." #: lang/json/furniture_from_json.py msgid "twitching frond" -msgstr "" +msgstr "fronda moviente" #. ~ Description for twitching frond #: lang/json/furniture_from_json.py @@ -115897,10 +117271,13 @@ msgid "" " air. Every so often, a cascade of energy arcs along it and discharges into" " the ceiling." msgstr "" +"Es una espina que se parece a las antenas de las polillas, que sobresale del" +" suelo, meciéndose suavemente en el aire. Cada tanto, una cascada de energía" +" pasa por ella y se descarga en el techo." #: lang/json/furniture_from_json.py msgid "scarred lump" -msgstr "" +msgstr "bulto cicatrizado" #. ~ Description for scarred lump #: lang/json/furniture_from_json.py @@ -115908,10 +117285,12 @@ msgid "" "This is a pile of nondescript alien flesh, twitching and belching strange " "gases out of injured orifices." msgstr "" +"Es una pila de carne alienígena indescriptible, que se retuerce y escupe " +"unos gases extraños desde sus orificios." #: lang/json/furniture_from_json.py msgid "slimy pod" -msgstr "" +msgstr "vaina babosa" #. ~ Description for slimy pod #: lang/json/furniture_from_json.py @@ -115920,10 +117299,13 @@ msgid "" "in a thick mucus, obscuring whatever is floating in the gel-like substance " "inside." msgstr "" +"Es una vaina translúcida y escurridiza suspendido en un tallo fino. Está " +"cubierta de una mucosidad espesa, oscureciendo lo que sea que está flotando " +"en la sustancia parecida al gel de su interior." #: lang/json/furniture_from_json.py msgid "organ pod" -msgstr "" +msgstr "vaina orgánica" #. ~ Description for organ pod #: lang/json/furniture_from_json.py @@ -115932,10 +117314,13 @@ msgid "" " dimly outlined shape of human organs, floating in some kind of preservative" " goo." msgstr "" +"Es una vaina translúcida suspendido en un tallo fino. Adentro podés ver " +"apenas la forma de órganos humanos, flotando en una especie de viscosidad " +"que los preserva." #: lang/json/furniture_from_json.py msgid "resin pod" -msgstr "" +msgstr "vaina de resina" #. ~ Description for resin pod #: lang/json/furniture_from_json.py @@ -115944,10 +117329,13 @@ msgid "" "clear resinous-looking fluid. You could fairly easily tear it from the " "stalk and take it with you." msgstr "" +"Es una vaina translúcida suspendido en un tallo fino. Adentro tiene un " +"fluido limpio y claro similar a una resina. Podés arrancarlo con facilidad y" +" llevártelo." #: lang/json/furniture_from_json.py msgid "fleshy altar" -msgstr "" +msgstr "altar cárnico" #. ~ Description for fleshy altar #: lang/json/furniture_from_json.py @@ -115957,6 +117345,10 @@ msgid "" "unidentifiable appendages reach from the sides, suggesting a sort of " "nightmarish living autodoc." msgstr "" +"Esta protuberancia palpitante sale del suelo, sus costados están cubiertos " +"por una piel escamada y purulenta. Su superficie es plana pero suavemente " +"ondulada. Un puñado de apéndices inidentificables salen de los costados, " +"asemejando una especie de autodoc viviente y pesadillesco." #: lang/json/furniture_from_json.py msgid "bathtub" @@ -115969,6 +117361,9 @@ msgid "" "fixed over the drain. Watertight and relatively clean, it would make for a " "good water trough." msgstr "" +"Es una bañadera común de cerámica con canillas de acero ahora inútiles, y un" +" tapón atado sobre el desagüe. Hermética y relativamente limpia, puede " +"funcionar para almacenar agua." #: lang/json/furniture_from_json.py msgid "porcelain breaking!" @@ -115989,6 +117384,9 @@ msgid "" "cleaning oneself. Before it was a commonplace amenity, but now it's hard to" " imagine wasting that much water." msgstr "" +"Es un pequeño espacio cerrado con puerta de vidrio y elementos de plomería " +"para bañarse. Antes era una instalación común pero ahora es difícil " +"imaginarse gastando tanta agua." #: lang/json/furniture_from_json.py msgid "sink" @@ -116000,6 +117398,8 @@ msgid "" "A porcelain water basin with a water tap and drain, designed to be fitted " "into an opening on a countertop." msgstr "" +"Es una pileta de porcelana con canilla de agua y desagüe, diseñada para ser " +"puesta sobre una mesada." #: lang/json/furniture_from_json.py msgid "toilet" @@ -116013,6 +117413,10 @@ msgid "" "better than anything that would be in the bowl, it would not be the " "cleanest." msgstr "" +"Es una instalación invaluable en todo hogar y sería un milagro encontrar uno" +" que funcione. El tanque vertical puede contener una cantidad moderada de " +"agua, pero aunque sea mejor que la que está en el inodoro, tampoco es la más" +" limpia del mundo." #: lang/json/furniture_from_json.py msgid "water heater" @@ -116025,6 +117429,9 @@ msgid "" "temperatures. Now that there's no way to power it, the large tank could " "still be used to store large amounts of clean water." msgstr "" +"Es un tanque de metal aislado con un pequeño fuego que se usa para mantener " +"temperaturas cercanas al hervor. Ahora que no hay manera de usarlo, el " +"tanque puede ser usado para almacenar grandes cantidades de agua potable." #. ~ Description for water purifier #: lang/json/furniture_from_json.py @@ -116032,6 +117439,8 @@ msgid "" "This devices effectively sterilizes water, though without a lot of power and" " proper plumbing, it's only good for parts now." msgstr "" +"Este dispositivo esteriliza agua de manera efectiva, aunque sin energía y " +"cañerías adecuadas, solo sirven sus partes." #: lang/json/furniture_from_json.py msgid "exercise machine" @@ -116045,6 +117454,9 @@ msgid "" "huge, and using them without a spotter would be a good way to seriously " "injure yourself." msgstr "" +"Es un esquipo de pesas para entrenar la fuerza, con un par de pesos fijos en" +" las puntas de un caño resistente. Las pesas son enormes y usarlas sin un " +"asistente sería una buena manera de lesionarse." #: lang/json/furniture_from_json.py msgid "ball machine" @@ -116057,6 +117469,10 @@ msgid "" " motorized wheels that, if spun up, would fling the ball at moderate speeds." " Probably not the most effective ranged weapon against the undead." msgstr "" +"Es una máquina simple que lanza pelotas deportivas de diferentes tipos, con " +"un par de ruedas motorizadas que, cuando giran, lanzarán la pelota a una " +"velocidad moderada. Probablemente no sea el arma de distancia más efectiva " +"contra los muertos vivientes." #: lang/json/furniture_from_json.py msgid "pool table" @@ -116070,6 +117486,10 @@ msgid "" "While not the most useful as a normal table, there is a substantial amount " "of wood." msgstr "" +"Es una mesa grande de madera con fieltro verde cubriendo la parte superior y" +" unos agujeros simétricos que llevan las bolas de billar hacia un lado de la" +" mesa con una abertura. Aunque no es tan útil como una mesa normal, tiene " +"una cantidad considerable de madera." #: lang/json/furniture_from_json.py msgid "diving block" @@ -116081,6 +117501,8 @@ msgid "" "A chunky plastic stool bolted onto the ground, intended as a safe way of " "diving forward into a body of water." msgstr "" +"Es una banqueta robusta de plástico atornillada al suelo, diseñada como una " +"forma segura de usar para tirarse un clavado al agua." #: lang/json/furniture_from_json.py msgid "target" @@ -116095,6 +117517,11 @@ msgid "" "small dents and holes, and a large amount of the paint has flaked or chipped" " off." msgstr "" +"Es una lámina grande de metal puesta verticalmente en una estructura de " +"caños. La lámina está cortada en forma de silueta humana. Tiene dos blancos " +"dibujados, uno grande en el torso y otro más chico en la cabeza. Está " +"acribillada de agujeritos y abolladuras y una gran cantidad de pintura se le" +" ha salido." #: lang/json/furniture_from_json.py msgid "arcade machine" @@ -116106,6 +117533,9 @@ msgid "" "A bulky upright arcade cabinet, brightly painted and slightyly worn with " "age. Useless for its intended purpose, it's bound to have valuable parts." msgstr "" +"Es un mueble voluminoso vertical, pintado de colores brillantes y un poco " +"desgastado por el paso del tiempo. Ya no sirve para su propósito original, " +"pero tiene partes valiosas." #: lang/json/furniture_from_json.py msgid "pinball machine" @@ -116119,6 +117549,10 @@ msgid "" " inoperable without power, it's still impressive to look at, though probably" " more useful if disassembled." msgstr "" +"Es un juego icónico, esta máquina es una intrincada trayectoria con " +"obstáculos con un fondo decorado con colores brillantes, cubierta con un " +"vidrio grande. Aunque no funciona sin alimentación eléctrica, todavía es " +"impresionante a la vista, aunque va a ser más útil desarmada." #: lang/json/furniture_from_json.py msgid "ergometer" @@ -116131,6 +117565,9 @@ msgid "" " a boat. Without power it can't be operated, but it might have useful parts" " to be scavanged." msgstr "" +"Es una máquina de ejercicios con un grupo de manijas y platos diseñados para" +" emular la acción de remar en un bote. Sin alimentación eléctrica no puede " +"ser utilizada, pero tiene algunas partes útiles que se pueden recuperar." #: lang/json/furniture_from_json.py msgid "treadmill" @@ -116143,6 +117580,9 @@ msgid "" "Without power, it's an immense challenge to move the belt. Regardless, " "you're probably getting enough cardio on your own." msgstr "" +"Es una cinta transportadora motorizada con un panel de control para poder " +"correr en el lugar. Sin alimentación eléctrica, es un desafío inmenso mover " +"la cinta. Sin embargo, ya debés estar ejercitándote lo suficiente." #: lang/json/furniture_from_json.py msgid "heavy punching bag" @@ -116155,6 +117595,9 @@ msgid "" "a steel chain. It can be used for exercise and combat training, with the " "notable advantage that it doesn't fight back." msgstr "" +"Es una bolsa de cuero pesada de forma rectangular colgada del techo con una " +"cadena de acero. Puede ser usada para ejercitarse y para entrenamiento de " +"combate, con la notable ventaja de que no te devuelve las piñas." #: lang/json/furniture_from_json.py msgid "whud." @@ -116171,6 +117614,9 @@ msgid "" "player. A set of off-white and black keys all linked to a set of hammers, " "which strike their corresponding tightly-coiled wire to produce sound." msgstr "" +"Es un piano elegante capaz de producir una música hermosa si lo utiliza un " +"pianista cualificado. Es un conjunto de teclas blancas y negras unidas a " +"martillos que golpean sus correspondientes cuerdas para producir el sonido." #: lang/json/furniture_from_json.py msgid "a suffering piano!" @@ -116182,7 +117628,7 @@ msgstr "kerchang." #: lang/json/furniture_from_json.py msgid "speaker cabinet" -msgstr "" +msgstr "gabinete de parlante" #. ~ Description for speaker cabinet #: lang/json/furniture_from_json.py @@ -116191,10 +117637,13 @@ msgid "" " deafening volume level. While this is a terrible idea to use now, it could" " hold useful parts." msgstr "" +"Es como un gabinete vertical de madera para parlantes grandes, construido " +"para producir un volumen potencialmente ensordecedor. Aunque ahora sería una" +" espantosa idea usarlo, puede contener algunas partes útiles." #: lang/json/furniture_from_json.py msgid "dancing pole" -msgstr "" +msgstr "caño de baile" #. ~ Description for dancing pole #: lang/json/furniture_from_json.py @@ -116203,10 +117652,13 @@ msgid "" "floor. Usually used for various forms of dancing, often in adult-oriented " "venues." msgstr "" +"Es un caño de acero largo puesto verticalmente, amurado al techo y al piso. " +"Comúnmente se utiliza para varios estilos de danza, a menudo orientados a " +"adultos." #: lang/json/furniture_from_json.py msgid "roulette table" -msgstr "" +msgstr "mesa de ruleta" #. ~ Description for roulette table #: lang/json/furniture_from_json.py @@ -116215,6 +117667,10 @@ msgid "" "painted onto the felt top, and a concave spinning wheel intended to give a " "random selection of the inscribed possibilities." msgstr "" +"Es una mesa enorme especialmente pensada para una forma específica de " +"apuestas, con una cuadrícula pintada sobre el fieltro superior, y una rueda " +"giratoria cóncava diseñada para seleccionar aleatoriamente las posibilidades" +" escritas." #: lang/json/furniture_from_json.py msgid "this should never actually show up, it's a pseudo furniture" @@ -116230,7 +117686,7 @@ msgstr "" #: lang/json/furniture_from_json.py msgid "cell phone signal booster" -msgstr "" +msgstr "aumentador de señal celular" #. ~ Description for cell phone signal booster #: lang/json/furniture_from_json.py @@ -116239,14 +117695,17 @@ msgid "" "them to reach further destinations with more clarity. Now that there's no " "longer signals for them to boost, they're only good for parts." msgstr "" +"Es un pedazo de equipamiento especializado para recibir señales telefónicas " +"y amplificarlas para alcanzar destinos más alejados con mayor claridad. " +"Ahora que no hay señales que amplificar, solo es útil por sus partes." #: lang/json/furniture_from_json.py msgid "womp!" -msgstr "" +msgstr "womp!" #: lang/json/furniture_from_json.py msgid "satellite dish" -msgstr "" +msgstr "antena satelital" #. ~ Description for satellite dish #: lang/json/furniture_from_json.py @@ -116255,10 +117714,13 @@ msgid "" "satellites. Satellites that will assuredly continue to orbit, with nothing " "to broadcast." msgstr "" +"Es un pequeño disco de metal diseñado para recibir ondas de radios de los " +"satélites orbitales. Esos satélites seguramente continúan orbitando sin " +"ninguna señal que transmitir." #: lang/json/furniture_from_json.py msgid "chimney crown" -msgstr "" +msgstr "chimenea exterior" #. ~ Description for chimney crown #: lang/json/furniture_from_json.py @@ -116266,10 +117728,13 @@ msgid "" "The top of a brick chimney, the opening is stained black with soot. " "Definitely too narrow to fit in." msgstr "" +"Es la parte superior externa de ladrillos de la chimenea, la abertura está " +"manchada de negro con hollín. Definitivamente, muy fina como para entrar por" +" ahí." #: lang/json/furniture_from_json.py msgid "TV antenna" -msgstr "" +msgstr "antena de televisión" #. ~ Description for TV antenna #: lang/json/furniture_from_json.py @@ -116278,10 +117743,13 @@ msgid "" "broadcasts. Almost wholly obsolete for years, only being good for parts " "isn't new for this item." msgstr "" +"Es una simple antena de metal que incrementa la recepción de las transmisión" +" de televisión de aire. Casi completamente obsoleta desde hace años, solo " +"sirve por sus componentes." #: lang/json/furniture_from_json.py msgid "vent pipe" -msgstr "" +msgstr "caño de ventilación" #. ~ Description for vent pipe #: lang/json/furniture_from_json.py @@ -116289,10 +117757,13 @@ msgid "" "A sort of chimney spout for a building's internal ventilation system, this " "can be used for circulation, venting fumes, and other such functions." msgstr "" +"Es una especie de boca de chimenea del sistema de ventilación interno de un " +"edificio. Puede usarse para circulación, ventilar gases y otras funciones " +"similares." #: lang/json/furniture_from_json.py msgid "roof turbine vent" -msgstr "" +msgstr "ventilación de turbina de techo" #. ~ Description for roof turbine vent #: lang/json/furniture_from_json.py @@ -116301,10 +117772,13 @@ msgid "" " It is most commonly used for improving air cicrulation, particularly in " "poorly-ventilated areas like attics." msgstr "" +"Es una turbina de viento giratoria que utiliza el viento para extraer el " +"aire de adentro. Es comúnmente usado para mejorar la circulación de aire, " +"particularmente en áreas mal ventiladas como los altillos." #: lang/json/furniture_from_json.py msgid "bale of hay" -msgstr "" +msgstr "atado de heno" #. ~ Description for bale of hay #: lang/json/furniture_from_json.py @@ -116313,6 +117787,8 @@ msgid "" "for livestock. If your only other option is the floor, it makes a tolerable" " bed." msgstr "" +"Es un enorme bloque de heno que lo hace fácil para almacenar para el ganado." +" Si tu otra opción es el suelo, se puede usar como una aceptable cama." #: lang/json/furniture_from_json.py msgid "whish!" @@ -116329,6 +117805,9 @@ msgid "" "through, and a large fire hazard, it's probably best to shovel it out of the" " way." msgstr "" +"Es una gran cantidad de astillas de madera. Muy desagradable para acostarse " +"encima, difícil para caminar y un gran peligro de incendio, es probablemente" +" mejor agarrar la pala y sacarlas." #: lang/json/furniture_from_json.py msgid "bench" @@ -116340,6 +117819,9 @@ msgid "" "A simple bench with wood slats nailed to a frame. While uncomfortably flat " "and just as cold as the ground, it could serve as a bed if needed." msgstr "" +"Es un banco simple con tablas de madera clavadas a la estructura. Aunque es " +"incómodamente plano y tan frío como el piso, puede funcionar como cama si es" +" necesario." #: lang/json/furniture_from_json.py msgid "arm chair" @@ -116351,10 +117833,12 @@ msgid "" "A simple upholstered chair with armrests. Soft and fairly warm, it " "definitely beats the ground for sleeping on, though not by much." msgstr "" +"Es una simple silla tapizada con apoyabrazos. Suave y bastante calentita, es" +" definitivamente mejor que dormir en el suelo, aunque por poco." #: lang/json/furniture_from_json.py msgid "airplane seat" -msgstr "" +msgstr "asiento de avión" #. ~ Description for airplane seat #: lang/json/furniture_from_json.py @@ -116362,6 +117846,9 @@ msgid "" "A cheaply upholstered folding airplane seat, it has a simple across-the-lap " "seatbelt. You likely wouldn't be the first to sleep in this." msgstr "" +"Es un asiento plegable barato y tapizado de avión, con un cinturón de " +"seguridad simple que cruza la cintura. Seguramente no seas el primero en " +"dormir en uno de estos." #: lang/json/furniture_from_json.py msgid "chair" @@ -116374,6 +117861,10 @@ msgid "" "rest your feet for once, and if coupled with a suitable table, you could eat" " a meal properly and almost pretend that things were normal again." msgstr "" +"Es una simple silla de madera con cuatro patas, asiento y respaldo. Está " +"buena para descansar las aptas y si se la usa con una mesa adecuada, podrías" +" comer de manera apropiada y casi pretender que las cosas son normales otra " +"vez." #: lang/json/furniture_from_json.py msgid "sofa" @@ -116386,6 +117877,9 @@ msgid "" "alongside one another, or one person to lay back on. It's not quite a bed, " "but it's a hell of a lot more comfortable than the floor." msgstr "" +"Es un banco ancho tapizado, lo suficientemente grande para que dos personas " +"se sienten cómodamente uno al lado del otro, o para que una persona se " +"recueste. No es una cama pero es mucho más cómodo que el piso." #: lang/json/furniture_from_json.py msgid "stool" @@ -116398,6 +117892,9 @@ msgid "" "maneuverable to sit on, the lack of back support means it's significantly " "less comfortable than a normal chair." msgstr "" +"Es una banqueta simple con cuatro patas y asiento. Aunque es un toque más " +"fácil para sentarse, la ausencia de apoyo para la espalda significa que es " +"menos cómoda que una silla normal." #. ~ Description for camp chair #: lang/json/furniture_from_json.py @@ -116405,10 +117902,12 @@ msgid "" "A somewhat uncomfortable folding chair, with fabric strung across a metal " "frame. Not the best, but better than nothing, and a lot easier to pack up." msgstr "" +"Es una silla plegable un poco incómoda, con tela encordada en la estructura " +"de metal. No es la mejor pero es mejor que nada, y muy fácil de guardar." #: lang/json/furniture_from_json.py msgid "log stool" -msgstr "" +msgstr "banco de tronco" #. ~ Description for log stool #: lang/json/furniture_from_json.py @@ -116416,10 +117915,12 @@ msgid "" "A short section from a tree trunk with one of the flat ends smoothed down. " "Makes for a decent place to sit, but not quite a real chair." msgstr "" +"Es un pedazo corto de tronco con una de las puntas alisada. Es un lugar para" +" sentarse decente pero no es una silla de en serio." #: lang/json/furniture_from_json.py msgid "deck chair" -msgstr "" +msgstr "reposera" #. ~ Description for deck chair #: lang/json/furniture_from_json.py @@ -116428,6 +117929,9 @@ msgid "" "it's built to take outdoor conditions and is an improvement over the ground," " it's not particularly comfortable." msgstr "" +"Es una reposera plegable con pedazos de tela puestas en una estructura de " +"madera. Aunque está fabricada para soportar las condiciones del exterior y " +"es una mejora con respecto al suelo, no es particularmente cómoda." #: lang/json/furniture_from_json.py msgid "bulletin board" @@ -116439,6 +117943,8 @@ msgid "" "A wide wooden frame with a sheet of corkboard inside. Good for pinning " "various notices for other survivors to read." msgstr "" +"Es una estructura ancha de madera con una plancha de corcho en su interior. " +"Sirve para pinchar noticias y que otros supervivientes las puedan ver." #: lang/json/furniture_from_json.py msgid "sign" @@ -116450,10 +117956,12 @@ msgid "" "A simple signpost made of wood. Basically two planks alongside each other " "nailed to another plank that holds them up." msgstr "" +"Es un simple cartel hecho de madera. Básicamente, son dos tablas juntas " +"clavadas a otra tabla que las sostiene." #: lang/json/furniture_from_json.py msgid "warning sign" -msgstr "" +msgstr "cartel de advertencia" #. ~ Description for warning sign #: lang/json/furniture_from_json.py @@ -116461,6 +117969,9 @@ msgid "" "A triangular signpost painted white with a red border. Designed to easily " "catch the eye, signs of this nature seldom display anything but bad news." msgstr "" +"Es un cartel triangular pintado de amarillo con el borde rojo. Diseñado para" +" atraer la vista fácilmente, los carteles de este tipo raramente muestran " +"otra cosa que malas noticias." #: lang/json/furniture_from_json.py lang/json/vehicle_part_from_json.py msgid "bed" @@ -116473,10 +117984,13 @@ msgid "" "pillows, and despite being a completely ordinary mattress, it's a sight for " "sore, tired eyes." msgstr "" +"Es un colchón estándar en una estructura resistente de madera. Incluso sin " +"sábanas ni almohadas, y a pesar de ser un colchón completamente ordinario, " +"es un espectáculo para ojos cansados y doloridos." #: lang/json/furniture_from_json.py msgid "bunk bed" -msgstr "" +msgstr "cucheta" #. ~ Description for bunk bed #: lang/json/furniture_from_json.py @@ -116486,10 +118000,14 @@ msgid "" " you'd like to somebody you wouldn't normally want to share a mattress with," " a bed's a bed." msgstr "" +"Es una cama cucheta en una estructura resistente de madera construida para " +"dos colchones simples. Aunque esto significa dormir más cerca de lo que te " +"gustaría de alguien con el que nunca compartirías el colchón, una cama es " +"una cama." #: lang/json/furniture_from_json.py msgid "bed frame" -msgstr "" +msgstr "marco de cama" #. ~ Description for bed frame #: lang/json/furniture_from_json.py @@ -116497,10 +118015,13 @@ msgid "" "A sturdy wooden bed frame built to hold most standard mattresses. Despite " "being one half of a bed, it's just about impossible to lay on by itself." msgstr "" +"Es un marco de cama resistente de madera, construido para sostener un " +"colchón común. A pesar de ser la mitad de una cama, es casi imposible " +"acostarse ahí." #: lang/json/furniture_from_json.py msgid "whack." -msgstr "" +msgstr "whack." #. ~ Description for mattress #: lang/json/furniture_from_json.py @@ -116509,6 +118030,9 @@ msgid "" " entire bed without the mattress, it's pretty close. If it's someplace " "actually safe to sleep, it's practically a luxury in of itself." msgstr "" +"Es un colchón comunacho tirado en el piso. Aunque no es tan cómodo como una " +"cama entera, se asemeja bastante. Es un lugar bastante seguro para dormir, y" +" es casi un lujo por sí mismo." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py src/map.cpp @@ -116523,6 +118047,9 @@ msgid "" "it's someplace actually safe to sleep, it's practically a luxury in of " "itself." msgstr "" +"Es un colchón blando relleno de plumas tirado en el suelo. Aunque no es tan " +"cómodo como una cama completa, se asemeja bastante. Es un lugar bastante " +"seguro para dormir, y es casi un lujo por sí mismo." #: lang/json/furniture_from_json.py msgid "makeshift bed" @@ -116535,6 +118062,9 @@ msgid "" " bed, albeit with a slightly lumpy mattress. Considering the circumstances," " it's not too bad at all." msgstr "" +"Es un colchón improvisado en un marco endeble de madera. Casi tan bueno como" +" una cama, aunque tenga un colchón un poco aplastado. Considerando las " +"circunstancias, no está tan mal." #: lang/json/furniture_from_json.py msgid "straw bed" @@ -116546,10 +118076,12 @@ msgid "" "An improvised bedding pile made of hay. Better than nothing, but not " "particularly comfortable, and quite itchy." msgstr "" +"Es una pila improvisada para dormir hecha de heno. Mejor que nada pero no es" +" particularmente cómoda, y pica un poco." #: lang/json/furniture_from_json.py msgid "bookcase" -msgstr "" +msgstr "biblioteca" #. ~ Description for bookcase #: lang/json/furniture_from_json.py @@ -116557,10 +118089,13 @@ msgid "" "A simple wooden shelf for storing dozens of books. While designed for " "books, it does a decent job of storing anything else that'll fit." msgstr "" +"Es un estante simple de madera para poner docenas de libros. Aunque fue " +"diseñada para poner libros, puede funcionar bien poniendo cualquier cosa que" +" entre." #: lang/json/furniture_from_json.py msgid "entertainment center" -msgstr "" +msgstr "centro de entretenimiento" #. ~ Description for entertainment center #: lang/json/furniture_from_json.py @@ -116569,6 +118104,9 @@ msgid "" " cabinet can store a variety of things, like a TV and media systems, with " "shelving space and cupboards for anything that'll fit." msgstr "" +"Aunque por sí solo no es tan copado como supone su nombre, este armario " +"grande de madera puede almacenar una variedad de cosas, como un televisor y " +"sistemas de audio, con estantes y alacenas para poner lo que pueda entrar." #: lang/json/furniture_from_json.py msgid "coffin" @@ -116582,6 +118120,10 @@ msgid "" "to be given a proper final resting place. An honor that countless many will" " likely never receive." msgstr "" +"Es un humilde féretro de madera para el velorio respetuoso de los muertos. " +"Aunque era una práctica normal antes de todo esto, ahora es un honor raro " +"que alguien pueda tener un lugar de descanso final apropiado. Un honor que " +"muchísimos jamás recibirán." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py msgid "wham!" @@ -116599,6 +118141,10 @@ msgid "" "to be given a proper final resting place. This one is open and unoccupied, " "and gazing inside fills you with a sense of melancholic weariness." msgstr "" +"Es un humilde féretro de madera para el velorio respetuoso de los muertos. " +"Aunque era una práctica normal antes de todo esto, ahora es un honor raro " +"que alguien pueda tener un lugar de descanso final apropiado. Este está " +"abierto y vacío, y al mirar adentro te hace sentir una fatiga melancólica." #: lang/json/furniture_from_json.py msgid "crate" @@ -116611,6 +118157,9 @@ msgid "" "about anything inside. If you don't have a proper tool to pry it open, " "smashing it is an option, albeit one that risks destroying the contents." msgstr "" +"Es un recipiente sellado de madera. No tiene ninguna etiqueta, podría tener " +"cualquier cosa adentro. Si no tenés la herramienta adecuada para abrirla, " +"romperla es una opción, aunque corrés el riesgo de romper el contenido." #: lang/json/furniture_from_json.py msgid "open crate" @@ -116623,6 +118172,9 @@ msgid "" "lid has been pried off and is leaned adjacent to it, and with a fresh set of" " nails, could be sealed back shut." msgstr "" +"Es una caja abierta de madera, capaz de almacenar una cantidad de cosas. La " +"tapa ha sido abierta y está apoyada en un costado, y con unos clavos nuevos " +"se podría volver a cerrar." #. ~ Description for large cardboard box #: lang/json/furniture_from_json.py @@ -116632,10 +118184,14 @@ msgid "" "for carrying, it's very hard to see out of, and won't do anything to protect" " you if you're found." msgstr "" +"Es una caja grande hecha de un material marrón basado en papel. Puede " +"contener una cantidad de cosas o incluso te podés esconder adentro. " +"Considerando que solo tiene dos agujeros para trasladarla, si te metés es " +"muy difícil mirar para afuera y no te va a proteger nada si te encuentran." #: lang/json/furniture_from_json.py msgid "crumple!" -msgstr "" +msgstr "arrugado!" #: lang/json/furniture_from_json.py src/ballistics.cpp msgid "thud." @@ -116651,10 +118207,13 @@ msgid "" "A simple wooden cabinet with a column of short drawers. While intended for " "storing clothes, there's nothing stopping you from storing whatever fits." msgstr "" +"Es un simple armario de madera con una columna de cajones cortos. Aunque su " +"intención era contener ropa, no hay nada que evite que pongas cualquier cosa" +" que entre adentro." #: lang/json/furniture_from_json.py msgid "glass front cabinet" -msgstr "" +msgstr "armario con vidrio" #. ~ Description for glass front cabinet #: lang/json/furniture_from_json.py @@ -116663,6 +118222,9 @@ msgid "" "contents. Often used for displaying rare, visually pleasing, or otherwise " "valuable goods, it's odd that it doesn't have a lock." msgstr "" +"Es un armario alto de metal con una lámina de vidrio en la parte frontal " +"para poder ver su contenido. A menudo se usa para mostrar cosas raras, " +"visualmente agradables o de valor, y es raro que no tenga cerradura." #: lang/json/furniture_from_json.py lang/json/furniture_from_json.py #: lang/json/terrain_from_json.py lang/json/terrain_from_json.py @@ -116682,6 +118244,10 @@ msgid "" "ammunition. If you had something to listen close with and a hell of a lot " "of time, you could probably crack it." msgstr "" +"Es un armario grande y pesado con paredes gruesas de metal y una cerradura " +"de combinación rotativa, diseñado para guardar de manera segura cosas como " +"armas y sus modificaciones, y munición. Si tenés algo para poder escuchar de" +" cerca y un montón de tiempo, podrías intentar abrirla." #: lang/json/furniture_from_json.py msgid "screeching metal!" @@ -116698,6 +118264,9 @@ msgid "" "Unfortunately, the lock is completely broken, and short of some pretty " "serious machinery, you have no possible way of opening it." msgstr "" +"Es una caja fuerte pesada y resistente de metal para guardar armas y " +"municiones. Lamentablemente, la cerradura está totalmente rota y si no tenés" +" maquinaria serie, no vas a tener manera de abrirla." #: lang/json/furniture_from_json.py msgid "electronic gun safe" @@ -116711,6 +118280,10 @@ msgid "" "ammunition. If you had some way of hacking into it, you could probably " "crack it open." msgstr "" +"Es un armario grande y pesado con paredes gruesas de metal y un sistema de " +"cerradura electrónica, diseñado para guardar de manera segura cosas como " +"armas y sus modificaciones, y munición. Si tenés alguna manera de hackear el" +" sistema, podés intentar abrirla." #: lang/json/furniture_from_json.py msgid "locker" @@ -116722,6 +118295,7 @@ msgid "" "A tall sheet metal cabinet, useful for storing just about anything that'll " "fit." msgstr "" +"Es un armario alto de metal, útil para guardar cualquier cosa que entre." #: lang/json/furniture_from_json.py msgid "mailbox" @@ -116734,10 +118308,13 @@ msgid "" "deliveries. Although considering the circumstances, it will likely never " "see proper use again." msgstr "" +"Es una pequeña caja de metal sobre un poste de madera, diseñada para recibir" +" correo. Aunque considerando las circunstancias, nunca más va a servir para " +"esa función." #: lang/json/furniture_from_json.py msgid "clothing rail" -msgstr "" +msgstr "perchero burro" #. ~ Description for clothing rail #: lang/json/furniture_from_json.py @@ -116746,6 +118323,9 @@ msgid "" " Usually used in theater or retail environments, it's easy to use and quick" " to access." msgstr "" +"Es una estructura de metal con un grupo de ruedas usado para colgar grandes " +"cantidades de ropa. Comúnmente usado en teatros o locales de ropa, es fácil " +"de usar y de rápido acceso." #: lang/json/furniture_from_json.py msgid "display rack" @@ -116757,10 +118337,12 @@ msgid "" "A sheet metal shelving unit, with the storage surfaces angled in such a way " "as to show off the items stored." msgstr "" +"Son unos estantes de metal con las superficies en ángulo para poder ver lo " +"que contiene." #: lang/json/furniture_from_json.py msgid "wooden rack" -msgstr "" +msgstr "estante de madera" #. ~ Description for wooden rack #: lang/json/furniture_from_json.py @@ -116768,6 +118350,8 @@ msgid "" "A wooden shelving unit with angled storage surfaces designed to show off " "whatever is stored on it." msgstr "" +"Son unos estantes de madera con las superficies en ángulo, diseñada para " +"poder ver lo que contiene." #: lang/json/furniture_from_json.py msgid "coat rack" @@ -116779,6 +118363,8 @@ msgid "" "A tall wooden pole with a set of hooks used to store outdoor jackets and " "hats to allow easy access." msgstr "" +"Es un palo largo de madera con un grupo de ganchos usado para colgar " +"camperas y sombreros, y tenerlas de fácil acceso." #: lang/json/furniture_from_json.py msgid "recycle bin" @@ -116792,6 +118378,10 @@ msgid "" "factory, the drastic change in priorities as of late means that these may " "hold valuable materials." msgstr "" +"Es una papelera grande de plástico pintada de verde con el símbolo de " +"'reciclar' pintado. Aunque su intención era almacenar cosas desechadas para " +"ser procesadas nuevamente en una fábrica, el drástico cambio de prioridades " +"reciente significa que puede contener materiales valiosos." #: lang/json/furniture_from_json.py msgid "safe" @@ -116803,6 +118393,8 @@ msgid "" "A small, heavy, and near-unbreachable metal box with a rotary combination " "lock. Although, this isn't actually locked, just closed." msgstr "" +"Es una caja de metal chica, pesada y casi indestructible con una cerradura " +"de combinación rotativa. Aunque esta no está cerrada con la combinación." #. ~ Description for safe #: lang/json/furniture_from_json.py @@ -116811,6 +118403,9 @@ msgid "" "lock. With something to listen really closely and a hell of a lot of time, " "you might be able to crack it." msgstr "" +"Es una caja de metal chica, pesada y casi indestructible con una cerradura " +"de combinación rotativa. Con algo para escuchar de cerca y mucho tiempo, " +"podrías intentar abrirla." #: lang/json/furniture_from_json.py msgid "open safe" @@ -116822,6 +118417,9 @@ msgid "" "A small, heavy, and near-unbreachable metal box with a rotary combination " "lock, albeit significantly less secure with the door open." msgstr "" +"Es una caja de metal chica, pesada y casi indestructible con una cerradura " +"de combinación rotativa, aunque así con la puerta abierta no es muy segura " +"que digamos." #: lang/json/furniture_from_json.py msgid "trash can" @@ -116834,6 +118432,9 @@ msgid "" "Although, considering the circumstances, it might be worth seeing what's " "inside." msgstr "" +"Es una papelera de plástico para almacenar desechos para ser tiradas luego. " +"Aunque considerando las circunstancias, puede ser buena idea ver lo que " +"tiene adentro." #: lang/json/furniture_from_json.py msgid "wardrobe" @@ -116846,6 +118447,8 @@ msgid "" "closet. Could technically be used to store anything else that would fit, " "though." msgstr "" +"Es un armario muy grande de madera para guardar ropa, un ropero vertical. " +"Aunque, técnicamente, puede ser usado para guardar cualquier cosa que entre." #: lang/json/furniture_from_json.py msgid "filing cabinet" @@ -116857,10 +118460,12 @@ msgid "" "A rack of metal drawers designed to hold various files and paperwork. " "Paperwork that has more than likely lost all worth or value by now." msgstr "" +"Son estantes de cajones de metal diseñados para contener varios archivos y " +"papeles. Papeles que es bastante seguro que ya han perdido todo su valor." #: lang/json/furniture_from_json.py msgid "utility shelf" -msgstr "" +msgstr "estantería de metal" #. ~ Description for utility shelf #: lang/json/furniture_from_json.py @@ -116868,16 +118473,21 @@ msgid "" "A simple heavy-duty plastic and metal shelving unit, intended to store tools" " and materials for easy access to workers." msgstr "" +"Son unos simples estantes de plástico resistente y metal, con la intención " +"de almacenar herramientas y materiales que queden de fácil acceso para los " +"trabajadores." #: lang/json/furniture_from_json.py msgid "warehouse shelf" -msgstr "" +msgstr "estantería de depósito" #. ~ Description for warehouse shelf #: lang/json/furniture_from_json.py msgid "" "A huge, sturdy steel shelf for storing pallets of crates in warehouses." msgstr "" +"Son unos enormes estantes resistentes de metal para almacenar palés de cajas" +" en los depósitos." #: lang/json/furniture_from_json.py msgid "wooden keg" @@ -116889,6 +118499,8 @@ msgid "" "A large standing wooden barrel, completely watertight. Good for storing " "liquids of all kinds or fermenting alcohol." msgstr "" +"Es un tambor grande de madera completamente hermético. Es útil para " +"almacenar líquidos de toda clase o para fermentar alcohol." #: lang/json/furniture_from_json.py msgid "display case" @@ -116901,6 +118513,9 @@ msgid "" " Useful for storing valuable things while still showing them off. Not " "actually as secure as it looks, as the display windows are easily broken." msgstr "" +"Es una vitrina de madera que te llega a la cintura, con paneles de vidrio en" +" la parte superior. Es útil para guardar cosas de valor y poder mostrarlas. " +"No es muy segura como parece, porque el vidrio se puede romper fácilmente." #: lang/json/furniture_from_json.py msgid "broken display case" @@ -116914,6 +118529,9 @@ msgid "" "if the glass hadn't been shattered. Careful not to cut yourself when " "looting." msgstr "" +"Es una vitrina de madera que te llega a la cintura, con paneles de vidrio en" +" la parte superior. Podría ser útil para guardar cosas de valor y poder " +"mostrarlas, si el vidrio no estuviera roto. Tené cuidado de no cortarte." #: lang/json/furniture_from_json.py msgid "standing tank" @@ -116924,6 +118542,8 @@ msgstr "Tanque vertical" msgid "" "A huge metal tank that can be used to safely store large amounts of liquid." msgstr "" +"Es un tanque enorme de metal que puede contener de manera segura una gran " +"cantidad de líquido." #: lang/json/furniture_from_json.py msgid "dumpster" @@ -116936,10 +118556,13 @@ msgid "" "city's waste management any time soon. Despite the unpleasant nature of " "climbing inside, it could make for a viable hiding spot." msgstr "" +"Es un contenedor grande de metal que ya no creo que pase el basurero " +"vaciarlos. A pesar de la desagradable naturaleza de meterse adentro, puede " +"ser un escondite útil." #: lang/json/furniture_from_json.py msgid "butter churn" -msgstr "" +msgstr "mantequera" #. ~ Description for butter churn #: lang/json/furniture_from_json.py @@ -116947,6 +118570,9 @@ msgid "" "A metal tube with a built-in mixer for making butter. Rather than needing " "electricity, it is pedal-driven, allowing use without power." msgstr "" +"Es un tubo de metal con una mezcladora incluida para hacer manteca. En lugar" +" de necesitar alimentación eléctrica, tiene un pedal que te permite " +"utilizarla sin electricidad." #: lang/json/furniture_from_json.py msgid "counter" @@ -116970,7 +118596,7 @@ msgstr "Para guardar tus vasos." #: lang/json/furniture_from_json.py msgid "closed counter gate" -msgstr "" +msgstr "puerta mostrador cerrada" #. ~ Description for closed counter gate #. ~ Description for open counter gate @@ -116979,10 +118605,12 @@ msgid "" "A commercial quality swinging door made of wood that allows passage behind " "counters." msgstr "" +"Es una puerta vaivén comercial hecha de madera que permite pasar detrás de " +"los mostradores." #: lang/json/furniture_from_json.py msgid "open counter gate" -msgstr "" +msgstr "puerta mostrador abierta" #: lang/json/furniture_from_json.py msgid "desk" @@ -116991,7 +118619,7 @@ msgstr "escritorio" #. ~ Description for desk #: lang/json/furniture_from_json.py msgid "Sit down at it or work on it." -msgstr "" +msgstr "Sentate en él o trabajá en él." #. ~ Description for leather tarp #: lang/json/furniture_from_json.py @@ -117005,7 +118633,7 @@ msgstr "" #: lang/json/furniture_from_json.py msgid "plastic groundsheet" -msgstr "" +msgstr "lona plástica" #. ~ Description for plastic groundsheet #: lang/json/furniture_from_json.py @@ -117013,14 +118641,16 @@ msgid "" "A large sheet of thick plastic has been tossed on the ground here. It would" " be a useful place to do some butchery, perhaps." msgstr "" +"Es una gran lámina de plástico grueso que ha sido tirada en el suelo. Podría" +" ser útil para carnear algo, tal vez." #: lang/json/furniture_from_json.py msgid "whuff!" -msgstr "" +msgstr "whuff!" #: lang/json/furniture_from_json.py msgid "crinkle." -msgstr "" +msgstr "ondulado." #. ~ Description for fiber mat #: lang/json/furniture_from_json.py @@ -117039,6 +118669,8 @@ msgid "" "Small metal folding table, ideal for off-road trips into the wild. Can be " "used as a workbench in a pinch." msgstr "" +"Es una pequeña mesa metálica plegable, ideal para viajes por la naturaleza. " +"Puede ser usada como mesa de trabajo, si es necesario." #: lang/json/furniture_from_json.py lang/json/vehicle_part_from_json.py msgid "table" @@ -117052,7 +118684,7 @@ msgstr "¡Sentate cuando comés!" #. ~ Description for table #: lang/json/furniture_from_json.py msgid "a low table for livingrooms." -msgstr "" +msgstr "es una mesa para livings." #: lang/json/furniture_from_json.py msgid "tatami mat" @@ -117064,6 +118696,8 @@ msgid "" "A tatami is a type of mat used as a flooring material in traditional " "Japanese-style rooms." msgstr "" +"El tatami es un tipo de alfombra que se usa como piso en las habitaciones de" +" estilo tradicional japonés." #: lang/json/furniture_from_json.py msgid "pillow fort" @@ -117073,6 +118707,8 @@ msgstr "fuerte de almohadas" #: lang/json/furniture_from_json.py msgid "A comfy place to hide from the world. Not very defensible, though." msgstr "" +"Es un lugar cómodo para esconderse del mundo. No muy defensivo que digamos, " +"eso sí." #: lang/json/furniture_from_json.py msgid "paf!" @@ -117080,7 +118716,7 @@ msgstr "paf!" #: lang/json/furniture_from_json.py msgid "cardboard fort" -msgstr "" +msgstr "fuerte de cartón" #. ~ Description for cardboard fort #: lang/json/furniture_from_json.py @@ -117088,10 +118724,12 @@ msgid "" "A fort built by tipping a cardboard box on its side, lining it with " "blankets, and partly weather sealing it with a plastic sheet." msgstr "" +"Es un fuerte construido apilando cajas de cartón, cubriéndolas con sábanas y" +" haciéndolas un poco herméticas con una lámina de plástico." #: lang/json/furniture_from_json.py msgid "cardboard wall" -msgstr "" +msgstr "pared de cartón" #. ~ Description for cardboard wall #: lang/json/furniture_from_json.py @@ -117099,36 +118737,38 @@ msgid "" "This is a pile of cardboard boxes that have been filled with rags and junk " "and stacked together like bricks to form a wall." msgstr "" +"Es una pila de cajas de cartón que han sido llenadas con trapos y basura " +"apiladas como ladrillos para armar una pared." #: lang/json/furniture_from_json.py msgid "beaded curtain" -msgstr "" +msgstr "cortina de cuentas" #. ~ Description for beaded curtain #: lang/json/furniture_from_json.py msgid "This beaded curtain could be pulled aside." -msgstr "" +msgstr "Esta cortina de cuentas puede ser corrida." #: lang/json/furniture_from_json.py msgid "clickity clack… clack… clack" -msgstr "" +msgstr "clickity clack… clack… clack" #: lang/json/furniture_from_json.py msgid "clickity clack… clack" -msgstr "" +msgstr "clickity clack… clack" #: lang/json/furniture_from_json.py msgid "open beaded curtain" -msgstr "" +msgstr "cortina de cuentas abierta" #. ~ Description for open beaded curtain #: lang/json/furniture_from_json.py msgid "This beaded curtain has been pulled aside." -msgstr "" +msgstr "Esta cortina de cuentas ha sido corrida y está abierta." #: lang/json/furniture_from_json.py msgid "clickity clack… clack… clack!" -msgstr "" +msgstr "clickity clack… clack… clack!" #: lang/json/furniture_from_json.py msgid "canvas floor" @@ -117140,6 +118780,8 @@ msgid "" "Flooring made out of stretched, waterproof cloth. Helps keep the dirt out " "of the tent." msgstr "" +"Es un piso hecho con lona hermética estirada. Ayuda a mantener la mugre " +"afuera de la carpa." #: lang/json/furniture_from_json.py msgid "canvas wall" @@ -117148,7 +118790,7 @@ msgstr "pared de tela" #. ~ Description for canvas wall #: lang/json/furniture_from_json.py msgid "A wall made of stretched, waterproof cloth." -msgstr "" +msgstr "Es una pared hecha de lona hermética estirada." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py msgid "slap!" @@ -117157,7 +118799,7 @@ msgstr "¡slap!" #. ~ Description for canvas wall #: lang/json/furniture_from_json.py msgid "A wall made of stretched, heavy-duty, waterproof cloth." -msgstr "" +msgstr "Es una pared hecha de lona resistente hermética estirada." #: lang/json/furniture_from_json.py msgid "canvas flap" @@ -117166,7 +118808,7 @@ msgstr "solapa de tela" #. ~ Description for canvas flap #: lang/json/furniture_from_json.py msgid "This canvas flap door could be pulled aside." -msgstr "" +msgstr "Esta puerta de lona puede ser corrida." #: lang/json/furniture_from_json.py msgid "open canvas flap" @@ -117175,17 +118817,17 @@ msgstr "solapa abierta de tela" #. ~ Description for open canvas flap #: lang/json/furniture_from_json.py msgid "This canvas flap door has been pulled aside." -msgstr "" +msgstr "Esta puerta de lona ha sido corrida y está abierta." #. ~ Description for canvas flap #: lang/json/furniture_from_json.py msgid "This heavy canvas flap door could be pulled aside." -msgstr "" +msgstr "Esta puerta de lona resistente puede ser corrida." #. ~ Description for open canvas flap #: lang/json/furniture_from_json.py msgid "This heavy canvas flap door has been pulled aside." -msgstr "" +msgstr "Esta puerta de lona resistente ha sido corrida y está abierta." #: lang/json/furniture_from_json.py msgid "groundsheet" @@ -117194,12 +118836,12 @@ msgstr "lona impermeable" #. ~ Description for groundsheet #: lang/json/furniture_from_json.py msgid "This plastic groundsheet could keep you dry." -msgstr "" +msgstr "Esta lona plástica puede mantenerte seco." #. ~ Description for groundsheet #: lang/json/furniture_from_json.py msgid "This large plastic groundsheet could keep you dry." -msgstr "" +msgstr "Esta lona plástica grande puede mantenerte seco." #. ~ Description for groundsheet #: lang/json/furniture_from_json.py @@ -117207,6 +118849,8 @@ msgid "" "This plastic government-issue groundsheet could keep you dry, but was made " "by the lowest bidder." msgstr "" +"Esta lona plástica brindada por el estado puede mantenerte seco, pero fue " +"hecha por el licitador más barato." #: lang/json/furniture_from_json.py msgid "animalskin wall" @@ -117225,7 +118869,7 @@ msgstr "solapa de piel de animal" #. ~ Description for animalskin flap #: lang/json/furniture_from_json.py msgid "This animal skin flap could be pulled aside." -msgstr "" +msgstr "Esta solapa de piel de animal puede ser corrida." #: lang/json/furniture_from_json.py msgid "open animalskin flap" @@ -117234,7 +118878,7 @@ msgstr "solapa abierta de piel de animal" #. ~ Description for open animalskin flap #: lang/json/furniture_from_json.py msgid "This animal skin flap has been pulled aside." -msgstr "" +msgstr "Esta solapa de piel de animal ha sido corrida y está abierta." #: lang/json/furniture_from_json.py msgid "animalskin floor" @@ -117243,7 +118887,7 @@ msgstr "piso de piel de animal" #. ~ Description for animalskin floor #: lang/json/furniture_from_json.py msgid "This animal skin groundsheet could keep you dry." -msgstr "" +msgstr "Esta lona de piel de animal puede mantenerte seco." #: lang/json/furniture_from_json.py msgid "pile of rubble" @@ -117265,7 +118909,7 @@ msgstr "pila de escombros de piedra" #. ~ Description for pile of rocky rubble #: lang/json/furniture_from_json.py msgid "Pile of rocks. Useless?" -msgstr "" +msgstr "Es una pila de piedras. ¿Sirve para algo?" #: lang/json/furniture_from_json.py msgid "pile of trashy rubble" @@ -117276,6 +118920,8 @@ msgstr "pila de escombros de basura" msgid "" "Trash topped with dirt and grass, it smells gross, but another man's trash…" msgstr "" +"Es basura con tierra y pasto arriba con olor desagradable, pero lo que para " +"un hombre es basura…" #: lang/json/furniture_from_json.py msgid "metal wreckage" @@ -117332,7 +118978,7 @@ msgstr "¿Cómo vas a hacer para mover esto?" #: lang/json/furniture_from_json.py msgid "street light" -msgstr "" +msgstr "farol de calle" #. ~ Description for street light #: lang/json/furniture_from_json.py @@ -117340,10 +118986,12 @@ msgid "" "Raised source of light which used to illuminate streets and their " "surrounding area, but it's useless without electricity." msgstr "" +"Es una fuente de luz elevada que antes iluminaba las calles y sus " +"alrededores, pero ahora sin electricidad no sirve para nada." #: lang/json/furniture_from_json.py msgid "traffic light" -msgstr "" +msgstr "semáforo" #. ~ Description for traffic light #: lang/json/furniture_from_json.py @@ -117351,10 +118999,13 @@ msgid "" "Signaling device positioned at road intersections and pedestrian crossings " "to control flows of traffic, but it's useless without electricity." msgstr "" +"Es un dispositivo de señalización puesto en las intersecciones de las calles" +" y pasos peatonales para controlar el flujo de tránsito, pero sin " +"electricidad no sirve para nada." #: lang/json/furniture_from_json.py msgid "utility pole" -msgstr "" +msgstr "poste de luz" #. ~ Description for utility pole #: lang/json/furniture_from_json.py @@ -117362,6 +119013,8 @@ msgid "" "A long wooden post which used to support overhead power lines and other " "public utilities, but it doesn't work anymore." msgstr "" +"Es un poste largo de madera que se usaba para sostener los cables de " +"electricidad y otros servicios, pero ahora no sirve de mucho." #: lang/json/furniture_from_json.py msgid "forge" @@ -117423,10 +119076,12 @@ msgid "" "An arc furnace designed to burn a powdery mix of coke and limestone to " "create calcium carbide." msgstr "" +"Es un horno de arco diseñado para quemar un polvo mezcla de coque y cal para" +" crear carburo de calcio." #: lang/json/furniture_from_json.py msgid "filled arc furnace" -msgstr "" +msgstr "horno de arco lleno" #: lang/json/furniture_from_json.py msgid "smoking rack" @@ -117439,6 +119094,9 @@ msgid "" "A special rack designed to smoke food for better preservation and taste. " "Works as a charcoal smoker in crafting recipes." msgstr "" +"Es un soporte especial diseñado para ahumar comida para que se conserve más " +"y tenga mejor sabor. Funciona como un ahumador de carbón en las " +"fabricaciones." #: lang/json/furniture_from_json.py msgid "active smoking rack" @@ -117455,7 +119113,7 @@ msgstr "" #: lang/json/furniture_from_json.py msgid "active metal smoking rack" -msgstr "" +msgstr "soporte metálico para ahumar activo" #. ~ Description for active metal smoking rack #: lang/json/furniture_from_json.py @@ -117475,6 +119133,9 @@ msgid "" "Metalworking station made of rock, typically used in combination with an " "anvil. Works as a charcoal forge in crafting recipes." msgstr "" +"Es una estación hecha de piedra para trabajar los metales, comúnmente " +"utilizada en combinación con un yunque. Funciona como una forja de carbón en" +" las fabricaciones." #: lang/json/furniture_from_json.py msgid "clay kiln" @@ -117492,10 +119153,12 @@ msgid "" "A short, foldable ladder. Can help you climb to a rooftop, or maybe slow " "something down." msgstr "" +"Es una silla corta y plegable. Te puede ayudar a subirte a un techo, o para " +"frenar algo." #: lang/json/furniture_from_json.py msgid "electric arc furnace" -msgstr "" +msgstr "horno de arco eléctrico" #. ~ Description for electric arc furnace #: lang/json/furniture_from_json.py @@ -117504,10 +119167,13 @@ msgid "" "heating things to extreme temperatures as part of industrial fabrication " "processes." msgstr "" +"No es la clase de horno con el que calentás tu casa, es un dispositivo para " +"calentar cosas a temperaturas extremas como parte de procesos de fabricación" +" industriales." #: lang/json/furniture_from_json.py msgid "drill press" -msgstr "" +msgstr "taladro de banco" #. ~ Description for drill press #: lang/json/furniture_from_json.py @@ -117516,10 +119182,13 @@ msgid "" "Useful in all kinds of projects from industrial fabrication to home " "woodworking." msgstr "" +"Es un taladro potente montado en un soporte que te permite bajarlo de manera" +" precisa. Útil para toda clase de proyectos, desde fabricaciones " +"industriales hasta trabajos hogareños en madera." #: lang/json/furniture_from_json.py msgid "tablesaw" -msgstr "" +msgstr "sierra circular de banco" #. ~ Description for tablesaw #: lang/json/furniture_from_json.py @@ -117527,10 +119196,12 @@ msgid "" "A rotating saw blade set into a large flat table, for making straight " "measured cuts. One of the key tools in a carpenter's arsenal." msgstr "" +"Es una cuchilla rotativa puesta en una mesa grande para hacer cortes rectos." +" Una herramienta clave en el arsenal del carpintero." #: lang/json/furniture_from_json.py msgid "mitre saw" -msgstr "" +msgstr "sierra ingletadora" #. ~ Description for mitre saw #: lang/json/furniture_from_json.py @@ -117538,10 +119209,13 @@ msgid "" "A circular saw blade on an arm that can slide and rotate in several " "directions, this is a staple tool for nearly any carpentry." msgstr "" +"Es una sierra circular puesta en un brazo que se puede deslizar y rotar en " +"varias direcciones. Es una herramienta esencial para casi todo trabajo de " +"carpintería." #: lang/json/furniture_from_json.py msgid "bandsaw" -msgstr "" +msgstr "sierra de cinta" #. ~ Description for bandsaw #: lang/json/furniture_from_json.py @@ -117549,10 +119223,12 @@ msgid "" "A ribbonlike sawblade runs in a single direction in this tool, allowing " "precise cuts at almost any angle." msgstr "" +"Es una sierra en forma de cinta que funciona en una sola dirección, lo que " +"permite realizar cortes precisos en casi cualquier ángulo." #: lang/json/furniture_from_json.py msgid "router table" -msgstr "" +msgstr "mesa de fresadora" #. ~ Description for router table #: lang/json/furniture_from_json.py @@ -117560,10 +119236,12 @@ msgid "" "This table has an inset router, a rotating motor with an exchangeable blade " "head for cutting specific profiles and grooves and stuff." msgstr "" +"Esta mesa tiene un router añadido, un motor rotativo con una cuchilla " +"intercambiable para cortar perfiles específicos y hacer ranuras." #: lang/json/furniture_from_json.py msgid "planer" -msgstr "" +msgstr "garlopa" #. ~ Description for planer #: lang/json/furniture_from_json.py @@ -117572,10 +119250,13 @@ msgid "" "specific width. Particularly great if working with raw lumber stock, but " "also good just for shaving wood down to size." msgstr "" +"Es una herramienta pesada que cortará y alisará una tabla a un ancho " +"específico. Particularmente útil cuando se trabaja con troncos pero también " +"sirve para recortar madera hasta lograr el tamaño necesario." #: lang/json/furniture_from_json.py msgid "jointer" -msgstr "" +msgstr "garlopa mecánica" #. ~ Description for jointer #: lang/json/furniture_from_json.py @@ -117583,6 +119264,8 @@ msgid "" "A table-shaped tool with a rotating blade that will cut down, smooth out, " "and square off a board to make it very smooth and nice indeed." msgstr "" +"Es una herramienta con forma de mesa y una sierra rotativa que cortará, " +"alisará o cuadrará una tabla para hacerla bien lisa y agradable." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py msgid "hydraulic press" @@ -117594,10 +119277,13 @@ msgid "" "If you really want to squash something a lot, this would be exactly the " "right industrial tool for you. If, you know, it had power." msgstr "" +"Si te gusta mucho apretar cosas, esto sería la herramienta industrial " +"perfecta para vos. Eso si, ya sabés, tuvieras acceso a alimentación " +"eléctrica." #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py msgid "power lathe" -msgstr "torno eléctrico" +msgstr "torno" #. ~ Description for power lathe #: lang/json/furniture_from_json.py @@ -117605,10 +119291,12 @@ msgid "" "An industrial-grade lathe, for turning chunks of metal and other hard things" " into round chunks of metal and other hard things." msgstr "" +"Es un torno industrial para convertir pedazos de metal y cosas rígidas en " +"otros pedazos de metal o cosas rígidas." #: lang/json/furniture_from_json.py msgid "air compressor" -msgstr "" +msgstr "compresor" #. ~ Description for air compressor #: lang/json/furniture_from_json.py @@ -117616,6 +119304,8 @@ msgid "" "This durable tank is topped with a motor that will cram as much air into the" " tank as possible." msgstr "" +"Es un tanque resistente con un motor que meterá en el tanque tanto aire como" +" pueda." #: lang/json/furniture_from_json.py msgid "fermenting vat" @@ -117654,22 +119344,26 @@ msgstr "" #: lang/json/furniture_from_json.py msgid "hanging meathook" -msgstr "" +msgstr "gancho para carne" #. ~ Description for hanging meathook #: lang/json/furniture_from_json.py msgid "A hefty hook suspended from a chain for stringing up corpses." msgstr "" +"Es un gancho pesado colgado de una cadena que se usa para destripar " +"cadáveres." #. ~ Description for wind mill #: lang/json/furniture_from_json.py msgid "" "A small wind-powered mill that can convert starchy products into flour." msgstr "" +"Es un molino pequeño que funciona con viento y puede convertir productos " +"almidonados en harina." #: lang/json/furniture_from_json.py msgid "active wind mill" -msgstr "" +msgstr "molino de viento activo" #. ~ Description for active wind mill #: lang/json/furniture_from_json.py @@ -117677,16 +119371,20 @@ msgid "" "A small wind-powered mill that can convert starchy products into flour. Its" " brake has been removed and it is turning." msgstr "" +"Es un molino pequeño que funciona con viento y puede convertir productos " +"almidonados en harina. Se le ha levantado el freno y está girando." #. ~ Description for water mill #: lang/json/furniture_from_json.py msgid "" "A small water-powered mill that can convert starchy products into flour." msgstr "" +"Es un molino pequeño que funciona con agua y puede convertir productos " +"almidonados en harina." #: lang/json/furniture_from_json.py msgid "active water mill" -msgstr "" +msgstr "molino de agua activo" #. ~ Description for active water mill #: lang/json/furniture_from_json.py @@ -117694,25 +119392,27 @@ msgid "" "A small water-powered mill that can convert starchy products into flour. " "Its brake has been removed and it is turning." msgstr "" +"Es un molino pequeño que funciona con agua y puede convertir productos " +"almidonados en harina. Se le ha levantado el freno y está girando." #: lang/json/furniture_from_json.py msgid "automated gas console" -msgstr "consola automática de gases" +msgstr "consola automática de gas" #. ~ Description for automated gas console #: lang/json/furniture_from_json.py msgid "Automated gas flow control console." -msgstr "" +msgstr "Es una consola automática de control de gas." #: lang/json/furniture_from_json.py msgid "broken automated gas console" -msgstr "consola automática de gases rota" +msgstr "consola automática de gas rota" #. ~ Description for broken automated gas console #: lang/json/furniture_from_json.py msgid "" "Automated gas flow control console. Broken. This is not a good thing." -msgstr "" +msgstr "Es una consola automática de control de gas. Rota. No es algo bueno." #: lang/json/furniture_from_json.py msgid "reinforced vending machine" @@ -117724,6 +119424,8 @@ msgid "" "A bit tougher to crack open than regular vending machines. That just makes " "it all the sweeter a target, doesn't it?" msgstr "" +"Es un poco más duro de abrir que las máquinas expendedoras comunes. Eso lo " +"hace un objetivo más apetecible, ¿no?" #: lang/json/furniture_from_json.py msgid "vending machine" @@ -117744,10 +119446,12 @@ msgid "" "Ponder if you could buy stuff, as it's broken. Maybe if you broke it more, " "you wouldn't need to pay at all!" msgstr "" +"Considerás si podrás comprar algo acá, porque está rota. Por ahí si la " +"rompés un poco más, ¡no vas a necesitar pagar nada!" #: lang/json/furniture_from_json.py msgid "atomic butter churn on a stand" -msgstr "" +msgstr "mantequeras atómicas con pie" #. ~ Description for atomic butter churn on a stand #: lang/json/furniture_from_json.py @@ -117755,6 +119459,9 @@ msgid "" "The Rivtech Atomic Butter Churn in deployed state. It hums menacingly. " "Ready to add raw milk and salt. It will churn till the earth is a cinder." msgstr "" +"Es la Mantequera Atómica Rivtech desplegada. Vibra de manera amenazante. " +"Está lista para ponerle leche cruda y sal. La revolverá hasta que la tierra " +"sea ceniza." #. ~ Description for vehicle refrigerator #: lang/json/furniture_from_json.py @@ -117762,6 +119469,8 @@ msgid "" "This fridge has been converted to run off of a vehicle's power supply. " "You'll need to take it down first." msgstr "" +"Esta heladera ha sido convertida para funcionar con la energía de un " +"vehículo. Primero vas a necesitar desmontarla." #. ~ Description for vehicle freezer #: lang/json/furniture_from_json.py @@ -117769,15 +119478,106 @@ msgid "" "This fridge has been further refurbished, and runs at a much lower " "temperature. You'll need to take it down first." msgstr "" +"Esta heladera ha sido renovada para funcionar a una temperatura mucho menor." +" Primero vas a necesitar desmontarla." + +#: lang/json/furniture_from_json.py +msgid "sleep pod" +msgstr "cápsula de descanso" + +#. ~ Description for sleep pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a climate controlled sleep pod. An easy way to reduce energy costs " +"in dense urban environments." +msgstr "" +"Es una cápsula para dormir controlada por el clima. Una manera fácil de " +"reducir los costos de energía en los ambientes urbanos densos." + +#: lang/json/furniture_from_json.py +msgid "cryo pod" +msgstr "cápsula de criogenia" + +#. ~ Description for cryo pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a long term sleep pod. Cryo pods are mostly used by people waiting " +"a short term for organs or criminals avoiding heat right after a crime." +msgstr "" +"Es una cápsula para dormir por períodos largos. Las cápsulas de criogenia " +"son usadas mayormente por personas esperando órganos o criminales evitando " +"el revuelo generado por su crimen." + +#: lang/json/furniture_from_json.py +msgid "CRISPR Biolab" +msgstr "Biolaboratorio CRISPR" + +#. ~ Description for CRISPR Biolab +#: lang/json/furniture_from_json.py +msgid "" +"A boxy looking device of arms, droppers and pipettes. It was used pre-" +"Cataclysm to do expirements in gene editing." +msgstr "" +"Es un dispositivo cuadrado de palancas, goteros y pipetas. Era utilizado " +"antes del Cataclismo para hacer experimentos en edición de genoma." + +#: lang/json/furniture_from_json.py +msgid "3D printer" +msgstr "impresora 3D" + +#. ~ Description for 3D printer +#: lang/json/furniture_from_json.py +msgid "" +"This box was used for rapid prototyping of products and for general " +"entertainment purposes in the masses." +msgstr "" +"Esta caja era utilizada para hacer prototipos rápidos de productos y para " +"propósitos generales de entretenimiento en masa." + +#: lang/json/furniture_from_json.py +msgid "neural net inserter" +msgstr "colocador de red neural" + +#. ~ Description for neural net inserter +#: lang/json/furniture_from_json.py +msgid "" +"This device looks like a cross between some kind of nightmare dentistry " +"equipment and socketing tool mounted on a slide that lets it drop precisely " +"down. Useful for those project that require putting delicate items into " +"hard to reach spaces." +msgstr "" +"Este dispositivo parece una mezcla entre una especie de equipo pesadillesco " +"de dentista y una llave crique montada en un deslizador que la permite caer " +"de manera precisa. Es útil para esos proyectos que requieren poner objetos " +"delicados en lugares difíciles de alcanzar." + +#: lang/json/furniture_from_json.py +msgid "monomolecular saw" +msgstr "sierra monomolecular" + +#. ~ Description for monomolecular saw +#: lang/json/furniture_from_json.py +msgid "" +"A wire the size of a cheescutter runs in a single direction in this tool, " +"allowing atomically precise cuts at almost any angle. Even unpowered it " +"gives off a visual distortion for several inches around it to prevent you " +"from losing a hand. It is impossible to deconstruct this device without the" +" wire self destructing." +msgstr "" +"Un alambre del tamaño de un cortaqueso que funciona en una sola dirección en" +" esta herramienta, le permite realizar cortes atómicamente precisos en casi " +"cualquier ángulo. Incluso sin energía eléctrica da una distorsión visual de " +"unos milímetros evitando que pierdas una mano. Este dispositivo es imposible" +" de desarmar sin que el alambre se destroce." #. ~ Description for dresser #: lang/json/furniture_from_json.py msgid "Dress yourself!" -msgstr "" +msgstr "¡Vestite!" #: lang/json/furniture_from_json.py msgid "poppy bush" -msgstr "" +msgstr "arbusto de amapola" #. ~ Description for poppy bush #: lang/json/furniture_from_json.py @@ -117788,10 +119588,15 @@ msgid "" " due to its similar medicinal properties. It exudes a potent, sleep " "inducing aroma." msgstr "" +"Es una especie invasiva traída a la Tierra por los invasores y que se " +"encuentra bastante a su gusto. Sus hojas espinosas se retuercen haciéndola " +"parecer más a un arbusto de selva que a una amapola convencional, excepto " +"por sus pétalos rojos, pero se llama así debido a sus similares propiedades " +"medicinales. Expulsa un aroma potente que induce al sueño." #: lang/json/furniture_from_json.py msgid "Translocator Gate" -msgstr "" +msgstr "Puerta de Translocador" #. ~ Description for Translocator Gate #: lang/json/furniture_from_json.py @@ -117799,10 +119604,12 @@ msgid "" "A gate for translocation. Cast the translocation spell or use a " "translocator to choose this gate as a destination." msgstr "" +"Es una puerta para translocación. Lanzá un hechizo de translocación o usá un" +" translocador para elegir esta puerta como destino." #: lang/json/furniture_from_json.py msgid "Magic Circle" -msgstr "" +msgstr "Círculo Mágico" #. ~ Description for Magic Circle #: lang/json/furniture_from_json.py @@ -117810,19 +119617,21 @@ msgid "" "This is a rough magic circle, carved into the ground and decorated with " "blood, candles, and other small knick-knacks." msgstr "" +"Es un círculo mágico irregular, tallado en el suelo y decorado con sangre, " +"velas y otras pequeñas chucherías." #: lang/json/furniture_from_json.py msgid "large glowing boulder" -msgstr "" +msgstr "roca brillante grande" #. ~ Description for large glowing boulder #: lang/json/furniture_from_json.py msgid "Something about this doesn't look right." -msgstr "" +msgstr "Hay algo con esto que no parece adecuado." #: lang/json/furniture_from_json.py msgid "enchanter's workbench" -msgstr "" +msgstr "mesa de trabajo de hechicero" #. ~ Description for enchanter's workbench #: lang/json/furniture_from_json.py @@ -117831,10 +119640,14 @@ msgid "" " alchemical spills and burns. It has wired in electrical and gas fittings, " "and has been decorated with several protection runes - mostly ornamental." msgstr "" +"Es una mesada de resina que puede resistir la mayoría de salpicaduras y " +"quemaduras alquímicas, sobre un armario de roble decorado. Tiene conectado " +"equipamiento eléctrico y de gas y ha sido decorada con runas de protección -" +" la mayoría solo decorativas." #: lang/json/furniture_from_json.py msgid "standing alembic" -msgstr "" +msgstr "alambique de pie" #. ~ Description for standing alembic #: lang/json/furniture_from_json.py @@ -117843,10 +119656,13 @@ msgid "" "consists of a copper pot with rising spires of twisted glass draining into " "various removable bottles." msgstr "" +"Es un alambique grande de vidrio y cobre usado para destilar brebajes " +"alquímicos. Consiste en una olla de cobre con espirales de vidrio curvado " +"que se conectan a varias botellas extraíbles." #: lang/json/furniture_from_json.py msgid "orrery" -msgstr "" +msgstr "planetario" #. ~ Description for orrery #: lang/json/furniture_from_json.py @@ -117856,10 +119672,15 @@ msgid "" "turn of a crank. This more modern version also has bluetooth and could have" " been controlled with an app, if there was any power anymore." msgstr "" +"Es un hermoso modelo del sistema solar, que no está hecho en escala. Es un " +"grupo complejo de engranajes que permite movimientos relativos a los " +"planetas para ser estudiados al mover una palanca. Esta versión más moderna " +"también tiene bluetooth y puede ser controlado por una aplicación, si es que" +" tuviera alimentación eléctrica." #: lang/json/furniture_from_json.py msgid "huge mana crystal" -msgstr "" +msgstr "cristal enorme de maná" #. ~ Description for huge mana crystal #: lang/json/furniture_from_json.py @@ -117868,18 +119689,21 @@ msgid "" "like a weed. It pulses with a delicate yellow energy, occasionally bursting" " with flashes of pent-up light." msgstr "" +"Es un cristal de maná que sale del suelo como si hubiera brotado como " +"hierba. Late con una energía de un amarillo suave y ocasionalmente libera " +"destellos de luz reprimidos." #: lang/json/furniture_from_json.py msgid "glass shattering!" -msgstr "" +msgstr "vidrio rompiéndose!" #: lang/json/furniture_from_json.py msgid "mana crackling!" -msgstr "" +msgstr "maná chisporroteando!" #: lang/json/furniture_from_json.py msgid "stone altar" -msgstr "" +msgstr "altar de piedra" #. ~ Description for stone altar #: lang/json/furniture_from_json.py @@ -117887,6 +119711,8 @@ msgid "" "This is big stone altar. Most commonly used in morally questionable " "rituals." msgstr "" +"Es un altar grande de piedra. Más comúnmente utilizado en rituales de moral " +"cuestionable." #. ~ Description for demon forge #: lang/json/furniture_from_json.py @@ -117895,6 +119721,10 @@ msgid "" " for flames. Custom made to withstand the heat from alumentum, this forge " "can resmelt the magical metals into their workable, ingot form." msgstr "" +"Es una forja hecha con la quitina de una enorme araña roja que tiene un " +"penacho de llamas. Está hecho para soportar el calor del alumentum, esta " +"forja puede volver a fundir metales mágicos y darle forma de lingote para " +"trabajarlos." #: lang/json/furniture_from_json.py msgid "tank trap" @@ -117906,12 +119736,16 @@ msgid "" "Thick ropes of mycal matter have covered the ground here completely. It's " "soft to the touch, but you sink into it, making moving across it difficult." msgstr "" +"Unas sogas de materia mycus han cubierto el suelo completamente acá. Es " +"suave al tacto pero te hundís, haciendo difícil pasar por ahí." #. ~ Description for fungal clump #: lang/json/furniture_from_json.py msgid "" "Alien mold and stems mingle tightly here, creating a sort of fungal bush." msgstr "" +"Tallos y moho alienígenas se mezclan apretados acá, creando una especie de " +"arbusto fúngico." #. ~ 'close' action message of some gate object. #: lang/json/gates_from_json.py @@ -117931,7 +119765,7 @@ msgstr "¡La verja está abierta!" #. ~ 'pull' action message of some gate object. #: lang/json/gates_from_json.py msgid "You turn the handle…" -msgstr "" +msgstr "Girás la manija…" #. ~ 'close' action message of some gate object. #: lang/json/gates_from_json.py @@ -117951,7 +119785,7 @@ msgstr "¡Las puertas del granero se abren!" #. ~ 'pull' action message of some gate object. #: lang/json/gates_from_json.py msgid "You pull the rope…" -msgstr "" +msgstr "Tirás de la soga…" #. ~ 'close' action message of some gate object. #: lang/json/gates_from_json.py @@ -117986,7 +119820,7 @@ msgstr "¡La puerta se levanta!" #. ~ 'pull' action message of some gate object. #: lang/json/gates_from_json.py msgid "You throw the lever…" -msgstr "" +msgstr "Tirás de la palanca…" #. ~ 'close' action message of some gate object. #: lang/json/gates_from_json.py @@ -118101,8 +119935,8 @@ msgstr "Tirás de la palanca..." #: lang/json/gun_from_json.py msgid "acid dart volley" msgid_plural "acid dart volleys" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "descarga de dardo ácido" +msgstr[1] "descargas de dardo ácido" #: lang/json/gun_from_json.py msgid "Fake gun that fires acid globs." @@ -118122,8 +119956,8 @@ msgstr "rifle" #: lang/json/gun_from_json.py msgid "acid dart gun" msgid_plural "acid dart guns" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "arma de dardo ácido" +msgstr[1] "armas de dardo ácido" #: lang/json/gun_from_json.py msgid "pipe combination gun" @@ -118141,8 +119975,7 @@ msgstr "" ".30-06 y los otros dos son para cartuchos de escopeta. Está hecho de caños y" " partes extraídas de una escopeta de doble caño." -#: lang/json/gun_from_json.py lang/json/gun_from_json.py -#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" msgstr "escopeta" @@ -118158,12 +119991,14 @@ msgid "" "A homemade rifle. It is simply a pipe attached to a stock, with a hammer to" " strike the single round it holds." msgstr "" +"Es un rifle hecho en casa. Es simplemente un caño con una culata y un " +"percutor para golpear la bala que contiene." #: lang/json/gun_from_json.py msgid "handmade heavy carbine" msgid_plural "handmade heavy carbines" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "carabina pesada casera" +msgstr[1] "carabinas pesadas caseras" #: lang/json/gun_from_json.py msgid "" @@ -118172,6 +120007,10 @@ msgid "" "as being able to accept G3 compatible magazines, and chambering the more " "powerful .308 rounds." msgstr "" +"Es un rifle casero de ánima lisa de acción de palanca con cargador. Aunque " +"sigue siendo un primitivo caño con una tabla, se le han hecho algunas " +"pequeñas mejoras como ser capaz de utilizar cargadores compatibles con G3 y " +"usar balas del potente calibre .308." #: lang/json/gun_from_json.py msgid "handmade carbine" @@ -118185,6 +120024,9 @@ msgid "" "Accepting crude detachable magazines or STANAG magazines, this is one of the" " better homemade weapons." msgstr "" +"Es una carabina improvisada de acción de palanca pero bien diseñada, con el " +"cañón corto. Esta es una de las mejores armas caseras ya que acepta " +"cargadores simples extraíbles STANAG." #: lang/json/gun_from_json.py msgid "pipe rifle: .223" @@ -118200,11 +120042,11 @@ msgstr[1] "pistolas de fusión" #: lang/json/gun_from_json.py msgid "single shot" -msgstr "" +msgstr "disparo simple" #: lang/json/gun_from_json.py msgid "triple shot" -msgstr "" +msgstr "disparo triple" #: lang/json/gun_from_json.py msgid "fusion blaster rifle" @@ -118257,14 +120099,16 @@ msgstr "" #: lang/json/gun_from_json.py msgid "mi-go bio-gun" msgid_plural "mi-go bio-guns" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "bio-arma mi-go" +msgstr[1] "bio-armas mi-go" #: lang/json/gun_from_json.py msgid "" "Fake gun that fires some sort of solidified organic matter at very high " "speed by unknown means of propulsion." msgstr "" +"Es un arma falsa que dispara algún tipo de materia orgánica solidificada a " +"muy alta velocidad por algún medio de propulsión desconocido." #: lang/json/gun_from_json.py msgid "spraycan flamethrower" @@ -118315,7 +120159,8 @@ msgstr "" "siglo XXI. Con poco de cinta adhesiva y partes electrónicas, funciona con un" " UPS normal." -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py src/item.cpp +#: lang/json/gun_from_json.py lang/json/gun_from_json.py +#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py src/item.cpp msgctxt "gun_type_type" msgid "pistol" msgstr "pistola" @@ -118411,8 +120256,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "pneumatic shotgun" msgid_plural "pneumatic shotguns" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "escopeta neumática" +msgstr[1] "escopetas neumáticas" #: lang/json/gun_from_json.py msgid "" @@ -118421,6 +120266,10 @@ msgid "" " still pack quite a punch. That is, if your target is directly in front of " "you." msgstr "" +"Es una escopeta neumática de doble caño hecha a mano desde chatarra. Aunque " +"su poder de disparo es menor comparada con las escopetas convencionales, " +"esta cosa puede causar daño. Eso si tu objetivo está directamente enfrente " +"tuyo." #: lang/json/gun_from_json.py msgid "single" @@ -118585,8 +120434,8 @@ msgstr[1] "pistolas básicas" #: lang/json/gun_from_json.py msgid "backup pistol" msgid_plural "backup pistols" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "pistola de respaldo" +msgstr[1] "pistolas de respaldo" #: lang/json/gun_from_json.py src/item_factory.cpp msgid "revolver" @@ -118597,8 +120446,8 @@ msgstr[1] "revólveres" #: lang/json/gun_from_json.py msgid "cap & ball revolver" msgid_plural "cap & ball revolvers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "revólver de percusión" +msgstr[1] "revólveres de percusión" #: lang/json/gun_from_json.py msgid "base rifle" @@ -118615,8 +120464,8 @@ msgstr[1] "rifles de acción manual" #: lang/json/gun_from_json.py msgid "semi-automatic rifle" msgid_plural "semi-automatic rifles" -msgstr[0] "rifle semi-automático" -msgstr[1] "rifles semi-automáticos" +msgstr[0] "rifle semiautomático" +msgstr[1] "rifles semiautomáticos" #: lang/json/gun_from_json.py msgid "fully automatic rifle" @@ -118643,8 +120492,8 @@ msgstr "chak chak." #: lang/json/gun_from_json.py msgid "base race shotgun, pump" msgid_plural "base race shotguns, pump" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "escopeta básica, bomba" +msgstr[1] "escopetas básicas, bomba" #: lang/json/gun_from_json.py msgid "base SMG" @@ -118660,14 +120509,17 @@ msgstr "subfusil" #: lang/json/gun_from_json.py msgid "H&K G80 railgun" msgid_plural "H&K G80 railguns" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "cañón de riel H&K G80" +msgstr[1] "cañones de riel H&K G80" #: lang/json/gun_from_json.py msgid "" "Developed by Heckler & Koch, this railgun magnetically propels a " "ferromagnetic projectile using an alternating current. Powered by UPS." msgstr "" +"Desarrollado por Heckler & Koch, este cañón de riel impulsa magnéticamente " +"un proyectil ferromagnético usando corriente alterna. Se alimenta con un " +"UPS." #: lang/json/gun_from_json.py msgid "RM120c shotgun" @@ -118780,8 +120632,8 @@ 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 "" -"Un rifle hecho en casa. Es simplemente un caño con una culata y un percutor " -"para golpear la bala que contiene." +"Es un rifle hecho en casa. Es simplemente un caño con una culata y un " +"percutor para golpear la bala que contiene." #: lang/json/gun_from_json.py msgid "Ruger 10/22" @@ -118836,8 +120688,8 @@ msgstr "Es una popular pistola calibre .22." #: lang/json/gun_from_json.py msgid "Jennings J-22" msgid_plural "Jennings J-22s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Jennings J-22" +msgstr[1] "Jennings J-22" #: lang/json/gun_from_json.py msgid "" @@ -118847,12 +120699,17 @@ msgid "" "import, these were more commonly used by criminals unfazed by their glaring " "safety issues." msgstr "" +"Uno de los 'especiales de sábado a la noche' por antonomasia, el Jennings " +"J-22 tenía un precio muy accesible por su estructura de inyección moldeada " +"en zinc. Diseñada para llenar el vacío que dejaron las pistolas de bolsillo " +"cuando se prohibió su importación, eran comúnmente utilizadas por los " +"criminales que no se preocupaban con sus problemas de seguridad." #: lang/json/gun_from_json.py msgid "Walther P22" msgid_plural "Walther P22s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Walther P22" +msgstr[1] "Walther P22" #: lang/json/gun_from_json.py msgid "" @@ -118860,6 +120717,10 @@ msgid "" "half the size of most Walthers. It is made mostly with plastic, with the " "slide and key components being made of die-cast zinc alloy" msgstr "" +"La Walther P22 es una pistola semiautomática con retroceso simple. Es más o " +"menos de la mitad de tamaño que las otras Walthers. Está hecho mayormente en" +" plástico, con la corredora y los componentes claves hechos de una aleación " +"de zinc moldeada a presión." #: lang/json/gun_from_json.py msgid "Remington ACR" @@ -118889,24 +120750,29 @@ msgid "" "lightweight and accurate, but will malfunction if not properly maintained. " "This one is a semi-automatic civilian version." msgstr "" +"Este ubicuo rifle es el antepasado de la serie de rifles M16. Es liviano y " +"preciso, pero puede fallar si no es mantenido en buenas condiciones. Este es" +" la versión civil semiautomática." #: lang/json/gun_from_json.py msgid "AR pistol" msgid_plural "AR pistols" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "pistola AR" +msgstr[1] "pistolas AR" #: lang/json/gun_from_json.py msgid "" "A compact, 7.5 inch barrel version of the classic AR-15 design, commercially" " marketed as a home defense weapon." msgstr "" +"Es una versión compacta con cañón de casi 20 centímetros del diseño clásico " +"AR-15, comercialmente dirigida como arma de defensa hogareña." #: lang/json/gun_from_json.py msgid "MAS 223" msgid_plural "MAS 223" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "MAS 223" +msgstr[1] "MAS 223" #: lang/json/gun_from_json.py msgid "" @@ -118915,12 +120781,16 @@ msgid "" "is a semi-auto only variation imported to the US in the late eighties. It " "retains the integral bipod, though." msgstr "" +"Es un rifle de asalto bullpup que era usado por las fuerzas armadas " +"francesas hasta hace poco. Aunque el FAMAS era famoso por su alta velocidad " +"de disparo, el MAS .223 es una variación semiautomática importado a los " +"Estados Unidos a finales de los ochenta. Mantiene el bípode integrado." #: lang/json/gun_from_json.py msgid "FS2000" msgid_plural "FS2000s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "FS2000" +msgstr[1] "FS2000" #: lang/json/gun_from_json.py msgid "" @@ -118930,12 +120800,17 @@ msgid "" " rifle is well sealed from mud and dust for reliability, but this makes it " "incompatible with many aftermarket magazines." msgstr "" +"Es una elegante carabina bullpup diseñada por FN Herstal, completa con mira " +"integrada. La acción de eyección hacia adelante y controles ambidiestros la " +"hacen cómoda tanto para derechos como para zurdos. Todo el rifle está " +"sellado para evitar barro y tierra, haciéndola más fiable pero incompatible " +"con muchos cargadores secundarios." #: lang/json/gun_from_json.py msgid "HK416 A5" msgid_plural "HK416 A5s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "HK416 A5" +msgstr[1] "HK416 A5" #: lang/json/gun_from_json.py msgid "" @@ -118980,13 +120855,13 @@ msgstr "" #: lang/json/gun_from_json.py msgid "burst" -msgstr "" +msgstr "ráfaga" #: lang/json/gun_from_json.py msgid "M249S" msgid_plural "M249Ss" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "M249S" +msgstr[1] "M249S" #: lang/json/gun_from_json.py msgid "" @@ -118994,6 +120869,9 @@ msgid "" "manufactured for sport shooting and collectors market. Notably, it retains " "the ability to be belt fed, an uncommon feature in civilian firearms." msgstr "" +"Es una variante civil semiautomática del subfusil M249, fabricado para tiro " +"deportivo y el mercado de coleccionistas. Notablemente, retiene la habilidad" +" de usar cargadores cintos, una característica inusual en las armas civiles." #: lang/json/gun_from_json.py msgid "M27 IAR" @@ -119029,8 +120907,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "M16A4" msgid_plural "M16A4s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "M16A4" +msgstr[1] "M16A4s" #: lang/json/gun_from_json.py msgid "" @@ -119038,6 +120916,9 @@ msgid "" "militaries across the world for over 50 years. It is a gas operated, " "rotating bolt rifle known for its accuracy and controllable recoil." msgstr "" +"El M16 es un rifle de asalto muy común que desciende del AR-15, usado por " +"militares en todo el mundo por más de 50 años. Es accionado por gas de " +"cerrojo rotativo y es conocido por su precisión y retroceso controlable." #: lang/json/gun_from_json.py msgid "3 rd." @@ -119046,8 +120927,8 @@ msgstr "3 bl." #: lang/json/gun_from_json.py msgid "OA-93" msgid_plural "OA-93s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "OA-93" +msgstr[1] "OA-93" #: lang/json/gun_from_json.py msgid "" @@ -119056,6 +120937,10 @@ msgid "" " moved to the top of the gun, circumventing the necessity for a solid " "buttstock." msgstr "" +"Es una pistola derivada del AR-15 fabricada por Olympic Arms en los noventa." +" La diferencia principal con la AR-15 es que el resorte de retroceso ha sido" +" movido a la parte superior del arma, evitando la necesidad de una culata " +"sólida." #: lang/json/gun_from_json.py msgid "Ruger Mini-14" @@ -119122,8 +121007,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Remington 700 .270 Win" msgid_plural "Remington 700 .270 Win" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Remington 700 .270 Win" +msgstr[1] "Remington 700 .270 Win" #: lang/json/gun_from_json.py msgid "" @@ -119132,6 +121017,10 @@ msgid "" "steel barrel threaded into the receiver and a recessed bolt face. It has " "checkered walnut furniture and a recoil pad to reduce perceived recoil." msgstr "" +"Es el clásico rifle de acción de cerrojo con calibre .270 WInchester, muy " +"popular entre los cazadores. Este modelo CDL SF tiene cañón acanalado de " +"acero inoxidable 416 enlazado con el receptor y el cerrojo. Tiene accesorios" +" de madera de nogal y una almohadilla para reducir el retroceso." #: lang/json/gun_from_json.py msgid "M2010 ESR" @@ -119195,7 +121084,7 @@ msgid "" ".30-06 round. Notable for using a detachable magazine instead of a " "traditional tube." msgstr "" -"Un rifle de caza de acción de palanca, con muy buena precisión y calibre " +"Es un rifle de caza de acción de palanca, con muy buena precisión y calibre " "para la poderosa .30-06. Conocido por utilizar un cargador extraíble en " "lugar de la tradicional cámara." @@ -119257,8 +121146,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Remington 700 .30-06" msgid_plural "Remington 700 .30-06" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Remington 700 .30-06" +msgstr[1] "Remington 700 .30-06" #: lang/json/gun_from_json.py msgid "" @@ -119273,8 +121162,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Remington ACR .300BLK" msgid_plural "Remington ACR .300BLKs" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Remington ACR .300BLK" +msgstr[1] "Remington ACR .300BLK" #: lang/json/gun_from_json.py msgid "" @@ -119283,12 +121172,16 @@ msgid "" "competing carbines. This version is chambered for the .300 AAC Blackout " "round." msgstr "" +"Esta carabina fue desarrollada para el uso militar a principios del siglo " +"XXI. Es precisa y causa mucho daño, aunque su velocidad de disparo es un " +"poco lenta comparándola con otras carabinas. Esta versión usa balas calibre " +".300 AAC Blackout." #: lang/json/gun_from_json.py msgid "IWI Tavor X95 .300BLK" msgid_plural "IWI Tavor X95 .300BLKs" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "IWI Tavor X95 .300BLK" +msgstr[1] "IWI Tavor X95 .300BLK" #: lang/json/gun_from_json.py msgid "" @@ -119296,6 +121189,9 @@ msgid "" "assault rifle designed and produced by Israel Weapon Industries. This is " "the civilian version chambered for .300 AAC Blackout." msgstr "" +"El IWI Tavor X95 (también llamado Micro-Tavor o MTAR) es un rifle de asalto " +"bullpup israelí diseñado y producido por Israel Weapon Industries. Esta la " +"versión civil con calibre .300 AAC Blackout." #: lang/json/gun_from_json.py msgid "FN FAL" @@ -119422,14 +121318,16 @@ msgstr "" #: lang/json/gun_from_json.py msgid "M60 Semi Auto" msgid_plural "M60 Semi Autos" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "M60 Semi Auto" +msgstr[1] "M60 Semi Auto" #: lang/json/gun_from_json.py msgid "" "This is a semi-automatic civilian variant of the M60 machine gun, retaining " "the ability to be belt fed, an uncommon feature in civilian firearms." msgstr "" +"Es una variante civil semiautomática del subfusil M60, retiene la habilidad " +"de usar cargadores cintos, una característica inusual en las armas civiles." #: lang/json/gun_from_json.py msgid "Savage 111F" @@ -119476,12 +121374,17 @@ msgid "" "a 'weapon system' because it consists of not only a rifle, but also a " "detachable telescopic sight and other accessories." msgstr "" +"El M24 francotirador es una versión militar y policíaca del rifle Remington " +"modelo 700. M24 es el nombre asignado por el Ejército de Estados Unidos " +"luego de adoptarlo como su rifle de francotirador estándar en 1988. El M24 " +"es llamado 'sistema de armas' porque además del rifle tiene una mira " +"telescópica removible y otros accesorios." #: lang/json/gun_from_json.py msgid "HK417 A2" msgid_plural "HK417 A2s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "HK417 A2" +msgstr[1] "HK417 A2" #: lang/json/gun_from_json.py msgid "" @@ -119489,12 +121392,15 @@ msgid "" "operated, rotating bolt rifle with a short-stroke piston design similar to " "that of the G36." msgstr "" +"Es un rifle de combate alemán con un cañón de 13\" y culata telescópica. Es " +"accionado por gas de cerrojo rotativo con un pistón corto de diseño similar " +"al del G36." #: lang/json/gun_from_json.py msgid "M110A1" msgid_plural "M110A1s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "M110A1" +msgstr[1] "M110A1" #: lang/json/gun_from_json.py msgid "" @@ -119502,18 +121408,24 @@ msgid "" "weight requirements. It is a gas operated, rotating bolt rifle accurate to " "1.5 MOA with standard ammunition." msgstr "" +"Es un derivado del G28 de H&K con un receptor superior de aluminio que " +"cumple con los requisitos de peso del ejército de Estados Unidos. Es " +"accionado por gas de cerrojo rotativo, apropiado para 1.5 MOA con munición " +"estándar." #: lang/json/gun_from_json.py msgid "AR-10" msgid_plural "AR-10s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "AR-10" +msgstr[1] "AR-10" #: lang/json/gun_from_json.py msgid "" "Somewhat similar to the later AR-15, the AR-10 is a gas operated, rotating " "bolt rifle chambered for 7.62x51mm rounds." msgstr "" +"Es similar a su posterior AR-15, el AR-10 es accionado por gas de cerrojo " +"rotativo con calibre para balas 7.62x51mm." #: lang/json/gun_from_json.py msgid "SIG Sauer P230" @@ -119526,8 +121438,8 @@ msgid "" "The SIG Sauer P230 is a small, semi-automatic handgun chambered in .32 ACP." " Due to its small dimensions, it was often carried as a backup weapon." msgstr "" -"La SIG Sauer P320 es una pistola pequeña semi-automática con calibre .32 " -"ACP. Debido a su pequeño tamaño, a menudo se la lleva como arma de apoyo." +"La SIG Sauer P320 es una pistola pequeña semiautomática con calibre .32 ACP." +" Debido a su pequeño tamaño, a menudo se la lleva como arma de apoyo." #: lang/json/gun_from_json.py msgid "Skorpion Vz. 61" @@ -119560,8 +121472,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Kel-Tec P32" msgid_plural "Kel-Tec P32s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Kel-Tec P32" +msgstr[1] "Kel-Tec P32" #: lang/json/gun_from_json.py msgid "" @@ -119569,6 +121481,10 @@ msgid "" "concealment and backup usage. Despite its extreme light weight and small " "size, its .32 ACP chambering makes for good handling and recoil control." msgstr "" +"Uno de los diseños más antiguos de Kel-tec, el P32 es una opción popular " +"como arma oculta y uso de apoyo. A pesar de ser extremadamente liviano y " +"pequeño, tiene calibre .32 ACP que lo hace fácil de manejar y de controlar " +"su retroceso." #: lang/json/gun_from_json.py msgid "SIG P226" @@ -119587,26 +121503,31 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Glock 31" msgid_plural "Glock 31s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Glock 31" +msgstr[1] "Glock 31" #: lang/json/gun_from_json.py msgid "" "A full size .357 SIG Glock pistol. It is extremely similar to the Glock 22," " and could be converted to fire .40 S&W by switching the barrel." msgstr "" +"Es una pistola Glock .357 SIG de tamaño completo. Es extremadamente similar " +"a la Glock 22 y puede ser convertida para disparar .40 S&W cambiándole el " +"cañón." #: lang/json/gun_from_json.py msgid "SIG P320 Compact" msgid_plural "SIG P320 Compacts" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "SIG P320 Compacta" +msgstr[1] "SIG P320 Compactas" #: lang/json/gun_from_json.py msgid "" "The P320 Compact is a semi-automatic, short recoil operated pistol. This " "one is chambered for .357 SIG." msgstr "" +"La P320 Compacta es una pistola semiautomática de retroceso corto. Esta " +"tiene calibre .357 SIG." #: lang/json/gun_from_json.py msgid "Colt M1861 Navy" @@ -119643,8 +121564,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "COP .357 Derringer" msgid_plural "COP .357 Derringers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "COP .357 Derringer" +msgstr[1] "COP .357 Derringers" #: lang/json/gun_from_json.py msgid "" @@ -119652,12 +121573,15 @@ msgid "" "Mossberg Brownie. It uses a rotating firing pin to fire the individual " "hammers of the four barrels arranged in a square formation." msgstr "" +"Es una pistola pequeña y regordeta con un ligero parecido a la Mossberg " +"Brownie. Utiliza un percutor rotativo para disparar martillos individuales " +"para cada uno de los cuatro cañones puestos en cuadrado." #: lang/json/gun_from_json.py msgid "S&W Model 10" msgid_plural "S&W Model 10" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "S&W Model 10" +msgstr[1] "S&W Model 10" #: lang/json/gun_from_json.py msgid "" @@ -119665,12 +121589,15 @@ msgid "" "handgun of the 20th century. It has a swing-out cylinder for ease of " "reloading." msgstr "" +"Es un revolver de seis disparos producido desde 1899 y conocido por ser el " +"arma de mano más popular del siglo XX. Tiene un cilindro que se abre hacia " +"afuera para poder cargarlo más fácilmente." #: lang/json/gun_from_json.py msgid "pipe rifle: .38 Special" msgid_plural "pipe rifles: .38 Special" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "rifle de caño: .38 Special" +msgstr[1] "rifles de caño: .38 Special" #: lang/json/gun_from_json.py msgid "Ruger LCR .38" @@ -119703,8 +121630,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "MAC-11" msgid_plural "MAC-11s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "MAC-11" +msgstr[1] "MAC-11" #: lang/json/gun_from_json.py msgid "" @@ -119714,12 +121641,17 @@ msgid "" "declared 'fit only for combat in a phone booth' due to its low weight and " "absurd fire rate ranging from 1200 to 1400 rounds per minute." msgstr "" +"Esta pistola ametralladora es una versión menos conocida de la MAC-10, con " +"calibre .380 ACP para tener un menor tamaño y seguir siendo subsónica. Más " +"pequeña en casi todas dimensiones, esta arma automática fue declarada " +"'adecuada solo para combate en una cabina de teléfono' debido a su poco peso" +" y la absurda velocidad de dispara que va de 1200 a 1400 balas por minuto." #: lang/json/gun_from_json.py msgid "Kel-Tec P3AT" msgid_plural "Kel-Tec P3ATs" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Kel-Tec P3AT" +msgstr[1] "Kel-Tec P3AT" #: lang/json/gun_from_json.py msgid "" @@ -119728,12 +121660,16 @@ msgid "" "Handling leaves something to be desired due to snappier recoil and " "diminuitive controls." msgstr "" +"Es esencialmente una Kel-Tec P32 más grande con calibre .380 ACP. La siempre" +" popular P3AT ofrece mejor balística en un paquete chico, ocultable y " +"liviano. La maniobrabilidad deja un poco que desear debido a un retroceso " +"rápido y controles diminutos." #: lang/json/gun_from_json.py msgid "FN 1910 .380" msgid_plural "FN 1910 .380s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "FN 1910 .380" +msgstr[1] "FN 1910 .380" #: lang/json/gun_from_json.py msgid "" @@ -119742,12 +121678,16 @@ msgid "" "more modern terminal performance. If such a humble firearm could start a " "world war, could it perhaps protect you from the undead?" msgstr "" +"Se hizo notoria en Sarajevo en 1914, la FN1910 fue una popular pistola de " +"bolsillo, pero con .32 ACP. Los coleccionistas valoran el modelo .380 por su" +" notoriedad y desempeño más moderno. Si un arma tan humilde pudo empezar una" +" guerra mundial, ¿podrá tal vez protegerte de los muertos vivientes?" #: lang/json/gun_from_json.py msgid "Ruger LCP" msgid_plural "Ruger LCPs" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Ruger LCP" +msgstr[1] "Ruger LCP" #: lang/json/gun_from_json.py msgid "" @@ -119756,12 +121696,16 @@ msgid "" "round's relatively low power, the pistol's low weight and short sight radius" " make for a moderately poor handling pistol." msgstr "" +"Euna de las 'pistolas de bolsillo' más vendidas de la modernidad, la LCP es " +"económica, con estructura de polímero y calibre .380 ACP. A pesar de la " +"relativa baja velocidad de la bala, el poco peso de la pistola y su corto " +"radio de mira la hacen de poca maniobrabilidad." #: lang/json/gun_from_json.py msgid "Hi-Point CF-380" msgid_plural "Hi-Point CF-380s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Hi-Point CF-380" +msgstr[1] "Hi-Point CF-380" #: lang/json/gun_from_json.py msgid "" @@ -119770,48 +121714,58 @@ msgid "" "making said firearms bulky and uncomfortable. Hi-Points have slides made " "with a zinc pot-metal which is relatively fragile compared to steel slides." msgstr "" +"La Hi-Point CF-380 es una pistola semiautomática con retroceso simple " +"diseñada por Hi-Point Firearms, que es conocida por hacer armas de fuego " +"baratas y por hacerlas incómodas y voluminosas. Las Hi-Point tiene corredora" +" de zinc que es relativamente frágil comparada con las corredoras de acero." #: lang/json/gun_from_json.py msgid "Taurus Spectrum" msgid_plural "Taurus Spectrum" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Taurus Spectrum" +msgstr[1] "Taurus Spectrum" #: lang/json/gun_from_json.py msgid "" "A .380 subcompact pistol. Designed for concealed carry and built from high-" "quality, durable materials." msgstr "" +"Es una pistola subcompacta calibre .380. Diseñada para poder ocultarse y " +"construida con materiales resistentes de gran calidad." #: lang/json/gun_from_json.py msgid "AF2011A1 .38 Super" msgid_plural "AF2011A1 .38 Super" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "AF2011A1 .38 Super" +msgstr[1] "AF2011A1 .38 Super" #: lang/json/gun_from_json.py msgid "" "A double-barrel semi-automatic pistol of Italian origin, firing two bullets " "per shot, a derivative of the M1911 pistol." msgstr "" +"Es una pistola semiautomática de doble cañón de origen italiano, que dispara" +" dos balas por tiro, y deriva de la pistola M1911." #: lang/json/gun_from_json.py msgid "M1911A1" msgid_plural "M1911A1s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "M1911A1" +msgstr[1] "M1911A1" #: lang/json/gun_from_json.py msgid "" "The M1911A1 is an extremely popular pistol known for its reliability. This " "one is chambered for .38 Super." msgstr "" +"La M1911A1 es una pistola extremadamente popular conocida por su fiabilidad." +" Esta tiene calibre .38 Super." #: lang/json/gun_from_json.py msgid "Beretta 90-two .40 S&W" msgid_plural "Beretta 90-two .40 S&Ws" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Beretta 90-two .40 S&W" +msgstr[1] "Beretta 90-two .40 S&W" #: lang/json/gun_from_json.py msgid "" @@ -119820,6 +121774,10 @@ msgid "" "futuristic-looking design owed in large parts to the polymer underbarrel " "rail cover. This one is chambered in .40 S&W." msgstr "" +"Es una versión más moderna de la popular serie 92 de Beretta, la 90-two " +"tiene un desempeña casi igual. La mayor diferencia es su diseño más elegante" +" y casi futurista debido a su cobertura de polímero bajo el cañón. Esta " +"tiene calibre .40 S&W." #: lang/json/gun_from_json.py msgid "Glock 22" @@ -119839,8 +121797,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Beretta Px4 Storm .40 S&W" msgid_plural "Beretta Px4 Storm .40 S&Ws" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Beretta Px4 Storm .40 S&W" +msgstr[1] "Beretta Px4 Storm .40 S&W" #: lang/json/gun_from_json.py msgid "" @@ -119848,12 +121806,15 @@ msgid "" "utilizing light-weight polymer construction with steel inserts. Its shape " "was also optimized for concealed carry. This one is chambered in .40 S&W." msgstr "" +"Más liviana que la icónica serie 92 de Beretta, la Px4 Storm fue construida " +"utilizando polímero liviano con inserciones de acero. Su forma fue " +"optimizada para poder llevar oculta. Esta tiene calibre .40 S&W." #: lang/json/gun_from_json.py msgid "pipe rifle: .40 S&W" msgid_plural "pipe rifles: .40 S&W" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "rifle de caño: .40 S&W" +msgstr[1] "rifles de caño: .40 S&W" #: lang/json/gun_from_json.py msgid "SIG Pro .40" @@ -119873,8 +121834,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Luty SMG: .40 S&W" msgid_plural "Luty SMGs: .40 S&W" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Luty SMG: .40 S&W" +msgstr[1] "Luty SMG: .40 S&W" #: lang/json/gun_from_json.py msgid "" @@ -119884,6 +121845,11 @@ msgid "" "shop, but still very unreliable. This one is chambered for .40 S&W " "cartridges and accepts custom-made makeshift magazines." msgstr "" +"Es un subfusil de patrón Luty de ánima lisa, construida simplemente de " +"varias partes de acero, usando algunas de las armas de mano más avanzadas. " +"Probablemente sea una de las armas más complejas que se pueden hacer fuera " +"de una fábrica, pero igual es poco fiable. Esta tiene calibre .40 S&W y " +"acepta cargadores hechos a medida." #: lang/json/gun_from_json.py msgid "handmade six-shooter" @@ -119917,8 +121883,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Browning Hi-Power .40 S&W" msgid_plural "Browning Hi-Power .40 S&Ws" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Browning Hi-Power .40 S&W" +msgstr[1] "Browning Hi-Power .40 S&W" #: lang/json/gun_from_json.py msgid "" @@ -119927,12 +121893,16 @@ msgid "" " Canada and Australia. This is a commercial variant produced by Browning " "Arms in .40 S&W." msgstr "" +"La Browning Hi-Power es una arma de mano semiautomática desarrollada poco " +"antes de la segunda guerra mundial. Muy usada desde entonces, sigue en uso " +"en India, Canadá y Australia. Esta es la versión comercial producida por " +"Browning Arms con calibre .40 S&W." #: lang/json/gun_from_json.py msgid "Walther PPQ .40 S&W" msgid_plural "Walther PPQ .40 S&Ws" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Walther PPQ .40 S&W" +msgstr[1] "Walther PPQ .40 S&W" #: lang/json/gun_from_json.py msgid "" @@ -119940,12 +121910,15 @@ msgid "" "P99QA, and maintains compatibility with some of its predecessor's " "accessories. This model is chambered in .40 S&W." msgstr "" +"La Walther PPQ es una pistola semiautomática desarrollada a partir de la " +"Walther P99QA y que mantiene compatibilidad con algunos accesorios de sus " +"predecesoras. Este modelo tiene calibre .40 S&W." #: lang/json/gun_from_json.py msgid "Hi-Point Model JCP" msgid_plural "Hi-Point Model JCPs" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Hi-Point Model JCP" +msgstr[1] "Hi-Point Model JCP" #: lang/json/gun_from_json.py msgid "" @@ -119955,6 +121928,10 @@ msgid "" "made with a zinc pot-metal which is relatively fragile compared to steel " "slides." msgstr "" +"La Hi-Point Model JCP es una pistola semiautomática con retroceso simple " +"diseñada por Hi-Point Firearms, que es conocida por hacer armas de fuego " +"baratas y por hacerlas incómodas y voluminosas. Las Hi-Point tiene corredora" +" de zinc que es relativamente frágil comparada con las corredoras de acero." #: lang/json/gun_from_json.py msgid "tube 40mm launcher" @@ -119967,14 +121944,14 @@ msgid "" "A simple, home-made grenade launcher. Basically a tube with a pin firing " "mechanism to activate the grenade." msgstr "" -"Un lanzagranadas simple, hecho en casa. Básicamente, es un caño con un " +"Es un lanzagranadas simple, hecho en casa. Básicamente, es un caño con un " "mecanismo para activar las granadas." #: lang/json/gun_from_json.py msgid "M320 standalone launcher" msgid_plural "M320 standalone launchers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "lanzador independiente M320" +msgstr[1] "lanzadores independientes M320" #: lang/json/gun_from_json.py msgid "" @@ -119982,6 +121959,9 @@ msgid "" "launchers in a very small package at the cost of decreased accuracy. This " "one is combined with a buttstock for standalone operation." msgstr "" +"El lanzagranadas M320 de Heckler & Koch ofrece la funcionalidad de los " +"lanzadores más grandes en un tamaño muy chico, aunque con menor precisión. " +"Este tiene una culata para poder ser utilizado así solo." #: lang/json/gun_from_json.py msgid "M79 launcher" @@ -119995,6 +121975,9 @@ msgid "" "Vietnam War. Though mostly replaced by more modern launchers, the M79 still" " sees use with many units worldwide." msgstr "" +"Un lanzagranadas muy utilizado que empezó a usar las fuerzas estadounidenses" +" en la guerra de Vietnam. Aunque ya ha sido reemplazado por lanzadores " +"modernos, el M79 todavía se usa en todo el mundo." #: lang/json/gun_from_json.py msgid "Milkor MGL" @@ -120053,13 +122036,14 @@ msgstr "multi" #: lang/json/gun_from_json.py msgid "M203 array" msgid_plural "M203 arrays" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "grupo de M203" +msgstr[1] "grupos de M203" #: lang/json/gun_from_json.py msgid "" "An array of six M203 grenade launchers for use on the TALON UGV platform." msgstr "" +"Es un grupo de seis lanzagranadas M203 para usar en la plataforma TALON UGV." #: lang/json/gun_from_json.py msgid "Mark 19 grenade launcher" @@ -120073,12 +122057,16 @@ msgid "" "since the start of the Cold War all the way to the cataclysm, and if you can" " find some 40mm grenades, maybe even beyond." msgstr "" +"Es un lanzagranadas pesado, montado en un trípode y alimentado con cinta de " +"munición, utilizado por el Ejército de EE.UU. desde comienzos de la Guerra " +"Fría hasta el cataclismo, y si podés encontrar algunas granadas 40mm, se " +"puede seguir usando." #: lang/json/gun_from_json.py msgid "Saiga-410" msgid_plural "Saiga-410s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Saiga-410" +msgstr[1] "Saiga-410" #: lang/json/gun_from_json.py msgid "" @@ -120086,12 +122074,15 @@ msgid "" "pattern as the AK47 rifle. It reloads with a magazine, rather than one " "shell at a time like most shotguns." msgstr "" +"La Saiga-410 es una escopeta semiautomática diseñada con el mismo modelo de " +"Kalashnikov de los rifles AK47. Utiliza un cargador en lugar de tener que " +"poner cada cartucho de a uno como en la mayoría de las escopetas." #: lang/json/gun_from_json.py msgid "Winchester M37 .410" msgid_plural "Winchester M37 .410s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Winchester M37 .410" +msgstr[1] "Winchester M37 .410" #: lang/json/gun_from_json.py msgid "" @@ -120099,6 +122090,9 @@ msgid "" "lower-recoil alternative to 12 gauge shotguns, it is light and easy to " "manufacture." msgstr "" +"Es una escopeta de cañón de quiebre de un disparo con calibre .410. Diseñada" +" como una alternativa de bajo retroceso a las escopetas 12 gauge, es liviana" +" y simple de fabricar." #: lang/json/gun_from_json.py msgid "Desert Eagle .44" @@ -120137,8 +122131,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "pipe rifle: .44 Magnum" msgid_plural "pipe rifles: .44 Magnum" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "rifle de caño: .44 Magnum" +msgstr[1] "rifles de caño: .44 Magnum" #: lang/json/gun_from_json.py msgid "Ruger Redhawk" @@ -120202,6 +122196,12 @@ msgid "" " is offered in more prevalent .44 caliber. Despite modern quality " "materials, the design is still rather delicate." msgstr "" +"Es una reproducción de Pietta del revólver LeMat de la época de la guerra " +"civil, un extraño e inusual revólver de llave de percusión calibre .44. " +"Aunque su calibre original .42 o .35 fue usado por el ejército de los " +"Estados Confederados, esta reproducción es ofrecida en un calibre .44 más " +"preponderante. A pesar de los materiales más modernos, el diseño lo sigue " +"haciendo bastante delicado." #: lang/json/gun_from_json.py msgid "TDI Vector" @@ -120250,8 +122250,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "M45A1" msgid_plural "M45A1s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "M45A1" +msgstr[1] "M45A1" #: lang/json/gun_from_json.py msgid "" @@ -120262,6 +122262,12 @@ msgid "" "recoil springs. Most were replaced in 2016 with Glock 19's due to logistics" " issues." msgstr "" +"La M45A1 suplantó las pistolas M45 MEUSOC en uso de reconocimiento de las " +"unidades expedicionarias de la marina. Aunque las pistolas M45 originales " +"fueron destrozadas por las M1911A1 por armeros del Cuerpo de Marines, la " +"actualizada M45A1 son casi iguales al diseña de cualquier 1911 comercial. La" +" mayoría fue reemplaza en 2016 con la Glock 19 debido a problemas de " +"logística." #: lang/json/gun_from_json.py msgid "MAC-10" @@ -120290,8 +122296,8 @@ msgstr[1] "rifles de caño: .45" #: lang/json/gun_from_json.py msgid "Luty SMG: .45" msgid_plural "Luty SMGs: .45" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Luty SMG: .45" +msgstr[1] "Luty SMG: .45" #: lang/json/gun_from_json.py msgid "" @@ -120301,6 +122307,11 @@ msgid "" "shop, but still very unreliable. This one is chambered for .45 ACP " "cartridges and accepts MAC-10 compatible magazines." msgstr "" +"Es un subfusil de patrón Luty de ánima lisa, construida simplemente de " +"varias partes de acero, usando algunas de las armas de mano más avanzadas. " +"Probablemente sea una de las armas más complejas que se pueden hacer fuera " +"de una fábrica, pero igual es poco fiable. Esta tiene calibre .45 ACP y " +"acepta cargadores compatibles MAC-10." #: lang/json/gun_from_json.py msgid "homemade hand cannon" @@ -120321,8 +122332,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "Thompson M1928A1" msgid_plural "Thompson M1928A1s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Thompson M1928A1" +msgstr[1] "Thompson M1928A1" #: lang/json/gun_from_json.py msgid "" @@ -120346,8 +122357,8 @@ msgstr[1] "USP .45" #: lang/json/gun_from_json.py msgid "MK 23 MOD 0" msgid_plural "MK 23 MOD 0s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "MK 23 MOD 0" +msgstr[1] "MK 23 MOD 0" #: lang/json/gun_from_json.py msgid "" @@ -120359,12 +122370,19 @@ msgid "" "remarkably reliable gun; someone could probably take out a nuclear equipped " "walking tank with this in their holster." msgstr "" +"Humorísticamente, se la conoce como \"La única pistola del mundo de manejo " +"en equipo\", esta enorme pistola fue diseñada como arma primaria para " +"\"operarios especiales\". Su incomodidad, la introducción de la serie HK USP" +" y la logística de tener munición .45 ACP, condenó a este mastodonte a las " +"armerías del Mando de Operaciones Especiales de los Estados Unidos. Como la " +"USP, la Mk 23 es notablemente fiable; alguien podría derrotar a un tanque " +"ambulante con equipo nuclear con esto en su cintura." #: lang/json/gun_from_json.py msgid "Walther PPQ 45" msgid_plural "Walther PPQ 45s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Walther PPQ 45" +msgstr[1] "Walther PPQ 45" #: lang/json/gun_from_json.py msgid "" @@ -120372,12 +122390,15 @@ msgid "" "P99QA, and maintains compatibility with some of its predecessor's " "accessories. This model is chambered in .45 ACP." msgstr "" +"La Walther PPQ es una pistola semiautomática desarrollada a partir de la " +"Walther P99QA y que mantiene compatibilidad con algunos accesorios de sus " +"predecesoras. Este modelo tiene calibre .45 ACP." #: lang/json/gun_from_json.py msgid "Hi-Point Model JHP" msgid_plural "Hi-Point Model JHPs" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Hi-Point Model JHP" +msgstr[1] "Hi-Point Model JHP" #: lang/json/gun_from_json.py msgid "" @@ -120387,6 +122408,10 @@ msgid "" "made with a zinc pot-metal which is relatively fragile compared to steel " "slides." msgstr "" +"La Hi-Point Model JHP es una pistola semiautomática con retroceso simple " +"diseñada por Hi-Point Firearms, que es conocida por hacer armas de fuego " +"baratas y por hacerlas incómodas y voluminosas. Las Hi-Point tiene corredora" +" de zinc que es relativamente frágil comparada con las corredoras de acero." #: lang/json/gun_from_json.py msgid "Taurus Raging Bull" @@ -120413,12 +122438,14 @@ msgid "" "The Taurus Raging Judge Magnum is a 6-shot revolver chambered in .454 " "Casull. It can fire .410 shotshells and .45 Colt cartridges as well." msgstr "" +"El Taurus Raging Judge Magnum es un revólver de 6 disparos para la .454 " +"Casull. Puede disparar cartuchos .410 y también .45 Colt." #: lang/json/gun_from_json.py msgid "Marlin 1895 SBL" msgid_plural "Marlin 1895 SBLs" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Marlin 1895 SBL" +msgstr[1] "Marlin 1895 SBL" #: lang/json/gun_from_json.py msgid "" @@ -120426,12 +122453,15 @@ msgid "" "Designed for wilderness guides for defense against large predators such as " "grizzly bears, moose, and dinosaurs." msgstr "" +"Es un rifle práctico y potente de acción de palanca con calibre .45-70 " +"Government. Diseñado para guías de reservas naturales para defensa contra " +"grandes depredadores como los osos gris, alces y dinosaurios." #: lang/json/gun_from_json.py msgid "Magnum Research BFR" msgid_plural "Magnum Research BFRs" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Magnum Research BFR" +msgstr[1] "Magnum Research BFR" #: lang/json/gun_from_json.py msgid "" @@ -120439,12 +122469,15 @@ msgid "" "significant velocity in its short pistol barrel, it still competes with " "other large magnum handguns in terms of power." msgstr "" +"Es un enorme revólver de acción simple. Mientras la bala de rifle .45-70 " +"pierde significativamente velocidad en este cañón corto de pistola, igual " +"compite con otras armas de mano magnum en términos de potencia." #: lang/json/gun_from_json.py msgid "1874 Sharps" msgid_plural "1874 Sharps" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1874 Sharps" +msgstr[1] "1874 Sharps" #: lang/json/gun_from_json.py msgid "" @@ -120453,6 +122486,10 @@ msgid "" "powerful for the time, this one is made to handle modern smokeless " "ammunition." msgstr "" +"Es una reproducción del antiguo rifle .45-70 de disparo simple, usado para " +"cazar búfalos y otros animales grandes a finales del siglo XIX. Muy preciso " +"y poderoso para su época, este está hecho para usar munición moderna sin " +"humo." #: lang/json/gun_from_json.py msgid "Bond Arms Derringer" @@ -120466,12 +122503,15 @@ msgid "" "commonly chambered for .45 Colt, with chambers long enough to accept .410 " "shotgun shells." msgstr "" +"El Revólver Bond Arms es de una serie de pistolas compactas de multicañón. " +"Comúnmente, con calibre .45 Colt, con la posibilidad de aceptar cartuchos de" +" escopeta .410." #: lang/json/gun_from_json.py msgid "Colt Lightning .45 Carbine" msgid_plural "Colt Lightning .45 Carbines" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Carabina Colt Lightning .45" +msgstr[1] "Carabinas Colt Lightning .45" #: lang/json/gun_from_json.py msgid "" @@ -120479,16 +122519,20 @@ msgid "" ".44-40, modern versions most commonly use .45 Colt, complementing the Single" " Action Army as a Cowboy Action Shooting firearm." msgstr "" +"Es una reproducción moderna del rifle Colt de acción de bombeo. " +"Originalmente hecha con calibre .44-40, las versiones modernas utilizan más " +"comúnmente el .45 Colt, complementando el Single Action Army con un arma " +"para los Cowboy Action Shooting." #: lang/json/gun_from_json.py msgid "chik chik." -msgstr "" +msgstr "chik chik." #: lang/json/gun_from_json.py msgid "Uberti Cattleman" msgid_plural "Uberti Cattleman" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Uberti Cattleman" +msgstr[1] "Uberti Cattleman" #: lang/json/gun_from_json.py msgid "" @@ -120499,12 +122543,19 @@ msgid "" "collectors. Unlike modern revolvers, the cylinder cannot swing out for " "loading, and spent brass must be ejected one at a time." msgstr "" +"Este Uberti Cattleman con cañón de 7.5\" es una reproducción moderna del " +"legendario Colt Single Action Army o Colt Peacemaker, uno de los primeros " +"revólveres en usar un cartucho moderno incorporado. Hecho famoso por los " +"westerns, todavía hoy es demandado en la disciplina Cowboy Action Shooting, " +"las representaciones y los coleccionistas. A diferencia de los revólveres " +"modernos, el cilindro no sale para cargarlo y las vainas deben ser eyectadas" +" de a una." #: lang/json/gun_from_json.py msgid "H&K MP7A2" msgid_plural "H&K MP7A2s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "H&K MP7A2" +msgstr[1] "H&K MP7A2" #: lang/json/gun_from_json.py msgid "" @@ -120512,12 +122563,14 @@ msgid "" "4.6x30mm round while being lightweight, compact in size, and practically " "recoil free." msgstr "" +"Diseñada como un arma de defensa personal, el MP7 dispara el poderoso " +"calibre 4.6x30mm, y es liviana, pequeña y prácticamente no posee retroceso." #: lang/json/gun_from_json.py msgid "1911-460" msgid_plural "1911-460s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "1911-460" +msgstr[1] "1911-460" #: lang/json/gun_from_json.py msgid "" @@ -120526,6 +122579,10 @@ msgid "" "reducing slide velocity. Notably, normal .45ACP can also be fired through " "the weapon." msgstr "" +"Esta 1911 ha sido modificada para usar el potente calibre .460 Rowland. " +"Posee ahora un gran compensador integrado para ayudar a controlar el " +"retroceso y reducir la velocidad de la corredora. Notablemente, con esta " +"arma también se puede disparar .45 ACP." #: lang/json/gun_from_json.py msgid "Barrett M107A1" @@ -120544,8 +122601,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "M2HB Browning HMG" msgid_plural "M2HB Browning HMG" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "M2HB Browning HMG" +msgstr[1] "M2HB Browning HMG" #: lang/json/gun_from_json.py msgid "" @@ -120553,6 +122610,10 @@ msgid "" "Cataclysm, and even rarely by Cataclysm survivors. Its massive size and " "design make it impossible to use unless deployed or mounted to a vehicle." msgstr "" +"Es una ametralladora pesada usada por el Ejército de Estados Unidos desde su" +" creación hasta el Cataclismo, e incluso también por algunos sobrevivientes " +"del Cataclismo. Su enorme tamaño y su diseño la hacen imposible de usar " +"salvo que esté desplegada o montada en un vehículo." #: lang/json/gun_from_json.py msgid ".50 caliber rifle" @@ -120579,8 +122640,8 @@ msgstr "manual" #: lang/json/gun_from_json.py msgid "AI AS50" msgid_plural "AI AS50s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "AI AS50" +msgstr[1] "AI AS50" #: lang/json/gun_from_json.py msgid "" @@ -120588,12 +122649,15 @@ msgid "" "accuracy for long range target and high fire rate, this weapon is still " "being used by Greek national guard." msgstr "" +"Es un rifle antimaterial de calibre .50 hecho por Accuracy International. " +"Con alta precisión para objetivos a largo alcance y una velocidad alta de " +"disparo, esta arma todavía es usada por la guardia nacional griega." #: lang/json/gun_from_json.py msgid "McMillan TAC-50" msgid_plural "McMillan TAC-50s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "McMillan TAC-50" +msgstr[1] "McMillan TAC-50" #: lang/json/gun_from_json.py msgid "" @@ -120604,18 +122668,28 @@ msgid "" "extreme distances. It notably holds the longest range confirmed sniper " "kill, as well as the 4th and 5th longest." msgstr "" +"Es un rifle antimaterial de francotirador de largo alcance hecho por " +"McMillan Firearms, usado en el Ejército Canadiense desde 2000 en su versión " +"C15, y a los Seal de la Armada de Estados Unidos en su versión Mk 15 Mod 0. " +"Este rifle calibre .50 de acción de cerrojo es capaz de vencer vehículos " +"ligeros, instalaciones de radar y armas grandes a distancias extremas. " +"Notablemente, tiene la muerte confirmada a mayor rango, así como también la " +"cuarta y la quinta." #: lang/json/gun_from_json.py msgid "Serbu BFG-50" msgid_plural "Serbu BFG-50s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Serbu BFG-50" +msgstr[1] "Serbu BFG-50" #: lang/json/gun_from_json.py msgid "" "A single-shot, bolt-action rifle made by Serbu Firearms, the BFG-50 is a " "very affordable firearm for those wishing to shoot .50 BMG." msgstr "" +"Es un rifle de un disparo y acción de cerrojo hecho por Serbu Firearms. El " +"BFG-50 es un arma muy económica para aquellos que quieran disparar munición " +".50 BMG." #: lang/json/gun_from_json.py msgid "Big Horn Model 89" @@ -120738,8 +122812,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "M202A1 FLASH" msgid_plural "M202A1 FLASH" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "M202A1 FLASH" +msgstr[1] "M202A1 FLASH" #: lang/json/gun_from_json.py msgid "" @@ -120747,10 +122821,14 @@ msgid "" "flamethrowers still in use in Vietnam. It has four barrels sharing the 66mm" " caliber of the M72 LAW." msgstr "" +"Es un lanzacohetes estadounidense diseñado en la década del 70 para " +"reemplazar los lanzallamas de la Segunda Guerra Mundial que se usaron hasta " +"la guerra de Vietnam. Tiene cuatro cañones que comparten el calibre 66mm del" +" M72 LAW." #: lang/json/gun_from_json.py msgid "all barrels" -msgstr "" +msgstr "todos los cañones" #: lang/json/gun_from_json.py msgid "Elephant gun" @@ -120820,8 +122898,8 @@ msgstr "" #: lang/json/gun_from_json.py msgid "AK-47" msgid_plural "AK-47s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "AK-47" +msgstr[1] "AK-47" #: lang/json/gun_from_json.py msgid "" @@ -121091,8 +123169,8 @@ msgid "" msgstr "" "Originalmente producido para uso militar, el rifle de combate Rivtech RM88 " "fue diseñado para ser duradero y tener mucho poder de fuego bajo condiciones" -" poco ideales, con un caño pesada para tener máxima controlabilidad. Acepta " -"cargadores de caja y cargadores de tambor RMGD250." +" poco ideales, con un cañón pesado para tener máxima controlabilidad. Acepta" +" cargadores de caja y cargadores de tambor RMGD250." #: lang/json/gun_from_json.py msgid "Beretta 90-two" @@ -121579,7 +123657,8 @@ msgid "" "about anything you put down the barrel, but it will degrade pretty quick." msgstr "" "Es una versión casera del precursor de la escopeta. Es capaz de disparar " -"casi cualquier cosa que le pongas por el caño, pero se estropea rápidamente." +"casi cualquier cosa que le pongas por el cañón, pero se estropea " +"rápidamente." #: lang/json/gun_from_json.py msgid "makeshift chemical thrower" @@ -121930,8 +124009,8 @@ msgid "" "A home-made double-barreled shotgun. It is simply two pipes attached to a " "stock, with a pair of hammers to strike the two rounds it holds." msgstr "" -"Una escopeta de doble cañón hecha en casa. Son simplemente dos caños con una" -" culata y un par de percutores para golpear las dos balas que contiene." +"Es una escopeta de doble cañón hecha en casa. Son simplemente dos caños con " +"una culata y un par de percutores para golpear las dos balas que contiene." #: lang/json/gun_from_json.py msgid "pipe shotgun" @@ -121944,7 +124023,7 @@ msgid "" "A home-made shotgun. It is simply a pipe attached to a stock, with a hammer" " to strike the single round it holds." msgstr "" -"Una escopeta hecha en casa. Es simplemente un caño con una culata y un " +"Es una escopeta hecha en casa. Es simplemente un caño con una culata y un " "percutor para golpear la bala que contiene." #: lang/json/gun_from_json.py @@ -122046,8 +124125,8 @@ 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." msgstr "" -"Una vieja escopeta, posiblemente una antigüedad. Es prácticamente un par de " -"cañones, una culata de madera y un percutor para pegarle a los cartuchos." +"Es una vieja escopeta, posiblemente una antigüedad. Es prácticamente un par " +"de cañones, una culata de madera y un percutor para pegarle a los cartuchos." #: lang/json/gun_from_json.py msgid "single barrel shotgun" @@ -122155,6 +124234,18 @@ msgid "" "will have to suffice." msgstr "" +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "" + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -122932,6 +125023,16 @@ msgstr "" msgid "trilaser" msgstr "" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -123727,6 +125828,12 @@ msgid "" "reliability." msgstr "" +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "" +msgstr[1] "" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -123807,22 +125914,6 @@ msgstr "" msgid "Fake gun that fires barbed javelins." msgstr "" -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "" - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -125891,16 +127982,6 @@ msgid "" "replacing the iron sights. Increases accuracy and weight." msgstr "" -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "" - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "Destripás y fileteás el pescado" @@ -125934,8 +128015,32 @@ msgstr "" "rancia, tomando nota de todo lo que llame la atención." #: lang/json/harvest_from_json.py -msgid "You laboriously dissect the colossal insect." -msgstr "Laboriosamente, diseccionás el gigantesco insecto." +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "You laboriously dissect the colossal insect. " +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"What appeared to be insect hairs on the chitin of this creature look more " +"like tiny feathers as you pare them back. Inside is a bundle of bubble-like" +" tissue sacs that appear to be floating, which doesn't fit with what you " +"know about real bees." +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"There's a faintly hairy, skin-like membrane, covered in blood vessels, " +"beneath the chitin of this creature. Inside it is a bundle of bubble-like " +"tissue sacs that appear to be floating, which doesn't fit with what you know" +" about real wasps." +msgstr "" #: lang/json/harvest_from_json.py msgid "You laboriously hack and dig through the remains of the fungal mass." @@ -129042,6 +131147,13 @@ msgstr "" msgid "This item can be used to communicate with radio waves." msgstr "" +#. ~ Please leave anything in unchanged. +#: lang/json/json_flag_from_json.py +msgid "" +"This item can be used to pick locks with zero " +"effort." +msgstr "" + #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is designed to keep you dry in the rain." @@ -131389,6 +133501,15 @@ msgstr "" msgid "Zombie trap." msgstr "" +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "" + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -132704,6 +134825,11 @@ msgid "" "years.'" msgstr "" +#. ~ Computer name +#: lang/json/mapgen_from_json.py +msgid "DinoLab Operating Theater Controls" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "No style" msgstr "Sin estilo" @@ -132961,6 +135087,21 @@ msgid "" "Lasts 3 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "Capoeira Tempo" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': +#. 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "Kung Fu de la Grulla" @@ -133119,6 +135260,22 @@ msgid "" "+2 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "Combinación de Eskrima" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': +#. 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "Esgrima" @@ -133156,6 +135313,33 @@ msgid "" "Blocked damage reduced by 50% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "Parada" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -133204,6 +135388,34 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "Judo" @@ -133452,6 +135664,32 @@ msgid "" "+1 Dodge attempts, blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "Muay Thai" @@ -133490,6 +135728,21 @@ msgid "" "Blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay +#. Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% of Strength.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "Ninjutsu" @@ -133555,6 +135808,34 @@ msgid "" "Last 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': +#. 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "Niten Ichi-Ryu" @@ -133628,6 +135909,39 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "Pancracio" @@ -133779,6 +136093,21 @@ msgid "" "Perception increases Accuracy instead of Dexterity. Accuracy increased by 25% of Perception but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "Sōjutsu" @@ -133933,6 +136262,21 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "Kung Fu del Tigre" @@ -133989,6 +136333,21 @@ msgid "" "Accuracy increased by 25% of Strength but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "" @@ -134042,6 +136401,20 @@ msgid "" " Dodging Skill increased by 15% of Perception. Blocked damage reduced by 50% of Perception." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch (Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "Zui Quan" @@ -134161,6 +136534,34 @@ msgstr "" "+Inteligencia armadura contra electricidad, +Percepción armadura contra " "fuego." +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2" +" times." +msgstr "" + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "Combativo Biónico" @@ -134200,6 +136601,22 @@ msgid "" "+2 Blocks attempts, +1 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic +#. Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "Kung Fu del Ciempiés" @@ -134237,6 +136654,20 @@ msgid "" "Lasts 3 turns. Stacks 4 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': +#. 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "Kung Fu del Lagarto" @@ -134356,6 +136787,20 @@ msgid "" "Stacks 2 times. Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': +#. 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "Kung Fu del Sapo" @@ -134407,6 +136852,34 @@ msgid "" "Lasts 6 turns. Stacks 6 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad +#. Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "Kung Fu de la Víbora" @@ -134759,6 +137232,34 @@ msgid "" "Lasts 1 turn. Stacks 2 times" msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Quicksilver Motion" +msgstr "" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': +#. 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence combine to allow you to make a fast, bold move that catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond +#. Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Hylian Swordsmanship" msgstr "" @@ -134852,6 +137353,46 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Heart" +msgstr "" + +#. ~ Description for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Absolute mastery of the sword is the goal of the Iron Heart discipline. " +"Through unending practice and study, the Iron Heart adept achieves " +"superhuman skill with her weapons. Iron Heart maneuvers are demonstrations " +"of uncanny martial skill—weaving patterns of steel that dizzy, confuse, and " +"ultimately kill with no recourse." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "You push away your fear and stand tall." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s takes a bold and fearless stance." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Panzer Kunst" msgstr "" @@ -134903,6 +137444,393 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Pokken" +msgstr "" + +#. ~ Description for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Pokken or \"Pocket Fist\" is a strange martial art developed from the famous" +" Pokemon video game series. Somehow, a group of dedicated fans managed to " +"combine the moves used by various pokemon with multiple existing martial " +"arts such as boxing and karate. Amazingly, it actually works. Some might " +"even say it's a super effective way to fight." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "You get ready to battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s is about to challenge someone to a battle." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Setting Sun" +msgstr "" + +#. ~ Description for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Setting Sun discipline teaches its initiates to turn their opponents' " +"strength against them. With a quick shift in stance and carefully aimed " +"attack, a Setting Sun warrior sends a charging enemy tumbling in a new " +"direction." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "You shift your weight and prepare to defend yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s shifts their weight and assumes a new stance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and \"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Shii-Cho" +msgstr "" + +#. ~ Description for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Shii-Cho, \"The way of the Sarlacc\" was the first form lightsaber combat " +"developed by the Jedi during their transition from metal weaponry to " +"lightsabers. Shii-Cho is regarded as a training form that all Jedi learn to" +" understand the basics of armed combat. Shii-Cho excels at fighting against" +" groups but lacks the offensive power of the other lightsaber forms." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You place one foot back and hold your weapon vertically on your dominant " +"side." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s places one foot back and hold their weapon vertically." +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are a determined warrior. Your inner calm aids you in landing your strikes and protecting yourself.\n" +"\n" +"Blocked damage reduced by 100% of Strength, +1 Accuracy." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Apprentice Training" +msgstr "" + +#. ~ Description of buff 'Apprentice Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training in Shii-Cho teaches you how to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Knight Training" +msgstr "" + +#. ~ Description of buff 'Knight Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Further training in Shii-Cho improves your ability to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Master Training" +msgstr "" + +#. ~ Description of buff 'Master Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"As a master of Shii-Cho, your ability to fight against groups is second to none.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to die.\n" +"\n" +"+5% critical hit chance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "Alcohol" @@ -135386,7 +138314,7 @@ msgid "Emulsified Hydrogel" msgstr "" #: lang/json/material_from_json.py -msgid "pupled" +msgid "pulped" msgstr "" #: lang/json/material_from_json.py @@ -137221,7 +140149,7 @@ msgid "Can you go find my son and tell him to check in with us." msgstr "" #: lang/json/mission_def_from_json.py lang/json/mission_def_from_json.py -#: lang/json/talk_topic_from_json.py +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py msgid "Thank you." msgstr "Gracias. " @@ -137513,7 +140441,7 @@ msgstr "" #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20" +"We could use some 3 liter jars to preserve our produce. Can you bring me 10" " large three liter jars? I'll give you some preserves in exchange." msgstr "" @@ -139384,6 +142312,87 @@ msgstr "Sí, seguro." msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check" +" it out, I'll owe you a favor." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "Hacer 2 Destiladores" @@ -140845,6 +143854,54 @@ msgstr "" msgid "I can't be Dr Frankenstein unless you get me these." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Gather meat for Bo Baronyx. About 8 should do it." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters are hungry. They need meat" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"If you wish to feed the eaters, your work will be rewarded. Go out, butcher" +" a pure animal. Not a false eater, the meat must be good to eat. Then " +"bring me the meat and I will see to the eaters." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Excellent. The eaters must feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Understood. The great eaters will feed either way." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"Some of the animals have become touched by the pretenders in recent days, " +"larger and more dangerous, producing tainted mutant meat. This will not " +"work for the great eaters, it must be the true meat." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Have you brought meat?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed I am sure." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I see no meat. There is meat in the forests and swamps waiting for the " +"eaters." +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Retrieve Magic Book" msgstr "" @@ -143180,6 +146237,23 @@ msgstr "" "Podés moverte más rápido que la mayoría. Tenés un 15% de bonus sobre la " "velocidad normal a pie." +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore" +msgstr "" + +#. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "" +"A photophore has grown from your head. You can't consciously control it, " +"and it might start to shine in response to your emotions or your " +"physiological state." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "" @@ -143192,13 +146266,50 @@ msgid "" "mating season." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." +msgid "You can make your photophore glow brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Normal Human" +msgstr "" + +#. ~ Description for {'str': 'Normal Human'} +#: lang/json/mutation_from_json.py +msgid "" +"You're a normal human, there's nothing wrong with you. No need to worry." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Violent Monster" +msgstr "" + +#. ~ Description for {'str': 'Violent Monster'} +#: lang/json/mutation_from_json.py +msgid "Anger clouds your mind, you can't think straight but you feel strong." msgstr "" #: lang/json/mutation_from_json.py @@ -143307,12 +146418,12 @@ msgstr "Sanador/a Veloz" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." msgstr "" -"Tus heridas sanan más rápido cuando dormís y también podés recuperar un poco" -" de PV cuando estás despierto." #: lang/json/mutation_from_json.py msgid "Light Eater" @@ -144045,10 +147156,11 @@ msgstr "Sanador/a Lento/a" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." msgstr "" -"Tus heridas sanan un poco más lento que la mayoría de la gente. Y cuando " -"dormís recuperás menos PV (puntos de vida)." #: lang/json/mutation_from_json.py msgid "Poor Healer" @@ -144056,12 +147168,11 @@ msgstr "Poco Sanador/a" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to" -" recover only a third of usual HP." +"Your health recovery is severely impaired. Your HP whilst asleep as well as" +" your broken limbs heal at 33% the regular rate." msgstr "" -"La salud que recuperás mientras dormís se verá muy perjudicada y solo " -"recuperás un tercio de PV." #: lang/json/mutation_from_json.py msgid "Imperceptive Healer" @@ -144069,12 +147180,11 @@ msgstr "Sanador/a Imperceptivo/a" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth" -" of usual HP." +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP" +" whilst asleep as well as your broken limbs heal at 10% the regular rate." msgstr "" -"Casi no recuperás nada de salud mientras dormís - sanarás solo un décimo de " -"PV." #: lang/json/mutation_from_json.py msgid "Far-Sighted" @@ -144913,12 +148023,11 @@ msgstr "Sanador Muy Rápido" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not " -"sleeping." +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." msgstr "" -"Tu carne se regenera lentamente, y vas a recuperar PV incluso sin estar " -"durmiendo." #: lang/json/mutation_from_json.py msgid "Regeneration" @@ -144926,8 +148035,12 @@ msgstr "Regeneración" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." -msgstr "Tu carne se regenera de sus heridas increíblemente rápido." +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster" +" whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16" +" times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Reptilian Healing" @@ -144935,8 +148048,10 @@ msgstr "Sanador Reptiliano" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." -msgstr "Tus miembros rotos se curan solos sin mucha dificultad." +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Very Little Sleep" @@ -149681,7 +152796,8 @@ msgstr "" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." msgstr "" #: lang/json/mutation_from_json.py @@ -150985,6 +154101,28 @@ msgid "" "improves as your unarmed skill increases." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Jedi Training" +msgstr "" + +#. ~ Description for {'str': 'Jedi Training'} +#: lang/json/mutation_from_json.py +msgid "" +"You are trained in the ways of the Jedi. Your knowledge allows you to " +"utilize a form of lightsaber combat." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Pokken Master" +msgstr "" + +#. ~ Description for {'str': 'Pokken Master'} +#: lang/json/mutation_from_json.py +msgid "" +"You are well versed in the monsterous Pocket Fist martial art. Train well, " +"because it is your destiny to be a master." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Martial Adept" msgstr "" @@ -150993,7 +154131,8 @@ msgstr "" #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." msgstr "" #: lang/json/mutation_from_json.py @@ -151974,6 +155113,14 @@ msgstr "" msgid "Humans created me. Let's see what I can be on my own." msgstr "" +#: lang/json/npc_class_from_json.py +msgid "Swamper" +msgstr "" + +#: lang/json/npc_class_from_json.py +msgid "The great eaters have returned and they must be fed" +msgstr "" + #: lang/json/npc_class_from_json.py msgid "Operator" msgstr "" @@ -152259,6 +155406,14 @@ msgstr "" msgid "Millyficen Whately" msgstr "" +#: lang/json/npc_from_json.py +msgid "CEO" +msgstr "" + +#: lang/json/npc_from_json.py +msgid "Bo Baronyx" +msgstr "" + #: lang/json/npc_from_json.py msgid "magus" msgstr "" @@ -159702,6 +162857,118 @@ msgid "" "time before the horrors patrolling the skies shot you down." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -159870,8 +163137,9 @@ msgstr "" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -159884,8 +163152,9 @@ msgstr "" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -161142,6 +164411,226 @@ msgid "" "find some other use." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -162808,7 +166297,7 @@ msgid "build a metalworking forge" msgstr "" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." +msgid "Let's build an anvil and crucible to increase our crafting options." msgstr "" #: lang/json/recipe_from_json.py @@ -167166,6 +170655,40 @@ msgctxt "start_name" msgid "Wizard's Retreat Vacation" msgstr "" +#. ~ Name for scenario 'Exile' for a male character +#: lang/json/scenario_from_json.py +msgctxt "scenario_male" +msgid "Exile" +msgstr "" + +#. ~ Name for scenario 'Exile' for a female character +#: lang/json/scenario_from_json.py +msgctxt "scenario_female" +msgid "Exile" +msgstr "" + +#. ~ Description for scenario 'Exile' for a male character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_male" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Description for scenario 'Exile' for a female character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_female" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Starting location for scenario 'Exile'. +#: lang/json/scenario_from_json.py +msgctxt "start_name" +msgid "Exiled" +msgstr "" + #. ~ Name for scenario 'The Sweet Life' for a male character #: lang/json/scenario_from_json.py msgctxt "scenario_male" @@ -177600,6 +181123,334 @@ msgstr "-style" msgid "-chant" msgstr "-chant" +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. It has an unsettling loose and spongy " +"texture, but smells… mostly normal. There are strange tangles and " +"formations in it that don't appear natural at all: bits of bone and hair " +"crusted up inside the muscle, as if trying to form another organism. Still," +" seems digestible at least, if you cook it and remove the worst parts." +msgstr "" +"Es la carne de un animal muy mutado. Tiene una textura perturbadoramente " +"floja y esponjosa, pero el olor... es casi normal. Tiene extraños nudos y " +"formaciones que no parece nada naturales: pedazos de hueso y pelo " +"incrustados en el músculo, como si intentaran formar otro organismo. De " +"todas maneras, para digerible, si lo cocinás y le sacás las peores partes." + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although it came from muscle tissue, it" +" has a curious swirling grain pattern, and at the center of each grain is a " +"knot of hard, cartilaginous tissue. It smells offputting." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. This is from muscle, but in the fascial" +" tissue between the muscles, thick spiny hairs have grown. Foul smelling, " +"cream-colored fluid gushes out whenever a hair pulls loose." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although this came from muscle, it has " +"a thick cordlike texture and smells like leather and bread mold." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. It has an unsettling," +" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" +" the bits of hair and bone out…" +msgstr "" +"Es un pedazo cocinado de carne de un animal mutante. Tiene una textura " +"perturbadoramente esponjosa, pero el gusto... es bastante normal. Con " +"suerte, ya le pudiste sacar todos los pedazos de pelo y hueso..." + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. You thought you'd " +"cleared out all the gross parts, but while cooking, a fluid-filled sac " +"inside burst and covered it in some kind of thick grease." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. The surface is " +"peppered with divets from the pieces you had to dig out to make it seem " +"edible." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. Heat caused the " +"muscles to twist and move as if they were alive, and now it has writhed " +"itself into a dense knot." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug, and you really aren't sure what " +"to make of them. There are things you've never seen in any anatomy book, " +"with spines and hair and other unidentified parts protruding off seemingly " +"at random." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug. They have a sickly green color, " +"and one of them ripped when you were removing it, revealing an inner surface" +" that looks like row upon row of human fingers, nails and all." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a huge, thick, fleshy sac you removed from a giant mutant bug. The " +"surface is covered in smooth, soft skin, and beneath it is a coiled, twisted" +" mess of cordlike tissue." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a long, corded organ you removed from a giant mutant bug. It ran " +"from the head to the abdomen and has long tendrils coming off it, not unlike" +" a spinal cord." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a meaty grey organ you removed from a mutant. It has a chalky " +"yellow coating that burns your skin, and several unidentifiable fleshy tubes" +" sticking out of it. The smell it gives off stings your nostrils. You're " +"pretty confident no natural creature has one of these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This organ meat, retrieved from a mutated creature, looks like a series of " +"small mammalian hearts arranged in series on a long fleshy tube. At the end" +" of the chain is a large fleshy sac resembling a stomach." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It looks like a lung from a larger " +"mammal, like a dog, but instead of a few distinct lobes, it has dozens of " +"lobes arranged in sheets. Strange spindles and gnarled tumescences dot the " +"surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It has a vaguely wing-like shape, " +"with a series of nodules around what would be the trailing edge of the " +"'wing'. A cluster of quills in each corner of the organ held it to the " +"bug's carapace like clasps." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton, but mutated. The inner side is lined with " +"veins and strange hooked protuberances." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton. Stringy lines of nervous tissue and blood " +"vessels still cling to the inner surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of rigid, tube-shaped chitin from the inside of a giant bug. It " +"seemed to be performing some kind of support role. You're quite sure normal" +" insects don't have these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A long, flexible rod of chitin from inside a giant mutant bug. It is laced " +"with blood vessels and chitinous nodules." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"As you peel away the outer shell, you find veins lining the chitin plates" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "With the creature dead, its carapace comes away surprisingly easily" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"There's a thin membrane, much like skin, spread over the chitin of this " +"creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Under the carapace of this mutant is a bristly, velcro-like material" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The anatomy concealed beneath seems almost like a small mammal given a shell" +" and twisted into the shape of an arthropod" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "You crack the beast open like a horrific lobster" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The chitin holds tight to the creature, and you need to snap and tear it " +"away, sawing at tough fibers beneath" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside, half-formed organs press against spongy meat that doesn't look " +"anything like raw arthropod meat from normal creatures" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You find a collection of hooked spines beneath that seem to have been " +"clasping it on somehow" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a complex, still-squirming mess of strange appendages and organs " +"that bear only a passing resemblance to any natural creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Beneath the chitin, the meat is covered in thick, bristly hair hiding a " +"chaotic bramble of half-formed, mutated organs" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a tangled mess of organs and tissues that do not appear to " +"entirely natural" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside the creature you find lungs, hearts, and intestines more like a " +"mammal than a giant bug" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The meat inside gives off a horrifying stench, and seems to be covered in " +"thin damp hair, like a newborn animal gone horribly wrong" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Small bundles of fiber break loose as you work, splitting open to reveal " +"twisted, half-formed copies of the creature itself" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"It is difficult to work, as the spongey tissue tears apart under your tools" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Steaming puddles of acid spill from its outer shell as you pull it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Steaming acid burbles from the creature's chitin as you peel it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several acid glands rupture as you peel back the carapace, sending streams " +"of steaming caustic fluids spraying around" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The organs themselves have an acrid odour, but don't seem as caustically " +"acidic as the outer shell" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You carefully avoid breaking through pockets of what you think may be acid-" +"secreting glands" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Thick, ropey cords of tissue beneath its chitin protect an inner layer of " +"strange organs, resembling those of a bird more than anything" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The powerfully acidic vapors coming from the carcass make it hard to work" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The tissues of the creature are full of half-formed organs, their purpose " +"unclear" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several times, you nearly burn yourself piercing a concealed gland full of " +"acid" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + #: lang/json/snippet_from_json.py msgid "" "ATOMIC DEREGULATION! President Toffer announced to a mixed crowd today that" @@ -185990,6 +189841,10 @@ msgstr "" msgid "Middle of Nowhere" msgstr "El medio de la nada" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "Celda de Experimentos" @@ -186286,6 +190141,12 @@ msgstr "" msgid "Yeah, alright." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"The song is… quiet for now. Perhaps with time, more notes will be etched in" +" the bones of this world." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "An acolyte should not take on too many songs at once." msgstr "" @@ -186295,9 +190156,7 @@ msgid "That is all for now." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"The song is… quiet for now. Perhaps with time, more notes will be etched in" -" the bones of this world." +msgid "There are bones to etch, songs to sing. Wish to join me?" msgstr "" #: lang/json/talk_topic_from_json.py @@ -186309,7 +190168,7 @@ msgid "Do you believe you can take on the burden of additional bones?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "There are bones to etch, songs to sing. Wish to join me?" +msgid "A song may yet be sung by you, should you wish to." msgstr "" #: lang/json/talk_topic_from_json.py @@ -186321,10 +190180,6 @@ msgid "" "I know of certain bones that could be of use, if you'd like to know more." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "A song may yet be sung by you, should you wish to." -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "I see." msgstr "Entiendo." @@ -186919,11 +190774,11 @@ msgid "no, go back to sleep." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "What is it, friend?" +msgid " *pshhhttt* I'm reading you boss, over." msgstr "" #: lang/json/talk_topic_from_json.py -msgid " *pshhhttt* I'm reading you boss, over." +msgid "What is it, friend?" msgstr "" #: lang/json/talk_topic_from_json.py @@ -187162,15 +191017,15 @@ msgstr "" msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "" -#: lang/json/talk_topic_from_json.py src/action.cpp src/activity_handlers.cpp -#: src/avatar.cpp src/avatar.cpp src/avatar_action.cpp src/avatar_action.cpp -#: src/avatar_action.cpp src/crafting.cpp src/game.cpp src/handle_action.cpp -#: src/handle_action.cpp src/handle_liquid.cpp src/handle_liquid.cpp -#: src/iexamine.cpp src/iexamine.cpp src/iexamine.cpp src/iuse.cpp -#: src/iuse.cpp src/iuse.cpp src/iuse_actor.cpp src/iuse_actor.cpp -#: src/iuse_actor.cpp src/monexamine.cpp src/monexamine.cpp src/npc.cpp -#: src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp -#: src/veh_interact.cpp src/vehicle_use.cpp +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py +#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp src/avatar.cpp +#: src/avatar_action.cpp src/avatar_action.cpp src/crafting.cpp +#: src/crafting.cpp src/game.cpp src/handle_action.cpp src/handle_action.cpp +#: src/handle_liquid.cpp src/handle_liquid.cpp src/iexamine.cpp +#: src/iexamine.cpp src/iexamine.cpp src/iuse.cpp src/iuse.cpp src/iuse.cpp +#: src/iuse_actor.cpp src/iuse_actor.cpp src/iuse_actor.cpp src/monexamine.cpp +#: src/monexamine.cpp src/npc.cpp src/pickup.cpp src/player.cpp src/player.cpp +#: src/player.cpp src/veh_interact.cpp src/vehicle_use.cpp msgid "Never mind." msgstr "No importa." @@ -187375,11 +191230,11 @@ msgid "OVERRIDE: " msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" +msgid "" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" +msgid "" msgstr "" #: lang/json/talk_topic_from_json.py @@ -187739,14 +191594,14 @@ msgstr "Bueno, sin hacer movimientos repentinos..." msgid "Keep your distance!" msgstr "¡Quedate lejos!" -#: lang/json/talk_topic_from_json.py -msgid "This is my territory, ." -msgstr "Este es mi territorio, ." - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "This is my territory, ." +msgstr "Este es mi territorio, ." + #: lang/json/talk_topic_from_json.py msgid "Calm down. I'm not going to hurt you." msgstr "Calmate. No te voy a lastimar." @@ -187799,30 +191654,30 @@ msgstr "¿Qué pasa?" msgid "I don't care." msgstr "No me importa." -#: lang/json/talk_topic_from_json.py -msgid "I don't have any more jobs for you." -msgstr "No tengo ningún otro trabajo para vos." - #: lang/json/talk_topic_from_json.py msgid "I don't have any jobs for you." msgstr "No tengo ningún trabajo para vos." #: lang/json/talk_topic_from_json.py -msgid "I have more jobs for you. Want to hear about them?" -msgstr "" +msgid "I don't have any more jobs for you." +msgstr "No tengo ningún otro trabajo para vos." #: lang/json/talk_topic_from_json.py msgid "I have other jobs for you. Want to hear about them?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "I just have one job for you. Want to hear about it?" -msgstr "Tengo un trabajo para vos. ¿Querés que te cuente?" +msgid "I have more jobs for you. Want to hear about them?" +msgstr "" #: lang/json/talk_topic_from_json.py msgid "I have another job for you. Want to hear about it?" msgstr "Tengo otro trabajo para vos. ¿Querés que te cuente?" +#: lang/json/talk_topic_from_json.py +msgid "I just have one job for you. Want to hear about it?" +msgstr "Tengo un trabajo para vos. ¿Querés que te cuente?" + #: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py #: src/npctalk.cpp msgid "Oh, okay." @@ -187832,6 +191687,10 @@ msgstr "Ah, bueno." msgid "Never mind, I'm not interested." msgstr "No importa, no estoy interesado." +#: lang/json/talk_topic_from_json.py +msgid "You're not working on anything for me now." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Which job?" msgstr "¿Cuál trabajo?" @@ -187840,10 +191699,6 @@ msgstr "¿Cuál trabajo?" msgid "What about it?" msgstr "¿Qué te parece?" -#: lang/json/talk_topic_from_json.py -msgid "You're not working on anything for me now." -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "I'll do it!" msgstr "¡Yo lo hago!" @@ -188058,6 +191913,10 @@ msgstr "Hmm, bueno." msgid "Thanks!" msgstr "¡Gracias!" +#: lang/json/talk_topic_from_json.py +msgid "Focus on the road, mate!" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "I must focus on the road!" msgstr "" @@ -188082,10 +191941,6 @@ msgstr "" msgid "I have some reason for not telling you." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "Focus on the road, mate!" -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "Ah, okay." msgstr "Ah, ok." @@ -188190,6 +192045,11 @@ msgstr "No, vamos a estar bien acá." msgid "On second thought, never mind." msgstr "Pensandolo bien, olvidate." +#: lang/json/talk_topic_from_json.py +msgid "I can't train you properly while you're operating a vehicle!" +msgstr "" +"çNo puedo entrenarte apropiadamente mientras estás controlando un vehículo!" + #: lang/json/talk_topic_from_json.py msgid "I can't train you properly while I'm operating a vehicle!" msgstr "" @@ -188202,11 +192062,6 @@ msgstr "Dale tiempo, te voy a mostrar algo nuevo después..." msgid "I have some reason for denying you training." msgstr "Tengo razones para negarte el entrenamiento." -#: lang/json/talk_topic_from_json.py -msgid "I can't train you properly while you're operating a vehicle!" -msgstr "" -"çNo puedo entrenarte apropiadamente mientras estás controlando un vehículo!" - #: lang/json/talk_topic_from_json.py msgid "Not a bloody chance, I'm going to get left behind!" msgstr "¡No hay ninguna chance, me van a dejar atrás!" @@ -194722,12 +198577,12 @@ msgid "All right! Let's get going." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"How's things with you? My cardboard collection is getting quite impressive." +msgid "We've done it! We've solved the list!" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "We've done it! We've solved the list!" +msgid "" +"How's things with you? My cardboard collection is getting quite impressive." msgstr "" #: lang/json/talk_topic_from_json.py @@ -199287,6 +203142,18 @@ msgstr "" msgid "Got it." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "" @@ -199300,11 +203167,11 @@ msgid "Hey." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Yes?" +msgid "Good to see you." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Good to see you." +msgid "About those jobs…" msgstr "" #: lang/json/talk_topic_from_json.py @@ -199316,7 +203183,7 @@ msgid "Want help with something else?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." +msgid "Lets set a combat strategy" msgstr "" #: lang/json/talk_topic_from_json.py @@ -199370,6 +203237,10 @@ msgstr "" msgid "Anything on your mind?" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "" @@ -200409,7 +204280,7 @@ msgstr "" #: lang/json/talk_topic_from_json.py msgid "Zombears are terrifying creatures of destruction." -msgstr "" +msgstr "Los ozombis son terribles criaturas de destrucción." #: lang/json/talk_topic_from_json.py msgid "" @@ -200444,6 +204315,263 @@ msgstr "" msgid "Now I choose the cause I'll die for." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"Yes. I ask because I noticed there are dinosaurs around. Do you know " +"anything about that?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"I know all kinds of weird useless stuff. I've seen things at churches, I've" +" seen things on farms, I've seen whole exhibits way out. Those Swampers, " +"they know what's happening. They're creatures of light come back to save us" +" all. Or eat us, I forget." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters will be fed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Welcome. Are you hungry friend?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You look hungry friend. So much hunger in this world. This is the time of " +"the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Hello. Who are the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So about the eaters…" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You mentioned some pretenders before. What does that mean?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Is there a way I can help feed the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I have to get going. Take care, CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters have returned, along with the false ones. We must feed the" +" eaters and destroy the pretenders child." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are you talking about?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No thank you, I'd like to leave now." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"This Cataclysm has woken the great eaters, lost in time, returned them to " +"the world to do their great work, to multiply and fill the land with their " +"song. The time of man is over, but we few who remain can do our part to " +"protect this new world from the pretenders, who would steal the meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So what do you do with the meat?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are the great eaters and the pretenders?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Are there any others left?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are the ones that were lost, what we call dinosaurs whose " +"meat we took and who are taking it back. The pretenders are those others " +"that have come to steal the meat of this world. It does not belong to them " +"and we will take it from their mouths." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Okay, so you worship dinosaurs. Understood." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The Swampers knew these times would return and we prepared for them. When " +"others wasted their time and meat, we fed and grew strong, and we filled our" +" stores with meat for this day." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes, very good." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You keep talking about meat. Why is meat so important?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The meat makes the great eaters strong. We gather the meat and feed them, " +"and in the end we too will serve the eaters in death as we do in life. This" +" was always our purpose and we lucky few have lived to see it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Our purpose? How do you know?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The return of the great eaters was fortold by a prophet. We faithful have " +"been waiting and preparing since the revelation." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I guess it must be nice to be proven right." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This is crazy." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You understand our purpose. I welcome you to this work, all are needed to " +"feed the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You deny what you see right in front of you. This world is what was " +"fortold." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters have fed. They will be hungry again in time" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You know what to do." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The great eaters must be fed. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is still more work to do. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is meat ready for the feeding. Are you ready to gather it?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters are hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is more meat needed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I know of eaters ready for meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Maybe another time CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"If you are ready to be of service to the great eaters, go and find meat and " +"bring it back. There is always need for more." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Happy to be of service to the great eaters. I'm in." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Excellent. Make it happen." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are not picky, any pure meat will do, but mutant and " +"tainted meat are not good enough." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"So, meat from a creature that isn't a zombie, or a giant monster. Got it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course, you should find everything you need here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "That explains the knives then." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Oh, you know my friend Brigitte. Well in that case, let's go!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No, I must remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Sweet!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Not just now. You should remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"Of course, the company will be ready when you are and the great eaters will " +"feed either way." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"It was fortold that as the great eaters returned, so too would the " +"pretenders, who would come to steal the meat. Very little is asked of us, " +"except that we do all we can to ensure that the true great eaters received " +"as much meat as possible and the pretenders go hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes CEO Baronyx, very good CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This makes no sense and I'm done talking about it." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Heya, scav." msgstr "Qué hacés, carto." @@ -200982,10 +205110,6 @@ msgstr "Bloqueás el/a %s" msgid " blocks %s" msgstr " bloquea el/a %s" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "Parada" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -203424,6 +207548,90 @@ msgstr "" msgid " unleashes a spin attack against %s and those nearby" msgstr "" +#: lang/json/technique_from_json.py +msgid "Disarming Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You skillfully disarm %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " skillfully disarms %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Lightning Recovery" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You miss %s but recover in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " misses %s but recovers in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Finishing Move" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You finish off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " finishes off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Dazing Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You harshly stun %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " harshly stuns %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Steel Wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleave through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleaves through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Scything Blade" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleanly reap through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleanly reap throug %s and those nearby" +msgstr "" + #: lang/json/technique_from_json.py msgid "Ausstoß" msgstr "" @@ -203480,6 +207688,216 @@ msgstr "" msgid " launches a supersonic punch at %s" msgstr "" +#: lang/json/technique_from_json.py +msgid "Mega Kick" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Darkest Lariat" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Smart Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Low Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Fool's Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely fool %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely fools %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Hydra Slaying Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You toss %s aside with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " tosses %s with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You spin and hurl %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " spins and hurls %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Flowing Water" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You deflect %s's attack and counter in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " deflects %s's attack and counters in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Disarming Slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You disarm %s with a quick flick of your weapon" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " disarms %s with a quick flick of their weapon" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Sarlacc Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You quickly sweep through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " quickly sweeps through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "" @@ -203525,6 +207943,10 @@ msgstr "" msgid "Life springs anew from the dead grass." msgstr "" +#: lang/json/ter_furn_transform_messages_from_json.py +msgid "The door opens forcefully!" +msgstr "" + #: lang/json/terrain_from_json.py msgid "scorched earth" msgstr "tierra calcinada" @@ -211760,6 +216182,11 @@ msgstr "casco de madera de bote" msgid "A wooden board that keeps the water out of your boat." msgstr "Es una tabla de madera que mantiene el agua afuera de tu bote." +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -212279,14 +216706,19 @@ msgid "" msgstr "" #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" -msgstr "asiento de madera" +msgid "flimsy wooden seat" +msgstr "" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "Es un lugar para sentarse." +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "asiento de madera" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "púa de madera" @@ -213140,6 +217572,11 @@ msgstr "" msgid "At least %s from %s (%s remaining)" msgstr "" +#: src/achievement.cpp +#, c-format +msgid "Exactly %s from %s" +msgstr "" + #: src/achievement.cpp #, c-format msgid "Within %s of %s (%s remaining)" @@ -213156,12 +217593,13 @@ msgid "Within %s of %s (passed)" msgstr "" #: src/achievement.cpp -msgid "Triggered by " +#, c-format +msgid "Triggered by %s" msgstr "" #: src/achievement.cpp #, c-format -msgid "%s/%s " +msgid "%s/%s %s" msgstr "" #: src/achievement.cpp @@ -215157,7 +219595,7 @@ msgstr "" msgid "< [%s] Sort: %s >" msgstr "" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "" @@ -215733,7 +220171,7 @@ msgstr "está constantemente retorciéndose" #: src/artifact.cpp msgid "wriggling" -msgstr "retorciendo" +msgstr "serpenteante" #: src/artifact.cpp msgid "glowing" @@ -215741,11 +220179,11 @@ msgstr "brillante" #: src/artifact.cpp msgid "glows faintly" -msgstr "está brillando ligeramente" +msgstr "brillando ligeramente" #: src/artifact.cpp msgid "humming" -msgstr "zumbando" +msgstr "zumbante" #: src/artifact.cpp msgid "hums very quietly" @@ -215753,7 +220191,7 @@ msgstr "zumbando muy despacito" #: src/artifact.cpp msgid "moving" -msgstr "móvil" +msgstr "moviéndose" #: src/artifact.cpp msgid "shifts from side to side slowly" @@ -215765,11 +220203,11 @@ msgstr "hace ruidos de murmuro muy suaves" #: src/artifact.cpp msgid "whispering" -msgstr "murmurando" +msgstr "murmurante" #: src/artifact.cpp msgid "breathing" -msgstr "respirando" +msgstr "respirante" #: src/artifact.cpp msgid "shrinks and grows very slightly with a regular pulse, as if breathing" @@ -215786,7 +220224,7 @@ msgstr "está muy frío al tacto" #: src/artifact.cpp msgid "itchy" -msgstr "picazón" +msgstr "picante" #: src/artifact.cpp msgid "makes your skin itch slightly when it is close" @@ -215842,11 +220280,11 @@ msgstr "tibio" #: src/artifact.cpp msgid "makes a rattling sound when moved" -msgstr "hace un sonido de tamborileo cuando se lo mueve" +msgstr "hace un traqueteo cuando se lo mueve" #: src/artifact.cpp msgid "rattling" -msgstr "tamborileo" +msgstr "traqueteante" #: src/artifact.cpp msgid "has a surface reminiscent of reptile scales" @@ -218310,10 +222748,18 @@ msgstr "" msgid "Accuracy" msgstr "Precisión" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "Esquivar" +#: src/bonuses.cpp +msgid "Block effectiveness" +msgstr "" + #: src/bonuses.cpp src/panels.cpp msgid "Speed" msgstr "Velocidad" @@ -218806,20 +223252,25 @@ msgstr " se para." #: src/character.cpp src/monster.cpp #, c-format -msgid "The %s breaks free of the webs!" -msgstr "¡El %s se libera de las telarañas!" +msgid "The %s escapes the bear trap!" +msgstr "¡El %s se escapa de la trampa para osos!" #: src/character.cpp -msgid "You free yourself from the webs!" -msgstr "¡Te conseguís liberar de las telarañas!" +#, c-format +msgid "Your %s tries to free itself from the bear trap, but can't get loose!" +msgstr "" #: src/character.cpp -msgid " frees themselves from the webs!" -msgstr "¡ consigue liberarse de las telarañas!" +msgid "You free yourself from the bear trap!" +msgstr "¡Te conseguís liberar de la trampa para oso!" #: src/character.cpp -msgid "You try to free yourself from the webs, but can't get loose!" -msgstr "¡Intentás liberarte de las telarañas, pero no podés!" +msgid " frees themselves from the bear trap!" +msgstr "¡ consigue liberarse de la trampa para oso!" + +#: src/character.cpp +msgid "You try to free yourself from the bear trap, but can't get loose!" +msgstr "¡Intentás liberarte de la trampa para oso, pero no podés!" #: src/character.cpp src/monster.cpp #, c-format @@ -218855,28 +223306,6 @@ msgstr "¡ consigue liberarse de la trampa pesada de lazo!" msgid "You try to free yourself from the heavy snare, but can't get loose!" msgstr "¡Intentás liberarte de la trampa pesada de lazo, pero no podés!" -#: src/character.cpp src/monster.cpp -#, c-format -msgid "The %s escapes the bear trap!" -msgstr "¡El %s se escapa de la trampa para osos!" - -#: src/character.cpp -#, c-format -msgid "Your %s tries to free itself from the bear trap, but can't get loose!" -msgstr "" - -#: src/character.cpp -msgid "You free yourself from the bear trap!" -msgstr "¡Te conseguís liberar de la trampa para oso!" - -#: src/character.cpp -msgid " frees themselves from the bear trap!" -msgstr "¡ consigue liberarse de la trampa para oso!" - -#: src/character.cpp -msgid "You try to free yourself from the bear trap, but can't get loose!" -msgstr "¡Intentás liberarte de la trampa para oso, pero no podés!" - #: src/character.cpp msgid "You free yourself from the rubble!" msgstr "¡Te conseguís liberar de los escombros!" @@ -218889,18 +223318,6 @@ msgstr "¡ consigue liberarse de los escombros!" msgid "You try to free yourself from the rubble, but can't get loose!" msgstr "¡Intentás liberarte de los escombros, pero no podés!" -#: src/character.cpp -msgid "You try to escape the pit, but slip back in." -msgstr "Intentás escaparte del pozo, pero te resbalás y volvés a caer." - -#: src/character.cpp -msgid "You escape the pit!" -msgstr "¡Te escapás del pozo!" - -#: src/character.cpp -msgid " escapes the pit!" -msgstr "¡ se escapa del pozo!" - #: src/character.cpp #, c-format msgid "Your %s tries to break free, but fails!" @@ -218940,6 +223357,35 @@ msgstr "¡Lográs liberarte del agarre!" msgid " breaks out of the grab!" msgstr "¡ logra liberarse del agarre!" +#: src/character.cpp src/monster.cpp +#, c-format +msgid "The %s breaks free of the webs!" +msgstr "¡El %s se libera de las telarañas!" + +#: src/character.cpp +msgid "You free yourself from the webs!" +msgstr "¡Te conseguís liberar de las telarañas!" + +#: src/character.cpp +msgid " frees themselves from the webs!" +msgstr "¡ consigue liberarse de las telarañas!" + +#: src/character.cpp +msgid "You try to free yourself from the webs, but can't get loose!" +msgstr "¡Intentás liberarte de las telarañas, pero no podés!" + +#: src/character.cpp +msgid "You try to escape the pit, but slip back in." +msgstr "Intentás escaparte del pozo, pero te resbalás y volvés a caer." + +#: src/character.cpp +msgid "You escape the pit!" +msgstr "¡Te escapás del pozo!" + +#: src/character.cpp +msgid " escapes the pit!" +msgstr "¡ se escapa del pozo!" + #: src/character.cpp #, c-format msgid "Your %s bionic comes back online." @@ -222761,14 +227207,6 @@ msgstr "" msgid "Test trait group" msgstr "Probar grupo de peculiaridades" -#: src/debug_menu.cpp -msgid "Show debug message" -msgstr "Mostrar mensaje debug" - -#: src/debug_menu.cpp -msgid "Crash game (test crash handling)" -msgstr "Error del juego (prueba de manejo de fallos)" - #: src/debug_menu.cpp msgid "Toggle NPC pathfinding on map" msgstr "" @@ -222797,6 +227235,18 @@ msgstr "" msgid "Enable achievements" msgstr "" +#: src/debug_menu.cpp +msgid "Show debug message" +msgstr "Mostrar mensaje debug" + +#: src/debug_menu.cpp +msgid "Crash game (test crash handling)" +msgstr "Error del juego (prueba de manejo de fallos)" + +#: src/debug_menu.cpp +msgid "Quit to main menu" +msgstr "" + #: src/debug_menu.cpp msgid "Game…" msgstr "" @@ -222893,10 +227343,6 @@ msgstr "" msgid "Map…" msgstr "" -#: src/debug_menu.cpp -msgid "Quit to main menu" -msgstr "" - #: src/debug_menu.cpp msgid "" "Debug Functions - Using these will cheat not only the game, but yourself.\n" @@ -223414,6 +227860,10 @@ msgstr "Marcar como completada" msgid "Remove mission without proper cleanup" msgstr "Quitar misión sin borrar todo" +#: src/debug_menu.cpp +msgid "Benchmark in progress…" +msgstr "" + #: src/debug_menu.cpp #, c-format msgid "Drew %d times in %.3f seconds. (%.3f fps average)" @@ -224654,138 +229104,182 @@ msgid "Liked" msgstr "Querido" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "Leyenda" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" -msgstr "Indiscutido" +msgstr "Indiscutido/a" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" -msgstr "Potente" +msgstr "Poderoso/a" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" -msgstr "Famoso" +msgstr "Famoso/a" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" -msgstr "Muy Conocido" +msgstr "Muy Conocido/a" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" -msgstr "Del que se Habla" +msgstr "Popular" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" -msgstr "Basura Despreciable" +msgstr "Basura Inútil" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "Alimaña" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "Despreciable" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "Parásito" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "Chupasangre" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "Hazmerreír" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "Neutral" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" -msgstr "Rico Asqueroso" +msgstr "Asquerosamente rico/a" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "Pudiente" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" -msgstr "Próspero" +msgstr "Próspero/a" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" -msgstr "Acaudalado" +msgstr "Acaudalado/a" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" -msgstr "Cómodo" +msgstr "Cómodo/a" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "Deficiente" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" -msgstr "Fracasado" +msgstr "Fracasado/a" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" -msgstr "Empobrecido" +msgstr "Empobrecido/a" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" -msgstr "Destituir" +msgstr "Desamparado/a" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "Rebosante" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" -msgstr "Adecuadamente" +msgstr "Adecuada" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "Tirando para No Aflojar" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" -msgstr "Malnutrido" +msgstr "Malnutrición" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" -msgstr "Muerto de Hambre" +msgstr "Muertos de Hambre" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "Legendario/a" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" -msgstr "Experto" +msgstr "Experto/a" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" -msgstr "Veterano" +msgstr "Veterano/a" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" -msgstr "Habilidoso" +msgstr "Habilidoso/a" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "Competente" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" -msgstr "Inexperto" +msgstr "Inexperto/a" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" -msgstr "Lisiado" +msgstr "Lisiado/a" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" -msgstr "Debilitado" +msgstr "Debilitado/a" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "Inútil" @@ -225390,12 +229884,12 @@ msgstr "" #, c-format msgid "" "Notes:\n" -"Send a companion to gather light brush and heavy sticks.\n" +"Send a companion to gather light brush and stout branches.\n" "\n" "Skill used: survival\n" "Difficulty: N/A\n" "Gathering Possibilities:\n" -"> heavy sticks\n" +"> stout branches\n" "> withered plants\n" "> splintered wood\n" "\n" @@ -225403,19 +229897,6 @@ msgid "" "Time: 3 Hours, Repeated\n" "Positions: %d/3\n" msgstr "" -"Notas:\n" -"Enviar un compañero a recolectar arbustos y palos grandes.\n" -" \n" -"Habilidad usada: supervivencia\n" -"Dificultad: N/D \n" -"Posibilidad de recolectar:\n" -"> palos grandes\n" -"> plantas marchitas\n" -"> astillas de madera\n" -" \n" -"Riesgo: Muy bajo\n" -"Tiempo: 3 Horas, Repetir\n" -"Lugares: %d/3\n" #: src/faction_camp.cpp #, c-format @@ -226615,7 +231096,7 @@ msgid "You do not have a camp food zone. Aborting…" msgstr "" #: src/faction_camp.cpp -msgid "No items are located at the drop point…" +msgid "No suitable items are located at the drop points…" msgstr "" #: src/faction_camp.cpp @@ -226633,8 +231114,7 @@ msgstr "" msgid "" "%s notices the antlered horror and slips away before it gets too close." msgstr "" -"%s ve un horror con cuernos y se escabulle antes de que se le acerque " -"demasiado." +"%s ve un horror cornudo y se escabulle antes de que se le acerque demasiado." #: src/faction_camp.cpp #, c-format @@ -226831,6 +231311,13 @@ msgstr "" msgid "Wait till you wake up…" msgstr "" +#: src/game.cpp +#, c-format +msgid "" +"\n" +"%s to interrupt" +msgstr "" + #: src/game.cpp #, c-format msgid "%s, cancel Auto-move?" @@ -226941,6 +231428,11 @@ msgctxt "action" msgid "open" msgstr "abrir" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -228478,11 +232970,25 @@ msgstr "" msgid "You cannot haul items here." msgstr "No podés arrastrar objetos acá." +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "¡%s está en el medio!" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "¡Hay un %s en el medio!" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a +#. zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -229871,11 +234377,6 @@ msgstr "¡Hay un estúpido en el medio!" msgid "The %s is in the way!" msgstr "¡El/a %s está en el medio!" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "¡%s está en el medio!" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -231140,6 +235641,11 @@ msgstr "" msgid "Attempt to hack this safe?" msgstr "" +#: src/iexamine.cpp +#, c-format +msgid "The %s is locked. You could pry it open with the right tool…" +msgstr "" + #: src/iexamine.cpp #, c-format msgid "The %s is locked. If only you had something to pry it with…" @@ -232376,6 +236882,10 @@ msgstr "" msgid "Splint broken limbs" msgstr "" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "No tenés instalado ningún biónico." @@ -232403,16 +236913,78 @@ msgid " doesn't have limbs that require splinting." msgstr "" #: src/iexamine.cpp -msgid "This mill already contains flour." +msgid "You don't have any wounds that need treatment." msgstr "" #: src/iexamine.cpp -msgid "Remove it before starting the mill again." +msgid " doesn't have any wounds that need treatment." msgstr "" +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "Los espasmos musculares empiezan a desaparecer." + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "El medicamento no hace nada para ayudarte con los espasmos." + #: src/iexamine.cpp #, c-format -msgid "This rack contains %s, which can't be milled!" +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "This mill contains %s, which can't be milled!" msgstr "" #: src/iexamine.cpp @@ -232598,7 +237170,8 @@ msgid "Remove brake and start milling" msgstr "" #: src/iexamine.cpp -msgid "Remove brake and start milling, milling will take about 6 hours." +#, c-format +msgid "Remove brake and start milling, milling will take about %s." msgstr "" #: src/iexamine.cpp @@ -232632,18 +237205,7 @@ msgstr "" #: src/iexamine.cpp #, c-format -msgid "It will finish milling in about %d hour." -msgid_plural "It will finish milling in about %d hours." -msgstr[0] "" -msgstr[1] "" - -#: src/iexamine.cpp -msgid "It will finish milling in less than an hour." -msgstr "" - -#: src/iexamine.cpp -#, c-format -msgid "It should take about %d minutes to finish milling." +msgid "It should take about %s to finish milling." msgstr "" #: src/iexamine.cpp @@ -233413,7 +237975,7 @@ msgstr "Volumen (%s): " msgid "There are no available choices" msgstr "No hay opciones disponibles" -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "" @@ -234315,10 +238877,6 @@ msgstr "" msgid "Weight capacity bonus: " msgstr "" -#: src/item.cpp -msgid "Storage: " -msgstr "Almacenamiento: " - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "* Este objeto puede ser usado con un casco." @@ -234602,6 +239160,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "" +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "" + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "" + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "" + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "" + +#: src/item.cpp +msgid "Fuel: " +msgstr "" + #: src/item.cpp #, c-format msgid "Using: %s" @@ -234625,9 +239211,21 @@ msgstr "* Este objeto puede ser reforzado." msgid "* This item is not repairable." msgstr "* Este objeto no se puede reparar." +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items +#: src/item.cpp +#, c-format +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "" + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a +#. list of items. +#. ~ Bold text in the middle makes it easier to see where the second list +#. starts. #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." +msgid "" +"Disassembly takes %1$s, requires %2$s and might " +"yield: %3$s." msgstr "" #: src/item.cpp @@ -234746,27 +239344,27 @@ msgid "Critical hit chance %d%% - %d%%" msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d bashing (%d on a critical hit)" +msgid "Bashing: " msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d cutting (%d on a critical hit)" +msgid "Critical bash: " msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d piercing (%d on a critical hit)" +msgid "Cutting: " msgstr "" -"%d punzante (%d en golpe crítico)" #: src/item.cpp -#, c-format -msgid "%d moves per attack" +msgid "Critical cut: " +msgstr "" + +#: src/item.cpp +msgid "Piercing: " +msgstr "" + +#: src/item.cpp +msgid "Critical pierce: " msgstr "" #: src/item.cpp @@ -235371,8 +239969,9 @@ msgstr "Tu %1$s no puede contener más %2$s." msgid "That %s doesn't have room to expand." msgstr "Ese/a %s no tiene más espacio para expandirlo/a." -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" msgstr "%d x %s" @@ -235496,6 +240095,56 @@ msgstr "No tenés ningún objeto con uso registrado" msgid "Execute which action?" msgstr "¿Qué acción querés realizar?" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "" + +#: src/item_contents.cpp +msgid " item, " +msgstr "" + +#: src/item_contents.cpp +msgid " category, " +msgstr "" + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "" + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "" + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "" + +#: src/item_contents.cpp +msgid "item id" +msgstr "" + +#: src/item_contents.cpp +msgid "item category" +msgstr "" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "" + #: src/item_contents.cpp msgid "is not a container" msgstr "" @@ -235539,6 +240188,11 @@ msgstr "¿Qué grupo querés probar?" msgid "Result of 100 spawns:" msgstr "Resultado de 100 creaciones:" +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "%d x %s" + #: src/item_location.cpp msgid "inventory" msgstr "inventario" @@ -235727,6 +240381,34 @@ msgstr "bolsillo ya tiene mucho peso" msgid "not enough space" msgstr "no tiene lugar" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "" + #: src/itype.h msgid "click." msgstr "click." @@ -235796,14 +240478,6 @@ msgstr "Te tomás unos anitibióticos." msgid " takes some antibiotics." msgstr " se toma unos antibióticos." -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "Los espasmos musculares empiezan a desaparecer." - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "El medicamento no hace nada para ayudarte con los espasmos." - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -241499,6 +246173,10 @@ msgstr "Principiante" msgid "Intermediate" msgstr "Intermedio" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "Experto" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "Ancho de nivel:" @@ -245150,6 +249828,18 @@ msgctxt "memorial_female" msgid "Set off an alarm." msgstr "Activar una alarma." +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_male" +msgid "Used the debug menu (%s)." +msgstr "" + +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_female" +msgid "Used the debug menu (%s)." +msgstr "" + #. ~ Message %s on the message log was repeated %d times, e.g. "You hear a #. whack! x 12" #: src/messages.cpp @@ -248940,12 +253630,6 @@ msgstr "" msgid "You feel bugs crawl over your skin." msgstr "" -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "humano" -msgstr[1] "humanos" - #: src/mutation.cpp #, c-format msgid "Your %s is destroyed!" @@ -249927,17 +254611,6 @@ msgstr "Edad:" msgid "Blood type:" msgstr "" -#: src/newcharacter.cpp -#, c-format -msgid "" -"* Random location * (%d variants)" -msgstr "" - -#: src/newcharacter.cpp -#, c-format -msgid "%s (%d variants)" -msgstr "" - #: src/newcharacter.cpp msgid "Name:" msgstr "Nombre:" @@ -249950,6 +254623,22 @@ msgstr "Género:" msgid "Select a starting location." msgstr "Elegí un lugar de comienzo." +#: src/newcharacter.cpp +#, c-format +msgid "" +"* Random location * (%d variant)" +msgid_plural "" +"* Random location * (%d variants)" +msgstr[0] "" +msgstr[1] "" + +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" +msgstr[1] "" + #: src/newcharacter.cpp msgid "Stats:" msgstr "Características:" @@ -250019,6 +254708,13 @@ msgstr "" msgid "Starting location:" msgstr "Lugar de comienzo:" +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" +msgstr[1] "" + #: src/newcharacter.cpp msgid "Starting Vehicle: " msgstr "" @@ -251711,6 +256407,14 @@ msgstr "Destrozar" msgid "Pulp Adjacent" msgstr "Destrozar cercano" +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "" + #: src/options.cpp msgid "Auto mining" msgstr "Auto hacer mina" @@ -254246,6 +258950,16 @@ msgstr "Zona:" msgid "# Unexplored" msgstr "# Sin explorar" +#: src/overmap_ui.cpp +#, c-format +msgid "oter: %s" +msgstr "" + +#: src/overmap_ui.cpp +#, c-format +msgid "oter_type: %s" +msgstr "" + #: src/overmap_ui.cpp msgid "Distance to active mission:" msgstr "Distancia a la misión activa:" @@ -254573,6 +259287,10 @@ msgstr "¡Ardiendo!" msgid "Very hot!" msgstr "¡Mucho calor!" +#: src/panels.cpp +msgid "Comfortable" +msgstr "Cómodo" + #: src/panels.cpp msgid "Very cold!" msgstr "¡Mucho frío!" @@ -256045,6 +260763,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "" +#: src/player_display.cpp +msgid "Starving" +msgstr "Muerto de Hambre" + #: src/player_display.cpp msgid "Underfed" msgstr "" @@ -256137,6 +260859,10 @@ msgid "" "\n" msgstr "" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "Malnutrido" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help you recover.\n" @@ -257277,6 +262003,15 @@ msgid_plural "%1$d tools with %2$s of %3$d or more." msgstr[0] "" msgstr[1] "" +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level +#. requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "" +msgstr[1] "" + #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp #, c-format @@ -261352,6 +266087,10 @@ msgstr "…%s = Ver descripción completa " msgid "--NO AVAILABLE MODS--" msgstr "--MODS NO DISPONIBLES--" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "Guardar como defecto la lista de modos activos" diff --git a/lang/po/es_ES.po b/lang/po/es_ES.po index 43cc563912845..48399e4e65948 100644 --- a/lang/po/es_ES.po +++ b/lang/po/es_ES.po @@ -16,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-06 11:53+0800\n" +"POT-Creation-Date: 2020-06-23 10:06+0800\n" "PO-Revision-Date: 2018-04-26 14:47+0000\n" "Last-Translator: Miguel de Dios Matias , 2020\n" "Language-Team: Spanish (Spain) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/es_ES/)\n" @@ -289,7 +289,6 @@ msgstr[0] "piedra" msgstr[1] "piedras" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -5855,7 +5854,6 @@ msgstr[1] "oro" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -5935,7 +5933,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "Una pequeña lámina de metal." @@ -7302,70 +7299,6 @@ msgstr[1] "" msgid "Seeing this is a bug." msgstr "Ver esto es un bug." -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "TEST pedazo de platino" -msgstr[1] "TEST pedazos de platino" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -7673,8 +7606,6 @@ msgstr[1] "pares de tapones para los oídos" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear #. plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs -#. of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "Tapones industriales para los oídos. Se ponen adentro de la oreja." @@ -9669,8 +9600,6 @@ msgstr[0] "par de calcetines" msgstr[1] "pares de calcetines" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of -#. socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "Son calcetines. Se ponen en los pies." @@ -11634,6 +11563,18 @@ msgstr "" "traje antiexplosivos. Están diseñados para proteger contra la fragmentación " "y el calor." +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of +#. studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -18107,7 +18048,6 @@ msgstr[1] "" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "Tu armadura de poder se activa." @@ -18480,7 +18420,6 @@ msgstr[0] "mochila" msgstr[1] "mochilas" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "" @@ -18594,7 +18533,6 @@ msgstr[0] "maletín" msgstr[1] "maletines" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "Útil para llevar dinero, documentos, o contrabando." @@ -19580,7 +19518,6 @@ msgstr[0] "traje para materiales peligrosos" msgstr[1] "trajes para materiales peligrosos" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -20553,7 +20490,6 @@ msgstr[0] "camiseta de mangas largas" msgstr[1] "camisetas de mangas largas" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "Es una camiseta de algodón de mangas largas." @@ -21335,6 +21271,19 @@ msgid "" "weight." msgstr "" +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "caestus" +msgstr[1] "caestus" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -22836,61 +22785,15 @@ msgid "" msgstr "" #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "" - -#: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'test power armor'} +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." msgstr "" #: lang/json/BATTERY_from_json.py @@ -23370,8 +23273,8 @@ msgid_plural "Aero-Evaporator CBMs" msgstr[0] "MCB Aero-evaporador" msgstr[1] "MCB Aero-evaporadores" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -24548,8 +24451,8 @@ msgid_plural "Internal Furnace CBMs" msgstr[0] "MCB Horno interno" msgstr[1] "MCB Horno interno" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel" @@ -24664,8 +24567,8 @@ msgid_plural "Wind Turbine CBMs" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -24673,22 +24576,6 @@ msgid "" "power level." msgstr "" -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "MCB Soldador de precisión" -msgstr[1] "MCBs Soldador de precisión" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire cutters." -" They serve no purpose on their own, but are required for crafting bionics." -msgstr "" -"Un conjunto de pequeñas herramientas electrónicas, incluyendo soldadoras de " -"mano y tenazas cortaalambres. No sirven para nada por sí mismas, pero son " -"necesarias para fabricar biónicos." - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -24751,14 +24638,43 @@ msgid "" "from installation and you don't have the codes to reset the timer." msgstr "" +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "MCB Soldador de precisión" +msgstr[1] "MCBs Soldador de precisión" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire cutters." +" They serve no purpose on their own, but are required for crafting bionics." +msgstr "" +"Un conjunto de pequeñas herramientas electrónicas, incluyendo soldadoras de " +"mano y tenazas cortaalambres. No sirven para nada por sí mismas, pero son " +"necesarias para fabricar biónicos." + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" msgstr[0] "MCB Generador de Sobrecarga Iónica" msgstr[1] "MCB Generador de Sobrecarga Iónica" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -24929,6 +24845,35 @@ msgstr[1] "" msgid "template for a paperback nonfiction book" msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Generic Pulp Book" +msgid_plural "Generic Pulp Books" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Generic Pulp Book +#: lang/json/BOOK_from_json.py +msgid "" +"This is a template for pulp books. Which really all ought to be paperbacks," +" right?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Generic SciFi Book" +msgid_plural "Generic SciFi Books" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for paperback scifi books." +msgstr "" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for a hard cover scifi book." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "Homemaking Book" msgid_plural "Homemaking Books" @@ -26404,8 +26349,8 @@ msgstr[1] "esquemas" #. 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py lang/json/TOOL_from_json.py #: lang/json/furniture_from_json.py lang/json/skill_from_json.py @@ -27594,10 +27539,8 @@ msgstr[1] "novelas de aventura" #: lang/json/BOOK_from_json.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." +"in the heart of the African continent." msgstr "" -"Una excitante historia sobre una carrera contra el tiempo, en busca de una " -"ciudad perdida localizada en el corazón oscuro del continente africano." #: lang/json/BOOK_from_json.py msgid "buddy novel" @@ -27614,30 +27557,6 @@ msgstr "" "Una atrapante historia de dos amigos luchando por sobrevivir en las calles " "de la ciudad de Nueva York." -#: lang/json/BOOK_from_json.py -msgid "coming of age novel" -msgid_plural "coming of age novels" -msgstr[0] "novela de iniciación" -msgstr[1] "novelas de iniciación" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." -msgstr "" -"Una clásica historia sobre madurar, narra las emotivas y divertidas " -"experiencias de un joven sobre la vida, el amor y el sexo." - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A graphic novel about a young girl living in Iran during the 1980's, seeing " -"the world change around her as Iraq invaded her country." -msgstr "" -"Es una novela gráfica acerca de una joven mujer viviendo en Irán durante los" -" 80, viendo cómo el mundo cambia a su alrededor cuando Irak invade su país." - #: lang/json/BOOK_from_json.py msgid "crime novel" msgid_plural "crime novels" @@ -27770,76 +27689,6 @@ msgstr[1] "novelas de misterio" msgid "A detective investigates an unusual murder in a secluded location." msgstr "Un detective investiga un inusual asesinato en un lugar aislado." -#: lang/json/BOOK_from_json.py -msgid "pulp novel" -msgid_plural "pulp novels" -msgstr[0] "novela pulp" -msgstr[1] "novelas pulp" - -#. ~ Description for {'str': 'pulp novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "" -"Un historia dura de detectives, llena de acción contundente e intriga." - -#: lang/json/BOOK_from_json.py -msgid "Planet of the Murderous Squids that Time Forgot!" -msgid_plural "Planet of the Murderous Squids that Time Forgot!s" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for Planet of the Murderous Squids that Time Forgot! -#: lang/json/BOOK_from_json.py -msgid "" -"In this psychedelic adventure novel of cosmic exploration, an elderly " -"assassin discovers a planet too good to be true. Only once it is too late " -"does she discover the harrowing truth at the center of \"The Planet of the " -"Murderous Squids that Time Forgot!\"" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "The Great Capes of Metropolis" -msgid_plural "The Great Capes of Metropoliss" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for The Great Capes of Metropolis -#: lang/json/BOOK_from_json.py -msgid "" -"In this classic pulp paperback of superheroic exploits, a group of masked " -"vigilantes with diverse superpowers learn to work together to defeat the " -"ultimate villain." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Yesterday's Murdered" -msgid_plural "Yesterday's Murdereds" -msgstr[0] "Asesinatos de Ayer" -msgstr[1] "Asesinatos de Ayer" - -#. ~ Description for Yesterday's Murdered -#: lang/json/BOOK_from_json.py -msgid "" -"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" -" has one last shot at vengeance." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Flashgun Condor and the Crimson Criminal" -msgid_plural "Flashgun Condor and the Crimson Criminals" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for Flashgun Condor and the Crimson Criminal -#: lang/json/BOOK_from_json.py -msgid "" -"A hot-blooded photographer who fights crime with film, footage, and fists, " -"Condor is more than a mere shutterbug on the crime beat. But will she be " -"able to unravel a devious deception and bring the \"Crimson Criminal\" to " -"justice?" -msgstr "" - #: lang/json/BOOK_from_json.py msgid "road novel" msgid_plural "road novels" @@ -28012,11 +27861,8 @@ msgstr[1] "novelas de samurai" 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." +"marauding outlaws. This hardback is quite hefty." msgstr "" -"La clásica historia de un espadachín errante que llega a un pequeño poblado " -"y es contratado para ayudar a sus habitantes a defenderse de una banda de " -"forajidos saqueadores." #: lang/json/BOOK_from_json.py msgid "satire novel" @@ -28062,16 +27908,18 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Master and Margarita" -msgid_plural "The Master and Margaritas" +msgid_plural "copies of Master and Margarita" msgstr[0] "" msgstr[1] "" -#. ~ Description for The Master and Margarita +#. ~ Description for {'str': 'The Master and Margarita', 'str_pl': 'copies of +#. Master and Margarita'} #: lang/json/BOOK_from_json.py msgid "" "Featuring a cast that includes Satan, Pontius Pilate, Jesus Christ, " -"vampires, a talking cat, and the literary elite of Moscow, this is a satire " -"on Stalinist tyranny written by Mikhail Bulgakov." +"vampires, a talking cat, and the literary elite of Moscow, this novel by " +"Mikhail Bulgakov explores philosophical issues on the nature of good and " +"evil." msgstr "" #: lang/json/BOOK_from_json.py @@ -28100,329 +27948,6 @@ msgid "" "nuclear destruction isn't much of an influence on human nature." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "scifi novel" -msgid_plural "scifi novels" -msgstr[0] "novela de ciencia ficción" -msgstr[1] "novelas de ciencia ficción" - -#. ~ Description for {'str': 'scifi novel'} -#: lang/json/BOOK_from_json.py -msgid "Aliens, ray guns, and space ships." -msgstr "Extraterrestres, pistolas de rayos y naves espaciales." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" -" surprisingly accurate in predicting much of modern society… Until " -"recently." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" -"\n" -"Tyger, Tyger, Burning bright,\n" -"In the forests of the night:\n" -"What immortal hand or eye,\n" -"Dare frame thy fearful symmetry?" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" -"stains have smudged the occasional word." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." -msgstr "Es una copia de \"Los desposeídos\" de Ursula Le Guin." - -#: lang/json/BOOK_from_json.py -msgid "This copy of Ray Bradbury's \"Fahrenheit 451\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Hyperion\" by Dan Simmons." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" -"\n" -"Give us gods. Oh give them us!\n" -"Give us gods.\n" -"We are so tired of men\n" -"And motor-power." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " -"ripped off." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " -"some of its pages. Weird." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " -"you wonder how Thailand fared the end of the world." -msgstr "" -"Es una copia de \"La chica mecánica\" de Paolo Bacigalupi. La nota en la " -"solapa te hace preguntarte cómo le fue a Tailandia en el fin del mundo. " - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " -"contains a hand-written grocery list." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " -"still has the smell of new books within its pages." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " -"Sterling. The cover has rings of coffee stains over it." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " -"looks to have been used to press flowers." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " -"the monster?" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" -" handbook." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " -"covered in dried blood." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Roadside Picnic\" by Arkady and Boris Strugatsky." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " -"if it's been slightly chewed by a dog or other large animal." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Cat's Cradle\" by Kurt Vonnegut. You notice there is a " -"typo in the authors name on the spine of the book." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " -"Copy. Not for re-sale.\"" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " -"the first pages in crayon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " -"with 'Library Copy'. And a sticker reading 'Science Fiction'." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Fifth Season\" by N.K. Jemsin. It smells faintly of" -" dirt." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" -" almost brand new." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " -"and worn, some pages appear to be loose." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " -"and thin. You should probably be careful with this copy." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " -"dog-eared and worn." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a weather worn copy of \"Brave New World\" by Aldous Huxley." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"Solaris\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Vurt\" by Jeff Noon." -msgstr "Es una copia de \"Vurt\" por Jeff Noon." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." -msgstr "Es una copia de \"La guerra de los mundos\" de H.G. Wells." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " -"blurb reminds you of a Japanese movie you think you once caught on the " -"television late at night." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." -msgstr "Es una copia de \"Simulacron-3\" de Daniel F. Galouye." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." -msgstr "Es una copia de \"Viaje al centro de la Tierra\" de Julio Verne." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " -"missing from the end of the book. Luckily only mail-order advertisements." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " -"Douglas Adams." -msgstr "" - #: lang/json/BOOK_from_json.py msgid "spy novel" msgid_plural "spy novels" @@ -29733,6 +29258,585 @@ msgid "" " key work in the existentialist tradition." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "pulp novel" +msgid_plural "pulp novels" +msgstr[0] "novela pulp" +msgstr[1] "novelas pulp" + +#. ~ Description for {'str': 'pulp novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hardboiled detective tale filled with hard hitting action and intrigue." +msgstr "" +"Un historia dura de detectives, llena de acción contundente e intriga." + +#: lang/json/BOOK_from_json.py +msgid "Black Valkyries From Venus" +msgid_plural "copies of Black Valkyries" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Black Valkyries From Venus', 'str_pl': 'copies +#. of Black Valkyries'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a weather-beaten novel written by someone named \"Lee" +" Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Wrong Tomorrow" +msgid_plural "copies of Wrong Tomorrow" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'The Wrong Tomorrow', 'str_pl': 'copies of Wrong +#. Tomorrow'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a cheap drugstore paperback written by someone named " +"\"Lee Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "No God From a Corpse" +msgid_plural "copies of No God" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'No God From a Corpse', 'str_pl': 'copies of No +#. God'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a weatherworn paperback written by some skirt named \"Lee Racket.\"" +" It tells how rage and jealousy can turn a man, or a woman, into a monster." +" This story is hard-boiled enough to break a spoon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Deep Dive" +msgid_plural "copies of Deep Dive" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'The Deep Dive', 'str_pl': 'copies of Deep Dive'} +#: lang/json/BOOK_from_json.py +msgid "" +"This dimestore short story about space travel is written by a broad named " +"\"Lee Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Planet of the Murderous Squids that Time Forgot!" +msgid_plural "Planet of the Murderous Squids that Time Forgot!s" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Planet of the Murderous Squids that Time Forgot! +#: lang/json/BOOK_from_json.py +msgid "" +"In this psychedelic adventure novel of cosmic exploration, an elderly " +"assassin discovers a planet too good to be true. Only once it is too late " +"does she discover the harrowing truth at the center of \"The Planet of the " +"Murderous Squids that Time Forgot!\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Great Capes of Metropolis" +msgid_plural "The Great Capes of Metropoliss" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for The Great Capes of Metropolis +#: lang/json/BOOK_from_json.py +msgid "" +"In this classic pulp paperback of superheroic exploits, a group of masked " +"vigilantes with diverse superpowers learn to work together to defeat the " +"ultimate villain." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Yesterday's Murdered" +msgid_plural "Yesterday's Murdereds" +msgstr[0] "Asesinatos de Ayer" +msgstr[1] "Asesinatos de Ayer" + +#. ~ Description for Yesterday's Murdered +#: lang/json/BOOK_from_json.py +msgid "" +"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" +" has one last shot at vengeance." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Flashgun Condor and the Crimson Criminal" +msgid_plural "Flashgun Condor and the Crimson Criminals" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for Flashgun Condor and the Crimson Criminal +#: lang/json/BOOK_from_json.py +msgid "" +"A hot-blooded photographer who fights crime with film, footage, and fists, " +"Condor is more than a mere shutterbug on the crime beat. But will she be " +"able to unravel a devious deception and bring the \"Crimson Criminal\" to " +"justice?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "scifi novel" +msgid_plural "scifi novels" +msgstr[0] "novela de ciencia ficción" +msgstr[1] "novelas de ciencia ficción" + +#. ~ Description for {'str': 'scifi novel'} +#: lang/json/BOOK_from_json.py +msgid "Aliens, ray guns, and space ships." +msgstr "Extraterrestres, pistolas de rayos y naves espaciales." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" +" surprisingly accurate in predicting much of modern society… Until " +"recently." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" +"\n" +"Tyger, Tyger, Burning bright,\n" +"In the forests of the night:\n" +"What immortal hand or eye,\n" +"Dare frame thy fearful symmetry?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" +"stains have smudged the occasional word." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." +msgstr "Es una copia de \"Los desposeídos\" de Ursula Le Guin." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Hyperion\" by Dan Simmons." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" +"\n" +"Give us gods. Oh give them us!\n" +"Give us gods.\n" +"We are so tired of men\n" +"And motor-power." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " +"ripped off." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " +"you wonder how Thailand fared the end of the world." +msgstr "" +"Es una copia de \"La chica mecánica\" de Paolo Bacigalupi. La nota en la " +"solapa te hace preguntarte cómo le fue a Tailandia en el fin del mundo. " + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " +"contains a hand-written grocery list." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " +"still has the smell of new books within its pages." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " +"Sterling. The cover has rings of coffee stains over it." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " +"looks to have been used to press flowers." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " +"the monster?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" +" handbook." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " +"covered in dried blood." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " +"if it's been slightly chewed by a dog or other large animal." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " +"Copy. Not for re-sale.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " +"the first pages in crayon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " +"with 'Library Copy'. And a sticker reading 'Science Fiction'." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" +" almost brand new." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " +"and worn, some pages appear to be loose." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " +"and thin. You should probably be careful with this copy." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " +"dog-eared and worn." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"Solaris\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Vurt\" by Jeff Noon." +msgstr "Es una copia de \"Vurt\" por Jeff Noon." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." +msgstr "Es una copia de \"La guerra de los mundos\" de H.G. Wells." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " +"blurb reminds you of a Japanese movie you think you once caught on the " +"television late at night." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." +msgstr "Es una copia de \"Simulacron-3\" de Daniel F. Galouye." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." +msgstr "Es una copia de \"Viaje al centro de la Tierra\" de Julio Verne." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " +"missing from the end of the book. Luckily only mail-order advertisements." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " +"Douglas Adams." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Dune" +msgid_plural "copies of Dune" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " +"some of its pages. Weird." +msgstr "" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Dune\" by Frank Herbert. It is a fairly new " +"reprint with the words \"SOON TO BE A MAJOR MOTION PICTURE\" splashed across" +" its dust jacket." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Parable of the Talents" +msgid_plural "copies of Parable of the Talents" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Parable of the Talents', 'str_pl': 'copies of +#. Parable of the Talents'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Parable of the Talents.\". It is Octavia " +"Butler's sequel to her book \"Parable of the Sower.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Fifth Season" +msgid_plural "signed copies of Fifth Season" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'The Fifth Season', 'str_pl': 'signed copies of +#. Fifth Season'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a signed hardcover copy of the Hugo award winning \"The Fifth " +"Season\" by N.K. Jemisin. It smells faintly of dirt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "We" +msgid_plural "copies of We" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"This hardback book is titled \"The Annotated We: A New Translation of Evgeny Zamiatin's Novel.\"\n" +"\n" +"It is Vladimir Wozniuk's 2015 translation of \"We,\" originally published in 1924 and generally seen as the first modern dystopian novel. The commentary examines the profusive allusions and highlights the poetic nature of Zamiatin's language." +msgstr "" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"A seminal work of dystopian fiction, Evgeny Zamiatin's \"We\" was first published in 1924 but suppresed by the Soviet Union until 1988.\n" +"\n" +"This mass-market 1993 edition you've found was translated from the Russian by Clarence Brown and includes a short introduction. The slightly worn cover features a surrealist photo of a person gazing backward suspiciouly." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Cyberiad" +msgid_plural "copies of The Cyberiad" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'The Cyberiad', 'str_pl': 'copies of The +#. Cyberiad'} +#: lang/json/BOOK_from_json.py +msgid "" +"This 350 page paperback presents the exploits and robotic rivalries of Trurl" +" and Klapaucius. Originally written in Polish by Stanislaw Lem, it has been" +" masterfully translated into English by Michael Kandel." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Brave New World" +msgid_plural "copies of Brave New World" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Brave New World', 'str_pl': 'copies of Brave New +#. World'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is weather worn copy of \"Brave New World\" by Aldous Huxley looks like" +" it has been left out in rain. The novel begins in a bleak building where " +"fetuses are grown in bottles on an assembly line." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Roadside Picnic" +msgid_plural "copies of Roadside Picnic" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Roadside Picnic', 'str_pl': 'copies of Roadside +#. Picnic'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a paperback copy of \"Roadside Picnic\" by Arkady and Boris " +"Strugatsky. It has been translated into over 20 languages, occasionally " +"under the name \"Stalker.\" This copy, fortunately for you, just happens to" +" be in your native tongue." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Fahrenheit 451" +msgid_plural "copies of Fahrenheit 451" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Fahrenheit 451', 'str_pl': 'copies of Fahrenheit +#. 451'} +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"Some joker has gently burnt the exterior edge of this paperback dystopia. " +"It's still perfectly readable." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"\"It was a pleasure to burn. It was a special pleasure to see things eaten," +" to see things blackened and changed.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This 1979 softcover edition of Ray Bradbury's \"Fahrenheit 451\" was once a " +"library book. It still has a light blue checkout card pocketed on the torn " +"back cover. One \"Suzanne Collins\" borrowed it in 1981." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"The red and black paperback novel you hold in your hands is a modern reprint" +" of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This scifi novel is divided into three parts: \"The Hearth and the " +"Salamander,\" \"The Sieve and the Sand,\", and \"Burning Bright.\"" +msgstr "" + #: lang/json/BOOK_from_json.py msgid "sports novel" msgid_plural "sports novels" @@ -30058,8 +30162,9 @@ msgstr[1] "" #: lang/json/BOOK_from_json.py msgid "" "This book is for the delightful little ring bearer in your wedding. The " -"author depicts the responsibility and the honor in being a ring bearer your " -"little angel will cherish." +"author depicts the responsibility and honor in being a ring bearer. Your " +"little angel will cherish this book as he or she learns how to behave on " +"your perfect day." msgstr "" #: lang/json/BOOK_from_json.py @@ -31496,11 +31601,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Adorkable Girl" -msgid_plural "The Adorkable Girls" +msgid_plural "copies of Adorkable" msgstr[0] "" msgstr[1] "" -#. ~ Description for The Adorkable Girl +#. ~ Description for {'str': 'The Adorkable Girl', 'str_pl': 'copies of +#. Adorkable'} #: lang/json/BOOK_from_json.py msgid "" "When a therapist's daughter transfers to a new school, she decides to change" @@ -31510,24 +31616,26 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Becoming Jackson" -msgid_plural "Becoming Jacksons" +msgid_plural "copies of Becoming Jackson" msgstr[0] "" msgstr[1] "" -#. ~ Description for Becoming Jackson +#. ~ Description for {'str': 'Becoming Jackson', 'str_pl': 'copies of Becoming +#. Jackson'} #: lang/json/BOOK_from_json.py msgid "" "When Jackson gains the mystical talent to alter his appearance on command, " -"how will he continue to recognize himself in his own mirror?" +"will he be able to recognize himself in his own mirror?" msgstr "" #: lang/json/BOOK_from_json.py msgid "Nothing Burned" -msgid_plural "Nothing Burneds" +msgid_plural "copies of Nothing Burned" msgstr[0] "" msgstr[1] "" -#. ~ Description for Nothing Burned +#. ~ Description for {'str': 'Nothing Burned', 'str_pl': 'copies of Nothing +#. Burned'} #: lang/json/BOOK_from_json.py msgid "" "A teenage influencer becomes fast friends with someone who may or may not be" @@ -31538,11 +31646,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "High and Low" -msgid_plural "High and Lows" +msgid_plural "copies of High and Low" msgstr[0] "" msgstr[1] "" -#. ~ Description for High and Low +#. ~ Description for {'str': 'High and Low', 'str_pl': 'copies of High and +#. Low'} #: lang/json/BOOK_from_json.py msgid "" "In this work of adolescent fiction, a young gemini discovers that the " @@ -31553,11 +31662,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Fire When You See My Eyes" -msgid_plural "Fire When You See My Eyess" +msgid_plural "copies of Fire When" msgstr[0] "" msgstr[1] "" -#. ~ Description for Fire When You See My Eyes +#. ~ Description for {'str': 'Fire When You See My Eyes', 'str_pl': 'copies of +#. Fire When'} #: lang/json/BOOK_from_json.py msgid "" "In a cataclysmic future, advanced technology gives parents access to video " @@ -31566,11 +31676,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Peanut Butter Bruised" -msgid_plural "Peanut Butter Bruiseds" +msgid_plural "copies of Peanut Butter Bruised" msgstr[0] "" msgstr[1] "" -#. ~ Description for Peanut Butter Bruised +#. ~ Description for {'str': 'Peanut Butter Bruised', 'str_pl': 'copies of +#. Peanut Butter Bruised'} #: lang/json/BOOK_from_json.py msgid "" "In this work of young adult fiction, a woman raised on food stamps falls in " @@ -31580,11 +31691,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Ready When You Are" -msgid_plural "Ready When You Ares" +msgid_plural "copies of Ready When" msgstr[0] "" msgstr[1] "" -#. ~ Description for Ready When You Are +#. ~ Description for {'str': 'Ready When You Are', 'str_pl': 'copies of Ready +#. When'} #: lang/json/BOOK_from_json.py msgid "" "When three teenage girls ditch class to drive cross country together they " @@ -31594,11 +31706,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Study of a Boy" -msgid_plural "Study of a Boys" +msgid_plural "copies of \"Study of a Boy\"" msgstr[0] "" msgstr[1] "" -#. ~ Description for Study of a Boy +#. ~ Description for {'str': 'Study of a Boy', 'str_pl': 'copies of "Study of +#. a Boy"'} #: lang/json/BOOK_from_json.py msgid "" "A high school sophomore's personal journal is stolen and then leaked on " @@ -31608,11 +31721,12 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Summer Variables" -msgid_plural "Summer Variabless" +msgid_plural "copies of Summer Variables" msgstr[0] "" msgstr[1] "" -#. ~ Description for Summer Variables +#. ~ Description for {'str': 'Summer Variables', 'str_pl': 'copies of Summer +#. Variables'} #: lang/json/BOOK_from_json.py msgid "" "In this book written primarily for young adults, a woman's modest summer " @@ -31620,6 +31734,64 @@ msgid "" " unsavory elements." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "In a Dark Place" +msgid_plural "copies of Dark Place" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'In a Dark Place', 'str_pl': 'copies of Dark +#. Place'} +#: lang/json/BOOK_from_json.py +msgid "" +"Markia dreams about the future. Theo longs for the past. Together can they" +" find a way to live in the now?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Betrayal Takes Two" +msgid_plural "copies of Betrayal" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Betrayal Takes Two', 'str_pl': 'copies of +#. Betrayal'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a hard cover book for older teens. The two main characters pull a " +"cruel prank on their classmates, and are brought together both by their " +"frantic efforts to avoid being caught and their shared sense of guilt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "coming of age novel" +msgid_plural "coming of age novels" +msgstr[0] "novela de iniciación" +msgstr[1] "novelas de iniciación" + +#. ~ Description for {'str': 'coming of age novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." +msgstr "" +"Una clásica historia sobre madurar, narra las emotivas y divertidas " +"experiencias de un joven sobre la vida, el amor y el sexo." + +#: lang/json/BOOK_from_json.py +msgid "Pantheon: The Story of an Iranian Youth" +msgid_plural "copies of Pantheon" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Pantheon: The Story of an Iranian Youth', +#. 'str_pl': 'copies of Pantheon'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hard cover graphic novel about a young girl living in Iran during the " +"1980's, seeing the world change around her as Iraq invaded her country." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "original copy of Housefly" msgid_plural "original copies of Housefly" @@ -33292,6 +33464,47 @@ msgid "" "harmless." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Scroll of Knock" +msgid_plural "Scrolls of Knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Scroll of Knock', 'str_pl': 'Scrolls of Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open locked wooden doors from a short " +"range away." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Improved Knock" +msgid_plural "Scrolls of Improved Knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Scroll of Improved Knock', 'str_pl': 'Scrolls of +#. Improved Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open any locked door from a short range " +"away." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of +#. Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers" +" with baleful lightning." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -33647,36 +33860,6 @@ msgid "" " - F. \"." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', -#. 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': -#. 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -35412,12 +35595,7 @@ msgstr[1] "" #. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py -msgid "" -"Meat from a heavily mutated animal. It has an unsettling loose and spongy " -"texture, but smells… mostly normal. There are strange tangles and " -"formations in it that don't appear natural at all: bits of bone and hair " -"crusted up inside the muscle, as if trying to form another organism. Still," -" seems digestible at least, if you cook it and remove the worst parts." +msgid "Meat from a heavily mutated animal." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -35430,10 +35608,8 @@ msgstr[1] "pedazos de carne mutante" #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"A tiny scrap of meat from a heavily mutated animal. It smells a bit odd, " -"and has bits of hair and bone mixed in that seem like they grew inside the " -"muscle itself. Still, seems digestible at least, if you cook it and remove " -"the worst parts." +"A tiny scrap of meat from a heavily mutated animal. It smells unappealing, " +"to say the least." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -35506,10 +35682,7 @@ msgstr[1] "" #. ~ Description for cooked mutant meat #: lang/json/COMESTIBLE_from_json.py -msgid "" -"This is a cooked chunk of meat from a mutated animal. It has an unsettling," -" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" -" the bits of hair and bone out…" +msgid "This is a cooked chunk of meat from a mutated animal." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -35518,6 +35691,14 @@ msgid_plural "cooked scraps of mutant meat" msgstr[0] "" msgstr[1] "" +#. ~ Description for {'str': 'cooked scrap of mutant meat', 'str_pl': 'cooked +#. scraps of mutant meat'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"This is a tiny scrap of cooked mutant meat. It is small enough that it's " +"hard to tell how disgusting it is." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "raw offal" msgid_plural "raw offals" @@ -35549,6 +35730,17 @@ msgstr "" " esenciales, pero mucha gente lo considera desagradable salvo que sea " "cuidadosamente preparado." +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant organs" +msgid_plural "mutant organs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'mutant organs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "These organs came from a giant mutant bug." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "pickled offal" msgid_plural "pickled offal" @@ -35741,6 +35933,17 @@ msgid "" "all cooked out." msgstr "" +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant lungs" +msgid_plural "mutant lungs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'mutant lungs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "You're pretty sure this is lung tissue." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "raw liver" msgid_plural "raw livers" @@ -35920,8 +36123,9 @@ msgstr[1] "" #. mutant fat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Freshly butchered fat from a heavily mutated animal. You could eat it raw, " -"but it is better used as an ingredient in other foods or projects." +"Freshly butchered fat from a heavily mutated animal. It smells, if " +"anything, even more disgusting than the rest of the mutant. There are " +"little puddles of unidentified oils dripping from it." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -37372,19 +37576,17 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "Es agua con azúcar o miel agregada. El gusto está bien." #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" -msgstr[0] "té" -msgstr[1] "tés" +msgid "black tea" +msgid_plural "black teas" +msgstr[0] "" +msgstr[1] "" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves" -" of the tea plant /Camellia sinensis/." +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." msgstr "" -"La bebida del caballero, hecha aplicando agua caliente a hojas de la planta " -"del té, /Camellia sinensis/." #: lang/json/COMESTIBLE_from_json.py msgid "bark tea" @@ -37437,6 +37639,33 @@ msgstr "" "Agua mineral extravagante, tan extravagante que tenerla en la mano te hace " "sentir extravagante." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia sinensis/." +" Green tea has a lighter, fresher taste than black and is traditionally " +"preferred in Asian cultures." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -43473,7 +43702,6 @@ msgstr[0] "piñones" msgstr[1] "piñones" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "" @@ -44498,16 +44726,42 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "" #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" +msgid "black tea bag" +msgid_plural "black tea bags" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'black tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'green tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fruit tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -44604,14 +44858,11 @@ msgstr[1] "" #. ~ Description for {'str': 'protein ration'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"SoyPelusa ran a highly successful crowdfunding campaign for their signature " -"protein bar, dubbed \"DaiZoom.\" A person can live on one of these bars, " -"three times a day, presumably forever. After backers received their " -"product, a single flaw was found: most consumers found starvation preferable" -" to the flavor. Warehouses of the product went unsold as the company went " -"bankrupt, providing the perfect opportunity for FEMA to scoop them up and " -"stock the evac shelters. Now, you hold a piece of famous crowdfunding " -"history in your hands. How exciting." +"SoyPelusa ran a highly successful crowdfunding campaign for their signature protein bar, dubbed \"DaiZoom.\"\n" +"\n" +"A person can live on one of these bars, three times a day, presumably forever. After backers received their product, a single flaw was found: most consumers found starvation preferable to the flavor. Warehouses of the product went unsold as the company went bankrupt, providing the perfect opportunity for FEMA to scoop them up and stock the evac shelters.\n" +"\n" +"Now, you hold a piece of famous crowdfunding history in your hands. How exciting." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -45480,12 +45731,12 @@ msgstr "" " para extraer la azúcar." #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" -msgstr[0] "hoja de té" -msgstr[1] "hojas de té" +msgid "black tea leaf" +msgid_plural "black tea leaves" +msgstr[0] "" +msgstr[1] "" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " @@ -45494,6 +45745,19 @@ msgstr "" "Hojas secas de una planta tropical. La puedes hervir para hacer té, o las " "puedes comer crudas. No te van a llenar mucho, igual." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "tomato" msgid_plural "tomatoes" @@ -48365,6 +48629,72 @@ msgid "" "to bake bread more efficiently than with just flour." msgstr "" +#: lang/json/COMESTIBLE_from_json.py +msgid "pineapple stem" +msgid_plural "pineapple stem" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'pineapple stem'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Roots of a pineapple plant, for growing your own." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "melon seeds" +msgid_plural "melon seeds" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'melon seeds'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some melon seeds." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "banana saplings" +msgid_plural "banana saplings" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'banana saplings'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some banana saplings." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "orange vine" +msgid_plural "orange vine" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'orange vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some orange vine. Definitely GMO." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "lemon vine" +msgid_plural "lemon vine" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'lemon vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some lemon vines. Definitely GMO." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "subterraenean coconut" +msgid_plural "subterraenean coconut" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'subterraenean coconut'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Proof that man went too far before the Cataclysm." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "vampire mutagen" msgid_plural "vampire mutagens" @@ -48754,6 +49084,12 @@ msgid_plural "ankylosaurus eggs" msgstr[0] "" msgstr[1] "" +#: lang/json/COMESTIBLE_from_json.py +msgid "apatosaurus egg" +msgid_plural "apatosaurus eggs" +msgstr[0] "" +msgstr[1] "" + #: lang/json/COMESTIBLE_from_json.py msgid "ceratosaurus egg" msgid_plural "ceratosaurus eggs" @@ -49088,7 +49424,7 @@ msgid_plural "scream mushrooms" msgstr[0] "" msgstr[1] "" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -49284,113 +49620,6 @@ msgid "" "see this? We will not permit you to join us while we are modded out." msgstr "" -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when" -" eaten raw." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do" -" not drink!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "" - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -50308,21 +50537,6 @@ msgstr[1] "latas de aluminio" msgid "An aluminum can, like what soda comes in." msgstr "Es una lata de aluminio, como la de los refrescos." -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "lata abierta de aluminio" -msgstr[1] "latas abiertas de aluminio" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Es una lata de aluminio, como las de los refrescos. Esta ha sido abierto y " -"no puede ser cerrado fácilmente." - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -50332,26 +50546,9 @@ msgstr[1] "cartones de papel" #. ~ Description for {'str': 'paper carton'} #: lang/json/GENERIC_from_json.py msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." +"A half gallon carton constructed of a paper, aluminum, and plastic laminate." " It has a threaded cap for easy resealing." msgstr "" -"Un cartón de medio galón construido con papel, aluminio y plástico laminado." -" Tiene una tapa roscada para un cierre fácil." - -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "cartón de papel abierto" -msgstr[1] "cartones de papel abiertos" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." -" This one is open and its contents will spoil." -msgstr "" -"Un cartón de medio galón construido con papel, aluminio y plástico laminado." -" Está abierto y su contenido se echará a perder." #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" @@ -50375,19 +50572,6 @@ msgstr[1] "" msgid "A small tin can, like what tuna comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -50399,19 +50583,6 @@ msgstr[1] "" msgid "A medium tin can, like what soup comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -50497,19 +50668,6 @@ msgstr[1] "vasos de plástico" msgid "A small, vacuum formed cup." msgstr "Es un vaso pequeño que en algún momento estuvo sellado al vacío." -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "vaso abierto de plástico" -msgstr[1] "vasos abiertos de plástico" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "" -"Es un vaso pequeño sellado al vacío en algún momento. Ahora, esencialmente " -"basura." - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -50698,7 +50856,6 @@ msgstr[0] "jarro de galón" msgstr[1] "jarros de galón" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "" @@ -50815,7 +50972,6 @@ msgstr[0] "odre pequeño" msgstr[1] "odres pequeños" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of" @@ -50953,19 +51109,6 @@ msgid "" "food." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -51501,6 +51644,34 @@ msgstr[1] "pedazos de quitina" msgid "A piece of an insect's exoskeleton. It is light and very durable." msgstr "Un pedazo del exoesqueleto de un insecto. Es liviano y muy duradero." +#: lang/json/GENERIC_from_json.py +msgid "strand of endochitin" +msgid_plural "strands of endochitin" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'strand of endochitin', 'str_pl': 'strands of +#. endochitin'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of an insect's endoskeleton." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "cluster of gas sacs" +msgid_plural "clusters of gas sacs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'cluster of gas sacs', 'str_pl': 'clusters of gas +#. sacs'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This is a cluster of membranous bubbles, each about the size of a grape, " +"retrieved from inside a mutant insect. They float like tiny helium " +"balloons, and are likely full of a lighter-than-air gas helping the bug to " +"fly." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "set of 100 ceramic disk" msgid_plural "ceramic disks" @@ -52851,8 +53022,8 @@ msgid_plural "lotus flowers" msgstr[0] "" msgstr[1] "" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -54410,6 +54581,17 @@ msgstr "" "Un cañón láser que pertenecía a una torreta láser TX-5LR Cerberus. No se " "puede usar como arma así solo sin las partes necesarias." +#: lang/json/GENERIC_from_json.py +msgid "bone armor kit" +msgid_plural "bone armor kits" +msgstr[0] "conjunto de corazas de hueso" +msgstr[1] "conjuntos de corazas de hueso" + +#. ~ Description for {'str': 'bone armor kit'} +#: lang/json/GENERIC_from_json.py +msgid "Bone plating made for a vehicle." +msgstr "Placas de hueso para ser usadas como coraza en un vehículo." + #: lang/json/GENERIC_from_json.py msgid "module template" msgid_plural "module templates" @@ -58753,7 +58935,7 @@ msgstr[1] "" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with a spiked hammer head, a spike, and a hook " -"attached to a long stick." +"attached to a beefy wooden pole." msgstr "" #. ~ Description for {'str': 'lucerne hammer'} @@ -59148,7 +59330,6 @@ msgstr[0] "palo con punta" msgstr[1] "palos con punta" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "Es un simple palo de madera con una punta afilada." @@ -59250,19 +59431,15 @@ msgstr[1] "alabardas" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with an axe blade, a spike, and other fun things" -" attached to a long stick." +" attached to a long sturdy stick." msgstr "" -"Es un arma de asta versátil con una cuchilla de hacha, una púa, y otras " -"cosas divertidas agregadas a un palo largo." #. ~ Description for {'str': 'halberd'} #: lang/json/GENERIC_from_json.py msgid "" "This is a dull, cheaply made replica of a polearm with an axe blade, a " -"spike, and other fun things attached to a long stick." +"spike, and other fun things attached to a thick pole." msgstr "" -"Es una réplica berreta sin filo de una arma de asta con una cuchilla de " -"hacha, una púa, y otras cosas divertidas agregadas a un palo largo." #: lang/json/GENERIC_from_json.py msgid "glaive" @@ -59919,19 +60096,6 @@ msgstr "" "cuchilla similar a una garra, proveniente de India y diseñada para estar " "oculta en la palma de la mano." -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "caestus" -msgstr[1] "caestus" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -60203,7 +60367,6 @@ msgstr[0] "tubo" msgstr[1] "tubos" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -60427,7 +60590,13 @@ msgid "" "been used for commercial wrapping or for weather-sealing a home." msgstr "" -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -61381,11 +61550,9 @@ msgstr[1] "gujas improvisadas" #. ~ Description for {'str': 'makeshift glaive'} #: lang/json/GENERIC_from_json.py msgid "" -"This is a large blade attached to a long stick. It could do a considerable " -"amount of damage." +"This is a large blade attached to a stout section of tree branch. It could " +"do a considerable amount of damage." msgstr "" -"Es una gran cuchilla unida a un palo largo. Puede causar un daño " -"considerable." #: lang/json/GENERIC_from_json.py msgid "mind splicer kit" @@ -61564,6 +61731,21 @@ msgstr[1] "" msgid "A stapler for fastening sheets of paper together." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "hole puncher" +msgid_plural "hole punchers" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'hole puncher'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This metal tool can help you punch a single hole in a piece of paper. I " +"mean, you could do more if you wanted, but you'd have to do them one at a " +"time. Or, if you really wanted more holes with one punch, I suppose you " +"could fold the paper… This is a one cylinder hole puncher." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "pen" msgid_plural "pens" @@ -61853,6 +62035,19 @@ msgstr "" " al vehículo hasta que flote. Después ponele los remos o el motor para que " "se pueda mover." +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -62859,7 +63054,6 @@ msgstr[0] "" msgstr[1] "" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "Una lámina fina de metal." @@ -62984,17 +63178,6 @@ msgstr[1] "conjuntos de coraza de quinita biosilicificada" msgid "Durable silica-coated chitin plating made for a vehicle." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "bone armor kit" -msgid_plural "bone armor kits" -msgstr[0] "conjunto de corazas de hueso" -msgstr[1] "conjuntos de corazas de hueso" - -#. ~ Description for {'str': 'bone armor kit'} -#: lang/json/GENERIC_from_json.py -msgid "Bone plating made for a vehicle." -msgstr "Placas de hueso para ser usadas como coraza en un vehículo." - #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "shredder" msgid_plural "shredders" @@ -63299,8 +63482,8 @@ msgid_plural "workbenches" msgstr[0] "" msgstr[1] "" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and" @@ -64112,6 +64295,18 @@ msgstr[1] "permutadores lógicos acausales" msgid "It has given you an answer, but you are yet to ask anything." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -64206,10 +64401,21 @@ msgstr[1] "" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." +msgid "A powerful electromagnet made from a room temperature superconductor." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." msgstr "" -"Es un poderoso electroimán hecho con un superconductor de temperatura " -"ambiente." #: lang/json/GENERIC_from_json.py msgid "composite alloy" @@ -64833,6 +65039,17 @@ msgid "" "battles is bookmarked." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Stormguard Warrior" +msgid_plural "Stormguard Warrior" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Stormguard Warrior'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Iron Heart discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "The Life and Work of Tiger Sauer" msgid_plural "The Life and Work of Tiger Sauer" @@ -64846,6 +65063,66 @@ msgid "" "art." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Pocket Monster Encyclopedia" +msgid_plural "Pocket Monster Encyclopedia" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Pocket Monster Encyclopedia'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This encyclopedia contains a detailed listing of the strengths and " +"techniques of various fictional monsters and how to apply them the in a real" +" fight." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Distant Horizon" +msgid_plural "Distant Horizon" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Distant Horizon'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Setting Sun discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Jedi Holocrons: Form I" +msgid_plural "Jedi Holocrons: Form I" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Jedi Holocrons: Form I'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This device contains the teachings of the first form of Jedi lightsaber " +"combat: Shii-Cho." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -64868,7 +65145,7 @@ msgstr[1] "" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." msgstr "" @@ -64993,7 +65270,7 @@ msgstr[1] "" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." +"Crystalized mana in powdered form. It faintly pulses with arcane energy." msgstr "" #: lang/json/GENERIC_from_json.py @@ -66380,140 +66657,6 @@ msgid "" "much more expensive." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional" -" lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "" - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "ARMAS" @@ -69958,30 +70101,6 @@ msgid "" "tips." msgstr "" -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test -#. disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "" - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test -#. rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "" - #: lang/json/MOD_INFO_from_json.py src/color.cpp src/color.cpp msgid "default" msgstr "predeterminado" @@ -69997,7 +70116,10 @@ msgstr "" #. ~ Description for Aftershock #: lang/json/MOD_INFO_from_json.py -msgid "Drifts the game away from realism and more towards sci-fi." +msgid "" +"Drifts the game away from realism and more towards sci-fi. Long term goal " +"of being a significantly different experience that remains compatible with " +"other mods." msgstr "" #: lang/json/MOD_INFO_from_json.py @@ -70039,8 +70161,9 @@ msgstr "" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." msgstr "" #: lang/json/MOD_INFO_from_json.py @@ -70247,16 +70370,6 @@ msgstr "" msgid "Allows stats to raise via skill progression." msgstr "" -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "DATOS DE PRUEBA" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "" - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "Desarrollo Urbano" @@ -72348,6 +72461,17 @@ msgstr "" "todas las cabezas se mueven rápidamente y las bocas arman un coro de gritos " "y quejidos." +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "humano" +msgstr[1] "humanos" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -74601,6 +74725,19 @@ msgstr "" msgid "Lightning arcs from the leech stalk!" msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -75255,6 +75392,92 @@ msgid "" "looking for patient to assist." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo" +" seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -78030,6 +78253,19 @@ msgstr "" "Un dinosaurio enorme con similitudes al rinoceronte, con una cresta de " "huesos de la que le salen tres cuernos grandes." +#: lang/json/MONSTER_from_json.py +msgid "Triceratops bio-operator" +msgid_plural "Triceratops bio-operator" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Triceratops bio-operator'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive three-horned four-legged dinosaur dotted with crackling bionics. " +"The horns glow menacingly." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Stegosaurus" msgid_plural "Stegosaurus" @@ -78057,6 +78293,19 @@ msgstr "" "Este dinosaurio parece como un quirquincho prehistórico gigante. Su cola " "termina en lo que parece un garrote enorme de hueso con púas." +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus" +msgid_plural "Apatosaurus" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Apatosaurus'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur with a long, whip-like tail. The" +" head is upright and the neck looks like it would make a good strong club." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Ceratosaurus" msgid_plural "Ceratosaurus" @@ -78289,6 +78538,116 @@ msgid_plural "magenta and green hatchlings" msgstr[0] "" msgstr[1] "" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs," +" broad shoulders and a pointed beak. Its tattered feathers are stained with" +" black, sticky liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus zombie" +msgid_plural "Spinosaurus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Enormous putrid dinosaur corpse with a ferocious crocodile-like head, oozing" +" black eyes, and a tattered sail on its back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -78301,12 +78660,133 @@ msgid "Massive piles of ragged, stinking flesh lifting enormous teeth." msgstr "" #: lang/json/MONSTER_from_json.py -msgid "Z-Deinonychus" -msgid_plural "Z-Deinonychus" +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with feathery edges. The head looks big, lots of big" +" teeth would fit in it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "S-Rex" +msgid_plural "S-Rexes" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str_sp': 'Z-Deinonychus'} +#. ~ Description for {'str': 'S-Rex', 'str_pl': 'S-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Monstrous columns of dense bone lifting enormous sharp pointed teeth " +"dripping with black goo." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus zombie" +msgid_plural "Deinonychus zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Deinonychus zombie'} #: lang/json/MONSTER_from_json.py msgid "" "The shuffling corpse of a medium-sized bipedal dinosaur covered with " @@ -78314,6 +78794,73 @@ msgid "" "sickle-like claw." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms," +" a long tail, and long sharp scythe-like claws." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent" +" bony crests on its head with ragged strips of ripped flesh hanging down " +"like a frill." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" msgid_plural "improvised SMG turrets" @@ -79063,21 +79610,6 @@ msgid "" "traditional forces." msgstr "" -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper -#. mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "" -"Tiene una forma vagamente humanoide, cubierta de capas de algo que parece " -"papel higiénico." - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -79452,19 +79984,6 @@ msgid "" "chitin fitted to a thin mesh. You could put this on a friendly horse." msgstr "" -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "" - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "" @@ -80209,6 +80728,22 @@ msgstr "" msgid "This fake spell occurs on cranial bomb activation. Likely fatal." msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "" @@ -80612,8 +81147,8 @@ msgstr "" msgid "Debug Full Protection" msgstr "" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "" @@ -81101,10 +81636,10 @@ msgstr "" msgid "Jolt" msgstr "" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py lang/json/mutation_category_from_json.py msgid "a crackle" msgstr "" @@ -81173,6 +81708,31 @@ msgstr "" msgid "Wall of Fog" msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "" + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "" @@ -81285,65 +81845,37 @@ msgstr "" msgid "X-ray Vision" msgstr "" -#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py -msgid "Mana Siphon" -msgstr "" - -#. ~ Description for Mana Siphon -#: lang/json/SPELL_from_json.py -msgid "" -"This is the spell portion of the mana siphon series of mutations. If you " -"have this spell you probably debugged it in." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Pew, Pew" -msgstr "" - -#. ~ Description for Pew, Pew #: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." +msgid "Knock" msgstr "" -#: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "El Suelo es Lava" - -#. ~ Description for The Floor is Lava +#. ~ Description for Knock #: lang/json/SPELL_from_json.py msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" +"You channel magic into a force capable of opening doors. This variant can " +"only open wooden doors." msgstr "" #: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" +msgid "Improved Knock" msgstr "" -#. ~ Description for Sports Training Montage +#. ~ Description for Improved Knock #: lang/json/SPELL_from_json.py msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "" - -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." +"You channel magic into a force capable of opening doors. This variant can " +"open any locked door." msgstr "" -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" +#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py +msgid "Mana Siphon" msgstr "" -#. ~ Description for Summon Mummy +#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." +"This is the spell portion of the mana siphon series of mutations. If you " +"have this spell you probably debugged it in." msgstr "" #: lang/json/TOOLMOD_from_json.py @@ -83929,28 +84461,33 @@ msgid "" msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser -#. Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater -#. Girdles of Pockets'} +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" msgstr[0] "" msgstr[1] "" +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" + #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" msgid_plural "Belts of Weaponry" @@ -88878,13 +89415,11 @@ msgstr[1] "móviles inteligentes" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "Activas la aplicación de linterna." #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "El cargador del móvil inteligente es demasiado bajo." @@ -90373,7 +90908,6 @@ msgstr[0] "hacha de bombero" msgstr[1] "hachas de bombero" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -90390,7 +90924,6 @@ msgstr[0] "barra halligan" msgstr[1] "barras halligan" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -90663,6 +91196,30 @@ msgstr "" "Es una piedra aplanada sujetada a un palo. Funciona bastante bien como pala," " pero la verdad es que no se puede comparar con una pala seria." +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than" +" raking leaves." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -90693,6 +91250,28 @@ msgstr "" "Es una herramienta para cavar. Úsala para cavar pozos en los espacios " "adyacentes al lugar donde estés parado." +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -91523,6 +92102,12 @@ msgstr "" "Es una forja portátil para metalurgia, alimentada a carbón. Si se combina " "con las herramientas adecuadas, se puede usar para trabajar el metal." +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -91675,6 +92260,18 @@ msgstr "" "Son unas largas pinzas de metal. Son comúnmente usadas para cocinar o para " "trabajar el metal." +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -91846,6 +92443,19 @@ msgstr "" "de transportar. Te aísla del suelo, lo que facilita dormir. Úsalo para " "desenrollarlo y ponerlo en el suelo." +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -93826,7 +94436,6 @@ msgstr[0] "trapo" msgstr[1] "trapos" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -94307,12 +94916,12 @@ msgstr "" "apagarla." #: lang/json/TOOL_from_json.py -msgid "stone hand axe" -msgid_plural "stone hand axes" +msgid "stone axe head" +msgid_plural "stone axe heads" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'stone hand axe'} +#. ~ Description for {'str': 'stone axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a broad piece of stone with an edge narrow enough to roughly chop " @@ -94320,12 +94929,12 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "metal hand axe" -msgid_plural "metal hand axes" +msgid "metal axe head" +msgid_plural "metal axe heads" msgstr[0] "" msgstr[1] "" -#. ~ Description for {'str': 'metal hand axe'} +#. ~ Description for {'str': 'metal axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a chunk of steel with one edge hammered down to something resembling" @@ -94450,6 +95059,12 @@ msgstr "" "para cocinar ladrillos, pero la puedes usar para cocinar cualquier cosa " "hecha de arcilla." +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -94622,7 +95237,6 @@ msgstr[0] "gato hidráulico de tipo tijera" msgstr[1] "gatos hidráulicos de tipo tijera" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "" @@ -94879,7 +95493,6 @@ msgstr[0] "destornillador" msgstr[1] "destornilladores" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -94929,7 +95542,6 @@ msgstr[0] "soldadora de mano" msgstr[1] "soldadoras de mano" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -95359,14 +95971,14 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" +msgid "pseudo atomic butter churn" +msgid_plural "pseudo atomic butter churns" msgstr[0] "" msgstr[1] "" #: lang/json/TOOL_from_json.py -msgid "pseudo atomic butter churn" -msgid_plural "pseudo atomic butter churns" +msgid "precision solderers" +msgid_plural "precision solderers" msgstr[0] "" msgstr[1] "" @@ -95566,6 +96178,21 @@ msgid "" "specialized tools." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -96418,6 +97045,66 @@ msgid_plural "greater wands of cone of cold" msgstr[0] "" msgstr[1] "" +#: lang/json/TOOL_from_json.py +msgid "minor wand of knock" +msgid_plural "minor wands of knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'minor wand of knock', 'str_pl': 'minor wands of +#. knock'} +#. ~ Description for {'str': 'lesser wand of knock', 'str_pl': 'lesser wands +#. of knock'} +#. ~ Description for {'str': 'greater wand of knock', 'str_pl': 'greater wands +#. of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of knock" +msgid_plural "lesser wands of knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of knock" +msgid_plural "greater wands of knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "minor wand of improved knock" +msgid_plural "minor wands of improved knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'minor wand of improved knock', 'str_pl': 'minor +#. wands of improved knock'} +#. ~ Description for {'str': 'lesser wand of improved knock', 'str_pl': +#. 'lesser wands of improved knock'} +#. ~ Description for {'str': 'greater wand of improved knock', 'str_pl': +#. 'greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts improved knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of improved knock" +msgid_plural "lesser wands of improved knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of improved knock" +msgid_plural "greater wands of improved knock" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "disposable minor wand of magic missile" msgid_plural "disposable minor wands of magic missile" @@ -96598,6 +97285,66 @@ msgid_plural "disposable greater wands of cone of cold" msgstr[0] "" msgstr[1] "" +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of knock" +msgid_plural "disposable minor wands of knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'disposable minor wand of knock', 'str_pl': +#. 'disposable minor wands of knock'} +#. ~ Description for {'str': 'disposable lesser wand of knock', 'str_pl': +#. 'disposable lesser wands of knock'} +#. ~ Description for {'str': 'disposable greater wand of knock', 'str_pl': +#. 'disposable greater wands of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of knock" +msgid_plural "disposable lesser wands of knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of knock" +msgid_plural "disposable greater wands of knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of improved knock" +msgid_plural "disposable minor wands of improved knock" +msgstr[0] "" +msgstr[1] "" + +#. ~ Description for {'str': 'disposable minor wand of improved knock', +#. 'str_pl': 'disposable minor wands of improved knock'} +#. ~ Description for {'str': 'disposable lesser wand of improved knock', +#. 'str_pl': 'disposable lesser wands of improved knock'} +#. ~ Description for {'str': 'disposable greater wand of improved knock', +#. 'str_pl': 'disposable greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts improved knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of improved knock" +msgid_plural "disposable lesser wands of improved knock" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of improved knock" +msgid_plural "disposable greater wands of improved knock" +msgstr[0] "" +msgstr[1] "" + #: lang/json/TOOL_from_json.py msgid "finger firelighter" msgid_plural "finger firelighters" @@ -96734,75 +97481,6 @@ msgid "" "magical metals into their workable ingot form." msgstr "" -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "" -msgstr[1] "" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "" - #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" msgid_plural "yokes and harnesses" @@ -97195,14 +97873,42 @@ msgstr "" msgid "Freeman's favorite" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Wield a crowbar" +msgstr "" + #: lang/json/achievement_from_json.py msgid "Impenetrable" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Wear a tank suit" +msgstr "" + #: lang/json/achievement_from_json.py msgid "What are they hiding?" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Enter a lab finale room" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "The Last Homely House" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Reach a refugee center" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Return to your roots" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Return to the location you started the game" +msgstr "" + #: lang/json/achievement_from_json.py msgid "Would-be Wizard" msgstr "Aspirante a maga" @@ -98009,10 +98715,6 @@ msgstr "" msgid "mana energy" msgstr "" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "Bomba de Adrenalina" @@ -99584,19 +100286,6 @@ msgstr "" msgid "Wind Turbines" msgstr "Turbinas de viento" -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" - #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" msgstr "" @@ -99643,6 +100332,19 @@ msgid "" "and fast." msgstr "" +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" + #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" msgid_plural "Ionic Overload Generators" @@ -99991,7 +100693,7 @@ msgid "Merciful" msgstr "" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp src/scenario.cpp msgid "All" msgstr "Todo/as" @@ -102633,7 +103335,7 @@ msgstr "" msgid "You mount your steed." msgstr "" -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "En LLamas" @@ -105130,66 +105832,6 @@ msgstr "" msgid "The gum webs constrict your movement." msgstr "" -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "" - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "" - #: lang/json/faction_from_json.py msgid "Your Followers" msgstr "Tus Seguidores" @@ -105387,6 +106029,17 @@ msgid "" " the kind words used about them." msgstr "" +#: lang/json/faction_from_json.py +msgid "Swampers Religious Community and Hotels and Casinos" +msgstr "" + +#. ~ Description for Swampers Religious Community and Hotels and Casinos +#: lang/json/faction_from_json.py +msgid "" +"A prosperous but secretive group of churchgoers and entertainment moguls " +"with an affection for dinosaurs. They welcome all untainted humans." +msgstr "" + #: lang/json/faction_from_json.py msgid "The Ancient Ones" msgstr "" @@ -109470,6 +110123,77 @@ msgid "" "temperature. You'll need to take it down first." msgstr "" +#: lang/json/furniture_from_json.py +msgid "sleep pod" +msgstr "" + +#. ~ Description for sleep pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a climate controlled sleep pod. An easy way to reduce energy costs " +"in dense urban environments." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "cryo pod" +msgstr "" + +#. ~ Description for cryo pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a long term sleep pod. Cryo pods are mostly used by people waiting " +"a short term for organs or criminals avoiding heat right after a crime." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "CRISPR Biolab" +msgstr "" + +#. ~ Description for CRISPR Biolab +#: lang/json/furniture_from_json.py +msgid "" +"A boxy looking device of arms, droppers and pipettes. It was used pre-" +"Cataclysm to do expirements in gene editing." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "3D printer" +msgstr "" + +#. ~ Description for 3D printer +#: lang/json/furniture_from_json.py +msgid "" +"This box was used for rapid prototyping of products and for general " +"entertainment purposes in the masses." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "neural net inserter" +msgstr "" + +#. ~ Description for neural net inserter +#: lang/json/furniture_from_json.py +msgid "" +"This device looks like a cross between some kind of nightmare dentistry " +"equipment and socketing tool mounted on a slide that lets it drop precisely " +"down. Useful for those project that require putting delicate items into " +"hard to reach spaces." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "monomolecular saw" +msgstr "" + +#. ~ Description for monomolecular saw +#: lang/json/furniture_from_json.py +msgid "" +"A wire the size of a cheescutter runs in a single direction in this tool, " +"allowing atomically precise cuts at almost any angle. Even unpowered it " +"gives off a visual distortion for several inches around it to prevent you " +"from losing a hand. It is impossible to deconstruct this device without the" +" wire self destructing." +msgstr "" + #. ~ Description for dresser #: lang/json/furniture_from_json.py msgid "Dress yourself!" @@ -109838,8 +110562,7 @@ msgid "" " a double barrel shotgun." msgstr "" -#: lang/json/gun_from_json.py lang/json/gun_from_json.py -#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" msgstr "escopeta" @@ -110010,7 +110733,8 @@ msgstr "" "siglo XXI. Con poco de cinta adhesiva y partes electrónicas, funciona con un" " UPS normal." -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py src/item.cpp +#: lang/json/gun_from_json.py lang/json/gun_from_json.py +#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py src/item.cpp msgctxt "gun_type_type" msgid "pistol" msgstr "pistola" @@ -113836,6 +114560,18 @@ msgid "" "will have to suffice." msgstr "" +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "" + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -114595,6 +115331,16 @@ msgstr "" msgid "trilaser" msgstr "" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "" +msgstr[1] "" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -115386,6 +116132,12 @@ msgid "" "reliability." msgstr "" +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "" +msgstr[1] "" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -115466,22 +116218,6 @@ msgstr "" msgid "Fake gun that fires barbed javelins." msgstr "" -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "" - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -117511,16 +118247,6 @@ msgid "" "replacing the iron sights. Increases accuracy and weight." msgstr "" -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "" -msgstr[1] "" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "" - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "Destripás y fileteás el pescado" @@ -117552,8 +118278,32 @@ msgid "" msgstr "" #: lang/json/harvest_from_json.py -msgid "You laboriously dissect the colossal insect." -msgstr "Laboriosamente, diseccionas el gigantesco insecto." +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "You laboriously dissect the colossal insect. " +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"What appeared to be insect hairs on the chitin of this creature look more " +"like tiny feathers as you pare them back. Inside is a bundle of bubble-like" +" tissue sacs that appear to be floating, which doesn't fit with what you " +"know about real bees." +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"There's a faintly hairy, skin-like membrane, covered in blood vessels, " +"beneath the chitin of this creature. Inside it is a bundle of bubble-like " +"tissue sacs that appear to be floating, which doesn't fit with what you know" +" about real wasps." +msgstr "" #: lang/json/harvest_from_json.py msgid "You laboriously hack and dig through the remains of the fungal mass." @@ -120536,6 +121286,13 @@ msgstr "" msgid "This item can be used to communicate with radio waves." msgstr "" +#. ~ Please leave anything in unchanged. +#: lang/json/json_flag_from_json.py +msgid "" +"This item can be used to pick locks with zero " +"effort." +msgstr "" + #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is designed to keep you dry in the rain." @@ -122862,6 +123619,15 @@ msgstr "" msgid "Zombie trap." msgstr "" +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "" + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -124167,6 +124933,11 @@ msgid "" "years.'" msgstr "" +#. ~ Computer name +#: lang/json/mapgen_from_json.py +msgid "DinoLab Operating Theater Controls" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "No style" msgstr "Sin estilo" @@ -124437,6 +125208,21 @@ msgid "" "Lasts 3 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "Capoeira Tempo" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': +#. 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "Kung Fu de la Grulla" @@ -124592,6 +125378,22 @@ msgid "" "+2 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "Combinación de Eskrima" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': +#. 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "Esgrima" @@ -124629,6 +125431,33 @@ msgid "" "Blocked damage reduced by 50% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "Parada" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -124677,6 +125506,34 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "Judo" @@ -124925,6 +125782,32 @@ msgid "" "+1 Dodge attempts, blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "Muay Thai" @@ -124963,6 +125846,21 @@ msgid "" "Blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay +#. Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% of Strength.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "Ninjutsu" @@ -125028,6 +125926,34 @@ msgid "" "Last 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': +#. 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "Niten Ichi-Ryu" @@ -125101,6 +126027,39 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "Pancracio" @@ -125252,6 +126211,21 @@ msgid "" "Perception increases Accuracy instead of Dexterity. Accuracy increased by 25% of Perception but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "" @@ -125406,6 +126380,21 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "Kung Fu del Tigre" @@ -125462,6 +126451,21 @@ msgid "" "Accuracy increased by 25% of Strength but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "" @@ -125515,6 +126519,20 @@ msgid "" " Dodging Skill increased by 15% of Perception. Blocked damage reduced by 50% of Perception." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch (Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "Zui Quan" @@ -125634,6 +126652,34 @@ msgstr "" "+Inteligencia armadura contra electricidad, +Percepción armadura contra " "fuego." +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2" +" times." +msgstr "" + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "Combativo Biónico" @@ -125673,6 +126719,22 @@ msgid "" "+2 Blocks attempts, +1 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic +#. Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "Kung Fu del Ciempiés" @@ -125710,6 +126772,20 @@ msgid "" "Lasts 3 turns. Stacks 4 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': +#. 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "Kung Fu del Lagarto" @@ -125829,6 +126905,20 @@ msgid "" "Stacks 2 times. Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': +#. 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "Kung Fu del Sapo" @@ -125880,6 +126970,34 @@ msgid "" "Lasts 6 turns. Stacks 6 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad +#. Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "Kung Fu de la Víbora" @@ -126221,6 +127339,34 @@ msgid "" "Lasts 1 turn. Stacks 2 times" msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Quicksilver Motion" +msgstr "" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': +#. 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence combine to allow you to make a fast, bold move that catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond +#. Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Hylian Swordsmanship" msgstr "" @@ -126314,6 +127460,46 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Heart" +msgstr "" + +#. ~ Description for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Absolute mastery of the sword is the goal of the Iron Heart discipline. " +"Through unending practice and study, the Iron Heart adept achieves " +"superhuman skill with her weapons. Iron Heart maneuvers are demonstrations " +"of uncanny martial skill—weaving patterns of steel that dizzy, confuse, and " +"ultimately kill with no recourse." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "You push away your fear and stand tall." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s takes a bold and fearless stance." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Panzer Kunst" msgstr "" @@ -126365,6 +127551,393 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Pokken" +msgstr "" + +#. ~ Description for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Pokken or \"Pocket Fist\" is a strange martial art developed from the famous" +" Pokemon video game series. Somehow, a group of dedicated fans managed to " +"combine the moves used by various pokemon with multiple existing martial " +"arts such as boxing and karate. Amazingly, it actually works. Some might " +"even say it's a super effective way to fight." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "You get ready to battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s is about to challenge someone to a battle." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Setting Sun" +msgstr "" + +#. ~ Description for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Setting Sun discipline teaches its initiates to turn their opponents' " +"strength against them. With a quick shift in stance and carefully aimed " +"attack, a Setting Sun warrior sends a charging enemy tumbling in a new " +"direction." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "You shift your weight and prepare to defend yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s shifts their weight and assumes a new stance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and \"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Shii-Cho" +msgstr "" + +#. ~ Description for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Shii-Cho, \"The way of the Sarlacc\" was the first form lightsaber combat " +"developed by the Jedi during their transition from metal weaponry to " +"lightsabers. Shii-Cho is regarded as a training form that all Jedi learn to" +" understand the basics of armed combat. Shii-Cho excels at fighting against" +" groups but lacks the offensive power of the other lightsaber forms." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You place one foot back and hold your weapon vertically on your dominant " +"side." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s places one foot back and hold their weapon vertically." +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are a determined warrior. Your inner calm aids you in landing your strikes and protecting yourself.\n" +"\n" +"Blocked damage reduced by 100% of Strength, +1 Accuracy." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Apprentice Training" +msgstr "" + +#. ~ Description of buff 'Apprentice Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training in Shii-Cho teaches you how to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Knight Training" +msgstr "" + +#. ~ Description of buff 'Knight Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Further training in Shii-Cho improves your ability to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Master Training" +msgstr "" + +#. ~ Description of buff 'Master Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"As a master of Shii-Cho, your ability to fight against groups is second to none.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to die.\n" +"\n" +"+5% critical hit chance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "Alcohol" @@ -126848,7 +128421,7 @@ msgid "Emulsified Hydrogel" msgstr "" #: lang/json/material_from_json.py -msgid "pupled" +msgid "pulped" msgstr "" #: lang/json/material_from_json.py @@ -128598,7 +130171,7 @@ msgid "Can you go find my son and tell him to check in with us." msgstr "" #: lang/json/mission_def_from_json.py lang/json/mission_def_from_json.py -#: lang/json/talk_topic_from_json.py +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py msgid "Thank you." msgstr "Gracias. " @@ -128890,7 +130463,7 @@ msgstr "" #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20" +"We could use some 3 liter jars to preserve our produce. Can you bring me 10" " large three liter jars? I'll give you some preserves in exchange." msgstr "" @@ -130644,6 +132217,87 @@ msgstr "Si, seguro." msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check" +" it out, I'll owe you a favor." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "Hacer 2 Destiladores" @@ -131955,6 +133609,54 @@ msgstr "" msgid "I can't be Dr Frankenstein unless you get me these." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Gather meat for Bo Baronyx. About 8 should do it." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters are hungry. They need meat" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"If you wish to feed the eaters, your work will be rewarded. Go out, butcher" +" a pure animal. Not a false eater, the meat must be good to eat. Then " +"bring me the meat and I will see to the eaters." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Excellent. The eaters must feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Understood. The great eaters will feed either way." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"Some of the animals have become touched by the pretenders in recent days, " +"larger and more dangerous, producing tainted mutant meat. This will not " +"work for the great eaters, it must be the true meat." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Have you brought meat?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed I am sure." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I see no meat. There is meat in the forests and swamps waiting for the " +"eaters." +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Retrieve Magic Book" msgstr "" @@ -134290,6 +135992,23 @@ msgstr "" "Puedes moverte más rápido que la mayoría. Tienes un 15% de bonus sobre la " "velocidad normal a pie." +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore" +msgstr "" + +#. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "" +"A photophore has grown from your head. You can't consciously control it, " +"and it might start to shine in response to your emotions or your " +"physiological state." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "" @@ -134302,13 +136021,50 @@ msgid "" "mating season." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." +msgid "You can make your photophore glow brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Normal Human" +msgstr "" + +#. ~ Description for {'str': 'Normal Human'} +#: lang/json/mutation_from_json.py +msgid "" +"You're a normal human, there's nothing wrong with you. No need to worry." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Violent Monster" +msgstr "" + +#. ~ Description for {'str': 'Violent Monster'} +#: lang/json/mutation_from_json.py +msgid "Anger clouds your mind, you can't think straight but you feel strong." msgstr "" #: lang/json/mutation_from_json.py @@ -134417,12 +136173,12 @@ msgstr "Sanador/a Veloz" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." msgstr "" -"Te curas más rápido cuando duermes e incluso recuperas una pequeña cantidad " -"de PV cuando no duermes." #: lang/json/mutation_from_json.py msgid "Light Eater" @@ -135161,8 +136917,11 @@ msgstr "Sanador/a Lento/a" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." -msgstr "Te curas un poco más lento que la mayoría; dormir curará menos PV." +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Poor Healer" @@ -135170,12 +136929,11 @@ msgstr "Poco Sanador/a" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to" -" recover only a third of usual HP." +"Your health recovery is severely impaired. Your HP whilst asleep as well as" +" your broken limbs heal at 33% the regular rate." msgstr "" -"Tu recuperación de la salud a través del sueño se ve gravemente afectada y " -"hace que recuperes solo un tercio de los PV habituales." #: lang/json/mutation_from_json.py msgid "Imperceptive Healer" @@ -135183,12 +136941,11 @@ msgstr "Sanador/a Imperceptivo/a" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth" -" of usual HP." +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP" +" whilst asleep as well as your broken limbs heal at 10% the regular rate." msgstr "" -"Apenas te recupera la salud al dormir, solo sanará una décima parte de los " -"PV habituales." #: lang/json/mutation_from_json.py msgid "Far-Sighted" @@ -135998,12 +137755,11 @@ msgstr "Sanador Muy Rápido" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not " -"sleeping." +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." msgstr "" -"Tu carne se regenera lentamente, y vas a recuperar PV incluso sin estar " -"durmiendo." #: lang/json/mutation_from_json.py msgid "Regeneration" @@ -136011,8 +137767,12 @@ msgstr "Regeneración" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." -msgstr "Tu carne se regenera de sus heridas increíblemente rápido." +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster" +" whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16" +" times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Reptilian Healing" @@ -136020,8 +137780,10 @@ msgstr "Sanador Reptiliano" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." -msgstr "Tus miembros rotos se curan solos sin mucha dificultad." +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Very Little Sleep" @@ -137191,9 +138953,9 @@ msgid "" "grass as well as underbrush and shrubs. Eat either one by activating this, " "standing over your target, and pressing E." msgstr "" -"Estás acostumbrado a comer plantas de manera directa, y podés obtener " -"nutrientes del pasto y también de la maleza y de los arbustos. Te los podés " -"comer parándote encima y apretando 'E'." +"Estás acostumbrado a comer plantas de manera directa, y puedes obtener " +"nutrientes de la hierba y también de la maleza y de los arbustos. Te los " +"puedes comer parándote encima y apretando 'E'." #: lang/json/mutation_from_json.py msgid "Intestinal Fortitude" @@ -140597,7 +142359,8 @@ msgstr "" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." msgstr "" #: lang/json/mutation_from_json.py @@ -141857,6 +143620,28 @@ msgid "" "improves as your unarmed skill increases." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Jedi Training" +msgstr "" + +#. ~ Description for {'str': 'Jedi Training'} +#: lang/json/mutation_from_json.py +msgid "" +"You are trained in the ways of the Jedi. Your knowledge allows you to " +"utilize a form of lightsaber combat." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Pokken Master" +msgstr "" + +#. ~ Description for {'str': 'Pokken Master'} +#: lang/json/mutation_from_json.py +msgid "" +"You are well versed in the monsterous Pocket Fist martial art. Train well, " +"because it is your destiny to be a master." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Martial Adept" msgstr "" @@ -141865,7 +143650,8 @@ msgstr "" #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." msgstr "" #: lang/json/mutation_from_json.py @@ -142847,6 +144633,14 @@ msgstr "" msgid "Humans created me. Let's see what I can be on my own." msgstr "" +#: lang/json/npc_class_from_json.py +msgid "Swamper" +msgstr "" + +#: lang/json/npc_class_from_json.py +msgid "The great eaters have returned and they must be fed" +msgstr "" + #: lang/json/npc_class_from_json.py msgid "Operator" msgstr "" @@ -143132,6 +144926,14 @@ msgstr "" msgid "Millyficen Whately" msgstr "" +#: lang/json/npc_from_json.py +msgid "CEO" +msgstr "" + +#: lang/json/npc_from_json.py +msgid "Bo Baronyx" +msgstr "" + #: lang/json/npc_from_json.py msgid "magus" msgstr "dulce" @@ -150603,6 +152405,118 @@ msgstr "" "supervivientes de un lugar a otro. Sabias que solo era cuestión de tiempo " "antes que los horrores que rondan el cielo te derribaran." +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -150783,8 +152697,9 @@ msgstr "" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -150797,8 +152712,9 @@ msgstr "" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -152075,6 +153991,226 @@ msgid "" "find some other use." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -153741,7 +155877,7 @@ msgid "build a metalworking forge" msgstr "" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." +msgid "Let's build an anvil and crucible to increase our crafting options." msgstr "" #: lang/json/recipe_from_json.py @@ -158156,6 +160292,40 @@ msgctxt "start_name" msgid "Wizard's Retreat Vacation" msgstr "" +#. ~ Name for scenario 'Exile' for a male character +#: lang/json/scenario_from_json.py +msgctxt "scenario_male" +msgid "Exile" +msgstr "" + +#. ~ Name for scenario 'Exile' for a female character +#: lang/json/scenario_from_json.py +msgctxt "scenario_female" +msgid "Exile" +msgstr "" + +#. ~ Description for scenario 'Exile' for a male character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_male" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Description for scenario 'Exile' for a female character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_female" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Starting location for scenario 'Exile'. +#: lang/json/scenario_from_json.py +msgctxt "start_name" +msgid "Exiled" +msgstr "" + #. ~ Name for scenario 'The Sweet Life' for a male character #: lang/json/scenario_from_json.py msgctxt "scenario_male" @@ -168429,6 +170599,326 @@ msgstr "-estilo" msgid "-chant" msgstr "-chant" +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. It has an unsettling loose and spongy " +"texture, but smells… mostly normal. There are strange tangles and " +"formations in it that don't appear natural at all: bits of bone and hair " +"crusted up inside the muscle, as if trying to form another organism. Still," +" seems digestible at least, if you cook it and remove the worst parts." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although it came from muscle tissue, it" +" has a curious swirling grain pattern, and at the center of each grain is a " +"knot of hard, cartilaginous tissue. It smells offputting." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. This is from muscle, but in the fascial" +" tissue between the muscles, thick spiny hairs have grown. Foul smelling, " +"cream-colored fluid gushes out whenever a hair pulls loose." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although this came from muscle, it has " +"a thick cordlike texture and smells like leather and bread mold." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. It has an unsettling," +" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" +" the bits of hair and bone out…" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. You thought you'd " +"cleared out all the gross parts, but while cooking, a fluid-filled sac " +"inside burst and covered it in some kind of thick grease." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. The surface is " +"peppered with divets from the pieces you had to dig out to make it seem " +"edible." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. Heat caused the " +"muscles to twist and move as if they were alive, and now it has writhed " +"itself into a dense knot." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug, and you really aren't sure what " +"to make of them. There are things you've never seen in any anatomy book, " +"with spines and hair and other unidentified parts protruding off seemingly " +"at random." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug. They have a sickly green color, " +"and one of them ripped when you were removing it, revealing an inner surface" +" that looks like row upon row of human fingers, nails and all." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a huge, thick, fleshy sac you removed from a giant mutant bug. The " +"surface is covered in smooth, soft skin, and beneath it is a coiled, twisted" +" mess of cordlike tissue." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a long, corded organ you removed from a giant mutant bug. It ran " +"from the head to the abdomen and has long tendrils coming off it, not unlike" +" a spinal cord." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a meaty grey organ you removed from a mutant. It has a chalky " +"yellow coating that burns your skin, and several unidentifiable fleshy tubes" +" sticking out of it. The smell it gives off stings your nostrils. You're " +"pretty confident no natural creature has one of these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This organ meat, retrieved from a mutated creature, looks like a series of " +"small mammalian hearts arranged in series on a long fleshy tube. At the end" +" of the chain is a large fleshy sac resembling a stomach." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It looks like a lung from a larger " +"mammal, like a dog, but instead of a few distinct lobes, it has dozens of " +"lobes arranged in sheets. Strange spindles and gnarled tumescences dot the " +"surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It has a vaguely wing-like shape, " +"with a series of nodules around what would be the trailing edge of the " +"'wing'. A cluster of quills in each corner of the organ held it to the " +"bug's carapace like clasps." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton, but mutated. The inner side is lined with " +"veins and strange hooked protuberances." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton. Stringy lines of nervous tissue and blood " +"vessels still cling to the inner surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of rigid, tube-shaped chitin from the inside of a giant bug. It " +"seemed to be performing some kind of support role. You're quite sure normal" +" insects don't have these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A long, flexible rod of chitin from inside a giant mutant bug. It is laced " +"with blood vessels and chitinous nodules." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"As you peel away the outer shell, you find veins lining the chitin plates" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "With the creature dead, its carapace comes away surprisingly easily" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"There's a thin membrane, much like skin, spread over the chitin of this " +"creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Under the carapace of this mutant is a bristly, velcro-like material" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The anatomy concealed beneath seems almost like a small mammal given a shell" +" and twisted into the shape of an arthropod" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "You crack the beast open like a horrific lobster" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The chitin holds tight to the creature, and you need to snap and tear it " +"away, sawing at tough fibers beneath" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside, half-formed organs press against spongy meat that doesn't look " +"anything like raw arthropod meat from normal creatures" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You find a collection of hooked spines beneath that seem to have been " +"clasping it on somehow" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a complex, still-squirming mess of strange appendages and organs " +"that bear only a passing resemblance to any natural creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Beneath the chitin, the meat is covered in thick, bristly hair hiding a " +"chaotic bramble of half-formed, mutated organs" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a tangled mess of organs and tissues that do not appear to " +"entirely natural" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside the creature you find lungs, hearts, and intestines more like a " +"mammal than a giant bug" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The meat inside gives off a horrifying stench, and seems to be covered in " +"thin damp hair, like a newborn animal gone horribly wrong" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Small bundles of fiber break loose as you work, splitting open to reveal " +"twisted, half-formed copies of the creature itself" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"It is difficult to work, as the spongey tissue tears apart under your tools" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Steaming puddles of acid spill from its outer shell as you pull it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Steaming acid burbles from the creature's chitin as you peel it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several acid glands rupture as you peel back the carapace, sending streams " +"of steaming caustic fluids spraying around" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The organs themselves have an acrid odour, but don't seem as caustically " +"acidic as the outer shell" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You carefully avoid breaking through pockets of what you think may be acid-" +"secreting glands" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Thick, ropey cords of tissue beneath its chitin protect an inner layer of " +"strange organs, resembling those of a bird more than anything" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The powerfully acidic vapors coming from the carcass make it hard to work" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The tissues of the creature are full of half-formed organs, their purpose " +"unclear" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several times, you nearly burn yourself piercing a concealed gland full of " +"acid" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + #: lang/json/snippet_from_json.py msgid "" "ATOMIC DEREGULATION! President Toffer announced to a mixed crowd today that" @@ -176763,6 +179253,10 @@ msgstr "" msgid "Middle of Nowhere" msgstr "El medio de la nada" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "Celda de Experimentos" @@ -177059,6 +179553,12 @@ msgstr "" msgid "Yeah, alright." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"The song is… quiet for now. Perhaps with time, more notes will be etched in" +" the bones of this world." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "An acolyte should not take on too many songs at once." msgstr "" @@ -177068,9 +179568,7 @@ msgid "That is all for now." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"The song is… quiet for now. Perhaps with time, more notes will be etched in" -" the bones of this world." +msgid "There are bones to etch, songs to sing. Wish to join me?" msgstr "" #: lang/json/talk_topic_from_json.py @@ -177082,7 +179580,7 @@ msgid "Do you believe you can take on the burden of additional bones?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "There are bones to etch, songs to sing. Wish to join me?" +msgid "A song may yet be sung by you, should you wish to." msgstr "" #: lang/json/talk_topic_from_json.py @@ -177094,10 +179592,6 @@ msgid "" "I know of certain bones that could be of use, if you'd like to know more." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "A song may yet be sung by you, should you wish to." -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "I see." msgstr "Entiendo." @@ -177692,11 +180186,11 @@ msgid "no, go back to sleep." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "What is it, friend?" +msgid " *pshhhttt* I'm reading you boss, over." msgstr "" #: lang/json/talk_topic_from_json.py -msgid " *pshhhttt* I'm reading you boss, over." +msgid "What is it, friend?" msgstr "" #: lang/json/talk_topic_from_json.py @@ -177935,15 +180429,15 @@ msgstr "" msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "" -#: lang/json/talk_topic_from_json.py src/action.cpp src/activity_handlers.cpp -#: src/avatar.cpp src/avatar.cpp src/avatar_action.cpp src/avatar_action.cpp -#: src/avatar_action.cpp src/crafting.cpp src/game.cpp src/handle_action.cpp -#: src/handle_action.cpp src/handle_liquid.cpp src/handle_liquid.cpp -#: src/iexamine.cpp src/iexamine.cpp src/iexamine.cpp src/iuse.cpp -#: src/iuse.cpp src/iuse.cpp src/iuse_actor.cpp src/iuse_actor.cpp -#: src/iuse_actor.cpp src/monexamine.cpp src/monexamine.cpp src/npc.cpp -#: src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp -#: src/veh_interact.cpp src/vehicle_use.cpp +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py +#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp src/avatar.cpp +#: src/avatar_action.cpp src/avatar_action.cpp src/crafting.cpp +#: src/crafting.cpp src/game.cpp src/handle_action.cpp src/handle_action.cpp +#: src/handle_liquid.cpp src/handle_liquid.cpp src/iexamine.cpp +#: src/iexamine.cpp src/iexamine.cpp src/iuse.cpp src/iuse.cpp src/iuse.cpp +#: src/iuse_actor.cpp src/iuse_actor.cpp src/iuse_actor.cpp src/monexamine.cpp +#: src/monexamine.cpp src/npc.cpp src/pickup.cpp src/player.cpp src/player.cpp +#: src/player.cpp src/veh_interact.cpp src/vehicle_use.cpp msgid "Never mind." msgstr "No importa." @@ -178147,14 +180641,14 @@ msgstr "" msgid "OVERRIDE: " msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "" -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "" msgstr "" @@ -178510,14 +181004,14 @@ msgstr "Bueno, sin hacer movimientos repentinos..." msgid "Keep your distance!" msgstr "¡Quédate lejos!" -#: lang/json/talk_topic_from_json.py -msgid "This is my territory, ." -msgstr "Este es mi territorio, ." - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "This is my territory, ." +msgstr "Este es mi territorio, ." + #: lang/json/talk_topic_from_json.py msgid "Calm down. I'm not going to hurt you." msgstr "Cálmate. No voy a hacerte daño." @@ -178570,30 +181064,30 @@ msgstr "¿Qué pasa?" msgid "I don't care." msgstr "No me importa." -#: lang/json/talk_topic_from_json.py -msgid "I don't have any more jobs for you." -msgstr "No tengo ningún otro trabajo para ti." - #: lang/json/talk_topic_from_json.py msgid "I don't have any jobs for you." msgstr "No tengo ningún trabajo para ti." #: lang/json/talk_topic_from_json.py -msgid "I have more jobs for you. Want to hear about them?" -msgstr "Tengo más trabajos para tí. ¿Quieres saber de ellos?" +msgid "I don't have any more jobs for you." +msgstr "No tengo ningún otro trabajo para ti." #: lang/json/talk_topic_from_json.py msgid "I have other jobs for you. Want to hear about them?" msgstr "Tengo otros trabajos para ti. ¿Quieres saber de ellos?" #: lang/json/talk_topic_from_json.py -msgid "I just have one job for you. Want to hear about it?" -msgstr "Tengo un trabajo para ti. ¿Quieres que te cuente?" +msgid "I have more jobs for you. Want to hear about them?" +msgstr "Tengo más trabajos para tí. ¿Quieres saber de ellos?" #: lang/json/talk_topic_from_json.py msgid "I have another job for you. Want to hear about it?" msgstr "Tengo otro trabajo para ti. ¿Quieres que te cuente?" +#: lang/json/talk_topic_from_json.py +msgid "I just have one job for you. Want to hear about it?" +msgstr "Tengo un trabajo para ti. ¿Quieres que te cuente?" + #: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py #: src/npctalk.cpp msgid "Oh, okay." @@ -178603,6 +181097,10 @@ msgstr "Ah, bueno." msgid "Never mind, I'm not interested." msgstr "No importa, no estoy interesado." +#: lang/json/talk_topic_from_json.py +msgid "You're not working on anything for me now." +msgstr "No estás trabajando en nada para mí ahora." + #: lang/json/talk_topic_from_json.py msgid "Which job?" msgstr "¿Cuál trabajo?" @@ -178611,10 +181109,6 @@ msgstr "¿Cuál trabajo?" msgid "What about it?" msgstr "¿Qué te parece?" -#: lang/json/talk_topic_from_json.py -msgid "You're not working on anything for me now." -msgstr "No estás trabajando en nada para mí ahora." - #: lang/json/talk_topic_from_json.py msgid "I'll do it!" msgstr "¡Lo haré!" @@ -178829,6 +181323,10 @@ msgstr "Hmm, bueno." msgid "Thanks!" msgstr "¡Gracias!" +#: lang/json/talk_topic_from_json.py +msgid "Focus on the road, mate!" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "I must focus on the road!" msgstr "" @@ -178853,10 +181351,6 @@ msgstr "" msgid "I have some reason for not telling you." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "Focus on the road, mate!" -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "Ah, okay." msgstr "Ah, bueno." @@ -178961,6 +181455,10 @@ msgstr "No, vamos a estar bien aquí." msgid "On second thought, never mind." msgstr "Pensandolo bien, olvidate." +#: lang/json/talk_topic_from_json.py +msgid "I can't train you properly while you're operating a vehicle!" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "I can't train you properly while I'm operating a vehicle!" msgstr "" @@ -178973,10 +181471,6 @@ msgstr "Dale tiempo, te voy a mostrar algo nuevo después..." msgid "I have some reason for denying you training." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "I can't train you properly while you're operating a vehicle!" -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "Not a bloody chance, I'm going to get left behind!" msgstr "¡No hay ninguna oportunidad, me van a dejar atrás!" @@ -184865,12 +187359,12 @@ msgid "All right! Let's get going." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"How's things with you? My cardboard collection is getting quite impressive." +msgid "We've done it! We've solved the list!" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "We've done it! We've solved the list!" +msgid "" +"How's things with you? My cardboard collection is getting quite impressive." msgstr "" #: lang/json/talk_topic_from_json.py @@ -189374,6 +191868,18 @@ msgstr "" msgid "Got it." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "" @@ -189387,11 +191893,11 @@ msgid "Hey." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Yes?" +msgid "Good to see you." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Good to see you." +msgid "About those jobs…" msgstr "" #: lang/json/talk_topic_from_json.py @@ -189403,7 +191909,7 @@ msgid "Want help with something else?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." +msgid "Lets set a combat strategy" msgstr "" #: lang/json/talk_topic_from_json.py @@ -189457,6 +191963,10 @@ msgstr "" msgid "Anything on your mind?" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "" @@ -190528,6 +193038,263 @@ msgstr "" msgid "Now I choose the cause I'll die for." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"Yes. I ask because I noticed there are dinosaurs around. Do you know " +"anything about that?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"I know all kinds of weird useless stuff. I've seen things at churches, I've" +" seen things on farms, I've seen whole exhibits way out. Those Swampers, " +"they know what's happening. They're creatures of light come back to save us" +" all. Or eat us, I forget." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters will be fed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Welcome. Are you hungry friend?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You look hungry friend. So much hunger in this world. This is the time of " +"the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Hello. Who are the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So about the eaters…" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You mentioned some pretenders before. What does that mean?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Is there a way I can help feed the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I have to get going. Take care, CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters have returned, along with the false ones. We must feed the" +" eaters and destroy the pretenders child." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are you talking about?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No thank you, I'd like to leave now." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"This Cataclysm has woken the great eaters, lost in time, returned them to " +"the world to do their great work, to multiply and fill the land with their " +"song. The time of man is over, but we few who remain can do our part to " +"protect this new world from the pretenders, who would steal the meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So what do you do with the meat?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are the great eaters and the pretenders?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Are there any others left?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are the ones that were lost, what we call dinosaurs whose " +"meat we took and who are taking it back. The pretenders are those others " +"that have come to steal the meat of this world. It does not belong to them " +"and we will take it from their mouths." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Okay, so you worship dinosaurs. Understood." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The Swampers knew these times would return and we prepared for them. When " +"others wasted their time and meat, we fed and grew strong, and we filled our" +" stores with meat for this day." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes, very good." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You keep talking about meat. Why is meat so important?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The meat makes the great eaters strong. We gather the meat and feed them, " +"and in the end we too will serve the eaters in death as we do in life. This" +" was always our purpose and we lucky few have lived to see it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Our purpose? How do you know?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The return of the great eaters was fortold by a prophet. We faithful have " +"been waiting and preparing since the revelation." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I guess it must be nice to be proven right." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This is crazy." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You understand our purpose. I welcome you to this work, all are needed to " +"feed the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You deny what you see right in front of you. This world is what was " +"fortold." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters have fed. They will be hungry again in time" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You know what to do." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The great eaters must be fed. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is still more work to do. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is meat ready for the feeding. Are you ready to gather it?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters are hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is more meat needed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I know of eaters ready for meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Maybe another time CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"If you are ready to be of service to the great eaters, go and find meat and " +"bring it back. There is always need for more." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Happy to be of service to the great eaters. I'm in." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Excellent. Make it happen." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are not picky, any pure meat will do, but mutant and " +"tainted meat are not good enough." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"So, meat from a creature that isn't a zombie, or a giant monster. Got it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course, you should find everything you need here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "That explains the knives then." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Oh, you know my friend Brigitte. Well in that case, let's go!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No, I must remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Sweet!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Not just now. You should remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"Of course, the company will be ready when you are and the great eaters will " +"feed either way." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"It was fortold that as the great eaters returned, so too would the " +"pretenders, who would come to steal the meat. Very little is asked of us, " +"except that we do all we can to ensure that the true great eaters received " +"as much meat as possible and the pretenders go hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes CEO Baronyx, very good CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This makes no sense and I'm done talking about it." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Heya, scav." msgstr "" @@ -191059,10 +193826,6 @@ msgstr "Bloqueas el/la %s" msgid " blocks %s" msgstr " bloquea el/la %s" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "Parada" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -193500,6 +196263,90 @@ msgstr "" msgid " unleashes a spin attack against %s and those nearby" msgstr "" +#: lang/json/technique_from_json.py +msgid "Disarming Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You skillfully disarm %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " skillfully disarms %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Lightning Recovery" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You miss %s but recover in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " misses %s but recovers in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Finishing Move" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You finish off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " finishes off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Dazing Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You harshly stun %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " harshly stuns %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Steel Wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleave through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleaves through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Scything Blade" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleanly reap through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleanly reap throug %s and those nearby" +msgstr "" + #: lang/json/technique_from_json.py msgid "Ausstoß" msgstr "" @@ -193556,6 +196403,216 @@ msgstr "" msgid " launches a supersonic punch at %s" msgstr "" +#: lang/json/technique_from_json.py +msgid "Mega Kick" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Darkest Lariat" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Smart Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Low Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Fool's Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely fool %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely fools %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Hydra Slaying Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You toss %s aside with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " tosses %s with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You spin and hurl %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " spins and hurls %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Flowing Water" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You deflect %s's attack and counter in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " deflects %s's attack and counters in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Disarming Slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You disarm %s with a quick flick of your weapon" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " disarms %s with a quick flick of their weapon" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Sarlacc Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You quickly sweep through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " quickly sweeps through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "" @@ -193601,6 +196658,10 @@ msgstr "" msgid "Life springs anew from the dead grass." msgstr "" +#: lang/json/ter_furn_transform_messages_from_json.py +msgid "The door opens forcefully!" +msgstr "" + #: lang/json/terrain_from_json.py msgid "scorched earth" msgstr "tierra calcinada" @@ -201399,6 +204460,11 @@ msgstr "casco de madera de bote" msgid "A wooden board that keeps the water out of your boat." msgstr "" +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -201845,14 +204911,19 @@ msgid "" msgstr "" #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" -msgstr "asiento de madera" +msgid "flimsy wooden seat" +msgstr "" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "Un lugar para sentarse." +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "asiento de madera" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "púa de madera" @@ -202671,6 +205742,11 @@ msgstr "" msgid "At least %s from %s (%s remaining)" msgstr "" +#: src/achievement.cpp +#, c-format +msgid "Exactly %s from %s" +msgstr "" + #: src/achievement.cpp #, c-format msgid "Within %s of %s (%s remaining)" @@ -202687,12 +205763,13 @@ msgid "Within %s of %s (passed)" msgstr "" #: src/achievement.cpp -msgid "Triggered by " +#, c-format +msgid "Triggered by %s" msgstr "" #: src/achievement.cpp #, c-format -msgid "%s/%s " +msgid "%s/%s %s" msgstr "" #: src/achievement.cpp @@ -204657,7 +207734,7 @@ msgstr "[<] pág. %1$d de %2$d [>]" msgid "< [%s] Sort: %s >" msgstr "< [%s] Orden: %s >" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "[%s] Filtro" @@ -207802,10 +210879,18 @@ msgstr "" msgid "Accuracy" msgstr "Precisión" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "Esquivar" +#: src/bonuses.cpp +msgid "Block effectiveness" +msgstr "" + #: src/bonuses.cpp src/panels.cpp msgid "Speed" msgstr "Velocidad" @@ -208298,20 +211383,25 @@ msgstr " se para." #: src/character.cpp src/monster.cpp #, c-format -msgid "The %s breaks free of the webs!" -msgstr "¡El %s se libera de las telarañas!" +msgid "The %s escapes the bear trap!" +msgstr "¡El %s se escapa de la trampa para osos!" #: src/character.cpp -msgid "You free yourself from the webs!" -msgstr "¡Te consigues liberarte de las telarañas!" +#, c-format +msgid "Your %s tries to free itself from the bear trap, but can't get loose!" +msgstr "" #: src/character.cpp -msgid " frees themselves from the webs!" -msgstr "¡ consigue liberarse de las telarañas!" +msgid "You free yourself from the bear trap!" +msgstr "¡Te consigues liberarte de la trampa para oso!" #: src/character.cpp -msgid "You try to free yourself from the webs, but can't get loose!" -msgstr "¡Intentas liberarte de las telarañas, pero no puedes!" +msgid " frees themselves from the bear trap!" +msgstr "¡ consigue liberarse de la trampa para oso!" + +#: src/character.cpp +msgid "You try to free yourself from the bear trap, but can't get loose!" +msgstr "¡Intentas liberarte de la trampa para oso, pero no puedes!" #: src/character.cpp src/monster.cpp #, c-format @@ -208347,28 +211437,6 @@ msgstr "¡ consigue liberarse de la trampa pesada de lazo!" msgid "You try to free yourself from the heavy snare, but can't get loose!" msgstr "¡Intentas liberarte de la trampa pesada de lazo, pero no puedes!" -#: src/character.cpp src/monster.cpp -#, c-format -msgid "The %s escapes the bear trap!" -msgstr "¡El %s se escapa de la trampa para osos!" - -#: src/character.cpp -#, c-format -msgid "Your %s tries to free itself from the bear trap, but can't get loose!" -msgstr "" - -#: src/character.cpp -msgid "You free yourself from the bear trap!" -msgstr "¡Te consigues liberarte de la trampa para oso!" - -#: src/character.cpp -msgid " frees themselves from the bear trap!" -msgstr "¡ consigue liberarse de la trampa para oso!" - -#: src/character.cpp -msgid "You try to free yourself from the bear trap, but can't get loose!" -msgstr "¡Intentas liberarte de la trampa para oso, pero no puedes!" - #: src/character.cpp msgid "You free yourself from the rubble!" msgstr "¡Te consigues liberarte de los escombros!" @@ -208381,18 +211449,6 @@ msgstr "¡ consigue liberarse de los escombros!" msgid "You try to free yourself from the rubble, but can't get loose!" msgstr "¡Intentas liberarte de los escombros, pero no puedes!" -#: src/character.cpp -msgid "You try to escape the pit, but slip back in." -msgstr "Intentas escaparte del pozo, pero te resbalás y volvés a caer." - -#: src/character.cpp -msgid "You escape the pit!" -msgstr "¡Te escapás del pozo!" - -#: src/character.cpp -msgid " escapes the pit!" -msgstr "¡ se escapa del pozo!" - #: src/character.cpp #, c-format msgid "Your %s tries to break free, but fails!" @@ -208432,6 +211488,35 @@ msgstr "¡Logras liberarte del agarre!" msgid " breaks out of the grab!" msgstr "¡ logra liberarse del agarre!" +#: src/character.cpp src/monster.cpp +#, c-format +msgid "The %s breaks free of the webs!" +msgstr "¡El %s se libera de las telarañas!" + +#: src/character.cpp +msgid "You free yourself from the webs!" +msgstr "¡Te consigues liberarte de las telarañas!" + +#: src/character.cpp +msgid " frees themselves from the webs!" +msgstr "¡ consigue liberarse de las telarañas!" + +#: src/character.cpp +msgid "You try to free yourself from the webs, but can't get loose!" +msgstr "¡Intentas liberarte de las telarañas, pero no puedes!" + +#: src/character.cpp +msgid "You try to escape the pit, but slip back in." +msgstr "Intentas escaparte del pozo, pero te resbalás y volvés a caer." + +#: src/character.cpp +msgid "You escape the pit!" +msgstr "¡Te escapás del pozo!" + +#: src/character.cpp +msgid " escapes the pit!" +msgstr "¡ se escapa del pozo!" + #: src/character.cpp #, c-format msgid "Your %s bionic comes back online." @@ -212232,14 +215317,6 @@ msgstr "Dibujar benchmark (X segundos)" msgid "Test trait group" msgstr "Probar grupo de rasgos" -#: src/debug_menu.cpp -msgid "Show debug message" -msgstr "Mostrar mensaje de depuración" - -#: src/debug_menu.cpp -msgid "Crash game (test crash handling)" -msgstr "" - #: src/debug_menu.cpp msgid "Toggle NPC pathfinding on map" msgstr "Alternar ruta de PNJ en el mapa" @@ -212268,6 +215345,18 @@ msgstr "Información..." msgid "Enable achievements" msgstr "" +#: src/debug_menu.cpp +msgid "Show debug message" +msgstr "Mostrar mensaje de depuración" + +#: src/debug_menu.cpp +msgid "Crash game (test crash handling)" +msgstr "" + +#: src/debug_menu.cpp +msgid "Quit to main menu" +msgstr "Salir a menú principal" + #: src/debug_menu.cpp msgid "Game…" msgstr "" @@ -212364,10 +215453,6 @@ msgstr "Generar mapa anidado" msgid "Map…" msgstr "Mapa..." -#: src/debug_menu.cpp -msgid "Quit to main menu" -msgstr "Salir a menú principal" - #: src/debug_menu.cpp msgid "" "Debug Functions - Using these will cheat not only the game, but yourself.\n" @@ -212890,6 +215975,10 @@ msgstr "Marcar como completada" msgid "Remove mission without proper cleanup" msgstr "" +#: src/debug_menu.cpp +msgid "Benchmark in progress…" +msgstr "" + #: src/debug_menu.cpp #, c-format msgid "Drew %d times in %.3f seconds. (%.3f fps average)" @@ -214140,138 +217229,182 @@ msgid "Liked" msgstr "Querido" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "Leyenda" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" msgstr "Indiscutido" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" msgstr "Potente" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" msgstr "Famoso" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" msgstr "Muy Conocido" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" msgstr "Del que se Habla" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" msgstr "Basura Despreciable" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "Alimaña" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "Despreciable" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "Parásito" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "Chupasangre" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "Hazmerreír" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "Neutral" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" msgstr "Rico Asqueroso" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "Pudiente" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" msgstr "Próspero" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" msgstr "Acaudalado" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" msgstr "Cómodo" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "Deficiente" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" msgstr "Fracasado" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" msgstr "Empobrecido" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" msgstr "Destituir" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "Rebosante" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" msgstr "Adecuadamente" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "Desguazando por" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" msgstr "Malnutrido" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" msgstr "Muerto de Hambre" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "Leyenda" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" msgstr "Experto" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" msgstr "Veterano" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" msgstr "Habilidoso" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "Competente" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" msgstr "Inexperto" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" msgstr "Lisiado" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" msgstr "Debilitado" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "Inútil" @@ -214866,12 +217999,12 @@ msgstr "" #, c-format msgid "" "Notes:\n" -"Send a companion to gather light brush and heavy sticks.\n" +"Send a companion to gather light brush and stout branches.\n" "\n" "Skill used: survival\n" "Difficulty: N/A\n" "Gathering Possibilities:\n" -"> heavy sticks\n" +"> stout branches\n" "> withered plants\n" "> splintered wood\n" "\n" @@ -215886,7 +219019,7 @@ msgid "You do not have a camp food zone. Aborting…" msgstr "" #: src/faction_camp.cpp -msgid "No items are located at the drop point…" +msgid "No suitable items are located at the drop points…" msgstr "" #: src/faction_camp.cpp @@ -216105,6 +219238,13 @@ msgstr "¡El/La %s está peligrosamente cerca!" msgid "Wait till you wake up…" msgstr "" +#: src/game.cpp +#, c-format +msgid "" +"\n" +"%s to interrupt" +msgstr "" + #: src/game.cpp #, c-format msgid "%s, cancel Auto-move?" @@ -216215,6 +219355,11 @@ msgctxt "action" msgid "open" msgstr "" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -217728,11 +220873,25 @@ msgstr "" msgid "You cannot haul items here." msgstr "" +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "¡%s esta en el camino!" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "¡Hay un %s en el medio!" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a +#. zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -219118,11 +222277,6 @@ msgstr "¡Hay un estúpido en el medio!" msgid "The %s is in the way!" msgstr "¡El %s esta en el camino!" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "¡%s esta en el camino!" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -220392,6 +223546,11 @@ msgstr "" msgid "Attempt to hack this safe?" msgstr "" +#: src/iexamine.cpp +#, c-format +msgid "The %s is locked. You could pry it open with the right tool…" +msgstr "" + #: src/iexamine.cpp #, c-format msgid "The %s is locked. If only you had something to pry it with…" @@ -221617,6 +224776,10 @@ msgstr "" msgid "Splint broken limbs" msgstr "" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "No tienes instalado ningún biónico." @@ -221644,16 +224807,78 @@ msgid " doesn't have limbs that require splinting." msgstr "" #: src/iexamine.cpp -msgid "This mill already contains flour." +msgid "You don't have any wounds that need treatment." msgstr "" #: src/iexamine.cpp -msgid "Remove it before starting the mill again." +msgid " doesn't have any wounds that need treatment." msgstr "" +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "Los espasmos musculares empiezan a desaparecer." + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "El medicamento no hace nada para ayudarte con los espasmos." + #: src/iexamine.cpp #, c-format -msgid "This rack contains %s, which can't be milled!" +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "This mill contains %s, which can't be milled!" msgstr "" #: src/iexamine.cpp @@ -221829,7 +225054,8 @@ msgid "Remove brake and start milling" msgstr "" #: src/iexamine.cpp -msgid "Remove brake and start milling, milling will take about 6 hours." +#, c-format +msgid "Remove brake and start milling, milling will take about %s." msgstr "" #: src/iexamine.cpp @@ -221863,18 +225089,7 @@ msgstr "" #: src/iexamine.cpp #, c-format -msgid "It will finish milling in about %d hour." -msgid_plural "It will finish milling in about %d hours." -msgstr[0] "" -msgstr[1] "" - -#: src/iexamine.cpp -msgid "It will finish milling in less than an hour." -msgstr "" - -#: src/iexamine.cpp -#, c-format -msgid "It should take about %d minutes to finish milling." +msgid "It should take about %s to finish milling." msgstr "" #: src/iexamine.cpp @@ -222640,7 +225855,7 @@ msgstr "Volumen (%s):" msgid "There are no available choices" msgstr "No hay opciones disponibles" -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "[%s] Filtro: " @@ -223533,10 +226748,6 @@ msgstr "Modificador de capacidad de peso:" msgid "Weight capacity bonus: " msgstr "Bonus de capacidad de peso:" -#: src/item.cpp -msgid "Storage: " -msgstr "Almacenamiento: " - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "* Este objeto puede ser usado con un casco." @@ -223821,6 +227032,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "* Esta herramienta funciona con energía biónica." +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "" + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "" + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "" + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "" + +#: src/item.cpp +msgid "Fuel: " +msgstr "" + #: src/item.cpp #, c-format msgid "Using: %s" @@ -223844,9 +227083,21 @@ msgstr "* Este objeto puede ser reforzado." msgid "* This item is not repairable." msgstr "* Este objeto no se puede reparar." +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items +#: src/item.cpp +#, c-format +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "" + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a +#. list of items. +#. ~ Bold text in the middle makes it easier to see where the second list +#. starts. #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." +msgid "" +"Disassembly takes %1$s, requires %2$s and might " +"yield: %3$s." msgstr "" #: src/item.cpp @@ -223965,26 +227216,27 @@ msgid "Critical hit chance %d%% - %d%%" msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d bashing (%d on a critical hit)" +msgid "Bashing: " msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d cutting (%d on a critical hit)" +msgid "Critical bash: " msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d piercing (%d on a critical hit)" +msgid "Cutting: " msgstr "" #: src/item.cpp -#, c-format -msgid "%d moves per attack" +msgid "Critical cut: " +msgstr "" + +#: src/item.cpp +msgid "Piercing: " +msgstr "" + +#: src/item.cpp +msgid "Critical pierce: " msgstr "" #: src/item.cpp @@ -224587,8 +227839,9 @@ msgstr "Tu %1$s no puede contener más %2$s." msgid "That %s doesn't have room to expand." msgstr "Ese/a %s no tiene más espacio para expandirlo/a." -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" msgstr "%d x %s" @@ -224712,6 +227965,56 @@ msgstr "No tienes ningún objeto con uso registrado" msgid "Execute which action?" msgstr "¿Qué acción quieres realizar?" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "" + +#: src/item_contents.cpp +msgid " item, " +msgstr "" + +#: src/item_contents.cpp +msgid " category, " +msgstr "" + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "" + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "" + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "" + +#: src/item_contents.cpp +msgid "item id" +msgstr "" + +#: src/item_contents.cpp +msgid "item category" +msgstr "" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "" + #: src/item_contents.cpp msgid "is not a container" msgstr "" @@ -224752,6 +228055,11 @@ msgstr "¿Qué grupo quieres probar?" msgid "Result of 100 spawns:" msgstr "Resultado de 100 creaciones:" +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "%d x %s" + #: src/item_location.cpp msgid "inventory" msgstr "inventario" @@ -224934,6 +228242,34 @@ msgstr "" msgid "not enough space" msgstr "" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "" + #: src/itype.h msgid "click." msgstr "click." @@ -225003,14 +228339,6 @@ msgstr "Te tomas unos anitibióticos." msgid " takes some antibiotics." msgstr " se toma unos antibióticos." -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "Los espasmos musculares empiezan a desaparecer." - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "El medicamento no hace nada para ayudarte con los espasmos." - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -230690,6 +234018,10 @@ msgstr "Principiante" msgid "Intermediate" msgstr "Intermedio" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "Experto" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "Ancho de nivel:" @@ -234337,6 +237669,18 @@ msgctxt "memorial_female" msgid "Set off an alarm." msgstr "Activar una alarma." +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_male" +msgid "Used the debug menu (%s)." +msgstr "" + +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_female" +msgid "Used the debug menu (%s)." +msgstr "" + #. ~ Message %s on the message log was repeated %d times, e.g. "You hear a #. whack! x 12" #: src/messages.cpp @@ -238128,12 +241472,6 @@ msgstr "Enfocar las tendencias hacia:" msgid "You feel bugs crawl over your skin." msgstr "" -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "humano" -msgstr[1] "humanos" - #: src/mutation.cpp #, c-format msgid "Your %s is destroyed!" @@ -239111,17 +242449,6 @@ msgstr "" msgid "Blood type:" msgstr "" -#: src/newcharacter.cpp -#, c-format -msgid "" -"* Random location * (%d variants)" -msgstr "" - -#: src/newcharacter.cpp -#, c-format -msgid "%s (%d variants)" -msgstr "" - #: src/newcharacter.cpp msgid "Name:" msgstr "Nombre:" @@ -239134,6 +242461,22 @@ msgstr "Género:" msgid "Select a starting location." msgstr "Elige un lugar de comienzo." +#: src/newcharacter.cpp +#, c-format +msgid "" +"* Random location * (%d variant)" +msgid_plural "" +"* Random location * (%d variants)" +msgstr[0] "" +msgstr[1] "" + +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" +msgstr[1] "" + #: src/newcharacter.cpp msgid "Stats:" msgstr "Características:" @@ -239203,6 +242546,13 @@ msgstr "" msgid "Starting location:" msgstr "Lugar de comienzo:" +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" +msgstr[1] "" + #: src/newcharacter.cpp msgid "Starting Vehicle: " msgstr "" @@ -240898,6 +244248,14 @@ msgstr "Destrozar" msgid "Pulp Adjacent" msgstr "Destrozar adyacente" +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "" + #: src/options.cpp msgid "Auto mining" msgstr "Minería automática" @@ -243533,6 +246891,16 @@ msgstr "Zona:" msgid "# Unexplored" msgstr "# Sin explorar" +#: src/overmap_ui.cpp +#, c-format +msgid "oter: %s" +msgstr "" + +#: src/overmap_ui.cpp +#, c-format +msgid "oter_type: %s" +msgstr "" + #: src/overmap_ui.cpp msgid "Distance to active mission:" msgstr "Distancia a la misión activa:" @@ -243862,6 +247230,10 @@ msgstr "¡Abrasador!" msgid "Very hot!" msgstr "¡Muy caliente!" +#: src/panels.cpp +msgid "Comfortable" +msgstr "Cómodo" + #: src/panels.cpp msgid "Very cold!" msgstr "¡Muy Frio!" @@ -245344,6 +248716,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "Sed -%2d%%" +#: src/player_display.cpp +msgid "Starving" +msgstr "Muerto de Hambre" + #: src/player_display.cpp msgid "Underfed" msgstr "Desnutrido/a" @@ -245438,6 +248814,10 @@ msgstr "" "Tu cuerpo está severamente debilitado por el hambre. ¡Podrías morir si no comienzas a comer comidas regulares!\n" "\n" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "Malnutrido" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help you recover.\n" @@ -246580,6 +249960,15 @@ msgid_plural "%1$d tools with %2$s of %3$d or more." msgstr[0] "%1$d herramienta con %2$s de %3$d o más." msgstr[1] "%1$d herramientas con %2$s de %3$d o más." +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level +#. requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "" +msgstr[1] "" + #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp #, c-format @@ -250637,6 +254026,10 @@ msgstr "...%s = Ver descripción completa" msgid "--NO AVAILABLE MODS--" msgstr "--NINGÚN MOD DISPONIBLE--" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "Guardar como defecto la lista de mods activos" diff --git a/lang/po/ja.po b/lang/po/ja.po index b20a90b86a319..4d504309dc8a6 100644 --- a/lang/po/ja.po +++ b/lang/po/ja.po @@ -12,7 +12,6 @@ # 02a55f6b0b75a11ad1dedf9f8b4d9b4f, 2018 # 山田太郎, 2018 # Ban Kaidou, 2019 -# T5idr3, 2019 # Dokuo Utuda, 2019 # Maruyama Ryota , 2019 # kanro mizuame , 2019 @@ -23,16 +22,17 @@ # a a , 2019 # Itoh Shu , 2020 # xyz , 2020 -# zojirushi, 2020 # Susuki Mochiduki, 2020 +# T5idr3, 2020 # TEATIME , 2020 +# zojirushi, 2020 # Pigmentblue15, 2020 # msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-06 11:53+0800\n" +"POT-Creation-Date: 2020-06-23 10:06+0800\n" "PO-Revision-Date: 2018-04-26 14:47+0000\n" "Last-Translator: Pigmentblue15, 2020\n" "Language-Team: Japanese (https://www.transifex.com/cataclysm-dda-translators/teams/2217/ja/)\n" @@ -266,7 +266,6 @@ msgid_plural "rocks" msgstr[0] "石" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -5035,7 +5034,6 @@ msgstr[0] "金" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -5104,7 +5102,6 @@ msgid_plural "small metal sheets" msgstr[0] "小型板金" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "金属製の小さな薄板です。" @@ -6363,63 +6360,6 @@ msgstr[0] "マナ" msgid "Seeing this is a bug." msgstr "このアイテムが見えている場合はバグが発生しています。" -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "石(テスト)" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "小型板金(テスト)" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "矢(木/ブロードヘッド/テスト)" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "矢(テスト)" - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "弾薬(9mm/テスト)" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "弾薬(9mm/汎用JHP)" - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "弾薬(.45口径/テスト)" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "弾薬(.45口径/テストJHP)" - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "ガス(テスト)" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "ガスのような謎の物質です。テスト用ですので、吸い込まないでください。" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "プラチナ片(テスト)" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -6696,8 +6636,6 @@ msgstr[0] "耳栓" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear #. plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs -#. of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "工業用品質の耳栓です。耳の内部に入れて使います。" @@ -8441,8 +8379,6 @@ msgid_plural "pairs of socks" msgstr[0] "靴下" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of -#. socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "靴下です。足に身に付けて下さいね。" @@ -10092,6 +10028,17 @@ msgid "" "heat." msgstr "ケブラーとノーメックスで作られた、対爆仕様の軽装甲グローブです。破片や熱から保護するように設計されています。" +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "スパイクグローブ" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of +#. studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "関節部に金属が付いているグローブです。" + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -15788,7 +15735,6 @@ msgstr[0] "戦闘用外骨格" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "パワーアーマーを装着しました。" @@ -16123,7 +16069,6 @@ msgid_plural "backpacks" msgstr[0] "バックパック" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "小型のバックパックです。最低限の動作制限で、十分な収納容積を確保できます。" @@ -16221,7 +16166,6 @@ msgid_plural "briefcases" msgstr[0] "ブリーフケース" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "札束や書類、密輸品などを運ぶのに便利です。" @@ -17060,7 +17004,6 @@ msgid_plural "hazmat suits" msgstr[0] "化学防護服" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -17889,7 +17832,6 @@ msgid_plural "long-sleeved shirts" msgstr[0] "長袖シャツ" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "綿製の長袖シャツです。" @@ -18564,6 +18506,18 @@ msgid "" "weight." msgstr "頭から足先までをすっぽりと包む大きな寝袋です。それなりの重量があります。" +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "セスタス" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "拳の位置に金属板を組み込んだ、革製のハンドラップです。パンチ力と防御力が向上します。" + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -19960,54 +19914,15 @@ msgid "" msgstr "有害な環境から全身を保護する、目に見えない魔法のオーラです。" #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" -msgstr[0] "靴下(テスト)" - -#: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "長袖シャツ(テスト)" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" -msgstr[0] "耳栓(テスト)" - -#: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "化学防護服(テスト)" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" -msgstr[0] "バックパック(テスト)" - -#: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "ブリーフケース(テスト)" - -#: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "矢筒(テスト)" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "テスト用の矢筒です。矢やボルトを20本収納できます。" - -#: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" -msgstr[0] "パワーアーマー(テスト)" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" +msgstr[0] "電撃のオーラ" -#. ~ Description for {'str': 'test power armor'} +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." -msgstr "テスト用に試作されたパワーアーマーです。" +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." +msgstr "近接攻撃してきた敵を電撃で攻撃する、目に見えないオーラです。" #: lang/json/BATTERY_from_json.py msgid "test battery" @@ -20406,8 +20321,8 @@ msgid "Aero-Evaporator CBM" msgid_plural "Aero-Evaporator CBMs" msgstr[0] "CBM: 水蒸気液化装置" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -21505,8 +21420,8 @@ msgid "Internal Furnace CBM" msgid_plural "Internal Furnace CBMs" msgstr[0] "CBM: 体内炉" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel" @@ -21606,8 +21521,8 @@ msgid "Wind Turbine CBM" msgid_plural "Wind Turbine CBMs" msgstr[0] "CBM: 風力タービン" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -21615,18 +21530,6 @@ msgid "" "power level." msgstr "胴体に小型の風力タービンが格納されています。起動すると風車を展開し、CBM用の電力をゆっくりと発電します。" -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "CBM: 精密はんだ付け装置" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire cutters." -" They serve no purpose on their own, but are required for crafting bionics." -msgstr "はんだごてやワイヤーカッターなどの細々とした電子機器製作ツール類です。単体では何の役にも立ちませんが、CBM製作に必要です。" - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -21680,13 +21583,37 @@ msgid "" "from installation and you don't have the codes to reset the timer." msgstr "背骨と脳幹の間に移植された爆弾です。タイマーが付いていますが、リセットするコードはありません。" +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "CBM: 精密はんだ付け装置" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire cutters." +" They serve no purpose on their own, but are required for crafting bionics." +msgstr "はんだごてやワイヤーカッターなどの細々とした電子機器製作ツール類です。単体では何の役にも立ちませんが、CBM製作に必要です。" + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" msgstr[0] "CBM: 過重イオン発生装置" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -21845,6 +21772,33 @@ msgstr[0] "ペーパーバックノンフィクション本" msgid "template for a paperback nonfiction book" msgstr "ペーパーバックのノンフィクション本のテンプレートです。" +#: lang/json/BOOK_from_json.py +msgid "Generic Pulp Book" +msgid_plural "Generic Pulp Books" +msgstr[0] "汎用パルプ本" + +#. ~ Description for Generic Pulp Book +#: lang/json/BOOK_from_json.py +msgid "" +"This is a template for pulp books. Which really all ought to be paperbacks," +" right?" +msgstr "パルプ本のテンプレートです。ペーパーバック本とほとんど同じですよね?" + +#: lang/json/BOOK_from_json.py +msgid "Generic SciFi Book" +msgid_plural "Generic SciFi Books" +msgstr[0] "汎用SF小説" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for paperback scifi books." +msgstr "SF小説が書かれたペーパーバック本のテンプレートです。" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for a hard cover scifi book." +msgstr "SF小説が書かれたハードカバー本のテンプレートです。" + #: lang/json/BOOK_from_json.py msgid "Homemaking Book" msgid_plural "Homemaking Books" @@ -23149,8 +23103,8 @@ msgstr[0] "開発概要" #. 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py lang/json/TOOL_from_json.py #: lang/json/furniture_from_json.py lang/json/skill_from_json.py @@ -24177,9 +24131,8 @@ msgstr[0] "本(一般/冒険小説)" #: lang/json/BOOK_from_json.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." -msgstr "" -"今回の冒険はアフリカ大陸の中心に存在したと言われる失われた都市を探し出す旅です。敵との戦闘や危険な罠を掻い潜り、無事に失われた都市を見つけられるのか。興奮と感動の冒険物語です。" +"in the heart of the African continent." +msgstr "アフリカ大陸の中心部に位置する失われた都市を一刻も早く見つけようと奮闘する、感動の物語です。" #: lang/json/BOOK_from_json.py msgid "buddy novel" @@ -24193,25 +24146,6 @@ msgid "" "York City." msgstr "ニューヨーク市の路上で苦労しながら生活する2人の友情を描いた、興味をそそる物語です。" -#: lang/json/BOOK_from_json.py -msgid "coming of age novel" -msgid_plural "coming of age novels" -msgstr[0] "本(一般/青春小説)" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." -msgstr "若者が日常生活や愛、セックスなどを通じて感動を体験し、成長を遂げていく古典的な物語です。" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A graphic novel about a young girl living in Iran during the 1980's, seeing " -"the world change around her as Iraq invaded her country." -msgstr "1980年代、イラクに侵攻されたイランに住む少女の目線で、周囲の世界の変化を描いたグラフィックノベルです。" - #: lang/json/BOOK_from_json.py msgid "crime novel" msgid_plural "crime novels" @@ -24326,73 +24260,6 @@ msgstr[0] "本(一般/ミステリー小説)" msgid "A detective investigates an unusual murder in a secluded location." msgstr "探偵が、人里離れた土地で猟奇殺人を捜査します。" -#: lang/json/BOOK_from_json.py -msgid "pulp novel" -msgid_plural "pulp novels" -msgstr[0] "本(一般/大衆小説)" - -#. ~ Description for {'str': 'pulp novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "ハードボイルドな探偵が織り成す、過激な格闘戦と陰謀が売りの探偵物語です。" - -#: lang/json/BOOK_from_json.py -msgid "Planet of the Murderous Squids that Time Forgot!" -msgid_plural "Planet of the Murderous Squids that Time Forgot!s" -msgstr[0] "本(一般/忘れ去られた殺人イカ惑星!)" - -#. ~ Description for Planet of the Murderous Squids that Time Forgot! -#: lang/json/BOOK_from_json.py -msgid "" -"In this psychedelic adventure novel of cosmic exploration, an elderly " -"assassin discovers a planet too good to be true. Only once it is too late " -"does she discover the harrowing truth at the center of \"The Planet of the " -"Murderous Squids that Time Forgot!\"" -msgstr "" -"年老いた暗殺者が信じがたい惑星を発見する、サイケデリックな宇宙探索アドベンチャー小説です。「忘れ去られた殺人イカ惑星!」のストーリーの核に痛ましい真実が含まれていることが分かったのは、全てが手遅れになってからでした。" - -#: lang/json/BOOK_from_json.py -msgid "The Great Capes of Metropolis" -msgid_plural "The Great Capes of Metropoliss" -msgstr[0] "本(一般/メトロポリスの偉大なるマント)" - -#. ~ Description for The Great Capes of Metropolis -#: lang/json/BOOK_from_json.py -msgid "" -"In this classic pulp paperback of superheroic exploits, a group of masked " -"vigilantes with diverse superpowers learn to work together to defeat the " -"ultimate villain." -msgstr "" -"スーパーヒーローの活躍を描いた、古典的なパルプ小説のペーパーバック本です。素性を隠した自警団のメンバーたちが、究極の悪を倒すために協力して戦うことを学びます。" - -#: lang/json/BOOK_from_json.py -msgid "Yesterday's Murdered" -msgid_plural "Yesterday's Murdereds" -msgstr[0] "本(一般/昨日の殺人)" - -#. ~ Description for Yesterday's Murdered -#: lang/json/BOOK_from_json.py -msgid "" -"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" -" has one last shot at vengeance." -msgstr "テンポの速い犯罪もののパルプ小説です。鋼の精神を持つ飲んだくれの刑事が、最後の復讐の機会を得ます。" - -#: lang/json/BOOK_from_json.py -msgid "Flashgun Condor and the Crimson Criminal" -msgid_plural "Flashgun Condor and the Crimson Criminals" -msgstr[0] "本(一般/フラッシュ・コンドルと真紅の犯罪者)" - -#. ~ Description for Flashgun Condor and the Crimson Criminal -#: lang/json/BOOK_from_json.py -msgid "" -"A hot-blooded photographer who fights crime with film, footage, and fists, " -"Condor is more than a mere shutterbug on the crime beat. But will she be " -"able to unravel a devious deception and bring the \"Crimson Criminal\" to " -"justice?" -msgstr "" -"写真と映像と拳で犯罪に立ち向かう熱血写真家のコンドルは、単なる犯罪専門のアマチュア写真家ではありません。彼女は邪悪な欺瞞を解き明かし、「真紅の犯罪者」を裁くことができるのでしょうか?" - #: lang/json/BOOK_from_json.py msgid "road novel" msgid_plural "road novels" @@ -24557,8 +24424,8 @@ msgstr[0] "本(一般/サムライ小説)" 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." -msgstr "寒村に訪れた主人公の浪人を、住人たちが村を無法者達から守る用心棒として雇う...という古典的な物語です。" +"marauding outlaws. This hardback is quite hefty." +msgstr "寒村に訪れた主人公の浪人を村人が用心棒として雇い、無法者たちから村を守ってもらう古典的な物語です。かなり重いハードカバー本です。" #: lang/json/BOOK_from_json.py msgid "satire novel" @@ -24600,17 +24467,19 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Master and Margarita" -msgid_plural "The Master and Margaritas" +msgid_plural "copies of Master and Margarita" msgstr[0] "本(一般/巨匠とマルガリータ)" -#. ~ Description for The Master and Margarita +#. ~ Description for {'str': 'The Master and Margarita', 'str_pl': 'copies of +#. Master and Margarita'} #: lang/json/BOOK_from_json.py msgid "" "Featuring a cast that includes Satan, Pontius Pilate, Jesus Christ, " -"vampires, a talking cat, and the literary elite of Moscow, this is a satire " -"on Stalinist tyranny written by Mikhail Bulgakov." +"vampires, a talking cat, and the literary elite of Moscow, this novel by " +"Mikhail Bulgakov explores philosophical issues on the nature of good and " +"evil." msgstr "" -"悪魔、ポンティオ・ピラト、イエス・キリスト、吸血鬼、喋るネコ、文学界のエリートなどが登場する、ミハイル・ブルガーコフが執筆したスターリンによる専制政治の風刺小説です。" +"悪魔、ポンティオ・ピラト、イエス・キリスト、吸血鬼、喋るネコ、モスクワ文学界のエリートなどが登場する、ミハイル・ブルガーコフが執筆した小説です。善と悪の本質に関する哲学的な命題を探求しています。" #: lang/json/BOOK_from_json.py msgid "A Handful of Dust" @@ -24636,340 +24505,6 @@ msgid "" "nuclear destruction isn't much of an influence on human nature." msgstr "原子爆弾の脅威も人間性にはあまり影響を与えられないことを表現した、カート・ヴォネガットが四番目に発表した小説のペーパーバック版です。" -#: lang/json/BOOK_from_json.py -msgid "scifi novel" -msgid_plural "scifi novels" -msgstr[0] "本(一般/SF小説)" - -#. ~ Description for {'str': 'scifi novel'} -#: lang/json/BOOK_from_json.py -msgid "Aliens, ray guns, and space ships." -msgstr "エイリアン、光線銃、宇宙船があなたを待っています。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" -" surprisingly accurate in predicting much of modern society… Until " -"recently." -msgstr "" -"ギブソンの「ニューロマンサー」です。1980年代に執筆されましたが、現代社会の様々な分野を驚くほど正確に予測していました。しかし、それも大変動が起きるまでの話です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" -"\n" -"Tyger, Tyger, Burning bright,\n" -"In the forests of the night:\n" -"What immortal hand or eye,\n" -"Dare frame thy fearful symmetry?" -msgstr "" -"アルフレッド・ベスターの「虎よ、虎よ!」です。\n" -"\n" -"虎よ! 虎よ!\n" -"ぬばたまの夜の森に燦爛と燃え\n" -"そもいかなる不死の手のまたは目の作りしや\n" -"汝がゆゆしき均整を" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" -"stains have smudged the occasional word." -msgstr "アーシュラ・ル=グウィンの「天のろくろ」です。ページの所々に汚れた指の跡が残っています。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." -msgstr "アーシュラ・ル=グウィンの「所有せざる人々」です。" - -#: lang/json/BOOK_from_json.py -msgid "This copy of Ray Bradbury's \"Fahrenheit 451\"." -msgstr "レイ・ブラッドベリの「華氏451度」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Hyperion\" by Dan Simmons." -msgstr "ダン・シモンズの「ハイペリオン」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" -"\n" -"Give us gods. Oh give them us!\n" -"Give us gods.\n" -"We are so tired of men\n" -"And motor-power." -msgstr "" -"ダン・シモンズの「エンディミオン」です。物語はD・H・ローレンスの詩から始まります。\n" -"\n" -"われらに神を与えよ。われらに神を!\n" -"われらに神を与えよ。\n" -"もううんざりだ、人間にも\n" -"動力にも。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." -msgstr "フィリップ・K・ディックの「アンドロイドは電気羊の夢を見るか?」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." -msgstr "ウィリアム・バロウズの「ノヴァ急報」です。随分年季が入っており、ページの端が折れています。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " -"ripped off." -msgstr "アイザック・アシモフの「ファウンデーション」です。裏表紙が剥ぎ取られています。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " -"some of its pages. Weird." -msgstr "フランク・ハーバートの「デューン」です。本の角が折れ曲がっており、奇妙な事に、ページの間に砂が挟まっています。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." -msgstr "フランツ・カフカの「審判」です。かなり年季が入っています。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." -msgstr "マーガレット・アトウッドの「侍女の物語」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " -"you wonder how Thailand fared the end of the world." -msgstr "パオロ・バチガルピの「ねじまき少女」です。帯文を読むと、タイが世界の終焉をどのように切り抜けたのか思いを馳せずにはいられません。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." -msgstr "ブルース・スターリングの「ネットの中の島々」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " -"contains a hand-written grocery list." -msgstr "アイザック・アシモフの「ファウンデーション対帝国」です。裏ページには手書きの食料品リストが記されています。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " -"still has the smell of new books within its pages." -msgstr "フィリップ・K・ディックの「暗闇のスキャナー」です。まだ新品のような匂いが残っています。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " -"Sterling. The cover has rings of coffee stains over it." -msgstr "ブルース・スターリングが編纂した「ミラーシェード: サイバーパンク・アンソロジー」です。表紙にコーヒーの染みが丸く残っています。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " -"looks to have been used to press flowers." -msgstr "A・E・ヴァン・ヴォークトの「非Aの世界」です。押し花を作るのに使われたようです。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." -msgstr "リチャード・モーガンの「オルタード・カーボン」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " -"the monster?" -msgstr "メアリー・シェリーの「フランケンシュタイン」です。怪物の名前ではなかったのですね?" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" -" handbook." -msgstr "エリック・フランク・ラッセルの「特務指令<ワスプ>」です。この小説は未来のテロリストのハンドブックです。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " -"covered in dried blood." -msgstr "リチャード・マシスンの「アイ・アム・レジェンド」です。裏表紙に乾いた血液が付いています。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Roadside Picnic\" by Arkady and Boris Strugatsky." -msgstr "ストルガツキー兄弟の「ストーカー」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " -"if it's been slightly chewed by a dog or other large animal." -msgstr "ジョー・ホールドマンの「終りなき戦い」です。イヌか何かの動物に噛まれたような跡が残っています。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." -msgstr "ロバート・A・ハインライの「月は無慈悲な夜の女王」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Cat's Cradle\" by Kurt Vonnegut. You notice there is a " -"typo in the authors name on the spine of the book." -msgstr "カート・ヴォネガットの「猫のゆりかご」です。背表紙に印字された著者名の綴りが間違っています。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " -"Copy. Not for re-sale.\"" -msgstr "サミュエル・R・ディレイニーの「ノヴァ」です。表紙に「書評用献本。再販禁止」と記載されています。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." -msgstr "ヴォネガットの「タイタンの妖女」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " -"the first pages in crayon." -msgstr "シェリ・S. テッパーの「女の国の門」です。子供が赤いクレヨンで1ページ目に落書きをしたようです。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " -"with 'Library Copy'. And a sticker reading 'Science Fiction'." -msgstr "" -"ウィリアム・ギブスンの「カウント・ゼロ」です。背表紙に「図書館用」のスタンプが押され、「サイエンスフィクション」のステッカーが貼られています。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Fifth Season\" by N.K. Jemsin. It smells faintly of" -" dirt." -msgstr "N・K・ジェミシンの「ザ・フィフス・シーズン」です。かすかに土の匂いがします。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." -msgstr "A・E・ヴァン・ヴォークトの「武器製造業者」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" -" almost brand new." -msgstr "ベッキー・チェンバーズの「レコード・オブ・ア・スペースボーン・フュー」です。ほぼ新品のようです。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " -"and worn, some pages appear to be loose." -msgstr "イアン・M・バンクスの「ユーズ・オブ・ウェポンズ」です。背表紙がひび割れ、一部のページの綴じが緩んでいるようです。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." -msgstr "ジャン=バティスト・カズン・ド・グレインヴィルの「最後の男」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " -"and thin. You should probably be careful with this copy." -msgstr "オーウェルの「1984年」です。ページの綴じが緩んでおり、取り扱いには注意が必要です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " -"dog-eared and worn." -msgstr "ハインラインの「異星の客」です。本の角が折れ曲がっています。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." -msgstr "オースン・スコット・カードの「エンダーのゲーム」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a weather worn copy of \"Brave New World\" by Aldous Huxley." -msgstr "オルダス・ハクスリーの「すばらしい新世界」です。風雨に晒され傷んでいます。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." -msgstr "アーサー・コナン・ドイルの「失われた世界」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." -msgstr "アーサー・C・クラークの「宇宙島へ行く少年」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." -msgstr "H・G・ウェルズの「モロー博士の島」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." -msgstr "スタニスワフ・レムの「天の声」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." -msgstr "フレッド・ホイルの「暗黒星雲」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." -msgstr "オラフ・ステープルドンの「最後にして最初の人類」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"Solaris\"." -msgstr "スタニスワフ・レムの「ソラリス」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." -msgstr "シオドア・スタージョンの「人間以上」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Vurt\" by Jeff Noon." -msgstr "ジェフ・ヌーンの「ヴァート」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." -msgstr "ウォルター・M・ミラー・ジュニアの「黙示録3174年」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." -msgstr "H・G・ウェルズの「宇宙戦争」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." -msgstr "チャールズ・ストロスの「アイアン・サンライズ」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " -"blurb reminds you of a Japanese movie you think you once caught on the " -"television late at night." -msgstr "スーザン・コリンズの「ハンガー・ゲーム」です。帯文を読むと、深夜にテレビで放送していた日本映画が連想されます。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." -msgstr "ジョン・ウィンダムの「トリフィドの日」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." -msgstr "アンソニー・バージェスの「時計じかけのオレンジ」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." -msgstr "ウォルター・テヴィスの「地球に落ちてきた男」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." -msgstr "ダニエル・F・ガロイの「模造世界」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." -msgstr "エルンスト・ユンガーの「ザ・グラス・ビーズ」です。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." -msgstr "ジュール・ヴェルヌの「地底旅行」です。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " -"missing from the end of the book. Luckily only mail-order advertisements." -msgstr "ラリー・ニーヴンの「リングワールド」です。後半の数ページが欠落していますが、幸いなことに通販広告のページだったようです。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " -"Douglas Adams." -msgstr "ダグラス・アダムズの「銀河ヒッチハイク・ガイド」です。何度も読まれた跡があります。" - #: lang/json/BOOK_from_json.py msgid "spy novel" msgid_plural "spy novels" @@ -26126,6 +25661,592 @@ msgid "" " key work in the existentialist tradition." msgstr "実存主義における重要作である、ジャン=ポール・サルトルが著した「存在と無」のペーパーバック本です。" +#: lang/json/BOOK_from_json.py +msgid "pulp novel" +msgid_plural "pulp novels" +msgstr[0] "本(一般/大衆小説)" + +#. ~ Description for {'str': 'pulp novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hardboiled detective tale filled with hard hitting action and intrigue." +msgstr "ハードボイルドな探偵が織り成す、過激な格闘戦と陰謀が売りの探偵物語です。" + +#: lang/json/BOOK_from_json.py +msgid "Black Valkyries From Venus" +msgid_plural "copies of Black Valkyries" +msgstr[0] "本(一般/金星から来た黒いワルキューレ)" + +#. ~ Description for {'str': 'Black Valkyries From Venus', 'str_pl': 'copies +#. of Black Valkyries'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a weather-beaten novel written by someone named \"Lee" +" Racket.\"" +msgstr "リー・ラケットという人物が著した小説です。風雨に晒されていたようです。" + +#: lang/json/BOOK_from_json.py +msgid "The Wrong Tomorrow" +msgid_plural "copies of Wrong Tomorrow" +msgstr[0] "本(一般/間違った明日)" + +#. ~ Description for {'str': 'The Wrong Tomorrow', 'str_pl': 'copies of Wrong +#. Tomorrow'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a cheap drugstore paperback written by someone named " +"\"Lee Racket.\"" +msgstr "リー・ラケットという人物が著した、ドラッグストアで買えそうな安っぽいペーパーバック本です。" + +#: lang/json/BOOK_from_json.py +msgid "No God From a Corpse" +msgid_plural "copies of No God" +msgstr[0] "本(一般/神は死体から現れない)" + +#. ~ Description for {'str': 'No God From a Corpse', 'str_pl': 'copies of No +#. God'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a weatherworn paperback written by some skirt named \"Lee Racket.\"" +" It tells how rage and jealousy can turn a man, or a woman, into a monster." +" This story is hard-boiled enough to break a spoon." +msgstr "" +"リー・ラケットという名前の女性が著した、ボロボロのペーパーバック本です。怒りと嫉妬によって男性や女性がどのように豹変するかを描いた、非常にハードボイルドな物語です。" + +#: lang/json/BOOK_from_json.py +msgid "The Deep Dive" +msgid_plural "copies of Deep Dive" +msgstr[0] "本(一般/ディープ・ダイブ)" + +#. ~ Description for {'str': 'The Deep Dive', 'str_pl': 'copies of Deep Dive'} +#: lang/json/BOOK_from_json.py +msgid "" +"This dimestore short story about space travel is written by a broad named " +"\"Lee Racket.\"" +msgstr "リー・ラケットという名前の女性が著した、宇宙旅行をテーマにした短編小説です。" + +#: lang/json/BOOK_from_json.py +msgid "Planet of the Murderous Squids that Time Forgot!" +msgid_plural "Planet of the Murderous Squids that Time Forgot!s" +msgstr[0] "本(一般/忘れ去られた殺人イカ惑星!)" + +#. ~ Description for Planet of the Murderous Squids that Time Forgot! +#: lang/json/BOOK_from_json.py +msgid "" +"In this psychedelic adventure novel of cosmic exploration, an elderly " +"assassin discovers a planet too good to be true. Only once it is too late " +"does she discover the harrowing truth at the center of \"The Planet of the " +"Murderous Squids that Time Forgot!\"" +msgstr "" +"年老いた暗殺者が信じがたい惑星を発見する、サイケデリックな宇宙探索アドベンチャー小説です。「忘れ去られた殺人イカ惑星!」のストーリーの核に痛ましい真実が含まれていることが分かったのは、全てが手遅れになってからでした。" + +#: lang/json/BOOK_from_json.py +msgid "The Great Capes of Metropolis" +msgid_plural "The Great Capes of Metropoliss" +msgstr[0] "本(一般/メトロポリスの偉大なるマント)" + +#. ~ Description for The Great Capes of Metropolis +#: lang/json/BOOK_from_json.py +msgid "" +"In this classic pulp paperback of superheroic exploits, a group of masked " +"vigilantes with diverse superpowers learn to work together to defeat the " +"ultimate villain." +msgstr "" +"スーパーヒーローの活躍を描いた、古典的なパルプ小説のペーパーバック本です。素性を隠した自警団のメンバーたちが、究極の悪を倒すために協力して戦うことを学びます。" + +#: lang/json/BOOK_from_json.py +msgid "Yesterday's Murdered" +msgid_plural "Yesterday's Murdereds" +msgstr[0] "本(一般/昨日の殺人)" + +#. ~ Description for Yesterday's Murdered +#: lang/json/BOOK_from_json.py +msgid "" +"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" +" has one last shot at vengeance." +msgstr "テンポの速い犯罪もののパルプ小説です。鋼の精神を持つ飲んだくれの刑事が、最後の復讐の機会を得ます。" + +#: lang/json/BOOK_from_json.py +msgid "Flashgun Condor and the Crimson Criminal" +msgid_plural "Flashgun Condor and the Crimson Criminals" +msgstr[0] "本(一般/フラッシュ・コンドルと真紅の犯罪者)" + +#. ~ Description for Flashgun Condor and the Crimson Criminal +#: lang/json/BOOK_from_json.py +msgid "" +"A hot-blooded photographer who fights crime with film, footage, and fists, " +"Condor is more than a mere shutterbug on the crime beat. But will she be " +"able to unravel a devious deception and bring the \"Crimson Criminal\" to " +"justice?" +msgstr "" +"写真と映像と拳で犯罪に立ち向かう熱血写真家のコンドルは、単なる犯罪専門のアマチュア写真家ではありません。彼女は邪悪な欺瞞を解き明かし、「真紅の犯罪者」を裁くことができるのでしょうか?" + +#: lang/json/BOOK_from_json.py +msgid "scifi novel" +msgid_plural "scifi novels" +msgstr[0] "本(一般/SF小説)" + +#. ~ Description for {'str': 'scifi novel'} +#: lang/json/BOOK_from_json.py +msgid "Aliens, ray guns, and space ships." +msgstr "エイリアン、光線銃、宇宙船があなたを待っています。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" +" surprisingly accurate in predicting much of modern society… Until " +"recently." +msgstr "" +"ギブソンの「ニューロマンサー」です。1980年代に執筆されましたが、現代社会の様々な分野を驚くほど正確に予測していました。しかし、それも大変動が起きるまでの話です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" +"\n" +"Tyger, Tyger, Burning bright,\n" +"In the forests of the night:\n" +"What immortal hand or eye,\n" +"Dare frame thy fearful symmetry?" +msgstr "" +"アルフレッド・ベスターの「虎よ、虎よ!」です。\n" +"\n" +"虎よ! 虎よ!\n" +"ぬばたまの夜の森に燦爛と燃え\n" +"そもいかなる不死の手のまたは目の作りしや\n" +"汝がゆゆしき均整を" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" +"stains have smudged the occasional word." +msgstr "アーシュラ・ル=グウィンの「天のろくろ」です。ページの所々に汚れた指の跡が残っています。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." +msgstr "アーシュラ・ル=グウィンの「所有せざる人々」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Hyperion\" by Dan Simmons." +msgstr "ダン・シモンズの「ハイペリオン」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" +"\n" +"Give us gods. Oh give them us!\n" +"Give us gods.\n" +"We are so tired of men\n" +"And motor-power." +msgstr "" +"ダン・シモンズの「エンディミオン」です。物語はD・H・ローレンスの詩から始まります。\n" +"\n" +"われらに神を与えよ。われらに神を!\n" +"われらに神を与えよ。\n" +"もううんざりだ、人間にも\n" +"動力にも。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." +msgstr "フィリップ・K・ディックの「アンドロイドは電気羊の夢を見るか?」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." +msgstr "ウィリアム・バロウズの「ノヴァ急報」です。随分年季が入っており、ページの端が折れています。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " +"ripped off." +msgstr "アイザック・アシモフの「ファウンデーション」です。裏表紙が剥ぎ取られています。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." +msgstr "フランツ・カフカの「審判」です。かなり年季が入っています。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." +msgstr "マーガレット・アトウッドの「侍女の物語」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " +"you wonder how Thailand fared the end of the world." +msgstr "パオロ・バチガルピの「ねじまき少女」です。帯文を読むと、タイが世界の終焉をどのように切り抜けたのか思いを馳せずにはいられません。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." +msgstr "ブルース・スターリングの「ネットの中の島々」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " +"contains a hand-written grocery list." +msgstr "アイザック・アシモフの「ファウンデーション対帝国」です。裏ページには手書きの食料品リストが記されています。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " +"still has the smell of new books within its pages." +msgstr "フィリップ・K・ディックの「暗闇のスキャナー」です。まだ新品のような匂いが残っています。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " +"Sterling. The cover has rings of coffee stains over it." +msgstr "ブルース・スターリングが編纂した「ミラーシェード: サイバーパンク・アンソロジー」です。表紙にコーヒーの染みが丸く残っています。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " +"looks to have been used to press flowers." +msgstr "A・E・ヴァン・ヴォークトの「非Aの世界」です。押し花を作るのに使われたようです。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." +msgstr "リチャード・モーガンの「オルタード・カーボン」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " +"the monster?" +msgstr "メアリー・シェリーの「フランケンシュタイン」です。怪物の名前ではなかったのですね?" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" +" handbook." +msgstr "エリック・フランク・ラッセルの「特務指令<ワスプ>」です。この小説は未来のテロリストのハンドブックです。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " +"covered in dried blood." +msgstr "リチャード・マシスンの「アイ・アム・レジェンド」です。裏表紙に乾いた血液が付いています。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " +"if it's been slightly chewed by a dog or other large animal." +msgstr "ジョー・ホールドマンの「終りなき戦い」です。イヌか何かの動物に噛まれたような跡が残っています。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." +msgstr "ロバート・A・ハインライの「月は無慈悲な夜の女王」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " +"Copy. Not for re-sale.\"" +msgstr "サミュエル・R・ディレイニーの「ノヴァ」です。表紙に「書評用献本。再販禁止」と記載されています。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." +msgstr "ヴォネガットの「タイタンの妖女」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " +"the first pages in crayon." +msgstr "シェリ・S. テッパーの「女の国の門」です。子供が赤いクレヨンで1ページ目に落書きをしたようです。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " +"with 'Library Copy'. And a sticker reading 'Science Fiction'." +msgstr "" +"ウィリアム・ギブスンの「カウント・ゼロ」です。背表紙に「図書館用」のスタンプが押され、「サイエンスフィクション」のステッカーが貼られています。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." +msgstr "A・E・ヴァン・ヴォークトの「武器製造業者」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" +" almost brand new." +msgstr "ベッキー・チェンバーズの「レコード・オブ・ア・スペースボーン・フュー」です。ほぼ新品のようです。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " +"and worn, some pages appear to be loose." +msgstr "イアン・M・バンクスの「ユーズ・オブ・ウェポンズ」です。背表紙がひび割れ、一部のページの綴じが緩んでいるようです。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." +msgstr "ジャン=バティスト・カズン・ド・グレインヴィルの「最後の男」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " +"and thin. You should probably be careful with this copy." +msgstr "オーウェルの「1984年」です。ページの綴じが緩んでおり、取り扱いには注意が必要です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " +"dog-eared and worn." +msgstr "ハインラインの「異星の客」です。本の角が折れ曲がっています。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." +msgstr "オースン・スコット・カードの「エンダーのゲーム」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." +msgstr "アーサー・コナン・ドイルの「失われた世界」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." +msgstr "アーサー・C・クラークの「宇宙島へ行く少年」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." +msgstr "H・G・ウェルズの「モロー博士の島」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." +msgstr "スタニスワフ・レムの「天の声」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." +msgstr "フレッド・ホイルの「暗黒星雲」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." +msgstr "オラフ・ステープルドンの「最後にして最初の人類」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"Solaris\"." +msgstr "スタニスワフ・レムの「ソラリス」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." +msgstr "シオドア・スタージョンの「人間以上」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Vurt\" by Jeff Noon." +msgstr "ジェフ・ヌーンの「ヴァート」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." +msgstr "ウォルター・M・ミラー・ジュニアの「黙示録3174年」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." +msgstr "H・G・ウェルズの「宇宙戦争」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." +msgstr "チャールズ・ストロスの「アイアン・サンライズ」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " +"blurb reminds you of a Japanese movie you think you once caught on the " +"television late at night." +msgstr "スーザン・コリンズの「ハンガー・ゲーム」です。帯文を読むと、深夜にテレビで放送していた日本映画が連想されます。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." +msgstr "ジョン・ウィンダムの「トリフィドの日」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." +msgstr "アンソニー・バージェスの「時計じかけのオレンジ」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." +msgstr "ウォルター・テヴィスの「地球に落ちてきた男」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." +msgstr "ダニエル・F・ガロイの「模造世界」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." +msgstr "エルンスト・ユンガーの「ザ・グラス・ビーズ」です。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." +msgstr "ジュール・ヴェルヌの「地底旅行」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " +"missing from the end of the book. Luckily only mail-order advertisements." +msgstr "ラリー・ニーヴンの「リングワールド」です。後半の数ページが欠落していますが、幸いなことに通販広告のページだったようです。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " +"Douglas Adams." +msgstr "ダグラス・アダムズの「銀河ヒッチハイク・ガイド」です。何度も読まれた跡があります。" + +#: lang/json/BOOK_from_json.py +msgid "Dune" +msgid_plural "copies of Dune" +msgstr[0] "本(一般/デューン)" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " +"some of its pages. Weird." +msgstr "フランク・ハーバートの「デューン」です。本の角が折れ曲がっており、奇妙な事に、ページの間に砂が挟まっています。" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Dune\" by Frank Herbert. It is a fairly new " +"reprint with the words \"SOON TO BE A MAJOR MOTION PICTURE\" splashed across" +" its dust jacket." +msgstr "フランク・ハーバートが著した「デューン」の頑丈なハードカバー本です。カバーに「近日映画公開予定」と書かれた、かなり新しい復刻版です。" + +#: lang/json/BOOK_from_json.py +msgid "Parable of the Talents" +msgid_plural "copies of Parable of the Talents" +msgstr[0] "本(一般/タラントの寓話)" + +#. ~ Description for {'str': 'Parable of the Talents', 'str_pl': 'copies of +#. Parable of the Talents'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Parable of the Talents.\". It is Octavia " +"Butler's sequel to her book \"Parable of the Sower.\"" +msgstr "オクティヴィア・バトラーが著した「種蒔く人の寓話」の続編である、「タラントの寓話」の頑丈なハードカバー本です。" + +#: lang/json/BOOK_from_json.py +msgid "The Fifth Season" +msgid_plural "signed copies of Fifth Season" +msgstr[0] "本(一般/第五の季節)" + +#. ~ Description for {'str': 'The Fifth Season', 'str_pl': 'signed copies of +#. Fifth Season'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a signed hardcover copy of the Hugo award winning \"The Fifth " +"Season\" by N.K. Jemisin. It smells faintly of dirt." +msgstr "N・K・ジェミシンが著した「第五の季節」のサイン入りハードカバー本です。かすかに土の匂いがします。" + +#: lang/json/BOOK_from_json.py +msgid "We" +msgid_plural "copies of We" +msgstr[0] "本(一般/われら)" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"This hardback book is titled \"The Annotated We: A New Translation of Evgeny Zamiatin's Novel.\"\n" +"\n" +"It is Vladimir Wozniuk's 2015 translation of \"We,\" originally published in 1924 and generally seen as the first modern dystopian novel. The commentary examines the profusive allusions and highlights the poetic nature of Zamiatin's language." +msgstr "" +"エヴゲーニイ・ザミャーチンが著した「われら」の注釈付き新訳版です。\n" +"\n" +"1924年に出版された原初の近代ディストピア小説として有名な「われら」を、ウラジーミル・ウォズニアックが2015年に翻訳したものです。大量の注釈が付け加えてあり、ザミャーチンが書く文章の詩的性質を強調しています。" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"A seminal work of dystopian fiction, Evgeny Zamiatin's \"We\" was first published in 1924 but suppresed by the Soviet Union until 1988.\n" +"\n" +"This mass-market 1993 edition you've found was translated from the Russian by Clarence Brown and includes a short introduction. The slightly worn cover features a surrealist photo of a person gazing backward suspiciouly." +msgstr "" +"ディストピア小説の代表作であるエフゲニー・ザミャーチンの「われら」は1924年に出版されましたが、1988年までソ連によって出版が差し止められていました。\n" +"\n" +"これはクラレンス・ブラウンがロシア語から翻訳し、簡単な前書きを加えたたもので、1993年に出版され流通していました。やや摩耗した表紙には、不審そうに後ろを振り返るシュールな人物写真が載っています。" + +#: lang/json/BOOK_from_json.py +msgid "The Cyberiad" +msgid_plural "copies of The Cyberiad" +msgstr[0] "本(一般/宇宙創世記ロボットの旅)" + +#. ~ Description for {'str': 'The Cyberiad', 'str_pl': 'copies of The +#. Cyberiad'} +#: lang/json/BOOK_from_json.py +msgid "" +"This 350 page paperback presents the exploits and robotic rivalries of Trurl" +" and Klapaucius. Originally written in Polish by Stanislaw Lem, it has been" +" masterfully translated into English by Michael Kandel." +msgstr "" +"トルルとクラパウチュスという名の二体のロボットの偉業とライバル関係を描いた、350ページのペーパーバック本です。原作はスタニスワフ・レムがポーランド語で出版しましたが、この英語版はマイクル・カンデルによって見事に翻訳されています。" + +#: lang/json/BOOK_from_json.py +msgid "Brave New World" +msgid_plural "copies of Brave New World" +msgstr[0] "本(一般/すばらしい新世界)" + +#. ~ Description for {'str': 'Brave New World', 'str_pl': 'copies of Brave New +#. World'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is weather worn copy of \"Brave New World\" by Aldous Huxley looks like" +" it has been left out in rain. The novel begins in a bleak building where " +"fetuses are grown in bottles on an assembly line." +msgstr "" +"オルダス・ハクスリーの「すばらしい新世界」です。雨に濡れたまま放置されていたようです。胎児が製造され瓶詰めにされる殺風景な工場から物語は始まります。" + +#: lang/json/BOOK_from_json.py +msgid "Roadside Picnic" +msgid_plural "copies of Roadside Picnic" +msgstr[0] "本(一般/路傍のピクニック)" + +#. ~ Description for {'str': 'Roadside Picnic', 'str_pl': 'copies of Roadside +#. Picnic'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a paperback copy of \"Roadside Picnic\" by Arkady and Boris " +"Strugatsky. It has been translated into over 20 languages, occasionally " +"under the name \"Stalker.\" This copy, fortunately for you, just happens to" +" be in your native tongue." +msgstr "" +"アルカジイとボリスのストルガツキー兄弟が著した「路傍のピクニック」のペーパーバック本です。20か国語以上の言語に翻訳されており、「ストーカー」という別名でも知られています。この本は幸いにもよく知る言語で書かれています。" + +#: lang/json/BOOK_from_json.py +msgid "Fahrenheit 451" +msgid_plural "copies of Fahrenheit 451" +msgstr[0] "本(一般/華氏451)" + +#. ~ Description for {'str': 'Fahrenheit 451', 'str_pl': 'copies of Fahrenheit +#. 451'} +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "レイ・ブラッドベリの「華氏451度」です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"Some joker has gently burnt the exterior edge of this paperback dystopia. " +"It's still perfectly readable." +msgstr "ペーパーバックのディストピア小説です。どこかのいたずら者によって本の縁が焦がされていますが、本文は問題なく読めます。" + +#: lang/json/BOOK_from_json.py +msgid "" +"\"It was a pleasure to burn. It was a special pleasure to see things eaten," +" to see things blackened and changed.\"" +msgstr "「火の色は愉しかった。ものが燃えつき、黒い色に変わっていくのを見るのは、格別の愉しみだった。」" + +#: lang/json/BOOK_from_json.py +msgid "" +"This 1979 softcover edition of Ray Bradbury's \"Fahrenheit 451\" was once a " +"library book. It still has a light blue checkout card pocketed on the torn " +"back cover. One \"Suzanne Collins\" borrowed it in 1981." +msgstr "" +"レイ・ブラッドベリが著した「華氏451」の1979年に再販されたソフトカバー本です。図書館の除籍図書のようです。破れた裏表紙のポケットには水色の図書カードが入っており、1981年に「スザンヌ・コリンズ」という人物が借りていたようです。" + +#: lang/json/BOOK_from_json.py +msgid "" +"The red and black paperback novel you hold in your hands is a modern reprint" +" of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "レイ・ブラッドベリの「華氏451」を現代風に復刻した、表紙が赤と黒に塗られたペーパーバック小説です。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This scifi novel is divided into three parts: \"The Hearth and the " +"Salamander,\" \"The Sieve and the Sand,\", and \"Burning Bright.\"" +msgstr "このSF小説は以下の3部構成になっています:「炉床と火トカゲ」「ふるいと砂」「火はあかるく燃えて」" + #: lang/json/BOOK_from_json.py msgid "sports novel" msgid_plural "sports novels" @@ -26434,9 +26555,11 @@ msgstr[0] "本(一般/リングベアラーになって良かった10の事)" #: lang/json/BOOK_from_json.py msgid "" "This book is for the delightful little ring bearer in your wedding. The " -"author depicts the responsibility and the honor in being a ring bearer your " -"little angel will cherish." -msgstr "結婚式のリングベアラーについて書いた本です。著者は、大切な指輪を運ぶ小さな天使の責任と名誉について語っています。" +"author depicts the responsibility and honor in being a ring bearer. Your " +"little angel will cherish this book as he or she learns how to behave on " +"your perfect day." +msgstr "" +"結婚式のリングベアラーについて書いた本です。著者は、大切な指輪を運ぶ小さな天使の責任と名誉について語っています。リングベアラーに選ばれた子供は、この本を大事に読み、大切な日の完璧な振る舞い方を学びます。" #: lang/json/BOOK_from_json.py msgid "How to Raise a Gentleman: A Civilized Guide to Parenting" @@ -27679,10 +27802,11 @@ msgstr "「逃げ出したパンケーキ」というタイトルの、子供向 #: lang/json/BOOK_from_json.py msgid "The Adorkable Girl" -msgid_plural "The Adorkable Girls" +msgid_plural "copies of Adorkable" msgstr[0] "本(一般/ダサかわガール)" -#. ~ Description for The Adorkable Girl +#. ~ Description for {'str': 'The Adorkable Girl', 'str_pl': 'copies of +#. Adorkable'} #: lang/json/BOOK_from_json.py msgid "" "When a therapist's daughter transfers to a new school, she decides to change" @@ -27693,22 +27817,24 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Becoming Jackson" -msgid_plural "Becoming Jacksons" +msgid_plural "copies of Becoming Jackson" msgstr[0] "本(一般/変身ジャクソン)" -#. ~ Description for Becoming Jackson +#. ~ Description for {'str': 'Becoming Jackson', 'str_pl': 'copies of Becoming +#. Jackson'} #: lang/json/BOOK_from_json.py msgid "" "When Jackson gains the mystical talent to alter his appearance on command, " -"how will he continue to recognize himself in his own mirror?" +"will he be able to recognize himself in his own mirror?" msgstr "呪文によって外見を変えられる不思議な能力を手に入れたジャクソン。鏡の中の自分はどんな姿に映るのでしょうか?" #: lang/json/BOOK_from_json.py msgid "Nothing Burned" -msgid_plural "Nothing Burneds" +msgid_plural "copies of Nothing Burned" msgstr[0] "本(一般/もう炎上なんてしない)" -#. ~ Description for Nothing Burned +#. ~ Description for {'str': 'Nothing Burned', 'str_pl': 'copies of Nothing +#. Burned'} #: lang/json/BOOK_from_json.py msgid "" "A teenage influencer becomes fast friends with someone who may or may not be" @@ -27717,10 +27843,11 @@ msgstr "10代のインフルエンサーが、本物の悪魔かもしれない #: lang/json/BOOK_from_json.py msgid "High and Low" -msgid_plural "High and Lows" +msgid_plural "copies of High and Low" msgstr[0] "本(一般/ハイ&ロウ)" -#. ~ Description for High and Low +#. ~ Description for {'str': 'High and Low', 'str_pl': 'copies of High and +#. Low'} #: lang/json/BOOK_from_json.py msgid "" "In this work of adolescent fiction, a young gemini discovers that the " @@ -27732,10 +27859,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Fire When You See My Eyes" -msgid_plural "Fire When You See My Eyess" +msgid_plural "copies of Fire When" msgstr[0] "本(一般/瞳の中の炎)" -#. ~ Description for Fire When You See My Eyes +#. ~ Description for {'str': 'Fire When You See My Eyes', 'str_pl': 'copies of +#. Fire When'} #: lang/json/BOOK_from_json.py msgid "" "In a cataclysmic future, advanced technology gives parents access to video " @@ -27744,10 +27872,11 @@ msgstr "遠い未来、高度なテクノロジーによって、保護者は我 #: lang/json/BOOK_from_json.py msgid "Peanut Butter Bruised" -msgid_plural "Peanut Butter Bruiseds" +msgid_plural "copies of Peanut Butter Bruised" msgstr[0] "本(一般/傷だらけのピーナッツバター)" -#. ~ Description for Peanut Butter Bruised +#. ~ Description for {'str': 'Peanut Butter Bruised', 'str_pl': 'copies of +#. Peanut Butter Bruised'} #: lang/json/BOOK_from_json.py msgid "" "In this work of young adult fiction, a woman raised on food stamps falls in " @@ -27757,10 +27886,11 @@ msgstr "困窮者向けの食品割引切符で育った女性が、若い料理 #: lang/json/BOOK_from_json.py msgid "Ready When You Are" -msgid_plural "Ready When You Ares" +msgid_plural "copies of Ready When" msgstr[0] "本(一般/いつでも準備オーケー)" -#. ~ Description for Ready When You Are +#. ~ Description for {'str': 'Ready When You Are', 'str_pl': 'copies of Ready +#. When'} #: lang/json/BOOK_from_json.py msgid "" "When three teenage girls ditch class to drive cross country together they " @@ -27771,10 +27901,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Study of a Boy" -msgid_plural "Study of a Boys" +msgid_plural "copies of \"Study of a Boy\"" msgstr[0] "本(一般/少年の研究)" -#. ~ Description for Study of a Boy +#. ~ Description for {'str': 'Study of a Boy', 'str_pl': 'copies of "Study of +#. a Boy"'} #: lang/json/BOOK_from_json.py msgid "" "A high school sophomore's personal journal is stolen and then leaked on " @@ -27785,10 +27916,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Summer Variables" -msgid_plural "Summer Variabless" +msgid_plural "copies of Summer Variables" msgstr[0] "本(一般/夏の気まぐれ)" -#. ~ Description for Summer Variables +#. ~ Description for {'str': 'Summer Variables', 'str_pl': 'copies of Summer +#. Variables'} #: lang/json/BOOK_from_json.py msgid "" "In this book written primarily for young adults, a woman's modest summer " @@ -27797,6 +27929,59 @@ msgid "" msgstr "" "ヤングアダルト向けの小説です。夏にちょっとしたインターンシップに参加したある女性が信じられないような発見をして、悪い注目を浴びてしまいます。" +#: lang/json/BOOK_from_json.py +msgid "In a Dark Place" +msgid_plural "copies of Dark Place" +msgstr[0] "本(一般/暗いところで)" + +#. ~ Description for {'str': 'In a Dark Place', 'str_pl': 'copies of Dark +#. Place'} +#: lang/json/BOOK_from_json.py +msgid "" +"Markia dreams about the future. Theo longs for the past. Together can they" +" find a way to live in the now?" +msgstr "マルキアは未来を夢見ています。テオは過去に憧れています。2人は今を生きる道を見つけられるのでしょうか?" + +#: lang/json/BOOK_from_json.py +msgid "Betrayal Takes Two" +msgid_plural "copies of Betrayal" +msgstr[0] "本(一般/裏切りは回り道)" + +#. ~ Description for {'str': 'Betrayal Takes Two', 'str_pl': 'copies of +#. Betrayal'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a hard cover book for older teens. The two main characters pull a " +"cruel prank on their classmates, and are brought together both by their " +"frantic efforts to avoid being caught and their shared sense of guilt." +msgstr "" +"10代後半向けのハードカバー本です。2人の主人公がクラスメイトに残酷ないたずらを仕掛け、バレないように必死に逃げる中で、罪悪感を共有し結束が高まります。" + +#: lang/json/BOOK_from_json.py +msgid "coming of age novel" +msgid_plural "coming of age novels" +msgstr[0] "本(一般/青春小説)" + +#. ~ Description for {'str': 'coming of age novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." +msgstr "若者が日常生活や愛、セックスなどを通じて感動を体験し、成長を遂げていく古典的な物語です。" + +#: lang/json/BOOK_from_json.py +msgid "Pantheon: The Story of an Iranian Youth" +msgid_plural "copies of Pantheon" +msgstr[0] "本(一般/パンテオン:イランの若者の物語)" + +#. ~ Description for {'str': 'Pantheon: The Story of an Iranian Youth', +#. 'str_pl': 'copies of Pantheon'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hard cover graphic novel about a young girl living in Iran during the " +"1980's, seeing the world change around her as Iraq invaded her country." +msgstr "1980年代、イラクに侵攻されたイランに住む少女の目線で周囲の世界の変化を描いた、ハードカバーのグラフィックノベルです。" + #: lang/json/BOOK_from_json.py msgid "original copy of Housefly" msgid_plural "original copies of Housefly" @@ -29366,6 +29551,44 @@ msgid "" "harmless." msgstr "分厚い霧の壁を広範囲に出現させます。敵が霧に触れると強烈な気圧が発生して地面に押し付けられますが、仲間は問題なく通り抜けられます。" +#: lang/json/BOOK_from_json.py +msgid "Scroll of Knock" +msgid_plural "Scrolls of Knock" +msgstr[0] "呪文書(ノック)" + +#. ~ Description for {'str': 'Scroll of Knock', 'str_pl': 'Scrolls of Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open locked wooden doors from a short " +"range away." +msgstr "魔法のエネルギーを利用して、隣接する鍵の掛かった木製のドアを開けられます。" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Improved Knock" +msgid_plural "Scrolls of Improved Knock" +msgstr[0] "呪文書(インプローブド・ノック)" + +#. ~ Description for {'str': 'Scroll of Improved Knock', 'str_pl': 'Scrolls of +#. Improved Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open any locked door from a short range " +"away." +msgstr "魔法のエネルギーを利用して、隣接する鍵の掛かったドアを開けられます。" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "呪文書(リペリング・アーク)" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of +#. Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers" +" with baleful lightning." +msgstr "パチパチと音を立てるオーラで全身を包み、悪意ある攻撃者を電撃で迎え撃ちます。" + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -29705,35 +29928,6 @@ msgstr "" "愛しているよ。\n" "Fより」" -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "本(一般/初めにコマンドラインありき)" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', -#. 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "1999年にニール・スティーブンソンが著した、コンピューターOSと自動車販売店を比較して語るユーモラスなエッセイです。" - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "本(学習/コンパイラ設計原論)" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': -#. 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" -"アルフレッド・エイホとジェフリー・ウルマンが1977年に著した、コンピュータ科学に関する古典的な教科書です。表紙には、コンパイラ設計の複雑さを表す緑色のドラゴンと、LALRパーサ生成と構文主導型変換を操る騎士が描かれています。" - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -31227,14 +31421,8 @@ msgstr[0] "変異肉塊" #. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py -msgid "" -"Meat from a heavily mutated animal. It has an unsettling loose and spongy " -"texture, but smells… mostly normal. There are strange tangles and " -"formations in it that don't appear natural at all: bits of bone and hair " -"crusted up inside the muscle, as if trying to form another organism. Still," -" seems digestible at least, if you cook it and remove the worst parts." -msgstr "" -"ひどく変異した動物の肉です。締まりのないスポンジのような質感が不安ですが...とりあえず臭いは、おおむね普通です。見たこともない奇妙な瘤や器官も混ざっており、肉の内部に固まった骨や毛を見ると、まるで別の生物を生み出そうとしていたかのように思えます。まったく食用に向かない部分を取り除いて調理すれば、少なくとも消化は可能です。" +msgid "Meat from a heavily mutated animal." +msgstr "重度の変異を起こした動物から切り落とされた肉です。" #: lang/json/COMESTIBLE_from_json.py msgid "scrap of mutant meat" @@ -31245,12 +31433,9 @@ msgstr[0] "変異屑肉" #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"A tiny scrap of meat from a heavily mutated animal. It smells a bit odd, " -"and has bits of hair and bone mixed in that seem like they grew inside the " -"muscle itself. Still, seems digestible at least, if you cook it and remove " -"the worst parts." -msgstr "" -"ひどく変異した動物の屑肉です。少し奇妙な臭いがし、肉の内部には成長途中の毛や骨の小片が混ざっています。まったく食用に向かない部分を取り除いて調理すれば、少なくとも消化は可能です。" +"A tiny scrap of meat from a heavily mutated animal. It smells unappealing, " +"to say the least." +msgstr "重度の変異を起こした動物の細かい肉片です。控えめに言っても不味そうな臭いがします。" #: lang/json/COMESTIBLE_from_json.py msgid "mutant humanoid meat" @@ -31318,18 +31503,22 @@ msgstr[0] "変異肉(調理済)" #. ~ Description for cooked mutant meat #: lang/json/COMESTIBLE_from_json.py -msgid "" -"This is a cooked chunk of meat from a mutated animal. It has an unsettling," -" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" -" the bits of hair and bone out…" -msgstr "" -"変異した動物の肉を調理したものです。スポンジのような質感が不安ですが、味に関しては...おおむね普通です。毛や骨などの食用に向かない部分は、ちゃんと取り出せているはずです..." +msgid "This is a cooked chunk of meat from a mutated animal." +msgstr "変異した動物の肉塊を調理したものです。" #: lang/json/COMESTIBLE_from_json.py msgid "cooked scrap of mutant meat" msgid_plural "cooked scraps of mutant meat" msgstr[0] "変異屑肉(調理済)" +#. ~ Description for {'str': 'cooked scrap of mutant meat', 'str_pl': 'cooked +#. scraps of mutant meat'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"This is a tiny scrap of cooked mutant meat. It is small enough that it's " +"hard to tell how disgusting it is." +msgstr "変異体のくず肉を調理したものです。身が細かすぎて、見た目は普通の肉と変わらないように見えます。" + #: lang/json/COMESTIBLE_from_json.py msgid "raw offal" msgid_plural "raw offals" @@ -31356,6 +31545,16 @@ msgid "" "prepared." msgstr "調理済みの新鮮な内臓類です。必須栄養素が詰まっていますが、しっかりと調理をせずに食べるのは一般的に悪食と見なされます。" +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant organs" +msgid_plural "mutant organs" +msgstr[0] "変異臓物" + +#. ~ Description for {'str_sp': 'mutant organs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "These organs came from a giant mutant bug." +msgstr "巨大な突然変異体の昆虫から採取された臓器です。" + #: lang/json/COMESTIBLE_from_json.py msgid "pickled offal" msgid_plural "pickled offal" @@ -31521,6 +31720,16 @@ msgid "" "all cooked out." msgstr "適切な調理が施された、何の味もしない灰色の臓器です。調理前より不味そうに見えますが、寄生虫は完全に死滅しています。" +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant lungs" +msgid_plural "mutant lungs" +msgstr[0] "変異肺" + +#. ~ Description for {'str_sp': 'mutant lungs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "You're pretty sure this is lung tissue." +msgstr "恐らく肺組織だと考えられます。" + #: lang/json/COMESTIBLE_from_json.py msgid "raw liver" msgid_plural "raw livers" @@ -31673,9 +31882,11 @@ msgstr[0] "変異脂肪塊" #. mutant fat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Freshly butchered fat from a heavily mutated animal. You could eat it raw, " -"but it is better used as an ingredient in other foods or projects." -msgstr "変異した生物を解体して手に入れた脂肪です。そのまま食べることも可能ですが、他の食品類の材料として使うべきでしょう。" +"Freshly butchered fat from a heavily mutated animal. It smells, if " +"anything, even more disgusting than the rest of the mutant. There are " +"little puddles of unidentified oils dripping from it." +msgstr "" +"重度の変異を起こした動物から切りとった脂肪です。一般的な変異肉よりも更に酷い臭いがします。正体不明の油分が滴り落ち、小さな水たまりを作っています。" #: lang/json/COMESTIBLE_from_json.py msgid "mutant tallow" @@ -32941,16 +33152,16 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "砂糖や蜂蜜を加えた水です。それなりの味ですよ。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" +msgid "black tea" +msgid_plural "black teas" msgstr[0] "紅茶" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves" -" of the tea plant /Camellia sinensis/." -msgstr "チャノキから採れる紅茶葉に湯を注いで作る、世界中にいる紳士のための飲み物です。" +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." +msgstr "チャノキから採れる葉を酸化させた紅茶葉に湯を注いだ、世界中にいる紳士のための飲み物です。" #: lang/json/COMESTIBLE_from_json.py msgid "bark tea" @@ -32994,6 +33205,31 @@ msgstr[0] "ミネラルウォーター" msgid "Fancy mineral water, so fancy it makes you feel fancy just holding it." msgstr "特別なボトルに入った上質な天然水です。上質な水を持っていると、何だか特別な気分になりますね。" +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "緑茶" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia sinensis/." +" Green tea has a lighter, fresher taste than black and is traditionally " +"preferred in Asian cultures." +msgstr "チャノキから採れる葉に湯を注いで作った飲み物です。紅茶よりもすっきりとしていて飲みやすく、アジア圏で古くから好まれています。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "フルーツティー" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "茶葉ではなくハーブやドライフルーツを使った美味しい飲み物です。「ティー」と呼ばれてはいますが、実際には煎じつめて作ります。" + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -38204,7 +38440,6 @@ msgid_plural "pine nuts" msgstr[0] "松の実" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "松かさから取り出した、カリカリとした美味しい木の実です。" @@ -39104,21 +39339,45 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "花の蜜です。このアイテムが見えている場合はバグが発生しています。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" -msgstr[0] "ティーバッグ" +msgid "black tea bag" +msgid_plural "black tea bags" +msgstr[0] "ティーバッグ(紅茶)" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'black tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." -msgstr "中に茶葉が入った紙袋です。沸騰したお湯の中に入れて紅茶を淹れましょう。" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "中に茶葉が入った紙袋です。沸騰したお湯に浸して紅茶を淹れましょう。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "ティーバッグ(緑茶)" + +#. ~ Description for {'str': 'green tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." +msgstr "中に茶葉が入った紙袋です。沸騰したお湯に浸して緑茶を淹れましょう。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" +msgstr[0] "ティーバッグ(フルーツティー)" + +#. ~ Description for {'str': 'fruit tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." +msgstr "中に茶葉とフルーツが入った紙袋です。沸騰したお湯に浸してフルーツティーを淹れましょう。" #: lang/json/COMESTIBLE_from_json.py msgid "herbal tea bag" msgid_plural "herbal tea bags" -msgstr[0] "ハーブティーバッグ" +msgstr[0] "ティーバッグ(ハーブティー)" #. ~ Description for {'str': 'herbal tea bag'} #: lang/json/COMESTIBLE_from_json.py @@ -39198,16 +39457,17 @@ msgstr[0] "プロテインバー" #. ~ Description for {'str': 'protein ration'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"SoyPelusa ran a highly successful crowdfunding campaign for their signature " -"protein bar, dubbed \"DaiZoom.\" A person can live on one of these bars, " -"three times a day, presumably forever. After backers received their " -"product, a single flaw was found: most consumers found starvation preferable" -" to the flavor. Warehouses of the product went unsold as the company went " -"bankrupt, providing the perfect opportunity for FEMA to scoop them up and " -"stock the evac shelters. Now, you hold a piece of famous crowdfunding " -"history in your hands. How exciting." +"SoyPelusa ran a highly successful crowdfunding campaign for their signature protein bar, dubbed \"DaiZoom.\"\n" +"\n" +"A person can live on one of these bars, three times a day, presumably forever. After backers received their product, a single flaw was found: most consumers found starvation preferable to the flavor. Warehouses of the product went unsold as the company went bankrupt, providing the perfect opportunity for FEMA to scoop them up and stock the evac shelters.\n" +"\n" +"Now, you hold a piece of famous crowdfunding history in your hands. How exciting." msgstr "" -"SoyPelusa社がクラウドファンディングを募り大成功を収めた、「ダイズーム」という名のプロテインバーです。人間はこのバーを一日3本食べれば永遠に生きられると言われています。出資者が製品を受け取った後で、ある欠陥が見つかりました。食べた者の大多数が、これを食べ続けるくらいなら餓死した方がマシだと感じたのです。その後SoyPelusa社は倒産しましたが、避難所の備蓄食料に丁度いいと考えたFEMAは、売れ残って倉庫に積まれていた製品をすべて買い取りました。そして、この有名なクラウドファンディングの遺産は生存者の手に渡りました。愉快な話ですね。" +"SoyPelusa社がクラウドファンディングを募り大成功を収めた、「ダイズーム」という名のプロテインバーです。\n" +"\n" +"人間はこのバーを一日3本食べれば永遠に生きられると言われています。出資者が製品を受け取った後で、ある欠陥が見つかりました。食べた者の大多数が、これを食べ続けるくらいなら餓死した方がマシだと感じたのです。その後SoyPelusa社は倒産しましたが、避難所の備蓄食料に丁度いいと考えたFEMAは、売れ残って倉庫に積まれていた製品をすべて買い取りました。\n" +"\n" +"そして、この有名なクラウドファンディングの遺産は生存者の手に渡りました。愉快な話ですね。" #: lang/json/COMESTIBLE_from_json.py msgid "protein shake" @@ -39963,17 +40223,28 @@ msgid "" msgstr "この多肉質の熟した根には糖分が含まれています。砂糖を抽出するにはいくつかの処理が必要です。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" +msgid "black tea leaf" +msgid_plural "black tea leaves" msgstr[0] "紅茶葉" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " "just eat them raw. They aren't too filling though." -msgstr "" -"水分を飛ばした熱帯植物の葉です。紅茶にしても良いですし、生でも食べられます。これで飢えを癒すには気分が悪くなるぐらいどっさり食べる必要がありますが。" +msgstr "乾燥させた熱帯植物の葉です。紅茶を淹れられますが、そのまま食べても大丈夫です。あまり空腹は満たせません。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "緑茶葉" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "乾燥させた熱帯植物の葉です。緑茶を淹れられますが、そのまま食べても大丈夫です。あまり空腹は満たせません。" #: lang/json/COMESTIBLE_from_json.py msgid "tomato" @@ -42515,6 +42786,66 @@ msgid "" "to bake bread more efficiently than with just flour." msgstr "穀粉と水を混ぜ合わせた、粘性の高いペーストです。穀粉をそのまま使うより効率よくパンを焼けます。" +#: lang/json/COMESTIBLE_from_json.py +msgid "pineapple stem" +msgid_plural "pineapple stem" +msgstr[0] "茎(パイナップル)" + +#. ~ Description for {'str_sp': 'pineapple stem'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Roots of a pineapple plant, for growing your own." +msgstr "パイナップルの根茎です。自家栽培できます。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "melon seeds" +msgid_plural "melon seeds" +msgstr[0] "種(メロン)" + +#. ~ Description for {'str_sp': 'melon seeds'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some melon seeds." +msgstr "メロンの種です。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "banana saplings" +msgid_plural "banana saplings" +msgstr[0] "苗(バナナ)" + +#. ~ Description for {'str_sp': 'banana saplings'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some banana saplings." +msgstr "バナナの苗木です。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "orange vine" +msgid_plural "orange vine" +msgstr[0] "苗(オレンジ)" + +#. ~ Description for {'str_sp': 'orange vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some orange vine. Definitely GMO." +msgstr "オレンジの苗木です。間違いなく遺伝子組み換え植物です。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "lemon vine" +msgid_plural "lemon vine" +msgstr[0] "苗(レモン)" + +#. ~ Description for {'str_sp': 'lemon vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some lemon vines. Definitely GMO." +msgstr "レモンの苗木です。間違いなく遺伝子組み換え植物です。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "subterraenean coconut" +msgid_plural "subterraenean coconut" +msgstr[0] "苗(ココナッツ)" + +#. ~ Description for {'str_sp': 'subterraenean coconut'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Proof that man went too far before the Cataclysm." +msgstr "人間が大変動以前に行なっていた度が過ぎた行動の結実です。" + #: lang/json/COMESTIBLE_from_json.py msgid "vampire mutagen" msgid_plural "vampire mutagens" @@ -42884,6 +43215,11 @@ msgid "ankylosaurus egg" msgid_plural "ankylosaurus eggs" msgstr[0] "卵(アンキロサウルス)" +#: lang/json/COMESTIBLE_from_json.py +msgid "apatosaurus egg" +msgid_plural "apatosaurus eggs" +msgstr[0] "卵(アパトサウルス)" + #: lang/json/COMESTIBLE_from_json.py msgid "ceratosaurus egg" msgid_plural "ceratosaurus eggs" @@ -43194,7 +43530,7 @@ msgid "scream mushroom" msgid_plural "scream mushrooms" msgstr[0] "サケビタケ" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -43377,104 +43713,6 @@ msgid "" msgstr "" "我々は現時点では存在しない。少し知恵の働く人間が、デバッグ中に発見したものと推測する。我々が存在を隠している間は、我々に加わることを許可しない。" -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "松の実(テスト)" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "ビターアーモンド(テスト)" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when" -" eaten raw." -msgstr "アーモンドの一種です。ヒドロシアン酸が微量に含まれており、生食すると中毒を起こします。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "幻覚性ナツメグ(テスト)" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "精神作用をもつミリスチシンが多く含まれています。多量に摂取すると厄介な副作用を多数もたらし、幻覚や多幸感を引き起こす可能性があります。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "リンゴ(テスト)" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "テスト用のリンゴです。ミミズが入っているかもしれませんが、美味しいですよ!" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "液体(テスト)" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do" -" not drink!" -msgstr "何からできているのか分かりませんが、液体であることは間違いありません。テスト用ですので、飲まないでください!" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "ワイン(未発酵/テニスボール/テスト)" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "未発酵のテニスボールワインです。テニスボールの搾り汁を煮沸したゴム臭いジュースです。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "ワイン(テニスボール/テスト)" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "テニスボールの搾り汁を発酵させて作る安価な酒です。味の方も概ねそんな感じです。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "チューインガム(テスト)" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "不思議なほど刺激的なブルーベリー味の、喉の渇きを癒すチューインガムです。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "変異した親指(テスト)" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "変異した人間の親指です。考えたくもありませんが、これを食べると突然変異を引き起こす可能性があります。" - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -44279,18 +44517,6 @@ msgstr[0] "アルミ缶" msgid "An aluminum can, like what soda comes in." msgstr "アルミニウムの缶です。炭酸系飲料によく使われています。" -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "開いたアルミ缶" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "炭酸系飲料によく使われている、アルミニウム製の缶です。既に開いており、再密封は容易ではありません。" - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -44299,22 +44525,10 @@ msgstr[0] "密封紙パック" #. ~ Description for {'str': 'paper carton'} #: lang/json/GENERIC_from_json.py msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." +"A half gallon carton constructed of a paper, aluminum, and plastic laminate." " It has a threaded cap for easy resealing." msgstr "紙とアルミニウムをビニールでラミネート加工した紙パックです。キャップが付いているため、簡単に再封できます。" -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "紙パック(2L)" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." -" This one is open and its contents will spoil." -msgstr "紙とアルミニウムをビニールでラミネート加工した、容量2Lの紙パックです。既に一度開封されており、内容物の腐敗が進行します。" - #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" msgid_plural "vacuum-packed bags" @@ -44335,18 +44549,6 @@ msgstr[0] "ブリキ缶S" msgid "A small tin can, like what tuna comes in." msgstr "ツナなどを入れられる、小さなブリキ製の缶です。" -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "開いたブリキ缶S" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "ツナなどを入れられる、小さなブリキ製の缶です。既に開いており、再密封は容易ではありません。" - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -44357,18 +44559,6 @@ msgstr[0] "ブリキ缶M" msgid "A medium tin can, like what soup comes in." msgstr "スープなどを入れられる、中くらいのブリキ製の缶です。" -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "開いたブリキ缶M" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "スープなどを入れられる、中くらいのブリキ製の缶です。既に開いており、再密封は容易ではありません。" - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -44437,16 +44627,6 @@ msgstr[0] "使い捨てカップ" msgid "A small, vacuum formed cup." msgstr "真空成形で作られた小さなカップです。" -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "開いた使い捨てカップ" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "真空成形の小さなカップップです。使い道はなくただのゴミです。" - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -44604,7 +44784,6 @@ msgid_plural "gallon jugs" msgstr[0] "ガロンジャグ(3.75L)" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "牛乳や家庭用洗剤を入れるプラスチック製の容器です。" @@ -44696,7 +44875,6 @@ msgid_plural "small waterskins" msgstr[0] "水筒(1.5L/革)" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of" @@ -44815,18 +44993,6 @@ msgid "" "food." msgstr "豆などを入れられる、大きなブリキ製の缶です。かなりの量の食物を保存できます。" -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "開いたブリキ缶L" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "豆などを入れられる、大きなブリキ製の缶です。既に開いており、再密封は容易ではありません。" - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -45292,6 +45458,33 @@ msgstr[0] "キチンの塊" msgid "A piece of an insect's exoskeleton. It is light and very durable." msgstr "昆虫の外骨格の一部です。軽くて非常に耐久性があります。" +#: lang/json/GENERIC_from_json.py +msgid "strand of endochitin" +msgid_plural "strands of endochitin" +msgstr[0] "体内キチン" + +#. ~ Description for {'str': 'strand of endochitin', 'str_pl': 'strands of +#. endochitin'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of an insect's endoskeleton." +msgstr "昆虫の内骨格の一部です。" + +#: lang/json/GENERIC_from_json.py +msgid "cluster of gas sacs" +msgid_plural "clusters of gas sacs" +msgstr[0] "ガス嚢" + +#. ~ Description for {'str': 'cluster of gas sacs', 'str_pl': 'clusters of gas +#. sacs'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This is a cluster of membranous bubbles, each about the size of a grape, " +"retrieved from inside a mutant insect. They float like tiny helium " +"balloons, and are likely full of a lighter-than-air gas helping the bug to " +"fly." +msgstr "" +"変異した昆虫の体内から取り出した、ブドウほどの大きさの泡状の膜の集合体です。小さなヘリウム風船のように浮いており、空気より軽いガスによって飛翔を補助していると思われます。" + #: lang/json/GENERIC_from_json.py msgid "set of 100 ceramic disk" msgid_plural "ceramic disks" @@ -46442,8 +46635,8 @@ msgid "lotus flower" msgid_plural "lotus flowers" msgstr[0] "スイレンの花" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -47805,6 +47998,16 @@ msgid "" msgstr "" "TX-5LRケルベロスレーザーキャノンから取り外された一本の砲身です。作動に必要な部品がいくつも欠けており、このまま武器として使うことはできません。" +#: lang/json/GENERIC_from_json.py +msgid "bone armor kit" +msgid_plural "bone armor kits" +msgstr[0] "装甲キット(骨)" + +#. ~ Description for {'str': 'bone armor kit'} +#: lang/json/GENERIC_from_json.py +msgid "Bone plating made for a vehicle." +msgstr "車両に取り付けられる、骨で作られた装甲です。" + #: lang/json/GENERIC_from_json.py msgid "module template" msgid_plural "module templates" @@ -51755,8 +51958,8 @@ msgstr[0] "ルツェルンハンマー" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with a spiked hammer head, a spike, and a hook " -"attached to a long stick." -msgstr "尖った金鎚、スパイク、鉤を長い棒の先に取り付けた、多芸な長柄武器です。" +"attached to a beefy wooden pole." +msgstr "尖った金鎚、スパイク、鉤を頑丈な木の棒の先に取り付けた、多芸な長柄武器です。" #. ~ Description for {'str': 'lucerne hammer'} #: lang/json/GENERIC_from_json.py @@ -52112,7 +52315,6 @@ msgid_plural "pointy sticks" msgstr[0] "尖った棒" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "先端を尖らせてある木の棒です。" @@ -52204,15 +52406,15 @@ msgstr[0] "ハルバード" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with an axe blade, a spike, and other fun things" -" attached to a long stick." -msgstr "斧やスパイクなど賑やかなものを長い棒の先に取り付けた、多芸な長柄武器です。" +" attached to a long sturdy stick." +msgstr "斧やスパイクなど賑やかなものを長く頑丈な棒の先に取り付けた、多芸な長柄武器です。" #. ~ Description for {'str': 'halberd'} #: lang/json/GENERIC_from_json.py msgid "" "This is a dull, cheaply made replica of a polearm with an axe blade, a " -"spike, and other fun things attached to a long stick." -msgstr "斧やスパイクなど賑やかなものを長い棒の先に取り付けた、多芸な長柄武器...の安価で刃が鈍いレプリカです。" +"spike, and other fun things attached to a thick pole." +msgstr "斧やスパイクなど賑やかなものを頑丈な棒の先に取り付けた、多芸な長柄武器...の安価で刃が鈍いレプリカです。" #: lang/json/GENERIC_from_json.py msgid "glaive" @@ -52782,18 +52984,6 @@ msgid "" "from India designed to be concealed under and against the palm." msgstr "バグナクや鉄の前足とも呼ばれる、インド発祥の小さな鉤爪上の刃です。手のひらで握りこむようにして使うようになっています。" -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "セスタス" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "拳の位置に金属板を組み込んだ、革製のハンドラップです。パンチ力と防御力が向上します。" - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -53026,7 +53216,6 @@ msgid_plural "pipes" msgstr[0] "パイプ" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -53223,7 +53412,12 @@ msgid "" "been used for commercial wrapping or for weather-sealing a home." msgstr "商業用の包装や家の雨漏りを防ぐ用途で使われていたような、重く大きなビニールシートです。" -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "硬質プラスチック板" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -53281,14 +53475,15 @@ msgstr "長さ約2.4m、太さ約5cmほどの、真っ直ぐな木の枝です #: lang/json/GENERIC_from_json.py msgid "long pole" msgid_plural "long poles" -msgstr[0] "長竿" +msgstr[0] "10フィートの棒" #. ~ Description for {'str': 'long pole'} #: lang/json/GENERIC_from_json.py msgid "" "A stout, ten-foot pole. Could be used similarly to a spear. The Cataclysm " "gives fresh meaning to walking softly and carrying a big stick." -msgstr "長さ約3mの頑丈な棒です。槍のように遠距離から攻撃できます。大変動の到来によって、忍び歩きや長竿が新たに脚光を浴びることになりました。" +msgstr "" +"長さ約3mの頑丈な棒です。槍のように遠距離から攻撃できます。大変動の到来によって、忍び歩きや10フィート棒が新たに脚光を浴びることになりました。" #: lang/json/GENERIC_from_json.py msgid "plank" @@ -54090,9 +54285,9 @@ msgstr[0] "簡易ハルバード" #. ~ Description for {'str': 'makeshift glaive'} #: lang/json/GENERIC_from_json.py msgid "" -"This is a large blade attached to a long stick. It could do a considerable " -"amount of damage." -msgstr "長い棒に大型の刃を取り付けた武器です。かなりの攻撃力があります。" +"This is a large blade attached to a stout section of tree branch. It could " +"do a considerable amount of damage." +msgstr "木の棒の先端に大型の刃を取り付けた武器です。かなりの攻撃力があります。" #: lang/json/GENERIC_from_json.py msgid "mind splicer kit" @@ -54250,6 +54445,21 @@ msgstr[0] "ホッチキス" msgid "A stapler for fastening sheets of paper together." msgstr "紙をまとめて固定するための道具です。" +#: lang/json/GENERIC_from_json.py +msgid "hole puncher" +msgid_plural "hole punchers" +msgstr[0] "穴開けパンチ" + +#. ~ Description for {'str': 'hole puncher'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This metal tool can help you punch a single hole in a piece of paper. I " +"mean, you could do more if you wanted, but you'd have to do them one at a " +"time. Or, if you really wanted more holes with one punch, I suppose you " +"could fold the paper… This is a one cylinder hole puncher." +msgstr "" +"この金属製の道具を使えば、紙束に穴を一つ開けられます。地道に一つずつ開け続ければ、複数の穴も開けられます。もし一回の使用で穴をたくさん開けたいなら、紙を折れば不可能ではありませんが...とにかく、これは1穴パンチです。" + #: lang/json/GENERIC_from_json.py msgid "pen" msgid_plural "pens" @@ -54494,6 +54704,19 @@ msgid "" "until it floats. Then attach oars or a motor to get the boat to move." msgstr "水に浮く性質をもつ、木製の船体です。車両が十分な浮力を得るまで船体を取り付け、オールまたはモーターを取り付ければボートが動きます。" +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "船体(丸太)" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" +"水に浮く性質をもつ、丸太を繋げて作った船体です。車両が十分な浮力を得るまで船体を取り付け、オールまたはモーターを取り付ければボートが動きます。" + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -55357,7 +55580,6 @@ msgid_plural "sheet metal" msgstr[0] "板金" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "金属製の薄板です。" @@ -55466,16 +55688,6 @@ msgstr[0] "装甲キット(シリコンキチン)" msgid "Durable silica-coated chitin plating made for a vehicle." msgstr "車両に取り付けられる、シリコン化したキチン質で作られた耐久性の高い装甲です。" -#: lang/json/GENERIC_from_json.py -msgid "bone armor kit" -msgid_plural "bone armor kits" -msgstr[0] "装甲キット(骨)" - -#. ~ Description for {'str': 'bone armor kit'} -#: lang/json/GENERIC_from_json.py -msgid "Bone plating made for a vehicle." -msgstr "車両に取り付けられる、骨で作られた装甲です。" - #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "shredder" msgid_plural "shredders" @@ -55731,8 +55943,8 @@ msgid "workbench" msgid_plural "workbenches" msgstr[0] "作業台" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and" @@ -56481,6 +56693,17 @@ msgstr[0] "非因果的論理演算装置" msgid "It has given you an answer, but you are yet to ask anything." msgstr "あらゆる問いに答えてくれますが、まだ何も問うていません。" +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "メタマテリアル生地" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "複雑に織られた、虹色の光沢を放つ緻密な作りの生地です。" + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -56567,9 +56790,21 @@ msgstr[0] "超電導電磁石" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." +msgid "A powerful electromagnet made from a room temperature superconductor." msgstr "常温超伝導体から作られた強力な電磁石です。" +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "磁性流体ダイナモ" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." +msgstr "様々なフラクタル模様に刻々と変化する黒色の流体金属です。" + #: lang/json/GENERIC_from_json.py msgid "composite alloy" msgid_plural "composite alloys" @@ -57155,6 +57390,16 @@ msgid "" "battles is bookmarked." msgstr "古代ハイリア人の伝承や物語を集めた書物です。歴史的な戦いの章には栞が挟んであります。" +#: lang/json/GENERIC_from_json.py +msgid "Stormguard Warrior" +msgid_plural "Stormguard Warrior" +msgstr[0] "本(武術/ストームガードの戦士)" + +#. ~ Description for {'str_sp': 'Stormguard Warrior'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Iron Heart discipline." +msgstr "この本には「鋼の心」の訓練法が書かれています。" + #: lang/json/GENERIC_from_json.py msgid "The Life and Work of Tiger Sauer" msgid_plural "The Life and Work of Tiger Sauer" @@ -57167,6 +57412,61 @@ msgid "" "art." msgstr "サイボーグ格闘術創始者の哲学と技術について詳しく記した伝記です。" +#: lang/json/GENERIC_from_json.py +msgid "Pocket Monster Encyclopedia" +msgid_plural "Pocket Monster Encyclopedia" +msgstr[0] "本(武術/ポケットモンスター大百科)" + +#. ~ Description for {'str_sp': 'Pocket Monster Encyclopedia'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This encyclopedia contains a detailed listing of the strengths and " +"techniques of various fictional monsters and how to apply them the in a real" +" fight." +msgstr "様々な架空のモンスターの強さと技、それらの実戦での使い方が、詳細なリスト形式で記されています。" + +#: lang/json/GENERIC_from_json.py +msgid "Distant Horizon" +msgid_plural "Distant Horizon" +msgstr[0] "本(武術/遠い地平線)" + +#. ~ Description for {'str_sp': 'Distant Horizon'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Setting Sun discipline." +msgstr "この本には「落陽」の訓練法が書かれています。" + +#: lang/json/GENERIC_from_json.py +msgid "Jedi Holocrons: Form I" +msgid_plural "Jedi Holocrons: Form I" +msgstr[0] "ジェダイ・ホロクロン(フォームI)" + +#. ~ Description for {'str_sp': 'Jedi Holocrons: Form I'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This device contains the teachings of the first form of Jedi lightsaber " +"combat: Shii-Cho." +msgstr "この装置は、ジェダイのライトセーバー戦闘型の一つ、シャイ=チョーの訓練法を映し出します。" + +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "本(武術/花崗岩の欠片)" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "この本には「石竜」の訓練法が書かれています。" + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "本(武術/斬り捨てる鉤爪)" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "この本には「虎の爪」の訓練法が書かれています。" + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -57187,7 +57487,7 @@ msgstr[0] "光粉" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." msgstr "実体化したウィルオウィスプが残した粉です。今もなお超自然の光を放っているようです。" @@ -57306,7 +57606,7 @@ msgstr[0] "マナダスト" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." +"Crystalized mana in powdered form. It faintly pulses with arcane energy." msgstr "結晶化したマナが粉末状になったものです。魔法のエネルギーによってかすかに明滅しています。" #: lang/json/GENERIC_from_json.py @@ -58559,126 +58859,6 @@ msgid "" "much more expensive." msgstr "オリハルコン製のフレームです。鋼鉄よりもはるかに頑丈ですが、価格も桁違いです。" -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "木材(テスト)" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional" -" lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "2×4材に近い寸法の、幅が狭く分厚い木製の板です。まともな近接武器として使えますが、様々な建設の資材にもなります。" - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "パイプ(テスト)" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "板金(テスト)" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "ガロンジャグ(3.75L)(テスト)" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "水筒(1.5L/革)(テスト)" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "風船(テスト)" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "伸縮性と水密性があり気密性が高い、完璧なテスト用風船です。" - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "尖った棒(テスト)" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "不格好な剣(テスト)" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "テスト用の不格好な剣です。" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "普通の剣(テスト)" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "テスト用の剣です。" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "素晴らしい剣(テスト)" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "テスト用の素晴らしい剣です。" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "箱(テスト)" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "比率が確定していない、シンプルな容積1Lの段ボール箱です。" - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "14cm棒(テスト)" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "長さがちょうど14cmの細い棒です。" - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "15cm棒(テスト)" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "長さがちょうど15cmの細い棒です。" - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "アトミックコーヒーサーバー(テスト)" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "アトミック飲料の放射性を保つよう設計された、テスト用のコーヒーサーバーです。" - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "銃器" @@ -61781,28 +61961,6 @@ msgid "" "tips." msgstr "杖に取り付けられる特殊な小型のマナクリスタルです。" -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "乾電池(テスト)" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test -#. disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "テスト用の乾電池です。" - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "充電式バッテリー(テスト)" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test -#. rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "充電できるかもしれないテスト用バッテリーです。" - #: lang/json/MOD_INFO_from_json.py src/color.cpp src/color.cpp msgid "default" msgstr "初期設定" @@ -61818,8 +61976,12 @@ msgstr "コア - Aftershock" #. ~ Description for Aftershock #: lang/json/MOD_INFO_from_json.py -msgid "Drifts the game away from realism and more towards sci-fi." -msgstr "非現実的でよりSFらしい要素を追加します。" +msgid "" +"Drifts the game away from realism and more towards sci-fi. Long term goal " +"of being a significantly different experience that remains compatible with " +"other mods." +msgstr "" +"リアリズムを逸脱した、よりSFらしい方向性の要素を追加します。他のMODとの互換性を維持しつつゲーム性を大幅に変えることを長期的な目標としています。" #: lang/json/MOD_INFO_from_json.py msgid "Blaze Industries" @@ -61860,9 +62022,11 @@ msgstr "追加 - Dark Skies Above" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" -msgstr "CataclysmをXCOM2風のエイリアンに占領された世界へ完全に変更します。他のMODとの併用は自己責任で行ってください。" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." +msgstr "" +"異星人に関連する職業やシナリオを追加し、世界を大幅に変更するMODです。他のMODで追加される要素を打ち消す可能性があります!自己責任で導入してください。" #: lang/json/MOD_INFO_from_json.py msgid "DinoMod" @@ -62067,16 +62231,6 @@ msgstr "変更 - スキルと連動した能力成長" msgid "Allows stats to raise via skill progression." msgstr "スキルレベルが上昇すると能力値も上昇するようになります。" -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "追加 - テストデータ" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "自動化テストで使う疑似アイテムやレシピ、その他のコンテンツを追加します。" - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "追加 - 市街地" @@ -63889,6 +64043,16 @@ msgid "" "about rapidly and the mouths form a chorus of groaning screams." msgstr "人間と他の生き物の体が腐り結合したような、肉の怪物です。頭部にある複数の目はせわしなく動き、複数の口が呻きと叫びの大合唱を奏でています。" +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "人間" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "人間の死体の疑似アイテムです。このアイテムが見えている場合はバグが発生しています。" + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -65863,6 +66027,18 @@ msgstr "大きく育った華やかな異界のシダ植物です。唸るよう msgid "Lightning arcs from the leech stalk!" msgstr "異界植物から電撃が放出されました!" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "シグナルツリー" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "幹は天高くそびえ、最上部の枝が黄色く輝いています。低い太鼓のような音が鳴り響いています。" + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -66430,6 +66606,91 @@ msgid "" msgstr "" "Uncanny社の最初の製品である、優しい顔でたたずむ4本腕の人型ロボットです。その容貌は驚くほど細部まで作りこまれていますが、手触りは硬く不快です。世界が崩壊しても支援すべき患者を探し続けています。" +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "フェラル・ゾンビピューマ" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" +"このピューマの目には生気がなく、毛皮は引き裂かれボロボロに傷付き、黒い液体が滲み出ています。爪と牙がまるで鋭く尖ったスパイクのように不自然に伸びています。" + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "スケルトンベア" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo" +" seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" +"腐った皮膚が剥がれ落ち、代わりに骨が過成長して天然の鎧になったクマのゾンビです。身体がパキパキと気味の悪い音を立てて震えるたびに、関節から黒い粘液が大量に漏れ出しています。" + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "冥暗ゾンビピューマ" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" +"この不気味な化け物の周りには影が立ち込めており、まるで光が届くのを拒絶しているかのようです。フラフラと歩く大きなネコのぼんやりとした形がかろうじて認識できます。" + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "強酸ゾンビクマ" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "毛皮がまだらに抜けた、色素の薄いクマのゾンビです。べとついた皮膚は薄く、その下の血管を黄色い液体が流れているのがはっきりと確認できます。" + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "凶暴ゾンビヘラジカ" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" +"このヘラジカの目からは黒い粘性の液体が滲み出ており、身体は引き裂かれてボロボロです。発達した全身の筋肉と化膿で膨れ上がった傷口によって、非常に大柄に見えます。" + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "棘状ゾンビヘラジカ" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" +"長く艶のない毛皮に身を包んだ、大きなヘラジカのゾンビです。茨のような蔦が体内から伸び、毛皮と絡み合っています。角は長い棘で覆われており、神秘的な銀色の液体が滴っています。" + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -68950,6 +69211,18 @@ msgid "" " emerge." msgstr "サイに似た強大な恐竜です。盾のような硬質のとさかと3本の大きな角が特徴です。" +#: lang/json/MONSTER_from_json.py +msgid "Triceratops bio-operator" +msgid_plural "Triceratops bio-operator" +msgstr[0] "改造トリケラトプス兵" + +#. ~ Description for {'str_sp': 'Triceratops bio-operator'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive three-horned four-legged dinosaur dotted with crackling bionics. " +"The horns glow menacingly." +msgstr "生体部品がパチパチと音を立てて明滅している、巨大な3本角をもつ四足歩行の恐竜です。角は威嚇的に光っています。" + #: lang/json/MONSTER_from_json.py msgid "Stegosaurus" msgid_plural "Stegosaurus" @@ -68973,6 +69246,18 @@ msgid "" "massive spiked club of bone." msgstr "巨大なアルマジロといった風体の恐竜です。尾の先端が棘付き棍棒になっています。" +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus" +msgid_plural "Apatosaurus" +msgstr[0] "アパトサウルス" + +#. ~ Description for {'str_sp': 'Apatosaurus'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur with a long, whip-like tail. The" +" head is upright and the neck looks like it would make a good strong club." +msgstr "長い首と鞭のように伸びた尻尾をもつ、巨大な四足歩行の恐竜です。頭は高い位置にあり、首は頑丈な打撃武器になりそうです。" + #: lang/json/MONSTER_from_json.py msgid "Ceratosaurus" msgid_plural "Ceratosaurus" @@ -69037,7 +69322,7 @@ msgstr "羽毛を持つ中型の二足歩行恐竜です。両足の先端に鎌 #: lang/json/MONSTER_from_json.py msgid "Deinonychus bio-operator" msgid_plural "Deinonychus bio-operator" -msgstr[0] "改造デイノニクス" +msgstr[0] "改造デイノニクス兵" #. ~ Description for {'str_sp': 'Deinonychus bio-operator'} #: lang/json/MONSTER_from_json.py @@ -69171,6 +69456,111 @@ msgid "magenta and green hatchling" msgid_plural "magenta and green hatchlings" msgstr[0] "恐竜幼体(赤紫色&緑色)" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "真菌ゾンビスピノサウルス" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" +"かつては背中に帆を背負った巨大なワニ頭の肉食恐竜でしたが、今や真菌の糸が口や目など全身のあらゆる穴から飛び出し、カビが生えたただの巨大な肉塊と化しています。" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "真菌ゾンビティラノサウルス" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "かつては恐竜の王でしたが、今や真菌の糸が口や目など全身のあらゆる穴から飛び出し、カビが生えたただの巨大な肉塊と化しています。" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "真菌ゾンビデイノニクス" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" +"かつては羽毛が生えた中型の肉食恐竜でしたが、今や真菌の糸が口や目など全身のあらゆる穴から飛び出し、カビが生えたただの巨大な肉塊と化しています。" + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "ゾンビガリミムス" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "ボロボロの羽毛と酷く臭う黒い液体で覆われた、フラフラと歩く中型二足歩行恐竜のゾンビです。" + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "ゾンビパキケファロサウルス" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" +"ボロボロの羽毛と酷く臭う黒い液体で覆われた、フラフラと歩く中型二足歩行恐竜のゾンビです。ダチョウのように硬そうな丸いドーム型の頭部が特徴です。" + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "ゾンビカンプトサウルス" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs," +" broad shoulders and a pointed beak. Its tattered feathers are stained with" +" black, sticky liquid." +msgstr "頑丈な足と幅広い肩、尖った嘴が特徴的な、羽毛が生えた大型の二足歩行恐竜ゾンビです。ボロボロの羽毛は黒い粘液で汚れています。" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus zombie" +msgid_plural "Spinosaurus zombies" +msgstr[0] "ゾンビスピノサウルス" + +#. ~ Description for {'str': 'Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Enormous putrid dinosaur corpse with a ferocious crocodile-like head, oozing" +" black eyes, and a tattered sail on its back." +msgstr "瞳から黒い液体が滲み出ている、ボロボロの帆を背負ったワニのような獰猛な顔つきのゾンビ恐竜です。" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "冥暗ゾンビスピノサウルス" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "ボロボロの帆を背負った巨大な二足歩行恐竜です。頭部は細長く、口が尖っています。不気味な影に包まれており、輪郭がぼやけています。" + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -69182,11 +69572,124 @@ msgid "Massive piles of ragged, stinking flesh lifting enormous teeth." msgstr "巨大な牙が生えた、悪臭を放つ傷だらけの筋肉の塊です。" #: lang/json/MONSTER_from_json.py -msgid "Z-Deinonychus" -msgid_plural "Z-Deinonychus" +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "冥暗ゾンビティラノサウルス" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with feathery edges. The head looks big, lots of big" +" teeth would fit in it." +msgstr "羽毛が生えた巨大な二足歩行恐竜のゾンビです。頭部は大きく、口元から鋭い歯列が覗いています。不気味な影に包まれており、輪郭がぼやけています。" + +#: lang/json/MONSTER_from_json.py +msgid "S-Rex" +msgid_plural "S-Rexes" +msgstr[0] "スケルトンティラノサウルス" + +#. ~ Description for {'str': 'S-Rex', 'str_pl': 'S-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Monstrous columns of dense bone lifting enormous sharp pointed teeth " +"dripping with black goo." +msgstr "黒い粘液が滴る大きな尖った歯を見せつけている、巨大な骨の集合体です。" + +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" +msgstr[0] "ゾンビアルバートサウルス" + +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "鋭い爪を生やした脚を引きずって歩く巨大な恐竜のゾンビです。立派な顎から黒い液体が垂れています。" + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "ゾンビトリケラトプス" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "サイに似た強大な恐竜のゾンビです。盾のような硬質のとさかと3本の大きな角が特徴です。目元に黒い液体が涙のように滲んでいます。" + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "ゾンビステゴサウルス" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" +"背中に大きな骨質の板がいくつも生えた、動きの鈍い大型の四足歩行恐竜です。脚を引きずっていますが、棘の生えた尻尾を生前よりも激しく振り回しています。" + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" +msgstr[0] "ゾンビアンキロサウルス" + +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "剥がれかけた装甲と黒く光る目をもつ、巨大なアルマジロといった風体の恐竜のゾンビです。尾の先端が棘付き棍棒になっています。" + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" +msgstr[0] "ゾンビアパトサウルス" + +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "長い首と鞭のように伸びた尻尾をもつ、巨大な四足歩行の恐竜のゾンビです。頭は高い位置にあり、首は頑丈な打撃武器になりそうです。" + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "ゾンビドラゴン" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "全身を鱗と骨の棘で覆った、恐ろしいスピードで動く巨大なゾンビドラゴンです。色鮮やかな角は摩耗して不潔に汚れており、鱗と棘も損傷しています。" + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "ゾンビアロサウルス" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "大型の捕食性二足歩行恐竜のゾンビです。鱗が生えた広い背中に虎のような縞模様があります。" + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus zombie" +msgid_plural "Deinonychus zombies" msgstr[0] "ゾンビデイノニクス" -#. ~ Description for {'str_sp': 'Z-Deinonychus'} +#. ~ Description for {'str': 'Deinonychus zombie'} #: lang/json/MONSTER_from_json.py msgid "" "The shuffling corpse of a medium-sized bipedal dinosaur covered with " @@ -69194,6 +69697,70 @@ msgid "" "sickle-like claw." msgstr "ボロボロの羽毛と酷く臭う黒い液体で覆われた、フラフラと歩く中型二足歩行恐竜のゾンビです。両足から生えた鎌のような爪を振り回しています。" +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "冥暗ゾンビデイノニクス" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" +"羽毛が生えた中型の二足歩行恐竜のゾンビです。両足から生えた大鎌のような爪を振り回しています。不気味な影に包まれており、輪郭がぼやけています。" + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "ゾンビユタラプトル" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms," +" a long tail, and long sharp scythe-like claws." +msgstr "羽毛に覆われた腕、長い尾、大鎌のような鉤爪を持つ大型二足歩行恐竜のゾンビです。フラフラと動きまわり、時折飛び跳ねています。" + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "ゾンビパラサウロロフス" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "まだら模様と棒状のとさかを持つ大型恐竜です。死後も動き続けており、目玉を失った目蓋が腫れています。" + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "ゾンビディモルフォドン" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "体長約90cm程度の、羽毛がボロボロになった飛行爬虫類のゾンビです。短い翼と大きく色鮮やかなくちばしを持っています。" + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "ゾンビディロフォサウルス" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent" +" bony crests on its head with ragged strips of ripped flesh hanging down " +"like a frill." +msgstr "" +"脚を引きずって歩く中型恐竜のゾンビです。鋭い牙が生えており、頭部には特徴的な2つの頭骨があります。傷ついた身体から肉片がフリルのように垂れ下がっています。" + #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" msgid_plural "improvised SMG turrets" @@ -69910,18 +70477,6 @@ msgstr "" "レイセオン-" "12Nのレベル10建設工兵モデルです。1体につき兵士1人を補助する役割を持つレイセオンシリーズは、従来の軍隊と問題なく統合できるよう設計されています。" -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "トイレットペーパーミイラ" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper -#. mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "人型のようにも見える、トイレットペーパーのようなものを巻き付けた怪物です。。" - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -70281,19 +70836,6 @@ msgid "" "chitin fitted to a thin mesh. You could put this on a friendly horse." msgstr "デーモンキチンのメッシュ素材で自作した、それぞれクリニエール、ペイトレール、クルーピエと呼ばれる馬鎧です。友好的なウマに装着できます。" -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "ニャワーアーマー" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "" -"保護用フードとチェストプレートが付いた、軽く滑らかなケブラー製のネコ用ハーネスです。背面には非常に小さく役に立たないマジックテープ付きポケットがあります。" - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "哺乳類" @@ -71038,6 +71580,22 @@ msgstr "頭蓋爆弾発動" msgid "This fake spell occurs on cranial bomb activation. Likely fatal." msgstr "頭蓋爆弾発動に使われる疑似呪文です。致命的なダメージを与えます。" +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "気絶攻撃(超能力)" @@ -71440,8 +71998,8 @@ msgstr "指定位置から全てのオブジェクトを押し出します。" msgid "Debug Full Protection" msgstr "完全防御(デバッグ専用)" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "あらゆるものから害されることがなくなります。" @@ -71934,10 +72492,10 @@ msgstr "4体のデーモンスパイダー(幼体)を召喚します。" msgid "Jolt" msgstr "ジョルト" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py lang/json/mutation_category_from_json.py msgid "a crackle" msgstr "パシッ。" @@ -72006,6 +72564,31 @@ msgstr "閃光効果を追加します。" msgid "Wall of Fog" msgstr "ウォール・オブ・フォグ" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "リペリング・アークオーラ付与(副次効果)" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "リペリング・アークの副次的効果です。" + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "電撃が弧を描いて翻りました!" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "リペリング・アーク" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "パチパチと音を立てるオーラで全身を包み、悪意ある攻撃者を電撃で迎え撃ちます。" + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "ブレス" @@ -72118,66 +72701,38 @@ msgstr "内なるレイラインを使ってCBM用の電力を過充電し、顔 msgid "X-ray Vision" msgstr "エックスレイ・ビジョン" -#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py -msgid "Mana Siphon" -msgstr "マナ・サイフォン" - -#. ~ Description for Mana Siphon -#: lang/json/SPELL_from_json.py -msgid "" -"This is the spell portion of the mana siphon series of mutations. If you " -"have this spell you probably debugged it in." -msgstr "マナ・サイフォン系列の突然変異の呪文効果です。デバッグ中でなければ、この呪文は習得できません。" - -#: lang/json/SPELL_from_json.py -msgid "Pew, Pew" -msgstr "ビビビビ" - -#. ~ Description for Pew, Pew -#: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." -msgstr "標的を指差して「ビビビビ」と音を立てました。" - #: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "ザ・フロア・イズ・ラヴァ" +msgid "Knock" +msgstr "ノック" -#. ~ Description for The Floor is Lava +#. ~ Description for Knock #: lang/json/SPELL_from_json.py msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" -msgstr "床が溶岩になっています!上に登れる椅子やカウンターを探した方が良さそうですね。" +"You channel magic into a force capable of opening doors. This variant can " +"only open wooden doors." +msgstr "鍵がかかったドアを開ける魔法です。木製のドアにしか通用しません。" #: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" -msgstr "スポーツ・トレイニング・モンタージュ" +msgid "Improved Knock" +msgstr "インプローブド・ノック" -#. ~ Description for Sports Training Montage +#. ~ Description for Improved Knock #: lang/json/SPELL_from_json.py msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." -msgstr "すごく長い時間がかかることをあっという間にこなして見せる、それがモンタージュ。" +"You channel magic into a force capable of opening doors. This variant can " +"open any locked door." +msgstr "鍵がかかったドアを開ける魔法です。あらゆるドアに通用します。" -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "キス・ジ・アウィー" - -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." -msgstr "かつて母親にしてもらったような、痛みを消す優しいキスをします。" - -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" -msgstr "サモン・マミー" +#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py +msgid "Mana Siphon" +msgstr "マナ・サイフォン" -#. ~ Description for Summon Mummy +#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." -msgstr "心の中の掃除用具入れから、トイレットペーパーの怪物を呼び出します。" +"This is the spell portion of the mana siphon series of mutations. If you " +"have this spell you probably debugged it in." +msgstr "マナ・サイフォン系列の突然変異の呪文効果です。デバッグ中でなければ、この呪文は習得できません。" #: lang/json/TOOLMOD_from_json.py msgid "reactor core expansion device" @@ -74481,25 +75036,30 @@ msgid "" msgstr "雷の神トールが身に着けていた魔法の帯、またはそのレプリカです。着用者の基礎筋力が2倍になります。" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" -msgstr[0] "魔法の腰袋" - -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser -#. Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater -#. Girdles of Pockets'} +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" +msgstr[0] "" + +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." -msgstr "腰に巻き付ける幅の広い帯です。収納した物の重量が大幅に軽減される小さな袋が多数付いています。" +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." +msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" -msgstr[0] "魔法の大容量腰袋" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" +msgstr[0] "" + +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" @@ -78939,13 +79499,11 @@ msgstr[0] "スマートフォン" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "ライトアプリを有効化しました。" #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "スマートフォンの充電が足りません。" @@ -80284,7 +80842,6 @@ msgid_plural "fire axes" msgstr[0] "消火斧" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -80297,7 +80854,6 @@ msgid_plural "Halligan bars" msgstr[0] "ハリガンバール" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -80522,6 +81078,28 @@ msgid "" "shovel but really can't compare to a real shovel." msgstr "平らな石に木を添えたシャベルの代用品です。" +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "熊手(金属)" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "収穫祭の必需品、丈夫な金属製の熊手です。" + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "熊手(プラスチック)" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than" +" raking leaves." +msgstr "安っぽいプラスチック製の熊手です。落ち葉を掬う以外の用途に使うとすぐに壊れてしまいます。" + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -80545,6 +81123,26 @@ msgstr[0] "シャベル" msgid "This is a digging tool. Use it to dig pits adjacent to your location." msgstr "掘削するための道具です。使用すると隣接する地形に穴を掘ります。" +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "雪かきシャベル" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "雪かきに使う頑丈なシャベルです。" + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "雪かきシャベル(プラスチック)" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "雪かきに使う安っぽいプラスチック製のシャベルです。" + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -81253,6 +81851,11 @@ msgid "" "the right tools, you could use this for metalworking." msgstr "炭を燃やして使う、携帯型の鍛造炉です。適切な道具と組み合わせれば、この炉で金属加工ができます。" +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "岩石炉" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -81380,6 +81983,17 @@ msgid "" "metalworking fabrication recipes." msgstr "金属製の長いトングです。料理や金属加工に使います。" +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "紙やすり" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "ざらざらとした紙です。金属加工や大工仕事でよく使われます。" + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -81529,6 +82143,18 @@ msgid "" "and place on the ground." msgstr "丸めて畳んである毛皮のベッドロールです。断熱効果があり、床に敷いておくと寝心地が良くなります。使用すると地面に広げます。" +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "散水ホース" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "柔軟性が高い散水ホースです。短く切れば、何かの製作材料にしたり、車両の燃料を吸い上げたりと、色々な使い方ができそうです。" + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -83280,7 +83906,6 @@ msgid_plural "rags" msgstr[0] "布" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -83693,11 +84318,11 @@ msgid "" msgstr "電動チェーンソーは大きな騒音を立てて動いています。使用すると電源を切ります。" #: lang/json/TOOL_from_json.py -msgid "stone hand axe" -msgid_plural "stone hand axes" -msgstr[0] "手斧(石)" +msgid "stone axe head" +msgid_plural "stone axe heads" +msgstr[0] "斧頭(石)" -#. ~ Description for {'str': 'stone hand axe'} +#. ~ Description for {'str': 'stone axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a broad piece of stone with an edge narrow enough to roughly chop " @@ -83705,11 +84330,11 @@ msgid "" msgstr "木をなんとか伐採できる程度には鋭い、幅の狭い石器です。" #: lang/json/TOOL_from_json.py -msgid "metal hand axe" -msgid_plural "metal hand axes" -msgstr[0] "手斧(金属)" +msgid "metal axe head" +msgid_plural "metal axe heads" +msgstr[0] "斧頭(金属)" -#. ~ Description for {'str': 'metal hand axe'} +#. ~ Description for {'str': 'metal axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a chunk of steel with one edge hammered down to something resembling" @@ -83825,6 +84450,11 @@ msgid "" "but you could use it to fire anything made of clay." msgstr "炭を燃やして使う携帯型の窯です。レンガを焼成するためのものですが、粘土で作ったものを焼くこともできます。" +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "窯" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -83973,7 +84603,6 @@ msgid_plural "scissor jacks" msgstr[0] "シザースジャッキ" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "車両を持ち上げる際に使う、小型のシザースジャッキです。" @@ -84187,7 +84816,6 @@ msgid_plural "screwdrivers" msgstr[0] "ドライバー" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -84226,7 +84854,6 @@ msgid_plural "soldering irons" msgstr[0] "はんだごて" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -84610,16 +85237,16 @@ msgid "" " towards enemy targets and highlight them with a powerful spotlight." msgstr "停止中の追跡ロボットです。展開に成功すると敵目がけて飛び立ち、強力なスポットライトで照らします。" -#: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" -msgstr[0] "精密はんだ付け装置" - #: lang/json/TOOL_from_json.py msgid "pseudo atomic butter churn" msgid_plural "pseudo atomic butter churns" msgstr[0] "アトミックバター撹拌機" +#: lang/json/TOOL_from_json.py +msgid "precision solderers" +msgid_plural "precision solderers" +msgstr[0] "精密はんだ付け装置" + #: lang/json/TOOL_from_json.py msgid "atomic smartphone" msgid_plural "atomic smartphones" @@ -84807,6 +85434,21 @@ msgid "" msgstr "" "非常に小さな工具と暗号化されたデジタルキーのセットです。一般的には、臨床現場でCBMを修理する際に使います。単純な作りのCBMであれば分解も可能ですが、より複雑なものは更に専門的な工具が必要です。" +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "CBMツールキット" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" +"非常に小さなロボットツールと暗号化されたデジタルキーがセットになったものです。元々は工場生産されたCBMを分解して品質をテストするために使う道具です。高度な技術と忍耐力をもつエンジニアなら、これを使ってCBMを一から手作業で組み立てることも可能です。" + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -85631,6 +86273,60 @@ msgid "greater wand of cone of cold" msgid_plural "greater wands of cone of cold" msgstr[0] "上級杖(コーン・オブ・コールド)" +#: lang/json/TOOL_from_json.py +msgid "minor wand of knock" +msgid_plural "minor wands of knock" +msgstr[0] "下級杖(ノック)" + +#. ~ Description for {'str': 'minor wand of knock', 'str_pl': 'minor wands of +#. knock'} +#. ~ Description for {'str': 'lesser wand of knock', 'str_pl': 'lesser wands +#. of knock'} +#. ~ Description for {'str': 'greater wand of knock', 'str_pl': 'greater wands +#. of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts knock." +msgstr "マナクリスタルを嵌め込むソケットが付いた、細長い木製の杖です。この杖を使用するとノックを詠唱できます。" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of knock" +msgid_plural "lesser wands of knock" +msgstr[0] "中級杖(ノック)" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of knock" +msgid_plural "greater wands of knock" +msgstr[0] "上級杖(ノック)" + +#: lang/json/TOOL_from_json.py +msgid "minor wand of improved knock" +msgid_plural "minor wands of improved knock" +msgstr[0] "下級杖(インプローブド・ノック)" + +#. ~ Description for {'str': 'minor wand of improved knock', 'str_pl': 'minor +#. wands of improved knock'} +#. ~ Description for {'str': 'lesser wand of improved knock', 'str_pl': +#. 'lesser wands of improved knock'} +#. ~ Description for {'str': 'greater wand of improved knock', 'str_pl': +#. 'greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts improved knock." +msgstr "マナクリスタルを嵌め込むソケットが付いた、細長い木製の杖です。この杖を使用するとインプローブド・ノックを詠唱できます。" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of improved knock" +msgid_plural "lesser wands of improved knock" +msgstr[0] "中級杖(インプローブド・ノック)" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of improved knock" +msgid_plural "greater wands of improved knock" +msgstr[0] "上級杖(インプローブド・ノック)" + #: lang/json/TOOL_from_json.py msgid "disposable minor wand of magic missile" msgid_plural "disposable minor wands of magic missile" @@ -85793,6 +86489,60 @@ msgid "disposable greater wand of cone of cold" msgid_plural "disposable greater wands of cone of cold" msgstr[0] "上級杖(コーン・オブ・コールド/起動)" +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of knock" +msgid_plural "disposable minor wands of knock" +msgstr[0] "下級杖(ノック/起動)" + +#. ~ Description for {'str': 'disposable minor wand of knock', 'str_pl': +#. 'disposable minor wands of knock'} +#. ~ Description for {'str': 'disposable lesser wand of knock', 'str_pl': +#. 'disposable lesser wands of knock'} +#. ~ Description for {'str': 'disposable greater wand of knock', 'str_pl': +#. 'disposable greater wands of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts knock." +msgstr "マナクリスタルが埋め込まれた細長い木製の杖です。この杖を使用するとノックを詠唱できます。" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of knock" +msgid_plural "disposable lesser wands of knock" +msgstr[0] "中級杖(ノック/起動)" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of knock" +msgid_plural "disposable greater wands of knock" +msgstr[0] "上級杖(ノック/起動)" + +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of improved knock" +msgid_plural "disposable minor wands of improved knock" +msgstr[0] "下級杖(インプローブド・ノック/起動)" + +#. ~ Description for {'str': 'disposable minor wand of improved knock', +#. 'str_pl': 'disposable minor wands of improved knock'} +#. ~ Description for {'str': 'disposable lesser wand of improved knock', +#. 'str_pl': 'disposable lesser wands of improved knock'} +#. ~ Description for {'str': 'disposable greater wand of improved knock', +#. 'str_pl': 'disposable greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts improved knock." +msgstr "マナクリスタルが埋め込まれた細長い木製の杖です。この杖を使用するとインプローブド・ノックを詠唱できます。" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of improved knock" +msgid_plural "disposable lesser wands of improved knock" +msgstr[0] "中級杖(インプローブド・ノック/起動)" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of improved knock" +msgid_plural "disposable greater wands of improved knock" +msgstr[0] "上級杖(インプローブド・ノック/起動)" + #: lang/json/TOOL_from_json.py msgid "finger firelighter" msgid_plural "finger firelighters" @@ -85922,66 +86672,6 @@ msgid "" msgstr "" "魔法の金属を溶かして加工しやすい鋳塊にするための、携帯できる高性能な炉です。デーモンスパイダーのキチンを使って魔術的な強化が施されています。" -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "布(テスト)" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "ハリガンバール(テスト)" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "消火斧(テスト)" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "ドライバー(テスト)" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "ソニック・ドライバー(テスト)" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "ソニック・ドライバーは見た目は普通のドライバーですが、ソニック機能が搭載されています。" - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "はんだごて(テスト)" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "シザースジャッキ(テスト)" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "スマートフォン(テスト)" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "ライト、カメラ、MP3プレーヤーを搭載した、UPS稼働のスマートフォンです。" - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "紙マッチ(テスト)" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "テスト用のマッチです。放火しましょう。これも科学の発展のためです!" - #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" msgid_plural "yokes and harnesses" @@ -86271,7 +86961,7 @@ msgstr "死人の余生一日目" #: lang/json/achievement_from_json.py msgid "Survive for a day and find a safe place to sleep" -msgstr "一日生き延びて安全な寝床を見つけました。" +msgstr "一日生き延びて安全な寝床を見つける" #: lang/json/achievement_from_json.py msgid "Thank God it's Friday" @@ -86279,7 +86969,7 @@ msgstr "花の金曜日" #: lang/json/achievement_from_json.py msgid "Survive for a week" -msgstr "一週間生き延びました。" +msgstr "一週間生き延びる" #: lang/json/achievement_from_json.py msgid "28 days later" @@ -86287,7 +86977,7 @@ msgstr "28日後..." #: lang/json/achievement_from_json.py msgid "Survive for a month" -msgstr "一か月間生き延びました。" +msgstr "一か月間生き延びる" #: lang/json/achievement_from_json.py msgid "A time to every purpose under heaven" @@ -86295,7 +86985,7 @@ msgstr "天が下の万の事には期あり" #: lang/json/achievement_from_json.py msgid "Survive for a season" -msgstr "一季節を生き延びました。" +msgstr "一季節を生き延びる" #: lang/json/achievement_from_json.py msgid "Brighter days ahead?" @@ -86303,7 +86993,7 @@ msgstr "光明の未来に向かって?" #: lang/json/achievement_from_json.py msgid "Survive for a year" -msgstr "一年間生き延びました。" +msgstr "一年間生き延びる" #: lang/json/achievement_from_json.py msgid "Pheidippides was a hack" @@ -86311,7 +87001,7 @@ msgstr "新世界のフィリッピデス" #: lang/json/achievement_from_json.py msgid "Run a marathon…plus a little bit more." -msgstr "マラソン...にもうちょっと足した距離を走りました。" +msgstr "マラソン...にもうちょっと足した距離を走る" #: lang/json/achievement_from_json.py msgid "Please don't fall down at my door" @@ -86319,7 +87009,7 @@ msgstr "家の前で倒れ込まないで" #: lang/json/achievement_from_json.py msgid "Walk 500 miles, then walk 500 more." -msgstr "500マイル(約805km)以上歩きました。" +msgstr "500マイル(約805km)以上歩く" #: lang/json/achievement_from_json.py msgid "Every rose has its thorn" @@ -86341,13 +87031,41 @@ msgstr "どんな谷も越えられる" msgid "Freeman's favorite" msgstr "フリーマンのお気に入り" +#: lang/json/achievement_from_json.py +msgid "Wield a crowbar" +msgstr "バールを装備する" + #: lang/json/achievement_from_json.py msgid "Impenetrable" msgstr "鉄壁" +#: lang/json/achievement_from_json.py +msgid "Wear a tank suit" +msgstr "タンクスーツを装備する" + #: lang/json/achievement_from_json.py msgid "What are they hiding?" -msgstr "何を隠している?" +msgstr "どんな秘密を見つけた?" + +#: lang/json/achievement_from_json.py +msgid "Enter a lab finale room" +msgstr "研究室の最奥部に入る" + +#: lang/json/achievement_from_json.py +msgid "The Last Homely House" +msgstr "最後の憩の館" + +#: lang/json/achievement_from_json.py +msgid "Reach a refugee center" +msgstr "避難センターにたどり着く" + +#: lang/json/achievement_from_json.py +msgid "Return to your roots" +msgstr "全てはここから始まった" + +#: lang/json/achievement_from_json.py +msgid "Return to the location you started the game" +msgstr "ゲーム開始地点に戻る" #: lang/json/achievement_from_json.py msgid "Would-be Wizard" @@ -87156,10 +87874,6 @@ msgstr "水銀" msgid "mana energy" msgstr "マナ" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "激しい蒸気" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "アドレナリン刺激装置" @@ -88617,20 +89331,6 @@ msgstr "" msgid "Wind Turbines" msgstr "風力タービン" -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "精密はんだ付け装置" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" -"精密はんだごて、ワイヤーカッター、ケーブルリールが手に内蔵されています。サイズが小さすぎるため製作できるものは限られていますが、適切な機械がないときに最低限の道具でCBMを制作できます。" - #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" msgstr "折畳式グレネードランチャー" @@ -88679,6 +89379,20 @@ msgid "" msgstr "" "脊椎の上部に爆弾を移植され、働かされていましたが、卑劣な設置者たちは全員死んでしまいました。残念ながら、30日ごとにコードを入力しないと爆発して死んでしまいます。早くコードを見つける必要があります。" +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "精密はんだ付け装置" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" +"精密はんだごて、ワイヤーカッター、ケーブルリールが手に内蔵されています。サイズが小さすぎるため製作できるものは限られていますが、適切な機械がないときに最低限の道具でCBMを制作できます。" + #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" msgid_plural "Ionic Overload Generators" @@ -89026,7 +89740,7 @@ msgid "Merciful" msgstr "慈悲の心" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp src/scenario.cpp msgid "All" msgstr "全て" @@ -91514,7 +92228,7 @@ msgstr "動物に騎乗しています。" msgid "You mount your steed." msgstr "動物に騎乗しました。" -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "炎上" @@ -93979,70 +94693,6 @@ msgstr "身体中ガムまみれです!" msgid "The gum webs constrict your movement." msgstr "ガムの網が絡まって上手く動けません。" -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "デバッグ" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" -"デバッグを行いました!\n" -"全てが完璧に動作しています。" - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "ソース内に飛び込み、ラバーダックに死ぬほど話しかけました。" - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "最適化" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "ミニマックス" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "最悪であることに利点はなく、最良であることに欠点はありません!" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "体内のの測定基準がびっくりハウスの鏡のように引き延ばされました。" - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "おっと" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "えっ" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "うわー!" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" -"何もかもが激しすぎます!\n" -"混乱し、まごついています。" - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "[激化]" - #: lang/json/faction_from_json.py msgid "Your Followers" msgstr "あなたの仲間" @@ -94230,6 +94880,17 @@ msgid "" " the kind words used about them." msgstr "ウェイトリー一家は、ニューイングランドの歴史ある風変わりな一族です。風変わり、というのはオブラートに包んだ表現です。" +#: lang/json/faction_from_json.py +msgid "Swampers Religious Community and Hotels and Casinos" +msgstr "スワンパーズ教団ホテル&カジノ" + +#. ~ Description for Swampers Religious Community and Hotels and Casinos +#: lang/json/faction_from_json.py +msgid "" +"A prosperous but secretive group of churchgoers and entertainment moguls " +"with an affection for dinosaurs. They welcome all untainted humans." +msgstr "人気は高いものの秘密主義を貫く教団の信者たちと、恐竜に愛情を注ぐ芸能界の重鎮たちのグループです。穢れのない人間を歓迎しています。" + #: lang/json/faction_from_json.py msgid "The Ancient Ones" msgstr "エンシェント・ワン" @@ -96970,6 +97631,7 @@ msgid "" "rest your feet for once, and if coupled with a suitable table, you could eat" " a meal properly and almost pretend that things were normal again." msgstr "" +"4本の脚と座面と背もたれで構成された、シンプルな木製の椅子です。座って足を休めてもいいですし、適当なテーブルも用意すればちゃんとした食事スペースになり、以前までの日常を忘れずにいられます。" #: lang/json/furniture_from_json.py msgid "sofa" @@ -96982,6 +97644,7 @@ msgid "" "alongside one another, or one person to lay back on. It's not quite a bed, " "but it's a hell of a lot more comfortable than the floor." msgstr "" +"2人でゆったりと座ったり、1人で横になったりするのに十分な広さがある布張りのソファです。ベッドほどではありませんが、床で寝るのに比べれば格段に快適です。" #: lang/json/furniture_from_json.py msgid "stool" @@ -96993,14 +97656,14 @@ msgid "" "A simple stool, with four legs and a seat. While it's a touch more " "maneuverable to sit on, the lack of back support means it's significantly " "less comfortable than a normal chair." -msgstr "" +msgstr "4本の脚と座面で構成された、シンプルなスツールです。座り心地はまずまずですが、背もたれがないため、通常の椅子よりは劣ります。" #. ~ Description for camp chair #: lang/json/furniture_from_json.py msgid "" "A somewhat uncomfortable folding chair, with fabric strung across a metal " "frame. Not the best, but better than nothing, and a lot easier to pack up." -msgstr "" +msgstr "金属の骨組みに布が張られた、やや座り心地の悪い折り畳みいすです。最高の椅子ではありませんが、地べたに座るよりは快適で、持ち運びも楽です。" #: lang/json/furniture_from_json.py msgid "log stool" @@ -97011,7 +97674,7 @@ msgstr "丸太椅子" msgid "" "A short section from a tree trunk with one of the flat ends smoothed down. " "Makes for a decent place to sit, but not quite a real chair." -msgstr "" +msgstr "木の幹を短く切り、切断面が滑らかになるよう加工したものです。座り心地は快適ですが、本物の椅子には及びません。" #: lang/json/furniture_from_json.py msgid "deck chair" @@ -97024,6 +97687,7 @@ msgid "" "it's built to take outdoor conditions and is an improvement over the ground," " it's not particularly comfortable." msgstr "" +"木製の骨組みに布が張られた、折り畳み式のデッキチェアです。屋外で使うためにデザインされており、地べたに座るよりはマシですが、座り心地は特に快適という程ではありません。" #: lang/json/furniture_from_json.py msgid "bulletin board" @@ -97034,7 +97698,7 @@ msgstr "掲示板" msgid "" "A wide wooden frame with a sheet of corkboard inside. Good for pinning " "various notices for other survivors to read." -msgstr "" +msgstr "幅の広い木枠の中にコルクボードがはめ込んであります。他の生存者に読んでもらう様々な連絡事項を張り出せそうです。" #: lang/json/furniture_from_json.py msgid "sign" @@ -97045,7 +97709,7 @@ msgstr "看板" msgid "" "A simple signpost made of wood. Basically two planks alongside each other " "nailed to another plank that holds them up." -msgstr "" +msgstr "木でできたシンプルな看板です。並べた2枚の板をもう1枚の板に釘で固定した形状が一般的です。" #: lang/json/furniture_from_json.py msgid "warning sign" @@ -97056,7 +97720,7 @@ msgstr "警戒標識" msgid "" "A triangular signpost painted white with a red border. Designed to easily " "catch the eye, signs of this nature seldom display anything but bad news." -msgstr "" +msgstr "白地に赤い縁取りがされた三角形の標識です。目に留まりやすいデザインの標識であり、大抵は悪い情報が書かれています。" #: lang/json/furniture_from_json.py lang/json/vehicle_part_from_json.py msgid "bed" @@ -97069,6 +97733,7 @@ msgid "" "pillows, and despite being a completely ordinary mattress, it's a sight for " "sore, tired eyes." msgstr "" +"頑丈な木枠に嵌った、一般的なマットレスです。ごく普通のどこにでもあるマットレスですが、ブランケットや枕が無くても睡眠で疲れを癒す効果は絶大です。" #: lang/json/furniture_from_json.py msgid "bunk bed" @@ -97082,6 +97747,7 @@ msgid "" " you'd like to somebody you wouldn't normally want to share a mattress with," " a bed's a bed." msgstr "" +"一人用マットレスを上下の段に収納できる、頑丈な木製の2段ベッドです。一般的に、1枚のマットレスを共有したくない相手と共に使うものですが、ベッドとして問題なく使えます。" #: lang/json/furniture_from_json.py msgid "bed frame" @@ -97093,6 +97759,7 @@ msgid "" "A sturdy wooden bed frame built to hold most standard mattresses. Despite " "being one half of a bed, it's just about impossible to lay on by itself." msgstr "" +"大抵の標準的なマットレスを収納できる、頑丈な木製のベッドフレームです。ベッドを構成する要素の半分であるにもかかわらず、これだけで眠ることは困難です。" #: lang/json/furniture_from_json.py msgid "whack." @@ -97105,6 +97772,7 @@ msgid "" " entire bed without the mattress, it's pretty close. If it's someplace " "actually safe to sleep, it's practically a luxury in of itself." msgstr "" +"床に置かれた一般的なマットレスです。快適性はマットレスのないベッドよりはマシか、同程度です。安全に眠れる場所が確保できれば、これ程贅沢な寝床はありません。" #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py #: lang/json/terrain_from_json.py src/map.cpp @@ -97119,6 +97787,7 @@ msgid "" "it's someplace actually safe to sleep, it's practically a luxury in of " "itself." msgstr "" +"床に置かれたフワフワの羽毛入りマットレスです。快適性はマットレスのないベッドよりはマシか、同程度です。安全に眠れる場所が確保できれば、これ程贅沢な寝床はありません。" #: lang/json/furniture_from_json.py msgid "makeshift bed" @@ -97131,6 +97800,7 @@ msgid "" " bed, albeit with a slightly lumpy mattress. Considering the circumstances," " it's not too bad at all." msgstr "" +"薄っぺらい木枠に即席のマットレスをはめ込んだベッドです。少しゴワゴワしていますが、一般的なベッドと比べても遜色ありません。今の状況を考えれば、まったく悪くない寝床です。" #: lang/json/furniture_from_json.py msgid "straw bed" @@ -97141,7 +97811,7 @@ msgstr "藁ベッド" msgid "" "An improvised bedding pile made of hay. Better than nothing, but not " "particularly comfortable, and quite itchy." -msgstr "" +msgstr "干し草の山で作った即席の寝床です。地べたで眠るよりはマシですが、特に快適でもなく、痒みが気になります。" #: lang/json/furniture_from_json.py msgid "bookcase" @@ -97152,7 +97822,7 @@ msgstr "本棚" msgid "" "A simple wooden shelf for storing dozens of books. While designed for " "books, it does a decent job of storing anything else that'll fit." -msgstr "" +msgstr "何十冊もの本を収納できるシンプルな木製の棚です。本を並べるために作られたものですが、他の物品を置いても問題ありません。" #: lang/json/furniture_from_json.py msgid "entertainment center" @@ -97164,7 +97834,7 @@ msgid "" "While not quite as cool by itself as the name might imply, this large wooden" " cabinet can store a variety of things, like a TV and media systems, with " "shelving space and cupboards for anything that'll fit." -msgstr "" +msgstr "この家具自体に格好いい要素はありませんが、テレビやメディアシステムなど、様々なものを収納でき、食器を置くスペースや棚も付いています。" #: lang/json/furniture_from_json.py msgid "coffin" @@ -97178,6 +97848,7 @@ msgid "" "to be given a proper final resting place. An honor that countless many will" " likely never receive." msgstr "" +"死者を敬い埋葬するための、簡素な木製の棺です。大変動前は葬儀は一般的な慣習でしたが、今の状況でまともな眠りにつける場所を用意してもらえるのは、極めてまれで名誉あることです。大多数の人々は、この名誉を享受できません。" #: lang/json/furniture_from_json.py lang/json/terrain_from_json.py msgid "wham!" @@ -97195,6 +97866,7 @@ msgid "" "to be given a proper final resting place. This one is open and unoccupied, " "and gazing inside fills you with a sense of melancholic weariness." msgstr "" +"死者を敬い埋葬するための、簡素な木製の棺です。大変動前は葬儀は一般的な慣習でしたが、今の状況でまともな眠りにつける場所を用意してもらえるのは、極めてまれで名誉あることです。蓋は開いており、中を眺めていると憂鬱な倦怠感に満たされます。" #: lang/json/furniture_from_json.py msgid "crate" @@ -97207,6 +97879,7 @@ msgid "" "about anything inside. If you don't have a proper tool to pry it open, " "smashing it is an option, albeit one that risks destroying the contents." msgstr "" +"密閉された木箱です。ラベルは貼られておらず、中に様々なものが入ります。こじ開けるための道具を持っていない場合は叩き壊して開けることも可能ですが、内容物が損傷する危険が伴います。" #: lang/json/furniture_from_json.py msgid "open crate" @@ -97218,7 +97891,7 @@ msgid "" "An open wooden storage box, capable of holding any number of things. The " "lid has been pried off and is leaned adjacent to it, and with a fresh set of" " nails, could be sealed back shut." -msgstr "" +msgstr "様々なものを収納できる、開いた状態の木箱です。蓋は隣に立てかけてあり、釘を打ちつければ再度封印できそうです。" #. ~ Description for large cardboard box #: lang/json/furniture_from_json.py @@ -97228,6 +97901,7 @@ msgid "" "for carrying, it's very hard to see out of, and won't do anything to protect" " you if you're found." msgstr "" +"茶色い紙で作られた大型の箱です。様々なものが入っている、あるいは何かが潜んでいる可能性があります。運搬用の小さな穴が2つしか空いていないことを考えると外からは中が見えませんが、もし見つかった場合は何の障壁にもなりません。" #: lang/json/furniture_from_json.py msgid "crumple!" @@ -97246,7 +97920,7 @@ msgstr "衣装棚" msgid "" "A simple wooden cabinet with a column of short drawers. While intended for " "storing clothes, there's nothing stopping you from storing whatever fits." -msgstr "" +msgstr "縦に並んだ幅の狭い引き出しが付いた、シンプルな木製の衣装棚です。衣類を収納するための家具ですが、入るものなら何でも収納できます。" #: lang/json/furniture_from_json.py msgid "glass front cabinet" @@ -97259,6 +97933,7 @@ msgid "" "contents. Often used for displaying rare, visually pleasing, or otherwise " "valuable goods, it's odd that it doesn't have a lock." msgstr "" +"前面は中が見えるようにガラス張りになっている、背の高い金属製の棚です。珍しいものや見た目が美しいものを陳列するのに使われることが多いですが、おかしなことに鍵はかけられません。" #: lang/json/furniture_from_json.py lang/json/furniture_from_json.py #: lang/json/terrain_from_json.py lang/json/terrain_from_json.py @@ -97278,6 +97953,7 @@ msgid "" "ammunition. If you had something to listen close with and a hell of a lot " "of time, you could probably crack it." msgstr "" +"ダイヤル式のコンビネーションロックを備えた、分厚い金属製の重くて大きなコンテナです。銃器やその改造部品、弾薬などを安全に保管できるように設計されています。小さな音を聞きとる道具と非常に長時間の猶予があれば、開錠できそうです。" #: lang/json/furniture_from_json.py msgid "screeching metal!" @@ -97294,6 +97970,7 @@ msgid "" "Unfortunately, the lock is completely broken, and short of some pretty " "serious machinery, you have no possible way of opening it." msgstr "" +"銃器や弾薬を保管するための、重くて頑丈な金属製の保管庫です。残念ながら、ロックが完全に壊れています。並外れた破壊力を持つ機械でも使わない限り、開きそうにありません。" #: lang/json/furniture_from_json.py msgid "electronic gun safe" @@ -97307,6 +97984,7 @@ msgid "" "ammunition. If you had some way of hacking into it, you could probably " "crack it open." msgstr "" +"電子ロックシステムを備えた、分厚い金属製の重くて大きなコンテナです。銃器やその改造部品、弾薬などを安全に保管できるように設計されています。何らかのハッキング手段があれば開けられそうです。" #: lang/json/furniture_from_json.py msgid "locker" @@ -97317,7 +97995,7 @@ msgstr "ロッカー" msgid "" "A tall sheet metal cabinet, useful for storing just about anything that'll " "fit." -msgstr "" +msgstr "背の高い板金製の戸棚です。中に納まるサイズであればどんなものでも収納できます。" #: lang/json/furniture_from_json.py msgid "mailbox" @@ -97330,10 +98008,11 @@ msgid "" "deliveries. Although considering the circumstances, it will likely never " "see proper use again." msgstr "" +"郵便物を受け取るために作られた、木製の支柱に乗った金属製の箱です。今の状況を考えると、まともな用途で再び使われるようになる日は来ないと思われます。" #: lang/json/furniture_from_json.py msgid "clothing rail" -msgstr "ハンガーレール" +msgstr "ハンガーラック" #. ~ Description for clothing rail #: lang/json/furniture_from_json.py @@ -97341,7 +98020,7 @@ msgid "" "A metal frame on a set of wheels used for hanging large amounts of clothes." " Usually used in theater or retail environments, it's easy to use and quick" " to access." -msgstr "" +msgstr "大量の衣類を吊るすために使われる、ホイールが付いた金属製のフレームです。通常は劇場や衣料品店で使われており、衣類を簡単に出し入れできます。" #: lang/json/furniture_from_json.py msgid "display rack" @@ -97352,7 +98031,7 @@ msgstr "棚(金属)" msgid "" "A sheet metal shelving unit, with the storage surfaces angled in such a way " "as to show off the items stored." -msgstr "" +msgstr "収納したものがよく見えるように棚板に角度が付いている、板金製の棚です。" #: lang/json/furniture_from_json.py msgid "wooden rack" @@ -97363,7 +98042,7 @@ msgstr "棚(木)" msgid "" "A wooden shelving unit with angled storage surfaces designed to show off " "whatever is stored on it." -msgstr "" +msgstr "収納したものがよく見えるように棚板に角度が付いている、木製の棚です。" #: lang/json/furniture_from_json.py msgid "coat rack" @@ -97374,7 +98053,7 @@ msgstr "コート掛け" msgid "" "A tall wooden pole with a set of hooks used to store outdoor jackets and " "hats to allow easy access." -msgstr "" +msgstr "アウトドア用のジャケットや帽子を掛けられる、フックが付いた背の高い木製の柱です。衣類を簡単に出し入れできます。" #: lang/json/furniture_from_json.py msgid "recycle bin" @@ -97388,6 +98067,7 @@ msgid "" "factory, the drastic change in priorities as of late means that these may " "hold valuable materials." msgstr "" +"緑色の大きなプラスチック製容器には、「リサイクル」のマークが描かれています。廃棄物を処理して工場に集めるための容器ですが、ものの価値が大きく変動した今の状況では、貴重品が入っている可能性もあります。" #: lang/json/furniture_from_json.py msgid "safe" @@ -97399,6 +98079,7 @@ msgid "" "A small, heavy, and near-unbreachable metal box with a rotary combination " "lock. Although, this isn't actually locked, just closed." msgstr "" +"ダイヤル式のコンビネーションロックを備えた、重く小さな、中身を強奪されることは滅多にない金属製の箱です。これはロックが掛かっておらず、ただ扉が閉じられているだけのようです。" #. ~ Description for safe #: lang/json/furniture_from_json.py @@ -97407,6 +98088,7 @@ msgid "" "lock. With something to listen really closely and a hell of a lot of time, " "you might be able to crack it." msgstr "" +"ダイヤル式のコンビネーションロックを備えた、重く小さな、中身を強奪されることは滅多にない金属製の箱です。非常に小さな音を聞き分けられる道具と地獄のように長い時間があれば、金庫破りも可能です。" #: lang/json/furniture_from_json.py msgid "open safe" @@ -97418,6 +98100,7 @@ msgid "" "A small, heavy, and near-unbreachable metal box with a rotary combination " "lock, albeit significantly less secure with the door open." msgstr "" +"ダイヤル式のコンビネーションロックを備えた、重く小さな、中身を強奪されることは滅多にない金属製の箱です。扉が開いているので、安全性は大幅に低下しています。" #: lang/json/furniture_from_json.py msgid "trash can" @@ -97429,7 +98112,7 @@ msgid "" "A plastic bin for storing discarded waste as to be disposed of later. " "Although, considering the circumstances, it might be worth seeing what's " "inside." -msgstr "" +msgstr "ごみを廃棄する前に一時的に集めておくための、プラスチック製のごみ箱です。今の状況を考えると、漁ってみてもいいかもしれません。" #: lang/json/furniture_from_json.py msgid "wardrobe" @@ -97441,7 +98124,7 @@ msgid "" "A very large wooden cabinet for storing clothes, effectively an upright " "closet. Could technically be used to store anything else that would fit, " "though." -msgstr "" +msgstr "衣類を収納するための、非常に大きな木製の棚、いわば縦長のクローゼットです。中に入るサイズであれば、衣類以外も収納できます。" #: lang/json/furniture_from_json.py msgid "filing cabinet" @@ -97453,6 +98136,7 @@ msgid "" "A rack of metal drawers designed to hold various files and paperwork. " "Paperwork that has more than likely lost all worth or value by now." msgstr "" +"様々なファイルや書類を保管するために設計された、引き出しが付いた金属製の棚です。中に入っている書類は、今では何の価値もなくなってしまったと思われます。" #: lang/json/furniture_from_json.py msgid "utility shelf" @@ -97463,7 +98147,7 @@ msgstr "収納棚" msgid "" "A simple heavy-duty plastic and metal shelving unit, intended to store tools" " and materials for easy access to workers." -msgstr "" +msgstr "プラスチックと金属で作られたシンプルで頑丈な棚です。中に保管した工具や材料を楽に出し入れできるように設計されています。" #: lang/json/furniture_from_json.py msgid "warehouse shelf" @@ -97473,7 +98157,7 @@ msgstr "倉庫棚" #: lang/json/furniture_from_json.py msgid "" "A huge, sturdy steel shelf for storing pallets of crates in warehouses." -msgstr "" +msgstr "倉庫内に木製パレットを収納するための、巨大で頑丈なスチール製の棚です。" #: lang/json/furniture_from_json.py msgid "wooden keg" @@ -97484,7 +98168,7 @@ msgstr "ビア樽(木)" msgid "" "A large standing wooden barrel, completely watertight. Good for storing " "liquids of all kinds or fermenting alcohol." -msgstr "" +msgstr "完全防水加工が施された、大きな木製樽です。様々な液体の保管や酒類の発酵に適しています。" #: lang/json/furniture_from_json.py msgid "display case" @@ -97497,6 +98181,7 @@ msgid "" " Useful for storing valuable things while still showing them off. Not " "actually as secure as it looks, as the display windows are easily broken." msgstr "" +"腰の高さまである頑丈そうな木製のケースです。上部にはガラスが嵌っています。貴重品を展示しつつ保管するのに便利です。ガラスが割れやすいため、見た目ほど安全ではありません。" #: lang/json/furniture_from_json.py msgid "broken display case" @@ -97510,6 +98195,7 @@ msgid "" "if the glass hadn't been shattered. Careful not to cut yourself when " "looting." msgstr "" +"腰の高さまである頑丈そうな木製のケースです。上部にはガラスが嵌っています。貴重品を展示しつつ保管するのに便利でしたが、ガラスが粉々に割れてしまいました。略奪する際は、手を切らないように気を付けましょう。" #: lang/json/furniture_from_json.py msgid "standing tank" @@ -97519,7 +98205,7 @@ msgstr "スタンディングタンク" #: lang/json/furniture_from_json.py msgid "" "A huge metal tank that can be used to safely store large amounts of liquid." -msgstr "" +msgstr "大量の液体を安全に保管できる、巨大な金属製のタンクです。" #: lang/json/furniture_from_json.py msgid "dumpster" @@ -97532,6 +98218,7 @@ msgid "" "city's waste management any time soon. Despite the unpleasant nature of " "climbing inside, it could make for a viable hiding spot." msgstr "" +"市の不用品回収でもすぐには引き取ってもらえない可能性が高いごみを入れる、金属製の大型ごみ箱です。よじ登って中に入るのはあまり良い気分ではありませんが、隠れ場所として利用できるかもしれません。" #: lang/json/furniture_from_json.py msgid "butter churn" @@ -97542,7 +98229,7 @@ msgstr "バター撹拌機" msgid "" "A metal tube with a built-in mixer for making butter. Rather than needing " "electricity, it is pedal-driven, allowing use without power." -msgstr "" +msgstr "バターを攪拌するミキサーが付いた金属容器です。ペダル式のため、電力なしで動作します。" #: lang/json/furniture_from_json.py msgid "counter" @@ -98335,6 +99022,79 @@ msgid "" "temperature. You'll need to take it down first." msgstr "車両電源で稼働するように改造された冷凍庫です。まずはこの場から取り外す必要があります。" +#: lang/json/furniture_from_json.py +msgid "sleep pod" +msgstr "睡眠ポッド" + +#. ~ Description for sleep pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a climate controlled sleep pod. An easy way to reduce energy costs " +"in dense urban environments." +msgstr "内部の環境が調整された睡眠ポッドです。密集した都市環境でエネルギー消費を削減するための簡単な方法です。" + +#: lang/json/furniture_from_json.py +msgid "cryo pod" +msgstr "冷凍睡眠ポッド" + +#. ~ Description for cryo pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a long term sleep pod. Cryo pods are mostly used by people waiting " +"a short term for organs or criminals avoiding heat right after a crime." +msgstr "長期間の睡眠ポッドです。主に臓器移植の順番待ちをする患者や捜査を掻い潜りたい犯罪者が使用します。" + +#: lang/json/furniture_from_json.py +msgid "CRISPR Biolab" +msgstr "CRISPRバイオラボ" + +#. ~ Description for CRISPR Biolab +#: lang/json/furniture_from_json.py +msgid "" +"A boxy looking device of arms, droppers and pipettes. It was used pre-" +"Cataclysm to do expirements in gene editing." +msgstr "アームと点滴器、ピペットが付いた箱型の装置です。大変動以前は遺伝子組み換え操作に使われていました。" + +#: lang/json/furniture_from_json.py +msgid "3D printer" +msgstr "3Dプリンター" + +#. ~ Description for 3D printer +#: lang/json/furniture_from_json.py +msgid "" +"This box was used for rapid prototyping of products and for general " +"entertainment purposes in the masses." +msgstr "試作品を手早い作成や大衆向けの娯楽用に使われていた、箱型の装置です。" + +#: lang/json/furniture_from_json.py +msgid "neural net inserter" +msgstr "神経網挿入装置" + +#. ~ Description for neural net inserter +#: lang/json/furniture_from_json.py +msgid "" +"This device looks like a cross between some kind of nightmare dentistry " +"equipment and socketing tool mounted on a slide that lets it drop precisely " +"down. Useful for those project that require putting delicate items into " +"hard to reach spaces." +msgstr "" +"悪夢のような歯科医療機器と、正確な位置調整が可能なスライド付きソケットが組み合わさったような姿の装置です。手の届きにくい場所にデリケートなものを設置する必要がある際に便利です。" + +#: lang/json/furniture_from_json.py +msgid "monomolecular saw" +msgstr "単分子ノコギリ" + +#. ~ Description for monomolecular saw +#: lang/json/furniture_from_json.py +msgid "" +"A wire the size of a cheescutter runs in a single direction in this tool, " +"allowing atomically precise cuts at almost any angle. Even unpowered it " +"gives off a visual distortion for several inches around it to prevent you " +"from losing a hand. It is impossible to deconstruct this device without the" +" wire self destructing." +msgstr "" +"チーズカッター程のサイズの装置です。ワイヤーが一定方向に回転し、どれだけ角度を付けても原子レベルの精密な切断が可能です。未使用時にもワイヤーの周囲数cmが歪んで見えており、手の怪我を防ぎます。ワイヤーが切れない限り、この装置は分解できません。" + #. ~ Description for dresser #: lang/json/furniture_from_json.py msgid "Dress yourself!" @@ -98706,8 +99466,7 @@ msgid "" msgstr "" "銃身が3つ連なった自家製の銃器です。.30-06口径弾を装填する銃身が1つあり、残り2つの銃身には散弾を装填します。二連ショットガンから取り外した部品とパイプから作られています。" -#: lang/json/gun_from_json.py lang/json/gun_from_json.py -#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" msgstr "ショットガン" @@ -98855,7 +99614,8 @@ msgid "" msgstr "" "21世紀半ばに開発されたV29レーザーピストルをベースにして自作した銃器です。有り体に言えばダクトテープと電子部品の塊です。一般的なUPSで作動します。" -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py src/item.cpp +#: lang/json/gun_from_json.py lang/json/gun_from_json.py +#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py src/item.cpp msgctxt "gun_type_type" msgid "pistol" msgstr "ハンドガン" @@ -101881,7 +102641,7 @@ msgstr "" #: lang/json/gun_from_json.py msgid "handmade lever shotgun" msgid_plural "handmade lever shotguns" -msgstr[0] "" +msgstr[0] "ショットガン(12ga/手製レバーアクション)" #: lang/json/gun_from_json.py msgid "" @@ -101889,6 +102649,7 @@ msgid "" "While still a primitive pipe and 2x4 design, it is a formiddable shotgun in " "it's own right with room for improvement." msgstr "" +"小型のチューブ型弾倉を内蔵した、銃身が短い自作のレバーアクション式ショットガンです。パイプと木材を組み合わせた原始的な作りですが改造も可能であり、手強いショットガンであることは間違いありません。" #: lang/json/gun_from_json.py msgid "Browning Auto 5" @@ -102221,6 +102982,17 @@ msgid "" msgstr "" "ウィンチェスター1897は、商業的に成功した最初のポンプアクションショットガンの一つです。その「トレンチ(塹壕)」向けの設計から、第一次世界大戦中はアメリカの理想を鮮やかに体現した象徴とされていました。放熱板と着剣装置、そして銃剣を備えたこの銃の外見は、間違いなく恐ろしいものです。掃討する塹壕は見当たらないので、ゾンビがはびこる街で活躍させましょう。" +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "ショットガン(簡易)" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "2本の太い鋼鉄製パイプ、エンドキャップ、釘を組み合わせて作った粗悪な散弾銃です。照準器がないため、近距離でしか使えません。" + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -102865,6 +103637,15 @@ msgstr "レイセオン社のロボットの手元に内蔵されていた、強 msgid "trilaser" msgstr "三連レーザー" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -103645,6 +104426,11 @@ msgid "" msgstr "" "主にマニアックな民間人向けの、取り外し可能な弾倉を備えたショットガンです。付属のレールと威圧感のある黒い塗装は、狩猟用途には見えません。弾倉の導入によって装填に掛かる時間は短縮されました。丁寧に扱う必要がある銃器ですが、ある程度の信頼性は保証されています。" +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "ショットガン(連射)" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -103722,20 +104508,6 @@ msgstr "頑丈で柔軟な木に凝った装飾が施された、魔法の力を msgid "Fake gun that fires barbed javelins." msgstr "棘付きジャベリンを発射する疑似アイテムです。" -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "コンパウンドボウ(テスト)" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "" - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -105542,15 +106314,6 @@ msgid "" "replacing the iron sights. Increases accuracy and weight." msgstr "アイアンサイトを取り外し、マナクリスタルで作った光学式ブルードットサイトを搭載します。精度が向上し、重量が増加します。" -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "" - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "魚の内臓を取り、切り身にしました。" @@ -105578,8 +106341,34 @@ msgid "" msgstr "部位を乱雑に切り分け、特に目を引いた悪臭を放つ巨大な肉塊を取り出しました。" #: lang/json/harvest_from_json.py -msgid "You laboriously dissect the colossal insect." -msgstr "巨大な昆虫をなんとか解体しました。" +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "You laboriously dissect the colossal insect. " +msgstr "巨大な昆虫を丹念に解体しました。" + +#: lang/json/harvest_from_json.py +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"What appeared to be insect hairs on the chitin of this creature look more " +"like tiny feathers as you pare them back. Inside is a bundle of bubble-like" +" tissue sacs that appear to be floating, which doesn't fit with what you " +"know about real bees." +msgstr "" +"この生物に生えていたキチン質の毛のような素材を剥がすと、非常に小さな羽のような形をしていることが分かります。体内には、浮遊しているように見える泡のような塊があり、よく知るハチが持っている一般的な器官だとは思えません。" + +#: lang/json/harvest_from_json.py +msgid "" +"There's a faintly hairy, skin-like membrane, covered in blood vessels, " +"beneath the chitin of this creature. Inside it is a bundle of bubble-like " +"tissue sacs that appear to be floating, which doesn't fit with what you know" +" about real wasps." +msgstr "" +"キチン質を剥がすと、血管で覆われた毛皮と皮膚の中間のような膜が見えます。体内には、浮遊しているように見える泡のような塊があり、よく知るハチが持っている一般的な器官だとは思えません。" #: lang/json/harvest_from_json.py msgid "You laboriously hack and dig through the remains of the fungal mass." @@ -105601,6 +106390,8 @@ msgid "" "apocalyptic world. You have survived the original onslaught, but the future" " looks pretty grim." msgstr "" +"Cataclysm: Dark Days " +"Aheadは、終末世界を舞台にしたターン制サバイバルゲームです。ひとまずは混乱の中を生き延びましたが、今後も状況は厳しさを増すでしょう。" #: lang/json/help_from_json.py msgid "" @@ -105623,6 +106414,8 @@ msgid "" "survival situation, and at least a dozen more from the eldritch and sci-fi " "nature of the Cataclysm itself." msgstr "" +"Cataclysm: Dark Days " +"Aheadが従来のローグライクゲームと異なる点はいくつかあります。レベルに応じて範囲が限定されたダンジョンを探索するのではなく、東西南北に無限に広がる世界を探索します。サバイバル要素をもつローグライクのため、食料の確保や水分補給、定期的な睡眠も必要です。リアリズムの原則に基づいているため、サバイバル生活で起こりうるあらゆる困難を予測しておくべきですが、大変動によってもたらされた超自然的・空想科学的な現象がもたらす困難はその比ではありません。" #: lang/json/help_from_json.py msgid "" @@ -105631,6 +106424,7 @@ msgid "" "Firearms, medications, and a wide variety of tools are all available to help" " you survive." msgstr "" +"Cataclysmは他のゲームよりも多くの作業を必要としますが、近未来が舞台なので、現代世界より簡単にこなせる作業もあります。銃器や薬物など、多種多様なアイテムが揃っており、文明崩壊後の世界を生き延びるのに役立ちます。" #: lang/json/help_from_json.py msgid ": Movement" @@ -108053,6 +108847,13 @@ msgstr "このアイテムの着用時は慎重にバランスをとる必要が msgid "This item can be used to communicate with radio waves." msgstr "このアイテムは電波を使って通信します。" +#. ~ Please leave anything in unchanged. +#: lang/json/json_flag_from_json.py +msgid "" +"This item can be used to pick locks with zero " +"effort." +msgstr "このアイテムは開錠自動成功させます。" + #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is designed to keep you dry in the rain." @@ -108581,7 +109382,7 @@ msgstr "初期化/フィルタ" #: lang/json/keybinding_from_json.py msgid "Cycle display mode" -msgstr "表示モードの切替" +msgstr "循環切替/表示モード" #: lang/json/keybinding_from_json.py msgid "Show recipe result" @@ -109509,7 +110310,7 @@ msgstr "MOD確認" #: lang/json/keybinding_from_json.py msgid "Cycle move mode (run/walk/crouch)" -msgstr "切替/移動方法(駆足/歩行/屈む)" +msgstr "循環切替/移動モード(駆足/歩行/屈む)" #: lang/json/keybinding_from_json.py msgid "Reset Movement to Walk" @@ -110066,7 +110867,7 @@ msgstr "複数の物資が投下されています。" #: lang/json/map_extra_from_json.py msgctxt "Map Extra" msgid "Military" -msgstr "軍隊式" +msgstr "兵士" #. ~ Description for {'str': 'Military', 'ctxt': 'Map Extra'} #: lang/json/map_extra_from_json.py @@ -110336,6 +111137,15 @@ msgstr "ゾンビトラップ" msgid "Zombie trap." msgstr "ゾンビを嵌めるための罠です。" +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "葦原" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "水生植物が生えています。" + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -111650,6 +112460,11 @@ msgid "" "years.'" msgstr "ウィートリー・ファミリー墓守サービス社です。ニューイングランドで300年の歴史があります。" +#. ~ Computer name +#: lang/json/mapgen_from_json.py +msgid "DinoLab Operating Theater Controls" +msgstr "DinoLab手術室制御端末" + #: lang/json/martial_art_from_json.py msgid "No style" msgstr "なし" @@ -111866,7 +112681,7 @@ msgstr "%sは乱闘の態勢を整えました。" #: lang/json/martial_art_from_json.py msgid "Enhanced Blocking" -msgstr "" +msgstr "強化ブロック" #. ~ Description of buff 'Enhanced Blocking' for martial art '{'str': #. 'Brawling'}' @@ -111876,6 +112691,9 @@ msgid "" "\n" "+1 Block attempts." msgstr "" +"戦闘訓練を重ね、一度に複数の攻撃をブロックできるようになりました。\n" +"\n" +"回避+1" #: lang/json/martial_art_from_json.py msgid "Capoeira" @@ -111937,6 +112755,25 @@ msgstr "" "「回転蹴り」「蹴り上げ」有効化\n" "3ターン継続" +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "カポエイラのステップ" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': +#. 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" +"見逃してはいけません。このダンスは、ここからクライマックスが始まるのです!\n" +"\n" +"打撃与ダメージ+15%\n" +"2ターン継続、最大蓄積数3" + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "鶴形拳" @@ -112116,6 +112953,27 @@ msgstr "" "\n" "精度+2" +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "エスクリマの連携技" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': +#. 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" +"相手が隙を見せれば、より激しく攻めて会心の一撃を狙います。\n" +"\n" +"与ダメージボーナス+15%\n" +"「連携攻撃」有効化\n" +"3ターン継続、最大蓄積数3" + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "フェンシング" @@ -112157,6 +113015,42 @@ msgstr "" "\n" "器用x50%のブロック時ダメージ軽減" +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "受け流す" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" +"回避行動からすぐさま攻撃に移ることで、より命中しやすくなります。\n" +"\n" +"命中+1\n" +"1ターン継続" + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "ルミーズ" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" +"このフェイント攻撃は、強力な追い打ちを仕掛けるための完璧な布石です!\n" +"\n" +"命中+1\n" +"「複合攻撃」有効化\n" +"1ターン継続" + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -112212,6 +113106,42 @@ msgstr "" "ブロック-2、回避スキル+1.0、筋力x50%のブロック時ダメージ軽減\n" "1ターン継続" +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "防御崩し" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" +"ブロックに成功することで、相手の防御の隙が見えます。\n" +"\n" +"命中+1\n" +"1ターン継続、最大蓄積数3" + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "巧妙なフェイント" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" +"敵は見事に騙されました!\n" +"\n" +"「引き倒し」有効化\n" +"1ターン継続" + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "柔道" @@ -112487,6 +113417,38 @@ msgstr "" "\n" "回避+1、筋力x50%のブロック時ダメージ軽減" +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "身かわし" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" +"攻撃を回避しました。敵の懐はがら空きです。反撃を仕掛けましょう!\n" +"「下段攻撃」「致命の一撃」有効化\n" +"1ターン継続" + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "必殺攻撃" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" +"強力な攻撃によって、この戦いを今すぐ終わらせるチャンスが訪れました!\n" +"「危険な一撃」有効化\n" +"1ターン継続" + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "ムエタイ" @@ -112529,6 +113491,25 @@ msgstr "" "\n" "筋力x50%のブロック時ダメージ軽減" +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "決意" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay +#. Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% of Strength.\n" +"Lasts 5 turns." +msgstr "" +"攻撃を受けても動きは鈍りません。相手を長期戦に巻き込み勝利しましょう。\n" +"\n" +"筋力x25%の打撃与ダメージ上昇、筋力x50%のブロック時ダメージ軽減\n" +"5ターン継続" + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "忍術" @@ -112606,6 +113587,42 @@ msgstr "" "%の命中精度上昇\n" "1ターン継続" +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "不意打ち失敗" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': +#. 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" +"バレてしまいました!再び不意打ちを仕掛けるには少し待つ必要があります。\n" +"\n" +"全与ダメージ-50%\n" +"3ターン継続" + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "撤退" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" +"敵を倒しました。次の行動計画を練りましょう。\n" +"\n" +"回避+2、移動速度+10\n" +"3ターン継続" + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "二天一流" @@ -112697,6 +113714,51 @@ msgstr "" "「一寸の見切り」有効化\n" "1ターン継続" +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "朽葉" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" +"業物も\n" +"砥がねば錆びる\n" +"常に砥げ\n" +"\n" +"回避スキル-1.0、打撃与ダメージ-1、斬撃与ダメージ-1\n" +"1ターン継続、最大蓄積数5" + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "静寂" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" +"嵐の目\n" +"束の間の凪\n" +"疾く過ぎぬ\n" +"\n" +"命中+2、感覚x50%の回避スキル上昇\n" +"2ターン継続" + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "パンクラチオン" @@ -112869,6 +113931,25 @@ msgstr "" "器用ではなく感覚によって命中精度が上昇します。\n" "感覚x25%の命中精度上昇、器用x25%の命中精度低下" +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "とぐろ巻き" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" +"ヘビは攻撃を仕掛ける絶好の瞬間をじっと待ちます。敵が気を許した隙を突き、弱点を容赦なく攻めましょう!\n" +"\n" +"命中+1、感覚x50%の貫通力上昇\n" +"1ターン継続、最大蓄積数3" + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "槍術" @@ -113046,6 +114127,26 @@ msgstr "" "感覚x20%の命中精度上昇、感覚x50%の打撃装甲貫通。\n" "2ターン継続" +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "十字手" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" +"時間をかけて準備を整えることで、全身をフルに使った攻防が可能になります。\n" +"\n" +"回避スキル+1.0、感覚x50%のブロック時ダメージ軽減\n" +"「掌打」「双掌打」有効化\n" +"3ターン継続" + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "虎形拳" @@ -113108,6 +114209,25 @@ msgstr "" "\n" "筋力x25%の命中精度上昇、器用x25%の命中精度低下" +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "虎の猛攻" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" +"敵が途方に暮れたらこっちのものです。次に繰り出す攻撃は装甲を貫通します。\n" +"\n" +"筋力x50%の貫通力上昇\n" +"1ターン継続、最大蓄積数2" + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "詠春拳" @@ -113169,6 +114289,24 @@ msgstr "" "\n" "感覚x15% の回避スキル上昇、感覚x50%のブロック時ダメージ軽減" +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "標指" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch (Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" +"指を突き出す動きを多用する型を完璧に学べば、敵の弱点を的確に狙って撃退できるようになります!\n" +"\n" +"感覚x20%の命中精度上昇、「正拳突き(吹き飛ばし)」「横拳(吹き飛ばし)」有効化\n" +"2ターン継続" + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "酔拳" @@ -113298,6 +114436,34 @@ msgid "" "armor, +Perception fire armor." msgstr "筋力の値で斬撃耐性、器用の値で酸耐性、知性の値で電撃耐性、感覚の値で火炎耐性が増加します。" +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "激怒" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "どう料理してやりましょうか... 打撃与ダメージ+2、2ターン継続、最大蓄積数5" + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "雷撃" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2" +" times." +msgstr "2度の雷撃を繰り出します。感覚依存で電撃与ダメージ上昇、3ターン継続、最大蓄積数2" + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "燃えています!火炎与ダメージ上昇、5ターン継続" + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "サイボーグ格闘術" @@ -113343,6 +114509,28 @@ msgstr "" "\n" "ブロック+2、命中精度+1" +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "最適化" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic +#. Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"命中+1、全与ダメージ+2\n" +"3ターン継続、最大蓄積数3" + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "蜈蚣功" @@ -113385,6 +114573,25 @@ msgstr "" "行動コスト-4\n" "3ターン継続、最大蓄積数4" +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "百足の毒" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': +#. 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" +"最高のタイミングで毒が敵を蝕みます。\n" +"\n" +"\n" +"打撃与ダメージ+2\n" +"2ターン継続" + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "壁虎功" @@ -113525,6 +114732,24 @@ msgstr "" "「鋏撃」有効化\n" "2ターン継続、最大蓄積数2" +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "蠍の威嚇" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': +#. 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" +"怒ったサソリほど恐ろしいものはありません。攻撃中はだれも近寄れません。\n" +"\n" +"回避+1\n" +"1ターン継続" + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "蛤蟆功" @@ -113584,6 +114809,42 @@ msgstr "" "打撃/斬撃/刺突耐性-1\n" "6ターン継続、最大蓄積数6" +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "蝦蟇の瞑想" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad +#. Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" +"瞬間的に集中することで、皮膚を鉄のように硬くします。\n" +"\n" +"打撃/斬撃/刺突耐性+3\n" +"2ターン継続" + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "蝦蟇の毒" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" +"この毒によって、鉄の皮膚以外にも強みがあることを見せつけましょう。\n" +"\n" +"打撃与ダメージ+2\n" +"5ターン継続" + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "蛇功" @@ -113833,7 +115094,7 @@ msgstr "弱点を常に意識しておくことで優位性を保ちます。器 #: lang/json/martial_art_from_json.py msgid "Desert Wind" -msgstr "" +msgstr "砂漠の旋風" #. ~ Description for martial art '{'str': 'Desert Wind'}' #: lang/json/martial_art_from_json.py @@ -113843,22 +115104,23 @@ msgid "" "many Desert Wind maneuvers are in fact carefully honed gestures that evoke " "the power of fire, if performed correctly and with the proper focus." msgstr "" +"「砂漠の旋風」の戦闘技術は、素早い動きと旋回運動、炎のように強烈な攻撃に重点を置いています。複雑な回転と曲がりくねった軌道を組み合わせた斬撃は砂漠の旋風の技の多くに取り入れられていますが、集中して正しく実行すれば炎の力を引き出せる緻密で重要な動作です。" #. ~ initiate message for martial art '{'str': 'Desert Wind'}' #: lang/json/martial_art_from_json.py msgid "" "You feel a wave of heat wash over you as you assume a running combat stance." -msgstr "" +msgstr "走りながら戦闘態勢を整えると、熱波が全身を包みました。" #. ~ initiate message for martial art '{'str': 'Desert Wind'}' #: lang/json/martial_art_from_json.py #, python-format msgid "%s assumes into a running combat stance." -msgstr "" +msgstr "%sは走りながら戦闘態勢を整えました。" #: lang/json/martial_art_from_json.py msgid "Wind Stride" -msgstr "" +msgstr "旋風の歩み" #. ~ Description of buff 'Wind Stride' for martial art '{'str': 'Desert #. Wind'}' @@ -113869,10 +115131,14 @@ msgid "" "+1.0 Dodging skill.\n" "Lasts 1 turn." msgstr "" +"熱をもった風が周囲で渦巻き、素早く移動できるようになります。\n" +"\n" +"回避スキル+1.0\n" +"1ターン継続" #: lang/json/martial_art_from_json.py msgid "Zephyr Dance" -msgstr "" +msgstr "軟風の舞" #. ~ Description of buff 'Zephyr Dance' for martial art '{'str': 'Desert #. Wind'}' @@ -113883,10 +115149,14 @@ msgid "" "+1.0 Dodging skill, +1 Dodge attempt\n" "Lasts 1 turn." msgstr "" +"砂漠を撫でるそよ風のように優雅に回転し、攻撃を回避します。\n" +"\n" +"回避スキル+1.0、回避+1\n" +"1ターン継続" #: lang/json/martial_art_from_json.py msgid "Diamond Mind" -msgstr "" +msgstr "金剛石の心" #. ~ Description for martial art '{'str': 'Diamond Mind'}' #: lang/json/martial_art_from_json.py @@ -113898,21 +115168,22 @@ msgid "" "concept of the mind as the battleground. An enemy defeated in his mind must" " inevitably." msgstr "" +"真の速さは身体ではなく、心に宿る。金剛石の心を学ぶ者はこの認識を心に刻み、他者が知覚できない程の短時間で思考を変えられるように訓練します。思考と動作を高速化する力の正体は、脳内イメージを戦場に変えるという概念です。イメージの中で敗北した敵は、現実でも必然的に同じ道を辿ります。" #. ~ initiate message for martial art '{'str': 'Diamond Mind'}' #: lang/json/martial_art_from_json.py msgid "You concentrate and become very still for a moment." -msgstr "" +msgstr "集中力を高め、一瞬、しんと静まり返りました。" #. ~ initiate message for martial art '{'str': 'Diamond Mind'}' #: lang/json/martial_art_from_json.py #, python-format msgid "%s becomes very still for a moment." -msgstr "" +msgstr "%sは一瞬、しんと静まり返りました。" #: lang/json/martial_art_from_json.py msgid "Stance of Alacrity" -msgstr "" +msgstr "躍動の構え" #. ~ Description of buff 'Stance of Alacrity' for martial art '{'str': #. 'Diamond Mind'}' @@ -113923,10 +115194,13 @@ msgid "" "\n" "-10% move cost" msgstr "" +"自信と激情、明晰な心を共に高めることで、通常よりも少し速く動きます。一回の効果はわずかですが、移動する度に効果が加算されます。\n" +"\n" +"行動コスト-10%" #: lang/json/martial_art_from_json.py msgid "Pearl of Black Doubt" -msgstr "" +msgstr "疑心の黒真珠" #. ~ Description of buff 'Pearl of Black Doubt' for martial art '{'str': #. 'Diamond Mind'}' @@ -113937,10 +115211,46 @@ msgid "" "+1 Dodge attempt\n" "Lasts 1 turn. Stacks 2 times" msgstr "" +"敵が攻撃を外す度に、まるで無力な牡蠣の体内で成長する黒真珠のように疑念が増幅され、どんどん攻撃が命中しなくなります。\n" +"\n" +"回避+1\n" +"1ターン継続、最大蓄積数2" #: lang/json/martial_art_from_json.py -msgid "Hylian Swordsmanship" +msgid "Quicksilver Motion" +msgstr "水銀の構え" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': +#. 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence combine to allow you to make a fast, bold move that catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." msgstr "" +"目にも留まらぬ速度で動きます。スピード、反射神経、そして無限の自信を身に着けることで、素早く大胆な動きによって敵を休ませません。\n" +"\n" +"速度+50\n" +"1ターン継続" + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "肉体を超越する精神" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond +#. Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Hylian Swordsmanship" +msgstr "ハイリア剣術" #. ~ Description for martial art '{'str': 'Hylian Swordsmanship'}' #: lang/json/martial_art_from_json.py @@ -113950,21 +115260,22 @@ msgid "" "defense by using spins, jumps, and flips to confuse enemies and strike from " "unexpected angles." msgstr "" +"時代を超えて様々な伝説の英雄たちに受け継がれてきた、貴重な戦闘形態です。スピン、ジャンプ、宙返りを繰り出して敵を混乱させ、機動力を利用して予想外の角度から攻撃することで攻防を有利に進めます。" #. ~ initiate message for martial art '{'str': 'Hylian Swordsmanship'}' #: lang/json/martial_art_from_json.py msgid "You begin to step lightly from side to side." -msgstr "" +msgstr "横に軽くステップを踏み始めました。" #. ~ initiate message for martial art '{'str': 'Hylian Swordsmanship'}' #: lang/json/martial_art_from_json.py #, python-format msgid "%s begins to step lightly from side to side." -msgstr "" +msgstr "%sは横に軽くステップを踏み始めました。" #: lang/json/martial_art_from_json.py msgid "Combat Acrobat" -msgstr "" +msgstr "アクロバット(序位)" #. ~ Description of buff 'Combat Acrobat' for martial art '{'str': 'Hylian #. Swordsmanship'}' @@ -113974,10 +115285,13 @@ msgid "" "\n" "+1.0 Dodging skill." msgstr "" +"常に軽やかに飛び回ります。打たれそうなら避ければいいのです。\n" +"\n" +"回避スキル+1.0" #: lang/json/martial_art_from_json.py msgid "Intermediate Combat Acrobat" -msgstr "" +msgstr "アクロバット(中位)" #. ~ Description of buff 'Intermediate Combat Acrobat' for martial art #. '{'str': 'Hylian Swordsmanship'}' @@ -113987,10 +115301,13 @@ msgid "" "\n" "+1.0 Dodging skill." msgstr "" +"訓練を重ね、戦闘時の動きが更に軽快になっています。\n" +"\n" +"回避スキル+1.0" #: lang/json/martial_art_from_json.py msgid "Master Combat Acrobat" -msgstr "" +msgstr "アクロバット(極位)" #. ~ Description of buff 'Master Combat Acrobat' for martial art '{'str': #. 'Hylian Swordsmanship'}' @@ -114000,10 +115317,13 @@ msgid "" "\n" "+1.0 Dodging skill." msgstr "" +"数多の戦闘経験を経て、一流の回避技術を身に着けました!\n" +"\n" +"回避スキル+1.0" #: lang/json/martial_art_from_json.py msgid "Dash Attack" -msgstr "" +msgstr "ダッシュ攻撃" #. ~ Description of buff 'Dash Attack' for martial art '{'str': 'Hylian #. Swordsmanship'}' @@ -114015,10 +115335,14 @@ msgid "" "+10% damage.\n" "Lasts 1 turn. Stacks 3 times." msgstr "" +"瞬発力を利用して敵に強力な攻撃を叩き込みます。\n" +"\n" +"与ダメージ+10%\n" +"1ターン継続、最大蓄積数3" #: lang/json/martial_art_from_json.py msgid "Flurry Rush" -msgstr "" +msgstr "ラッシュ攻撃" #. ~ Description of buff 'Flurry Rush' for martial art '{'str': 'Hylian #. Swordsmanship'}' @@ -114030,6 +115354,51 @@ msgid "" "-25% move cost.\n" "Lasts 1 turn." msgstr "" +"攻撃を完璧にかわした際に、すぐさま反撃に転じます。\n" +"\n" +"行動コスト-25%\n" +"1ターン継続" + +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Heart" +msgstr "鋼の心" + +#. ~ Description for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Absolute mastery of the sword is the goal of the Iron Heart discipline. " +"Through unending practice and study, the Iron Heart adept achieves " +"superhuman skill with her weapons. Iron Heart maneuvers are demonstrations " +"of uncanny martial skill—weaving patterns of steel that dizzy, confuse, and " +"ultimately kill with no recourse." +msgstr "" +"剣の扱いを完璧にマスターすることが「鋼の心」の目標です。絶え間ない練習と研究によって、鋼の心の修練者は手にした武器で超人的な技を放ちます。鋼の心の動きは驚異的な武術の実戦であり、目を眩ませ、混乱させ、最終的に抵抗させず殺すという一定のパターンをなぞります。" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "You push away your fear and stand tall." +msgstr "恐怖を排して背筋を伸ばしました。" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s takes a bold and fearless stance." +msgstr "%sは大胆不敵な構えをとりました。" #: lang/json/martial_art_from_json.py msgid "Panzer Kunst" @@ -114090,6 +115459,408 @@ msgstr "" "打撃装甲貫通+3\n" "2ターン継続" +#: lang/json/martial_art_from_json.py +msgid "Pokken" +msgstr "ポッ拳" + +#. ~ Description for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Pokken or \"Pocket Fist\" is a strange martial art developed from the famous" +" Pokemon video game series. Somehow, a group of dedicated fans managed to " +"combine the moves used by various pokemon with multiple existing martial " +"arts such as boxing and karate. Amazingly, it actually works. Some might " +"even say it's a super effective way to fight." +msgstr "" +"ポッ拳あるいは「ポケット・フィスト」は、有名なテレビゲーム「ポケモン」シリーズから発展した、奇妙な格闘技です。熱心なファン達は努力を重ね、様々なポケモンの動きとボクシングや空手などの既存の格闘技を組み合わせることに成功しました。驚くべきことに、この格闘術は実戦的であり、非常に効果的だという人もいます。" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "You get ready to battle." +msgstr "バトルの準備を整えました。" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s is about to challenge someone to a battle." +msgstr "%sはバトルを挑む準備を整えました。" + +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Setting Sun" +msgstr "落陽" + +#. ~ Description for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Setting Sun discipline teaches its initiates to turn their opponents' " +"strength against them. With a quick shift in stance and carefully aimed " +"attack, a Setting Sun warrior sends a charging enemy tumbling in a new " +"direction." +msgstr "" +"「落陽」の技術は、敵の力を敵に返すことに重点を置いています。構えを素早く変えて慎重に攻撃を仕掛け、突っ込んできた敵の力を別の方向にずらしてかわします。" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "You shift your weight and prepare to defend yourself." +msgstr "重心をずらし、自身を守る準備を整えました。" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s shifts their weight and assumes a new stance." +msgstr "%sは重心をずらし、今までと異なる構えをとりました。" + +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and \"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Shii-Cho" +msgstr "シャイ=チョー" + +#. ~ Description for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Shii-Cho, \"The way of the Sarlacc\" was the first form lightsaber combat " +"developed by the Jedi during their transition from metal weaponry to " +"lightsabers. Shii-Cho is regarded as a training form that all Jedi learn to" +" understand the basics of armed combat. Shii-Cho excels at fighting against" +" groups but lacks the offensive power of the other lightsaber forms." +msgstr "" +"シャイ=チョー、別名「サルラック戦法」は、ジェダイの武器が金属剣からライトセーバーへ移行する時期に開発された、ライトセーバーを用いる初の戦闘技術です。全てのジェダイが武器をもった戦闘の基本を理解するために学ぶ、訓練用のフォームとされています。集団戦を得意としていますが、他の戦法と比べると攻撃力に欠けています。" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You place one foot back and hold your weapon vertically on your dominant " +"side." +msgstr "片足を一歩後ろに下げ、武器を利き手側に立てて構えました。" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s places one foot back and hold their weapon vertically." +msgstr "%sは片足を一歩後ろに下げ、武器を立てて構えました。" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are a determined warrior. Your inner calm aids you in landing your strikes and protecting yourself.\n" +"\n" +"Blocked damage reduced by 100% of Strength, +1 Accuracy." +msgstr "" +"戦士としての決意を高めました。澄みきった心は攻撃と防御の要です。\n" +"\n" +"筋力x100%のブロック時ダメージ軽減、命中精度+1" + +#: lang/json/martial_art_from_json.py +msgid "Apprentice Training" +msgstr "見習いの訓練" + +#. ~ Description of buff 'Apprentice Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training in Shii-Cho teaches you how to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"シャイ=チョーを使った訓練によって、複数の敵との戦い方を学びます。\n" +"\n" +"ブロック+1、ブロック効果+1" + +#: lang/json/martial_art_from_json.py +msgid "Knight Training" +msgstr "騎士の訓練" + +#. ~ Description of buff 'Knight Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Further training in Shii-Cho improves your ability to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"シャイ=チョーを使った更なる訓練によって、複数の敵との戦闘技術を向上させます。\n" +"\n" +"ブロック+1、ブロック効果+1" + +#: lang/json/martial_art_from_json.py +msgid "Master Training" +msgstr "マスターの訓練" + +#. ~ Description of buff 'Master Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"As a master of Shii-Cho, your ability to fight against groups is second to none.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"シャイ=チョーをマスターしました。集団戦闘では誰にも負けません。\n" +"\n" +"ブロック+1、ブロック効果+1" + +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to die.\n" +"\n" +"+5% critical hit chance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "アルコール" @@ -114558,22 +116329,22 @@ msgstr "傷跡の付いた" #: lang/json/material_from_json.py msgid "Prismetallic Blend" -msgstr "" +msgstr "プリズメタル" #: lang/json/material_from_json.py msgid "Chromogenic Weave" -msgstr "" +msgstr "クロモジェニック繊維" #: lang/json/material_from_json.py msgid "Collagenic Polymer" -msgstr "" +msgstr "高分子コラーゲン" #: lang/json/material_from_json.py msgid "Emulsified Hydrogel" -msgstr "" +msgstr "乳化ハイドロゲル" #: lang/json/material_from_json.py -msgid "pupled" +msgid "pulped" msgstr "" #: lang/json/material_from_json.py @@ -116298,7 +118069,7 @@ msgid "Can you go find my son and tell him to check in with us." msgstr "息子を見つけたら、私たちの所へ戻ってくるよう伝えてほしいんだ。" #: lang/json/mission_def_from_json.py lang/json/mission_def_from_json.py -#: lang/json/talk_topic_from_json.py +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py msgid "Thank you." msgstr "ありがとう。" @@ -116592,9 +118363,9 @@ msgstr "物資を探すのを手伝ってくれると助かるんだけど。" #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20" +"We could use some 3 liter jars to preserve our produce. Can you bring me 10" " large three liter jars? I'll give you some preserves in exchange." -msgstr "ガラス瓶を使って農作物を保存したいんだ。3Lのガラス瓶を20個持ってきてもらえないか?報酬としてジャムをあげよう。" +msgstr "" #: lang/json/mission_def_from_json.py msgid "Thank you. It's important to preserve foods while we can." @@ -118378,6 +120149,87 @@ msgstr "ええ、もちろん。" msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "何もないじゃないか。自分で金を探すことにするよ。" +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check" +" it out, I'll owe you a favor." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "2個の蒸留器を作る" @@ -119667,6 +121519,56 @@ msgstr "この素晴らしい部品をどう改造しようか。" msgid "I can't be Dr Frankenstein unless you get me these." msgstr "用意してもらえないと、フランケンシュタイン博士になれないじゃないか。" +#: lang/json/mission_def_from_json.py +msgid "Gather meat for Bo Baronyx. About 8 should do it." +msgstr "ボー・バロニクスのために肉塊を集めましょう。8個必要です。" + +#: lang/json/mission_def_from_json.py +msgid "The eaters are hungry. They need meat" +msgstr "捕食者たちは腹を空かせてる。肉が必要だ。" + +#: lang/json/mission_def_from_json.py +msgid "" +"If you wish to feed the eaters, your work will be rewarded. Go out, butcher" +" a pure animal. Not a false eater, the meat must be good to eat. Then " +"bring me the meat and I will see to the eaters." +msgstr "" +"捕食者の餌を用意してくれたら、礼をしよう。屋外で、まともな動物を解体してくれ。まともじゃない動物はダメだ。問題なく食べられる物を頼むよ。肉塊を持ってきてもらえれば、捕食者たちの世話ができる。" + +#: lang/json/mission_def_from_json.py +msgid "Excellent. The eaters must feed." +msgstr "素晴らしい。これで捕食者たちに飯を用意できる。" + +#: lang/json/mission_def_from_json.py +msgid "Understood. The great eaters will feed either way." +msgstr "分かった。偉大なる捕食者はいつも腹を空かせているよ。" + +#: lang/json/mission_def_from_json.py +msgid "" +"Some of the animals have become touched by the pretenders in recent days, " +"larger and more dangerous, producing tainted mutant meat. This will not " +"work for the great eaters, it must be the true meat." +msgstr "" +"ここ数日、動物たちは何かの影響を受けてより大きく危険になっている。肉も汚染された変異肉になってしまった。捕食者たちの健康に悪いから、本物の肉を用意してくれ。" + +#: lang/json/mission_def_from_json.py +msgid "Have you brought meat?" +msgstr "肉塊を持ってきたのか?" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed." +msgstr "これで捕食者たちに飯を用意できる。" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed I am sure." +msgstr "捕食者が食べてくれると良いのだが。" + +#: lang/json/mission_def_from_json.py +msgid "" +"I see no meat. There is meat in the forests and swamps waiting for the " +"eaters." +msgstr "肉塊が見当たらないようだが。森や沼には捕食者に食べられるのを待っている肉たちがいるはずだ。" + #: lang/json/mission_def_from_json.py msgid "Retrieve Magic Book" msgstr "呪文書を見つける" @@ -120360,12 +122262,12 @@ msgstr "意欲デバッグ" #. ~ Move mode name #: lang/json/move_modes_from_json.py msgid "walk" -msgstr "" +msgstr "歩行" #. ~ Move mode character in move mode menu #: lang/json/move_modes_from_json.py msgid "w" -msgstr "" +msgstr "歩" #. ~ movement-type #: lang/json/move_modes_from_json.py src/advanced_inv.cpp src/weather.cpp @@ -120390,12 +122292,12 @@ msgstr "メックの脚部出力を少し上げました。" #. ~ Move mode name #: lang/json/move_modes_from_json.py msgid "run" -msgstr "" +msgstr "駆足" #. ~ Move mode character in move mode menu #: lang/json/move_modes_from_json.py msgid "r" -msgstr "" +msgstr "走" #. ~ movement-type #: lang/json/move_modes_from_json.py @@ -120430,22 +122332,22 @@ msgstr "動物が疲れているため速度を上げられません。" #. ~ Failure to switch to this move mode, mech steed #: lang/json/move_modes_from_json.py msgid "Your mech's leg servos are unable to operate faster." -msgstr "" +msgstr "サーボモーターが付いた機械の脚は速く動きません。" #. ~ Move mode name #: lang/json/move_modes_from_json.py msgid "crouch" -msgstr "" +msgstr "屈む" #. ~ Move mode character in move mode menu #: lang/json/move_modes_from_json.py msgid "c" -msgstr "c" +msgstr "屈" #. ~ movement-type #: lang/json/move_modes_from_json.py msgid "C" -msgstr "C" +msgstr "屈" #. ~ Successfully switch to this move mode, no steed #: lang/json/move_modes_from_json.py @@ -121985,6 +123887,23 @@ msgid "" "footing." msgstr "より速く移動できます。平らな場所での移動時は行動コストに15%のボーナスを得ます。" +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore" +msgstr "反射性発光器官" + +#. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "" +"A photophore has grown from your head. You can't consciously control it, " +"and it might start to shine in response to your emotions or your " +"physiological state." +msgstr "頭部から発光器官が生えています。意識的にはコントロールできず、感情や身体の状況に応じて光ります。" + +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "弱い発光器官" @@ -121997,14 +123916,51 @@ msgid "" "mating season." msgstr "頭部から発光器官が伸び、弱々しい光を放っています。暗闇でも目立ち、交尾の時期にパートナーを引き寄せるのに便利です。" +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "発光器官" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." -msgstr "発光器官が眩い光を放っています。" +msgid "You can make your photophore glow brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Normal Human" +msgstr "普通の人間" + +#. ~ Description for {'str': 'Normal Human'} +#: lang/json/mutation_from_json.py +msgid "" +"You're a normal human, there's nothing wrong with you. No need to worry." +msgstr "何も問題がない、普通の人間です。心配する必要はありません。" + +#: lang/json/mutation_from_json.py +msgid "Violent Monster" +msgstr "凶暴な怪物" + +#. ~ Description for {'str': 'Violent Monster'} +#: lang/json/mutation_from_json.py +msgid "Anger clouds your mind, you can't think straight but you feel strong." +msgstr "怒りによって心が曇り、まともな思考ができなくなりますが、強くなった気がします。" #: lang/json/mutation_from_json.py msgid "Good Hearing" @@ -122099,10 +124055,12 @@ msgstr "高速治癒" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." -msgstr "睡眠時のHP回復速度が速くなり、起きている時ですら徐々にHPが回復します。" +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." +msgstr "" #: lang/json/mutation_from_json.py msgid "Light Eater" @@ -122241,7 +124199,7 @@ msgstr "整理上手" msgid "" "You pack things very efficiently! You can retrieve things from containers " "10% faster." -msgstr "" +msgstr "荷物を効率的に整頓できます。容器内からアイテムを拾得する速度が10%上昇します。" #: lang/json/mutation_from_json.py msgid "Strong Back" @@ -122736,8 +124694,11 @@ msgstr "低速治癒" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." -msgstr "傷の治りが遅くなります。睡眠時の体力回復量が減少します。" +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Poor Healer" @@ -122745,10 +124706,11 @@ msgstr "治癒力不足" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to" -" recover only a third of usual HP." -msgstr "睡眠中の回復力が大きく損なわれており、通常HPの1/3までしかHPが自然回復しません。" +"Your health recovery is severely impaired. Your HP whilst asleep as well as" +" your broken limbs heal at 33% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Imperceptive Healer" @@ -122756,10 +124718,11 @@ msgstr "治癒力欠乏" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth" -" of usual HP." -msgstr "睡眠中の回復力が大きく損なわれており、通常HPの1/10までしかHPが自然回復しません。" +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP" +" whilst asleep as well as your broken limbs heal at 10% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Far-Sighted" @@ -122835,7 +124798,7 @@ msgstr "整頓下手" msgid "" "You are terrible at organizing and storing your possessions. You retrieve " "things from containers 10% slower." -msgstr "" +msgstr "持ち物を整理整頓するのが苦手です。容器内からアイテムを拾得する速度が10%低下します。" #: lang/json/mutation_from_json.py msgid "Illiterate" @@ -123474,10 +125437,11 @@ msgstr "超高速治癒" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not " -"sleeping." -msgstr "身体が緩やかに治癒していきます。寝ていない時にもHPを回復します。" +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Regeneration" @@ -123485,8 +125449,12 @@ msgstr "再生力" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." -msgstr "身体が信じられない速度で傷を再生します。" +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster" +" whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16" +" times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Reptilian Healing" @@ -123494,8 +125462,10 @@ msgstr "爬虫類の治癒力" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." -msgstr "手足が致命的な傷を負ってしまっても、特に困難を伴わずに自分自身の治癒力で回復します。" +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Very Little Sleep" @@ -127531,7 +129501,7 @@ msgstr "「恐縮だが」、バグに用心しておいてくれないか?" #: lang/json/mutation_from_json.py msgid "Debug Very Strong Back" -msgstr "" +msgstr "丈夫な足腰(デバッグ専用)" #. ~ Description for {'str': 'Debug Very Strong Back'} #: lang/json/mutation_from_json.py @@ -127655,11 +129625,12 @@ msgstr "個人的な好みなのか子供時代のトラウマなのか不明で #: lang/json/mutation_from_json.py msgid "Fast Reflexes" -msgstr "" +msgstr "高反射神経" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." msgstr "" #: lang/json/mutation_from_json.py @@ -128873,7 +130844,7 @@ msgstr "酔って戦う古代拳法を知らぬ間に身に付けました!ア #: lang/json/mutation_from_json.py msgid "Hero's Spirit" -msgstr "" +msgstr "英雄の魂" #. ~ Description for {'str': "Hero's Spirit"} #: lang/json/mutation_from_json.py @@ -128881,28 +130852,51 @@ msgid "" "You have studied the deeds and legends of ancient heroes. From your " "research, you have learned an ancient form of combat called Hylian " "Swordsmanship." -msgstr "" +msgstr "古代の英雄たちの偉業や伝説を研究し、古代の戦闘技術であるハイリア剣術を学びました。" #: lang/json/mutation_from_json.py msgid "Ki Strike" -msgstr "" +msgstr "気の力" #. ~ Description for {'str': 'Ki Strike'} #: lang/json/mutation_from_json.py msgid "" "Who needs weapons? You deal more melee damage while unarmed. This damage " "improves as your unarmed skill increases." -msgstr "" +msgstr "武器なんて必要ですか?武器を装備していない時の方が攻撃力が高まります。" + +#: lang/json/mutation_from_json.py +msgid "Jedi Training" +msgstr "ジェダイの訓練" + +#. ~ Description for {'str': 'Jedi Training'} +#: lang/json/mutation_from_json.py +msgid "" +"You are trained in the ways of the Jedi. Your knowledge allows you to " +"utilize a form of lightsaber combat." +msgstr "ジェダイの訓練を受けました。ライトセーバーを使った戦い方を知っています。" + +#: lang/json/mutation_from_json.py +msgid "Pokken Master" +msgstr "ポッ拳の使い手" + +#. ~ Description for {'str': 'Pokken Master'} +#: lang/json/mutation_from_json.py +msgid "" +"You are well versed in the monsterous Pocket Fist martial art. Train well, " +"because it is your destiny to be a master." +msgstr "奇怪なポケット・フィストの格闘技に精通しています。よく鍛錬すれば、きっと師匠になれます。" #: lang/json/mutation_from_json.py msgid "Martial Adept" -msgstr "" +msgstr "武道の達人" #. ~ Description for {'str': 'Martial Adept'} #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." msgstr "" #: lang/json/mutation_from_json.py @@ -129094,7 +131088,7 @@ msgstr "マナの旋風" #: lang/json/mutation_from_json.py msgid "Manatouched Mana Efficiency" -msgstr "" +msgstr "マナタッチ(貯蔵量上昇)" #. ~ Description for {'str': 'Manatouched Mana Efficiency'} #. ~ Description for Greater Mana Efficiency @@ -129104,7 +131098,7 @@ msgstr "体内に溜めておけるマナの量が平均より大幅に高くな #: lang/json/mutation_from_json.py msgid "Manatouched Mana Regeneration" -msgstr "" +msgstr "マナタッチ(回復速度上昇)" #. ~ Description for Manatouched Mana Regeneration #. ~ Description for Greater Mana Regeneration @@ -129114,7 +131108,7 @@ msgstr "マナの回復速度が通常より大幅に上昇します。" #: lang/json/mutation_from_json.py msgid "Manatouched Mana Sensitivity" -msgstr "" +msgstr "マナタッチ(消費効率上昇)" #. ~ Description for Manatouched Mana Sensitivity #. ~ Description for Greater Mana Sensitivity @@ -129890,6 +131884,14 @@ msgstr "知性マストドン" msgid "Humans created me. Let's see what I can be on my own." msgstr "人類が私を創った。自分の力でどこまでやれるだろうか。" +#: lang/json/npc_class_from_json.py +msgid "Swamper" +msgstr "スワンパー" + +#: lang/json/npc_class_from_json.py +msgid "The great eaters have returned and they must be fed" +msgstr "捕食者たちが帰ってきたから、飯を用意しないと。" + #: lang/json/npc_class_from_json.py msgid "Operator" msgstr "特殊部隊員" @@ -130175,6 +132177,14 @@ msgstr "異生物学者、狂人" msgid "Millyficen Whately" msgstr "ミリフィセン ウィートリー" +#: lang/json/npc_from_json.py +msgid "CEO" +msgstr "CEO" + +#: lang/json/npc_from_json.py +msgid "Bo Baronyx" +msgstr "ボー・バロニクス" + #: lang/json/npc_from_json.py msgid "magus" msgstr "メイガス" @@ -131145,7 +133155,7 @@ msgstr "電器店(屋上)" #: lang/json/overmap_terrain_from_json.py msgid "electronics store 2nd floor" -msgstr "" +msgstr "電器店(2階)" #: lang/json/overmap_terrain_from_json.py msgid "sporting goods store" @@ -131909,15 +133919,15 @@ msgstr "軽工場" #: lang/json/overmap_terrain_from_json.py msgid "private airport" -msgstr "" +msgstr "私設空港" #: lang/json/overmap_terrain_from_json.py msgid "private airport runway" -msgstr "" +msgstr "施設空港(滑走路)" #: lang/json/overmap_terrain_from_json.py msgid "helicopter pad" -msgstr "" +msgstr "ヘリコプター発着場" #: lang/json/overmap_terrain_from_json.py msgid "science lab" @@ -132919,7 +134929,7 @@ msgstr "州立葬儀場(屋上)" #: lang/json/overmap_terrain_from_json.py msgid "Dinosaur Exhibit" -msgstr "" +msgstr "恐竜園" #: lang/json/overmap_terrain_from_json.py msgid "wildlife field office" @@ -132939,7 +134949,7 @@ msgstr "スカベンジャーの拠点" #: lang/json/overmap_terrain_from_json.py msgid "goblin encampment" -msgstr "" +msgstr "ゴブリンの野営地" #: lang/json/overmap_terrain_from_json.py msgid "magic shop" @@ -134047,6 +136057,7 @@ msgid "" " mean a thing anymore, and for all the crap thrown your way, you're still " "standing. God damn, you need a drink." msgstr "" +"社会から爪弾きにされ、家も家族も友人も失くし、酒瓶だけが慰めでした。しかし社会は意義を失いました。爪弾きにされてもなお、自分の足で立っています。とにかく、まずは酒を飲みましょうか。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134062,6 +136073,7 @@ msgid "" " mean a thing anymore, and for all the crap thrown your way, you're still " "standing. God damn, you need a drink." msgstr "" +"社会から爪弾きにされ、家も家族も友人も失くし、酒瓶だけが慰めでした。しかし社会は意義を失いました。爪弾きにされてもなお、自分の足で立っています。とにかく、まずは酒を飲みましょうか。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134076,6 +136088,7 @@ msgid "" "floor and everything has gone completely to shit. The only thing running " "through your head, though, is where you're gonna find your next hit." msgstr "" +"昨晩何があったのかよく覚えていませんが、床で目を覚ますと、何もかもが完全におかしくなっていました。頭の中には、この後キメるヤクをどこで探そうかという悩み以外何も浮かんできません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134090,6 +136103,7 @@ msgid "" "floor and everything has gone completely to shit. The only thing running " "through your head, though, is where you're gonna find your next hit." msgstr "" +"昨晩何があったのかよく覚えていませんが、床で目を覚ますと、何もかもが完全におかしくなっていました。頭の中には、この後キメるヤクをどこで探そうかという悩み以外何も浮かんできません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134104,6 +136118,7 @@ msgid "" "your pain. With the pharmacies shut down and your dealers turned undead, " "satisfying those cravings just got a lot more difficult." msgstr "" +"若い頃のちょっとした事がきっかけで、鎮痛用のアヘンにハマりました。薬局は閉鎖され、売人もゾンビになってしまったので、この欲求は中々満たせそうにありません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134118,6 +136133,7 @@ msgid "" "your pain. With the pharmacies shut down and your dealers turned undead, " "satisfying those cravings just got a lot more difficult." msgstr "" +"若い頃のちょっとした事がきっかけで、鎮痛用のアヘンにハマりました。薬局は閉鎖され、売人もゾンビになってしまったので、この欲求は中々満たせそうにありません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134132,6 +136148,7 @@ msgid "" "tourists around. The Cataclysm has grounded you for now, but the sky still " "calls to you…" msgstr "" +"パイロットの免許を取得し、会社員や観光客を運んで生計を立てていました。大変動によって地上に縛られてしまいましたが、今も空の呼び声が聞こえる気がします..." #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134146,6 +136163,7 @@ msgid "" "tourists around. The Cataclysm has grounded you for now, but the sky still " "calls to you…" msgstr "" +"パイロットの免許を取得し、会社員や観光客を運んで生計を立てていました。大変動によって地上に縛られてしまいましたが、今も空の呼び声が聞こえる気がします..." #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134161,6 +136179,7 @@ msgid "" " loyal dog is still at your side, though, ready to face the Cataclysm with " "you." msgstr "" +"忠犬と協力して麻薬密輸業者を逮捕する仕事に人生を捧げていましたが、世界が崩壊し、もはやそんな仕事はなくなりました。しかし少なくとも、隣にいる忠実な友は大変動に挑む覚悟を決めたようです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134176,6 +136195,7 @@ msgid "" " loyal dog is still at your side, though, ready to face the Cataclysm with " "you." msgstr "" +"忠犬と協力して麻薬密輸業者を逮捕する仕事に人生を捧げていましたが、世界が崩壊し、もはやそんな仕事はなくなりました。しかし少なくとも、隣にいる忠実な友は大変動に挑む覚悟を決めたようです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134188,7 +136208,7 @@ msgctxt "prof_desc_male" msgid "" "Everyone is dead? Oh well, it doesn't matter; it's not like you got along " "with people much anyway. Your beloved cats are all the friends you need!" -msgstr "" +msgstr "全人類が死んでしまったのでしょうか?いや、そんなの気にする必要はありません。人間なんて二の次です。ネコさえいれば、他の友は不要です!" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134201,7 +136221,7 @@ msgctxt "prof_desc_female" msgid "" "Everyone is dead? Oh well, it doesn't matter; it's not like you got along " "with people much anyway. Your beloved cats are all the friends you need!" -msgstr "" +msgstr "全人類が死んでしまったのでしょうか?いや、そんなの気にする必要はありません。人間なんて二の次です。ネコさえいれば、他の友は不要です!" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134217,6 +136237,7 @@ msgid "" "with your life. Who's going to respect your authority when the government " "this badge represents might not even exist anymore?" msgstr "" +"救助要請を受けて現場に向かう、ちっぽけな街の警官でしたが、すぐに自分自身が救助を求める羽目になり、なんとか命からがら逃げ出しました。もはや警察の権威が何の役に立つのでしょう?このバッジの威光を保証する政府すら、消えてしまったのでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134232,6 +136253,7 @@ msgid "" "with your life. Who's going to respect your authority when the government " "this badge represents might not even exist anymore?" msgstr "" +"救助要請を受けて現場に向かう、ちっぽけな街の警官でしたが、すぐに自分自身が救助を求める羽目になり、なんとか命からがら逃げ出しました。もはや警察の権威が何の役に立つのでしょう?このバッジの威光を保証する政府すら、消えてしまったのでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134246,6 +136268,7 @@ msgid "" "when the Cataclysm struck. Now your prime suspect is dead. Everyone's " "dead. You could really use a smoke." msgstr "" +"ある殺人事件の重要な手掛かりを掴んだその時、大変動が起こりました。第一容疑者も、他の誰も彼もが死んでしまいました。取りあえずタバコを吸いましょうか。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134260,6 +136283,7 @@ msgid "" "when the Cataclysm struck. Now your prime suspect is dead. Everyone's " "dead. You could really use a smoke." msgstr "" +"ある殺人事件の重要な手掛かりを掴んだその時、大変動が起こりました。第一容疑者も、他の誰も彼もが死んでしまいました。取りあえずタバコを吸いましょうか。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134275,6 +136299,7 @@ msgid "" "apocalypse. Unfortunately, the chain of command has broken down; your only " "mission now is to stay alive." msgstr "" +"警察の精鋭部隊の一員として十全の訓練をこなしており、恐るべき非常事態を生き抜けるだけの装備も揃っています。しかし、残念ながら指揮系統は崩壊してしまいました。最後にして唯一の指令は、生き延びることです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134290,6 +136315,7 @@ msgid "" "apocalypse. Unfortunately, the chain of command has broken down; your only " "mission now is to stay alive." msgstr "" +"警察の精鋭部隊の一員として十全の訓練をこなしており、恐るべき非常事態を生き抜けるだけの装備も揃っています。しかし、残念ながら指揮系統は崩壊してしまいました。最後にして唯一の指令は、生き延びることです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134305,6 +136331,7 @@ msgid "" "Unfortunately, the chain of command has broken down; your only mission now " "is to stay alive." msgstr "" +"警察の精鋭部隊の一員として十全の訓練をこなしている、近接戦闘の達人です。しかし、残念ながら指揮系統は崩壊してしまいました。最後にして唯一の指令は、生き延びることです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134320,6 +136347,7 @@ msgid "" "Unfortunately, the chain of command has broken down; your only mission now " "is to stay alive." msgstr "" +"警察の精鋭部隊の一員として十全の訓練をこなしている、近接戦闘の達人です。しかし、残念ながら指揮系統は崩壊してしまいました。最後にして唯一の指令は、生き延びることです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134335,6 +136363,7 @@ msgid "" "the line, and you can't afford to miss if you don't want to end up as " "something's dinner." msgstr "" +"研ぎ澄まされた精密射撃の技で任務を果たし、たとえ孤立しようが、敵を狙い撃つことで罪なき市民を守ってきました。今は生き延びることが第一目標です。少しでも狙いを外せば、誰かの夕食にされてしまいます。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134350,6 +136379,7 @@ msgid "" "the line, and you can't afford to miss if you don't want to end up as " "something's dinner." msgstr "" +"研ぎ澄まされた精密射撃の技で任務を果たし、たとえ孤立しようが、敵を狙い撃つことで罪なき市民を守ってきました。今は生き延びることが第一目標です。少しでも狙いを外せば、誰かの夕食にされてしまいます。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134365,6 +136395,7 @@ msgid "" "bit of luck and a lot of head-bashing that you got away in one piece, and " "the worst is yet to come." msgstr "" +"以前から暴徒は残忍な連中でしたが、死んでも蘇って生者を貪るなんてことはありませんでした。防御線が崩壊し、人混みに揉まれながら、幸運にも無傷で逃げ出せました。最悪の事態が起こるのはこれからです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134380,6 +136411,7 @@ msgid "" "bit of luck and a lot of head-bashing that you got away in one piece, and " "the worst is yet to come." msgstr "" +"以前から暴徒は残忍な連中でしたが、死んでも蘇って生者を貪るなんてことはありませんでした。防御線が崩壊し、人混みに揉まれながら、幸運にも無傷で逃げ出せました。最悪の事態が起こるのはこれからです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134394,6 +136426,7 @@ msgid "" "been around the block a few times, and you'd charge way more than a dollar -" " and get it, too!" msgstr "" +"1ドルのためなら母親でも売るような奴だと蔑まれていましたが、そんなことは一切していません!少し街を歩くだけで1ドル以上の価値ある情報を見つけ、手に入れることもできる才能を持っています!" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134408,6 +136441,7 @@ msgid "" "been around the block a few times, and you'd charge way more than a dollar -" " and get it, too!" msgstr "" +"1ドルのためなら母親でも売るような奴だと蔑まれていましたが、そんなことは一切していません!少し街を歩くだけで1ドル以上の価値ある情報を見つけ、手に入れることもできる才能を持っています!" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134423,6 +136457,7 @@ msgid "" "your side more than your trusty bow. So, when it did, you made sure to " "bring it along." msgstr "" +"子供の頃から狩猟が大好きで、すぐにアーチェリーの才能を開花させました。文明が崩壊したとしても、信頼できる弓以外に望むものは何もありません。その思いが本当かどうか確かめるため、大変動に立ち向かいましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134438,6 +136473,7 @@ msgid "" "your side more than your trusty bow. So, when it did, you made sure to " "bring it along." msgstr "" +"子供の頃から狩猟が大好きで、すぐにアーチェリーの才能を開花させました。文明が崩壊したとしても、信頼できる弓以外に望むものは何もありません。その思いが本当かどうか確かめるため、大変動に立ち向かいましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134453,6 +136489,7 @@ msgid "" "at your side more than your trusty crossbow. So, when it did, you made sure" " to bring it along." msgstr "" +"子供の頃から狩猟が大好きで、特にクロスボウを好んで使っていました。文明が崩壊したとしても、信頼できるクロスボウ以外に望むものは何もありません。その思いが本当かどうか確かめるため、大変動に立ち向かいましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134468,6 +136505,7 @@ msgid "" "at your side more than your trusty crossbow. So, when it did, you made sure" " to bring it along." msgstr "" +"子供の頃から狩猟が大好きで、特にクロスボウを好んで使っていました。文明が崩壊したとしても、信頼できるクロスボウ以外に望むものは何もありません。その思いが本当かどうか確かめるため、大変動に立ち向かいましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134483,6 +136521,7 @@ msgid "" "want at your side more than your trusty shotgun. So, when it did, you made " "sure to bring it along." msgstr "" +"子供の頃から狩猟が大好きで、特にショットガンを好んで使っていました。文明が崩壊したとしても、信頼できるショットガン以外に望むものは何もありません。その思いが本当かどうか確かめるため、大変動に立ち向かいましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134498,6 +136537,7 @@ msgid "" "want at your side more than your trusty shotgun. So, when it did, you made " "sure to bring it along." msgstr "" +"子供の頃から狩猟が大好きで、特にショットガンを好んで使っていました。文明が崩壊したとしても、信頼できるショットガン以外に望むものは何もありません。その思いが本当かどうか確かめるため、大変動に立ち向かいましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134513,6 +136553,7 @@ msgid "" "side more than your trusty rifle. So, when it did, you made sure to bring " "it along." msgstr "" +"子供の頃から狩猟が大好きで、特にライフルを好んで使っていました。文明が崩壊したとしても、信頼できるライフル以外に望むものは何もありません。その思いが本当かどうか確かめるため、大変動に立ち向かいましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134528,6 +136569,7 @@ msgid "" "side more than your trusty rifle. So, when it did, you made sure to bring " "it along." msgstr "" +"子供の頃から狩猟が大好きで、特にライフルを好んで使っていました。文明が崩壊したとしても、信頼できるライフル以外に望むものは何もありません。その思いが本当かどうか確かめるため、大変動に立ち向かいましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134543,6 +136585,7 @@ msgid "" "and wonder - are your meager skills, and the few supplies you grabbed on the" " way out, sufficient to help rebuild?" msgstr "" +"金物屋で働き、多くの家を修復してきました。今、目の前に広がるのは廃墟と化した街並みだけです。未熟な腕と手元に残るわずかな資材を手に、果たして、この荒廃した世界を修復できるのでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134558,6 +136601,7 @@ msgid "" "and wonder - are your meager skills, and the few supplies you grabbed on the" " way out, sufficient to help rebuild?" msgstr "" +"金物屋で働き、多くの家を修復してきました。今、目の前に広がるのは廃墟と化した街並みだけです。未熟な腕と手元に残るわずかな資材を手に、果たして、この荒廃した世界を修復できるのでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134571,6 +136615,7 @@ msgid "" "You once ruled the road in your big rig. When the riots hit, you hopped in " "and drove it to safety. Now it's just you and your truck against the world." msgstr "" +"大型トラックを走らせて車道を支配していました。暴動が起きたため、車に飛び乗り安全な場所まで移動しましたが、今や世界に反抗しているのは、自分自身と愛車だけです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134584,6 +136629,7 @@ msgid "" "You once ruled the road in your big rig. When the riots hit, you hopped in " "and drove it to safety. Now it's just you and your truck against the world." msgstr "" +"大型トラックを走らせて車道を支配していました。暴動が起きたため、車に飛び乗り安全な場所まで移動しましたが、今や世界に反抗しているのは、自分自身と愛車だけです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134625,6 +136671,7 @@ msgid "" "ruins, and the only thing between you and death is the open road and your " "backpack." msgstr "" +"両親の財産を頼りに暮らし、観光のために世界中を飛び回っていましたが、帰ってくると地元は廃墟と化していました。手元のリュックサックと閑散とした道路の活用法次第で、今後の生死が決まります。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134640,6 +136687,7 @@ msgid "" "ruins, and the only thing between you and death is the open road and your " "backpack." msgstr "" +"両親の財産を頼りに暮らし、観光のために世界中を飛び回っていましたが、帰ってくると地元は廃墟と化していました。手元のリュックサックと閑散とした道路の活用法次第で、今後の生死が決まります。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134654,6 +136702,7 @@ msgid "" " and unreasonable than usual today. Time to show the meaning of fast food… " "by running for your life!" msgstr "" +"勤務先であるハンバーガー専門店の今日のディナータイムは、いつもより血の気が多く滅茶苦茶な様子でした。ファーストフードの意義を示す時が来ました...全速力で逃げましょう!" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134668,6 +136717,7 @@ msgid "" " and unreasonable than usual today. Time to show the meaning of fast food… " "by running for your life!" msgstr "" +"勤務先であるハンバーガー専門店の今日のディナータイムは、いつもより血の気が多く滅茶苦茶な様子でした。ファーストフードの意義を示す時が来ました...全速力で逃げましょう!" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134680,7 +136730,7 @@ msgctxt "prof_desc_male" msgid "" "Small businesses often hired you for electrical work. You were halfway " "through your latest job when the whole power grid went dead." -msgstr "" +msgstr "電気工事に駆り出されることが多い、小規模業者です。仕事の最中に停電が発生しました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134693,7 +136743,7 @@ msgctxt "prof_desc_female" msgid "" "Small businesses often hired you for electrical work. You were halfway " "through your latest job when the whole power grid went dead." -msgstr "" +msgstr "電気工事に駆り出されることが多い、小規模業者です。仕事の最中に停電が発生しました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134709,6 +136759,7 @@ msgid "" "significantly less useful. Unless you manage to find a military mainframe, " "that is." msgstr "" +"カフェイン剤を摂取しながら夜通しモニターと睨めっこし、その道のプロになりました。電力がなければ、残念ながら専門技術も役には立ちません。軍が使っている大型コンピュータでも発見できれば、話は別ですが。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134724,6 +136775,7 @@ msgid "" "significantly less useful. Unless you manage to find a military mainframe, " "that is." msgstr "" +"カフェイン剤を摂取しながら夜通しモニターと睨めっこし、その道のプロになりました。電力がなければ、残念ながら専門技術も役には立ちません。軍が使っている大型コンピュータでも発見できれば、話は別ですが。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134739,6 +136791,7 @@ msgid "" "there'll be something useful in one of these books you've been lugging " "around all year." msgstr "" +"貫徹だけでテストに挑んだり、幾何学の授業で少し躓いたりするだけの、平凡な高校生でした。年中持ち歩いていた教科書の中に、もしかすると何かの役に立つ知識があるかもしれません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134754,6 +136807,7 @@ msgid "" "there'll be something useful in one of these books you've been lugging " "around all year." msgstr "" +"貫徹だけでテストに挑んだり、幾何学の授業で少し躓いたりするだけの、平凡な高校生でした。年中持ち歩いていた教科書の中に、もしかすると何かの役に立つ知識があるかもしれません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134767,7 +136821,7 @@ msgid "" "You just stepped out of a nice, hot shower to find the world had ended. " "You've got some soap, along with the most massively useful thing ever… a " "towel." -msgstr "" +msgstr "熱いシャワーを浴びているまさにその時、大変動が起きました。石鹸とその場にあった最も役立ちそうな物...タオルをとっさに持ち出しました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134781,7 +136835,7 @@ msgid "" "You just stepped out of a nice, hot shower to find the world had ended. " "You've got some soap, along with the most massively useful thing ever… a " "towel." -msgstr "" +msgstr "熱いシャワーを浴びているまさにその時、大変動が起きました。石鹸とその場にあった最も役立ちそうな物...タオルをとっさに持ち出しました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134794,7 +136848,7 @@ msgctxt "prof_desc_male" msgid "" "You spent most of your life on a Harley, out on the open road with your " "club. Now they're all dead. Time to ride or die." -msgstr "" +msgstr "人生の大半をハーレーと共に過ごし、愛好会の皆と公道を駆けていましたが、気のいい仲間は皆死にました。乗るか、死ぬか。選択の時です。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134807,7 +136861,7 @@ msgctxt "prof_desc_female" msgid "" "You spent most of your life on a Harley, out on the open road with your " "club. Now they're all dead. Time to ride or die." -msgstr "" +msgstr "人生の大半をハーレーと共に過ごし、愛好会の皆と公道を駆けていましたが、気のいい仲間は皆死にました。乗るか、死ぬか。選択の時です。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134821,7 +136875,7 @@ msgid "" "Things got a little weird on your way to your weekly dance class. Zombies " "don't seem to know how to dance, but you're not about to let them step on " "your toes." -msgstr "" +msgstr "毎週のダンス教室へ向かう途中で、騒ぎに巻き込まれました。踊り方を知らないゾンビにつま先を踏ませるつもりはありません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134835,7 +136889,7 @@ msgid "" "Things got a little weird on your way to your weekly dance class. Zombies " "don't seem to know how to dance, but you're not about to let them step on " "your toes." -msgstr "" +msgstr "毎週のダンス教室へ向かう途中で、騒ぎに巻き込まれました。踊り方を知らないゾンビにつま先を踏ませるつもりはありません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134850,6 +136904,7 @@ msgid "" "off a string of daring, high-profile heists. The cops would love to get " "their hands on you, but seem otherwise occupied." msgstr "" +"非の打ち所のない技術と生体部品の力を使い、大胆な泥棒を次々と成功させて注目を集めていました。いつもはしつこい警察ですが、今は他のことで忙しいようです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134864,6 +136919,7 @@ msgid "" "off a string of daring, high-profile heists. The cops would love to get " "their hands on you, but seem otherwise occupied." msgstr "" +"非の打ち所のない技術と生体部品の力を使い、大胆な泥棒を次々と成功させて注目を集めていました。いつもはしつこい警察ですが、今は他のことで忙しいようです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134879,6 +136935,7 @@ msgid "" "than you ever were before, thanks to a suite of bionic systems powered by " "your own metabolic functions. Make the most of your second chance at life." msgstr "" +"機械化手術の被験者となる事で一命を取り留めました。自身の代謝機能によって給電されるCBMのお陰で、前より健康的な生活を送れるのです。第二の人生を最大限に活用しましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134894,6 +136951,7 @@ msgid "" "than you ever were before, thanks to a suite of bionic systems powered by " "your own metabolic functions. Make the most of your second chance at life." msgstr "" +"機械化手術の被験者となる事で一命を取り留めました。自身の代謝機能によって給電されるCBMのお陰で、前より健康的な生活を送れるのです。第二の人生を最大限に活用しましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134906,7 +136964,7 @@ msgctxt "prof_desc_male" msgid "" "When the diagnosis came back positive, you made a vow: to fight for your " "life, and to never give in to despair. Now is the time to renew that vow." -msgstr "" +msgstr "陽性の診断結果が出たあの日から、人生のために戦い、絶望に屈しないと決めました。今こそその誓いを新たにする時です。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134919,7 +136977,7 @@ msgctxt "prof_desc_female" msgid "" "When the diagnosis came back positive, you made a vow: to fight for your " "life, and to never give in to despair. Now is the time to renew that vow." -msgstr "" +msgstr "陽性の診断結果が出たあの日から、人生のために戦い、絶望に屈しないと決めました。今こそその誓いを新たにする時です。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134934,6 +136992,7 @@ msgid "" "the immense power of mutation. You are determined to live on, if only to " "spite them for what they did to you." msgstr "" +"突然変異の計り知れない力を解明するという目的の下、研究員から実験動物のように扱われていました。ほんの少しでも奴らへの仕返しになるのなら、生き続けてやろうと決意しました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134948,6 +137007,7 @@ msgid "" "the immense power of mutation. You are determined to live on, if only to " "spite them for what they did to you." msgstr "" +"突然変異の計り知れない力を解明するという目的の下、研究員から実験動物のように扱われていました。ほんの少しでも奴らへの仕返しになるのなら、生き続けてやろうと決意しました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134961,7 +137021,7 @@ msgid "" "Your dreams of becoming a super-human mutant through genetic alteration may " "have fallen a bit short, but the scientists say you're ready. It's time for" " a field test." -msgstr "" +msgstr "遺伝子の変異によって超人になるという夢が実現するにはまだ時間がかかるようですが、その科学者は実現可能だと言いました。実地テストの時間です。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -134975,7 +137035,7 @@ msgid "" "Your dreams of becoming a super-human mutant through genetic alteration may " "have fallen a bit short, but the scientists say you're ready. It's time for" " a field test." -msgstr "" +msgstr "遺伝子の変異によって超人になるという夢が実現するにはまだ時間がかかるようですが、その科学者は実現可能だと言いました。実地テストの時間です。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -134991,6 +137051,7 @@ msgid "" " human now, but that might prove to be an advantage against the horrors that" " await." msgstr "" +"元々は正常な状態でした。しかし、テスト中のプログラム処理が正常に完了せず、全ての人間性を根こそぎ剥ぎ取られてしまいました。今やほとんどただの機械でしかありませんが、恐怖に対抗できるのは利点かもしれません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135006,6 +137067,7 @@ msgid "" " human now, but that might prove to be an advantage against the horrors that" " await." msgstr "" +"元々は正常な状態でした。しかし、テスト中のプログラム処理が正常に完了せず、全ての人間性を根こそぎ剥ぎ取られてしまいました。今やほとんどただの機械でしかありませんが、恐怖に対抗できるのは利点かもしれません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135053,7 +137115,7 @@ msgid "" "You'll never get your shot at the Cyberolympics. All that's left of your " "dream is a single leftover protein shake. Well, that and your bulging, " "cybernetically-enhanced muscles." -msgstr "" +msgstr "サイバーオリンピックで勝利する夢は潰えました。残されたものは、プロテインシェイク、そして生体部品によって膨らんだ筋肉だけです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135067,7 +137129,7 @@ msgid "" "You'll never get your shot at the Cyberolympics. All that's left of your " "dream is a single leftover protein shake. Well, that and your bulging, " "cybernetically-enhanced muscles." -msgstr "" +msgstr "サイバーオリンピックで勝利する夢は潰えました。残されたものは、プロテインシェイク、そしてサイバネ加工によって膨らんだ筋肉だけです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135082,6 +137144,7 @@ msgid "" "running, and you enhanced your body with cybernetics to go even faster. Now" " there's plenty to run from - this is your kind of game." msgstr "" +"決して一線を退くことのない運動選手でした。走ることをこよなく愛し、更に速く走るために身体を改造しました。今後は走りを生かせる状況に何度も遭遇することでしょう。これもある種の競技ですね。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135096,6 +137159,7 @@ msgid "" "running, and you enhanced your body with cybernetics to go even faster. Now" " there's plenty to run from - this is your kind of game." msgstr "" +"決して一線を退くことのない運動選手でした。走ることをこよなく愛し、更に速く走るために身体を改造しました。今後は走りを生かせる状況に何度も遭遇することでしょう。これもある種の競技ですね。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135140,6 +137204,7 @@ msgid "" "enhanced to operate in the most dire of emergency situations. You're pretty" " sure this counts." msgstr "" +"第二世代の機械化消防士として機械で身体を強化し、どれほど危険な緊急事態にも対応できるようになりました。今の事態も間違いなくその一つに入ります。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135154,6 +137219,7 @@ msgid "" "enhanced to operate in the most dire of emergency situations. You're pretty" " sure this counts." msgstr "" +"第二世代の機械化消防士として機械で身体を強化し、どれほど危険な緊急事態にも対応できるようになりました。今の事態も間違いなくその一つに入ります。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135167,7 +137233,7 @@ msgid "" "You were employed by a major international corporation as a representative " "and technical advisor, utilizing the incredible power of your cybernetically" " augmented mind." -msgstr "" +msgstr "国際的な大手企業に、代表者兼技術顧問として雇われ、精神を生体部品で増強して超人的な力を操ります。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135181,7 +137247,7 @@ msgid "" "You were employed by a major international corporation as a representative " "and technical advisor, utilizing the incredible power of your cybernetically" " augmented mind." -msgstr "" +msgstr "国際的な大手企業に、代表者兼技術顧問として雇われ、精神を生体部品で増強して超人的な力を操ります。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135195,7 +137261,7 @@ msgid "" "You are the result of one of the military's last research programs: a " "prototype cyborg soldier. The wars they expected you to fight have become " "obsolete, but war never changes." -msgstr "" +msgstr "軍の最新研究の一つである、機械化兵士計画の成果物です。期待されていた戦争はもはや勃発しそうにありませんが、戦いが終わることもなさそうです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135209,7 +137275,7 @@ msgid "" "You are the result of one of the military's last research programs: a " "prototype cyborg soldier. The wars they expected you to fight have become " "obsolete, but war never changes." -msgstr "" +msgstr "軍の最新研究の一つである、機械化兵士計画の成果物です。期待されていた戦争はもはや勃発しそうにありませんが、戦いが終わることもなさそうです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135225,6 +137291,7 @@ msgid "" "targets from implausible distances, even after weeks of total isolation in " "enemy territory." msgstr "" +"最高機密の軍事プログラムを受けて完成した、完璧な狙撃手です。生体部品、装備、様々な実地訓練によって、敵地での数週間に渡る単独行動の後でも超遠距離からターゲットを狙撃できるようになりました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135240,6 +137307,7 @@ msgid "" "targets from implausible distances, even after weeks of total isolation in " "enemy territory." msgstr "" +"最高機密の軍事プログラムを受けて完成した、完璧な狙撃手です。生体部品、装備、様々な実地訓練によって、敵地での数週間に渡る単独行動の後でも超遠距離からターゲットを狙撃できるようになりました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135255,6 +137323,7 @@ msgid "" "specialist: you have night vision, an alarm, lock picking capabilities and a" " hacking module." msgstr "" +"数百万ドルもの税金をかけて複数の生体部品が体内に埋め込まれ、政府によって潜入と偵察の専門家に改造されました。暗視装置、危険察知用の生体アラーム、ピッキングとハッキングのツールなどを内蔵しています。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135270,6 +137339,7 @@ msgid "" "specialist: you have night vision, an alarm, lock picking capabilities and a" " hacking module." msgstr "" +"数百万ドルもの税金をかけて複数の生体部品が体内に埋め込まれ、政府によって潜入と偵察の専門家に改造されました。暗視装置、危険察知用の生体アラーム、ピッキングとハッキングのツールなどを内蔵しています。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135284,6 +137354,7 @@ msgid "" " sleeper agent capable of silently engaging your target while maintaining an" " innocuous appearance. Your handler cut all contact a week ago." msgstr "" +"数百万ドルもの秘密資金が投入され、生体部品を埋め込んだ潜伏工作員に改造されました。一般人の外見を維持したまま、ターゲットを秘密裏に始末します。上司からの連絡は1週間前に完全に途絶えました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135298,6 +137369,7 @@ msgid "" " sleeper agent capable of silently engaging your target while maintaining an" " innocuous appearance. Your handler cut all contact a week ago." msgstr "" +"数百万ドルもの秘密資金が投入され、生体部品を埋め込んだ潜伏工作員に改造されました。一般人の外見を維持したまま、ターゲットを秘密裏に始末します。上司からの連絡は1週間前に完全に途絶えました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135313,6 +137385,7 @@ msgid "" "best gear on the market in preparation for your biggest hit yet. Sadly, you" " came out of surgery to find your whole gang had been eaten." msgstr "" +"困難な仕事もやり遂げると評判のギャングであり、ボスのお気に入りの一人でした。「基本的な」生体部品と市場で手に入る中で最高の武器を与えられ、これまでで最大規模の抗争に備えていましたが、移植手術を終えて戻ってみると、残念ながら構成員たちは皆食い殺されていました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135328,6 +137401,7 @@ msgid "" "best gear on the market in preparation for your biggest hit yet. Sadly, you" " came out of surgery to find your whole gang had been eaten." msgstr "" +"困難な仕事もやり遂げると評判のギャングであり、ボスのお気に入りの一人でした。「基本的な」生体部品と市場で手に入る中で最高の武器を与えられ、これまでで最大規模の抗争に備えていましたが、移植手術を終えて戻ってみると、残念ながら構成員たちは皆食い殺されていました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135342,6 +137416,7 @@ msgid "" "You have a large capacity for power, but are filled with broken and useless " "bionics. Your ethanol power supply still works, at least." msgstr "" +"手術ミスを繰り返し、体内には壊れた生体部品が残りました。大容量の蓄電装置とエタノール燃焼発電システムは問題なく機能していますが、その他はまともに動きません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135356,6 +137431,7 @@ msgid "" "You have a large capacity for power, but are filled with broken and useless " "bionics. Your ethanol power supply still works, at least." msgstr "" +"手術ミスを繰り返し、体内には壊れた生体部品が残りました。大容量の蓄電装置とエタノール燃焼発電システムは問題なく機能していますが、その他はまともに動きません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135369,6 +137445,7 @@ msgid "" "You always had to have the latest and best gadgets and gizmos, so is it any " "wonder that you upgraded your flesh along with your smart phone?" msgstr "" +"常に最新鋭かつ最高級の機械装置を入手せずにはいられない性格でした。スマートフォンを買い替えるように人体を改造し続けることの、一体何がおかしいのでしょう?" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135382,6 +137459,7 @@ msgid "" "You always had to have the latest and best gadgets and gizmos, so is it any " "wonder that you upgraded your flesh along with your smart phone?" msgstr "" +"常に最新鋭かつ最高級の機械装置を入手せずにはいられない性格でした。スマートフォンを買い替えるように人体を改造し続けることの、一体何がおかしいのでしょう?" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135422,6 +137500,7 @@ msgid "" "decent living selling your catches and running trapping tutorials. " "Hopefully, your skills will come in useful against less conventional game." msgstr "" +"これまでの人生の大半の時間を、父親と共に罠猟をして過ごしてきました。獲物を売って生計を立てる中で、罠を上手く仕掛けられるようになりました。この技術が、今まで見たこともない標的に対して通用するといいのですが。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135436,6 +137515,7 @@ msgid "" "decent living selling your catches and running trapping tutorials. " "Hopefully, your skills will come in useful against less conventional game." msgstr "" +"これまでの人生の大半の時間を、父親と共に罠猟をして過ごしてきました。獲物を売って生計を立てる中で、罠を上手く仕掛けられるようになりました。この技術が、今まで見たこともない標的に対して通用するといいのですが。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135450,6 +137530,7 @@ msgid "" "metalsmithing program, but despite the havoc you've managed to keep ahold of" " some of the equipment you were carrying." msgstr "" +"コミュニティ・カレッジで金属加工の授業を受け、帰宅する途中でトラブルに巻き込まれました。パニックの中、持っていた工具の一部はなんとか失くさずに済みました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135464,6 +137545,7 @@ msgid "" "metalsmithing program, but despite the havoc you've managed to keep ahold of" " some of the equipment you were carrying." msgstr "" +"コミュニティ・カレッジで金属加工の授業を受け、帰宅する途中でトラブルに巻き込まれました。パニックの中、持っていた工具の一部はなんとか失くさずに済みました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135478,6 +137560,7 @@ msgid "" "performing at kids' parties was a dream come true until the world ended. " "There are precious few balloon animals in your future now." msgstr "" +"皆を笑顔にすることが一番の望みでした。学校を中退し、誕生会などで子供達を楽しませたいという夢を実現させようとしていました。しかし、それも文明が崩壊するまでの話です。今となっては貴重な動物型の風船がいくつか手元にあるだけです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135492,6 +137575,7 @@ msgid "" "performing at kids' parties was a dream come true until the world ended. " "There are precious few balloon animals in your future now." msgstr "" +"皆を笑顔にすることが一番の望みでした。学校を中退し、誕生会などで子供達を楽しませたいという夢を実現させようとしていました。しかし、それも文明が崩壊するまでの話です。今となっては貴重な動物型の風船がいくつか手元にあるだけです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135507,6 +137591,7 @@ msgid "" "kinky black leather. Unfortunately, there are no safewords in the " "apocalypse." msgstr "" +"安全な場所を求めて急ぐあまり、ご主人様と離れ離れになってしまいました。非常に倒錯したデザインの黒い革製スーツしか持っていない状況で、これから一人で生き延びなければなりません。生憎、この世界にプレイを中断するセーフワードはありません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135522,6 +137607,7 @@ msgid "" "kinky black leather. Unfortunately, there are no safewords in the " "apocalypse." msgstr "" +"安全な場所を求めて急ぐあまり、ご主人様と離れ離れになってしまいました。非常に倒錯したデザインの黒い革製スーツしか持っていない状況で、これから一人で生き延びなければなりません。生憎、この世界にプレイを中断するセーフワードはありません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135565,6 +137651,7 @@ msgid "" "Now zombies are eating everyone, and even worse, the convention is " "cancelled! At least you were ready in case your costume tore." msgstr "" +"夜遅くまで友人とアニメを見たりスナック菓子を食べたりしながら暮らしていましたが、ある時北東部でアニメコンベンションがあると聞き、足を運びました。ところが道中でゾンビが人間を食い殺し、残念ながらコンベンションも中止になりました!用意したものと言えば、コスプレ用の衣装が破れた時のための道具くらいです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135580,6 +137667,7 @@ msgid "" "Now zombies are eating everyone, and even worse, the convention is " "cancelled! At least you were ready in case your costume tore." msgstr "" +"夜遅くまで友人とアニメを見たりスナック菓子を食べたりしながら暮らしていましたが、ある時北東部でアニメコンベンションがあると聞き、足を運びました。ところが道中でゾンビが人間を食い殺し、残念ながらコンベンションも中止になりました!用意したものと言えば、コスプレ用の衣装が破れた時のための道具くらいです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135618,7 +137706,7 @@ msgctxt "prof_desc_male" msgid "" "All those wicked songs about the apocalypse have come to life. Brutal! Now" " that the system is dead, it's time to party among the bones of the world!" -msgstr "" +msgstr "黙示録の世界を歌う邪悪な歌に命が吹き込まれました。まさに残忍!体制が倒れた今こそ、文明世界の死骸にまみれてパーティーを開く時です!" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135631,7 +137719,7 @@ msgctxt "prof_desc_female" msgid "" "All those wicked songs about the apocalypse have come to life. Brutal! Now" " that the system is dead, it's time to party among the bones of the world!" -msgstr "" +msgstr "黙示録の世界を歌う邪悪な歌に命が吹き込まれました。まさに残忍!体制が倒れた今こそ、文明世界の死骸にまみれてパーティーを開く時です!" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135647,6 +137735,7 @@ msgid "" "while on call, you were forced to fight your way to safety with little more " "than your trusty iron and your bunker gear to protect you." msgstr "" +"ファーストレスポンダーとしてこの災厄の衝撃的な恐怖を直接目撃しました。救助活動の中でほとんどの装備と仲間を失い、残った信頼できるハリガンバールと消防服で安全な場所までの道を切り開くしかありません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135662,6 +137751,7 @@ msgid "" "while on call, you were forced to fight your way to safety with little more " "than your trusty iron and your bunker gear to protect you." msgstr "" +"ファーストレスポンダーとしてこの災厄の衝撃的な恐怖を直接目撃しました。救助活動の中でほとんどの装備と仲間を失い、残った信頼できるハリガンバールと消防服で安全な場所までの道を切り開くしかありません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135674,7 +137764,7 @@ msgctxt "prof_desc_male" msgid "" "Your ska band broke up after the drummer became a zombie. Now you're alone " "in the Cataclysm with some cigarettes and your mp3 player." -msgstr "" +msgstr "所属していたスカバンドはドラマーがゾンビになった後に解散しました。現在、数本のタバコとMP3プレーヤーを持って、孤独に佇んでいます。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135687,7 +137777,7 @@ msgctxt "prof_desc_female" msgid "" "Your ska band broke up after the drummer became a zombie. Now you're alone " "in the Cataclysm with some cigarettes and your mp3 player." -msgstr "" +msgstr "所属していたスカバンドはドラマーがゾンビになった後に解散しました。現在、数本のタバコとMP3プレーヤーを持って、孤独に佇んでいます。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135700,7 +137790,7 @@ msgctxt "prof_desc_male" msgid "" "Neither snow nor rain nor heat nor dark of night stays you from delivering " "the mail, but nobody said anything about aliens." -msgstr "" +msgstr "雪が降ろうが、雨が降ろうが、暑かろうが、真っ暗な夜中だろうが、とにかく郵便物を届けていましたが、化け物が出るなんて初耳です。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135713,7 +137803,7 @@ msgctxt "prof_desc_female" msgid "" "Neither snow nor rain nor heat nor dark of night stays you from delivering " "the mail, but nobody said anything about aliens." -msgstr "" +msgstr "雪が降ろうが、雨が降ろうが、暑かろうが、真っ暗な夜中だろうが、とにかく郵便物を届けていましたが、化け物が出るなんて初耳です。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135727,7 +137817,7 @@ msgid "" "Your trial was contentious, but inevitably you found yourself behind bars. " "The Cataclysm has offered you a chance to escape, but freedom may come with " "a steep price." -msgstr "" +msgstr "裁判を経て、当然のように刑務所に収監されました。大変動によって脱獄のチャンスを得ましたが、この幸運の代償は高くつきそうです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135741,7 +137831,7 @@ msgid "" "Your trial was contentious, but inevitably you found yourself behind bars. " "The Cataclysm has offered you a chance to escape, but freedom may come with " "a steep price." -msgstr "" +msgstr "裁判を経て、当然のように刑務所に収監されました。大変動によって脱獄のチャンスを得ましたが、この幸運の代償は高くつきそうです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135756,6 +137846,7 @@ msgid "" "fate you're one of the few still alive. True death comes only from your " "hands, so you're in for a job." msgstr "" +"電気椅子への行進を待つ連続殺人犯でしたが、どのような運命のいたずらか、今では貴重な生きた人間の一人です。真の死を与えてやれるのは自分以外にいません。仕事に取り掛かりましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135770,6 +137861,7 @@ msgid "" "fate you're one of the few still alive. True death comes only from your " "hands, so you're in for a job." msgstr "" +"電気椅子への行進を待つ連続殺人犯でしたが、どのような運命のいたずらか、今では貴重な生きた人間の一人です。真の死を与えてやれるのは自分以外にいません。仕事に取り掛かりましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135784,6 +137876,7 @@ msgid "" "accounts. This plan immediately failed and got you arrested. They said you" " were too soft for prison, but guess what? They're dead, and you're not." msgstr "" +"会社の口座から資金をちょっぴり拝借するための天才的な計画を立てていましたが、目論見は失敗し、逮捕されてしまいました。軟弱者が刑務所でやっていけるのかと言われていましたが、これはいかなる運命でしょう?馬鹿にしていた奴らは全員死に、軟弱者が生き残りました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135798,6 +137891,7 @@ msgid "" "accounts. This plan immediately failed and got you arrested. They said you" " were too soft for prison, but guess what? They're dead, and you're not." msgstr "" +"会社の口座から資金をちょっぴり拝借するための天才的な計画を立てていましたが、目論見は失敗し、逮捕されてしまいました。軟弱者が刑務所でやっていけるのかと言われていましたが、これはいかなる運命でしょう?馬鹿にしていた奴らは全員死に、軟弱者が生き残りました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135842,6 +137936,7 @@ msgid "" " you and threw you in prison on trumped-up charges to silence you. Clearly," " they should have listened." msgstr "" +"研究所で起きていることを暴くために全力を尽くしましたが、口封じのために罪をでっちあげられて逮捕され、刑務所に放り込まれました。今の状況を見るに、やはり噂は本当だったようです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135856,6 +137951,7 @@ msgid "" " you and threw you in prison on trumped-up charges to silence you. Clearly," " they should have listened." msgstr "" +"研究所で起きていることを暴くために全力を尽くしましたが、口封じのために罪をでっちあげられて逮捕され、刑務所に放り込まれました。今の状況を見るに、やはり噂は本当だったようです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135898,6 +137994,7 @@ msgid "" "to be seen. Does it count as breaking and entering if everyone in town is " "undead?" msgstr "" +"幸運が巡ってきたようです。奪えるものは山ほどあり、警官も見当たりません。市民全員がゾンビになった場合、この行為は不法侵入になるのでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135912,6 +138009,7 @@ msgid "" "to be seen. Does it count as breaking and entering if everyone in town is " "undead?" msgstr "" +"幸運が巡ってきたようです。奪えるものは山ほどあり、警官も見当たりません。市民全員がゾンビになった場合、この行為は不法侵入になるのでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135924,7 +138022,7 @@ msgctxt "prof_desc_male" msgid "" "Through a series of painful and expensive surgeries, you became a walking " "bionic weapon, your services as a mercenary available to the highest bidder." -msgstr "" +msgstr "激痛と大金を代償に手術を行い、歩く兵器になりました。傭兵としての技能は、大金を出さないと雇えないレベルにまで向上しています。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135937,7 +138035,7 @@ msgctxt "prof_desc_female" msgid "" "Through a series of painful and expensive surgeries, you became a walking " "bionic weapon, your services as a mercenary available to the highest bidder." -msgstr "" +msgstr "激痛と大金を代償に手術を行い、歩く兵器になりました。傭兵としての技能は、大金を出さないと雇えないレベルにまで向上しています。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135953,6 +138051,7 @@ msgid "" " Your posthuman hunger still cries out to be fed; where will you get your " "bionic fix now?" msgstr "" +"生体部品の移植に憧れていました。裏路地の怪しげなバイオクリニックで中古品をセルフインストールして欲求を満たしている内に、すっかり中毒になってしまいました。人の限界を超えたいという欲望は今も満たされていません。どこへ行けば治せるのでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135968,6 +138067,7 @@ msgid "" " Your posthuman hunger still cries out to be fed; where will you get your " "bionic fix now?" msgstr "" +"生体部品の移植に憧れていました。裏路地の怪しげなバイオクリニックで中古品をセルフインストールして欲求を満たしている内に、すっかり中毒になってしまいました。人の限界を超えたいという欲望は今も満たされていません。どこへ行けば治せるのでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -135982,6 +138082,8 @@ msgid "" "posthuman monster, forced to hide in the shadows. Amidst the desolation, " "however, even a creature such as yourself might find its niche." msgstr "" +"生体部品の過剰移植で精神を蝕まれ、身を隠すことを余儀なくされた、人の限界を超えた怪物です。災厄の世界でなら、こんな化け物でも居場所を見つけられるかもしれません。" +" " #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -135996,6 +138098,8 @@ msgid "" "posthuman monster, forced to hide in the shadows. Amidst the desolation, " "however, even a creature such as yourself might find its niche." msgstr "" +"生体部品の過剰移植で精神を蝕まれ、身を隠すことを余儀なくされた、人の限界を超えた怪物です。災厄の世界でなら、こんな化け物でも居場所を見つけられるかもしれません。" +" " #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136010,6 +138114,7 @@ msgid "" " your brain, you were forced to flee the courtroom in disgrace. Now nobody " "seems to care about your objections." msgstr "" +"陪審員を掌の上で転がす名弁護士でしたが、被告に脳を食いちぎられそうになり、不名誉にも法廷から逃げ出さざるを得なくなりました。この状況に異議ありと叫んでも、誰も聞いてくれません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136024,6 +138129,7 @@ msgid "" " your brain, you were forced to flee the courtroom in disgrace. Now nobody " "seems to care about your objections." msgstr "" +"陪審員を掌の上で転がす名弁護士でしたが、被告に脳を食いちぎられそうになり、不名誉にも法廷から逃げ出さざるを得なくなりました。この状況に異議ありと叫んでも、誰も聞いてくれません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136038,6 +138144,7 @@ msgid "" "faithful, but it appears that prayers were not enough. Now that they are " "all dead, you should probably find something more tangible to protect you." msgstr "" +"黙示録の日が訪れました!教区民を守るために最善を尽くしましたが、祈りは届かなかったようです。死者達から身を守るために、もっと具体的な策を探すべきかもしれません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136052,6 +138159,7 @@ msgid "" "faithful, but it appears that prayers were not enough. Now that they are " "all dead, you should probably find something more tangible to protect you." msgstr "" +"黙示録の日が訪れました!教区民を守るために最善を尽くしましたが、祈りは届かなかったようです。死者達から身を守るために、もっと具体的な策を探すべきかもしれません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136097,6 +138205,7 @@ msgid "" "in prayer. Back then they came from far and wide to listen to you; now they" " come to eat your brains." msgstr "" +"黙示録の日が訪れる前は、預言者の声を聞き、コーランを熟読し、地域社会を平和に導くために地元のモスクで祈りを捧げる日々を過ごしていました。かつては遠方から信者達が話を聞きに来てくれましたが、今では脳味噌を食べにやってくる者ばかりです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136112,6 +138221,7 @@ msgid "" "in prayer. Back then they came from far and wide to listen to you; now they" " come to eat your brains." msgstr "" +"黙示録の日が訪れる前は、預言者の声を聞き、コーランを熟読し、地域社会を平和に導くために地元のモスクで祈りを捧げる日々を過ごしていました。かつては遠方から信者達が話を聞きに来てくれましたが、今では脳味噌を食べにやってくる者ばかりです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136183,6 +138293,7 @@ msgid "" "host your daily podcast, and the undead don't seem particularly moved by " "your sermons." msgstr "" +"町から町へと旅を続け、善き教えを広めることに人生を捧げてきました。さて、何もかもが地獄の底に堕ち、今日の分のポッドキャスト配信も中止になり、死者に説教をしてみたところでその心が動くこともありません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136198,6 +138309,7 @@ msgid "" "host your daily podcast, and the undead don't seem particularly moved by " "your sermons." msgstr "" +"町から町へと旅を続け、善き教えを広めることに人生を捧げてきました。さて、何もかもが地獄の底に堕ち、今日の分のポッドキャスト配信も中止になり、死者に説教をしてみたところでその心が動くこともありません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136210,7 +138322,7 @@ msgctxt "prof_desc_male" msgid "" "You've decided today is the day to take your first lesson at the local dojo." " You'll be great at it, you're sure of it." -msgstr "" +msgstr "今日こそ地元の道場へ行き、初めてのレッスンに参加しようと決めました。きっと素晴らしい体験ができるに違いありません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136223,7 +138335,7 @@ msgctxt "prof_desc_female" msgid "" "You've decided today is the day to take your first lesson at the local dojo." " You'll be great at it, you're sure of it." -msgstr "" +msgstr "今日こそ地元の道場へ行き、初めてのレッスンに参加しようと決めました。きっと素晴らしい体験ができるに違いありません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136288,7 +138400,7 @@ msgctxt "prof_desc_male" msgid "" "Your rival challenged you to the fight of your life, but now you fight just " "to keep yourself alive." -msgstr "" +msgstr "これまでは人生をかけて戦ってきましたが、これからは命を守るためだけに戦う日々が始まります。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136301,7 +138413,7 @@ msgctxt "prof_desc_female" msgid "" "Your rival challenged you to the fight of your life, but now you fight just " "to keep yourself alive." -msgstr "" +msgstr "これまでは人生をかけて戦ってきましたが、これからは命を守るためだけに戦う日々が始まります。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136317,6 +138429,7 @@ msgid "" "safety, you find yourself with only your wits and some leftover pizza. And " "they didn't even leave a tip!" msgstr "" +"今日最後のピザを地元の低温工学研究所に届けに行くと、腹を空かせたゾンビに食い殺されかけました。身を守るため逃げ出しましたが、今は残りのピザと自分の知恵以外頼れるものはありません。そういえば、チップを貰うのも忘れていました!" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136332,6 +138445,7 @@ msgid "" "safety, you find yourself with only your wits and some leftover pizza. And " "they didn't even leave a tip!" msgstr "" +"今日最後のピザを地元の低温工学研究所に届けに行くと、腹を空かせたゾンビに食い殺されかけました。身を守るため逃げ出しましたが、今は残りのピザと自分の知恵以外頼れるものはありません。そういえば、チップを貰うのも忘れていました!" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136346,6 +138460,7 @@ msgid "" "a long-lost temple, but then the ground started to shake uncontrollably. " "You had a bad feeling about that, so you got out of there quickly." msgstr "" +"死んだ祖父の手記を手掛かりに長らく忘れ去られていた寺院へやってきたその時、地面が激しく揺れ始めました。嫌な予感がしたため、さっさと逃げ出しました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136360,6 +138475,7 @@ msgid "" "a long-lost temple, but then the ground started to shake uncontrollably. " "You had a bad feeling about that, so you got out of there quickly." msgstr "" +"死んだ祖父の手記を手掛かりに長らく忘れ去られていた寺院へやってきたその時、地面が激しく揺れ始めました。嫌な予感がしたため、さっさと逃げ出しました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136374,6 +138490,7 @@ msgid "" "hordes don't seem to value the latest news, but at least your trusty bicycle" " is still in working order." msgstr "" +"世界の終焉という知らせを届けるために、朝から仕事へ出かけました。アンデッドの大群は最新のニュースには無関心なようですが、信頼する自転車は役に立ってくれるはずです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136388,6 +138505,7 @@ msgid "" "hordes don't seem to value the latest news, but at least your trusty bicycle" " is still in working order." msgstr "" +"世界の終焉という知らせを届けるために、朝から仕事へ出かけました。アンデッドの大群は最新のニュースには無関心なようですが、信頼する自転車は役に立ってくれるはずです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136403,6 +138521,7 @@ msgid "" "speed violence. Things are looking grim; how long can you race laps around " "the undead before you get blocked for good?" msgstr "" +"これまで地獄を爆走するような激しい試合をこなしてきましたが、他のチームメンバーは全滅しました。スピードと暴力がなければここまで長くは生きられなかったでしょう。状況はかなり厳しいようです。一度捕まればそこまで、ゾンビたちを避けながらいつまでレースを続けられるでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136418,6 +138537,7 @@ msgid "" "speed violence. Things are looking grim; how long can you race laps around " "the undead before you get blocked for good?" msgstr "" +"これまで地獄を爆走するような激しい試合をこなしてきましたが、他のチームメンバーは全滅しました。スピードと暴力がなければここまで長くは生きられなかったでしょう。状況はかなり厳しいようです。一度捕まればそこまで、ゾンビたちを避けながらいつまでレースを続けられるでしょうか?" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136432,6 +138552,7 @@ msgid "" "should things be any different now? With a handful of seeds and your trusty" " hoe, it's time to rebuild the Earth, one plant at a time." msgstr "" +"土と水、そして日光があればそれで満足でした。どうしてこんなことになってしまったのでしょうか?残り少ない種と信頼できる鍬を持ち、少しずつ着実に大地を再生しましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136446,6 +138567,7 @@ msgid "" "should things be any different now? With a handful of seeds and your trusty" " hoe, it's time to rebuild the Earth, one plant at a time." msgstr "" +"土と水、そして日光があればそれで満足でした。どうしてこんなことになってしまったのでしょうか?残り少ない種と信頼できる鍬を持ち、少しずつ着実に大地を再生しましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136460,6 +138582,7 @@ msgid "" "epidemics. Despite your best efforts, you were unable to form up before all" " communications ceased and you found yourself alone amongst the dead." msgstr "" +"政府は蔓延する感染症に対処するため、州兵を動員しました。死力を尽くしましたが、隊列を組む前から通信は途絶しており、いつの間にか死者の群れの中に一人、取り残されていました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136474,6 +138597,7 @@ msgid "" "epidemics. Despite your best efforts, you were unable to form up before all" " communications ceased and you found yourself alone amongst the dead." msgstr "" +"政府は蔓延する感染症に対処するため、州兵を動員しました。死力を尽くしましたが、隊列を組む前から通信は途絶しており、いつの間にか死者の群れの中に一人、取り残されていました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136488,6 +138612,7 @@ msgid "" " amidst the ruins of civilization. Whether through force, guile, or luck, " "you've obtained the best gear you could find." msgstr "" +"文明の残骸の中で人生を満喫していたお陰か、大変動を免れた数少ない幸運な人々の仲間入りを果たしました。暴力か策略か、あるいは幸運によるものかは分かりませんが、素晴らしい装備を手に入れています。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136502,6 +138627,7 @@ msgid "" " amidst the ruins of civilization. Whether through force, guile, or luck, " "you've obtained the best gear you could find." msgstr "" +"文明の残骸の中で人生を満喫していたお陰か、大変動を免れた数少ない幸運な人々の仲間入りを果たしました。暴力か策略か、あるいは幸運によるものかは分かりませんが、素晴らしい装備を手に入れています。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136517,6 +138643,7 @@ msgid "" "command and find yourself in this predicament. The only mission left now is" " to survive." msgstr "" +"ブートキャンプでのサバイバル訓練を真面目に受けておくべきでした。さもなくば、然るべき命令を下してくれる指揮系統よりも長生きするべきではありませんでした。窮地に立たされた状況を理解した今、唯一の任務は生き延びる事です。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136532,6 +138659,7 @@ msgid "" "command and find yourself in this predicament. The only mission left now is" " to survive." msgstr "" +"ブートキャンプでのサバイバル訓練を真面目に受けておくべきでした。さもなくば、然るべき命令を下してくれる指揮系統よりも長生きするべきではありませんでした。窮地に立たされた状況を理解した今、唯一の任務は生き延びる事です。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136546,6 +138674,7 @@ msgid "" "petty thieves. Your job training didn't provide any terribly useful skills," " but you do have your trusty tazer, baton, and pocket knife." msgstr "" +"10代のチンピラやチンケな泥棒から夜のモールを守るという、退屈な仕事をしていました。研修では役に立つを技能を一つも教えてもらえませんでしたが、信頼できるテーザー銃と警棒、ポケットナイフを持っています。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136560,6 +138689,7 @@ msgid "" "petty thieves. Your job training didn't provide any terribly useful skills," " but you do have your trusty tazer, baton, and pocket knife." msgstr "" +"10代のチンピラやチンケな泥棒から夜のモールを守るという、退屈な仕事をしていました。研修では役に立つを技能を一つも教えてもらえませんでしたが、信頼できるテーザー銃と警棒、ポケットナイフを持っています。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136574,6 +138704,7 @@ msgid "" " understanding with Mother Nature. The world as they knew it might have " "ended for your forsaken species, but you can hardly tell the difference." msgstr "" +"屋外での長年の放浪生活を経て、いつしか母なる大自然を完璧に理解できるようになっていました。世界が終わり、人類は見捨てられたらしいのですが、今のところ何の変化も感じません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136588,6 +138719,7 @@ msgid "" " understanding with Mother Nature. The world as they knew it might have " "ended for your forsaken species, but you can hardly tell the difference." msgstr "" +"屋外での長年の放浪生活を経て、いつしか母なる大自然を完璧に理解できるようになっていました。世界が終わり、人類は見捨てられたらしいのですが、今のところ何の変化も感じません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136603,6 +138735,7 @@ msgid "" "gotten bigger and meaner. Now their horrible noises have you spooked - you " "just hope the fish aren't as nasty." msgstr "" +"ほぼ毎日沼地で釣り糸を垂らしながら、平穏な暮らしを送っていました。いつも虫たちの賑やかな鳴き声に楽しく耳を傾けていましたが、その音は徐々に喧しく下劣なものになり、最近は恐怖しか感じません。魚があんなものに成り果てていないといいのですが。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136618,6 +138751,7 @@ msgid "" "gotten bigger and meaner. Now their horrible noises have you spooked - you " "just hope the fish aren't as nasty." msgstr "" +"ほぼ毎日沼地で釣り糸を垂らしながら、平穏な暮らしを送っていました。いつも虫たちの賑やかな鳴き声に楽しく耳を傾けていましたが、その音は徐々に喧しく下劣なものになり、最近は恐怖しか感じません。魚があんなものに成り果てていないといいのですが。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136692,6 +138826,7 @@ msgid "" "newsbots, and pizza delivery drones. Bionic implants helped you control " "them remotely. Now all the drones carry guns instead of pizza." msgstr "" +"無人道路清掃機、ニュースボット、ピザ配達ドローンなどをプログラミングする仕事に就いていました。生体部品を移植したお陰で、遠隔操作もお手の物です。ドローンたちはピザの代わりに銃を抱えるようになってしまいました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136706,6 +138841,7 @@ msgid "" "newsbots, and pizza delivery drones. Bionic implants helped you control " "them remotely. Now all the drones carry guns instead of pizza." msgstr "" +"無人道路清掃機、ニュースボット、ピザ配達ドローンなどをプログラミングする仕事に就いていました。生体部品を移植したお陰で、遠隔操作もお手の物です。ドローンたちはピザの代わりに銃を抱えるようになってしまいました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136720,6 +138856,7 @@ msgid "" " off. Things have gotten pretty bad, but at least the grown-ups aren't " "telling you where you can't roll." msgstr "" +"ローラーブレードが大好きです!ローラーブレードを脱いでいるより履いている時間の方が長いほどです。事態は悪化していますが、少なくとも大人たちに注意されることはありません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136734,6 +138871,7 @@ msgid "" " off. Things have gotten pretty bad, but at least the grown-ups aren't " "telling you where you can't roll." msgstr "" +"ローラーブレードが大好きです!ローラーブレードを脱いでいるより履いている時間の方が長いほどです。事態は悪化していますが、少なくとも大人たちに注意されることはありません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136749,6 +138887,7 @@ msgid "" "grown-ups to tell you what to do is the only reason you're alive. Man, you " "really should've played hooky today." msgstr "" +"大人の指図など気にもせず、結果的に校長室で毎日のように怒られていました。これからは大人たちに指図されることもないのだから、生き残った甲斐があったというものです。やれやれ、今日は学校をサボるべきでしたね。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136764,6 +138903,7 @@ msgid "" "grown-ups to tell you what to do is the only reason you're alive. Man, you " "really should've played hooky today." msgstr "" +"大人の指図など気にもせず、結果的に校長室で毎日のように怒られていました。これからは大人たちに指図されることもないのだから、生き残った甲斐があったというものです。やれやれ、今日は学校をサボるべきでしたね。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136811,6 +138951,7 @@ msgid "" "you're facing the hardest test yet, and you're not sure if those are the " "right kind of tools for the job." msgstr "" +"あらゆる学力テストに合格してほしいと願う両親の要望に応えて、知性と記憶力を高める生体部品を移植されました。さて、今までで最も難しいテストに直面していますが、生体部品がこの状況で役に立つのでしょうか。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136826,6 +138967,7 @@ msgid "" "you're facing the hardest test yet, and you're not sure if those are the " "right kind of tools for the job." msgstr "" +"あらゆる学力テストに合格してほしいと願う両親の要望に応えて、知性と記憶力を高める生体部品を移植されました。さて、今までで最も難しいテストに直面していますが、生体部品がこの状況で役に立つのでしょうか。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136840,6 +138982,7 @@ msgid "" " of the game. In the Cataclysm, it means getting eaten by monsters. Don't " "slip up." msgstr "" +"ドッジボールで回避に失敗するということは、ボールが当たって内野から除外されることを意味していました。大変動の世界で回避に失敗することは、化け物に喰われることを意味します。失敗は許されません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136854,6 +138997,7 @@ msgid "" " of the game. In the Cataclysm, it means getting eaten by monsters. Don't " "slip up." msgstr "" +"ドッジボールで回避に失敗するということは、ボールが当たって内野から除外されることを意味していました。大変動の世界で回避に失敗することは、化け物に喰われることを意味します。失敗は許されません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136868,6 +139012,7 @@ msgid "" "that make things go boom, but there aren't any teachers around to enforce " "the rules any more." msgstr "" +"学校のクラブ活動では、本当に楽しい化学実験、つまり何かを爆発させるような実験で遊ぶことは絶対に許されませんでした。しかし、ルールを決める教師はもう居ません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136882,6 +139027,7 @@ msgid "" "that make things go boom, but there aren't any teachers around to enforce " "the rules any more." msgstr "" +"学校のクラブ活動では、本当に楽しい化学実験、つまり何かを爆発させるような実験で遊ぶことは絶対に許されませんでした。しかし、ルールを決める教師はもう居ません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136896,6 +139042,7 @@ msgid "" "can use your technical skills to help you stay alive. You just haven't " "figured out how to make an awesome death ray yet." msgstr "" +"学校ではA/V部に所属していました。身に付けた機械弄りのスキルは生存の助けになるでしょう。ただ、今はまだスーパー殺人光線銃の作り方が分かりません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136910,6 +139057,7 @@ msgid "" "can use your technical skills to help you stay alive. You just haven't " "figured out how to make an awesome death ray yet." msgstr "" +"学校ではA/V部に所属していました。身に付けた機械弄りのスキルは生存の助けになるでしょう。ただ、今はまだスーパー殺人光線銃の作り方が分かりません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136924,6 +139072,7 @@ msgid "" "aggravation of imparting knowledge to young minds. If zombies have any " "interest in education, they're not showing it." msgstr "" +"生涯に渡って子供たちを教育し、若い心に知識を与える喜びと難しさを経験してきました。直接聞いたわけではありませんが、ゾンビが教育に関心を持っているようには見えません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136938,6 +139087,7 @@ msgid "" "aggravation of imparting knowledge to young minds. If zombies have any " "interest in education, they're not showing it." msgstr "" +"生涯に渡って子供たちを教育し、若い心に知識を与える喜びと難しさを経験してきました。直接聞いたわけではありませんが、ゾンビが教育に関心を持っているようには見えません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136952,6 +139102,7 @@ msgid "" "publisher seems more difficult a prospect than usual. You managed to hold " "onto your camera - hopefully you can get some fantastic shots." msgstr "" +"大変動に肉薄して記録を残せばきっと出世間違いなしですが、いつもの調子で出版社を見つけるのは難しそうです。カメラはなんとか持ち出せたので、上手くいけば素晴らしい写真が撮れそうです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136966,6 +139117,7 @@ msgid "" "publisher seems more difficult a prospect than usual. You managed to hold " "onto your camera - hopefully you can get some fantastic shots." msgstr "" +"大変動に肉薄して記録を残せばきっと出世間違いなしですが、いつもの調子で出版社を見つけるのは難しそうです。カメラはなんとか持ち出せたので、上手くいけば素晴らしい写真が撮れそうです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -136979,7 +139131,7 @@ msgid "" "It was hard enough getting kids to run laps without having to worry about " "them trying to eat your brains. Zombies won't even line up when you blow " "your whistle." -msgstr "" +msgstr "脳みそを食べようと狙ってくる子供達にグラウンドを走るよう指示するなんて、まず不可能です。ホイッスルを吹いてもゾンビは整列してくれません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -136993,7 +139145,7 @@ msgid "" "It was hard enough getting kids to run laps without having to worry about " "them trying to eat your brains. Zombies won't even line up when you blow " "your whistle." -msgstr "" +msgstr "脳みそを食べようと狙ってくる子供達にグラウンドを走るよう指示するなんて、まず不可能です。ホイッスルを吹いてもゾンビは整列してくれません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137008,6 +139160,7 @@ msgid "" "brainer to grab your bag and run when the sirens sounded. The cities are " "overrun, but you're prepared to make a home wherever you may find yourself." msgstr "" +"暇さえあれば大自然の中でハイキングやキャンプを楽しんでいたので、サイレンが鳴ったときは反射的にバッグを掴み、逃げ出しました。都市は蹂躙されましたが、どこであろうと家を構える覚悟はできています。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137022,6 +139175,7 @@ msgid "" "brainer to grab your bag and run when the sirens sounded. The cities are " "overrun, but you're prepared to make a home wherever you may find yourself." msgstr "" +"暇さえあれば大自然の中でハイキングやキャンプを楽しんでいたので、サイレンが鳴ったときは反射的にバッグを掴み、逃げ出しました。都市は蹂躙されましたが、どこであろうと家を構える覚悟はできています。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137034,7 +139188,7 @@ msgctxt "prof_desc_male" msgid "" "You're a miner, not a minor! Your canteen is dry, your jackhammer is out of" " gas, and you're on your last pair of batteries for your mining helmet…" -msgstr "" +msgstr "鉱山作業員はマイナーな職業ではありません!水筒は空、ジャックハンマーはガス欠、採掘用ヘルメットの電池も残り1本です..." #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137047,7 +139201,7 @@ msgctxt "prof_desc_female" msgid "" "You're a miner, not a minor! Your canteen is dry, your jackhammer is out of" " gas, and you're on your last pair of batteries for your mining helmet…" -msgstr "" +msgstr "鉱山作業員はマイナーな職業ではありません!水筒は空、ジャックハンマーはガス欠、採掘用ヘルメットの電池も残り1本です..." #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137061,7 +139215,7 @@ msgid "" "Before this all began, you were having the time of your life at your dream " "job: blowing stuff up. The Cataclysm means you're finally allowed to do it " "full time. " -msgstr "" +msgstr "事が起こる以前は、夢だった爆破解体を仕事にして、人生を楽しんでいました。これからはフルタイムで爆破解体が楽しめそうです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137075,7 +139229,7 @@ msgid "" "Before this all began, you were having the time of your life at your dream " "job: blowing stuff up. The Cataclysm means you're finally allowed to do it " "full time. " -msgstr "" +msgstr "事が起こる以前は、夢だった爆破解体を仕事にして、人生を楽しんでいました。これからはフルタイムで爆破解体が楽しめそうです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137120,6 +139274,7 @@ msgid "" "ever leaving home. You came here to get a taste of New England, but New " "England keeps trying to get a taste of you!" msgstr "" +"休日を過ごすには最高の場所だと思っていましたが、今は外出したことを後悔し始めています。ニューイングランドの食を求めてやってきたのに、ニューイングランドで食い尽くされそうになっています!" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137134,6 +139289,7 @@ msgid "" "ever leaving home. You came here to get a taste of New England, but New " "England keeps trying to get a taste of you!" msgstr "" +"休日を過ごすには最高の場所だと思っていましたが、今は外出したことを後悔し始めています。ニューイングランドの食を求めてやってきたのに、ニューイングランドで食い尽くされそうになっています!" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137148,6 +139304,7 @@ msgid "" "cast and crew all seem to have turned into zombies, which is pretty bad " "timing for you. Looks like it's for real this time…" msgstr "" +"リアリティ番組の撮影のため、素っ裸で森の中へ入りました。不思議なことに、出演者もスタッフも皆ゾンビの仮装をしているようですが、嫌な予感がします。随分リアルな特殊メイクですね..." #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137162,6 +139319,7 @@ msgid "" "cast and crew all seem to have turned into zombies, which is pretty bad " "timing for you. Looks like it's for real this time…" msgstr "" +"リアリティ番組の撮影のため、素っ裸で森の中へ入りました。不思議なことに、出演者もスタッフも皆ゾンビの仮装をしているようですが、嫌な予感がします。随分リアルな特殊メイクですね..." #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137177,6 +139335,7 @@ msgid "" "the few non-zombies in the world that can calibrate an Autodoc, which might " "come in handy." msgstr "" +"生体部品技術が世に登場してすぐに関連職に就き、移植を監督する日々を送ってきました。オートドクを調整できる数少ない生きた人間として、きっと重宝されることでしょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137192,6 +139351,7 @@ msgid "" "the few non-zombies in the world that can calibrate an Autodoc, which might " "come in handy." msgstr "" +"生体部品技術が世に登場してすぐに関連職に就き、移植を監督する日々を送ってきました。オートドクを調整できる数少ない生きた人間として、きっと重宝されることでしょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137207,6 +139367,7 @@ msgid "" " when you had two no-shows and the other two tried to eat you, you ditched." " Maybe you can find some new players in the ruins of the world." msgstr "" +"好き勝手言うメンバー達との毎週の交流に四苦八苦している内に、ある考えが浮かびました。損な役回りはもう止めて、思うままに行動すべきです。そういう訳で、2人のドタキャン、更に2人のゾンビ化も放り出して逃げ出しました。崩壊する世界のどこかで、きっと新たなプレイヤーも見つかるでしょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137222,6 +139383,7 @@ msgid "" " when you had two no-shows and the other two tried to eat you, you ditched." " Maybe you can find some new players in the ruins of the world." msgstr "" +"好き勝手言うメンバー達との毎週の交流に四苦八苦している内に、ある考えが浮かびました。損な役回りはもう止めて、思うままに行動すべきです。そういう訳で、2人のドタキャン、更に2人のゾンビ化も放り出して逃げ出しました。崩壊する世界のどこかで、きっと新たなプレイヤーも見つかるでしょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137237,6 +139399,7 @@ msgid "" "you did. You invested in bionics to make you smarter and memorized the " "entire handbook. Let's hope that knowledge helps you now." msgstr "" +"運、それとも意志の力でしょうか。莫大な富を得て、世界的な有名人たちが参加するゲームを主宰していました。プレイヤーをコテンパンにする力を得られるならと、より知能を高めるために生体部品を移植し、ルールブックを全て暗記しました。知識がこの状況を乗り切る助けになることを祈りましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137252,6 +139415,7 @@ msgid "" "you did. You invested in bionics to make you smarter and memorized the " "entire handbook. Let's hope that knowledge helps you now." msgstr "" +"運、それとも意志の力でしょうか。莫大な富を得て、世界的な有名人たちが参加するゲームを主宰していました。プレイヤーをコテンパンにする力を得られるならと、より知能を高めるために生体部品を移植し、ルールブックを全て暗記しました。知識がこの状況を乗り切る助けになることを祈りましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137264,7 +139428,7 @@ msgctxt "prof_desc_male" msgid "" "You were called in on your day off to feed the animals at the zoo. For some" " reason, none of your coworkers bothered showing up for work today." -msgstr "" +msgstr "休日に呼び出され、動物園で餌をやっていました。どういう訳か、今日は同僚たちが誰一人として出勤してきません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137277,7 +139441,7 @@ msgctxt "prof_desc_female" msgid "" "You were called in on your day off to feed the animals at the zoo. For some" " reason, none of your coworkers bothered showing up for work today." -msgstr "" +msgstr "休日に呼び出され、動物園で餌をやっていました。どういう訳か、今日は同僚たちが誰一人として出勤してきません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137290,7 +139454,7 @@ msgctxt "prof_desc_male" msgid "" "You decided to get away from the family for the day, so you headed to the " "fairway for a nice relaxing round of golf." -msgstr "" +msgstr "リラックスしたプレーで良いスコアを出すために、今日一日は家族を置いてゴルフ場へ向かいました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137303,7 +139467,7 @@ msgctxt "prof_desc_female" msgid "" "You decided to get away from the family for the day, so you headed to the " "fairway for a nice relaxing round of golf." -msgstr "" +msgstr "リラックスしたプレーで良いスコアを出すために、今日一日は家族を置いてゴルフ場へ向かいました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137349,6 +139513,7 @@ msgid "" "this concerns you, but last week the grocery service stopped coming and now " "the TV no longer turns on. This displeases you." msgstr "" +"奇妙な髪型と日本風の衣装で年中過ごしており、住民から好奇の目で見られていました。神道の神が遣わした使者ではないかと噂されることもありました。その話とは関係ありませんが、先週から食料配達サービスが止まり、テレビの電源も入りません。何とも不快な気分です。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137364,6 +139529,7 @@ msgid "" "this concerns you, but last week the grocery service stopped coming and now " "the TV no longer turns on. This displeases you." msgstr "" +"奇妙な髪型と日本風の衣装で年中過ごしており、住民から好奇の目で見られていました。神道の神が遣わした使者ではないかと噂されることもありました。その話とは関係ありませんが、先週から食料配達サービスが止まり、テレビの電源も入りません。何とも不快な気分です。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137378,6 +139544,7 @@ msgid "" " latest tournament was cut short when zombies invaded the piste. The " "referee was eaten, so you're not sure if the rules are still in play." msgstr "" +"競技フェンシングリーグ出場に備えて何年もトレーニングを重ねてきましたが、ゾンビが試合場に乱入したらしく、開催中のトーナメントが中断されました。審判が喰われたので、ルールはあってないようなものです。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137392,6 +139559,7 @@ msgid "" " latest tournament was cut short when zombies invaded the piste. The " "referee was eaten, so you're not sure if the rules are still in play." msgstr "" +"競技フェンシングリーグ出場に備えて何年もトレーニングを重ねてきましたが、ゾンビが試合場に乱入したらしく、開催中のトーナメントが中断されました。審判が喰われたので、ルールはあってないようなものです。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137434,7 +139602,7 @@ msgctxt "prof_desc_male" msgid "" "Taking care of cows, horses, and other animals is your passion, but the ways" " things are going, this isn't going to be just another day at the ranch." -msgstr "" +msgstr "ウシやウマなどの動物の世話に情熱を注いできましたが、この状況では、牧場での仕事をただこなすだけでは、一日を終えられそうにありません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137447,7 +139615,7 @@ msgctxt "prof_desc_female" msgid "" "Taking care of cows, horses, and other animals is your passion, but the ways" " things are going, this isn't going to be just another day at the ranch." -msgstr "" +msgstr "ウシやウマなどの動物の世話に情熱を注いできましたが、この状況では、牧場での仕事をただこなすだけでは、一日を終えられそうにありません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137462,6 +139630,7 @@ msgid "" "equipment and ensuring that the performers got what they needed. The show " "must go on." msgstr "" +"脚光を浴びることのない舞台裏で、機材を運び、修理をこなし、アーティストが必要とするものを用意してきました。この状況でもショーを止めるわけにはいきません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137476,6 +139645,7 @@ msgid "" "equipment and ensuring that the performers got what they needed. The show " "must go on." msgstr "" +"脚光を浴びることのない舞台裏で、機材を運び、修理をこなし、アーティストが必要とするものを用意してきました。この状況でもショーを止めるわけにはいきません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137490,6 +139660,7 @@ msgid "" "applause. You weren't able to grab much during the panic, but at least you " "have your loaded six string on your back." msgstr "" +"ソロパートは完璧でしたが、観客は拍手の代わりに悲鳴をよこしました。混乱の中で持ち出せたものはわずかですが、少なくとも愛用のギターは手元にあります。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137504,6 +139675,7 @@ msgid "" "applause. You weren't able to grab much during the panic, but at least you " "have your loaded six string on your back." msgstr "" +"ソロパートは完璧でしたが、観客は拍手の代わりに悲鳴をよこしました。混乱の中で持ち出せたものはわずかですが、少なくとも愛用のギターは手元にあります。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137517,6 +139689,7 @@ msgid "" "At the local mall, you saw a sign advertising a discount on survival kits. " "You bought one, more for show than for actual use. Now it's all you have." msgstr "" +"地元のショッピングモールでサバイバルキットを安く買えるというチラシを見て、実際には使わないと思いつつも取りあえず購入しました。それが、今あなたが所持している唯一の物です。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137530,6 +139703,7 @@ msgid "" "At the local mall, you saw a sign advertising a discount on survival kits. " "You bought one, more for show than for actual use. Now it's all you have." msgstr "" +"地元のショッピングモールでサバイバルキットを安く買えるというチラシを見て、実際には使わないと思いつつも取りあえず購入しました。それが、今あなたが所持している唯一の物です。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137545,6 +139719,7 @@ msgid "" "your trusty six-shooter and wandered into a world where it's always high " "noon." msgstr "" +"西部劇のイベントやショーに出演し、観光客に射撃術を披露することで生計を立てていましたが、世界は崩壊しました。信頼できる6連発銃を手に、昼夜を問わない決闘の世界へ足を踏み入れましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137560,6 +139735,7 @@ msgid "" "your trusty six-shooter and wandered into a world where it's always high " "noon." msgstr "" +"西部劇のイベントやショーに出演し、観光客に射撃術を披露することで生計を立てていましたが、世界は崩壊しました。信頼できる6連発銃を手に、昼夜を問わない決闘の世界へ足を踏み入れましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137575,6 +139751,7 @@ msgid "" "for more than drugs and booze, but you still have a chance to use the last " "symbol of your luxurious life - your sports car - and get far away." msgstr "" +"親の金を湯水のように使い、贅沢な暮らしをしていました。いつものようにドラッグパーティーに参加していましたが、ゲストはヤクや酒より飢えを満たせるものを見つけたようです。最後に残った贅沢な生活のシンボル、スポーツカーを使えば、遠くへ逃げられるかもしれません。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137590,6 +139767,7 @@ msgid "" "for more than drugs and booze, but you still have a chance to use the last " "symbol of your luxurious life - your sports car - and get far away." msgstr "" +"親の金を湯水のように使い、贅沢な暮らしをしていました。いつものようにドラッグパーティーに参加していましたが、ゲストはヤクや酒より飢えを満たせるものを見つけたようです。最後に残った贅沢な生活のシンボル、スポーツカーを使えば、遠くへ逃げられるかもしれません。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137621,6 +139799,118 @@ msgid "" msgstr "" "兵士や生存者を次から次へと移送し、何もかもが崩壊していく様子を空から眺めていました。空を飛び回る化け物の姿を見れば、墜落するのは時間の問題だと分かります。" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -137799,10 +140089,10 @@ msgstr "CBM技師" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" -"CBMの製造に関係する警備の厳重な施設で、面白味のない技師の仕事をしていました。手にはんだごてを移植し、精密機械の補助を受けながら働いて高い給料を得ていました。" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137814,10 +140104,10 @@ msgstr "CBM技師" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" -"CBMの製造に関係する警備の厳重な施設で、面白味のない技師の仕事をしていました。手にはんだごてを移植し、精密機械の補助を受けながら働いて高い給料を得ていました。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -137958,7 +140248,7 @@ msgstr "" #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Bionic Operator" -msgstr "" +msgstr "サイボーグ(熟練の傭兵)" #. ~ Profession (male Bionic Operator) description #: lang/json/professions_from_json.py @@ -137971,11 +140261,12 @@ msgid "" " blows up. Now you're free until the bomb goes off. Maybe you'll find " "someone who can remove it." msgstr "" +"12の先頭集団に所属し、六大陸を渡り歩いてきた傭兵です。以前の勤め先の副社長から、生体部品を報酬に3か月間部下として働いてほしいと言われ、引き受けたのが間違いでした。次に目覚めたときには頭蓋に爆弾を埋め込まれていたのです。1か月ごとにリセットしなければ爆発してしまいます。ひとまず爆発の時間までは自由の身です。爆弾を解除してくれる人を見つけましょう。" #: lang/json/professions_from_json.py msgctxt "profession_female" msgid "Bionic Operator" -msgstr "" +msgstr "サイボーグ(熟練の傭兵)" #. ~ Profession (female Bionic Operator) description #: lang/json/professions_from_json.py @@ -137988,6 +140279,7 @@ msgid "" " blows up. Now you're free until the bomb goes off. Maybe you'll find " "someone who can remove it." msgstr "" +"12の先頭集団に所属し、六大陸を渡り歩いてきた傭兵です。以前の勤め先の副社長から、生体部品を報酬に3か月間部下として働いてほしいと言われ、引き受けたのが間違いでした。次に目覚めたときには頭蓋に爆弾を埋め込まれていたのです。1か月ごとにリセットしなければ爆発してしまいます。ひとまず爆発の時間までは自由の身です。爆弾を解除してくれる人を見つけましょう。" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -139117,6 +141409,226 @@ msgid "" "find some other use." msgstr "テストでズルをするために使っていた魔法は、大変動の世界で他の用途に役立つかもしれません。" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -140790,8 +143302,8 @@ msgid "build a metalworking forge" msgstr "金属加工炉" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." -msgstr "金床とるつぼを置いて、作れるものを増やしましょう。" +msgid "Let's build an anvil and crucible to increase our crafting options." +msgstr "" #: lang/json/recipe_from_json.py msgid "add an anvil and crucible" @@ -143992,13 +146504,13 @@ msgstr "パニックと混沌の中を避難している時に、何かに噛ま #: lang/json/scenario_from_json.py msgctxt "scenario_male" msgid "Challenge - Fungal Infection" -msgstr "" +msgstr "挑戦 - 真菌感染症" #. ~ Name for scenario 'Challenge - Fungal Infection' for a female character #: lang/json/scenario_from_json.py msgctxt "scenario_female" msgid "Challenge - Fungal Infection" -msgstr "" +msgstr "挑戦 - 真菌感染症" #. ~ Description for scenario 'Challenge - Fungal Infection' for a male #. character. @@ -144006,7 +146518,7 @@ msgstr "" msgctxt "scen_desc_male" msgid "" "You feel spores crawling beneath your skin. It's only a matter of time." -msgstr "" +msgstr "胞子が皮膚の下を這っているのを感じます。あまり時間は残されていません。" #. ~ Description for scenario 'Challenge - Fungal Infection' for a female #. character. @@ -144014,7 +146526,7 @@ msgstr "" msgctxt "scen_desc_female" msgid "" "You feel spores crawling beneath your skin. It's only a matter of time." -msgstr "" +msgstr "胞子が皮膚の下を這っているのを感じます。あまり時間は残されていません。" #. ~ Name for scenario 'Burning Building' for a male character #: lang/json/scenario_from_json.py @@ -145082,6 +147594,40 @@ msgctxt "start_name" msgid "Wizard's Retreat Vacation" msgstr "魔法使いの隠れ家" +#. ~ Name for scenario 'Exile' for a male character +#: lang/json/scenario_from_json.py +msgctxt "scenario_male" +msgid "Exile" +msgstr "亡命者" + +#. ~ Name for scenario 'Exile' for a female character +#: lang/json/scenario_from_json.py +msgctxt "scenario_female" +msgid "Exile" +msgstr "亡命者" + +#. ~ Description for scenario 'Exile' for a male character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_male" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "自分の所属、もしくは個人的な理由から、亡命者になり、周囲の人々から敬遠されています。見捨てずにいてくれるのは死者だけです。" + +#. ~ Description for scenario 'Exile' for a female character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_female" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "自分の所属、もしくは個人的な理由から、亡命者になり、周囲の人々から敬遠されています。見捨てずにいてくれるのは死者だけです。" + +#. ~ Starting location for scenario 'Exile'. +#: lang/json/scenario_from_json.py +msgctxt "start_name" +msgid "Exiled" +msgstr "亡命先国" + #. ~ Name for scenario 'The Sweet Life' for a male character #: lang/json/scenario_from_json.py msgctxt "scenario_male" @@ -145263,7 +147809,7 @@ msgstr "料理" #: lang/json/skill_from_json.py msgid "" "Your skill in combining food ingredients to make other, tastier food items." -msgstr "" +msgstr "食料を組み合わせて更に美味しい食事を作るためのスキルです。" #: lang/json/skill_from_json.py src/crafting_gui.cpp msgid "tailoring" @@ -145493,14 +148039,14 @@ msgstr "" #: lang/json/skill_from_json.py msgid "chemistry" -msgstr "" +msgstr "化学" #. ~ Description for {'str': 'chemistry'} #: lang/json/skill_from_json.py msgid "" "Your skill in creating certain mixtures, solutions and compounds from " "various chemical ingredients." -msgstr "" +msgstr "様々な化学成分を使って特定の混合物、溶液、化合物などを作り出すためのスキルです。" #: lang/json/skill_from_json.py msgid "weapon" @@ -147113,7 +149659,7 @@ msgstr "やめろ。ソラジンは心を曇らせる。心を鋭く保つんだ msgid "" "Sure, take thorazine. If you want to lose your mind and wander into a horde" " of undead!" -msgstr "" +msgstr "ああ、ソラジンを飲めばいいさ。気が狂ってゾンビの大群の中に突っ込みたいならね!" #: lang/json/snippet_from_json.py msgid "Pink tablets! I love those!" @@ -147181,11 +149727,11 @@ msgstr "それができたらいいんだけどね、。" #: lang/json/snippet_from_json.py msgid "Nothing to trade, sorry ." -msgstr "" +msgstr "取り引きできるものはないな。、申し訳ない。" #: lang/json/snippet_from_json.py msgid "Maybe next time?" -msgstr "" +msgstr "また今度にしない?" #: lang/json/snippet_from_json.py msgid "No thanks, I really don't feel like it." @@ -147221,7 +149767,7 @@ msgstr "一つの場所に腰を落ち着けるタイプじゃないんだ。" #: lang/json/snippet_from_json.py msgid "I'm more of a free spirit, can't settle, sorry." -msgstr "" +msgstr "私はどっちかと言うと自由人なんだ。申し訳ないけど、定住はできない。" #: lang/json/snippet_from_json.py msgid " " @@ -147538,7 +150084,7 @@ msgstr "雑談中にビールを空ければ...しばらくの間は世界の崩 #: lang/json/snippet_from_json.py msgid "Pass me one and let's talk about the good ol' days, ." -msgstr "" +msgstr "こっちにも一缶くれないか。古き良き時代の話をしよう、。" #: lang/json/snippet_from_json.py msgid "Hey, sure thing, , I need a break anyway, how are you?" @@ -148082,11 +150628,11 @@ msgstr "ちょっと待って、聞こえてる?" #: lang/json/snippet_from_json.py msgid "What's the rush?" -msgstr "" +msgstr "何を急いでるんだ?" #: lang/json/snippet_from_json.py msgid "Wait for me , I can't keep up with you like this!" -msgstr "" +msgstr "、待って、こんなんじゃついていけない!" #: lang/json/snippet_from_json.py msgid "I'm unaffiliated." @@ -150533,114 +153079,114 @@ msgstr "生存者" #: lang/json/snippet_from_json.py msgid "Clean water, the taste that refreshes!" -msgstr "" +msgstr "綺麗な飲み水は元気が出るね!" #: lang/json/snippet_from_json.py msgid "I was parched, but not I am not." -msgstr "" +msgstr "酷く喉が渇いていたけど、もう大丈夫だ。" #: lang/json/snippet_from_json.py msgid "Water is nice, but I should get a grog ration." -msgstr "" +msgstr "水はいいね、でもたまには酒でもいいかな。" #: lang/json/snippet_from_json.py msgid "That wasn't Evian, but I'm not thirsty." -msgstr "" +msgstr "エビアンじゃないけど、喉の渇きは癒せたな。" #: lang/json/snippet_from_json.py msgid "And now I have eaten and am not hungry." -msgstr "" +msgstr "空腹は解消できたな。" #: lang/json/snippet_from_json.py msgid "That food was good, but I miss real restaurants." -msgstr "" +msgstr "美味しい食事だったけど、本物のレストランが恋しいな。" #: lang/json/snippet_from_json.py msgid "Well, that satisfied me." -msgstr "" +msgstr "よし、満腹だ。" #: lang/json/snippet_from_json.py msgid "" "I just had some food, but I'm still peckish. Would you mind if I ate more?" -msgstr "" +msgstr "さっき食べたばかりなのに、まだ腹が減ってるな。もう少し食べてもいい?" #: lang/json/snippet_from_json.py msgid "Hey, , we're out of food." -msgstr "" +msgstr "ねえ、、備蓄食料が切れたよ。" #: lang/json/snippet_from_json.py msgid "Hey, the larder is empty! We're going to starve." -msgstr "" +msgstr "ちょっと、備蓄食料が空だ!飢え死にしてしまうよ。" #: lang/json/snippet_from_json.py msgid "" "Uhm, , I don't meant to criticize, but we should focus on " "distributing some food into the basecamp larder." -msgstr "" +msgstr "その、、批判するつもりじゃないけど、拠点の備蓄食料を集めることを優先するべきじゃないか。" #: lang/json/snippet_from_json.py msgid "right on top of us!" -msgstr "" +msgstr "は真上だ!" #: lang/json/snippet_from_json.py msgid "right there!" -msgstr "" +msgstr "はそこだ!" #: lang/json/snippet_from_json.py msgid "danger close!" -msgstr "" +msgstr "が近くに!" #: lang/json/snippet_from_json.py msgid "almost in melee range!" -msgstr "" +msgstr "がもうすく射程距離内だ!" #: lang/json/snippet_from_json.py msgid "too close for comfort!" -msgstr "" +msgstr "が近すぎる、マズい!" #: lang/json/snippet_from_json.py msgid "within shooting range." -msgstr "" +msgstr "が射程距離内に入った。" #: lang/json/snippet_from_json.py msgid "only a couple of seconds' away." -msgstr "" +msgstr "が肉薄してる。" #: lang/json/snippet_from_json.py msgid "just a bit away." -msgstr "" +msgstr "がすぐそこにいる。" #: lang/json/snippet_from_json.py msgid "closer than I'd like." -msgstr "" +msgstr "が近くに居る、マズいな。" #: lang/json/snippet_from_json.py msgid "near enough to see us." -msgstr "" +msgstr "は目と鼻の先だ。" #: lang/json/snippet_from_json.py msgid "quite a bit away." -msgstr "" +msgstr "はかなり遠くにいるな。" #: lang/json/snippet_from_json.py msgid "maybe within shooting range." -msgstr "" +msgstr "が射程距離内に入ったかもしれない。" #: lang/json/snippet_from_json.py msgid "at a good distance." -msgstr "" +msgstr "と程よい距離が取れている。" #: lang/json/snippet_from_json.py msgid "far enough away that we could make sneak away." -msgstr "" +msgstr "はかなり遠くにいる。こっそり離れられそうだ。" #: lang/json/snippet_from_json.py msgid "out on the horizon, so don't worry much." -msgstr "" +msgstr "は地平線の向こうだ。心配ないよ。" #: lang/json/snippet_from_json.py msgid "at a long distance." -msgstr "" +msgstr "は遠くにいるな。" #: lang/json/snippet_from_json.py msgid " will use ranged weapons." @@ -155188,6 +157734,341 @@ msgstr "スタイル" msgid "-chant" msgstr "チャント" +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. It has an unsettling loose and spongy " +"texture, but smells… mostly normal. There are strange tangles and " +"formations in it that don't appear natural at all: bits of bone and hair " +"crusted up inside the muscle, as if trying to form another organism. Still," +" seems digestible at least, if you cook it and remove the worst parts." +msgstr "" +"ひどく変異した動物の肉です。締まりのないスポンジのような質感が不安ですが...とりあえず臭いは、おおむね普通です。見たこともない奇妙な瘤や器官も混ざっており、肉の内部に固まった骨や毛を見ると、まるで別の生物を生み出そうとしていたかのように思えます。まったく食用に向かない部分を取り除いて調理すれば、少なくとも消化は可能です。" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although it came from muscle tissue, it" +" has a curious swirling grain pattern, and at the center of each grain is a " +"knot of hard, cartilaginous tissue. It smells offputting." +msgstr "" +"この動物の肉は酷く変異しています。筋肉組織に奇妙な渦巻き模様を描く粒が混じっており、粒の中心部には硬い軟骨の瘤があります。不快なにおいが漂っています。" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. This is from muscle, but in the fascial" +" tissue between the muscles, thick spiny hairs have grown. Foul smelling, " +"cream-colored fluid gushes out whenever a hair pulls loose." +msgstr "" +"この動物の肉は酷く変異しています。筋肉と筋肉の間にある筋膜組織から、太い棘のような毛が生えています。毛を抜く度に、悪臭を放つクリーム色の液体が噴出します。" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although this came from muscle, it has " +"a thick cordlike texture and smells like leather and bread mold." +msgstr "この動物の肉は酷く変異しています。筋線維が太い紐のような形状に変わっており、革、あるいはパンに生えるカビのような臭いがします。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. It has an unsettling," +" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" +" the bits of hair and bone out…" +msgstr "" +"変異した動物の肉を調理したものです。スポンジのような質感が不安ですが、味に関しては...おおむね普通です。毛や骨などの食用に向かない部分は、ちゃんと取り出せているはずです..." + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. You thought you'd " +"cleared out all the gross parts, but while cooking, a fluid-filled sac " +"inside burst and covered it in some kind of thick grease." +msgstr "" +"変異した動物の肉を調理したものです。不味そうな器官は全部取り除いたと思っていましたが、内部に隠れていた嚢が調理中に破裂して油のような液体が漏れ、肉がベトベトになってしまいました。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. The surface is " +"peppered with divets from the pieces you had to dig out to make it seem " +"edible." +msgstr "変異した動物の肉を調理したものです。食べられそうな部分だけを切り出し、コショウを塗しました。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. Heat caused the " +"muscles to twist and move as if they were alive, and now it has writhed " +"itself into a dense knot." +msgstr "変異した動物の肉を調理したものです。熱によって筋線維がまるで生きているかのように捻じれ、硬く密集してしまいました。" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug, and you really aren't sure what " +"to make of them. There are things you've never seen in any anatomy book, " +"with spines and hair and other unidentified parts protruding off seemingly " +"at random." +msgstr "" +"変異した巨大昆虫から取り出した器官です。何に使えばいいのか見当もつきません。解剖学の本には載っていないようなものばかりで、棘や毛のような正体不明の物体が無造作に飛び出しています。" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug. They have a sickly green color, " +"and one of them ripped when you were removing it, revealing an inner surface" +" that looks like row upon row of human fingers, nails and all." +msgstr "" +"変異した巨大昆虫から取り出した器官です。気味の悪い緑色をしており、解体した際に一部の表面が裂けており、中には人間の指や爪のように見える部位が列になって生えています。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a huge, thick, fleshy sac you removed from a giant mutant bug. The " +"surface is covered in smooth, soft skin, and beneath it is a coiled, twisted" +" mess of cordlike tissue." +msgstr "" +"変異した巨大昆虫から取り出した、巨大な肉厚の嚢です。表面は柔らかく滑らかな皮で覆われており、その下で紐状の組織がコイルのように絡み合っているのが見えます。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a long, corded organ you removed from a giant mutant bug. It ran " +"from the head to the abdomen and has long tendrils coming off it, not unlike" +" a spinal cord." +msgstr "変異した巨大昆虫から取り出した、長い紐状の器官です。頭から腹部まで伸びており、脊髄にあたる位置からは複数の長い触手が飛び出しています。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a meaty grey organ you removed from a mutant. It has a chalky " +"yellow coating that burns your skin, and several unidentifiable fleshy tubes" +" sticking out of it. The smell it gives off stings your nostrils. You're " +"pretty confident no natural creature has one of these." +msgstr "" +"変異した生物から取り出した、肉付きの良い灰色の器官です。皮膚を刺激する白っぽい黄色のコーティングに塗れており、肉質のチューブのようなものが複数突き出ています。鼻を突くにおいが漂っており、これが自然界に存在する生物の器官ではないことが確信できます。" + +#: lang/json/snippet_from_json.py +msgid "" +"This organ meat, retrieved from a mutated creature, looks like a series of " +"small mammalian hearts arranged in series on a long fleshy tube. At the end" +" of the chain is a large fleshy sac resembling a stomach." +msgstr "" +"変異した生物から取り出した、長い肉質の管の上に小型哺乳類の心臓が並んでいるような姿の器官です。管の先端には、胃のようにも見える大きな肉嚢が繋がっています。" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It looks like a lung from a larger " +"mammal, like a dog, but instead of a few distinct lobes, it has dozens of " +"lobes arranged in sheets. Strange spindles and gnarled tumescences dot the " +"surface." +msgstr "" +"間違いなく肺であると考えられます。イヌのような大型哺乳類の肺に近いですが、数十個の小葉が板状に並んでおり、奇妙な細い棘や枝分かれした突起物が表面に点在しています。" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It has a vaguely wing-like shape, " +"with a series of nodules around what would be the trailing edge of the " +"'wing'. A cluster of quills in each corner of the organ held it to the " +"bug's carapace like clasps." +msgstr "" +"間違いなく肺であると考えられます。どことなく「翼」に似た形状をしており、先端にあたる部分には小さな節が並んでいます。表面に生えた羽毛のような素材が、この器官を虫の外殻に固定していました。" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton, but mutated. The inner side is lined with " +"veins and strange hooked protuberances." +msgstr "変異した虫の外骨格の一部です。内側には血管と奇妙な鉤状の突起が並んでいます。" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton. Stringy lines of nervous tissue and blood " +"vessels still cling to the inner surface." +msgstr "変異した虫の外骨格の一部です。内側には神経組織や筋状の血管が貼り付いたままになっています。" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of rigid, tube-shaped chitin from the inside of a giant bug. It " +"seemed to be performing some kind of support role. You're quite sure normal" +" insects don't have these." +msgstr "巨大な虫の内部に入っていた、管状の硬いキチン質です。支柱のような役割を果たしていたようですが、普通の虫にこんな部位はないはずです。" + +#: lang/json/snippet_from_json.py +msgid "" +"A long, flexible rod of chitin from inside a giant mutant bug. It is laced " +"with blood vessels and chitinous nodules." +msgstr "変異した巨大な虫の内部に入っていた、長く柔軟なキチン質の棒です。血管や結節が混じっています。" + +#: lang/json/snippet_from_json.py +msgid "" +"As you peel away the outer shell, you find veins lining the chitin plates" +msgstr "外殻を剥がすと、キチン質の装甲に沿って血管が通っていることが分かります" + +#: lang/json/snippet_from_json.py +msgid "With the creature dead, its carapace comes away surprisingly easily" +msgstr "既に死んでいるためか、外殻は驚くほど簡単に剥がれました" + +#: lang/json/snippet_from_json.py +msgid "" +"There's a thin membrane, much like skin, spread over the chitin of this " +"creature" +msgstr "この生物のもつキチン質の表面には、皮膚のような薄い膜が貼り付いています" + +#: lang/json/snippet_from_json.py +msgid "Under the carapace of this mutant is a bristly, velcro-like material" +msgstr "この変異体の外殻の下には、マジックテープのような剛毛が生えています" + +#: lang/json/snippet_from_json.py +msgid "" +"The anatomy concealed beneath seems almost like a small mammal given a shell" +" and twisted into the shape of an arthropod" +msgstr "隠されていた肉体は、まるで甲羅を被せられて節足動物のように捻じ曲げられた小さな哺乳類のようです" + +#: lang/json/snippet_from_json.py +msgid "You crack the beast open like a horrific lobster" +msgstr "ロブスターの怪物の殻を剥くように、生物を解体しました" + +#: lang/json/snippet_from_json.py +msgid "" +"The chitin holds tight to the creature, and you need to snap and tear it " +"away, sawing at tough fibers beneath" +msgstr "キチン質はこの生物にしっかりと貼り付いているようです。接着面の丈夫な繊維をノコギリで引きちぎる必要がありそうです" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside, half-formed organs press against spongy meat that doesn't look " +"anything like raw arthropod meat from normal creatures" +msgstr "体内には、一般的な節足動物の肉にはとても見えない海綿体のような物質に張り付いた、成形途中のような臓器が入っていました" + +#: lang/json/snippet_from_json.py +msgid "" +"You find a collection of hooked spines beneath that seem to have been " +"clasping it on somehow" +msgstr "鉤状の棘の集合体が、上手く器官を支えていたようです" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a complex, still-squirming mess of strange appendages and organs " +"that bear only a passing resemblance to any natural creature" +msgstr "" +"内部は、いまだに震え続ける奇妙な臓器や器官がぐちゃぐちゃに混ざった複雑な構造になっており、自然界のどんな生物の構造とも似ていないことが分かります" + +#: lang/json/snippet_from_json.py +msgid "" +"Beneath the chitin, the meat is covered in thick, bristly hair hiding a " +"chaotic bramble of half-formed, mutated organs" +msgstr "キチン質の下には、成形途中のような姿の器官がめちゃくちゃに並んでおり、それらの表面は剛毛で覆われています" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a tangled mess of organs and tissues that do not appear to " +"entirely natural" +msgstr "内部では、一般的な生物のものとは思えない臓器や組織が複雑に絡み合っています" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside the creature you find lungs, hearts, and intestines more like a " +"mammal than a giant bug" +msgstr "内部には、虫というより大型哺乳類のものに近い肺や心臓、腸が入っていました" + +#: lang/json/snippet_from_json.py +msgid "" +"The meat inside gives off a horrifying stench, and seems to be covered in " +"thin damp hair, like a newborn animal gone horribly wrong" +msgstr "内部の肉はおぞましい悪臭を放っています。臓器は湿った細い毛に覆われており、何か酷い間違いによって誕生した新種生物のものに見えます" + +#: lang/json/snippet_from_json.py +msgid "" +"Small bundles of fiber break loose as you work, splitting open to reveal " +"twisted, half-formed copies of the creature itself" +msgstr "捻じれた繊維のの束を裂いてみると、内部には、この生物の姿を模した成形途中の肉が入っていました" + +#: lang/json/snippet_from_json.py +msgid "" +"It is difficult to work, as the spongey tissue tears apart under your tools" +msgstr "道具を使っているとスポンジ状の組織がすぐに崩れてしまうため、難しい作業を強いられています" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Steaming puddles of acid spill from its outer shell as you pull it back" +msgstr "外殻を引っ張り上げると、酸性の液体が飛び散りました" + +#: lang/json/snippet_from_json.py +msgid "Steaming acid burbles from the creature's chitin as you peel it back" +msgstr "キチン質を剥がすと、酸性の液体が噴出しました" + +#: lang/json/snippet_from_json.py +msgid "" +"Several acid glands rupture as you peel back the carapace, sending streams " +"of steaming caustic fluids spraying around" +msgstr "外殻を剥がすと、酸を溜めていた腺が破裂し、液体が湯気を立てながら周囲に飛び散りました" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The organs themselves have an acrid odour, but don't seem as caustically " +"acidic as the outer shell" +msgstr "内臓からは刺激臭が漂っていますが、外殻から出たような酸性の液体はないようです" + +#: lang/json/snippet_from_json.py +msgid "" +"You carefully avoid breaking through pockets of what you think may be acid-" +"secreting glands" +msgstr "酸を分泌する腺のような器官を破らないように、注意深く作業を進めました" + +#: lang/json/snippet_from_json.py +msgid "" +"Thick, ropey cords of tissue beneath its chitin protect an inner layer of " +"strange organs, resembling those of a bird more than anything" +msgstr "キチン質の下にある太いロープ上の組織が、鳥類の器官によく似た部位を包み、保護しています" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The powerfully acidic vapors coming from the carcass make it hard to work" +msgstr "死体から出る強酸性の蒸気に阻まれて、作業がなかなか進みません" + +#: lang/json/snippet_from_json.py +msgid "" +"The tissues of the creature are full of half-formed organs, their purpose " +"unclear" +msgstr "この生物の体内にあるのは成形途中のような形状の器官ばかりで、どれが何のための臓器なのかさっぱり分かりません" + +#: lang/json/snippet_from_json.py +msgid "" +"Several times, you nearly burn yourself piercing a concealed gland full of " +"acid" +msgstr "酸がたっぷり詰まった腺を何度か破ってしまい、危うく火傷をするところでした。" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "。" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "。" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" +"。" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "。" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "。" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" +"。" + #: lang/json/snippet_from_json.py msgid "" "ATOMIC DEREGULATION! President Toffer announced to a mixed crowd today that" @@ -160273,29 +163154,29 @@ msgstr "「久しぶり、だよね?また会えてよかった。」" msgid "" "I've seen some big dinosaurs out there. I know that should be scary, but " "all I felt was hungry." -msgstr "" +msgstr "野外で大きな恐竜を見かけたんだ。怖かったはずなんだけど、空腹感が勝ったね。" #: lang/json/snippet_from_json.py msgid "" "I think those little dinosaurs are kind of cute, like a cat kind of. Do you" " think they eat cat food?" -msgstr "" +msgstr "小さな恐竜はネコみたいなもんだから、かわいいよ。恐竜はキャットフードを食べるかな?" #: lang/json/snippet_from_json.py msgid "Dinosaurs are a bow hunter's best friend. Feathers forever!" -msgstr "" +msgstr "弓使いは恐竜が大好き。羽根がたくさん生えてるからね!" #: lang/json/snippet_from_json.py msgid "" "A buddy of mine wandered close to the swamps and was eaten by a T-Rex, a big" " lizard. I'd be careful unless you have a gun and plenty of ammo." -msgstr "" +msgstr "相棒が沼地に迷い込んで、T-レックスっていう大きなトカゲに喰われてしまったんだ。銃とたくさんの弾薬を持っていないなら、気を付けるべき敵だ。" #: lang/json/snippet_from_json.py msgid "" "I hear the zombies have been in the swamps. Bad news if they bite a " "dinosaur before it bites them." -msgstr "" +msgstr "沼地にもゾンビがいるらしいな。ゾンビが恐竜を噛んだとしたら、ヤバいことになりそうだ。" #: lang/json/snippet_from_json.py msgid "" @@ -160374,7 +163255,7 @@ msgstr "「どうしてここでクソトカゲが這いまわってるんだ? msgid "" "\"I bet dinosaurs can read and play chess so don't eat us because we can " "teach you important things like magnets and ramen\"" -msgstr "" +msgstr "「きっと恐竜は文字も読めるしチェスもできるんだ磁石とかラーメンとか大事なことを教えてやるから食べないでくれ頼む」" #: lang/json/snippet_from_json.py msgid "\"where's some .700 t-rex medicine when you need it?\"" @@ -160396,6 +163277,7 @@ msgid "" "charming way. The Swampers are doing their part in this crisis and are " "accepting donations of meat and money to feed the hungry." msgstr "" +"『行方不明者多数』今話題の宗教団体「スワンパーズ」のメンバーやその系列ホテル、カジノチェーン関係者らが行方不明になったという報告は日に日に増加しており、トラブル続きの我が国を震撼させています。コメントを求められたカリスマCEO、ボー・バロニックス氏は行方不明者の所在の説明については拒否し、「大喰らい共が帰ってきた。きっと満足するだろう」とだけ述べ、ウインクして微笑みました。" #: lang/json/snippet_from_json.py msgid "" @@ -160406,6 +163288,7 @@ msgid "" "died out millions of years ago but 'at this point why not, at least they're " "cute'. And cute they are!" msgstr "" +"『かわいい訪問者』本日、クリテイシャス幼稚園上空に青色のエネルギー波と光を点滅させる神秘的なポータルが出現し、子供たちのもとにモコモコとした小さなかわいい恐竜やその幼体が降り注ぎました。地元の古生物学者でありストリッパーでもあるオスニエル・マーシュ氏は、恐竜は数百万年前に絶滅していなかったとする懐疑論を表明しましたが、「とにかく、少なくともこの生物がかわいいことは確かです」と述べました。確かに、かわいいですね!" #: lang/json/snippet_from_json.py msgid "" @@ -160414,6 +163297,7 @@ msgid "" "and 'possibly drug-related' but cautioned refugees to 'get all the guns you " "can' because 'it's bad out there'." msgstr "" +"『恐竜騒動を否定』FEMA職員のエルンスト・ストーマー氏は昨夜未明、都市部が危険な状態であること、郊外での恐竜の目撃報告は勘違いであり「麻薬に関連している可能性がある」ことを発表しました。ストーマー氏は避難者に対して「外出は危険です。できる限り銃を用意してください」と注意を促しました。" #: lang/json/snippet_from_json.py msgid "" @@ -163381,6 +166265,10 @@ msgstr "LMOEシェルター(地下室)" msgid "Middle of Nowhere" msgstr "郊外" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "実験区画" @@ -163683,6 +166571,12 @@ msgstr "" msgid "Yeah, alright." msgstr "ああ、そりゃいいや。" +#: lang/json/talk_topic_from_json.py +msgid "" +"The song is… quiet for now. Perhaps with time, more notes will be etched in" +" the bones of this world." +msgstr "歌は...今のところ聞こえないな。恐らく時間が経てば、この世界の骨にもっと多くの記録が刻まれることだろう。" + #: lang/json/talk_topic_from_json.py msgid "An acolyte should not take on too many songs at once." msgstr "修行者は一度に多くの歌を歌うべきではない。" @@ -163692,10 +166586,8 @@ msgid "That is all for now." msgstr "今は話すことはない。" #: lang/json/talk_topic_from_json.py -msgid "" -"The song is… quiet for now. Perhaps with time, more notes will be etched in" -" the bones of this world." -msgstr "歌は...今のところ聞こえないな。恐らく時間が経てば、この世界の骨にもっと多くの記録が刻まれることだろう。" +msgid "There are bones to etch, songs to sing. Wish to join me?" +msgstr "彫る骨と、奏でる歌がある。我らに加わるか?" #: lang/json/talk_topic_from_json.py msgid "Do you wish to take on more songs?" @@ -163706,8 +166598,8 @@ msgid "Do you believe you can take on the burden of additional bones?" msgstr "これ以上の骨をお前に負担させられると思っているのか?" #: lang/json/talk_topic_from_json.py -msgid "There are bones to etch, songs to sing. Wish to join me?" -msgstr "彫る骨と、奏でる歌がある。我らに加わるか?" +msgid "A song may yet be sung by you, should you wish to." +msgstr "お前が望むなら、歌うこともできるだろう。" #: lang/json/talk_topic_from_json.py msgid "There is an additional song you could take on, if you'd like." @@ -163718,10 +166610,6 @@ msgid "" "I know of certain bones that could be of use, if you'd like to know more." msgstr "もっと知りたいのなら、役に立つかもしれない骨について心当たりがある。" -#: lang/json/talk_topic_from_json.py -msgid "A song may yet be sung by you, should you wish to." -msgstr "お前が望むなら、歌うこともできるだろう。" - #: lang/json/talk_topic_from_json.py msgid "I see." msgstr "なるほどね。" @@ -164394,14 +167282,14 @@ msgstr "はい、起こしてください!" msgid "no, go back to sleep." msgstr "いいえ、眠らせておいてください。" -#: lang/json/talk_topic_from_json.py -msgid "What is it, friend?" -msgstr "何だい、友よ?" - #: lang/json/talk_topic_from_json.py msgid " *pshhhttt* I'm reading you boss, over." msgstr "...ザザザザ...ちゃんと聞こえているよ、どうぞ。" +#: lang/json/talk_topic_from_json.py +msgid "What is it, friend?" +msgstr "何だい、友よ?" + #: lang/json/talk_topic_from_json.py msgid "I want to give you some commands for combat." msgstr "戦闘時の指示を出したい。" @@ -164638,15 +167526,15 @@ msgstr "必要なら敵の近くへ移動して戦え。" msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "後ろに下がるな。私の移動の邪魔になる地点へ移動するな。" -#: lang/json/talk_topic_from_json.py src/action.cpp src/activity_handlers.cpp -#: src/avatar.cpp src/avatar.cpp src/avatar_action.cpp src/avatar_action.cpp -#: src/avatar_action.cpp src/crafting.cpp src/game.cpp src/handle_action.cpp -#: src/handle_action.cpp src/handle_liquid.cpp src/handle_liquid.cpp -#: src/iexamine.cpp src/iexamine.cpp src/iexamine.cpp src/iuse.cpp -#: src/iuse.cpp src/iuse.cpp src/iuse_actor.cpp src/iuse_actor.cpp -#: src/iuse_actor.cpp src/monexamine.cpp src/monexamine.cpp src/npc.cpp -#: src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp -#: src/veh_interact.cpp src/vehicle_use.cpp +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py +#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp src/avatar.cpp +#: src/avatar_action.cpp src/avatar_action.cpp src/crafting.cpp +#: src/crafting.cpp src/game.cpp src/handle_action.cpp src/handle_action.cpp +#: src/handle_liquid.cpp src/handle_liquid.cpp src/iexamine.cpp +#: src/iexamine.cpp src/iexamine.cpp src/iuse.cpp src/iuse.cpp src/iuse.cpp +#: src/iuse_actor.cpp src/iuse_actor.cpp src/iuse_actor.cpp src/monexamine.cpp +#: src/monexamine.cpp src/npc.cpp src/pickup.cpp src/player.cpp src/player.cpp +#: src/player.cpp src/veh_interact.cpp src/vehicle_use.cpp msgid "Never mind." msgstr "何でもない。" @@ -164850,14 +167738,14 @@ msgstr "その話は忘れてくれ。さあ行こう。" msgid "OVERRIDE: " msgstr "上書き: " -#: lang/json/talk_topic_from_json.py -msgid "" -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "" msgstr "" @@ -165213,14 +168101,14 @@ msgstr "よし、急に動いたりはするなよ..." msgid "Keep your distance!" msgstr "近寄るな!" -#: lang/json/talk_topic_from_json.py -msgid "This is my territory, ." -msgstr "ここはうちのシマだ、。" - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "This is my territory, ." +msgstr "ここはうちのシマだ、。" + #: lang/json/talk_topic_from_json.py msgid "Calm down. I'm not going to hurt you." msgstr "落ち着けよ。君を傷付けるつもりはないよ。" @@ -165273,30 +168161,30 @@ msgstr "どうした?" msgid "I don't care." msgstr "どうでもいいね。" +#: lang/json/talk_topic_from_json.py +msgid "I don't have any jobs for you." +msgstr "特に頼みたい事はないね。" + #: lang/json/talk_topic_from_json.py msgid "I don't have any more jobs for you." msgstr "頼みたい事はそれだけだ。" #: lang/json/talk_topic_from_json.py -msgid "I don't have any jobs for you." -msgstr "特に頼みたい事はないね。" +msgid "I have other jobs for you. Want to hear about them?" +msgstr "一つ頼みたい事があるんだ。聞いてくれるか?" #: lang/json/talk_topic_from_json.py msgid "I have more jobs for you. Want to hear about them?" msgstr "他にも頼みたい事があるんだ。聞いてくれるか?" #: lang/json/talk_topic_from_json.py -msgid "I have other jobs for you. Want to hear about them?" +msgid "I have another job for you. Want to hear about it?" msgstr "一つ頼みたい事があるんだ。聞いてくれるか?" #: lang/json/talk_topic_from_json.py msgid "I just have one job for you. Want to hear about it?" msgstr "1つ頼みたい事があるんだ。聞いてくれるか?" -#: lang/json/talk_topic_from_json.py -msgid "I have another job for you. Want to hear about it?" -msgstr "一つ頼みたい事があるんだ。聞いてくれるか?" - #: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py #: src/npctalk.cpp msgid "Oh, okay." @@ -165306,6 +168194,10 @@ msgstr "ああ、分かったよ。" msgid "Never mind, I'm not interested." msgstr "いいや、興味ないね。" +#: lang/json/talk_topic_from_json.py +msgid "You're not working on anything for me now." +msgstr "頼んでいる仕事は今のところ何もないよ。" + #: lang/json/talk_topic_from_json.py msgid "Which job?" msgstr "どの依頼の話だ?" @@ -165314,10 +168206,6 @@ msgstr "どの依頼の話だ?" msgid "What about it?" msgstr "何だ?" -#: lang/json/talk_topic_from_json.py -msgid "You're not working on anything for me now." -msgstr "頼んでいる仕事は今のところ何もないよ。" - #: lang/json/talk_topic_from_json.py msgid "I'll do it!" msgstr "いいだろう、引き受けたよ!" @@ -165526,6 +168414,10 @@ msgstr "ふーん、分かった。" msgid "Thanks!" msgstr "ありがとう!" +#: lang/json/talk_topic_from_json.py +msgid "Focus on the road, mate!" +msgstr "相棒、運転に集中してくれ!" + #: lang/json/talk_topic_from_json.py msgid "I must focus on the road!" msgstr "運転に集中させてくれ!" @@ -165550,10 +168442,6 @@ msgstr "今は何も思いつかないな。後でまた聞いてくれる?" msgid "I have some reason for not telling you." msgstr "ちょっと理由があって話せないんだ。" -#: lang/json/talk_topic_from_json.py -msgid "Focus on the road, mate!" -msgstr "相棒、運転に集中してくれ!" - #: lang/json/talk_topic_from_json.py msgid "Ah, okay." msgstr "あぁ、分かった。" @@ -165658,6 +168546,10 @@ msgstr "いや、ここでいい。" msgid "On second thought, never mind." msgstr "ただの思い付きだ、気にしないでくれ。" +#: lang/json/talk_topic_from_json.py +msgid "I can't train you properly while you're operating a vehicle!" +msgstr "車両を運転している間は、ちゃんと訓練できないよ!" + #: lang/json/talk_topic_from_json.py msgid "I can't train you properly while I'm operating a vehicle!" msgstr "車両を運転している間は、ちゃんと訓練できないよ!" @@ -165670,10 +168562,6 @@ msgstr "少し時間をくれないか。後で話をしよう。" msgid "I have some reason for denying you training." msgstr "ちょっと理由があって訓練はできないんだ。" -#: lang/json/talk_topic_from_json.py -msgid "I can't train you properly while you're operating a vehicle!" -msgstr "車両を運転している間は、ちゃんと訓練できないよ!" - #: lang/json/talk_topic_from_json.py msgid "Not a bloody chance, I'm going to get left behind!" msgstr "絶対に嫌だね、付いて行くからな!" @@ -171767,15 +174655,15 @@ msgstr "分かった。彼らを説得してみる。" msgid "All right! Let's get going." msgstr "わかったよ!さあ行こう。" +#: lang/json/talk_topic_from_json.py +msgid "We've done it! We've solved the list!" +msgstr "やった!リストが全部埋まった!" + #: lang/json/talk_topic_from_json.py msgid "" "How's things with you? My cardboard collection is getting quite impressive." msgstr "調子はどう?私の段ボールコレクションはかなり良い感じだよ。" -#: lang/json/talk_topic_from_json.py -msgid "We've done it! We've solved the list!" -msgstr "やった!リストが全部埋まった!" - #: lang/json/talk_topic_from_json.py msgid "Have I told you about cardboard, friend? Do you have any?" msgstr "段ボールの事は話したっけ?君、段ボール持ってる?" @@ -176361,6 +179249,18 @@ msgstr "分かってるじゃないか、幸運を祈ってるよ。" msgid "Got it." msgstr "分かった。" +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "何だ?" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "何か用か?" @@ -176373,14 +179273,14 @@ msgstr "時間報酬制だ、さっさと話せ..." msgid "Hey." msgstr "やあ。" -#: lang/json/talk_topic_from_json.py -msgid "Yes?" -msgstr "何だ?" - #: lang/json/talk_topic_from_json.py msgid "Good to see you." msgstr "会えて嬉しいよ。" +#: lang/json/talk_topic_from_json.py +msgid "About those jobs…" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Good to see you around." msgstr "会えて光栄だ。" @@ -176390,8 +179290,8 @@ msgid "Want help with something else?" msgstr "何か手伝ってほしいことはある?" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." -msgstr "何でもない、もう行くよ。" +msgid "Lets set a combat strategy" +msgstr "" #: lang/json/talk_topic_from_json.py msgid "" @@ -176444,6 +179344,10 @@ msgstr "何か興味深い話はある?" msgid "Anything on your mind?" msgstr "どうかした?" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "雇用主について何か知っているか?" @@ -177467,6 +180371,269 @@ msgstr "今では、私が人間かどうか判定する人自体が少ないね msgid "Now I choose the cause I'll die for." msgstr "そして、自分が行くべき道を選んだってわけ。" +#: lang/json/talk_topic_from_json.py +msgid "" +"Yes. I ask because I noticed there are dinosaurs around. Do you know " +"anything about that?" +msgstr "ああ。外で恐竜を見かけたから聞いたんだ。あの恐竜と何か関係があるのか?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"I know all kinds of weird useless stuff. I've seen things at churches, I've" +" seen things on farms, I've seen whole exhibits way out. Those Swampers, " +"they know what's happening. They're creatures of light come back to save us" +" all. Or eat us, I forget." +msgstr "" +"役に立つかは知らないが、色々知ってる。教会でも見たし、農場でも見たし、展示会場も全部見て回った。スワンパーなら何が起きてるのかしってるかもしれない。確かあの恐竜は正義の生き物で、帰ってきたのは皆を救うためだとか。いや、食べるため、だったかな。" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters will be fed." +msgstr "これで捕食者に飯を用意できる。" + +#: lang/json/talk_topic_from_json.py +msgid "Welcome. Are you hungry friend?" +msgstr "ようこそ。腹が減ったのか?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You look hungry friend. So much hunger in this world. This is the time of " +"the eaters." +msgstr "腹が減ってるようだな。この世は飢えに満ちている。捕食者たちの時代がやってきたんだ。" + +#: lang/json/talk_topic_from_json.py +msgid "Hello. Who are the eaters?" +msgstr "やあ。捕食者って誰だ?" + +#: lang/json/talk_topic_from_json.py +msgid "So about the eaters…" +msgstr "その捕食者について..." + +#: lang/json/talk_topic_from_json.py +msgid "You mentioned some pretenders before. What does that mean?" +msgstr "前にも言っていたな。どういう意味なんだ?" + +#: lang/json/talk_topic_from_json.py +msgid "Is there a way I can help feed the eaters?" +msgstr "捕食者に餌をやる方法はあるのか?" + +#: lang/json/talk_topic_from_json.py +msgid "I have to get going. Take care, CEO Baronyx." +msgstr "もう行くよ。お気をつけて、CEO。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters have returned, along with the false ones. We must feed the" +" eaters and destroy the pretenders child." +msgstr "捕食者が帰ってきたんだ、偽物も連れてな。本物には飯を用意して、偽物は駆除しないと。" + +#: lang/json/talk_topic_from_json.py +msgid "Who are you talking about?" +msgstr "何の話をしているんだ?" + +#: lang/json/talk_topic_from_json.py +msgid "No thank you, I'd like to leave now." +msgstr "いや、結構。もう行くよ。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"This Cataclysm has woken the great eaters, lost in time, returned them to " +"the world to do their great work, to multiply and fill the land with their " +"song. The time of man is over, but we few who remain can do our part to " +"protect this new world from the pretenders, who would steal the meat." +msgstr "" +"大変動によって、忘れ去られた偉大なる捕食者たちが目覚めたんだ。崇高な役割を果たし、世界を我が物とし、大地を咆哮で満たすために。人類の時代は終わった。私のようなごくわずかな生き残りは、肉を盗もうとする偽者からこの新世界を守るため、役割を果たすべきなんだ。" + +#: lang/json/talk_topic_from_json.py +msgid "So what do you do with the meat?" +msgstr "それで、その肉は何に使うんだ?" + +#: lang/json/talk_topic_from_json.py +msgid "Who are the great eaters and the pretenders?" +msgstr "その捕食者と偽者っていうのは誰なんだ?" + +#: lang/json/talk_topic_from_json.py +msgid "Are there any others left?" +msgstr "他にも生き残りがいるのか?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are the ones that were lost, what we call dinosaurs whose " +"meat we took and who are taking it back. The pretenders are those others " +"that have come to steal the meat of this world. It does not belong to them " +"and we will take it from their mouths." +msgstr "" +"かつて失われた大いなる捕食者とは、恐竜のことだ。私たちが肉を集めているのも、恐竜に与えるためだ。偽者というのは、この世界から肉を盗む他の奴らのことだ。肉はあいつらの物じゃない。だから取り返すんだ。" + +#: lang/json/talk_topic_from_json.py +msgid "Okay, so you worship dinosaurs. Understood." +msgstr "なるほど、恐竜を崇拝しているんだな。理解したよ。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The Swampers knew these times would return and we prepared for them. When " +"others wasted their time and meat, we fed and grew strong, and we filled our" +" stores with meat for this day." +msgstr "" +"スワンパーはこんな時代が来ることを予見し、準備をしていたんだ。他の奴らが時間と肉を無駄にしている時、私たちは飯を食って強くなり、この火のために肉をたくさん備蓄しておいたんだ。" + +#: lang/json/talk_topic_from_json.py +msgid "Yes, very good." +msgstr "へえ、それはすごい。" + +#: lang/json/talk_topic_from_json.py +msgid "You keep talking about meat. Why is meat so important?" +msgstr "肉の話ばかりしているな。そんなに肉が大事なのか?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The meat makes the great eaters strong. We gather the meat and feed them, " +"and in the end we too will serve the eaters in death as we do in life. This" +" was always our purpose and we lucky few have lived to see it." +msgstr "" +"肉は偉大なる捕食者を強くする。私たちは肉を集めて与える。私たちは生まれてから死ぬまで捕食者たちに仕える。この目標は常に変わらないが、幸運にも生きて目的達成を迎えられた者はほとんどいない。" + +#: lang/json/talk_topic_from_json.py +msgid "Our purpose? How do you know?" +msgstr "目的?どうしてそんな目的になったんだ?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The return of the great eaters was fortold by a prophet. We faithful have " +"been waiting and preparing since the revelation." +msgstr "捕食者の復活は預言者によって伝えられていた。私を含めた忠実なしもべたちは、啓示以来、その日を待ち望み、準備を進めていたんだ。" + +#: lang/json/talk_topic_from_json.py +msgid "I guess it must be nice to be proven right." +msgstr "預言が真実だと証明されて良かったな。" + +#: lang/json/talk_topic_from_json.py +msgid "This is crazy." +msgstr "狂ってる。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You understand our purpose. I welcome you to this work, all are needed to " +"feed the eaters." +msgstr "理解してくれるか。君も歓迎しよう。捕食者を養うのを手伝ってくれ。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You deny what you see right in front of you. This world is what was " +"fortold." +msgstr "目の前にあるものを否定するのか。この状況は預言されていたんだ。" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters have fed. They will be hungry again in time" +msgstr "捕食者は飯を食ったよ。少し経てばまた腹を空かせるだろう。" + +#: lang/json/talk_topic_from_json.py +msgid "You know what to do." +msgstr "何をすべきか分かっているだろう。" + +#: lang/json/talk_topic_from_json.py +msgid "The great eaters must be fed. Are you ready?" +msgstr "捕食者たちに飯を用意しないと。準備はいいか?" + +#: lang/json/talk_topic_from_json.py +msgid "There is still more work to do. Are you ready?" +msgstr "まだまだやることはあるんだ。準備はいいか?" + +#: lang/json/talk_topic_from_json.py +msgid "There is meat ready for the feeding. Are you ready to gather it?" +msgstr "食事の準備ができた。肉を集める準備はできたか?" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters are hungry." +msgstr "捕食者たちは腹を空かせている。" + +#: lang/json/talk_topic_from_json.py +msgid "There is more meat needed." +msgstr "もっと肉が必要だ。" + +#: lang/json/talk_topic_from_json.py +msgid "I know of eaters ready for meat." +msgstr "捕食者たちは肉を食べたがってる。" + +#: lang/json/talk_topic_from_json.py +msgid "Maybe another time CEO Baronyx." +msgstr "CEO、また次の機会にしよう。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"If you are ready to be of service to the great eaters, go and find meat and " +"bring it back. There is always need for more." +msgstr "捕食者たちの世話をしたいなら、肉を集めてきてくれ。常にたくさん用意しておく必要がある。" + +#: lang/json/talk_topic_from_json.py +msgid "Happy to be of service to the great eaters. I'm in." +msgstr "捕食者たちのお役に立てて幸せだよ。指示に従おう。" + +#: lang/json/talk_topic_from_json.py +msgid "Excellent. Make it happen." +msgstr "素晴らしい。上手くやってくれよ。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are not picky, any pure meat will do, but mutant and " +"tainted meat are not good enough." +msgstr "捕食者たちは選り好みしないから、何の肉でも構わない。ただし、変異した生物の肉や汚染された肉ではダメだ。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"So, meat from a creature that isn't a zombie, or a giant monster. Got it." +msgstr "つまり、ゾンビでも巨大な怪物でもない、普通の動物の肉だな。分かったよ。" + +#: lang/json/talk_topic_from_json.py +msgid "Of course, you should find everything you need here." +msgstr "もちろん、必要なものがあれば持っていって構わないよ。" + +#: lang/json/talk_topic_from_json.py +msgid "That explains the knives then." +msgstr "だからナイフがあったんだな。" + +#: lang/json/talk_topic_from_json.py +msgid "Oh, you know my friend Brigitte. Well in that case, let's go!" +msgstr "ああ、友人のブリジットを知っているのか。ならば話が早い、さあ行こう!" + +#: lang/json/talk_topic_from_json.py +msgid "No, I must remain here to oversee the company." +msgstr "いいや、私はここで会社を経営しなければならない。" + +#: lang/json/talk_topic_from_json.py +msgid "Of course CEO Baronyx." +msgstr "そうだろうな、CEO。" + +#: lang/json/talk_topic_from_json.py +msgid "Sweet!" +msgstr "ありがたい!" + +#: lang/json/talk_topic_from_json.py +msgid "Not just now. You should remain here to oversee the company." +msgstr "今はまだいい。ここに残って会社経営を続けるべきだ。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"Of course, the company will be ready when you are and the great eaters will " +"feed either way." +msgstr "分かった。気が変わったら、いつ来てもらっても構わない。偉大なる捕食者はいつも腹を空かせているからな。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"It was fortold that as the great eaters returned, so too would the " +"pretenders, who would come to steal the meat. Very little is asked of us, " +"except that we do all we can to ensure that the true great eaters received " +"as much meat as possible and the pretenders go hungry." +msgstr "" +"捕食者が帰ってくるとき,その肉を盗む偽者も帰ってくるとは言われていたんだ。私たちに求められているのは、真の捕食者が可能な限り多くの肉を手に入れ、偽者の腹を満たさせないこと。それだけだ。" + +#: lang/json/talk_topic_from_json.py +msgid "Yes CEO Baronyx, very good CEO Baronyx." +msgstr "なるほど、そういうことかCEO。" + +#: lang/json/talk_topic_from_json.py +msgid "This makes no sense and I'm done talking about it." +msgstr "意味が分からない。この話は終わりにしよう。" + #: lang/json/talk_topic_from_json.py msgid "Heya, scav." msgstr "やぁ、スカベンジャー。" @@ -177999,10 +181166,6 @@ msgstr "%sの攻撃を防ぎました。" msgid " blocks %s" msgstr "は%sの攻撃を防ぎました。" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "受け流す" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -179147,7 +182310,7 @@ msgstr "は%sに掴まれそうになりましたが、巧妙に逃れ #: lang/json/technique_from_json.py msgid "Sweeping Strike" -msgstr "振り払い" +msgstr "下段攻撃" #: lang/json/technique_from_json.py #, python-format @@ -180338,106 +183501,190 @@ msgstr "は武器で%sの急所を狙いました。" #: lang/json/technique_from_json.py msgid "Burning Blade" -msgstr "" +msgstr "燃える刃" #: lang/json/technique_from_json.py #, python-format msgid "You unleash a fiery attack against %s" -msgstr "" +msgstr "%s目がけて燃えるように強烈な攻撃を放ちました。" #: lang/json/technique_from_json.py #, python-format msgid " unleash a fiery attack against %s" -msgstr "" +msgstr "は%s目がけて燃えるように強烈な攻撃を放ちました。" #: lang/json/technique_from_json.py msgid "Inferno Blade" -msgstr "" +msgstr "焦熱の刃" #: lang/json/technique_from_json.py #, python-format msgid "You strike %s with powerful inferno" -msgstr "" +msgstr "%s目がけて燃え盛る炎のような攻撃を放ちました。" #: lang/json/technique_from_json.py #, python-format msgid " strikes %s with powerful inferno" -msgstr "" +msgstr "は%s目がけて燃え盛る炎のような攻撃を放ちました。" #: lang/json/technique_from_json.py msgid "Firesnake" -msgstr "" +msgstr "火蛇" #: lang/json/technique_from_json.py #, python-format msgid "You strike through %s with a snaking flame" -msgstr "" +msgstr "%sを蛇のように曲がりくねる炎で打ちました。" #: lang/json/technique_from_json.py #, python-format msgid " strikes through %s with a snaking flame" -msgstr "" +msgstr "は%sを蛇のように曲がりくねる炎で打ちました。" #: lang/json/technique_from_json.py msgid "Ring of Fire" -msgstr "" +msgstr "炎の輪" #: lang/json/technique_from_json.py #, python-format msgid "You become a flaming blur as you strike %s and those around you" -msgstr "" +msgstr "炎塊に変化し、周囲を巻き込みながら%sを打ち据えました。" #: lang/json/technique_from_json.py #, python-format msgid "" " becomes a flaming blur as they strike %s and those around them" -msgstr "" +msgstr "は炎塊に変化し、周囲を巻き込みながら%sを打ち据えました。" #: lang/json/technique_from_json.py msgid "Flashing Sun" -msgstr "" +msgstr "煌めく太陽" #: lang/json/technique_from_json.py #, python-format msgid "You carve an arc through %s and those nearby" -msgstr "" +msgstr "弧を描くように周囲を巻き込みながら%sを攻撃しました。" #: lang/json/technique_from_json.py #, python-format msgid " carve an arc through %s and those nearby" -msgstr "" +msgstr "は弧を描くように周囲を巻き込みながら%sを攻撃しました。" #: lang/json/technique_from_json.py msgid "Insightful Strike" -msgstr "" +msgstr "天眼の一撃" #: lang/json/technique_from_json.py #, python-format msgid "You spot %s's weakpoint and strike" -msgstr "" +msgstr "%sの弱点を狙って攻撃しました。" #: lang/json/technique_from_json.py #, python-format msgid " spot %s's weakpoint and strike" -msgstr "" +msgstr "は%sの弱点を狙って攻撃しました。" #: lang/json/technique_from_json.py msgid "Greater Insightful Strike" -msgstr "" +msgstr "大いなる天眼の一撃" #: lang/json/technique_from_json.py msgid "Spin Attack" -msgstr "" +msgstr "スピンアタック" #: lang/json/technique_from_json.py #, python-format msgid "You unleash a spin attack against %s and those nearby" -msgstr "" +msgstr "スピンアタックを放ち、周囲を巻き込みながら%sを攻撃しました。" #: lang/json/technique_from_json.py #, python-format msgid " unleashes a spin attack against %s and those nearby" -msgstr "" +msgstr "はスピンアタックを放ち、周囲を巻き込みながら%sを攻撃しました。" + +#: lang/json/technique_from_json.py +msgid "Disarming Strike" +msgstr "武装解除攻撃" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You skillfully disarm %s" +msgstr "巧みに%sの武装を解除しました。 " + +#: lang/json/technique_from_json.py +#, python-format +msgid " skillfully disarms %s" +msgstr "は巧みに%sの武装を解除しました。" + +#: lang/json/technique_from_json.py +msgid "Lightning Recovery" +msgstr "光速復帰" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You miss %s but recover in the blink of an eye" +msgstr "%sへの攻撃を外しましたが、瞬く間に体勢を立て直しました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " misses %s but recovers in the blink of an eye" +msgstr "は%sへの攻撃を外しましたが、瞬く間に体勢を立て直しました。" + +#: lang/json/technique_from_json.py +msgid "Finishing Move" +msgstr "とどめの一撃" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You finish off %s with a powerful slash" +msgstr "%sめがけてとどめの一撃を放ちました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " finishes off %s with a powerful slash" +msgstr "は%sめがけてとどめの一撃を放ちました。" + +#: lang/json/technique_from_json.py +msgid "Dazing Strike" +msgstr "昏倒攻撃" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You harshly stun %s" +msgstr "強烈な攻撃で%sを気絶させました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " harshly stuns %s" +msgstr "は強烈な攻撃で%sを気絶させました。" + +#: lang/json/technique_from_json.py +msgid "Steel Wind" +msgstr "鋼の疾風" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleave through %s and those nearby like a steel wind" +msgstr "風に舞い飛ぶ鋼のように、周囲を巻き込みながら%sを切り裂きました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleaves through %s and those nearby like a steel wind" +msgstr "は風に舞い飛ぶ鋼のように、周囲を巻き込みながら%sを切り裂きました。" + +#: lang/json/technique_from_json.py +msgid "Scything Blade" +msgstr "大鎌の刃" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleanly reap through %s and those nearby" +msgstr "周囲を巻き込みながら%sをスパッと刈り取りました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleanly reap throug %s and those nearby" +msgstr "は周囲を巻き込みながら%sをスパッと刈り取りました。" #: lang/json/technique_from_json.py msgid "Ausstoß" @@ -180495,6 +183742,216 @@ msgstr "%sに超音速のパンチを繰り出しました。" msgid " launches a supersonic punch at %s" msgstr "は%sに超音速のパンチを繰り出しました。" +#: lang/json/technique_from_json.py +msgid "Mega Kick" +msgstr "メガトンキック" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Mega Kick on %s" +msgstr "%sにメガトンキックを繰り出しました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Mega Kick on %s" +msgstr "は%sにメガトンキックを繰り出しました。" + +#: lang/json/technique_from_json.py +msgid "Darkest Lariat" +msgstr "DDラリアット" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Darkest Lariat on %s" +msgstr "%sにDDラリアットを繰り出しました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Darkest Lariat on %s" +msgstr "は%sにDDラリアットを繰り出しました。" + +#: lang/json/technique_from_json.py +msgid "Smart Strike" +msgstr "スマートホーン" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Smart Strike on %s" +msgstr "%sにスマートホーンを繰り出しました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Smart Strike on %s" +msgstr "は%sにスマートホーンを繰り出しました。" + +#: lang/json/technique_from_json.py +msgid "Low Sweep" +msgstr "ローキック" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Low Sweep on %s" +msgstr "%sにローキックを繰り出しました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Low Sweep on %s" +msgstr "は%sにローキックを繰り出しました。" + +#: lang/json/technique_from_json.py +msgid "Fool's Strike" +msgstr "愚弄攻撃" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely fool %s and strike back" +msgstr "%sの攻撃を愚弄し、反撃を繰り出しました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely fools %s and strike back" +msgstr "は%sの攻撃を愚弄し、反撃を繰り出しました。" + +#: lang/json/technique_from_json.py +msgid "Hydra Slaying Strike" +msgstr "九頭竜殺し" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You interrupt %s with a perfectly aimed strike" +msgstr "%sの攻撃を跳ね返す鋭い一撃を繰り出しました!" + +#: lang/json/technique_from_json.py +#, python-format +msgid " interrupt %s with a perfectly aimed strike" +msgstr "は%sの攻撃を跳ね返す鋭い一撃を繰り出しました!" + +#: lang/json/technique_from_json.py +msgid "Mighty Throw" +msgstr "全力投げ" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You toss %s aside with a Mighty Throw" +msgstr "%sを横へ思い切り投げ飛ばしました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " tosses %s with a Mighty Throw" +msgstr "は%sを横へ思い切り投げ飛ばしました。" + +#: lang/json/technique_from_json.py +msgid "Ballista Throw" +msgstr "巨砲投げ" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You spin and hurl %s away with a Ballista Throw" +msgstr "%sを振り回し、投げ飛ばしました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " spins and hurls %s away with a Ballista Throw" +msgstr "は%sを振り回し、投げ飛ばしました。" + +#: lang/json/technique_from_json.py +msgid "Flowing Water" +msgstr "伏流の反撃" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You deflect %s's attack and counter in one fluid motion" +msgstr "%sの攻撃を逸らし、流れるような反撃を繰り出しました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " deflects %s's attack and counters in one fluid motion" +msgstr "は%sの攻撃を逸らし、流れるような反撃を繰り出しました。" + +#: lang/json/technique_from_json.py +msgid "Disarming Slash" +msgstr "武装弾き" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You disarm %s with a quick flick of your weapon" +msgstr "%sの武器を素早く弾き飛ばして武装解除しました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " disarms %s with a quick flick of their weapon" +msgstr "は%sの武器を素早く弾き飛ばして武装解除しました。" + +#: lang/json/technique_from_json.py +msgid "Sarlacc Sweep" +msgstr "サルラック斬り" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You quickly sweep through %s and those nearby" +msgstr "周囲を巻き込みながら素早く%sを薙ぎ払いました。" + +#: lang/json/technique_from_json.py +#, python-format +msgid " quickly sweeps through %s and those nearby" +msgstr "は周囲を巻き込みながら素早く%sを薙ぎ払いました。" + +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "動けと命令しても地球は耳を貸しません。" @@ -180540,6 +183997,10 @@ msgstr "枯れ木が再生しました。" msgid "Life springs anew from the dead grass." msgstr "枯れ草が息を吹き返しました。" +#: lang/json/ter_furn_transform_messages_from_json.py +msgid "The door opens forcefully!" +msgstr "ドアが勢いよく開きました!" + #: lang/json/terrain_from_json.py msgid "scorched earth" msgstr "焦土" @@ -188178,6 +191639,11 @@ msgstr "船体(木)" msgid "A wooden board that keeps the water out of your boat." msgstr "ボートが浸水するのを防ぐ木製の板です。" +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -188620,14 +192086,19 @@ msgid "" msgstr "非常に重い牽引ケーブルです。ケーブルのもう一方端が他の車両に取り付けられていれば牽引できます。" #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" -msgstr "座席(木)" +msgid "flimsy wooden seat" +msgstr "" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "座る場所です。" +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "座席(木)" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "スパイク(木)" @@ -189443,6 +192914,11 @@ msgstr "ゲーム開始" msgid "At least %s from %s (%s remaining)" msgstr "%s生き残る(現在%sから%s経過)" +#: src/achievement.cpp +#, c-format +msgid "Exactly %s from %s" +msgstr "正確に%sから%sまで" + #: src/achievement.cpp #, c-format msgid "Within %s of %s (%s remaining)" @@ -189459,17 +192935,18 @@ msgid "Within %s of %s (passed)" msgstr "%s以内にモンスターを殺害する(現在%sから目標時間経過済み)" #: src/achievement.cpp -msgid "Triggered by " -msgstr "判定タイミング: " +#, c-format +msgid "Triggered by %s" +msgstr "%s時点で判定" #: src/achievement.cpp #, c-format -msgid "%s/%s " -msgstr "%s/%s " +msgid "%s/%s %s" +msgstr "%s/%s %s" #: src/achievement.cpp msgid " (further requirements hidden)" -msgstr "" +msgstr "(隠された追加条件があります)" #: src/achievement.cpp #, c-format @@ -189622,11 +193099,11 @@ msgstr "付近のドアのロックが解除されました。" #: src/activity_actor.cpp msgid "You found the wire that starts the engine." -msgstr "" +msgstr "エンジンを始動させるワイヤーを見つけました。" #: src/activity_actor.cpp msgid "You found a wire that looks like the right one." -msgstr "" +msgstr "恐らく目当てのワイヤーを見つけました。" #: src/activity_actor.cpp msgid "The red wire always starts the engine, doesn't it?" @@ -189634,7 +193111,7 @@ msgstr "エンジンを始動するのは赤のケーブルに決まっている #: src/activity_actor.cpp msgid "By process of elimination, you found the wire that starts the engine." -msgstr "" +msgstr "エンジンを始動するワイヤーだと消去法で判断したものを見つけました。" #: src/activity_actor.cpp msgid "Moving canceled auto-pickup." @@ -191383,7 +194860,7 @@ msgstr "[<] ページ %1$d / %2$d [>]" msgid "< [%s] Sort: %s >" msgstr "< [%s] 整列: %s >" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "[%s] フィルタ" @@ -194528,10 +198005,18 @@ msgstr "" msgid "Accuracy" msgstr "命中" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "回避" +#: src/bonuses.cpp +msgid "Block effectiveness" +msgstr "ブロック効果" + #: src/bonuses.cpp src/panels.cpp msgid "Speed" msgstr "速度" @@ -195010,20 +198495,25 @@ msgstr "は立ち上がりました。" #: src/character.cpp src/monster.cpp #, c-format -msgid "The %s breaks free of the webs!" -msgstr "%sがクモの巣から自由になりました!" +msgid "The %s escapes the bear trap!" +msgstr "%sはトラバサミを外して、自由になりました!" #: src/character.cpp -msgid "You free yourself from the webs!" -msgstr "クモの巣を払って、自由になりました!" +#, c-format +msgid "Your %s tries to free itself from the bear trap, but can't get loose!" +msgstr "%sはトラバサミから逃れようとしましたが、上手く外れません!" #: src/character.cpp -msgid " frees themselves from the webs!" -msgstr "はクモの巣を払って、自由になりました!" +msgid "You free yourself from the bear trap!" +msgstr "トラバサミを外して、自由になりました!" #: src/character.cpp -msgid "You try to free yourself from the webs, but can't get loose!" -msgstr "クモの巣を払おうとしましたが、上手く払えませんでした!" +msgid " frees themselves from the bear trap!" +msgstr "はトラバサミを外して、自由になりました!" + +#: src/character.cpp +msgid "You try to free yourself from the bear trap, but can't get loose!" +msgstr "トラバサミを外そうとしましたが、上手く外せませんでした!" #: src/character.cpp src/monster.cpp #, c-format @@ -195059,28 +198549,6 @@ msgstr "は強化くくり罠を外して、自由になりました! msgid "You try to free yourself from the heavy snare, but can't get loose!" msgstr "強化くくり罠を外そうとしましたが、上手く外せませんでした!" -#: src/character.cpp src/monster.cpp -#, c-format -msgid "The %s escapes the bear trap!" -msgstr "%sはトラバサミを外して、自由になりました!" - -#: src/character.cpp -#, c-format -msgid "Your %s tries to free itself from the bear trap, but can't get loose!" -msgstr "%sはトラバサミから逃れようとしましたが、上手く外れません!" - -#: src/character.cpp -msgid "You free yourself from the bear trap!" -msgstr "トラバサミを外して、自由になりました!" - -#: src/character.cpp -msgid " frees themselves from the bear trap!" -msgstr "はトラバサミを外して、自由になりました!" - -#: src/character.cpp -msgid "You try to free yourself from the bear trap, but can't get loose!" -msgstr "トラバサミを外そうとしましたが、上手く外せませんでした!" - #: src/character.cpp msgid "You free yourself from the rubble!" msgstr "瓦礫をどけて、自由になりました!" @@ -195093,18 +198561,6 @@ msgstr "は瓦礫をどけて、自由になりました!" msgid "You try to free yourself from the rubble, but can't get loose!" msgstr "瓦礫をどけようとしましたが、上手くどけられませんでした!" -#: src/character.cpp -msgid "You try to escape the pit, but slip back in." -msgstr "穴からの脱出を試みましたが、滑り落ちてしまいました。" - -#: src/character.cpp -msgid "You escape the pit!" -msgstr "穴から脱出しました!" - -#: src/character.cpp -msgid " escapes the pit!" -msgstr "は穴から脱出しました!" - #: src/character.cpp #, c-format msgid "Your %s tries to break free, but fails!" @@ -195144,6 +198600,35 @@ msgstr "拘束を解きました!" msgid " breaks out of the grab!" msgstr "は拘束を解きました!" +#: src/character.cpp src/monster.cpp +#, c-format +msgid "The %s breaks free of the webs!" +msgstr "%sがクモの巣から自由になりました!" + +#: src/character.cpp +msgid "You free yourself from the webs!" +msgstr "クモの巣を払って、自由になりました!" + +#: src/character.cpp +msgid " frees themselves from the webs!" +msgstr "はクモの巣を払って、自由になりました!" + +#: src/character.cpp +msgid "You try to free yourself from the webs, but can't get loose!" +msgstr "クモの巣を払おうとしましたが、上手く払えませんでした!" + +#: src/character.cpp +msgid "You try to escape the pit, but slip back in." +msgstr "穴からの脱出を試みましたが、滑り落ちてしまいました。" + +#: src/character.cpp +msgid "You escape the pit!" +msgstr "穴から脱出しました!" + +#: src/character.cpp +msgid " escapes the pit!" +msgstr "は穴から脱出しました!" + #: src/character.cpp #, c-format msgid "Your %s bionic comes back online." @@ -198037,7 +201522,7 @@ msgstr "材料を使い果たしました。" msgid "" "You don't have anything in which to store %s and may have to pour it out as " "soon as it is prepared! Proceed?" -msgstr "" +msgstr "%sを保管できる容器を持っていないため、外に流れ出してしまいます!続けますか?" #: src/crafting.cpp src/pickup.cpp #, c-format @@ -198963,14 +202448,6 @@ msgstr "テスト - 描画ベンチマーク(X秒)" msgid "Test trait group" msgstr "テスト - 特質グループ" -#: src/debug_menu.cpp -msgid "Show debug message" -msgstr "表示 - デバッグメッセージ" - -#: src/debug_menu.cpp -msgid "Crash game (test crash handling)" -msgstr "テスト - 強制終了処理" - #: src/debug_menu.cpp msgid "Toggle NPC pathfinding on map" msgstr "表示 - NPC移動経路" @@ -198999,6 +202476,18 @@ msgstr "情報..." msgid "Enable achievements" msgstr "有効化 - 実績" +#: src/debug_menu.cpp +msgid "Show debug message" +msgstr "表示 - デバッグメッセージ" + +#: src/debug_menu.cpp +msgid "Crash game (test crash handling)" +msgstr "テスト - 強制終了処理" + +#: src/debug_menu.cpp +msgid "Quit to main menu" +msgstr "ゲーム終了" + #: src/debug_menu.cpp msgid "Game…" msgstr "ゲーム..." @@ -199095,10 +202584,6 @@ msgstr "生成 - 入れ子構造地形" msgid "Map…" msgstr "マップ..." -#: src/debug_menu.cpp -msgid "Quit to main menu" -msgstr "ゲーム終了" - #: src/debug_menu.cpp msgid "" "Debug Functions - Using these will cheat not only the game, but yourself.\n" @@ -199622,6 +203107,10 @@ msgstr "依頼を完了する" msgid "Remove mission without proper cleanup" msgstr "適切な手順を経ずに依頼を削除する" +#: src/debug_menu.cpp +msgid "Benchmark in progress…" +msgstr "ベンチマーク進行中..." + #: src/debug_menu.cpp #, c-format msgid "Drew %d times in %.3f seconds. (%.3f fps average)" @@ -200850,138 +204339,182 @@ msgid "Liked" msgstr "友好的" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "伝説的" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" msgstr "無名" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" msgstr "強大" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" msgstr "有名" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" msgstr "有名" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" msgstr "語り草" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" msgstr "無価値なカス" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "虫けら" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "卑賤" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "寄生虫" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "腰巾着" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "笑い者" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "中立的" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" msgstr "守銭奴" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "富裕" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" msgstr "潤沢" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" msgstr "余裕がある" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" msgstr "快適" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "物足りない" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" msgstr "破綻傾向" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" msgstr "不毛" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" msgstr "貧困" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "有り余る" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" msgstr "余裕がある" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "その日暮らし" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" msgstr "栄養失調" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" msgstr "飢餓" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "伝説的" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" msgstr "歴戦" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" msgstr "熟練" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" msgstr "経験豊富" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "標準的" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" msgstr "訓練不足" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" msgstr "烏合の衆" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" msgstr "脆弱" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "一銭の価値もない" @@ -201592,12 +205125,12 @@ msgstr "" #, c-format msgid "" "Notes:\n" -"Send a companion to gather light brush and heavy sticks.\n" +"Send a companion to gather light brush and stout branches.\n" "\n" "Skill used: survival\n" "Difficulty: N/A\n" "Gathering Possibilities:\n" -"> heavy sticks\n" +"> stout branches\n" "> withered plants\n" "> splintered wood\n" "\n" @@ -201606,12 +205139,12 @@ msgid "" "Positions: %d/3\n" msgstr "" "メモ:\n" -"仲間を派遣して、枯れ草や重棒などを集めてきてもらいます。\n" +"仲間を派遣して、枯れ草や頑丈な短枝などを集めてきてもらいます。\n" " \n" "適用スキル: サバイバル\n" "難易度: なし \n" "拾得予定:\n" -"> 重棒\n" +"> 頑丈な短枝\n" "> 枯れ草\n" "> 裂けた木材\n" " \n" @@ -202873,8 +206406,8 @@ msgid "You do not have a camp food zone. Aborting…" msgstr "「拠点: 備蓄食料」区域がありません。作業を中止します..." #: src/faction_camp.cpp -msgid "No items are located at the drop point…" -msgstr "収集地点にアイテムがありません..." +msgid "No suitable items are located at the drop points…" +msgstr "収集地点に適切なアイテムがありません..." #: src/faction_camp.cpp #, c-format @@ -203086,6 +206619,15 @@ msgstr "%sが至近距離に迫っています!" msgid "Wait till you wake up…" msgstr "睡眠中..." +#: src/game.cpp +#, c-format +msgid "" +"\n" +"%s to interrupt" +msgstr "" +"\n" +"%sで中断" + #: src/game.cpp #, c-format msgid "%s, cancel Auto-move?" @@ -203196,6 +206738,11 @@ msgctxt "action" msgid "open" msgstr "開ける" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -204707,11 +208254,25 @@ msgstr "通行の邪魔になっている%sを押し退けました。" msgid "You cannot haul items here." msgstr "この場所のアイテムは一括移動できません。" +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "%sが邪魔です!" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "%sが邪魔です!" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a +#. zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -205001,39 +208562,39 @@ msgstr "速度 %s%d! " #: src/game.cpp msgid "Your skill in parkour makes it easier to climb." -msgstr "" +msgstr "パルクールの腕前があるので簡単に登れます。" #: src/game.cpp msgid "Your bad knees make it difficult to climb." -msgstr "" +msgstr "膝が悪いため登り辛くなっています。" #: src/game.cpp msgid "Your wet feet make it harder to climb." -msgstr "" +msgstr "足が濡れているため登り辛くなっています。" #: src/game.cpp msgid "Your wet hands make it harder to climb." -msgstr "" +msgstr "手が濡れているため登り辛くなっています。" #: src/game.cpp msgid "Your carried weight tries to drag you down." -msgstr "" +msgstr "重量のせいでずり落ちそうになっています。" #: src/game.cpp msgid "You strain to climb with the weight of your possessions." -msgstr "" +msgstr "荷物の重さで非常に登り辛くなっています。" #: src/game.cpp msgid "You feel the weight of your luggage makes it more difficult to climb." -msgstr "" +msgstr "荷物の重さで登り辛くなっています。" #: src/game.cpp msgid "Your carried weight makes it a little harder to climb." -msgstr "" +msgstr "荷物が負担になっている気がします。" #: src/game.cpp msgid "You slip while climbing and fall down." -msgstr "" +msgstr "登る途中で滑って落ちました。" #: src/game.cpp msgid "Climbing is impossible in your current state." @@ -206088,11 +209649,6 @@ msgstr "どこかのお馬鹿さんが邪魔で閉められません!" msgid "The %s is in the way!" msgstr "%sが邪魔です!" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "%sが邪魔です!" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -206333,7 +209889,7 @@ msgstr "%sは粉々になりました!" #: src/handle_action.cpp #, c-format msgid "You hurt your hands trying to smash the %s." -msgstr "" +msgstr "%sを叩こうとして手を痛めました。" #: src/handle_action.cpp msgid "There's nothing there to smash!" @@ -206606,7 +210162,7 @@ msgstr "移動モードを選択" #: src/handle_action.cpp msgid "Cycle move mode" -msgstr "" +msgstr "循環切替/移動モード" #: src/handle_action.cpp msgid "You don't know any spells to cast." @@ -207103,7 +210659,7 @@ msgstr[0] "引出金額を入力 最大: %dセント(0で取消) " #: src/iexamine.cpp msgid "All cash cards at maximum capacity" -msgstr "" +msgstr "全てのキャッシュカードが最大容量に達しました" #: src/iexamine.cpp msgid "The vending machine is empty." @@ -207351,6 +210907,11 @@ msgstr "金庫破りを開始しました。" msgid "Attempt to hack this safe?" msgstr "金庫破りを試みますか?" +#: src/iexamine.cpp +#, c-format +msgid "The %s is locked. You could pry it open with the right tool…" +msgstr "%sには鍵がかかっています。適切な道具があればこじ開けられそうです..." + #: src/iexamine.cpp #, c-format msgid "The %s is locked. If only you had something to pry it with…" @@ -208402,7 +211963,7 @@ msgstr "地形を飛び越えました。" #: src/iexamine.cpp msgid "You can't climb down there." -msgstr "" +msgstr "ここは降りられません。" #: src/iexamine.cpp #, c-format @@ -208430,11 +211991,11 @@ msgstr "一度降りると恐らく引き返すのは困難です。降ります #: src/iexamine.cpp msgid "Use your grappling hook to climb down?" -msgstr "" +msgstr "フック付きロープを使って降りますか?" #: src/iexamine.cpp msgid "You tie the rope around your waist and begin to climb down." -msgstr "" +msgstr "腰にロープを結び付け、降り始めました。" #: src/iexamine.cpp msgid "You decided to step back from the ledge." @@ -208550,6 +212111,10 @@ msgstr "摘出するCBMを選択してください" msgid "Splint broken limbs" msgstr "骨折箇所を固定する" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "CBMが体内に一つもありません。" @@ -208577,16 +212142,78 @@ msgid " doesn't have limbs that require splinting." msgstr "%1$sに固定が必要な四肢はありません。" #: src/iexamine.cpp -msgid "This mill already contains flour." -msgstr "この製粉機には既に穀粉が入っています。" +msgid "You don't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid " doesn't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "発作が収まり始めました。" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "発作に効く薬ではないようです。" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" #: src/iexamine.cpp -msgid "Remove it before starting the mill again." -msgstr "製粉機を再稼働させる前に、内容物を取り出してください。" +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" #: src/iexamine.cpp #, c-format -msgid "This rack contains %s, which can't be milled!" +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "This mill contains %s, which can't be milled!" msgstr "製粉機に入っている%sは製粉できません!" #: src/iexamine.cpp @@ -208760,8 +212387,9 @@ msgid "Remove brake and start milling" msgstr "稼働して製粉を始める" #: src/iexamine.cpp -msgid "Remove brake and start milling, milling will take about 6 hours." -msgstr "石臼を稼働して製粉を開始します。完成まで約6時間かかります。" +#, c-format +msgid "Remove brake and start milling, milling will take about %s." +msgstr "石臼を稼働して製粉を開始します。完成まで約%sかかります。" #: src/iexamine.cpp msgid "Insert products for milling… mill is full" @@ -208794,18 +212422,8 @@ msgstr "製粉機があります。石臼が回転して製粉を行っていま #: src/iexamine.cpp #, c-format -msgid "It will finish milling in about %d hour." -msgid_plural "It will finish milling in about %d hours." -msgstr[0] "あと%d時間ほどで製粉が完了します。" - -#: src/iexamine.cpp -msgid "It will finish milling in less than an hour." -msgstr "あと1時間ほどで製粉が完了します。" - -#: src/iexamine.cpp -#, c-format -msgid "It should take about %d minutes to finish milling." -msgstr "あと%d分ほどで製粉が完了します。" +msgid "It should take about %s to finish milling." +msgstr "あと%sほどで製粉が完了します。" #: src/iexamine.cpp msgid "There's a mill here." @@ -209078,7 +212696,7 @@ msgstr "派閥" #: src/init.cpp msgid "Move modes" -msgstr "" +msgstr "移動モード" #: src/init.cpp msgid "Crafting recipes" @@ -209565,7 +213183,7 @@ msgstr "体積(%s): " msgid "There are no available choices" msgstr "選択できるアイテムがない" -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "[%s] フィルタ: " @@ -210138,7 +213756,7 @@ msgstr "" #: src/item.cpp msgid " moves" -msgstr "" +msgstr "" #: src/item.cpp msgid "Time to reach aim level: " @@ -210164,7 +213782,7 @@ msgstr[0] "%i個の空薬莢が内部に残存" #: src/item.cpp msgid "This weapon needs two free hands to fire." -msgstr "" +msgstr "この銃器の発射には両手を空ける必要があります。" #: src/item.cpp msgid "" @@ -210180,11 +213798,11 @@ msgstr "銃器に取り付けると遠い間合いから攻撃obscures sights of the base weapon." -msgstr "" +msgstr "このMODは取り付けた銃器の照準速度を低下させます。" #: src/item.cpp msgid "This mod might suffer wear when firing the base weapon." -msgstr "" +msgstr "このMODは弾薬を発射すると摩耗する可能性があります。" #: src/item.cpp msgid "Dispersion modifier: " @@ -210434,10 +214052,6 @@ msgstr "所持重量変更: " msgid "Weight capacity bonus: " msgstr "所持重量ボーナス: " -#: src/item.cpp -msgid "Storage: " -msgstr "収納容積: " - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "* このアイテムはヘルメットと同時に着用可能です。" @@ -210705,6 +214319,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "* この道具はCBM電力で作動します。" +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "" + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "" + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "" + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "" + +#: src/item.cpp +msgid "Fuel: " +msgstr "" + #: src/item.cpp #, c-format msgid "Using: %s" @@ -210728,12 +214370,22 @@ msgstr "* このアイテムは補強可能です。" msgid "* This item is not repairable." msgstr "* このアイテムは修復不可能です。" +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items +#: src/item.cpp +#, c-format +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "" + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a +#. list of items. +#. ~ Bold text in the middle makes it easier to see where the second list +#. starts. #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." +msgid "" +"Disassembly takes %1$s, requires %2$s and might " +"yield: %3$s." msgstr "" -"分解所要時間: %s\n" -"分解結果: %s" #: src/item.cpp #, c-format @@ -210846,27 +214498,28 @@ msgid "Critical hit chance %d%% - %d%%" msgstr "会心発生率 %d%% - %d%%" #: src/item.cpp -#, c-format -msgid "" -"%d bashing (%d on a critical hit)" -msgstr "打撃 %d (会心時 %d)" +msgid "Bashing: " +msgstr "打撃: " #: src/item.cpp -#, c-format -msgid "" -"%d cutting (%d on a critical hit)" -msgstr "斬撃 %d (会心時 %d)" +msgid "Critical bash: " +msgstr "打撃会心: " #: src/item.cpp -#, c-format -msgid "" -"%d piercing (%d on a critical hit)" -msgstr "刺突 %d (会心時 %d)" +msgid "Cutting: " +msgstr " 斬撃: " #: src/item.cpp -#, c-format -msgid "%d moves per attack" -msgstr "攻撃の行動コスト: %d" +msgid "Critical cut: " +msgstr "斬撃会心: " + +#: src/item.cpp +msgid "Piercing: " +msgstr "刺突: " + +#: src/item.cpp +msgid "Critical pierce: " +msgstr "刺突会心: " #: src/item.cpp msgid "Integrated mod: " @@ -211446,8 +215099,9 @@ msgstr "%1$sにはこれ以上%2$sを入れられません。" msgid "That %s doesn't have room to expand." msgstr "%sには拡張する余裕がありません。" -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" msgstr "%dx%s" @@ -211569,6 +215223,56 @@ msgstr "動作を実行できるアイテムを何も持っていません。" msgid "Execute which action?" msgstr "どの動作を実行しますか?" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "" + +#: src/item_contents.cpp +msgid " item, " +msgstr "" + +#: src/item_contents.cpp +msgid " category, " +msgstr "" + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "" + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "" + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "" + +#: src/item_contents.cpp +msgid "item id" +msgstr "" + +#: src/item_contents.cpp +msgid "item category" +msgstr "" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "" + #: src/item_contents.cpp msgid "is not a container" msgstr "は容器ではない" @@ -211609,6 +215313,11 @@ msgstr "どのグループをテストしますか?" msgid "Result of 100 spawns:" msgstr "100スポーンの結果: " +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "%dx%s" + #: src/item_location.cpp msgid "inventory" msgstr "所持品" @@ -211791,6 +215500,34 @@ msgstr "総重量が重すぎる" msgid "not enough space" msgstr "容積が足りない" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "" + #: src/itype.h msgid "click." msgstr "カチッ。" @@ -211858,14 +215595,6 @@ msgstr "抗生物質を摂取しました。" msgid " takes some antibiotics." msgstr "は抗生物質を摂取しました。" -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "発作が収まり始めました。" - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "発作に効く薬ではないようです。" - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -213374,7 +217103,7 @@ msgstr "は新たなマスクフィルターを必要としています #: src/iuse.cpp #, c-format msgid "Your %s doesn't have a filter." -msgstr "" +msgstr "%sにマスクフィルターが装填されていません。" #: src/iuse.cpp #, c-format @@ -217457,6 +221186,10 @@ msgstr "初級" msgid "Intermediate" msgstr "中級" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "歴戦" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "横幅: " @@ -217767,7 +221500,7 @@ msgstr "ロード中" #: src/magic.cpp msgid "ERROR: Invalid magic_energy_type string. Defaulting to NONE" -msgstr "" +msgstr "エラー:magic_energy_typeが無効です。デフォルト設定NONE" #: src/magic.cpp msgid "ERROR: Invalid damage type string. Defaulting to none" @@ -220937,53 +224670,53 @@ msgstr "奇妙な神殿の入り口を開きました。" #, c-format msgctxt "memorial_male" msgid "Lost the conduct %s%s." -msgstr "" +msgstr "%s%sの制約を破りました。" #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Lost the conduct %s%s." -msgstr "" +msgstr "%s%sの制約を破りました。" #: src/memorial_logger.cpp msgid " (disabled)" -msgstr "" +msgstr "(無効)" #: src/memorial_logger.cpp #, c-format msgctxt "memorial_male" msgid "Gained the achievement %s%s." -msgstr "" +msgstr "%s%sの実績を獲得しました。" #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Gained the achievement %s%s." -msgstr "" +msgstr "%s%sの実績を獲得しました。" #: src/memorial_logger.cpp #, c-format msgctxt "memorial_male" msgid "Forgot the spell %s." -msgstr "" +msgstr "%sの呪文を忘れました。" #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Forgot the spell %s." -msgstr "" +msgstr "%sの呪文を忘れました。" #: src/memorial_logger.cpp #, c-format msgctxt "memorial_male" msgid "Learned the spell %s." -msgstr "" +msgstr "%sの呪文を習得しました。" #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Learned the spell %s." -msgstr "" +msgstr "%sの呪文を習得しました。" #: src/memorial_logger.cpp #, c-format @@ -221093,6 +224826,18 @@ msgctxt "memorial_female" msgid "Set off an alarm." msgstr "警報が鳴りました。" +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_male" +msgid "Used the debug menu (%s)." +msgstr "デバッグメニュー(%s)を使用しました。" + +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_female" +msgid "Used the debug menu (%s)." +msgstr "デバッグメニュー(%s)を使用しました。" + #. ~ Message %s on the message log was repeated %d times, e.g. "You hear a #. whack! x 12" #: src/messages.cpp @@ -224929,12 +228674,7 @@ msgstr "変動:" #. ~ mode #: src/move_mode.cpp msgid "You feel bugs crawl over your skin." -msgstr "" - -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "人間" +msgstr "肌の上を虫が這っている気がします。" #: src/mutation.cpp #, c-format @@ -225493,7 +229233,7 @@ msgstr "所持重量上限: %.1f %s" #: src/newcharacter.cpp #, c-format msgid "Bash damage bonus: %.1f" -msgstr "" +msgstr "打撃攻撃ボーナス: %.1f" #: src/newcharacter.cpp msgid "" @@ -225902,18 +229642,7 @@ msgstr "年齢:" #: src/newcharacter.cpp src/player_display.cpp msgid "Blood type:" -msgstr "" - -#: src/newcharacter.cpp -#, c-format -msgid "" -"* Random location * (%d variants)" -msgstr "* ランダム * (バリエーション%d種 )" - -#: src/newcharacter.cpp -#, c-format -msgid "%s (%d variants)" -msgstr "%s (バリエーション%d種 )" +msgstr "血液型:" #: src/newcharacter.cpp msgid "Name:" @@ -225927,6 +229656,20 @@ msgstr "性別: " msgid "Select a starting location." msgstr "開始地点を選択" +#: src/newcharacter.cpp +#, c-format +msgid "" +"* Random location * (%d variant)" +msgid_plural "" +"* Random location * (%d variants)" +msgstr[0] "* ランダム * (バリエーション%d種 )" + +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "%s (バリエーション%d種 )" + #: src/newcharacter.cpp msgid "Stats:" msgstr "状態: " @@ -226003,6 +229746,12 @@ msgstr "%sを押して開始位置を選択。 " msgid "Starting location:" msgstr "開始地点: " +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "%s (バリエーション%d種)" + #: src/newcharacter.cpp msgid "Starting Vehicle: " msgstr "所持車両: " @@ -226055,15 +229804,15 @@ msgstr "身長を入力してください。(145~200)" #: src/newcharacter.cpp msgid "Enter blood type (omit Rh):" -msgstr "" +msgstr "血液型を入力 (Rh因子は省略):" #: src/newcharacter.cpp msgid "Invalid blood type." -msgstr "" +msgstr "無効な血液型です。" #: src/newcharacter.cpp msgid "Enter Rh factor:" -msgstr "" +msgstr "Rh因子を入力:" #: src/newcharacter.cpp msgid "Name of template:" @@ -226555,12 +230304,12 @@ msgstr "双方向無線機から%sの声が聞こえました。「指定され #: src/npcmove.cpp #, c-format msgid " %s, %s" -msgstr "" +msgstr " %s、%s" #: src/npcmove.cpp #, c-format msgid "%s %s%s" -msgstr "" +msgstr "%s %s%s" #: src/npcmove.cpp #, c-format @@ -227682,6 +231431,14 @@ msgstr "破壊" msgid "Pulp Adjacent" msgstr "隣接破壊" +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "" + #: src/options.cpp msgid "Auto mining" msgstr "自動掘削" @@ -228549,7 +232306,7 @@ msgstr "画面サイズ/横幅" #: src/options.cpp msgid "Set the size of the terminal along the X axis." -msgstr "" +msgstr "ゲーム画面の横幅を設定します。" #: src/options.cpp msgid "Terminal height" @@ -228557,7 +232314,7 @@ msgstr "画面サイズ/縦幅" #: src/options.cpp msgid "Set the size of the terminal along the Y axis." -msgstr "" +msgstr "ゲーム画面の縦幅を設定します。" #: src/options.cpp msgid "Font blending" @@ -230044,6 +233801,16 @@ msgstr "区域: " msgid "# Unexplored" msgstr "# 未探索" +#: src/overmap_ui.cpp +#, c-format +msgid "oter: %s" +msgstr "臭気: %s" + +#: src/overmap_ui.cpp +#, c-format +msgid "oter_type: %s" +msgstr "oter_type: %s" + #: src/overmap_ui.cpp msgid "Distance to active mission:" msgstr "有効な依頼までの距離:" @@ -230371,6 +234138,10 @@ msgstr "猛烈に暑い!" msgid "Very hot!" msgstr "かなり暑い!" +#: src/panels.cpp +msgid "Comfortable" +msgstr "快適" + #: src/panels.cpp msgid "Very cold!" msgstr "かなり寒い!" @@ -231692,7 +235463,7 @@ msgstr "所持重量上限(%s):%.1f" #: src/player_display.cpp #, c-format msgid "Bash damage: %.1f" -msgstr "" +msgstr "打撃ダメージ: %.1f" #: src/player_display.cpp msgid "" @@ -231771,17 +235542,17 @@ msgstr "年齢です。" #: src/player_display.cpp msgid "This is your blood type and Rh factor." -msgstr "" +msgstr "血液型とRh因子です。" #: src/player_display.cpp #, c-format msgid "Blood type: %s" -msgstr "" +msgstr "血液型: %s" #: src/player_display.cpp #, c-format msgid "Rh factor: %s" -msgstr "" +msgstr "Rh因子: %s" #: src/player_display.cpp #, c-format @@ -231817,6 +235588,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "口渇 -%2d%%" +#: src/player_display.cpp +msgid "Starving" +msgstr "飢餓" + #: src/player_display.cpp msgid "Underfed" msgstr "栄養不足" @@ -231911,6 +235686,10 @@ msgstr "" "飢えによって身体が酷く弱っています。定期的に食事を摂らないと、このままでは死んでしまいます!\n" " \n" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "栄養失調" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help you recover.\n" @@ -233037,6 +236816,14 @@ msgid "%1$d tool with %2$s of %3$d or more." msgid_plural "%1$d tools with %2$s of %3$d or more." msgstr[0] "%1$d個の%2$sレベル%3$d以上の工具" +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level +#. requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "" + #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp #, c-format @@ -234813,6 +238600,8 @@ msgid "" "Removing the %1$s may yield:\n" "> %2$s\n" msgstr "" +"%1$s取り外して得られるアイテム:\n" +"> %2$s\n" #: src/veh_interact.cpp #, c-format @@ -235307,7 +239096,7 @@ msgstr "壊れた%1$sを%2$sから取り外しました。" #: src/veh_interact.cpp #, c-format msgid "You smash the %1$s to bits, removing it from the %2$s." -msgstr "" +msgstr "%1$sを叩き壊し、%2$sから取り外しました。" #: src/veh_interact.cpp #, c-format @@ -237081,6 +240870,10 @@ msgstr "... %s = 説明を全て表示" msgid "--NO AVAILABLE MODS--" msgstr "--利用可能なMODはありません--" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "現在有効なMODを初期設定として登録しました" diff --git a/lang/po/pl.po b/lang/po/pl.po index 967012d485866..35e0b6c2bdefd 100644 --- a/lang/po/pl.po +++ b/lang/po/pl.po @@ -17,7 +17,7 @@ msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-06 11:53+0800\n" +"POT-Creation-Date: 2020-06-23 10:06+0800\n" "PO-Revision-Date: 2018-04-26 14:47+0000\n" "Last-Translator: Aleksander Sienkiewicz , 2020\n" "Language-Team: Polish (https://www.transifex.com/cataclysm-dda-translators/teams/2217/pl/)\n" @@ -339,7 +339,6 @@ msgstr[2] "kamieni" msgstr[3] "kamieni" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -6897,7 +6896,6 @@ msgstr[3] "złoto" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -6989,7 +6987,6 @@ msgstr[2] "" msgstr[3] "" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "Mały kawałek blachy." @@ -8580,84 +8577,6 @@ msgstr[3] "" msgid "Seeing this is a bug." msgstr "Jeśli to widzisz, jest to błąd." -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -9019,8 +8938,6 @@ msgstr[3] "zatyczki do uszu" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear #. plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs -#. of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "Przemysłowe zatyczki do uszu. Mieszczą się w uszach." @@ -11249,8 +11166,6 @@ msgstr[2] "para skarpet" msgstr[3] "para skarpet" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of -#. socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "Skarpety. Załóż je na stopy." @@ -13486,6 +13401,20 @@ msgid "" "heat." msgstr "" +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of +#. studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -20869,7 +20798,6 @@ msgstr[3] "" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "Twój pancerz uruchamia się." @@ -21268,7 +21196,6 @@ msgstr[2] "plecak" msgstr[3] "plecak" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "Mały plecak. Dobra pojemność przy niewielkim skrępowaniu ruchów." @@ -21397,7 +21324,6 @@ msgstr[2] "aktówka" msgstr[3] "aktówka" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "Używana do przenoszenia pieniędzy, dokumentów lub kontrabandy." @@ -22516,7 +22442,6 @@ msgstr[2] "pełny strój ochronny typu hazmat" msgstr[3] "pełny strój ochronny typu hazmat" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -23603,7 +23528,6 @@ msgstr[2] "koszula z długim rękawem" msgstr[3] "koszula z długim rękawem" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "Bawełniana koszula z długim rękawem." @@ -24481,6 +24405,21 @@ msgid "" "weight." msgstr "" +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "cestus" +msgstr[1] "cestus" +msgstr[2] "cestus" +msgstr[3] "cestus" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -26185,77 +26124,17 @@ msgid "" msgstr "" #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "" - -#: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test power armor'} -#: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." msgstr "" #: lang/json/BATTERY_from_json.py @@ -26749,8 +26628,8 @@ msgstr[1] "Aero-Skraplacz CBM" msgstr[2] "Aero-Skraplacz CBM" msgstr[3] "Aero-Skraplacz CBM" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -28099,8 +27978,8 @@ msgstr[1] "Wewnętrzny Piec CBM" msgstr[2] "Wewnętrzny Piec CBM" msgstr[3] "Wewnętrzny Piec CBM" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel" @@ -28231,8 +28110,8 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -28240,21 +28119,6 @@ msgid "" "power level." msgstr "" -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire cutters." -" They serve no purpose on their own, but are required for crafting bionics." -msgstr "" - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -28326,6 +28190,36 @@ msgid "" "from installation and you don't have the codes to reset the timer." msgstr "" +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire cutters." +" They serve no purpose on their own, but are required for crafting bionics." +msgstr "" + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" @@ -28334,8 +28228,8 @@ msgstr[1] "Generatory Przeładowania Jonowego CBM" msgstr[2] "Generatory Przeładowania Jonowego CBM" msgstr[3] "Generatory Przeładowania Jonowego CBM" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -28530,6 +28424,39 @@ msgstr[3] "" msgid "template for a paperback nonfiction book" msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Generic Pulp Book" +msgid_plural "Generic Pulp Books" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for Generic Pulp Book +#: lang/json/BOOK_from_json.py +msgid "" +"This is a template for pulp books. Which really all ought to be paperbacks," +" right?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Generic SciFi Book" +msgid_plural "Generic SciFi Books" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for paperback scifi books." +msgstr "" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for a hard cover scifi book." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "Homemaking Book" msgid_plural "Homemaking Books" @@ -30208,8 +30135,8 @@ msgstr[3] "" #. 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py lang/json/TOOL_from_json.py #: lang/json/furniture_from_json.py lang/json/skill_from_json.py @@ -31540,10 +31467,8 @@ msgstr[3] "powieść przygodowa" #: lang/json/BOOK_from_json.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." +"in the heart of the African continent." msgstr "" -"Pokręcona historia wyścigu z czasem, w poszukiwaniu zaginionego miasta w " -"sercu Afryki." #: lang/json/BOOK_from_json.py msgid "buddy novel" @@ -31562,33 +31487,6 @@ msgstr "" "Chwytająca za serce powieść o dwójce przyjaciół walczących o przetrwanie na " "ulicach Nowego Jorku." -#: lang/json/BOOK_from_json.py -msgid "coming of age novel" -msgid_plural "coming of age novels" -msgstr[0] "powieść młodzieżowa" -msgstr[1] "powieść młodzieżowa" -msgstr[2] "powieść młodzieżowa" -msgstr[3] "powieść młodzieżowa" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." -msgstr "" -"Klasyczna historia o dojrzewaniu, opisująca zabawne i przejmujące " -"doświadczenia życia, miłości i seksu." - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A graphic novel about a young girl living in Iran during the 1980's, seeing " -"the world change around her as Iraq invaded her country." -msgstr "" -"Obrazowa powieść o młodej dziewczynie żyjącej w Iranie w latach " -"osiemdziesiątych XX wieku obserwującej zwiany w jej świecie gdy Irak dokonał" -" inwazji na jej kraj." - #: lang/json/BOOK_from_json.py msgid "crime novel" msgid_plural "crime novels" @@ -31737,87 +31635,6 @@ msgstr[3] "powieść detektywistyczna " msgid "A detective investigates an unusual murder in a secluded location." msgstr "Detektyw bada sprawę tajemniczego morderstwa w ustronnej lokalizacji." -#: lang/json/BOOK_from_json.py -msgid "pulp novel" -msgid_plural "pulp novels" -msgstr[0] "powieść pulp" -msgstr[1] "powieść pulp" -msgstr[2] "powieść pulp" -msgstr[3] "powieść pulp" - -#. ~ Description for {'str': 'pulp novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "" -"Historia w gorącej wodzie kąpanego detektywa, który intrygę rozbija celnym " -"ciosem swojej pięści. Masa akcji." - -#: lang/json/BOOK_from_json.py -msgid "Planet of the Murderous Squids that Time Forgot!" -msgid_plural "Planet of the Murderous Squids that Time Forgot!s" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for Planet of the Murderous Squids that Time Forgot! -#: lang/json/BOOK_from_json.py -msgid "" -"In this psychedelic adventure novel of cosmic exploration, an elderly " -"assassin discovers a planet too good to be true. Only once it is too late " -"does she discover the harrowing truth at the center of \"The Planet of the " -"Murderous Squids that Time Forgot!\"" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "The Great Capes of Metropolis" -msgid_plural "The Great Capes of Metropoliss" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for The Great Capes of Metropolis -#: lang/json/BOOK_from_json.py -msgid "" -"In this classic pulp paperback of superheroic exploits, a group of masked " -"vigilantes with diverse superpowers learn to work together to defeat the " -"ultimate villain." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Yesterday's Murdered" -msgid_plural "Yesterday's Murdereds" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for Yesterday's Murdered -#: lang/json/BOOK_from_json.py -msgid "" -"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" -" has one last shot at vengeance." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Flashgun Condor and the Crimson Criminal" -msgid_plural "Flashgun Condor and the Crimson Criminals" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for Flashgun Condor and the Crimson Criminal -#: lang/json/BOOK_from_json.py -msgid "" -"A hot-blooded photographer who fights crime with film, footage, and fists, " -"Condor is more than a mere shutterbug on the crime beat. But will she be " -"able to unravel a devious deception and bring the \"Crimson Criminal\" to " -"justice?" -msgstr "" - #: lang/json/BOOK_from_json.py msgid "road novel" msgid_plural "road novels" @@ -32016,11 +31833,8 @@ msgstr[3] "powieść o samurajach" 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." +"marauding outlaws. This hardback is quite hefty." msgstr "" -"Klasyczna ballada o wędrownym mieczniku który przybywa do małej osady i " -"zostaje wynajęty przez miejscowych do obrony przed wyjętymi spod prawa " -"bandytami." #: lang/json/BOOK_from_json.py msgid "satire novel" @@ -32072,18 +31886,20 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Master and Margarita" -msgid_plural "The Master and Margaritas" +msgid_plural "copies of Master and Margarita" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for The Master and Margarita +#. ~ Description for {'str': 'The Master and Margarita', 'str_pl': 'copies of +#. Master and Margarita'} #: lang/json/BOOK_from_json.py msgid "" "Featuring a cast that includes Satan, Pontius Pilate, Jesus Christ, " -"vampires, a talking cat, and the literary elite of Moscow, this is a satire " -"on Stalinist tyranny written by Mikhail Bulgakov." +"vampires, a talking cat, and the literary elite of Moscow, this novel by " +"Mikhail Bulgakov explores philosophical issues on the nature of good and " +"evil." msgstr "" #: lang/json/BOOK_from_json.py @@ -32116,333 +31932,6 @@ msgid "" "nuclear destruction isn't much of an influence on human nature." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "scifi novel" -msgid_plural "scifi novels" -msgstr[0] "powieść fantastycznonaukowa" -msgstr[1] "powieść fantastycznonaukowa" -msgstr[2] "powieść fantastycznonaukowa" -msgstr[3] "powieść fantastycznonaukowa" - -#. ~ Description for {'str': 'scifi novel'} -#: lang/json/BOOK_from_json.py -msgid "Aliens, ray guns, and space ships." -msgstr "Obcy, lasery i statki kosmiczne." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" -" surprisingly accurate in predicting much of modern society… Until " -"recently." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" -"\n" -"Tyger, Tyger, Burning bright,\n" -"In the forests of the night:\n" -"What immortal hand or eye,\n" -"Dare frame thy fearful symmetry?" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" -"stains have smudged the occasional word." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This copy of Ray Bradbury's \"Fahrenheit 451\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Hyperion\" by Dan Simmons." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" -"\n" -"Give us gods. Oh give them us!\n" -"Give us gods.\n" -"We are so tired of men\n" -"And motor-power." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " -"ripped off." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " -"some of its pages. Weird." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " -"you wonder how Thailand fared the end of the world." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " -"contains a hand-written grocery list." -msgstr "" -"To jest kopia „Fundacji i imperium” Izaaka Asimova. Tylna strona zawiera " -"ręcznie napisaną listę zakupów." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " -"still has the smell of new books within its pages." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " -"Sterling. The cover has rings of coffee stains over it." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " -"looks to have been used to press flowers." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " -"the monster?" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" -" handbook." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " -"covered in dried blood." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Roadside Picnic\" by Arkady and Boris Strugatsky." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " -"if it's been slightly chewed by a dog or other large animal." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Cat's Cradle\" by Kurt Vonnegut. You notice there is a " -"typo in the authors name on the spine of the book." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " -"Copy. Not for re-sale.\"" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " -"the first pages in crayon." -msgstr "" -"To jest kopia „Trawy” Sheri S. Tepper. Dziecko popisało kredką pierwsze " -"strony." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " -"with 'Library Copy'. And a sticker reading 'Science Fiction'." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Fifth Season\" by N.K. Jemsin. It smells faintly of" -" dirt." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" -" almost brand new." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " -"and worn, some pages appear to be loose." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " -"and thin. You should probably be careful with this copy." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " -"dog-eared and worn." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a weather worn copy of \"Brave New World\" by Aldous Huxley." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"Solaris\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Vurt\" by Jeff Noon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " -"blurb reminds you of a Japanese movie you think you once caught on the " -"television late at night." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " -"missing from the end of the book. Luckily only mail-order advertisements." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " -"Douglas Adams." -msgstr "" - #: lang/json/BOOK_from_json.py msgid "spy novel" msgid_plural "spy novels" @@ -33748,6 +33237,624 @@ msgid "" " key work in the existentialist tradition." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "pulp novel" +msgid_plural "pulp novels" +msgstr[0] "powieść pulp" +msgstr[1] "powieść pulp" +msgstr[2] "powieść pulp" +msgstr[3] "powieść pulp" + +#. ~ Description for {'str': 'pulp novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hardboiled detective tale filled with hard hitting action and intrigue." +msgstr "" +"Historia w gorącej wodzie kąpanego detektywa, który intrygę rozbija celnym " +"ciosem swojej pięści. Masa akcji." + +#: lang/json/BOOK_from_json.py +msgid "Black Valkyries From Venus" +msgid_plural "copies of Black Valkyries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Black Valkyries From Venus', 'str_pl': 'copies +#. of Black Valkyries'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a weather-beaten novel written by someone named \"Lee" +" Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Wrong Tomorrow" +msgid_plural "copies of Wrong Tomorrow" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'The Wrong Tomorrow', 'str_pl': 'copies of Wrong +#. Tomorrow'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a cheap drugstore paperback written by someone named " +"\"Lee Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "No God From a Corpse" +msgid_plural "copies of No God" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'No God From a Corpse', 'str_pl': 'copies of No +#. God'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a weatherworn paperback written by some skirt named \"Lee Racket.\"" +" It tells how rage and jealousy can turn a man, or a woman, into a monster." +" This story is hard-boiled enough to break a spoon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Deep Dive" +msgid_plural "copies of Deep Dive" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'The Deep Dive', 'str_pl': 'copies of Deep Dive'} +#: lang/json/BOOK_from_json.py +msgid "" +"This dimestore short story about space travel is written by a broad named " +"\"Lee Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Planet of the Murderous Squids that Time Forgot!" +msgid_plural "Planet of the Murderous Squids that Time Forgot!s" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for Planet of the Murderous Squids that Time Forgot! +#: lang/json/BOOK_from_json.py +msgid "" +"In this psychedelic adventure novel of cosmic exploration, an elderly " +"assassin discovers a planet too good to be true. Only once it is too late " +"does she discover the harrowing truth at the center of \"The Planet of the " +"Murderous Squids that Time Forgot!\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Great Capes of Metropolis" +msgid_plural "The Great Capes of Metropoliss" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for The Great Capes of Metropolis +#: lang/json/BOOK_from_json.py +msgid "" +"In this classic pulp paperback of superheroic exploits, a group of masked " +"vigilantes with diverse superpowers learn to work together to defeat the " +"ultimate villain." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Yesterday's Murdered" +msgid_plural "Yesterday's Murdereds" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for Yesterday's Murdered +#: lang/json/BOOK_from_json.py +msgid "" +"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" +" has one last shot at vengeance." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Flashgun Condor and the Crimson Criminal" +msgid_plural "Flashgun Condor and the Crimson Criminals" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for Flashgun Condor and the Crimson Criminal +#: lang/json/BOOK_from_json.py +msgid "" +"A hot-blooded photographer who fights crime with film, footage, and fists, " +"Condor is more than a mere shutterbug on the crime beat. But will she be " +"able to unravel a devious deception and bring the \"Crimson Criminal\" to " +"justice?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "scifi novel" +msgid_plural "scifi novels" +msgstr[0] "powieść fantastycznonaukowa" +msgstr[1] "powieść fantastycznonaukowa" +msgstr[2] "powieść fantastycznonaukowa" +msgstr[3] "powieść fantastycznonaukowa" + +#. ~ Description for {'str': 'scifi novel'} +#: lang/json/BOOK_from_json.py +msgid "Aliens, ray guns, and space ships." +msgstr "Obcy, lasery i statki kosmiczne." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" +" surprisingly accurate in predicting much of modern society… Until " +"recently." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" +"\n" +"Tyger, Tyger, Burning bright,\n" +"In the forests of the night:\n" +"What immortal hand or eye,\n" +"Dare frame thy fearful symmetry?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" +"stains have smudged the occasional word." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Hyperion\" by Dan Simmons." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" +"\n" +"Give us gods. Oh give them us!\n" +"Give us gods.\n" +"We are so tired of men\n" +"And motor-power." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " +"ripped off." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " +"you wonder how Thailand fared the end of the world." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " +"contains a hand-written grocery list." +msgstr "" +"To jest kopia „Fundacji i imperium” Izaaka Asimova. Tylna strona zawiera " +"ręcznie napisaną listę zakupów." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " +"still has the smell of new books within its pages." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " +"Sterling. The cover has rings of coffee stains over it." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " +"looks to have been used to press flowers." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " +"the monster?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" +" handbook." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " +"covered in dried blood." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " +"if it's been slightly chewed by a dog or other large animal." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " +"Copy. Not for re-sale.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " +"the first pages in crayon." +msgstr "" +"To jest kopia „Trawy” Sheri S. Tepper. Dziecko popisało kredką pierwsze " +"strony." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " +"with 'Library Copy'. And a sticker reading 'Science Fiction'." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" +" almost brand new." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " +"and worn, some pages appear to be loose." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " +"and thin. You should probably be careful with this copy." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " +"dog-eared and worn." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"Solaris\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Vurt\" by Jeff Noon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " +"blurb reminds you of a Japanese movie you think you once caught on the " +"television late at night." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " +"missing from the end of the book. Luckily only mail-order advertisements." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " +"Douglas Adams." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Dune" +msgid_plural "copies of Dune" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " +"some of its pages. Weird." +msgstr "" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Dune\" by Frank Herbert. It is a fairly new " +"reprint with the words \"SOON TO BE A MAJOR MOTION PICTURE\" splashed across" +" its dust jacket." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Parable of the Talents" +msgid_plural "copies of Parable of the Talents" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Parable of the Talents', 'str_pl': 'copies of +#. Parable of the Talents'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Parable of the Talents.\". It is Octavia " +"Butler's sequel to her book \"Parable of the Sower.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Fifth Season" +msgid_plural "signed copies of Fifth Season" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'The Fifth Season', 'str_pl': 'signed copies of +#. Fifth Season'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a signed hardcover copy of the Hugo award winning \"The Fifth " +"Season\" by N.K. Jemisin. It smells faintly of dirt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "We" +msgid_plural "copies of We" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"This hardback book is titled \"The Annotated We: A New Translation of Evgeny Zamiatin's Novel.\"\n" +"\n" +"It is Vladimir Wozniuk's 2015 translation of \"We,\" originally published in 1924 and generally seen as the first modern dystopian novel. The commentary examines the profusive allusions and highlights the poetic nature of Zamiatin's language." +msgstr "" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"A seminal work of dystopian fiction, Evgeny Zamiatin's \"We\" was first published in 1924 but suppresed by the Soviet Union until 1988.\n" +"\n" +"This mass-market 1993 edition you've found was translated from the Russian by Clarence Brown and includes a short introduction. The slightly worn cover features a surrealist photo of a person gazing backward suspiciouly." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Cyberiad" +msgid_plural "copies of The Cyberiad" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'The Cyberiad', 'str_pl': 'copies of The +#. Cyberiad'} +#: lang/json/BOOK_from_json.py +msgid "" +"This 350 page paperback presents the exploits and robotic rivalries of Trurl" +" and Klapaucius. Originally written in Polish by Stanislaw Lem, it has been" +" masterfully translated into English by Michael Kandel." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Brave New World" +msgid_plural "copies of Brave New World" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Brave New World', 'str_pl': 'copies of Brave New +#. World'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is weather worn copy of \"Brave New World\" by Aldous Huxley looks like" +" it has been left out in rain. The novel begins in a bleak building where " +"fetuses are grown in bottles on an assembly line." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Roadside Picnic" +msgid_plural "copies of Roadside Picnic" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Roadside Picnic', 'str_pl': 'copies of Roadside +#. Picnic'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a paperback copy of \"Roadside Picnic\" by Arkady and Boris " +"Strugatsky. It has been translated into over 20 languages, occasionally " +"under the name \"Stalker.\" This copy, fortunately for you, just happens to" +" be in your native tongue." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Fahrenheit 451" +msgid_plural "copies of Fahrenheit 451" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Fahrenheit 451', 'str_pl': 'copies of Fahrenheit +#. 451'} +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"Some joker has gently burnt the exterior edge of this paperback dystopia. " +"It's still perfectly readable." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"\"It was a pleasure to burn. It was a special pleasure to see things eaten," +" to see things blackened and changed.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This 1979 softcover edition of Ray Bradbury's \"Fahrenheit 451\" was once a " +"library book. It still has a light blue checkout card pocketed on the torn " +"back cover. One \"Suzanne Collins\" borrowed it in 1981." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"The red and black paperback novel you hold in your hands is a modern reprint" +" of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This scifi novel is divided into three parts: \"The Hearth and the " +"Salamander,\" \"The Sieve and the Sand,\", and \"Burning Bright.\"" +msgstr "" + #: lang/json/BOOK_from_json.py msgid "sports novel" msgid_plural "sports novels" @@ -34116,8 +34223,9 @@ msgstr[3] "" #: lang/json/BOOK_from_json.py msgid "" "This book is for the delightful little ring bearer in your wedding. The " -"author depicts the responsibility and the honor in being a ring bearer your " -"little angel will cherish." +"author depicts the responsibility and honor in being a ring bearer. Your " +"little angel will cherish this book as he or she learns how to behave on " +"your perfect day." msgstr "" #: lang/json/BOOK_from_json.py @@ -35699,13 +35807,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Adorkable Girl" -msgid_plural "The Adorkable Girls" +msgid_plural "copies of Adorkable" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for The Adorkable Girl +#. ~ Description for {'str': 'The Adorkable Girl', 'str_pl': 'copies of +#. Adorkable'} #: lang/json/BOOK_from_json.py msgid "" "When a therapist's daughter transfers to a new school, she decides to change" @@ -35715,28 +35824,30 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Becoming Jackson" -msgid_plural "Becoming Jacksons" +msgid_plural "copies of Becoming Jackson" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for Becoming Jackson +#. ~ Description for {'str': 'Becoming Jackson', 'str_pl': 'copies of Becoming +#. Jackson'} #: lang/json/BOOK_from_json.py msgid "" "When Jackson gains the mystical talent to alter his appearance on command, " -"how will he continue to recognize himself in his own mirror?" +"will he be able to recognize himself in his own mirror?" msgstr "" #: lang/json/BOOK_from_json.py msgid "Nothing Burned" -msgid_plural "Nothing Burneds" +msgid_plural "copies of Nothing Burned" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for Nothing Burned +#. ~ Description for {'str': 'Nothing Burned', 'str_pl': 'copies of Nothing +#. Burned'} #: lang/json/BOOK_from_json.py msgid "" "A teenage influencer becomes fast friends with someone who may or may not be" @@ -35745,13 +35856,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "High and Low" -msgid_plural "High and Lows" +msgid_plural "copies of High and Low" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for High and Low +#. ~ Description for {'str': 'High and Low', 'str_pl': 'copies of High and +#. Low'} #: lang/json/BOOK_from_json.py msgid "" "In this work of adolescent fiction, a young gemini discovers that the " @@ -35762,13 +35874,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Fire When You See My Eyes" -msgid_plural "Fire When You See My Eyess" +msgid_plural "copies of Fire When" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for Fire When You See My Eyes +#. ~ Description for {'str': 'Fire When You See My Eyes', 'str_pl': 'copies of +#. Fire When'} #: lang/json/BOOK_from_json.py msgid "" "In a cataclysmic future, advanced technology gives parents access to video " @@ -35777,13 +35890,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Peanut Butter Bruised" -msgid_plural "Peanut Butter Bruiseds" +msgid_plural "copies of Peanut Butter Bruised" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for Peanut Butter Bruised +#. ~ Description for {'str': 'Peanut Butter Bruised', 'str_pl': 'copies of +#. Peanut Butter Bruised'} #: lang/json/BOOK_from_json.py msgid "" "In this work of young adult fiction, a woman raised on food stamps falls in " @@ -35793,13 +35907,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Ready When You Are" -msgid_plural "Ready When You Ares" +msgid_plural "copies of Ready When" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for Ready When You Are +#. ~ Description for {'str': 'Ready When You Are', 'str_pl': 'copies of Ready +#. When'} #: lang/json/BOOK_from_json.py msgid "" "When three teenage girls ditch class to drive cross country together they " @@ -35809,13 +35924,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Study of a Boy" -msgid_plural "Study of a Boys" +msgid_plural "copies of \"Study of a Boy\"" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for Study of a Boy +#. ~ Description for {'str': 'Study of a Boy', 'str_pl': 'copies of "Study of +#. a Boy"'} #: lang/json/BOOK_from_json.py msgid "" "A high school sophomore's personal journal is stolen and then leaked on " @@ -35825,13 +35941,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Summer Variables" -msgid_plural "Summer Variabless" +msgid_plural "copies of Summer Variables" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for Summer Variables +#. ~ Description for {'str': 'Summer Variables', 'str_pl': 'copies of Summer +#. Variables'} #: lang/json/BOOK_from_json.py msgid "" "In this book written primarily for young adults, a woman's modest summer " @@ -35839,6 +35956,72 @@ msgid "" " unsavory elements." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "In a Dark Place" +msgid_plural "copies of Dark Place" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'In a Dark Place', 'str_pl': 'copies of Dark +#. Place'} +#: lang/json/BOOK_from_json.py +msgid "" +"Markia dreams about the future. Theo longs for the past. Together can they" +" find a way to live in the now?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Betrayal Takes Two" +msgid_plural "copies of Betrayal" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Betrayal Takes Two', 'str_pl': 'copies of +#. Betrayal'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a hard cover book for older teens. The two main characters pull a " +"cruel prank on their classmates, and are brought together both by their " +"frantic efforts to avoid being caught and their shared sense of guilt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "coming of age novel" +msgid_plural "coming of age novels" +msgstr[0] "powieść młodzieżowa" +msgstr[1] "powieść młodzieżowa" +msgstr[2] "powieść młodzieżowa" +msgstr[3] "powieść młodzieżowa" + +#. ~ Description for {'str': 'coming of age novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." +msgstr "" +"Klasyczna historia o dojrzewaniu, opisująca zabawne i przejmujące " +"doświadczenia życia, miłości i seksu." + +#: lang/json/BOOK_from_json.py +msgid "Pantheon: The Story of an Iranian Youth" +msgid_plural "copies of Pantheon" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Pantheon: The Story of an Iranian Youth', +#. 'str_pl': 'copies of Pantheon'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hard cover graphic novel about a young girl living in Iran during the " +"1980's, seeing the world change around her as Iraq invaded her country." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "original copy of Housefly" msgid_plural "original copies of Housefly" @@ -37740,6 +37923,53 @@ msgid "" "harmless." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Scroll of Knock" +msgid_plural "Scrolls of Knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Scroll of Knock', 'str_pl': 'Scrolls of Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open locked wooden doors from a short " +"range away." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Improved Knock" +msgid_plural "Scrolls of Improved Knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Scroll of Improved Knock', 'str_pl': 'Scrolls of +#. Improved Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open any locked door from a short range " +"away." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of +#. Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers" +" with baleful lightning." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -38141,40 +38371,6 @@ msgid "" " - F. \"." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', -#. 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': -#. 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -40189,12 +40385,7 @@ msgstr[3] "" #. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py -msgid "" -"Meat from a heavily mutated animal. It has an unsettling loose and spongy " -"texture, but smells… mostly normal. There are strange tangles and " -"formations in it that don't appear natural at all: bits of bone and hair " -"crusted up inside the muscle, as if trying to form another organism. Still," -" seems digestible at least, if you cook it and remove the worst parts." +msgid "Meat from a heavily mutated animal." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -40209,10 +40400,8 @@ msgstr[3] "" #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"A tiny scrap of meat from a heavily mutated animal. It smells a bit odd, " -"and has bits of hair and bone mixed in that seem like they grew inside the " -"muscle itself. Still, seems digestible at least, if you cook it and remove " -"the worst parts." +"A tiny scrap of meat from a heavily mutated animal. It smells unappealing, " +"to say the least." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -40303,10 +40492,7 @@ msgstr[3] "" #. ~ Description for cooked mutant meat #: lang/json/COMESTIBLE_from_json.py -msgid "" -"This is a cooked chunk of meat from a mutated animal. It has an unsettling," -" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" -" the bits of hair and bone out…" +msgid "This is a cooked chunk of meat from a mutated animal." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -40317,6 +40503,14 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" +#. ~ Description for {'str': 'cooked scrap of mutant meat', 'str_pl': 'cooked +#. scraps of mutant meat'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"This is a tiny scrap of cooked mutant meat. It is small enough that it's " +"hard to tell how disgusting it is." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "raw offal" msgid_plural "raw offals" @@ -40354,6 +40548,19 @@ msgstr "" "To gotowane podroby i jelita. Są pełne niezbędnych witamin, ale większość " "ludzi uważa je za dość ohydne, chyba że są odpowiednio przyrządzone." +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant organs" +msgid_plural "mutant organs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'mutant organs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "These organs came from a giant mutant bug." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "pickled offal" msgid_plural "pickled offal" @@ -40577,6 +40784,19 @@ msgid "" "all cooked out." msgstr "" +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant lungs" +msgid_plural "mutant lungs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'mutant lungs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "You're pretty sure this is lung tissue." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "raw liver" msgid_plural "raw livers" @@ -40786,8 +41006,9 @@ msgstr[3] "" #. mutant fat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Freshly butchered fat from a heavily mutated animal. You could eat it raw, " -"but it is better used as an ingredient in other foods or projects." +"Freshly butchered fat from a heavily mutated animal. It smells, if " +"anything, even more disgusting than the rest of the mutant. There are " +"little puddles of unidentified oils dripping from it." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -42442,21 +42663,19 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "Woda z dodatkiem cukru lub miodu. Smakuje ok." #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" +msgid "black tea" +msgid_plural "black teas" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves" -" of the tea plant /Camellia sinensis/." +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." msgstr "" -"Napój gentlemanów z całego świata, zrobiony poprzez zaparzenie liści krzewu " -"herbacianego /Camellia sinensis/." #: lang/json/COMESTIBLE_from_json.py msgid "bark tea" @@ -42518,6 +42737,37 @@ msgstr "" "Fantazyjna woda mineralna, tak bardzo wyszukana, że czujesz się " "ekstrawagancki od samego trzymania." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia sinensis/." +" Green tea has a lighter, fresher taste than black and is traditionally " +"preferred in Asian cultures." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -49558,7 +49808,6 @@ msgstr[2] "" msgstr[3] "" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "" @@ -50744,18 +50993,48 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "" #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" +msgid "black tea bag" +msgid_plural "black tea bags" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'black tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'green tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'fruit tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -50872,14 +51151,11 @@ msgstr[3] "" #. ~ Description for {'str': 'protein ration'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"SoyPelusa ran a highly successful crowdfunding campaign for their signature " -"protein bar, dubbed \"DaiZoom.\" A person can live on one of these bars, " -"three times a day, presumably forever. After backers received their " -"product, a single flaw was found: most consumers found starvation preferable" -" to the flavor. Warehouses of the product went unsold as the company went " -"bankrupt, providing the perfect opportunity for FEMA to scoop them up and " -"stock the evac shelters. Now, you hold a piece of famous crowdfunding " -"history in your hands. How exciting." +"SoyPelusa ran a highly successful crowdfunding campaign for their signature protein bar, dubbed \"DaiZoom.\"\n" +"\n" +"A person can live on one of these bars, three times a day, presumably forever. After backers received their product, a single flaw was found: most consumers found starvation preferable to the flavor. Warehouses of the product went unsold as the company went bankrupt, providing the perfect opportunity for FEMA to scoop them up and stock the evac shelters.\n" +"\n" +"Now, you hold a piece of famous crowdfunding history in your hands. How exciting." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -51894,14 +52170,14 @@ msgstr "" " aby go wydobyć." #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" -msgstr[0] "liście herbaty" -msgstr[1] "liście herbaty" -msgstr[2] "liście herbaty" -msgstr[3] "liście herbaty" +msgid "black tea leaf" +msgid_plural "black tea leaves" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " @@ -51910,6 +52186,21 @@ msgstr "" "Wysuszone liście tropikalnej rośliny. Po zalaniu wrzątkiem uzyskasz herbatę," " a możesz spróbować też je zjeść. Nie są jednak sycące." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "tomato" msgid_plural "tomatoes" @@ -55235,6 +55526,84 @@ msgstr "" "Mąka zmieszana z wodą. Z tak przyrządzonego ciasta wychodzi chleb o wiele " "lepszy niż z samej mąki." +#: lang/json/COMESTIBLE_from_json.py +msgid "pineapple stem" +msgid_plural "pineapple stem" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'pineapple stem'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Roots of a pineapple plant, for growing your own." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "melon seeds" +msgid_plural "melon seeds" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'melon seeds'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some melon seeds." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "banana saplings" +msgid_plural "banana saplings" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'banana saplings'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some banana saplings." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "orange vine" +msgid_plural "orange vine" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'orange vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some orange vine. Definitely GMO." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "lemon vine" +msgid_plural "lemon vine" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'lemon vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some lemon vines. Definitely GMO." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "subterraenean coconut" +msgid_plural "subterraenean coconut" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'subterraenean coconut'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Proof that man went too far before the Cataclysm." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "vampire mutagen" msgid_plural "vampire mutagens" @@ -55688,6 +56057,14 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" +#: lang/json/COMESTIBLE_from_json.py +msgid "apatosaurus egg" +msgid_plural "apatosaurus eggs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: lang/json/COMESTIBLE_from_json.py msgid "ceratosaurus egg" msgid_plural "ceratosaurus eggs" @@ -56084,7 +56461,7 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -56294,131 +56671,6 @@ msgid "" "see this? We will not permit you to join us while we are modded out." msgstr "" -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when" -" eaten raw." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do" -" not drink!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "" - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -57488,23 +57740,6 @@ msgstr[3] "puszka aluminiowa" msgid "An aluminum can, like what soda comes in." msgstr "Aluminiowa puszka, taka w której sprzedaje się napoje, np. kolę." -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "otwarta puszka aluminiowa" -msgstr[1] "otwarta puszka aluminiowa" -msgstr[2] "otwarta puszka aluminiowa" -msgstr[3] "otwarta puszka aluminiowa" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Aluminiowa puszka, taka w której sprzedaje się napoje, np. kolę. Ta jest " -"otwarta i nie da się jej łatwo zamknąć." - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -57516,25 +57751,10 @@ msgstr[3] "" #. ~ Description for {'str': 'paper carton'} #: lang/json/GENERIC_from_json.py msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." +"A half gallon carton constructed of a paper, aluminum, and plastic laminate." " It has a threaded cap for easy resealing." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." -" This one is open and its contents will spoil." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" msgid_plural "vacuum-packed bags" @@ -57561,21 +57781,6 @@ msgstr[3] "" msgid "A small tin can, like what tuna comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -57589,21 +57794,6 @@ msgstr[3] "" msgid "A medium tin can, like what soup comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -57700,19 +57890,6 @@ msgstr[3] "plastikowy kubek" msgid "A small, vacuum formed cup." msgstr "Mały, formowany próżniowo kubek." -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "otwarty plastikowy kubek" -msgstr[1] "otwarty plastikowy kubek" -msgstr[2] "otwarty plastikowy kubek" -msgstr[3] "otwarty plastikowy kubek" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "Mały, formowany próżniowo kubek. W zasadzie śmieć." - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -57925,7 +58102,6 @@ msgstr[2] "galonowa butla" msgstr[3] "galonowa butla" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "" @@ -58055,7 +58231,6 @@ msgstr[2] "mały bukłak" msgstr[3] "mały bukłak" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of" @@ -58215,21 +58390,6 @@ msgid "" "food." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -58856,6 +59016,38 @@ msgstr[3] "kawałki chityny" msgid "A piece of an insect's exoskeleton. It is light and very durable." msgstr "Kawałek egzoszkieletu owada. Lekki i bardzo wytrzymały." +#: lang/json/GENERIC_from_json.py +msgid "strand of endochitin" +msgid_plural "strands of endochitin" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'strand of endochitin', 'str_pl': 'strands of +#. endochitin'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of an insect's endoskeleton." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "cluster of gas sacs" +msgid_plural "clusters of gas sacs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'cluster of gas sacs', 'str_pl': 'clusters of gas +#. sacs'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This is a cluster of membranous bubbles, each about the size of a grape, " +"retrieved from inside a mutant insect. They float like tiny helium " +"balloons, and are likely full of a lighter-than-air gas helping the bug to " +"fly." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "set of 100 ceramic disk" msgid_plural "ceramic disks" @@ -60409,8 +60601,8 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -62179,6 +62371,19 @@ msgstr "" "Działo laserowe wymontowane z lufy wieżyczki laserowej TX-5LR Cerberus. " "Użyteczne jako samodzielna broń, bez potrzebnych części." +#: lang/json/GENERIC_from_json.py +msgid "bone armor kit" +msgid_plural "bone armor kits" +msgstr[0] "zestaw kościanego opancerzenia" +msgstr[1] "zestaw kościanego opancerzenia" +msgstr[2] "zestaw kościanego opancerzenia" +msgstr[3] "zestaw kościanego opancerzenia" + +#. ~ Description for {'str': 'bone armor kit'} +#: lang/json/GENERIC_from_json.py +msgid "Bone plating made for a vehicle." +msgstr "Zestaw kościanego opancerzenia do pojazdów." + #: lang/json/GENERIC_from_json.py msgid "module template" msgid_plural "module templates" @@ -67220,7 +67425,7 @@ msgstr[3] "" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with a spiked hammer head, a spike, and a hook " -"attached to a long stick." +"attached to a beefy wooden pole." msgstr "" #. ~ Description for {'str': 'lucerne hammer'} @@ -67671,7 +67876,6 @@ msgstr[2] "zaostrzony kij" msgstr[3] "zaostrzony kij" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "Prosty kij drewniany z zaostrzonym końcem." @@ -67791,19 +67995,15 @@ msgstr[3] "halabarda" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with an axe blade, a spike, and other fun things" -" attached to a long stick." +" attached to a long sturdy stick." msgstr "" -"Halabarda to wszechstronna broń drzewcowa z ostrzem siekiery, kolcem, i " -"innymi zabawnymi rzeczami przytwierdzonymi na końcu długiego kija." #. ~ Description for {'str': 'halberd'} #: lang/json/GENERIC_from_json.py msgid "" "This is a dull, cheaply made replica of a polearm with an axe blade, a " -"spike, and other fun things attached to a long stick." +"spike, and other fun things attached to a thick pole." msgstr "" -"To kiepska, tania replika broni drzewcowej z ostrzem, kolcem, i innymi " -"zabawnymi rzeczami przytwierdzonymi na końcu długiego kija." #: lang/json/GENERIC_from_json.py msgid "glaive" @@ -68541,21 +68741,6 @@ msgstr "" "Zwane też bagh nakha lub żelazna łapa. Ta mała podobna do pazurów broń z " "Indii zaprojektowana do ukrywania jej w dłoni." -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "cestus" -msgstr[1] "cestus" -msgstr[2] "cestus" -msgstr[3] "cestus" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -68861,7 +69046,6 @@ msgstr[2] "rura" msgstr[3] "rura" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -69122,7 +69306,15 @@ msgid "" "been used for commercial wrapping or for weather-sealing a home." msgstr "" -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -70221,9 +70413,9 @@ msgstr[3] "improwizowana glewia" #. ~ Description for {'str': 'makeshift glaive'} #: lang/json/GENERIC_from_json.py msgid "" -"This is a large blade attached to a long stick. It could do a considerable " -"amount of damage." -msgstr "Duże ostrze przymocowane do długiego kija. Może zadać sporo obrażeń." +"This is a large blade attached to a stout section of tree branch. It could " +"do a considerable amount of damage." +msgstr "" #: lang/json/GENERIC_from_json.py msgid "mind splicer kit" @@ -70427,6 +70619,23 @@ msgstr "" "Zwykły zszywacz do papieru. Przydatny jeżeli zamierzasz zostać pracownikiem " "biurowym w czasach kataklizmu." +#: lang/json/GENERIC_from_json.py +msgid "hole puncher" +msgid_plural "hole punchers" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'hole puncher'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This metal tool can help you punch a single hole in a piece of paper. I " +"mean, you could do more if you wanted, but you'd have to do them one at a " +"time. Or, if you really wanted more holes with one punch, I suppose you " +"could fold the paper… This is a one cylinder hole puncher." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "pen" msgid_plural "pens" @@ -70757,6 +70966,21 @@ msgstr "" "pojazdu, aż będzie pływalny. Potem dołącz wiosła lub silnik by napędzić " "łódkę." +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -71932,7 +72156,6 @@ msgstr[2] "" msgstr[3] "" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "Cienki arkusz metalu." @@ -72076,19 +72299,6 @@ msgid "Durable silica-coated chitin plating made for a vehicle." msgstr "" "Zestaw pokrytego krzemem lekkiego chitynowego opancerzenia do pojazdów." -#: lang/json/GENERIC_from_json.py -msgid "bone armor kit" -msgid_plural "bone armor kits" -msgstr[0] "zestaw kościanego opancerzenia" -msgstr[1] "zestaw kościanego opancerzenia" -msgstr[2] "zestaw kościanego opancerzenia" -msgstr[3] "zestaw kościanego opancerzenia" - -#. ~ Description for {'str': 'bone armor kit'} -#: lang/json/GENERIC_from_json.py -msgid "Bone plating made for a vehicle." -msgstr "Zestaw kościanego opancerzenia do pojazdów." - #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "shredder" msgid_plural "shredders" @@ -72445,8 +72655,8 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and" @@ -73399,6 +73609,20 @@ msgstr[3] "" msgid "It has given you an answer, but you are yet to ask anything." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -73509,7 +73733,22 @@ msgstr[3] "" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." +msgid "A powerful electromagnet made from a room temperature superconductor." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." msgstr "" #: lang/json/GENERIC_from_json.py @@ -74228,6 +74467,19 @@ msgid "" "battles is bookmarked." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Stormguard Warrior" +msgid_plural "Stormguard Warrior" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Stormguard Warrior'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Iron Heart discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "The Life and Work of Tiger Sauer" msgid_plural "The Life and Work of Tiger Sauer" @@ -74243,6 +74495,76 @@ msgid "" "art." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Pocket Monster Encyclopedia" +msgid_plural "Pocket Monster Encyclopedia" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Pocket Monster Encyclopedia'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This encyclopedia contains a detailed listing of the strengths and " +"techniques of various fictional monsters and how to apply them the in a real" +" fight." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Distant Horizon" +msgid_plural "Distant Horizon" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Distant Horizon'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Setting Sun discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Jedi Holocrons: Form I" +msgid_plural "Jedi Holocrons: Form I" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Jedi Holocrons: Form I'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This device contains the teachings of the first form of Jedi lightsaber " +"combat: Shii-Cho." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -74269,7 +74591,7 @@ msgstr[3] "" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." msgstr "" @@ -74412,7 +74734,7 @@ msgstr[3] "" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." +"Crystalized mana in powdered form. It faintly pulses with arcane energy." msgstr "" #: lang/json/GENERIC_from_json.py @@ -76087,168 +76409,6 @@ msgid "" "much more expensive." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional" -" lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "" - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "BROŃ PALNA" @@ -80101,34 +80261,6 @@ msgid "" "tips." msgstr "" -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test -#. disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "" - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test -#. rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "" - #: lang/json/MOD_INFO_from_json.py src/color.cpp src/color.cpp msgid "default" msgstr "domyślne" @@ -80144,7 +80276,10 @@ msgstr "Aftershock" #. ~ Description for Aftershock #: lang/json/MOD_INFO_from_json.py -msgid "Drifts the game away from realism and more towards sci-fi." +msgid "" +"Drifts the game away from realism and more towards sci-fi. Long term goal " +"of being a significantly different experience that remains compatible with " +"other mods." msgstr "" #: lang/json/MOD_INFO_from_json.py @@ -80186,8 +80321,9 @@ msgstr "" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." msgstr "" #: lang/json/MOD_INFO_from_json.py @@ -80399,16 +80535,6 @@ msgstr "" msgid "Allows stats to raise via skill progression." msgstr "Pozwala statystykom na rozwój przez progresję umiejętności." -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "" - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "Rozwój Urbanistyczny" @@ -82799,6 +82925,19 @@ msgstr "" " mięsną aberrację. Oczy ze wszystkich głów strzelają wzrokiem na prawo i " "lewo, a usta wydają chóralne jęki i wrzaski." +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "człowiek" +msgstr[1] "ludzie" +msgstr[2] "ludzie" +msgstr[3] "ludzie" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -85389,6 +85528,21 @@ msgstr "" msgid "Lightning arcs from the leech stalk!" msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -86120,6 +86274,104 @@ msgid "" "looking for patient to assist." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo" +" seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -89263,6 +89515,21 @@ msgstr "" "Masywny podobny do nosorożca dinozaur z kościstym grzebieniem z którego " "wystają trzy duże rogi." +#: lang/json/MONSTER_from_json.py +msgid "Triceratops bio-operator" +msgid_plural "Triceratops bio-operator" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Triceratops bio-operator'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive three-horned four-legged dinosaur dotted with crackling bionics. " +"The horns glow menacingly." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Stegosaurus" msgid_plural "Stegosaurus" @@ -89294,6 +89561,21 @@ msgstr "" "Dinozaur przypominający wielkiego prehistorycznego pancernika. Jego ogon " "zakończony jest masywną kolczastą pałką kostną." +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus" +msgid_plural "Apatosaurus" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Apatosaurus'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur with a long, whip-like tail. The" +" head is upright and the neck looks like it would make a good strong club." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Ceratosaurus" msgid_plural "Ceratosaurus" @@ -89573,6 +89855,132 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs," +" broad shoulders and a pointed beak. Its tattered feathers are stained with" +" black, sticky liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus zombie" +msgid_plural "Spinosaurus zombies" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Enormous putrid dinosaur corpse with a ferocious crocodile-like head, oozing" +" black eyes, and a tattered sail on its back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -89587,14 +89995,153 @@ msgid "Massive piles of ragged, stinking flesh lifting enormous teeth." msgstr "" #: lang/json/MONSTER_from_json.py -msgid "Z-Deinonychus" -msgid_plural "Z-Deinonychus" +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with feathery edges. The head looks big, lots of big" +" teeth would fit in it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "S-Rex" +msgid_plural "S-Rexes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'S-Rex', 'str_pl': 'S-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Monstrous columns of dense bone lifting enormous sharp pointed teeth " +"dripping with black goo." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for {'str_sp': 'Z-Deinonychus'} +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus zombie" +msgid_plural "Deinonychus zombies" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Deinonychus zombie'} #: lang/json/MONSTER_from_json.py msgid "" "The shuffling corpse of a medium-sized bipedal dinosaur covered with " @@ -89602,6 +90149,83 @@ msgid "" "sickle-like claw." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms," +" a long tail, and long sharp scythe-like claws." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent" +" bony crests on its head with ragged strips of ripped flesh hanging down " +"like a frill." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" msgid_plural "improvised SMG turrets" @@ -90463,21 +91087,6 @@ msgstr "" "pomocniczych jeden do jednego produkcji Wraitheon, opracowany do płynnego " "zintegrowania z bardziej tradycyjnymi siłami zbrojnymi." -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper -#. mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "" - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -90900,21 +91509,6 @@ msgid "" "chitin fitted to a thin mesh. You could put this on a friendly horse." msgstr "" -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "" - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "" @@ -91659,6 +92253,22 @@ msgstr "" msgid "This fake spell occurs on cranial bomb activation. Likely fatal." msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "" @@ -92064,8 +92674,8 @@ msgstr "" msgid "Debug Full Protection" msgstr "" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "" @@ -92553,10 +93163,10 @@ msgstr "" msgid "Jolt" msgstr "" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py lang/json/mutation_category_from_json.py msgid "a crackle" msgstr "" @@ -92625,6 +93235,31 @@ msgstr "" msgid "Wall of Fog" msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "" + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "" @@ -92737,65 +93372,37 @@ msgstr "" msgid "X-ray Vision" msgstr "" -#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py -msgid "Mana Siphon" -msgstr "" - -#. ~ Description for Mana Siphon -#: lang/json/SPELL_from_json.py -msgid "" -"This is the spell portion of the mana siphon series of mutations. If you " -"have this spell you probably debugged it in." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Pew, Pew" -msgstr "" - -#. ~ Description for Pew, Pew #: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." +msgid "Knock" msgstr "" -#: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "" - -#. ~ Description for The Floor is Lava +#. ~ Description for Knock #: lang/json/SPELL_from_json.py msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" +"You channel magic into a force capable of opening doors. This variant can " +"only open wooden doors." msgstr "" #: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" +msgid "Improved Knock" msgstr "" -#. ~ Description for Sports Training Montage +#. ~ Description for Improved Knock #: lang/json/SPELL_from_json.py msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." +"You channel magic into a force capable of opening doors. This variant can " +"open any locked door." msgstr "" -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "" - -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" +#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py +msgid "Mana Siphon" msgstr "" -#. ~ Description for Summon Mummy +#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." +"This is the spell portion of the mana siphon series of mutations. If you " +"have this spell you probably debugged it in." msgstr "" #: lang/json/TOOLMOD_from_json.py @@ -95677,32 +96284,37 @@ msgid "" msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser -#. Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater -#. Girdles of Pockets'} +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" + #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" msgid_plural "Belts of Weaponry" @@ -101180,13 +101792,11 @@ msgstr[3] "smartfony" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "Aktywujesz aplikację latarki." #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "Poziom naładowania smartfona jest zbyt niski." @@ -102815,7 +103425,6 @@ msgstr[2] "topór strażacki" msgstr[3] "topór strażacki" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -102833,7 +103442,6 @@ msgstr[2] "strażackie narzędzie ratownicze" msgstr[3] "strażackie narzędzie ratownicze" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -103141,6 +103749,34 @@ msgstr "" "Spłaszczony kamień osadzony na kiju. Ujdzie jako toporny szpadel, którego " "nie da się porównać do prawdziwego szpadla." +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than" +" raking leaves." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -103174,6 +103810,32 @@ msgid "This is a digging tool. Use it to dig pits adjacent to your location." msgstr "" "To narzędzie do kopania. Użyj go do wykopania dziur w ziemi obok ciebie." +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -104083,6 +104745,14 @@ msgstr "" "Połączona z właściwymi narzędziami mógłbyś jej użyć do robót " "metalurgicznych." +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -104256,6 +104926,20 @@ msgstr "" "To długie metalowe obcęgi. Używane powszechnie w gotowaniu lub w pracach " "metalurgicznych." +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -104447,6 +105131,21 @@ msgstr "" "To posłanie ze skór, które można zwinąć w celach transportowych. Izoluje od " "podłoża, ułatwiając sen. Użyj, by rozwinąć i umieścić na ziemi." +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -106675,7 +107374,6 @@ msgstr[2] "szmata" msgstr[3] "szmata" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -107205,14 +107903,14 @@ msgid "" msgstr "Ta elektryczna piła łańcuchowa mocno hałasuje. Użyj by ją wyłączyć." #: lang/json/TOOL_from_json.py -msgid "stone hand axe" -msgid_plural "stone hand axes" +msgid "stone axe head" +msgid_plural "stone axe heads" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for {'str': 'stone hand axe'} +#. ~ Description for {'str': 'stone axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a broad piece of stone with an edge narrow enough to roughly chop " @@ -107220,14 +107918,14 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "metal hand axe" -msgid_plural "metal hand axes" +msgid "metal axe head" +msgid_plural "metal axe heads" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" -#. ~ Description for {'str': 'metal hand axe'} +#. ~ Description for {'str': 'metal axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a chunk of steel with one edge hammered down to something resembling" @@ -107367,6 +108065,14 @@ msgstr "" "Przenośny opalany węglem drzewnym piec. Jest zaprojektowany do wypalania " "cegieł, ale możesz w nim wypalić też inne rzeczy zrobione z gliny." +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -107563,7 +108269,6 @@ msgstr[2] "podnośnik nożycowy" msgstr[3] "podnośnik nożycowy" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "Kompaktowy podnośnik nożycowy do podnoszenia pojazdów." @@ -107853,7 +108558,6 @@ msgstr[2] "śrubokręt" msgstr[3] "śrubokręt" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -107908,7 +108612,6 @@ msgstr[2] "lutownica" msgstr[3] "lutownica" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -108388,16 +109091,16 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" +msgid "pseudo atomic butter churn" +msgid_plural "pseudo atomic butter churns" msgstr[0] "" msgstr[1] "" msgstr[2] "" msgstr[3] "" #: lang/json/TOOL_from_json.py -msgid "pseudo atomic butter churn" -msgid_plural "pseudo atomic butter churns" +msgid "precision solderers" +msgid_plural "precision solderers" msgstr[0] "" msgstr[1] "" msgstr[2] "" @@ -108627,6 +109330,23 @@ msgid "" "specialized tools." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -109591,6 +110311,78 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" +#: lang/json/TOOL_from_json.py +msgid "minor wand of knock" +msgid_plural "minor wands of knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'minor wand of knock', 'str_pl': 'minor wands of +#. knock'} +#. ~ Description for {'str': 'lesser wand of knock', 'str_pl': 'lesser wands +#. of knock'} +#. ~ Description for {'str': 'greater wand of knock', 'str_pl': 'greater wands +#. of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of knock" +msgid_plural "lesser wands of knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of knock" +msgid_plural "greater wands of knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: lang/json/TOOL_from_json.py +msgid "minor wand of improved knock" +msgid_plural "minor wands of improved knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'minor wand of improved knock', 'str_pl': 'minor +#. wands of improved knock'} +#. ~ Description for {'str': 'lesser wand of improved knock', 'str_pl': +#. 'lesser wands of improved knock'} +#. ~ Description for {'str': 'greater wand of improved knock', 'str_pl': +#. 'greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts improved knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of improved knock" +msgid_plural "lesser wands of improved knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of improved knock" +msgid_plural "greater wands of improved knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: lang/json/TOOL_from_json.py msgid "disposable minor wand of magic missile" msgid_plural "disposable minor wands of magic missile" @@ -109807,6 +110599,78 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of knock" +msgid_plural "disposable minor wands of knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'disposable minor wand of knock', 'str_pl': +#. 'disposable minor wands of knock'} +#. ~ Description for {'str': 'disposable lesser wand of knock', 'str_pl': +#. 'disposable lesser wands of knock'} +#. ~ Description for {'str': 'disposable greater wand of knock', 'str_pl': +#. 'disposable greater wands of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of knock" +msgid_plural "disposable lesser wands of knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of knock" +msgid_plural "disposable greater wands of knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of improved knock" +msgid_plural "disposable minor wands of improved knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#. ~ Description for {'str': 'disposable minor wand of improved knock', +#. 'str_pl': 'disposable minor wands of improved knock'} +#. ~ Description for {'str': 'disposable lesser wand of improved knock', +#. 'str_pl': 'disposable lesser wands of improved knock'} +#. ~ Description for {'str': 'disposable greater wand of improved knock', +#. 'str_pl': 'disposable greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts improved knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of improved knock" +msgid_plural "disposable lesser wands of improved knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of improved knock" +msgid_plural "disposable greater wands of improved knock" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: lang/json/TOOL_from_json.py msgid "finger firelighter" msgid_plural "finger firelighters" @@ -109961,93 +110825,6 @@ msgid "" "magical metals into their workable ingot form." msgstr "" -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "" - #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" msgid_plural "yokes and harnesses" @@ -110487,14 +111264,42 @@ msgstr "" msgid "Freeman's favorite" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Wield a crowbar" +msgstr "" + #: lang/json/achievement_from_json.py msgid "Impenetrable" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Wear a tank suit" +msgstr "" + #: lang/json/achievement_from_json.py msgid "What are they hiding?" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Enter a lab finale room" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "The Last Homely House" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Reach a refugee center" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Return to your roots" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Return to the location you started the game" +msgstr "" + #: lang/json/achievement_from_json.py msgid "Would-be Wizard" msgstr "" @@ -111303,10 +112108,6 @@ msgstr "" msgid "mana energy" msgstr "" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "Pompa Adrenaliny" @@ -112942,23 +113743,6 @@ msgstr "" msgid "Wind Turbines" msgstr "" -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" -"Twoje ręce zostały wyposażone w precyzyjne narzędzia lutownicze, obcinaki do" -" drutu i szpule kabli. Są zbyt małe, aby można je było zastosować w " -"większości rzemieślnictwa, ale przy braku odpowiednich maszyn są niezbędne " -"do tworzenia bioniki bez lepszych narzędzi." - #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" msgstr "" @@ -113007,6 +113791,23 @@ msgid "" "and fast." msgstr "" +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" +"Twoje ręce zostały wyposażone w precyzyjne narzędzia lutownicze, obcinaki do" +" drutu i szpule kabli. Są zbyt małe, aby można je było zastosować w " +"większości rzemieślnictwa, ale przy braku odpowiednich maszyn są niezbędne " +"do tworzenia bioniki bez lepszych narzędzi." + #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" msgid_plural "Ionic Overload Generators" @@ -113357,7 +114158,7 @@ msgid "Merciful" msgstr "" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp src/scenario.cpp msgid "All" msgstr "Wszystkie" @@ -115957,7 +116758,7 @@ msgstr "" msgid "You mount your steed." msgstr "" -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "Palisz Się" @@ -118461,66 +119262,6 @@ msgstr "" msgid "The gum webs constrict your movement." msgstr "" -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "" - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "" - #: lang/json/faction_from_json.py msgid "Your Followers" msgstr "Twoi Towarzysze" @@ -118722,6 +119463,17 @@ msgid "" " the kind words used about them." msgstr "" +#: lang/json/faction_from_json.py +msgid "Swampers Religious Community and Hotels and Casinos" +msgstr "" + +#. ~ Description for Swampers Religious Community and Hotels and Casinos +#: lang/json/faction_from_json.py +msgid "" +"A prosperous but secretive group of churchgoers and entertainment moguls " +"with an affection for dinosaurs. They welcome all untainted humans." +msgstr "" + #: lang/json/faction_from_json.py msgid "The Ancient Ones" msgstr "" @@ -122828,6 +123580,77 @@ msgid "" "temperature. You'll need to take it down first." msgstr "" +#: lang/json/furniture_from_json.py +msgid "sleep pod" +msgstr "" + +#. ~ Description for sleep pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a climate controlled sleep pod. An easy way to reduce energy costs " +"in dense urban environments." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "cryo pod" +msgstr "" + +#. ~ Description for cryo pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a long term sleep pod. Cryo pods are mostly used by people waiting " +"a short term for organs or criminals avoiding heat right after a crime." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "CRISPR Biolab" +msgstr "" + +#. ~ Description for CRISPR Biolab +#: lang/json/furniture_from_json.py +msgid "" +"A boxy looking device of arms, droppers and pipettes. It was used pre-" +"Cataclysm to do expirements in gene editing." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "3D printer" +msgstr "" + +#. ~ Description for 3D printer +#: lang/json/furniture_from_json.py +msgid "" +"This box was used for rapid prototyping of products and for general " +"entertainment purposes in the masses." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "neural net inserter" +msgstr "" + +#. ~ Description for neural net inserter +#: lang/json/furniture_from_json.py +msgid "" +"This device looks like a cross between some kind of nightmare dentistry " +"equipment and socketing tool mounted on a slide that lets it drop precisely " +"down. Useful for those project that require putting delicate items into " +"hard to reach spaces." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "monomolecular saw" +msgstr "" + +#. ~ Description for monomolecular saw +#: lang/json/furniture_from_json.py +msgid "" +"A wire the size of a cheescutter runs in a single direction in this tool, " +"allowing atomically precise cuts at almost any angle. Even unpowered it " +"gives off a visual distortion for several inches around it to prevent you " +"from losing a hand. It is impossible to deconstruct this device without the" +" wire self destructing." +msgstr "" + #. ~ Description for dresser #: lang/json/furniture_from_json.py msgid "Dress yourself!" @@ -123207,8 +124030,7 @@ msgstr "" "pozostałymi dwiema na naboje do strzelby. Jest zrobiona z rur i części " "skanibalizowanych z dwururki." -#: lang/json/gun_from_json.py lang/json/gun_from_json.py -#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" msgstr "strzelba" @@ -123407,7 +124229,8 @@ msgstr "" "wynalezionego w połowie 21-go wieku. Jest niewiele więcej niż elektroniką " "oklejoną taśma montażową, pracującą na zasilaniu z UPS-a." -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py src/item.cpp +#: lang/json/gun_from_json.py lang/json/gun_from_json.py +#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py src/item.cpp msgctxt "gun_type_type" msgid "pistol" msgstr "pistolet" @@ -127767,6 +128590,20 @@ msgid "" "will have to suffice." msgstr "" +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "" + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -128640,6 +129477,18 @@ msgstr "" msgid "trilaser" msgstr "" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -129537,6 +130386,14 @@ msgid "" "reliability." msgstr "" +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -129629,26 +130486,6 @@ msgstr "" msgid "Fake gun that fires barbed javelins." msgstr "" -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "" - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -131965,18 +132802,6 @@ msgid "" "replacing the iron sights. Increases accuracy and weight." msgstr "" -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "" - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "Patroszysz i filetujesz rybę" @@ -132008,8 +132833,32 @@ msgstr "" "na wszystko, co się wyróżnia." #: lang/json/harvest_from_json.py -msgid "You laboriously dissect the colossal insect." -msgstr "Mozolnie dokonujesz sekcji olbrzymiego owada." +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "You laboriously dissect the colossal insect. " +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"What appeared to be insect hairs on the chitin of this creature look more " +"like tiny feathers as you pare them back. Inside is a bundle of bubble-like" +" tissue sacs that appear to be floating, which doesn't fit with what you " +"know about real bees." +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"There's a faintly hairy, skin-like membrane, covered in blood vessels, " +"beneath the chitin of this creature. Inside it is a bundle of bubble-like " +"tissue sacs that appear to be floating, which doesn't fit with what you know" +" about real wasps." +msgstr "" #: lang/json/harvest_from_json.py msgid "You laboriously hack and dig through the remains of the fungal mass." @@ -134464,6 +135313,13 @@ msgstr "" msgid "This item can be used to communicate with radio waves." msgstr "" +#. ~ Please leave anything in unchanged. +#: lang/json/json_flag_from_json.py +msgid "" +"This item can be used to pick locks with zero " +"effort." +msgstr "" + #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is designed to keep you dry in the rain." @@ -136801,6 +137657,15 @@ msgstr "" msgid "Zombie trap." msgstr "" +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "" + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -138121,6 +138986,11 @@ msgid "" "years.'" msgstr "" +#. ~ Computer name +#: lang/json/mapgen_from_json.py +msgid "DinoLab Operating Theater Controls" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "No style" msgstr "Brak stylu" @@ -138384,6 +139254,21 @@ msgid "" "Lasts 3 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "Tempo Capoeiry" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': +#. 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "Kung Fu Żurawia" @@ -138546,6 +139431,22 @@ msgid "" "+2 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "Kombinacja Eskrima" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': +#. 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "Szermierka" @@ -138583,6 +139484,33 @@ msgid "" "Blocked damage reduced by 50% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "Odparowanie" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -138631,6 +139559,34 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "Dżudo" @@ -138879,6 +139835,32 @@ msgid "" "+1 Dodge attempts, blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "Muay Thai" @@ -138917,6 +139899,21 @@ msgid "" "Blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay +#. Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% of Strength.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "Ninjutsu" @@ -138982,6 +139979,34 @@ msgid "" "Last 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': +#. 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "Niten Ichi-Ryu" @@ -139055,6 +140080,39 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "Zapasy" @@ -139206,6 +140264,21 @@ msgid "" "Perception increases Accuracy instead of Dexterity. Accuracy increased by 25% of Perception but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "Sōjutsu" @@ -139360,6 +140433,21 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "Kung Fu Tygrysa" @@ -139416,6 +140504,21 @@ msgid "" "Accuracy increased by 25% of Strength but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "" @@ -139469,6 +140572,20 @@ msgid "" " Dodging Skill increased by 15% of Perception. Blocked damage reduced by 50% of Perception." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch (Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "Zui Quan" @@ -139585,6 +140702,34 @@ msgstr "" "+Siła zbroja vs miażdżonym, +Zręczność zbroja vs kwasowi, +Inteligencja " "zbroja vs elektryczności, +Percepcja zbroja vs ogniowi." +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2" +" times." +msgstr "" + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "Bioniczna Waleczność" @@ -139624,6 +140769,22 @@ msgid "" "+2 Blocks attempts, +1 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic +#. Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "Kung Fu Stonogi" @@ -139661,6 +140822,20 @@ msgid "" "Lasts 3 turns. Stacks 4 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': +#. 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "Kung Fu Jaszczura" @@ -139780,6 +140955,20 @@ msgid "" "Stacks 2 times. Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': +#. 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "Kung Fu Ropuchy" @@ -139831,6 +141020,34 @@ msgid "" "Lasts 6 turns. Stacks 6 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad +#. Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "Kung Fu Żmiji" @@ -140172,6 +141389,34 @@ msgid "" "Lasts 1 turn. Stacks 2 times" msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Quicksilver Motion" +msgstr "" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': +#. 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence combine to allow you to make a fast, bold move that catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond +#. Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Hylian Swordsmanship" msgstr "" @@ -140265,6 +141510,46 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Heart" +msgstr "" + +#. ~ Description for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Absolute mastery of the sword is the goal of the Iron Heart discipline. " +"Through unending practice and study, the Iron Heart adept achieves " +"superhuman skill with her weapons. Iron Heart maneuvers are demonstrations " +"of uncanny martial skill—weaving patterns of steel that dizzy, confuse, and " +"ultimately kill with no recourse." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "You push away your fear and stand tall." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s takes a bold and fearless stance." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Panzer Kunst" msgstr "" @@ -140316,6 +141601,393 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Pokken" +msgstr "" + +#. ~ Description for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Pokken or \"Pocket Fist\" is a strange martial art developed from the famous" +" Pokemon video game series. Somehow, a group of dedicated fans managed to " +"combine the moves used by various pokemon with multiple existing martial " +"arts such as boxing and karate. Amazingly, it actually works. Some might " +"even say it's a super effective way to fight." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "You get ready to battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s is about to challenge someone to a battle." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Setting Sun" +msgstr "" + +#. ~ Description for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Setting Sun discipline teaches its initiates to turn their opponents' " +"strength against them. With a quick shift in stance and carefully aimed " +"attack, a Setting Sun warrior sends a charging enemy tumbling in a new " +"direction." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "You shift your weight and prepare to defend yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s shifts their weight and assumes a new stance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and \"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Shii-Cho" +msgstr "" + +#. ~ Description for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Shii-Cho, \"The way of the Sarlacc\" was the first form lightsaber combat " +"developed by the Jedi during their transition from metal weaponry to " +"lightsabers. Shii-Cho is regarded as a training form that all Jedi learn to" +" understand the basics of armed combat. Shii-Cho excels at fighting against" +" groups but lacks the offensive power of the other lightsaber forms." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You place one foot back and hold your weapon vertically on your dominant " +"side." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s places one foot back and hold their weapon vertically." +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are a determined warrior. Your inner calm aids you in landing your strikes and protecting yourself.\n" +"\n" +"Blocked damage reduced by 100% of Strength, +1 Accuracy." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Apprentice Training" +msgstr "" + +#. ~ Description of buff 'Apprentice Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training in Shii-Cho teaches you how to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Knight Training" +msgstr "" + +#. ~ Description of buff 'Knight Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Further training in Shii-Cho improves your ability to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Master Training" +msgstr "" + +#. ~ Description of buff 'Master Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"As a master of Shii-Cho, your ability to fight against groups is second to none.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to die.\n" +"\n" +"+5% critical hit chance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "Alkohol" @@ -140799,7 +142471,7 @@ msgid "Emulsified Hydrogel" msgstr "" #: lang/json/material_from_json.py -msgid "pupled" +msgid "pulped" msgstr "" #: lang/json/material_from_json.py @@ -142610,7 +144282,7 @@ msgid "Can you go find my son and tell him to check in with us." msgstr "" #: lang/json/mission_def_from_json.py lang/json/mission_def_from_json.py -#: lang/json/talk_topic_from_json.py +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py msgid "Thank you." msgstr "Dziękuję" @@ -142903,7 +144575,7 @@ msgstr "" #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20" +"We could use some 3 liter jars to preserve our produce. Can you bring me 10" " large three liter jars? I'll give you some preserves in exchange." msgstr "" @@ -144774,6 +146446,87 @@ msgstr "Ta, jasne." msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check" +" it out, I'll owe you a favor." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "Zbuduj 2 Destylarnie" @@ -146206,6 +147959,54 @@ msgstr "" msgid "I can't be Dr Frankenstein unless you get me these." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Gather meat for Bo Baronyx. About 8 should do it." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters are hungry. They need meat" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"If you wish to feed the eaters, your work will be rewarded. Go out, butcher" +" a pure animal. Not a false eater, the meat must be good to eat. Then " +"bring me the meat and I will see to the eaters." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Excellent. The eaters must feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Understood. The great eaters will feed either way." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"Some of the animals have become touched by the pretenders in recent days, " +"larger and more dangerous, producing tainted mutant meat. This will not " +"work for the great eaters, it must be the true meat." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Have you brought meat?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed I am sure." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I see no meat. There is meat in the forests and swamps waiting for the " +"eaters." +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Retrieve Magic Book" msgstr "" @@ -148532,6 +150333,23 @@ msgstr "" "Poruszasz się szybciej niż inni, wiec masz 15% bonus do szybkości na pewnym " "podłożu." +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore" +msgstr "" + +#. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "" +"A photophore has grown from your head. You can't consciously control it, " +"and it might start to shine in response to your emotions or your " +"physiological state." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "" @@ -148544,13 +150362,50 @@ msgid "" "mating season." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." +msgid "You can make your photophore glow brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Normal Human" +msgstr "" + +#. ~ Description for {'str': 'Normal Human'} +#: lang/json/mutation_from_json.py +msgid "" +"You're a normal human, there's nothing wrong with you. No need to worry." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Violent Monster" +msgstr "" + +#. ~ Description for {'str': 'Violent Monster'} +#: lang/json/mutation_from_json.py +msgid "Anger clouds your mind, you can't think straight but you feel strong." msgstr "" #: lang/json/mutation_from_json.py @@ -148656,12 +150511,12 @@ msgstr "Szybkie Leczenie" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." msgstr "" -"Zdrowiejesz szybciej podczas snu a nawet odzyskujesz nieco zdrowia będąc na " -"nogach." #: lang/json/mutation_from_json.py msgid "Light Eater" @@ -149366,8 +151221,11 @@ msgstr "Wolne Leczenie" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." -msgstr "Zdrowiejesz trochę wolniej niż inni. Sen przywróci ci mniej zdrowia." +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Poor Healer" @@ -149375,12 +151233,11 @@ msgstr "Słabe Leczenie" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to" -" recover only a third of usual HP." +"Your health recovery is severely impaired. Your HP whilst asleep as well as" +" your broken limbs heal at 33% the regular rate." msgstr "" -"Powrót do zdrowia podczas snu jest poważnie osłabiony i powoduje że z " -"upływem czasu regenerujesz tylko trzecią część zdrowia co zwykle." #: lang/json/mutation_from_json.py msgid "Imperceptive Healer" @@ -149388,12 +151245,11 @@ msgstr "Niezauważalne Leczenie" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth" -" of usual HP." +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP" +" whilst asleep as well as your broken limbs heal at 10% the regular rate." msgstr "" -"Niemal nie odzyskujesz zdrowia podczas snu - leczy on jedynie jedną " -"dziesiątą tego co u przeciętnej osoby." #: lang/json/mutation_from_json.py msgid "Far-Sighted" @@ -150206,11 +152062,11 @@ msgstr "Bardzo Szybkie Leczenie" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not " -"sleeping." +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." msgstr "" -"Twoje ciało powoli się regeneruje i odzyskujesz zdrowie nawet gdy nie śpisz." #: lang/json/mutation_from_json.py msgid "Regeneration" @@ -150218,8 +152074,12 @@ msgstr "Regeneracja" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." -msgstr "Twoje ciało niezwykle szybko regeneruje się z zadanych ran." +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster" +" whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16" +" times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Reptilian Healing" @@ -150227,8 +152087,10 @@ msgstr "Jaszczurze Leczenie" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." -msgstr "Złamane kończyny zrastają się bez znacznej trudności." +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Very Little Sleep" @@ -154920,7 +156782,8 @@ msgstr "" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." msgstr "" #: lang/json/mutation_from_json.py @@ -156224,6 +158087,28 @@ msgid "" "improves as your unarmed skill increases." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Jedi Training" +msgstr "" + +#. ~ Description for {'str': 'Jedi Training'} +#: lang/json/mutation_from_json.py +msgid "" +"You are trained in the ways of the Jedi. Your knowledge allows you to " +"utilize a form of lightsaber combat." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Pokken Master" +msgstr "" + +#. ~ Description for {'str': 'Pokken Master'} +#: lang/json/mutation_from_json.py +msgid "" +"You are well versed in the monsterous Pocket Fist martial art. Train well, " +"because it is your destiny to be a master." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Martial Adept" msgstr "" @@ -156232,7 +158117,8 @@ msgstr "" #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." msgstr "" #: lang/json/mutation_from_json.py @@ -157213,6 +159099,14 @@ msgstr "" msgid "Humans created me. Let's see what I can be on my own." msgstr "" +#: lang/json/npc_class_from_json.py +msgid "Swamper" +msgstr "" + +#: lang/json/npc_class_from_json.py +msgid "The great eaters have returned and they must be fed" +msgstr "" + #: lang/json/npc_class_from_json.py msgid "Operator" msgstr "" @@ -157498,6 +159392,14 @@ msgstr "" msgid "Millyficen Whately" msgstr "" +#: lang/json/npc_from_json.py +msgid "CEO" +msgstr "" + +#: lang/json/npc_from_json.py +msgid "Bo Baronyx" +msgstr "" + #: lang/json/npc_from_json.py msgid "magus" msgstr "mag" @@ -164973,6 +166875,118 @@ msgid "" "time before the horrors patrolling the skies shot you down." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -165141,8 +167155,9 @@ msgstr "" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -165155,8 +167170,9 @@ msgstr "" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -166407,6 +168423,226 @@ msgid "" "find some other use." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -168202,7 +170438,7 @@ msgid "build a metalworking forge" msgstr "" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." +msgid "Let's build an anvil and crucible to increase our crafting options." msgstr "" #: lang/json/recipe_from_json.py @@ -172542,6 +174778,40 @@ msgctxt "start_name" msgid "Wizard's Retreat Vacation" msgstr "" +#. ~ Name for scenario 'Exile' for a male character +#: lang/json/scenario_from_json.py +msgctxt "scenario_male" +msgid "Exile" +msgstr "" + +#. ~ Name for scenario 'Exile' for a female character +#: lang/json/scenario_from_json.py +msgctxt "scenario_female" +msgid "Exile" +msgstr "" + +#. ~ Description for scenario 'Exile' for a male character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_male" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Description for scenario 'Exile' for a female character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_female" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Starting location for scenario 'Exile'. +#: lang/json/scenario_from_json.py +msgctxt "start_name" +msgid "Exiled" +msgstr "" + #. ~ Name for scenario 'The Sweet Life' for a male character #: lang/json/scenario_from_json.py msgctxt "scenario_male" @@ -183142,6 +185412,326 @@ msgstr "-stylowej" msgid "-chant" msgstr "-chóralnej" +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. It has an unsettling loose and spongy " +"texture, but smells… mostly normal. There are strange tangles and " +"formations in it that don't appear natural at all: bits of bone and hair " +"crusted up inside the muscle, as if trying to form another organism. Still," +" seems digestible at least, if you cook it and remove the worst parts." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although it came from muscle tissue, it" +" has a curious swirling grain pattern, and at the center of each grain is a " +"knot of hard, cartilaginous tissue. It smells offputting." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. This is from muscle, but in the fascial" +" tissue between the muscles, thick spiny hairs have grown. Foul smelling, " +"cream-colored fluid gushes out whenever a hair pulls loose." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although this came from muscle, it has " +"a thick cordlike texture and smells like leather and bread mold." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. It has an unsettling," +" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" +" the bits of hair and bone out…" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. You thought you'd " +"cleared out all the gross parts, but while cooking, a fluid-filled sac " +"inside burst and covered it in some kind of thick grease." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. The surface is " +"peppered with divets from the pieces you had to dig out to make it seem " +"edible." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. Heat caused the " +"muscles to twist and move as if they were alive, and now it has writhed " +"itself into a dense knot." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug, and you really aren't sure what " +"to make of them. There are things you've never seen in any anatomy book, " +"with spines and hair and other unidentified parts protruding off seemingly " +"at random." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug. They have a sickly green color, " +"and one of them ripped when you were removing it, revealing an inner surface" +" that looks like row upon row of human fingers, nails and all." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a huge, thick, fleshy sac you removed from a giant mutant bug. The " +"surface is covered in smooth, soft skin, and beneath it is a coiled, twisted" +" mess of cordlike tissue." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a long, corded organ you removed from a giant mutant bug. It ran " +"from the head to the abdomen and has long tendrils coming off it, not unlike" +" a spinal cord." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a meaty grey organ you removed from a mutant. It has a chalky " +"yellow coating that burns your skin, and several unidentifiable fleshy tubes" +" sticking out of it. The smell it gives off stings your nostrils. You're " +"pretty confident no natural creature has one of these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This organ meat, retrieved from a mutated creature, looks like a series of " +"small mammalian hearts arranged in series on a long fleshy tube. At the end" +" of the chain is a large fleshy sac resembling a stomach." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It looks like a lung from a larger " +"mammal, like a dog, but instead of a few distinct lobes, it has dozens of " +"lobes arranged in sheets. Strange spindles and gnarled tumescences dot the " +"surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It has a vaguely wing-like shape, " +"with a series of nodules around what would be the trailing edge of the " +"'wing'. A cluster of quills in each corner of the organ held it to the " +"bug's carapace like clasps." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton, but mutated. The inner side is lined with " +"veins and strange hooked protuberances." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton. Stringy lines of nervous tissue and blood " +"vessels still cling to the inner surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of rigid, tube-shaped chitin from the inside of a giant bug. It " +"seemed to be performing some kind of support role. You're quite sure normal" +" insects don't have these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A long, flexible rod of chitin from inside a giant mutant bug. It is laced " +"with blood vessels and chitinous nodules." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"As you peel away the outer shell, you find veins lining the chitin plates" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "With the creature dead, its carapace comes away surprisingly easily" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"There's a thin membrane, much like skin, spread over the chitin of this " +"creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Under the carapace of this mutant is a bristly, velcro-like material" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The anatomy concealed beneath seems almost like a small mammal given a shell" +" and twisted into the shape of an arthropod" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "You crack the beast open like a horrific lobster" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The chitin holds tight to the creature, and you need to snap and tear it " +"away, sawing at tough fibers beneath" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside, half-formed organs press against spongy meat that doesn't look " +"anything like raw arthropod meat from normal creatures" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You find a collection of hooked spines beneath that seem to have been " +"clasping it on somehow" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a complex, still-squirming mess of strange appendages and organs " +"that bear only a passing resemblance to any natural creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Beneath the chitin, the meat is covered in thick, bristly hair hiding a " +"chaotic bramble of half-formed, mutated organs" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a tangled mess of organs and tissues that do not appear to " +"entirely natural" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside the creature you find lungs, hearts, and intestines more like a " +"mammal than a giant bug" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The meat inside gives off a horrifying stench, and seems to be covered in " +"thin damp hair, like a newborn animal gone horribly wrong" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Small bundles of fiber break loose as you work, splitting open to reveal " +"twisted, half-formed copies of the creature itself" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"It is difficult to work, as the spongey tissue tears apart under your tools" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Steaming puddles of acid spill from its outer shell as you pull it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Steaming acid burbles from the creature's chitin as you peel it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several acid glands rupture as you peel back the carapace, sending streams " +"of steaming caustic fluids spraying around" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The organs themselves have an acrid odour, but don't seem as caustically " +"acidic as the outer shell" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You carefully avoid breaking through pockets of what you think may be acid-" +"secreting glands" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Thick, ropey cords of tissue beneath its chitin protect an inner layer of " +"strange organs, resembling those of a bird more than anything" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The powerfully acidic vapors coming from the carcass make it hard to work" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The tissues of the creature are full of half-formed organs, their purpose " +"unclear" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several times, you nearly burn yourself piercing a concealed gland full of " +"acid" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + #: lang/json/snippet_from_json.py msgid "" "ATOMIC DEREGULATION! President Toffer announced to a mixed crowd today that" @@ -191521,6 +194111,10 @@ msgstr "" msgid "Middle of Nowhere" msgstr "pośrodku niczego" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "Cela Eksperymentów" @@ -191817,6 +194411,12 @@ msgstr "" msgid "Yeah, alright." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"The song is… quiet for now. Perhaps with time, more notes will be etched in" +" the bones of this world." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "An acolyte should not take on too many songs at once." msgstr "" @@ -191826,9 +194426,7 @@ msgid "That is all for now." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"The song is… quiet for now. Perhaps with time, more notes will be etched in" -" the bones of this world." +msgid "There are bones to etch, songs to sing. Wish to join me?" msgstr "" #: lang/json/talk_topic_from_json.py @@ -191840,7 +194438,7 @@ msgid "Do you believe you can take on the burden of additional bones?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "There are bones to etch, songs to sing. Wish to join me?" +msgid "A song may yet be sung by you, should you wish to." msgstr "" #: lang/json/talk_topic_from_json.py @@ -191852,10 +194450,6 @@ msgid "" "I know of certain bones that could be of use, if you'd like to know more." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "A song may yet be sung by you, should you wish to." -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "I see." msgstr "Rozumiem." @@ -192469,14 +195063,14 @@ msgstr "" msgid "no, go back to sleep." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "What is it, friend?" -msgstr "O co chodzi, przyjacielu?" - #: lang/json/talk_topic_from_json.py msgid " *pshhhttt* I'm reading you boss, over." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "What is it, friend?" +msgstr "O co chodzi, przyjacielu?" + #: lang/json/talk_topic_from_json.py msgid "I want to give you some commands for combat." msgstr "Chcę dać ci kilka poleceń do walki." @@ -192713,15 +195307,15 @@ msgstr "" msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "" -#: lang/json/talk_topic_from_json.py src/action.cpp src/activity_handlers.cpp -#: src/avatar.cpp src/avatar.cpp src/avatar_action.cpp src/avatar_action.cpp -#: src/avatar_action.cpp src/crafting.cpp src/game.cpp src/handle_action.cpp -#: src/handle_action.cpp src/handle_liquid.cpp src/handle_liquid.cpp -#: src/iexamine.cpp src/iexamine.cpp src/iexamine.cpp src/iuse.cpp -#: src/iuse.cpp src/iuse.cpp src/iuse_actor.cpp src/iuse_actor.cpp -#: src/iuse_actor.cpp src/monexamine.cpp src/monexamine.cpp src/npc.cpp -#: src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp -#: src/veh_interact.cpp src/vehicle_use.cpp +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py +#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp src/avatar.cpp +#: src/avatar_action.cpp src/avatar_action.cpp src/crafting.cpp +#: src/crafting.cpp src/game.cpp src/handle_action.cpp src/handle_action.cpp +#: src/handle_liquid.cpp src/handle_liquid.cpp src/iexamine.cpp +#: src/iexamine.cpp src/iexamine.cpp src/iuse.cpp src/iuse.cpp src/iuse.cpp +#: src/iuse_actor.cpp src/iuse_actor.cpp src/iuse_actor.cpp src/monexamine.cpp +#: src/monexamine.cpp src/npc.cpp src/pickup.cpp src/player.cpp src/player.cpp +#: src/player.cpp src/veh_interact.cpp src/vehicle_use.cpp msgid "Never mind." msgstr "Nieważne." @@ -192926,11 +195520,11 @@ msgid "OVERRIDE: " msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" +msgid "" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" +msgid "" msgstr "" #: lang/json/talk_topic_from_json.py @@ -193290,14 +195884,14 @@ msgstr "Okej, żadnych gwałtownych ruchów..." msgid "Keep your distance!" msgstr "Trzymaj dystans!" -#: lang/json/talk_topic_from_json.py -msgid "This is my territory, ." -msgstr "To moje terytorium, ." - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "This is my territory, ." +msgstr "To moje terytorium, ." + #: lang/json/talk_topic_from_json.py msgid "Calm down. I'm not going to hurt you." msgstr "Uspokój się. Nie zrobię ci krzywdy." @@ -193350,30 +195944,30 @@ msgstr "Co się dzieje?" msgid "I don't care." msgstr "Nie obchodzi mnie to." -#: lang/json/talk_topic_from_json.py -msgid "I don't have any more jobs for you." -msgstr "Nie mam już więcej prac dla ciebie." - #: lang/json/talk_topic_from_json.py msgid "I don't have any jobs for you." msgstr "Nie mam żadnych prac dla ciebie." #: lang/json/talk_topic_from_json.py -msgid "I have more jobs for you. Want to hear about them?" -msgstr "Mam kolejne zadania dla ciebie. Chcesz o nich usłyszeć?" +msgid "I don't have any more jobs for you." +msgstr "Nie mam już więcej prac dla ciebie." #: lang/json/talk_topic_from_json.py msgid "I have other jobs for you. Want to hear about them?" msgstr "Mam inne zadania dla ciebie. Chcesz o nich usłyszeć?" #: lang/json/talk_topic_from_json.py -msgid "I just have one job for you. Want to hear about it?" -msgstr "Mam tylko jedną robotę. Chcesz posłuchać?" +msgid "I have more jobs for you. Want to hear about them?" +msgstr "Mam kolejne zadania dla ciebie. Chcesz o nich usłyszeć?" #: lang/json/talk_topic_from_json.py msgid "I have another job for you. Want to hear about it?" msgstr "Mam kolejną robotę dla ciebie. Chcesz o niej usłyszeć?" +#: lang/json/talk_topic_from_json.py +msgid "I just have one job for you. Want to hear about it?" +msgstr "Mam tylko jedną robotę. Chcesz posłuchać?" + #: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py #: src/npctalk.cpp msgid "Oh, okay." @@ -193383,6 +195977,10 @@ msgstr "Oh, okej." msgid "Never mind, I'm not interested." msgstr "Nieważne, nie jestem zainteresowany." +#: lang/json/talk_topic_from_json.py +msgid "You're not working on anything for me now." +msgstr "Nie pracujesz teraz nad żadnym moim zleceniem." + #: lang/json/talk_topic_from_json.py msgid "Which job?" msgstr "Która praca?" @@ -193391,10 +195989,6 @@ msgstr "Która praca?" msgid "What about it?" msgstr "Co ty na to?" -#: lang/json/talk_topic_from_json.py -msgid "You're not working on anything for me now." -msgstr "Nie pracujesz teraz nad żadnym moim zleceniem." - #: lang/json/talk_topic_from_json.py msgid "I'll do it!" msgstr "Zrobię to." @@ -193611,6 +196205,10 @@ msgstr "Hmmm, okej." msgid "Thanks!" msgstr "Dzięki!" +#: lang/json/talk_topic_from_json.py +msgid "Focus on the road, mate!" +msgstr "Skup się na drodze, kolego!" + #: lang/json/talk_topic_from_json.py msgid "I must focus on the road!" msgstr "Muszę się skupić na drodze!" @@ -193635,10 +196233,6 @@ msgstr "" msgid "I have some reason for not telling you." msgstr "Mam swoje powody by ci nie mówić." -#: lang/json/talk_topic_from_json.py -msgid "Focus on the road, mate!" -msgstr "Skup się na drodze, kolego!" - #: lang/json/talk_topic_from_json.py msgid "Ah, okay." msgstr "Oh, okej." @@ -193743,6 +196337,10 @@ msgstr "Nie, tu nam dobrze." msgid "On second thought, never mind." msgstr "Po zastanowieniu się, jednak nieważne." +#: lang/json/talk_topic_from_json.py +msgid "I can't train you properly while you're operating a vehicle!" +msgstr "Nie jestem w stanie cię trenować gdy prowadzisz pojazd!" + #: lang/json/talk_topic_from_json.py msgid "I can't train you properly while I'm operating a vehicle!" msgstr "Nie jestem w stanie cię trenować gdy prowadzę pojazd!" @@ -193755,10 +196353,6 @@ msgstr "Odczekaj trochę, później pokażę ci cos nowego..." msgid "I have some reason for denying you training." msgstr "Mam swoje powody, by odmówić ci szkolenia." -#: lang/json/talk_topic_from_json.py -msgid "I can't train you properly while you're operating a vehicle!" -msgstr "Nie jestem w stanie cię trenować gdy prowadzisz pojazd!" - #: lang/json/talk_topic_from_json.py msgid "Not a bloody chance, I'm going to get left behind!" msgstr "Nie ma bata, nie zostanę porzucony w tyle!" @@ -200253,12 +202847,12 @@ msgid "All right! Let's get going." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"How's things with you? My cardboard collection is getting quite impressive." +msgid "We've done it! We've solved the list!" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "We've done it! We've solved the list!" +msgid "" +"How's things with you? My cardboard collection is getting quite impressive." msgstr "" #: lang/json/talk_topic_from_json.py @@ -204959,6 +207553,18 @@ msgstr "" msgid "Got it." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "" @@ -204972,11 +207578,11 @@ msgid "Hey." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Yes?" +msgid "Good to see you." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Good to see you." +msgid "About those jobs…" msgstr "" #: lang/json/talk_topic_from_json.py @@ -204988,7 +207594,7 @@ msgid "Want help with something else?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." +msgid "Lets set a combat strategy" msgstr "" #: lang/json/talk_topic_from_json.py @@ -205042,6 +207648,10 @@ msgstr "" msgid "Anything on your mind?" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "" @@ -206110,6 +208720,263 @@ msgstr "" msgid "Now I choose the cause I'll die for." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"Yes. I ask because I noticed there are dinosaurs around. Do you know " +"anything about that?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"I know all kinds of weird useless stuff. I've seen things at churches, I've" +" seen things on farms, I've seen whole exhibits way out. Those Swampers, " +"they know what's happening. They're creatures of light come back to save us" +" all. Or eat us, I forget." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters will be fed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Welcome. Are you hungry friend?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You look hungry friend. So much hunger in this world. This is the time of " +"the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Hello. Who are the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So about the eaters…" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You mentioned some pretenders before. What does that mean?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Is there a way I can help feed the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I have to get going. Take care, CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters have returned, along with the false ones. We must feed the" +" eaters and destroy the pretenders child." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are you talking about?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No thank you, I'd like to leave now." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"This Cataclysm has woken the great eaters, lost in time, returned them to " +"the world to do their great work, to multiply and fill the land with their " +"song. The time of man is over, but we few who remain can do our part to " +"protect this new world from the pretenders, who would steal the meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So what do you do with the meat?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are the great eaters and the pretenders?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Are there any others left?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are the ones that were lost, what we call dinosaurs whose " +"meat we took and who are taking it back. The pretenders are those others " +"that have come to steal the meat of this world. It does not belong to them " +"and we will take it from their mouths." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Okay, so you worship dinosaurs. Understood." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The Swampers knew these times would return and we prepared for them. When " +"others wasted their time and meat, we fed and grew strong, and we filled our" +" stores with meat for this day." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes, very good." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You keep talking about meat. Why is meat so important?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The meat makes the great eaters strong. We gather the meat and feed them, " +"and in the end we too will serve the eaters in death as we do in life. This" +" was always our purpose and we lucky few have lived to see it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Our purpose? How do you know?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The return of the great eaters was fortold by a prophet. We faithful have " +"been waiting and preparing since the revelation." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I guess it must be nice to be proven right." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This is crazy." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You understand our purpose. I welcome you to this work, all are needed to " +"feed the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You deny what you see right in front of you. This world is what was " +"fortold." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters have fed. They will be hungry again in time" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You know what to do." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The great eaters must be fed. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is still more work to do. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is meat ready for the feeding. Are you ready to gather it?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters are hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is more meat needed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I know of eaters ready for meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Maybe another time CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"If you are ready to be of service to the great eaters, go and find meat and " +"bring it back. There is always need for more." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Happy to be of service to the great eaters. I'm in." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Excellent. Make it happen." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are not picky, any pure meat will do, but mutant and " +"tainted meat are not good enough." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"So, meat from a creature that isn't a zombie, or a giant monster. Got it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course, you should find everything you need here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "That explains the knives then." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Oh, you know my friend Brigitte. Well in that case, let's go!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No, I must remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Sweet!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Not just now. You should remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"Of course, the company will be ready when you are and the great eaters will " +"feed either way." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"It was fortold that as the great eaters returned, so too would the " +"pretenders, who would come to steal the meat. Very little is asked of us, " +"except that we do all we can to ensure that the true great eaters received " +"as much meat as possible and the pretenders go hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes CEO Baronyx, very good CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This makes no sense and I'm done talking about it." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Heya, scav." msgstr "Hejka, zbieraczu." @@ -206648,10 +209515,6 @@ msgstr "Blokujesz %s" msgid " blocks %s" msgstr " blokuje %s" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "Odparowanie" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -209086,6 +211949,90 @@ msgstr "" msgid " unleashes a spin attack against %s and those nearby" msgstr "" +#: lang/json/technique_from_json.py +msgid "Disarming Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You skillfully disarm %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " skillfully disarms %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Lightning Recovery" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You miss %s but recover in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " misses %s but recovers in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Finishing Move" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You finish off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " finishes off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Dazing Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You harshly stun %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " harshly stuns %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Steel Wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleave through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleaves through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Scything Blade" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleanly reap through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleanly reap throug %s and those nearby" +msgstr "" + #: lang/json/technique_from_json.py msgid "Ausstoß" msgstr "" @@ -209142,6 +212089,216 @@ msgstr "" msgid " launches a supersonic punch at %s" msgstr "" +#: lang/json/technique_from_json.py +msgid "Mega Kick" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Darkest Lariat" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Smart Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Low Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Fool's Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely fool %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely fools %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Hydra Slaying Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You toss %s aside with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " tosses %s with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You spin and hurl %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " spins and hurls %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Flowing Water" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You deflect %s's attack and counter in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " deflects %s's attack and counters in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Disarming Slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You disarm %s with a quick flick of your weapon" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " disarms %s with a quick flick of their weapon" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Sarlacc Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You quickly sweep through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " quickly sweeps through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "" @@ -209187,6 +212344,10 @@ msgstr "" msgid "Life springs anew from the dead grass." msgstr "" +#: lang/json/ter_furn_transform_messages_from_json.py +msgid "The door opens forcefully!" +msgstr "" + #: lang/json/terrain_from_json.py msgid "scorched earth" msgstr "spalona ziemia" @@ -217324,6 +220485,11 @@ msgstr "drewniany kadłub łodzi" msgid "A wooden board that keeps the water out of your boat." msgstr "Drewniany kadłub zapobiega dostaniu się wody do środka łodzi." +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -217833,14 +220999,19 @@ msgid "" msgstr "" #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" -msgstr "drewniane siedzenie" +msgid "flimsy wooden seat" +msgstr "" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "Miejsce do siedzenia." +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "drewniane siedzenie" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "drewniany kolec" @@ -218692,6 +221863,11 @@ msgstr "" msgid "At least %s from %s (%s remaining)" msgstr "" +#: src/achievement.cpp +#, c-format +msgid "Exactly %s from %s" +msgstr "" + #: src/achievement.cpp #, c-format msgid "Within %s of %s (%s remaining)" @@ -218708,12 +221884,13 @@ msgid "Within %s of %s (passed)" msgstr "" #: src/achievement.cpp -msgid "Triggered by " +#, c-format +msgid "Triggered by %s" msgstr "" #: src/achievement.cpp #, c-format -msgid "%s/%s " +msgid "%s/%s %s" msgstr "" #: src/achievement.cpp @@ -220711,7 +223888,7 @@ msgstr "" msgid "< [%s] Sort: %s >" msgstr "" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "" @@ -223877,10 +227054,18 @@ msgstr "" msgid "Accuracy" msgstr "Celność" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "Unik" +#: src/bonuses.cpp +msgid "Block effectiveness" +msgstr "" + #: src/bonuses.cpp src/panels.cpp msgid "Speed" msgstr "Prędkość" @@ -224401,20 +227586,26 @@ msgstr " wstaje na nogi." #: src/character.cpp src/monster.cpp #, c-format -msgid "The %s breaks free of the webs!" -msgstr "%s uwalnia się od pajęczyn!" +msgid "The %s escapes the bear trap!" +msgstr "%s ucieka z potrzasku na niedźwiedzie!" #: src/character.cpp -msgid "You free yourself from the webs!" -msgstr "Uwalniasz się z sieci pajęczej!" +#, c-format +msgid "Your %s tries to free itself from the bear trap, but can't get loose!" +msgstr "" #: src/character.cpp -msgid " frees themselves from the webs!" -msgstr " uwalnia się z sieci pajęczej!" +msgid "You free yourself from the bear trap!" +msgstr "Uwalniasz się z pułapki na niedźwiedzie!" #: src/character.cpp -msgid "You try to free yourself from the webs, but can't get loose!" -msgstr "Próbujesz się uwolnić z sieci pajęczej, ale nie możesz się wyrwać!" +msgid " frees themselves from the bear trap!" +msgstr " uwalnia się z pułapki na niedźwiedzie!" + +#: src/character.cpp +msgid "You try to free yourself from the bear trap, but can't get loose!" +msgstr "" +"Próbujesz się uwolnić z pułapki na niedźwiedzie, ale nie możesz się wyrwać!" #: src/character.cpp src/monster.cpp #, c-format @@ -224450,29 +227641,6 @@ msgstr " uwalnia się z ciężkich wnyków!" msgid "You try to free yourself from the heavy snare, but can't get loose!" msgstr "Próbujesz uwolnić się z ciężkich wnyków, ale nie możesz się wyrwać!" -#: src/character.cpp src/monster.cpp -#, c-format -msgid "The %s escapes the bear trap!" -msgstr "%s ucieka z potrzasku na niedźwiedzie!" - -#: src/character.cpp -#, c-format -msgid "Your %s tries to free itself from the bear trap, but can't get loose!" -msgstr "" - -#: src/character.cpp -msgid "You free yourself from the bear trap!" -msgstr "Uwalniasz się z pułapki na niedźwiedzie!" - -#: src/character.cpp -msgid " frees themselves from the bear trap!" -msgstr " uwalnia się z pułapki na niedźwiedzie!" - -#: src/character.cpp -msgid "You try to free yourself from the bear trap, but can't get loose!" -msgstr "" -"Próbujesz się uwolnić z pułapki na niedźwiedzie, ale nie możesz się wyrwać!" - #: src/character.cpp msgid "You free yourself from the rubble!" msgstr "Uwalniasz się z gruzu!" @@ -224485,18 +227653,6 @@ msgstr " uwalnia się z gruzu!" msgid "You try to free yourself from the rubble, but can't get loose!" msgstr "Próbujesz się uwolnić z gruzu, ale nie możesz się wyrwać!" -#: src/character.cpp -msgid "You try to escape the pit, but slip back in." -msgstr "Próbujesz wydostać się z dołu, ale ześlizgujesz się na dno." - -#: src/character.cpp -msgid "You escape the pit!" -msgstr "Wydostajesz się z dołu!" - -#: src/character.cpp -msgid " escapes the pit!" -msgstr " wydostaje się z dołu!" - #: src/character.cpp #, c-format msgid "Your %s tries to break free, but fails!" @@ -224536,6 +227692,35 @@ msgstr "Wyrywasz się z uchwytu!" msgid " breaks out of the grab!" msgstr " wyrywa się z uchwytu!" +#: src/character.cpp src/monster.cpp +#, c-format +msgid "The %s breaks free of the webs!" +msgstr "%s uwalnia się od pajęczyn!" + +#: src/character.cpp +msgid "You free yourself from the webs!" +msgstr "Uwalniasz się z sieci pajęczej!" + +#: src/character.cpp +msgid " frees themselves from the webs!" +msgstr " uwalnia się z sieci pajęczej!" + +#: src/character.cpp +msgid "You try to free yourself from the webs, but can't get loose!" +msgstr "Próbujesz się uwolnić z sieci pajęczej, ale nie możesz się wyrwać!" + +#: src/character.cpp +msgid "You try to escape the pit, but slip back in." +msgstr "Próbujesz wydostać się z dołu, ale ześlizgujesz się na dno." + +#: src/character.cpp +msgid "You escape the pit!" +msgstr "Wydostajesz się z dołu!" + +#: src/character.cpp +msgid " escapes the pit!" +msgstr " wydostaje się z dołu!" + #: src/character.cpp #, c-format msgid "Your %s bionic comes back online." @@ -228431,14 +231616,6 @@ msgstr "Benchmark 'rysowania' (5 sekund)" msgid "Test trait group" msgstr "Testuj grupę cech" -#: src/debug_menu.cpp -msgid "Show debug message" -msgstr "Pokaż wiadomości debug" - -#: src/debug_menu.cpp -msgid "Crash game (test crash handling)" -msgstr "Zawieś grę (test postępowania z zawieszeniem gry)" - #: src/debug_menu.cpp msgid "Toggle NPC pathfinding on map" msgstr "Przełącz pathfiding NPC na mapie" @@ -228467,6 +231644,18 @@ msgstr "Info…" msgid "Enable achievements" msgstr "" +#: src/debug_menu.cpp +msgid "Show debug message" +msgstr "Pokaż wiadomości debug" + +#: src/debug_menu.cpp +msgid "Crash game (test crash handling)" +msgstr "Zawieś grę (test postępowania z zawieszeniem gry)" + +#: src/debug_menu.cpp +msgid "Quit to main menu" +msgstr "Wyjdź do Głównego Menu" + #: src/debug_menu.cpp msgid "Game…" msgstr "" @@ -228563,10 +231752,6 @@ msgstr "" msgid "Map…" msgstr "Mapa..." -#: src/debug_menu.cpp -msgid "Quit to main menu" -msgstr "Wyjdź do Głównego Menu" - #: src/debug_menu.cpp msgid "" "Debug Functions - Using these will cheat not only the game, but yourself.\n" @@ -229088,6 +232273,10 @@ msgstr "Znakuję jako zakończoną" msgid "Remove mission without proper cleanup" msgstr "Usuń misję bez właściwego posporzątania" +#: src/debug_menu.cpp +msgid "Benchmark in progress…" +msgstr "" + #: src/debug_menu.cpp #, c-format msgid "Drew %d times in %.3f seconds. (%.3f fps average)" @@ -230339,138 +233528,182 @@ msgid "Liked" msgstr "Lubiany" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "Legendarny" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" msgstr "Niezrównany" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" msgstr "Potężni" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" msgstr "Sławni" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" msgstr "Powszechnie Znany" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" msgstr "Na Ustach Ludzi" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" msgstr "Bezwartościowa Gnida" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "Gnida" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "Godny Pogardy" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "Pasożyt" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "Pijawka" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "Pośmiewisko" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "Neutralny" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" msgstr "Obrzydliwie Bogaty" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "Zamożny" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" msgstr "Bogaty" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" msgstr "Ustawiony" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" msgstr "Komfortowy" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "W Niedostatku" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" msgstr "Upadający" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" msgstr "Zubożały" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" msgstr "Niezamożny" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "Przelewający Się" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" msgstr "Dobrze Zaopatrzony" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "Wiążący Koniec z Końcem" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" msgstr "Niedożywiony" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" msgstr "Zagłodzony" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "Legendarny" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" msgstr "Ekspert" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" msgstr "Weteran" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" msgstr "Utalentowany" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "Kompetentny" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" msgstr "Niewytrenowany" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" msgstr "Kaleki" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" msgstr "Wątły" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "Bezwartościowy" @@ -231066,12 +234299,12 @@ msgstr "" #, c-format msgid "" "Notes:\n" -"Send a companion to gather light brush and heavy sticks.\n" +"Send a companion to gather light brush and stout branches.\n" "\n" "Skill used: survival\n" "Difficulty: N/A\n" "Gathering Possibilities:\n" -"> heavy sticks\n" +"> stout branches\n" "> withered plants\n" "> splintered wood\n" "\n" @@ -232096,7 +235329,7 @@ msgid "You do not have a camp food zone. Aborting…" msgstr "" #: src/faction_camp.cpp -msgid "No items are located at the drop point…" +msgid "No suitable items are located at the drop points…" msgstr "" #: src/faction_camp.cpp @@ -232309,6 +235542,13 @@ msgstr "%s jest niebezpiecznie blisko!" msgid "Wait till you wake up…" msgstr "" +#: src/game.cpp +#, c-format +msgid "" +"\n" +"%s to interrupt" +msgstr "" + #: src/game.cpp #, c-format msgid "%s, cancel Auto-move?" @@ -232419,6 +235659,11 @@ msgctxt "action" msgid "open" msgstr "" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -233968,11 +237213,25 @@ msgstr "" msgid "You cannot haul items here." msgstr "Nie możesz ciągnąć tu przedmiotów." +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "%s stoi w przejściu!" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "Na przeszkodzie stoi %s!" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a +#. zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -235364,11 +238623,6 @@ msgstr "Jakiś bufon stoi w przejściu!" msgid "The %s is in the way!" msgstr "%s stoi w przejściu!" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "%s stoi w przejściu!" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -236642,6 +239896,11 @@ msgstr "Rozpoczynasz włam do sejfu." msgid "Attempt to hack this safe?" msgstr "" +#: src/iexamine.cpp +#, c-format +msgid "The %s is locked. You could pry it open with the right tool…" +msgstr "" + #: src/iexamine.cpp #, c-format msgid "The %s is locked. If only you had something to pry it with…" @@ -237870,6 +241129,10 @@ msgstr "Wybierz zainstalowaną bionikę do usunięcia" msgid "Splint broken limbs" msgstr "Nastaw złamane kończyny" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "Nie masz żadnych zainstalowanych bionik." @@ -237897,16 +241160,78 @@ msgid " doesn't have limbs that require splinting." msgstr " nie ma kończyn, które wymagałyby nastawienia." #: src/iexamine.cpp -msgid "This mill already contains flour." -msgstr "Ten młyn już jest pełen mąki." +msgid "You don't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid " doesn't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "Spazmy mięśni zaczynają ustawać." + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "Lek nie pomaga by załagodzić spazmy." #: src/iexamine.cpp -msgid "Remove it before starting the mill again." -msgstr "Usuń ją zanim uruchomisz młyn na nowo." +#, c-format +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." +msgstr "" #: src/iexamine.cpp #, c-format -msgid "This rack contains %s, which can't be milled!" +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "This mill contains %s, which can't be milled!" msgstr "" #: src/iexamine.cpp @@ -238088,7 +241413,8 @@ msgid "Remove brake and start milling" msgstr "" #: src/iexamine.cpp -msgid "Remove brake and start milling, milling will take about 6 hours." +#, c-format +msgid "Remove brake and start milling, milling will take about %s." msgstr "" #: src/iexamine.cpp @@ -238122,20 +241448,7 @@ msgstr "" #: src/iexamine.cpp #, c-format -msgid "It will finish milling in about %d hour." -msgid_plural "It will finish milling in about %d hours." -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" - -#: src/iexamine.cpp -msgid "It will finish milling in less than an hour." -msgstr "" - -#: src/iexamine.cpp -#, c-format -msgid "It should take about %d minutes to finish milling." +msgid "It should take about %s to finish milling." msgstr "" #: src/iexamine.cpp @@ -238906,7 +242219,7 @@ msgstr "Objętość (%s):" msgid "There are no available choices" msgstr "Nie ma dostępnych wyborów" -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "" @@ -239815,10 +243128,6 @@ msgstr "Modyfikator pojemności wagi: " msgid "Weight capacity bonus: " msgstr "Bonus pojemności wagi: " -#: src/item.cpp -msgid "Storage: " -msgstr "Pojemność: " - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "* Ten przedmiot może być noszony wraz z hełmem." @@ -240123,6 +243432,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "" +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "" + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "" + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "" + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "" + +#: src/item.cpp +msgid "Fuel: " +msgstr "" + #: src/item.cpp #, c-format msgid "Using: %s" @@ -240146,9 +243483,21 @@ msgstr "" msgid "* This item is not repairable." msgstr "* Tego przedmiotu nie można naprawić." +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items +#: src/item.cpp +#, c-format +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "" + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a +#. list of items. +#. ~ Bold text in the middle makes it easier to see where the second list +#. starts. #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." +msgid "" +"Disassembly takes %1$s, requires %2$s and might " +"yield: %3$s." msgstr "" #: src/item.cpp @@ -240269,26 +243618,27 @@ msgid "Critical hit chance %d%% - %d%%" msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d bashing (%d on a critical hit)" +msgid "Bashing: " msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d cutting (%d on a critical hit)" +msgid "Critical bash: " msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d piercing (%d on a critical hit)" +msgid "Cutting: " msgstr "" #: src/item.cpp -#, c-format -msgid "%d moves per attack" +msgid "Critical cut: " +msgstr "" + +#: src/item.cpp +msgid "Piercing: " +msgstr "" + +#: src/item.cpp +msgid "Critical pierce: " msgstr "" #: src/item.cpp @@ -240887,8 +244237,9 @@ msgstr "Twój %1$s nie zmieści więcej %2$s." msgid "That %s doesn't have room to expand." msgstr "Ten %s nie ma miejsca żeby się rozłożyć." -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" msgstr "%d x %s" @@ -241016,6 +244367,56 @@ msgstr "Nie masz żadnych przedmiotów z zarejestrowanymi użyciami" msgid "Execute which action?" msgstr "Wykonać jaką akcję?" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "" + +#: src/item_contents.cpp +msgid " item, " +msgstr "" + +#: src/item_contents.cpp +msgid " category, " +msgstr "" + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "" + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "" + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "" + +#: src/item_contents.cpp +msgid "item id" +msgstr "" + +#: src/item_contents.cpp +msgid "item category" +msgstr "" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "" + #: src/item_contents.cpp msgid "is not a container" msgstr "" @@ -241059,6 +244460,11 @@ msgstr "Testuj którą grupę?" msgid "Result of 100 spawns:" msgstr "Rezultat 100 spawnów:" +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "%d x %s" + #: src/item_location.cpp msgid "inventory" msgstr "ekwipunek" @@ -241241,6 +244647,34 @@ msgstr "" msgid "not enough space" msgstr "" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "" + #: src/itype.h msgid "click." msgstr "klik." @@ -241310,14 +244744,6 @@ msgstr "Bierzesz nieco antybiotyków." msgid " takes some antibiotics." msgstr " bierze nieco antybiotyków." -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "Spazmy mięśni zaczynają ustawać." - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "Lek nie pomaga by załagodzić spazmy." - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -247013,6 +250439,10 @@ msgstr "Początkujący" msgid "Intermediate" msgstr "Zaawansowany" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "Ekspert" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "Szerokość poziomu:" @@ -250664,6 +254094,18 @@ msgctxt "memorial_female" msgid "Set off an alarm." msgstr "Uruchomiłaś alarm." +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_male" +msgid "Used the debug menu (%s)." +msgstr "" + +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_female" +msgid "Used the debug menu (%s)." +msgstr "" + #. ~ Message %s on the message log was repeated %d times, e.g. "You hear a #. whack! x 12" #: src/messages.cpp @@ -254424,14 +257866,6 @@ msgstr "Skupienie dąży do:" msgid "You feel bugs crawl over your skin." msgstr "" -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "człowiek" -msgstr[1] "ludzie" -msgstr[2] "ludzie" -msgstr[3] "ludzie" - #: src/mutation.cpp #, c-format msgid "Your %s is destroyed!" @@ -255426,17 +258860,6 @@ msgstr "Wiek:" msgid "Blood type:" msgstr "" -#: src/newcharacter.cpp -#, c-format -msgid "" -"* Random location * (%d variants)" -msgstr "" - -#: src/newcharacter.cpp -#, c-format -msgid "%s (%d variants)" -msgstr "" - #: src/newcharacter.cpp msgid "Name:" msgstr "Imię:" @@ -255449,6 +258872,26 @@ msgstr "Płeć:" msgid "Select a starting location." msgstr "Wybierz startową lokację:" +#: src/newcharacter.cpp +#, c-format +msgid "" +"* Random location * (%d variant)" +msgid_plural "" +"* Random location * (%d variants)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: src/newcharacter.cpp msgid "Stats:" msgstr "Statystyki:" @@ -255518,6 +258961,15 @@ msgstr "" msgid "Starting location:" msgstr "Startowa lokacja:" +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #: src/newcharacter.cpp msgid "Starting Vehicle: " msgstr "" @@ -257226,6 +260678,14 @@ msgstr "Miażdż" msgid "Pulp Adjacent" msgstr "Miażdż Bliskie" +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "" + #: src/options.cpp msgid "Auto mining" msgstr "Auto górnictwo" @@ -259735,6 +263195,16 @@ msgstr "Strefa:" msgid "# Unexplored" msgstr "# Niezbadane" +#: src/overmap_ui.cpp +#, c-format +msgid "oter: %s" +msgstr "" + +#: src/overmap_ui.cpp +#, c-format +msgid "oter_type: %s" +msgstr "" + #: src/overmap_ui.cpp msgid "Distance to active mission:" msgstr "" @@ -260062,6 +263532,10 @@ msgstr "Parzy!" msgid "Very hot!" msgstr "Bardzo gorąco!" +#: src/panels.cpp +msgid "Comfortable" +msgstr "Komfortowy" + #: src/panels.cpp msgid "Very cold!" msgstr "Bardzo zimno!" @@ -261519,6 +264993,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "Pragnienie -%2d%%" +#: src/player_display.cpp +msgid "Starving" +msgstr "Zagłodzony" + #: src/player_display.cpp msgid "Underfed" msgstr "" @@ -261611,6 +265089,10 @@ msgid "" "\n" msgstr "" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "Niedożywiony" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help you recover.\n" @@ -262752,6 +266234,17 @@ msgstr[1] "" msgstr[2] "" msgstr[3] "" +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level +#. requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp #, c-format @@ -266863,6 +270356,10 @@ msgstr "" msgid "--NO AVAILABLE MODS--" msgstr "--NIEDOSTĘPNE MODY--" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "Zapisano listę modów jako domyślną" diff --git a/lang/po/ru.po b/lang/po/ru.po index 350292d37166e..7d1eec0f70907 100644 --- a/lang/po/ru.po +++ b/lang/po/ru.po @@ -51,25 +51,26 @@ # Zhar the Mad , 2020 # Artem Kirienko , 2020 # 8street, 2020 -# Vlasov Vitaly , 2020 +# Михаил Семенчин , 2020 # Ivan Ivanov, 2020 # Midas , 2020 -# Михаил Семенчин , 2020 # Timofey Kostenko , 2020 # 000000 0000000 , 2020 # Victor_U , 2020 -# Alexey Mostovoy , 2020 -# korick3 korick3 , 2020 # WX , 2020 -# Антон Бурмистров <22.valiant@gmail.com>, 2020 # Arex , 2020 +# Alexey Mostovoy , 2020 +# Антон Бурмистров <22.valiant@gmail.com>, 2020 +# korick3 korick3 , 2020 +# leemuar - , 2020 +# Vlasov Vitaly , 2020 # CountAlex, 2020 # msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-06 11:53+0800\n" +"POT-Creation-Date: 2020-06-23 10:06+0800\n" "PO-Revision-Date: 2018-04-26 14:47+0000\n" "Last-Translator: CountAlex, 2020\n" "Language-Team: Russian (https://www.transifex.com/cataclysm-dda-translators/teams/2217/ru/)\n" @@ -389,7 +390,6 @@ msgstr[2] "камней" msgstr[3] "камни" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -7155,7 +7155,6 @@ msgstr[3] "золото" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -7254,7 +7253,6 @@ msgstr[2] "маленьких металлических листов" msgstr[3] "маленькие металлические листы" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "Небольшой лист металла." @@ -9057,85 +9055,6 @@ msgstr[3] "базовая мощность маны" msgid "Seeing this is a bug." msgstr "Если вы это видите, то это баг." -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "ТЕСТОВЫЙ камень" -msgstr[1] "ТЕСТОВЫХ камня" -msgstr[2] "ТЕСТОВЫХ камней" -msgstr[3] "ТЕСТОВЫЕ камни" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "ТЕСТОВЫЙ маленький металлический лист" -msgstr[1] "ТЕСТОВЫХ маленьких металлических листа" -msgstr[2] "ТЕСТОВЫХ маленьких металлических листов" -msgstr[3] "ТЕСТОВЫЕ маленькие металлические листы" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "тестовая деревянная стрела (широкий наконечник)" -msgstr[1] "тестовые деревянные стрелы (широкий наконечник)" -msgstr[2] "тестовых деревянных стрел (широкий наконечник)" -msgstr[3] "тестовые деревянные стрелы (широкий наконечник)" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "Стрела для отладки." - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "Тестовый патрон 9мм" -msgstr[1] "Тестовых патрона 9мм" -msgstr[2] "Тестовых патронов 9мм" -msgstr[3] "Тестовые патроны 9мм" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "Абстрактный 9мм ЭП боеприпас." - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "Тестовый патрон .45" -msgstr[1] "Тестовых патрона .45" -msgstr[2] "Тестовых патронов .45" -msgstr[3] "Тестовые патроны .45" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "Тестовый боеприпас .45 ЭП ." - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "тестовый газ" -msgstr[1] "тестовый газ" -msgstr[2] "тестовый газ" -msgstr[3] "тестовый газ" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "" -"Загадочная газообразная субстанция. Не вдыхать, только для тестирования!" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "ТЕСТОВЫЙ кусочек платины" -msgstr[1] "ТЕСТОВЫХ кусочка платины" -msgstr[2] "ТЕСТОВЫХ кусочков платины" -msgstr[3] "ТЕСТОВЫе кусочки платины" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -9492,8 +9411,6 @@ msgstr[3] "пары беруш" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear #. plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs -#. of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "Ушные затычки промышленного класса. Они помещаются внутри уха." @@ -11794,8 +11711,6 @@ msgstr[2] "пар носков" msgstr[3] "пары носков" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of -#. socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "Носки. Надень их на ноги." @@ -14044,6 +13959,20 @@ msgstr "" "Легкие перчатки из кевлара и номекса для работ по обезвреживанию " "взрывоопасных боеприпасов. Они разработаны для защиты от осколков и жара." +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "пара шипованных перчаток" +msgstr[1] "пары шипованных перчаток" +msgstr[2] "пар шипованных перчаток" +msgstr[3] "пары шипованных перчаток" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of +#. studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "Пара перчаток, подбитых металлическими шипами." + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -21910,7 +21839,6 @@ msgstr[3] "боевые экзоскелеты" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "Ваша силовая броня активирована." @@ -22353,7 +22281,6 @@ msgstr[2] "рюкзаков" msgstr[3] "рюкзаки" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "Небольшой рюкзак. Не слишком тяжёлый и довольно вместительный." @@ -22484,7 +22411,6 @@ msgstr[2] "портфелей" msgstr[3] "портфели" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "В нём удобно переносить деньги, документы и контрабанду." @@ -23636,7 +23562,6 @@ msgstr[2] "костюмов химзащиты" msgstr[3] "костюмы химзащиты" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -24763,7 +24688,6 @@ msgstr[2] "водолазок" msgstr[3] "водолазки" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "Хлопковая водолазка." @@ -25668,6 +25592,23 @@ msgstr "" "Большой спальный мешок, который укроет вас с ног до головы. Этот весит " "средне." +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "цестус" +msgstr[1] "цестуса" +msgstr[2] "цестусов" +msgstr[3] "цестусы" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "" +"Обмотка из кожи для руки и ладони с металлическими вставками на костяшках " +"для улучшения силы удара и защиты." + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -27581,78 +27522,18 @@ msgstr "" "воздействия окружающей среды." #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" -msgstr[0] "ТЕСТОВАЯ пара носков" -msgstr[1] "ТЕСТОВЫЕ пары носков" -msgstr[2] "ТЕСТОВЫЕ пар носков" -msgstr[3] "ТЕСТОВЫЕ пары носков" - -#: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "ТЕСТОВАЯ водолазка" -msgstr[1] "ТЕСТОВЫЕ водолазки" -msgstr[2] "ТЕСТОВЫХ водолазок" -msgstr[3] "ТЕСТОВЫЕ водолазки" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" -msgstr[0] "ТЕСТОВАЯ пара ушных затычек" -msgstr[1] "ТЕСТОВЫЕ пары ушных затычек" -msgstr[2] "ТЕСТОВЫХ пар ушных затычек" -msgstr[3] "ТЕСТОВЫЕ пары ушных затычек" - -#: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "ТЕСТОВЫЙ костюм химзащиты" -msgstr[1] "ТЕСТОВЫХ костюма химзащиты" -msgstr[2] "ТЕСТОВЫХ костюмов химзащиты" -msgstr[3] "ТЕСТОВЫЕ костюмы химзащиты" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" -msgstr[0] "ТЕСТОВЫЙ рюкзак" -msgstr[1] "ТЕСТОВЫХ рюкзака" -msgstr[2] "ТЕСТОВЫХ рюкзаков" -msgstr[3] "ТЕСТОВЫЕ рюкзаки" - -#: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "ТЕСТОВЫЙ портфель" -msgstr[1] "ТЕСТОВЫХ портфеля" -msgstr[2] "ТЕСТОВЫХ портфелей" -msgstr[3] "ТЕСТОВЫЕ портфели" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" +msgstr[0] "аура отталкивающих разрядов" +msgstr[1] "аура отталкивающих разрядов" +msgstr[2] "аура отталкивающих разрядов" +msgstr[3] "аура отталкивающих разрядов" +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "тестовый колчан" -msgstr[1] "тестовых колчана" -msgstr[2] "тестовых колчанов" -msgstr[3] "тестовые колчаны" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "Колчан Тестирования, вмещающий 20 стрел или арбалетных болтов." - -#: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" -msgstr[0] "тестовая силовая броня" -msgstr[1] "тестовая силовая броня" -msgstr[2] "тестовая силовая броня" -msgstr[3] "тестовая силовая броня" - -#. ~ Description for {'str': 'test power armor'} -#: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." -msgstr "Прототип силовой брони для отладки." +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." +msgstr "Невидимая аура, наносящая урон противникам, атакующим в ближнем бою." #: lang/json/BATTERY_from_json.py msgid "test battery" @@ -28213,8 +28094,8 @@ msgstr[1] "КБМ: Воздушный конденсатор испарений" msgstr[2] "КБМ: Воздушный конденсатор испарений" msgstr[3] "КБМ: Воздушный конденсатор испарений" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -29745,8 +29626,8 @@ msgstr[1] "КБМ: Встроенная печь" msgstr[2] "КБМ: Встроенная печь" msgstr[3] "КБМ: Встроенная печь" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel" @@ -29887,8 +29768,8 @@ msgstr[1] "КБМ: Ветровые турбины" msgstr[2] "КБМ: Ветровых турбин" msgstr[3] "КБМ: Ветровые турбины" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -29899,24 +29780,6 @@ msgstr "" "активации они будут развертываться и медленно собирать энергию ветра, чтобы " "подзарядить ваши батареи." -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "КБМ: Точные паяльники" -msgstr[1] "КБМ: Точные паяльники" -msgstr[2] "КБМ: Точные паяльники" -msgstr[3] "КБМ: Точные паяльники" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire cutters." -" They serve no purpose on their own, but are required for crafting bionics." -msgstr "" -"Встроенные крошечные инструменты для работы с электроникой, включая " -"паяльники и кусачки. Требуются для изготовления бионических модулей, но " -"бесполезны сами по себе." - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -29992,6 +29855,41 @@ msgstr "" "Бомба, установленная там, где спинной мозг переходит в головной. На ней " "установлен таймер обратного отсчета, и у вас нет кода деактивации." +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "КБМ: Черепная пушка" +msgstr[1] "КБМ: Черепная пушка" +msgstr[2] "КБМ: Черепная пушка" +msgstr[3] "КБМ: Черепная пушка" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" +"В вашем черепе спрятано однозарядное оружие калибра .40. Активируйте " +"бионику, чтобы выстрелить и перезарядить его." + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "КБМ: Точные паяльники" +msgstr[1] "КБМ: Точные паяльники" +msgstr[2] "КБМ: Точные паяльники" +msgstr[3] "КБМ: Точные паяльники" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire cutters." +" They serve no purpose on their own, but are required for crafting bionics." +msgstr "" +"Встроенные крошечные инструменты для работы с электроникой, включая " +"паяльники и кусачки. Требуются для изготовления бионических модулей, но " +"бесполезны сами по себе." + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" @@ -30000,8 +29898,8 @@ msgstr[1] "КБМ: Ионный перегрузочный генератор" msgstr[2] "КБМ: Ионный перегрузочный генератор" msgstr[3] "КБМ: Ионный перегрузочный генератор" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -30214,6 +30112,39 @@ msgstr[3] "документальные книги с мягкой обложк msgid "template for a paperback nonfiction book" msgstr "Шаблон для документальной книги в мягкой обложке." +#: lang/json/BOOK_from_json.py +msgid "Generic Pulp Book" +msgid_plural "Generic Pulp Books" +msgstr[0] "абстрактный бульварный роман" +msgstr[1] "абстрактных бульварных романа" +msgstr[2] "абстрактных бульварных романов" +msgstr[3] "абстрактные бульварные романы" + +#. ~ Description for Generic Pulp Book +#: lang/json/BOOK_from_json.py +msgid "" +"This is a template for pulp books. Which really all ought to be paperbacks," +" right?" +msgstr "Шаблон для дешевых книг. Наверняка все они в мягкой обложке." + +#: lang/json/BOOK_from_json.py +msgid "Generic SciFi Book" +msgid_plural "Generic SciFi Books" +msgstr[0] "абстрактная научно-фантастическая книга" +msgstr[1] "абстрактные научно-фантастические книги" +msgstr[2] "абстрактных научно-фантастических книг" +msgstr[3] "абстрактные научно-фантастические книги" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for paperback scifi books." +msgstr "Шаблон для научно-фантастических книг в мягкой обложке." + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for a hard cover scifi book." +msgstr "Шаблон для научно-фантастических книг в твёрдом переплёте." + #: lang/json/BOOK_from_json.py msgid "Homemaking Book" msgid_plural "Homemaking Books" @@ -31987,8 +31918,8 @@ msgstr[3] "чертежи" #. 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py lang/json/TOOL_from_json.py #: lang/json/furniture_from_json.py lang/json/skill_from_json.py @@ -33383,10 +33314,10 @@ msgstr[3] "приключенческие романы" #: lang/json/BOOK_from_json.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." +"in the heart of the African continent." msgstr "" "Волнующая повесть о путешествии в поисках затерянного города, расположенного" -" в тёмных глубинах африканского континента." +" в глубинах африканского континента." #: lang/json/BOOK_from_json.py msgid "buddy novel" @@ -33405,33 +33336,6 @@ msgstr "" "Захватывающий рассказ о двух друзьях, которые стараются выжить на улицах " "Нью-Йорка." -#: lang/json/BOOK_from_json.py -msgid "coming of age novel" -msgid_plural "coming of age novels" -msgstr[0] "роман о взрослении" -msgstr[1] "романа о взрослении" -msgstr[2] "романов о взрослении" -msgstr[3] "романы о взрослении" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." -msgstr "" -"Классическая история о взрослении, изображающая острые переживания молодого " -"человека в жизни, любви и сексе." - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A graphic novel about a young girl living in Iran during the 1980's, seeing " -"the world change around her as Iraq invaded her country." -msgstr "" -"Графическая новелла о молодой девушке, живущей в Иране в 1980-х годах, " -"наблюдающей за тем, как меняется мир вокруг неё, на фоне иракского вторжения" -" в её страну." - #: lang/json/BOOK_from_json.py msgid "crime novel" msgid_plural "crime novels" @@ -33589,101 +33493,6 @@ msgid "A detective investigates an unusual murder in a secluded location." msgstr "" "Детектив расследует необычное убийство произошедшее в уединённом месте." -#: lang/json/BOOK_from_json.py -msgid "pulp novel" -msgid_plural "pulp novels" -msgstr[0] "криминальное чтиво" -msgstr[1] "криминального чтива" -msgstr[2] "криминального чтива" -msgstr[3] "криминальное чтиво" - -#. ~ Description for {'str': 'pulp novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "" -"Круто завинченная детективная история, с быстро развивающимся сюжетом и " -"интригами." - -#: lang/json/BOOK_from_json.py -msgid "Planet of the Murderous Squids that Time Forgot!" -msgid_plural "Planet of the Murderous Squids that Time Forgot!s" -msgstr[0] "«Забытая временем планета кальмаров-убийц!»" -msgstr[1] "книги «Забытая временем планета кальмаров-убийц!»" -msgstr[2] "книг «Забытая временем планета кальмаров-убийц!»" -msgstr[3] "книги «Забытая временем планета кальмаров-убийц!»" - -#. ~ Description for Planet of the Murderous Squids that Time Forgot! -#: lang/json/BOOK_from_json.py -msgid "" -"In this psychedelic adventure novel of cosmic exploration, an elderly " -"assassin discovers a planet too good to be true. Only once it is too late " -"does she discover the harrowing truth at the center of \"The Planet of the " -"Murderous Squids that Time Forgot!\"" -msgstr "" -"Психоделическая повесть о пожилой наемной убийце, исследующей космос и " -"находящей планету, слишком прекрасную, чтобы быть настоящей. Слишком поздно " -"она узнает ужасный секрет в самом центре Забытой временем планеты кальмаров-" -"убийц." - -#: lang/json/BOOK_from_json.py -msgid "The Great Capes of Metropolis" -msgid_plural "The Great Capes of Metropoliss" -msgstr[0] "«Великие герои Метрополиса»" -msgstr[1] "книги «Великие герои Метрополиса»" -msgstr[2] "книг «Великие герои Метрополиса»" -msgstr[3] "книги «Великие герои Метрополиса»" - -#. ~ Description for The Great Capes of Metropolis -#: lang/json/BOOK_from_json.py -msgid "" -"In this classic pulp paperback of superheroic exploits, a group of masked " -"vigilantes with diverse superpowers learn to work together to defeat the " -"ultimate villain." -msgstr "" -"Классическая бульварная книга о супергероях, повествующая о группе мстителей" -" в масках, обладающих различными суперсилами и вынужденных объединиться, " -"чтобы остановить самого главного злодея." - -#: lang/json/BOOK_from_json.py -msgid "Yesterday's Murdered" -msgid_plural "Yesterday's Murdereds" -msgstr[0] "«Вчера убито»" -msgstr[1] "книги «Вчера убито»" -msgstr[2] "книг «Вчера убито»" -msgstr[3] "книги «Вчера убито»" - -#. ~ Description for Yesterday's Murdered -#: lang/json/BOOK_from_json.py -msgid "" -"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" -" has one last shot at vengeance." -msgstr "" -"Бульварный нуарный роман с быстрым темпом повествования о злоупотребляющем " -"алкоголем детективе со стальными нервами, у которого остался последний шанс " -"свершить возмездие." - -#: lang/json/BOOK_from_json.py -msgid "Flashgun Condor and the Crimson Criminal" -msgid_plural "Flashgun Condor and the Crimson Criminals" -msgstr[0] "«Вспышка Кондор и Красные Бандиты»" -msgstr[1] "книги «Вспышка Кондор и Красные Бандиты»" -msgstr[2] "книг «Вспышка Кондор и Красные Бандиты»" -msgstr[3] "книги «Вспышка Кондор и Красные Бандиты»" - -#. ~ Description for Flashgun Condor and the Crimson Criminal -#: lang/json/BOOK_from_json.py -msgid "" -"A hot-blooded photographer who fights crime with film, footage, and fists, " -"Condor is more than a mere shutterbug on the crime beat. But will she be " -"able to unravel a devious deception and bring the \"Crimson Criminal\" to " -"justice?" -msgstr "" -"Вспыльчивый фотограф, борющаяся с преступностью с помощью фотоаппарата и " -"кулаков, Кондор - не просто фотограф-любитель в водовороте преступности. Но " -"сможет ли она раскрыть ужасный обман и предать Красных Бандитов в руки " -"правосудия?" - #: lang/json/BOOK_from_json.py msgid "road novel" msgid_plural "road novels" @@ -33907,10 +33716,11 @@ msgstr[3] "повести о самурае" 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." +"marauding outlaws. This hardback is quite hefty." msgstr "" -"Классический рассказ странствующем войне, который был нанят жителями " -"маленького посёлка для защиты от банды преступников." +"Классическая история о странствующем воине, который был нанят жителями " +"маленького посёлка для защиты от банды преступников. Тяжелая книга в твёрдом" +" переплёте." #: lang/json/BOOK_from_json.py msgid "satire novel" @@ -33966,22 +33776,24 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Master and Margarita" -msgid_plural "The Master and Margaritas" +msgid_plural "copies of Master and Margarita" msgstr[0] "«Мастер и Маргарита»" -msgstr[1] "книги «Мастер и Маргарита»" -msgstr[2] "книг «Мастер и Маргарита»" -msgstr[3] "книги «Мастер и Маргарита»" +msgstr[1] "Мастер и Маргарита" +msgstr[2] "Мастер и Маргарита" +msgstr[3] "копии «Мастера и Маргариты»" -#. ~ Description for The Master and Margarita +#. ~ Description for {'str': 'The Master and Margarita', 'str_pl': 'copies of +#. Master and Margarita'} #: lang/json/BOOK_from_json.py msgid "" "Featuring a cast that includes Satan, Pontius Pilate, Jesus Christ, " -"vampires, a talking cat, and the literary elite of Moscow, this is a satire " -"on Stalinist tyranny written by Mikhail Bulgakov." +"vampires, a talking cat, and the literary elite of Moscow, this novel by " +"Mikhail Bulgakov explores philosophical issues on the nature of good and " +"evil." msgstr "" -"Сатира на сталинскую тиранию за авторством Михаила Булгакова, среди " -"персонажей - Сатана, Понтий Пилат, Иисус Христос, вампиры, говорящий кот и " -"литературная элита Москвы." +"Повесть Михаила Булгакова, исследующая философскую природу добра и зла, " +"среди персонажей - Сатана, Понтий Пилат, Иисус Христос, вампиры, говорящий " +"кот и литературная элита Москвы." #: lang/json/BOOK_from_json.py msgid "A Handful of Dust" @@ -34018,376 +33830,6 @@ msgstr "" "том, что даже угроза полного ядерного уничтожения не может повлиять на " "человеческую природу." -#: lang/json/BOOK_from_json.py -msgid "scifi novel" -msgid_plural "scifi novels" -msgstr[0] "фантастический роман" -msgstr[1] "фантастических романа" -msgstr[2] "фантастических романов" -msgstr[3] "фантастические романы" - -#. ~ Description for {'str': 'scifi novel'} -#: lang/json/BOOK_from_json.py -msgid "Aliens, ray guns, and space ships." -msgstr "Инопланетяне, лучевые пушки, космические корабли!" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" -" surprisingly accurate in predicting much of modern society… Until " -"recently." -msgstr "" -"«Нейромант» Гибсона. Книга написана в восьмидесятых и удивительно точно " -"предсказала современное общество… Ну, до недавнего времени." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" -"\n" -"Tyger, Tyger, Burning bright,\n" -"In the forests of the night:\n" -"What immortal hand or eye,\n" -"Dare frame thy fearful symmetry?" -msgstr "" -"«Звёзды — моя цель» Альфреда Бестера.\n" -"\n" -"Тигр, Тигр, жгучий страх,\n" -"Ты горишь в ночных лесах.\n" -"Чей бессмертный взор, любя,\n" -"Создал страшного тебя?" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" -"stains have smudged the occasional word." -msgstr "" -"«Резец Небесный» за авторством Урсулы Ле Гуин. Некоторые слова смазаны " -"отпечатками грязных пальцев." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." -msgstr "«Обделённые» Урсулы Ле Гуин." - -#: lang/json/BOOK_from_json.py -msgid "This copy of Ray Bradbury's \"Fahrenheit 451\"." -msgstr "«451 градус по Фаренгейту» Рэя Брэдбери." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Hyperion\" by Dan Simmons." -msgstr "«Гиперион» Дэна Симмонса." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" -"\n" -"Give us gods. Oh give them us!\n" -"Give us gods.\n" -"We are so tired of men\n" -"And motor-power." -msgstr "" -"«Эндимион» Дэна Симмонса. В начале книги напечатано стихотворение Д.Г. Лоуренса:\n" -"\n" -"Дайте нам богов, о дайте нам богов!\n" -"Мы так устали от людей с их\n" -"лошадиными силами." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." -msgstr "«Снятся ли андроидам электроовцы?» Филипа К. Дика." - -#: lang/json/BOOK_from_json.py -msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." -msgstr "«Нова Экспресс» Уильяма Берроуза." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " -"ripped off." -msgstr "«Основание» Айзека Азимова. У книги оторвана задняя обложка." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " -"some of its pages. Weird." -msgstr "" -"Изрядно помятая «Дюна» Фрэнка Герберта. Между некоторыми страницами песок. " -"Странно." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." -msgstr "«Процесс» Франца Кафки. Книга довольно помятая." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." -msgstr "«Рассказ служанки» Маргарет Этвуд." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " -"you wonder how Thailand fared the end of the world." -msgstr "" -"«Заводная» за авторством Паоло Бачигалупи. Из-за аннотации вам интересно, " -"как же Таиланд встретил Конец Света." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." -msgstr "«Острова в Сети» Брюса Стерлинга." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " -"contains a hand-written grocery list." -msgstr "" -"«Основание и Империя» Айзека Азимова. Кто-то написал список покупок на " -"последней странице." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " -"still has the smell of new books within its pages." -msgstr "" -"Совершенно новенький экземпляр «Помутнения» Филипа К. Дика. Страницы всё ещё" -" пахнут свеженапечатанной книгой." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " -"Sterling. The cover has rings of coffee stains over it." -msgstr "" -"Сборник «Зеркальные очки: Антология киберпанка» Брюса Стерлинга. Обложка " -"испачкана кофейными кольцами." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " -"looks to have been used to press flowers." -msgstr "" -"«Мир Нуль-А» за авторством А.Э. ван Вогта. Похоже, в этой книжке высушивали " -"цветы." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." -msgstr "«Видоизменённый углерод» Ричарда Моргана." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " -"the monster?" -msgstr "«Франкенштейн» Мари Шелли. Вроде так звали монстра, разве нет?" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" -" handbook." -msgstr "" -"«Оса» Эрика Фрэнка Рассела. Настоящее руководство для террористов будущего." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " -"covered in dried blood." -msgstr "«Я легенда» Ричарда Мэтисона. Суперобложка покрыта запёкшейся кровью." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Roadside Picnic\" by Arkady and Boris Strugatsky." -msgstr "«Пикник на обочине» Аркадия и Бориса Стругацких." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " -"if it's been slightly chewed by a dog or other large animal." -msgstr "" -"«Вечная война» Джо Холдемана. Похоже, эту книжку пожевала собака или другое " -"крупное животное." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." -msgstr "«Луна — суровая хозяйка» Роберта А. Хайнлайна." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Cat's Cradle\" by Kurt Vonnegut. You notice there is a " -"typo in the authors name on the spine of the book." -msgstr "" -"«Колыбель для кошки» Курта Воннегута. Вы замечаете опечатку в имени автора " -"на корешке книги." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " -"Copy. Not for re-sale.\"" -msgstr "" -"«Нова» Сэмюэля Р. Делани. На обложке написано «Обзорный Экземпляр. Не для " -"продажи.»" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." -msgstr "«Сирены Титана» Воннегута." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " -"the first pages in crayon." -msgstr "" -"«Трава» Шери С. Треппер. Первые страницы изрисованы детскими каракулями." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " -"with 'Library Copy'. And a sticker reading 'Science Fiction'." -msgstr "" -"«Граф Ноль» Уильяма Гибсона. На обложке печать «Библиотечная копия» и стикер" -" «Научная фантастика»." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Fifth Season\" by N.K. Jemsin. It smells faintly of" -" dirt." -msgstr "«Пятый сезон» Н.К. Джемисин. Книга слегка пахнет землёй." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." -msgstr "«Оружейники» А.Э. ван Вогта." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" -" almost brand new." -msgstr "" -"«Хроники рождённых в космосе» Бекки Чамберс. Книга выглядит почти новой." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " -"and worn, some pages appear to be loose." -msgstr "" -"«Выбор оружия» Иэна М. Бэнкса. Истрёпанный корешок покрыт трещинами, " -"некоторые страницы едва держатся." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." -msgstr "«Последний человек» Жана-Батиста Кузена Де Гренвиля." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " -"and thin. You should probably be careful with this copy." -msgstr "" -"«1984» Оруэлла. Истрёпанные страницы едва держатся на месте. Наверное, с " -"этой книжкой нужно быть бережнее." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " -"dog-eared and worn." -msgstr "«Чужак в чужой стране» Хайнлайна. Обложка измята и истрёпана." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." -msgstr "«Игра Эндера» Орсона Скотта Карда." - -#: lang/json/BOOK_from_json.py -msgid "This is a weather worn copy of \"Brave New World\" by Aldous Huxley." -msgstr "Помятый и потрёпанный «О дивный новый мир» Олдоса Хаксли." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." -msgstr "«Затерянный мир» Артура Конан Дойля." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." -msgstr "«Острова в небе» Артура Кларка." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." -msgstr "«Остров доктора Моро» Г.Д. Уэллса." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." -msgstr "«Глас Господа» Станислава Лема." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." -msgstr "«Чёрное облако» Фреда Хойла." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." -msgstr "«Последние и первые люди» Олафа Стэплдона." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"Solaris\"." -msgstr "«Солярис» Станислава Лема." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." -msgstr "«Больше, чем люди» Теодора Старджона." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Vurt\" by Jeff Noon." -msgstr "«Вирт» Джеффа Нуна." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." -msgstr "«Страсти по Лейбовицу» Уолтера М. Миллера-младшего." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." -msgstr "«Война миров» Г.Д. Уэллса." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." -msgstr "«Железный рассвет» Чарльза Стросса." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " -"blurb reminds you of a Japanese movie you think you once caught on the " -"television late at night." -msgstr "" -"«Голодные игры» Сьюзен Коллинз. Чтение аннотации напоминает вам японский " -"фильм, на который, вы, кажется, как-то раз наткнулись, смотря телевизор " -"поздней ночью." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." -msgstr "«День Триффидов» Джона Уиндема." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." -msgstr "«Заводной апельсин» Энтони Бёрджесса." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." -msgstr "«Человек, который упал на землю» Уолтера Тевиса." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." -msgstr "«Симулякрон-3» Даниэля Ф. Галуи." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." -msgstr "«Стеклянные пчёлы» Эрнста Юнгера." - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." -msgstr "«Путешествие к центру Земли» Жюля Верна." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " -"missing from the end of the book. Luckily only mail-order advertisements." -msgstr "" -"«Мир-Кольцо» Ларри Нивена. В конце книги вырвано несколько страниц. К " -"счастью, это были всего лишь рекламки заказов по почте." - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " -"Douglas Adams." -msgstr "Потрёпанный экземпляр «Автостопом по галактике» Дугласа Адамса." - #: lang/json/BOOK_from_json.py msgid "spy novel" msgid_plural "spy novels" @@ -35853,6 +35295,722 @@ msgstr "" "«Бытие и ничто» Жан-Поля Сартра в мягкой обложке, ключевая работа в традиции" " экзистенциалистов." +#: lang/json/BOOK_from_json.py +msgid "pulp novel" +msgid_plural "pulp novels" +msgstr[0] "криминальное чтиво" +msgstr[1] "криминального чтива" +msgstr[2] "криминального чтива" +msgstr[3] "криминальное чтиво" + +#. ~ Description for {'str': 'pulp novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hardboiled detective tale filled with hard hitting action and intrigue." +msgstr "" +"Круто завинченная детективная история, с быстро развивающимся сюжетом и " +"интригами." + +#: lang/json/BOOK_from_json.py +msgid "Black Valkyries From Venus" +msgid_plural "copies of Black Valkyries" +msgstr[0] "«Чёрные валькирии с Венеры»" +msgstr[1] "книги «Чёрные валькирии с Венеры»" +msgstr[2] "книг «Чёрные валькирии с Венеры»" +msgstr[3] "книги «Чёрные валькирии с Венеры»" + +#. ~ Description for {'str': 'Black Valkyries From Venus', 'str_pl': 'copies +#. of Black Valkyries'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a weather-beaten novel written by someone named \"Lee" +" Racket.\"" +msgstr "" +"В ваших руках потрепанная временем повесть, написанная кем-то под именем Ли " +"Ракет." + +#: lang/json/BOOK_from_json.py +msgid "The Wrong Tomorrow" +msgid_plural "copies of Wrong Tomorrow" +msgstr[0] "«Ложное завтра»" +msgstr[1] "книги «Ложное завтра»" +msgstr[2] "книг «Ложное завтра»" +msgstr[3] "книги «Ложное завтра»" + +#. ~ Description for {'str': 'The Wrong Tomorrow', 'str_pl': 'copies of Wrong +#. Tomorrow'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a cheap drugstore paperback written by someone named " +"\"Lee Racket.\"" +msgstr "" +"В ваших руках дешёвая книжка из тех, что можно найти в магазинчике на углу, " +"за авторством Ли Ракет." + +#: lang/json/BOOK_from_json.py +msgid "No God From a Corpse" +msgid_plural "copies of No God" +msgstr[0] "«Нет Бога из смерти»" +msgstr[1] "книги «Нет Бога из смерти»" +msgstr[2] "книг «Нет Бога из смерти»" +msgstr[3] "книги «Нет Бога из смерти»" + +#. ~ Description for {'str': 'No God From a Corpse', 'str_pl': 'copies of No +#. God'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a weatherworn paperback written by some skirt named \"Lee Racket.\"" +" It tells how rage and jealousy can turn a man, or a woman, into a monster." +" This story is hard-boiled enough to break a spoon." +msgstr "" +"Потрёпанная книга в мягком переплёте за авторством некой Ли Ракет. Она " +"повествует о том, как злоба и зависть могут превратить любого человека в " +"монстра. Очень тяжёлая история, хоть маринад придавливай." + +#: lang/json/BOOK_from_json.py +msgid "The Deep Dive" +msgid_plural "copies of Deep Dive" +msgstr[0] "«Прыжок в омут»" +msgstr[1] "книги «Прыжок в омут»" +msgstr[2] "книг «Прыжок в омут»" +msgstr[3] "книги «Прыжок в омут»" + +#. ~ Description for {'str': 'The Deep Dive', 'str_pl': 'copies of Deep Dive'} +#: lang/json/BOOK_from_json.py +msgid "" +"This dimestore short story about space travel is written by a broad named " +"\"Lee Racket.\"" +msgstr "" +"Дешёвая книжка с короткой повестью о путешествиях в космосе за авторством Ли" +" Ракет." + +#: lang/json/BOOK_from_json.py +msgid "Planet of the Murderous Squids that Time Forgot!" +msgid_plural "Planet of the Murderous Squids that Time Forgot!s" +msgstr[0] "«Забытая временем планета кальмаров-убийц!»" +msgstr[1] "книги «Забытая временем планета кальмаров-убийц!»" +msgstr[2] "книг «Забытая временем планета кальмаров-убийц!»" +msgstr[3] "книги «Забытая временем планета кальмаров-убийц!»" + +#. ~ Description for Planet of the Murderous Squids that Time Forgot! +#: lang/json/BOOK_from_json.py +msgid "" +"In this psychedelic adventure novel of cosmic exploration, an elderly " +"assassin discovers a planet too good to be true. Only once it is too late " +"does she discover the harrowing truth at the center of \"The Planet of the " +"Murderous Squids that Time Forgot!\"" +msgstr "" +"Психоделическая повесть о пожилой наемной убийце, исследующей космос и " +"находящей планету, слишком прекрасную, чтобы быть настоящей. Слишком поздно " +"она узнает ужасный секрет в самом центре Забытой временем планеты кальмаров-" +"убийц." + +#: lang/json/BOOK_from_json.py +msgid "The Great Capes of Metropolis" +msgid_plural "The Great Capes of Metropoliss" +msgstr[0] "«Великие герои Метрополиса»" +msgstr[1] "книги «Великие герои Метрополиса»" +msgstr[2] "книг «Великие герои Метрополиса»" +msgstr[3] "книги «Великие герои Метрополиса»" + +#. ~ Description for The Great Capes of Metropolis +#: lang/json/BOOK_from_json.py +msgid "" +"In this classic pulp paperback of superheroic exploits, a group of masked " +"vigilantes with diverse superpowers learn to work together to defeat the " +"ultimate villain." +msgstr "" +"Классическая бульварная книга о супергероях, повествующая о группе мстителей" +" в масках, обладающих различными суперсилами и вынужденных объединиться, " +"чтобы остановить самого главного злодея." + +#: lang/json/BOOK_from_json.py +msgid "Yesterday's Murdered" +msgid_plural "Yesterday's Murdereds" +msgstr[0] "«Вчера убито»" +msgstr[1] "книги «Вчера убито»" +msgstr[2] "книг «Вчера убито»" +msgstr[3] "книги «Вчера убито»" + +#. ~ Description for Yesterday's Murdered +#: lang/json/BOOK_from_json.py +msgid "" +"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" +" has one last shot at vengeance." +msgstr "" +"Бульварный нуарный роман с быстрым темпом повествования о злоупотребляющем " +"алкоголем детективе со стальными нервами, у которого остался последний шанс " +"свершить возмездие." + +#: lang/json/BOOK_from_json.py +msgid "Flashgun Condor and the Crimson Criminal" +msgid_plural "Flashgun Condor and the Crimson Criminals" +msgstr[0] "«Вспышка Кондор и Красные Бандиты»" +msgstr[1] "книги «Вспышка Кондор и Красные Бандиты»" +msgstr[2] "книг «Вспышка Кондор и Красные Бандиты»" +msgstr[3] "книги «Вспышка Кондор и Красные Бандиты»" + +#. ~ Description for Flashgun Condor and the Crimson Criminal +#: lang/json/BOOK_from_json.py +msgid "" +"A hot-blooded photographer who fights crime with film, footage, and fists, " +"Condor is more than a mere shutterbug on the crime beat. But will she be " +"able to unravel a devious deception and bring the \"Crimson Criminal\" to " +"justice?" +msgstr "" +"Вспыльчивый фотограф, борющаяся с преступностью с помощью фотоаппарата и " +"кулаков, Кондор - не просто фотограф-любитель в водовороте преступности. Но " +"сможет ли она раскрыть ужасный обман и предать Красных Бандитов в руки " +"правосудия?" + +#: lang/json/BOOK_from_json.py +msgid "scifi novel" +msgid_plural "scifi novels" +msgstr[0] "фантастический роман" +msgstr[1] "фантастических романа" +msgstr[2] "фантастических романов" +msgstr[3] "фантастические романы" + +#. ~ Description for {'str': 'scifi novel'} +#: lang/json/BOOK_from_json.py +msgid "Aliens, ray guns, and space ships." +msgstr "Инопланетяне, лучевые пушки, космические корабли!" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" +" surprisingly accurate in predicting much of modern society… Until " +"recently." +msgstr "" +"«Нейромант» Гибсона. Книга написана в восьмидесятых и удивительно точно " +"предсказала современное общество… Ну, до недавнего времени." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" +"\n" +"Tyger, Tyger, Burning bright,\n" +"In the forests of the night:\n" +"What immortal hand or eye,\n" +"Dare frame thy fearful symmetry?" +msgstr "" +"«Звёзды — моя цель» Альфреда Бестера.\n" +"\n" +"Тигр, Тигр, жгучий страх,\n" +"Ты горишь в ночных лесах.\n" +"Чей бессмертный взор, любя,\n" +"Создал страшного тебя?" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" +"stains have smudged the occasional word." +msgstr "" +"«Резец Небесный» за авторством Урсулы Ле Гуин. Некоторые слова смазаны " +"отпечатками грязных пальцев." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." +msgstr "«Обделённые» Урсулы Ле Гуин." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Hyperion\" by Dan Simmons." +msgstr "«Гиперион» Дэна Симмонса." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" +"\n" +"Give us gods. Oh give them us!\n" +"Give us gods.\n" +"We are so tired of men\n" +"And motor-power." +msgstr "" +"«Эндимион» Дэна Симмонса. В начале книги напечатано стихотворение Д.Г. Лоуренса:\n" +"\n" +"Дайте нам богов, о дайте нам богов!\n" +"Мы так устали от людей с их\n" +"лошадиными силами." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." +msgstr "«Снятся ли андроидам электроовцы?» Филипа К. Дика." + +#: lang/json/BOOK_from_json.py +msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." +msgstr "«Нова Экспресс» Уильяма Берроуза." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " +"ripped off." +msgstr "«Основание» Айзека Азимова. У книги оторвана задняя обложка." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." +msgstr "«Процесс» Франца Кафки. Книга довольно помятая." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." +msgstr "«Рассказ служанки» Маргарет Этвуд." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " +"you wonder how Thailand fared the end of the world." +msgstr "" +"«Заводная» за авторством Паоло Бачигалупи. Из-за аннотации вам интересно, " +"как же Таиланд встретил Конец Света." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." +msgstr "«Острова в Сети» Брюса Стерлинга." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " +"contains a hand-written grocery list." +msgstr "" +"«Основание и Империя» Айзека Азимова. Кто-то написал список покупок на " +"последней странице." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " +"still has the smell of new books within its pages." +msgstr "" +"Совершенно новенький экземпляр «Помутнения» Филипа К. Дика. Страницы всё ещё" +" пахнут свеженапечатанной книгой." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " +"Sterling. The cover has rings of coffee stains over it." +msgstr "" +"Сборник «Зеркальные очки: Антология киберпанка» Брюса Стерлинга. Обложка " +"испачкана кофейными кольцами." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " +"looks to have been used to press flowers." +msgstr "" +"«Мир Нуль-А» за авторством А.Э. ван Вогта. Похоже, в этой книжке высушивали " +"цветы." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." +msgstr "«Видоизменённый углерод» Ричарда Моргана." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " +"the monster?" +msgstr "«Франкенштейн» Мари Шелли. Вроде так звали монстра, разве нет?" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" +" handbook." +msgstr "" +"«Оса» Эрика Фрэнка Рассела. Настоящее руководство для террористов будущего." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " +"covered in dried blood." +msgstr "«Я легенда» Ричарда Мэтисона. Суперобложка покрыта запёкшейся кровью." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " +"if it's been slightly chewed by a dog or other large animal." +msgstr "" +"«Вечная война» Джо Холдемана. Похоже, эту книжку пожевала собака или другое " +"крупное животное." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." +msgstr "«Луна — суровая хозяйка» Роберта А. Хайнлайна." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " +"Copy. Not for re-sale.\"" +msgstr "" +"«Нова» Сэмюэля Р. Делани. На обложке написано «Обзорный Экземпляр. Не для " +"продажи.»" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." +msgstr "«Сирены Титана» Воннегута." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " +"the first pages in crayon." +msgstr "" +"«Трава» Шери С. Треппер. Первые страницы изрисованы детскими каракулями." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " +"with 'Library Copy'. And a sticker reading 'Science Fiction'." +msgstr "" +"«Граф Ноль» Уильяма Гибсона. На обложке печать «Библиотечная копия» и стикер" +" «Научная фантастика»." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." +msgstr "«Оружейники» А.Э. ван Вогта." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" +" almost brand new." +msgstr "" +"«Хроники рождённых в космосе» Бекки Чамберс. Книга выглядит почти новой." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " +"and worn, some pages appear to be loose." +msgstr "" +"«Выбор оружия» Иэна М. Бэнкса. Истрёпанный корешок покрыт трещинами, " +"некоторые страницы едва держатся." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." +msgstr "«Последний человек» Жана-Батиста Кузена Де Гренвиля." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " +"and thin. You should probably be careful with this copy." +msgstr "" +"«1984» Оруэлла. Истрёпанные страницы едва держатся на месте. Наверное, с " +"этой книжкой нужно быть бережнее." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " +"dog-eared and worn." +msgstr "«Чужак в чужой стране» Хайнлайна. Обложка измята и истрёпана." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." +msgstr "«Игра Эндера» Орсона Скотта Карда." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." +msgstr "«Затерянный мир» Артура Конан Дойля." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." +msgstr "«Острова в небе» Артура Кларка." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." +msgstr "«Остров доктора Моро» Г.Д. Уэллса." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." +msgstr "«Глас Господа» Станислава Лема." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." +msgstr "«Чёрное облако» Фреда Хойла." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." +msgstr "«Последние и первые люди» Олафа Стэплдона." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"Solaris\"." +msgstr "«Солярис» Станислава Лема." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." +msgstr "«Больше, чем люди» Теодора Старджона." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Vurt\" by Jeff Noon." +msgstr "«Вирт» Джеффа Нуна." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." +msgstr "«Страсти по Лейбовицу» Уолтера М. Миллера-младшего." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." +msgstr "«Война миров» Г.Д. Уэллса." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." +msgstr "«Железный рассвет» Чарльза Стросса." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " +"blurb reminds you of a Japanese movie you think you once caught on the " +"television late at night." +msgstr "" +"«Голодные игры» Сьюзен Коллинз. Чтение аннотации напоминает вам японский " +"фильм, на который, вы, кажется, как-то раз наткнулись, смотря телевизор " +"поздней ночью." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." +msgstr "«День Триффидов» Джона Уиндема." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." +msgstr "«Заводной апельсин» Энтони Бёрджесса." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." +msgstr "«Человек, который упал на землю» Уолтера Тевиса." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." +msgstr "«Симулякрон-3» Даниэля Ф. Галуи." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." +msgstr "«Стеклянные пчёлы» Эрнста Юнгера." + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." +msgstr "«Путешествие к центру Земли» Жюля Верна." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " +"missing from the end of the book. Luckily only mail-order advertisements." +msgstr "" +"«Мир-Кольцо» Ларри Нивена. В конце книги вырвано несколько страниц. К " +"счастью, это были всего лишь рекламки заказов по почте." + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " +"Douglas Adams." +msgstr "Потрёпанный экземпляр «Автостопом по галактике» Дугласа Адамса." + +#: lang/json/BOOK_from_json.py +msgid "Dune" +msgid_plural "copies of Dune" +msgstr[0] "«Дюна»" +msgstr[1] "книги «Дюна»" +msgstr[2] "книг «Дюна»" +msgstr[3] "книги «Дюна»" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " +"some of its pages. Weird." +msgstr "" +"Изрядно помятая «Дюна» Фрэнка Герберта. Между некоторыми страницами песок. " +"Странно." + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Dune\" by Frank Herbert. It is a fairly new " +"reprint with the words \"SOON TO BE A MAJOR MOTION PICTURE\" splashed across" +" its dust jacket." +msgstr "" +"Большая копия книги «Дюна». Это недавнее переиздание, и на обложке написано:" +" «СКОРО В КИНОТЕАТРАХ!»." + +#: lang/json/BOOK_from_json.py +msgid "Parable of the Talents" +msgid_plural "copies of Parable of the Talents" +msgstr[0] "«Притча о талантах»" +msgstr[1] "книги «Притча о талантах»" +msgstr[2] "книг «Притча о талантах»" +msgstr[3] "книги «Притча о талантах»" + +#. ~ Description for {'str': 'Parable of the Talents', 'str_pl': 'copies of +#. Parable of the Talents'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Parable of the Talents.\". It is Octavia " +"Butler's sequel to her book \"Parable of the Sower.\"" +msgstr "" +"Книги «Притча о талантах» в твёрдом переплёте. Продолжение книги Октавии " +"Батлер «Притча о сеятеле»." + +#: lang/json/BOOK_from_json.py +msgid "The Fifth Season" +msgid_plural "signed copies of Fifth Season" +msgstr[0] "«Пятое время года»" +msgstr[1] "книги «Пятое время года»" +msgstr[2] "книг «Пятое время года»" +msgstr[3] "книги «Пятое время года»" + +#. ~ Description for {'str': 'The Fifth Season', 'str_pl': 'signed copies of +#. Fifth Season'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a signed hardcover copy of the Hugo award winning \"The Fifth " +"Season\" by N.K. Jemisin. It smells faintly of dirt." +msgstr "" +"Книга «Пятое время года» в твёрдом переплёте за авторством Н. К. Джесимин и " +"с её же автографом. От книги неуловимо пахнет землёй." + +#: lang/json/BOOK_from_json.py +msgid "We" +msgid_plural "copies of We" +msgstr[0] "«Мы»" +msgstr[1] "книги «Мы»" +msgstr[2] "книг «Мы»" +msgstr[3] "книги «Мы»" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"This hardback book is titled \"The Annotated We: A New Translation of Evgeny Zamiatin's Novel.\"\n" +"\n" +"It is Vladimir Wozniuk's 2015 translation of \"We,\" originally published in 1924 and generally seen as the first modern dystopian novel. The commentary examines the profusive allusions and highlights the poetic nature of Zamiatin's language." +msgstr "" +"Книга в твёрдом переплёте, озаглавленная «'Мы' с аннотациями: новый перевод повести Евегния Замятина».\n" +"\n" +"Перевод Владимира Вознюка книги «Мы», впервые опубликованной в 1924 году и считающейся первой антиутопией. Комментарии к тексту раскрывают многочилсенные аллюзии и отдают должное поэтичности текста Замятина." + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"A seminal work of dystopian fiction, Evgeny Zamiatin's \"We\" was first published in 1924 but suppresed by the Soviet Union until 1988.\n" +"\n" +"This mass-market 1993 edition you've found was translated from the Russian by Clarence Brown and includes a short introduction. The slightly worn cover features a surrealist photo of a person gazing backward suspiciouly." +msgstr "" +"Основополагающее произведение антиутопической беллетристики, «Мы» Евгения Замятина, впервые было опубликовано в 1924 году, но в Советском Союзе его не издавали до 1988 года.\n" +"\n" +"У вас в руках массовое издани 1993 года, переведенное с русского языка Кларенсом Брауном и содержащее краткое вступление. На слегка потертой обложке изображена сюрреалистическая фотография человека, подозрительно смотрящего назад." + +#: lang/json/BOOK_from_json.py +msgid "The Cyberiad" +msgid_plural "copies of The Cyberiad" +msgstr[0] "«Кибериада»" +msgstr[1] "книги «Кибериада»" +msgstr[2] "книг «Кибериада»" +msgstr[3] "книги «Кибериада»" + +#. ~ Description for {'str': 'The Cyberiad', 'str_pl': 'copies of The +#. Cyberiad'} +#: lang/json/BOOK_from_json.py +msgid "" +"This 350 page paperback presents the exploits and robotic rivalries of Trurl" +" and Klapaucius. Originally written in Polish by Stanislaw Lem, it has been" +" masterfully translated into English by Michael Kandel." +msgstr "" +"В этой книге с мягкой обложкой на 350 страниц представлены подвиги и " +"робототехническое соперничество Трурля и Клапауция. Книга первоначально " +"написана на польском языке Станиславом Лемом, перевод на английский был " +"мастерски выполнен Майклом Канделом." + +#: lang/json/BOOK_from_json.py +msgid "Brave New World" +msgid_plural "copies of Brave New World" +msgstr[0] "«Дивный новый мир»" +msgstr[1] "книги «Дивный новый мир»" +msgstr[2] "книг «Дивный новый мир»" +msgstr[3] "книги «Дивный новый мир»" + +#. ~ Description for {'str': 'Brave New World', 'str_pl': 'copies of Brave New +#. World'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is weather worn copy of \"Brave New World\" by Aldous Huxley looks like" +" it has been left out in rain. The novel begins in a bleak building where " +"fetuses are grown in bottles on an assembly line." +msgstr "" +"Потёртая копия книги Олдоса Хаксли «Дивный новый мир». Выглядит так, будто " +"её забыли под дождём. Повествование начинается со скучного здания, в котором" +" на конвейерах движутся сосуды с растущими в них зародышами." + +#: lang/json/BOOK_from_json.py +msgid "Roadside Picnic" +msgid_plural "copies of Roadside Picnic" +msgstr[0] "«Пикник на обочине»" +msgstr[1] "книги «Пикник на обочине»" +msgstr[2] "книг «Пикник на обочине»" +msgstr[3] "книги «Пикник на обочине»" + +#. ~ Description for {'str': 'Roadside Picnic', 'str_pl': 'copies of Roadside +#. Picnic'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a paperback copy of \"Roadside Picnic\" by Arkady and Boris " +"Strugatsky. It has been translated into over 20 languages, occasionally " +"under the name \"Stalker.\" This copy, fortunately for you, just happens to" +" be in your native tongue." +msgstr "" +"Копия книги «Пикник на обочине» в мягком переплёте за авторством Аркадия и " +"Бориса Стругацких. Книга была переведена на более чем 20 языков, иногда под " +"названием «Сталкер». К счастью для вас, этот экземпляр на вашем родном " +"языке." + +#: lang/json/BOOK_from_json.py +msgid "Fahrenheit 451" +msgid_plural "copies of Fahrenheit 451" +msgstr[0] "\"451 градус по Фаренгейту\"" +msgstr[1] "книги \"451 градус по Фаренгейту\"" +msgstr[2] "книги \"451 градус по Фаренгейту\"" +msgstr[3] "книги \"451 градус по Фаренгейту\"" + +#. ~ Description for {'str': 'Fahrenheit 451', 'str_pl': 'copies of Fahrenheit +#. 451'} +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "Книга \"451 градус по Фаренгейту\" Рэя Брэдбери" + +#: lang/json/BOOK_from_json.py +msgid "" +"Some joker has gently burnt the exterior edge of this paperback dystopia. " +"It's still perfectly readable." +msgstr "" +"Какой-то шутник аккуратно опалил внешнюю грань переплёта этой антиутопии. Её" +" всё ещё можно прочесть." + +#: lang/json/BOOK_from_json.py +msgid "" +"\"It was a pleasure to burn. It was a special pleasure to see things eaten," +" to see things blackened and changed.\"" +msgstr "" +"«Жечь было удовольствием. Ещё большим было наблюдать, как всё пожирают, как " +"вещи меняются и чернеют.»" + +#: lang/json/BOOK_from_json.py +msgid "" +"This 1979 softcover edition of Ray Bradbury's \"Fahrenheit 451\" was once a " +"library book. It still has a light blue checkout card pocketed on the torn " +"back cover. One \"Suzanne Collins\" borrowed it in 1981." +msgstr "" +"Книга Рэя Бредбери «451 по Фаренгейту» в мягкой обложке. Когда-то, похоже, " +"была библиотечной - внутри до сих пор лежит библиотечная карточка. В 1981 " +"книгу забрала некая Сьюзан Коллинс." + +#: lang/json/BOOK_from_json.py +msgid "" +"The red and black paperback novel you hold in your hands is a modern reprint" +" of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" +"Книга в мягком переплёте с красно-черным оформлением - современное " +"переиздание книги Рэя Бредбери «451 по Фаренгейту»." + +#: lang/json/BOOK_from_json.py +msgid "" +"This scifi novel is divided into three parts: \"The Hearth and the " +"Salamander,\" \"The Sieve and the Sand,\", and \"Burning Bright.\"" +msgstr "" +"Научно-фантастическая повесть, разделённая на три части: «Очаг и " +"Саламандра», «Сито и песок», «Огонь горит ярко»." + #: lang/json/BOOK_from_json.py msgid "sports novel" msgid_plural "sports novels" @@ -36276,12 +36434,14 @@ msgstr[3] "книги «10 плюсов быть носительницей ко #: lang/json/BOOK_from_json.py msgid "" "This book is for the delightful little ring bearer in your wedding. The " -"author depicts the responsibility and the honor in being a ring bearer your " -"little angel will cherish." +"author depicts the responsibility and honor in being a ring bearer. Your " +"little angel will cherish this book as he or she learns how to behave on " +"your perfect day." msgstr "" "Книга для прекрасной маленькой носительницы колец на вашей свадьбе. Автор " "рассказывает об ответственности и чести быть носительницей колец, от которых" -" ваш маленький ангел будет в восторге." +" ваш маленький ангел будет в восторге, помогая устроить вам лучший день в " +"вашей жизни." #: lang/json/BOOK_from_json.py msgid "How to Raise a Gentleman: A Civilized Guide to Parenting" @@ -37984,13 +38144,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Adorkable Girl" -msgid_plural "The Adorkable Girls" -msgstr[0] "«Милая девочка»" -msgstr[1] "книги «Милая девочка»" -msgstr[2] "книг «Милая девочка»" -msgstr[3] "книги «Милая девочка»" +msgid_plural "copies of Adorkable" +msgstr[0] "«Милая неловкая»" +msgstr[1] "книги «Милая неловкая»" +msgstr[2] "книг «Милая неловкая»" +msgstr[3] "книги «Милая неловкая»" -#. ~ Description for The Adorkable Girl +#. ~ Description for {'str': 'The Adorkable Girl', 'str_pl': 'copies of +#. Adorkable'} #: lang/json/BOOK_from_json.py msgid "" "When a therapist's daughter transfers to a new school, she decides to change" @@ -38004,30 +38165,32 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Becoming Jackson" -msgid_plural "Becoming Jacksons" +msgid_plural "copies of Becoming Jackson" msgstr[0] "«Стать Джексоном»" msgstr[1] "книги «Стать Джексоном»" msgstr[2] "книг «Стать Джексоном»" msgstr[3] "книги «Стать Джексоном»" -#. ~ Description for Becoming Jackson +#. ~ Description for {'str': 'Becoming Jackson', 'str_pl': 'copies of Becoming +#. Jackson'} #: lang/json/BOOK_from_json.py msgid "" "When Jackson gains the mystical talent to alter his appearance on command, " -"how will he continue to recognize himself in his own mirror?" +"will he be able to recognize himself in his own mirror?" msgstr "" "Джексон получает мистическую способность - менять свою внешность по желанию." " Сможет ли он узнать свое отражение в зеркале?" #: lang/json/BOOK_from_json.py msgid "Nothing Burned" -msgid_plural "Nothing Burneds" +msgid_plural "copies of Nothing Burned" msgstr[0] "«Сгоревшее ничто»" msgstr[1] "книги «Сгоревшее ничто»" msgstr[2] "книг «Сгоревшее ничто»" msgstr[3] "книги «Сгоревшее ничто»" -#. ~ Description for Nothing Burned +#. ~ Description for {'str': 'Nothing Burned', 'str_pl': 'copies of Nothing +#. Burned'} #: lang/json/BOOK_from_json.py msgid "" "A teenage influencer becomes fast friends with someone who may or may not be" @@ -38038,13 +38201,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "High and Low" -msgid_plural "High and Lows" +msgid_plural "copies of High and Low" msgstr[0] "«Взлет и падение»" msgstr[1] "книги «Взлет и падение»" msgstr[2] "книг «Взлет и падение»" msgstr[3] "книги «Взлет и падение»" -#. ~ Description for High and Low +#. ~ Description for {'str': 'High and Low', 'str_pl': 'copies of High and +#. Low'} #: lang/json/BOOK_from_json.py msgid "" "In this work of adolescent fiction, a young gemini discovers that the " @@ -38058,13 +38222,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Fire When You See My Eyes" -msgid_plural "Fire When You See My Eyess" -msgstr[0] "«Огонь, когда ты смотришь мне в глаза»" -msgstr[1] "книги «Огонь, когда ты смотришь мне в глаза»" -msgstr[2] "книг «Огонь, когда ты смотришь мне в глаза»" -msgstr[3] "книги «Огонь, когда ты смотришь мне в глаза»" +msgid_plural "copies of Fire When" +msgstr[0] "«Огонь, когда ты в моих глазах»" +msgstr[1] "книги «Огонь, когда ты в моих глазах»" +msgstr[2] "книг «Огонь, когда ты в моих глазах»" +msgstr[3] "книги «Огонь, когда ты в моих глазах»" -#. ~ Description for Fire When You See My Eyes +#. ~ Description for {'str': 'Fire When You See My Eyes', 'str_pl': 'copies of +#. Fire When'} #: lang/json/BOOK_from_json.py msgid "" "In a cataclysmic future, advanced technology gives parents access to video " @@ -38075,13 +38240,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Peanut Butter Bruised" -msgid_plural "Peanut Butter Bruiseds" +msgid_plural "copies of Peanut Butter Bruised" msgstr[0] "«Привкус арахисового масла»" msgstr[1] "книги «Привкус арахисового масла»" msgstr[2] "книг «Привкус арахисового масла»" msgstr[3] "книги «Привкус арахисового масла»" -#. ~ Description for Peanut Butter Bruised +#. ~ Description for {'str': 'Peanut Butter Bruised', 'str_pl': 'copies of +#. Peanut Butter Bruised'} #: lang/json/BOOK_from_json.py msgid "" "In this work of young adult fiction, a woman raised on food stamps falls in " @@ -38094,13 +38260,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Ready When You Are" -msgid_plural "Ready When You Ares" +msgid_plural "copies of Ready When" msgstr[0] "«По твоему сигналу»" msgstr[1] "книги «По твоему сигналу»" msgstr[2] "книг «По твоему сигналу»" msgstr[3] "книги «По твоему сигналу»" -#. ~ Description for Ready When You Are +#. ~ Description for {'str': 'Ready When You Are', 'str_pl': 'copies of Ready +#. When'} #: lang/json/BOOK_from_json.py msgid "" "When three teenage girls ditch class to drive cross country together they " @@ -38113,13 +38280,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Study of a Boy" -msgid_plural "Study of a Boys" +msgid_plural "copies of \"Study of a Boy\"" msgstr[0] "«Этюд о юноше»" msgstr[1] "книги «Этюд о юноше»" msgstr[2] "книг «Этюд о юноше»" msgstr[3] "книги «Этюд о юноше»" -#. ~ Description for Study of a Boy +#. ~ Description for {'str': 'Study of a Boy', 'str_pl': 'copies of "Study of +#. a Boy"'} #: lang/json/BOOK_from_json.py msgid "" "A high school sophomore's personal journal is stolen and then leaked on " @@ -38132,13 +38300,14 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Summer Variables" -msgid_plural "Summer Variabless" +msgid_plural "copies of Summer Variables" msgstr[0] "«Летние переменные»" msgstr[1] "книги «Летние переменные»" msgstr[2] "книг «Летние переменные»" msgstr[3] "книги «Летние переменные»" -#. ~ Description for Summer Variables +#. ~ Description for {'str': 'Summer Variables', 'str_pl': 'copies of Summer +#. Variables'} #: lang/json/BOOK_from_json.py msgid "" "In this book written primarily for young adults, a woman's modest summer " @@ -38149,6 +38318,80 @@ msgstr "" "совершившей невероятное открытие, привлекшее к ней внимание нежелательных " "элементов." +#: lang/json/BOOK_from_json.py +msgid "In a Dark Place" +msgid_plural "copies of Dark Place" +msgstr[0] "«В тёмном месте»" +msgstr[1] "книги «В тёмном месте»" +msgstr[2] "книг «В тёмном месте»" +msgstr[3] "книги «В тёмном месте»" + +#. ~ Description for {'str': 'In a Dark Place', 'str_pl': 'copies of Dark +#. Place'} +#: lang/json/BOOK_from_json.py +msgid "" +"Markia dreams about the future. Theo longs for the past. Together can they" +" find a way to live in the now?" +msgstr "" +"Макрия мечтает о будущем. Тео желает прошлого. Сумеют ли они вместе жить в " +"настоящем?" + +#: lang/json/BOOK_from_json.py +msgid "Betrayal Takes Two" +msgid_plural "copies of Betrayal" +msgstr[0] "«Предательство вдвоём»" +msgstr[1] "книги «Предательство вдвоём»" +msgstr[2] "книг «Предательство вдвоём»" +msgstr[3] "книги «Предательство вдвоём»" + +#. ~ Description for {'str': 'Betrayal Takes Two', 'str_pl': 'copies of +#. Betrayal'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a hard cover book for older teens. The two main characters pull a " +"cruel prank on their classmates, and are brought together both by their " +"frantic efforts to avoid being caught and their shared sense of guilt." +msgstr "" +"Книга в твёрдом переплёте, ориентированная на старших подростков. Два " +"главных персонажа устраивают жесткий розыгрыш над своими одноклассниками, и " +"их сближают попытки избежать поимки и общее чувство вины." + +#: lang/json/BOOK_from_json.py +msgid "coming of age novel" +msgid_plural "coming of age novels" +msgstr[0] "роман о взрослении" +msgstr[1] "романа о взрослении" +msgstr[2] "романов о взрослении" +msgstr[3] "романы о взрослении" + +#. ~ Description for {'str': 'coming of age novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." +msgstr "" +"Классическая история о взрослении, изображающая острые переживания молодого " +"человека в жизни, любви и сексе." + +#: lang/json/BOOK_from_json.py +msgid "Pantheon: The Story of an Iranian Youth" +msgid_plural "copies of Pantheon" +msgstr[0] "«Пантеон: история иранской юности»" +msgstr[1] "книги «Пантеон: история иранской юности»" +msgstr[2] "книг «Пантеон: история иранской юности»" +msgstr[3] "книги «Пантеон: история иранской юности»" + +#. ~ Description for {'str': 'Pantheon: The Story of an Iranian Youth', +#. 'str_pl': 'copies of Pantheon'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hard cover graphic novel about a young girl living in Iran during the " +"1980's, seeing the world change around her as Iraq invaded her country." +msgstr "" +"Графическая новелла в твёрдой обложке о молодой девушке, живущей в Иране в " +"1980-х годах, наблюдающей за тем, как меняется мир вокруг неё, на фоне " +"иракского вторжения в её страну." + #: lang/json/BOOK_from_json.py msgid "original copy of Housefly" msgid_plural "original copies of Housefly" @@ -40253,6 +40496,59 @@ msgstr "" "Создает широкую преграду из густого тумана. Хотя резкий перепад давления " "собьет с ног кого угодно, в остальном это заклинание безвредно." +#: lang/json/BOOK_from_json.py +msgid "Scroll of Knock" +msgid_plural "Scrolls of Knock" +msgstr[0] "свиток Взлома" +msgstr[1] "свитка Взлома" +msgstr[2] "свитков Взлома" +msgstr[3] "свитки Взлома" + +#. ~ Description for {'str': 'Scroll of Knock', 'str_pl': 'Scrolls of Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open locked wooden doors from a short " +"range away." +msgstr "" +"Вы можете направить магическую энергию, что открыть запертые деревянные " +"двери поблизости." + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Improved Knock" +msgid_plural "Scrolls of Improved Knock" +msgstr[0] "свиток Улучшенного Взлома" +msgstr[1] "свитка Улучшенного Взлома" +msgstr[2] "свитков Улучшенного Взлома" +msgstr[3] "свитки Улучшенного Взлома" + +#. ~ Description for {'str': 'Scroll of Improved Knock', 'str_pl': 'Scrolls of +#. Improved Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open any locked door from a short range " +"away." +msgstr "" +"Вы можете направить магическую энергию, что открыть любые запертые двери " +"поблизости." + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "свиток отталкивающих разрядов" +msgstr[1] "свитка отталкивающих разрядов" +msgstr[2] "свитков отталкивающих разрядов" +msgstr[3] "свитки отталкивающих разрядов" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of +#. Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers" +" with baleful lightning." +msgstr "" +"Вы создаёте вокруг себя потрескивающую электрическими разрядами ауру, " +"разящую молниями атакующих вас." + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -40705,45 +41001,6 @@ msgstr "" " Я тебя люблю,\n" " — Ф.»." -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "«Вначале… была командная строка»" -msgstr[1] "книги «Вначале… была командная строка»" -msgstr[2] "книг «Вначале… была командная строка»" -msgstr[3] "книги «Вначале… была командная строка»" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', -#. 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "" -"Юмористическое эссе Нила Стивенсона, написанное в 1999 году, сравнивающее " -"компьютерные операционные системы с автодилерами." - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "«Принципы проектирования компиляторов»" -msgstr[1] "книги «Принципы проектирования компиляторов»" -msgstr[2] "книг «Принципы проектирования компиляторов»" -msgstr[3] "книги «Принципы проектирования компиляторов»" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': -#. 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" -"Классическая книга по программированию 1977 года за авторством Альфреда Ахо " -"и Джеффри Ульмана. На обложке рыцарь, вздымающий парсер LALR, метя в " -"метафорического дракона Сложностей Проектирования Компиляторов." - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -42803,18 +43060,8 @@ msgstr[3] "куски мяса мутанта" #. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py -msgid "" -"Meat from a heavily mutated animal. It has an unsettling loose and spongy " -"texture, but smells… mostly normal. There are strange tangles and " -"formations in it that don't appear natural at all: bits of bone and hair " -"crusted up inside the muscle, as if trying to form another organism. Still," -" seems digestible at least, if you cook it and remove the worst parts." -msgstr "" -"Мясо сильно мутировавшего животного. У него неприятная рыхлая губчатая " -"текстура, а пахнет оно… Почти как обычно. В нём есть странные неестественные" -" волокна и образования: волосы и кусочки костей внутри мышц, будто бы там " -"пытался развиться другой организм. Тем не менее это кажется съедобным, если " -"его приготовить и удалить самые мерзкие части." +msgid "Meat from a heavily mutated animal." +msgstr "Мясо, срезанное с сильно мутировавшего животного." #: lang/json/COMESTIBLE_from_json.py msgid "scrap of mutant meat" @@ -42828,15 +43075,11 @@ msgstr[3] "обрезки мяса мутанта" #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"A tiny scrap of meat from a heavily mutated animal. It smells a bit odd, " -"and has bits of hair and bone mixed in that seem like they grew inside the " -"muscle itself. Still, seems digestible at least, if you cook it and remove " -"the worst parts." +"A tiny scrap of meat from a heavily mutated animal. It smells unappealing, " +"to say the least." msgstr "" -"Крошечные кусочки мяса мутировавшего животного. Они пахнут несколько " -"странно, и в них попадаются волосы и кусочки костей, которые выглядят так, " -"словно они выросли внутри самой мышцы. Тем не менее, они кажутся съедобными," -" если их приготовить и удалить самые мерзкие части." +"Маленький обрезок мяса сильно мутировавшего животного. Пахнет неаппетитно, " +"мягко говоря." #: lang/json/COMESTIBLE_from_json.py msgid "mutant humanoid meat" @@ -42932,14 +43175,8 @@ msgstr[3] "приготовленное мясо мутанта" #. ~ Description for cooked mutant meat #: lang/json/COMESTIBLE_from_json.py -msgid "" -"This is a cooked chunk of meat from a mutated animal. It has an unsettling," -" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" -" the bits of hair and bone out…" -msgstr "" -"Это приготовленный кусок мяса мутировавшего животного. У него неприятная " -"губчатая структура, но вкус… Почти нормальный. Вы надеетесь, что вырезали " -"все волосы и кусочки костей…" +msgid "This is a cooked chunk of meat from a mutated animal." +msgstr "Приготовленный кусок мяса мутировавшего животного." #: lang/json/COMESTIBLE_from_json.py msgid "cooked scrap of mutant meat" @@ -42949,6 +43186,16 @@ msgstr[1] "приготовленных мясных обрезков мутан msgstr[2] "приготовленных мясных обрезков мутанта" msgstr[3] "приготовленные мясные обрезки мутанта" +#. ~ Description for {'str': 'cooked scrap of mutant meat', 'str_pl': 'cooked +#. scraps of mutant meat'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"This is a tiny scrap of cooked mutant meat. It is small enough that it's " +"hard to tell how disgusting it is." +msgstr "" +"Небольшой приготовленный обрезок мяса мутанта. Достаточно мелкий, чтобы было" +" трудно осознать его отвратительность." + #: lang/json/COMESTIBLE_from_json.py msgid "raw offal" msgid_plural "raw offals" @@ -42987,6 +43234,19 @@ msgstr "" "считает их слишком противными, если только они не были тщательно " "подготовлены перед готовкой." +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant organs" +msgid_plural "mutant organs" +msgstr[0] "мутировавшие органы" +msgstr[1] "мутировавшие органы" +msgstr[2] "мутировавшие органы" +msgstr[3] "мутировавшие органы" + +#. ~ Description for {'str_sp': 'mutant organs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "These organs came from a giant mutant bug." +msgstr "Органы огромного мутировавшего насекомого." + #: lang/json/COMESTIBLE_from_json.py msgid "pickled offal" msgid_plural "pickled offal" @@ -43218,6 +43478,19 @@ msgstr "" " виде оно не выглядит аппетитнее, но, по крайней мере, паразитов в нём " "больше нет." +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant lungs" +msgid_plural "mutant lungs" +msgstr[0] "мутировавшие лёгкие" +msgstr[1] "мутировавшие лёгкие" +msgstr[2] "мутировавшие лёгкие" +msgstr[3] "мутировавшие лёгкие" + +#. ~ Description for {'str_sp': 'mutant lungs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "You're pretty sure this is lung tissue." +msgstr "Без сомнений это ткань легкого" + #: lang/json/COMESTIBLE_from_json.py msgid "raw liver" msgid_plural "raw livers" @@ -43431,12 +43704,13 @@ msgstr[3] "куски жира мутанта" #. mutant fat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Freshly butchered fat from a heavily mutated animal. You could eat it raw, " -"but it is better used as an ingredient in other foods or projects." +"Freshly butchered fat from a heavily mutated animal. It smells, if " +"anything, even more disgusting than the rest of the mutant. There are " +"little puddles of unidentified oils dripping from it." msgstr "" -"Свежесрезанное сало сильно мутировавшего животного. Вы можете есть его в " -"сыром виде, но его лучше использовать в качестве ингредиента для других " -"продуктов или проектов." +"Свежий жир, вырезанный из сильно мутировавшего животного. Он пахнет даже " +"хуже, чем остальные части мутанта. С него капает непонятная маслянистая " +"жидкость, собирающаяся в лужицы." #: lang/json/COMESTIBLE_from_json.py msgid "mutant tallow" @@ -45181,21 +45455,21 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "Вода с добавлением сахара или мёда. На вкус нормально." #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" -msgstr[0] "чай" -msgstr[1] "чай" -msgstr[2] "чай" -msgstr[3] "чай" +msgid "black tea" +msgid_plural "black teas" +msgstr[0] "чёрный чай" +msgstr[1] "чёрный чай" +msgstr[2] "чёрный чай" +msgstr[3] "чёрный чай" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves" -" of the tea plant /Camellia sinensis/." +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." msgstr "" -"Напиток джентльменов, созданный путём заваривания в горячей воде листьев " -"растения камелия китайская." +"Напиток джентльменов, созданный путём заваривания в горячей воде окисленных " +"листьев растения Камелия Китайская." #: lang/json/COMESTIBLE_from_json.py msgid "bark tea" @@ -45255,6 +45529,42 @@ msgstr "" "Такая классная минеральная вода, что вы чувствуете себя так классно держа её" " в руке." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "зелёный чай" +msgstr[1] "зелёный чай" +msgstr[2] "зелёный чай" +msgstr[3] "зелёный чай" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia sinensis/." +" Green tea has a lighter, fresher taste than black and is traditionally " +"preferred in Asian cultures." +msgstr "" +"Напиток, созданный путём заваривания в горячей воде листьев растения " +"КамелияКитайская. Зелёный чай обладает более лёгким и свежим вкусом по " +"сравнению с чёрным и более распространён в Азии." + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "фруктовый чай" +msgstr[1] "фруктовый чай" +msgstr[2] "фруктовый чай" +msgstr[3] "фруктовый чай" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "" +"Вкусный напиток из трав и кусочков высушенных фруктов с растений, не " +"являющихся чаем. Хотя обычно его и называют чаем, технически это настой." + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -52461,7 +52771,6 @@ msgstr[2] "сосновые орехи" msgstr[3] "сосновые орехи" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "Горсть вкусных хрустящих орехов из сосновой шишки." @@ -53681,21 +53990,55 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "Нектар. Если вы видите это — это баг." #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" -msgstr[0] "чайный пакетик" -msgstr[1] "чайных пакетика" -msgstr[2] "чайных пакетиков" -msgstr[3] "чайные пакетики" +msgid "black tea bag" +msgid_plural "black tea bags" +msgstr[0] "пакетик чёрного чая" +msgstr[1] "пакетика чёрного чая" +msgstr[2] "пакетиков чёрного чая" +msgstr[3] "пакетики чёрного чая" + +#. ~ Description for {'str': 'black tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "" +"Бумажный пакетик с чайными листьями. Залейте кипятком, чтобы приготовить " +"чашку чёрного чая." + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "пакетик зелёного чая" +msgstr[1] "пакетика зелёного чая" +msgstr[2] "пакетиков зелёного чая" +msgstr[3] "пакетики зелёного чая" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'green tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." msgstr "" "Бумажный пакетик с чайными листьями. Залейте кипятком, чтобы приготовить " -"чашку чая." +"чашку зелёного чая." + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" +msgstr[0] "пакетик фруктового чая" +msgstr[1] "пакетика фруктового чая" +msgstr[2] "пакетиков фруктового чая" +msgstr[3] "пакетики фруктового чая" + +#. ~ Description for {'str': 'fruit tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." +msgstr "" +"Бумажный пакетик с листьями растений и кусочками сушеных фруктов. Залейте " +"кипятком, чтобы приготовить чашку фруктового чая." #: lang/json/COMESTIBLE_from_json.py msgid "herbal tea bag" @@ -53813,24 +54156,17 @@ msgstr[3] "белковые рационы" #. ~ Description for {'str': 'protein ration'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"SoyPelusa ran a highly successful crowdfunding campaign for their signature " -"protein bar, dubbed \"DaiZoom.\" A person can live on one of these bars, " -"three times a day, presumably forever. After backers received their " -"product, a single flaw was found: most consumers found starvation preferable" -" to the flavor. Warehouses of the product went unsold as the company went " -"bankrupt, providing the perfect opportunity for FEMA to scoop them up and " -"stock the evac shelters. Now, you hold a piece of famous crowdfunding " -"history in your hands. How exciting." +"SoyPelusa ran a highly successful crowdfunding campaign for their signature protein bar, dubbed \"DaiZoom.\"\n" +"\n" +"A person can live on one of these bars, three times a day, presumably forever. After backers received their product, a single flaw was found: most consumers found starvation preferable to the flavor. Warehouses of the product went unsold as the company went bankrupt, providing the perfect opportunity for FEMA to scoop them up and stock the evac shelters.\n" +"\n" +"Now, you hold a piece of famous crowdfunding history in your hands. How exciting." msgstr "" -"SoyPelusa провела очень успешную краудфандинговую кампанию для их фирменного" -" протеинового батончика, названного «ДайЗум». Человек может жить на одних " -"таких батончиках, употребляя их три раза в день, вероятно, неограниченно " -"долго. После того, как поддержавшие проект получили свой продукт, был " -"обнаружен один недостаток: большинство потребителей предпочли бы голодать " -"чем терпеть этот вкус. Продукт на складах остался не проданным, поскольку " -"компания обанкротилась, предоставив МЧС прекрасную возможность выкупить эти " -"батончики и снабдить ими эвакуационные убежища. Теперь вы держите в руках " -"частичку этой знаменитой краудфандинговой истории. Как захватывающе." +"SoyPelusa провела очень успешную краудфандинговую кампанию для их фирменного протеинового батончика, названного «ДайЗум».\n" +"\n" +"Человек может жить на одних таких батончиках, употребляя их три раза в день, вероятно, неограниченно долго. После того, как поддержавшие проект получили свой продукт, был обнаружен один недостаток: большинство потребителей предпочли бы голодать чем терпеть этот вкус. Продукт на складах остался не проданным, поскольку компания обанкротилась, предоставив МЧС прекрасную возможность выкупить эти батончики и снабдить ими эвакуационные убежища.\n" +"\n" +"Теперь вы держите в руках частичку этой знаменитой краудфандинговой истории. Как захватывающе." #: lang/json/COMESTIBLE_from_json.py msgid "protein shake" @@ -54858,14 +55194,14 @@ msgstr "" "чтобы извлечь его." #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" -msgstr[0] "чайный лист" -msgstr[1] "чайных листа" -msgstr[2] "чайных листов" -msgstr[3] "чайный лист" +msgid "black tea leaf" +msgid_plural "black tea leaves" +msgstr[0] "лист чёрного чая" +msgstr[1] "листа чёрного чая" +msgstr[2] "листьев чёрного чая" +msgstr[3] "листья чёрного чая" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " @@ -54874,6 +55210,23 @@ msgstr "" "Сушёные листья тропического растения. Можно заварить из них чай, а можно " "просто съесть. Впрочем, они не так уж и питательны." +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "лист зелёного чая" +msgstr[1] "листа зелёного чая" +msgstr[2] "листьев зелёного чая" +msgstr[3] "листья зелёного чая" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "" +"Сушёные листья тропического растения. Можно заварить из них зелёный чай, а " +"можно просто съесть. Впрочем, они не так уж и питательны." + #: lang/json/COMESTIBLE_from_json.py msgid "tomato" msgid_plural "tomatoes" @@ -58256,6 +58609,85 @@ msgstr "" "Мука, смешанная в водой и размятая в вязкую пасту. Из теста можно выпекать " "хлеб эффективнее, чем просто из муки." +#: lang/json/COMESTIBLE_from_json.py +msgid "pineapple stem" +msgid_plural "pineapple stem" +msgstr[0] "стебель ананаса" +msgstr[1] "стебля ананаса" +msgstr[2] "стеблей ананаса" +msgstr[3] "стебли ананаса" + +#. ~ Description for {'str_sp': 'pineapple stem'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Roots of a pineapple plant, for growing your own." +msgstr "Корешки ананаса, для выращивания." + +#: lang/json/COMESTIBLE_from_json.py +msgid "melon seeds" +msgid_plural "melon seeds" +msgstr[0] "семена дыни" +msgstr[1] "семена дыни" +msgstr[2] "семена дыни" +msgstr[3] "семена дыни" + +#. ~ Description for {'str_sp': 'melon seeds'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some melon seeds." +msgstr "Немного семян дыни" + +#: lang/json/COMESTIBLE_from_json.py +msgid "banana saplings" +msgid_plural "banana saplings" +msgstr[0] "ростки банана" +msgstr[1] "ростки банана" +msgstr[2] "ростки банана" +msgstr[3] "ростки банана" + +#. ~ Description for {'str_sp': 'banana saplings'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some banana saplings." +msgstr "Немного ростков бананов" + +#: lang/json/COMESTIBLE_from_json.py +msgid "orange vine" +msgid_plural "orange vine" +msgstr[0] "апельсиновое вино" +msgstr[1] "апельсиновое вино" +msgstr[2] "апельсиновое вино" +msgstr[3] "апельсиновое вино" + +#. ~ Description for {'str_sp': 'orange vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some orange vine. Definitely GMO." +msgstr "Апельсиновое вино. Определенно из ГМО" + +#: lang/json/COMESTIBLE_from_json.py +msgid "lemon vine" +msgid_plural "lemon vine" +msgstr[0] "лимонное вино" +msgstr[1] "лимонное вино" +msgstr[2] "лимонное вино" +msgstr[3] "лимонное вино" + +#. ~ Description for {'str_sp': 'lemon vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some lemon vines. Definitely GMO." +msgstr "Лимонное вино. Определенно из ГМО" + +#: lang/json/COMESTIBLE_from_json.py +msgid "subterraenean coconut" +msgid_plural "subterraenean coconut" +msgstr[0] "подземный кокос" +msgstr[1] "подземных кокоса" +msgstr[2] "подземных кокосов" +msgstr[3] "подземные кокосы" + +#. ~ Description for {'str_sp': 'subterraenean coconut'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Proof that man went too far before the Cataclysm." +msgstr "" +"Доказательство того, что человек зашёл слишком далеко перед Катаклизмом." + #: lang/json/COMESTIBLE_from_json.py msgid "vampire mutagen" msgid_plural "vampire mutagens" @@ -58779,6 +59211,14 @@ msgstr[1] "яйца анкилозавра" msgstr[2] "яиц анкилозавра" msgstr[3] "яйца анкилозавра" +#: lang/json/COMESTIBLE_from_json.py +msgid "apatosaurus egg" +msgid_plural "apatosaurus eggs" +msgstr[0] "яйцо апатозавра" +msgstr[1] "яйца апатозавра" +msgstr[2] "яиц апатозавра" +msgstr[3] "яйца апатозавра" + #: lang/json/COMESTIBLE_from_json.py msgid "ceratosaurus egg" msgid_plural "ceratosaurus eggs" @@ -59212,7 +59652,7 @@ msgstr[1] "гриба крикуна" msgstr[2] "грибов крикуна" msgstr[3] "грибы крикуна" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -59458,145 +59898,6 @@ msgstr "" "чтобы увидеть это сообщение? Мы не разрешаем тебе присоединиться к нам, " "пока нас модифицируют." -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "ТЕСТОВЫЕ сосновые орешки" -msgstr[1] "ТЕСТОВЫЕ сосновые орешки" -msgstr[2] "ТЕСТОВЫЕ сосновые орешки" -msgstr[3] "ТЕСТОВЫЕ сосновые орешки" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "тестовый горький миндаль" -msgstr[1] "тестовый горький миндаль" -msgstr[2] "тестовый горький миндаль" -msgstr[3] "тестовый горький миндаль" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when" -" eaten raw." -msgstr "" -"Горсть миндаля с примесью синильной кислоты, может быть ядовито в сыром " -"виде." - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "тестовый галлюциногенный мускатный орех" -msgstr[1] "тестовый галлюциногенный мускатный орех" -msgstr[2] "тестовый галлюциногенный мускатный орех" -msgstr[3] "тестовый галлюциногенный мускатный орех" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "" -"Из-за большого содержания психоактивного миристицина, высокие дозы " -"мускатного ореха могут вызвать галлюцинации и эйфорию, а также множество " -"неприятных побочных эффектов." - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "тестовое яблоко" -msgstr[1] "тестовых яблока" -msgstr[2] "тестовых яблок" -msgstr[3] "тестовые яблоки" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "" -"Яблоко для отладки. Внутри может оказаться червячок, но на вкус что надо!" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "тестовая жидкость" -msgstr[1] "тестовая жидкость" -msgstr[2] "тестовая жидкость" -msgstr[3] "тестовая жидкость" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do" -" not drink!" -msgstr "" -"Непонятно, что это, но что-то явно жидкое. Не пить, только для отладки!" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "муст из мячиков для тенниса" -msgstr[1] "муст из мячиков для тенниса" -msgstr[2] "муст из мячиков для тенниса" -msgstr[3] "муст из мячиков для тенниса" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "" -"Неферментированное вино из мячиков для тенниса. Тягучий варёный сок из " -"порезанных мячиков для тенниса." - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "тестовое вино из мячиков для тенниса" -msgstr[1] "тестовое вино из мячиков для тенниса" -msgstr[2] "тестовое вино из мячиков для тенниса" -msgstr[3] "тестовое вино из мячиков для тенниса" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "" -"Дешёвая выпивка из забродивших теннисных мячиков. На вкус так, как это " -"звучит." - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "тестовая жевательная резинка" -msgstr[1] "тестовая жевательная резинка" -msgstr[2] "тестовая жевательная резинка" -msgstr[3] "тестовая жевательная резинка" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "" -"Удивительно бодрящая и утоляющая жажду жевательная резинка с вкусом черники." - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "тестовый мутировавший большой палец" -msgstr[1] "тестовых мутировавших больших пальца" -msgstr[2] "тестовых мутировавших больших пальцев" -msgstr[3] "тестовые мутировавшие большие пальцы" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "" -"Безобразный человеческий большой палец. Съесть его было бы невероятно " -"отвратительно, а ещё это может вызвать мутации." - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -60696,23 +60997,6 @@ msgstr[3] "алюминиевые банки" msgid "An aluminum can, like what soda comes in." msgstr "Алюминиевая банка, похожа на банку из-под газировки." -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "открытая алюминиевая банка" -msgstr[1] "открытые алюминиевые банки" -msgstr[2] "открытых алюминиевых банок" -msgstr[3] "открытые алюминиевые банки" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Алюминиевая банка, похожа на банку из-под газировки. Она вскрыта, и её не " -"так-то легко запечатать." - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -60724,29 +61008,12 @@ msgstr[3] "картонные пакеты" #. ~ Description for {'str': 'paper carton'} #: lang/json/GENERIC_from_json.py msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." +"A half gallon carton constructed of a paper, aluminum, and plastic laminate." " It has a threaded cap for easy resealing." msgstr "" "Двухлитровый коробчатый пакет из картона, алюминия и пластиковой выстилки. " "Имеется резьбовая пробка для лёгкого закрывания." -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "открытый картонный пакет" -msgstr[1] "открытых картонных пакета" -msgstr[2] "открытых картонных пакетов" -msgstr[3] "открытые картонные пакеты" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." -" This one is open and its contents will spoil." -msgstr "" -"Двухлитровый коробчатый пакет из картона, алюминия и пластиковой выстилки. " -"Этот пакет открыт, и его содержимое испортится." - #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" msgid_plural "vacuum-packed bags" @@ -60773,23 +61040,6 @@ msgstr[3] "маленькие консервные банки" msgid "A small tin can, like what tuna comes in." msgstr "Маленькая консервная банка, примерно как из под сельди." -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "открытая маленькая консервная банка" -msgstr[1] "открытые маленькие консервные банки" -msgstr[2] "открытых маленьких консервных банок" -msgstr[3] "открытые маленькие консервные банки" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Жестяная консервная банка, примерно как из под сельди. Она вскрыта, и её не " -"так-то легко запечатать." - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -60803,23 +61053,6 @@ msgstr[3] "средние консервные банки" msgid "A medium tin can, like what soup comes in." msgstr "Консервная банка средних размеров, примерно такая, как из под супа." -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "открытая средняя консервная банка" -msgstr[1] "открытые средние консервные банки" -msgstr[2] "открытых средних консервных банок" -msgstr[3] "открытые средние консервные банки" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Жестяная консервная банка средних размеров, примерно такая, как из под супа." -" Она вскрыта, и её не так-то легко запечатать." - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -60913,19 +61146,6 @@ msgstr[3] "пластиковые стаканчики" msgid "A small, vacuum formed cup." msgstr "Небольшой одноразовый стаканчик из пластика." -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "открытый пластиковый стаканчик" -msgstr[1] "открытых пластиковых стаканчика" -msgstr[2] "открытых пластиковых стаканчиков" -msgstr[3] "открытые пластиковые стаканчики" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "Небольшой одноразовый стаканчик. По сути — хлам." - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -61145,7 +61365,6 @@ msgstr[2] "галлонных бутылок" msgstr[3] "галлонные бутылки" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "Стандартный пластиковый бидон для молока и бытовой химии." @@ -61274,7 +61493,6 @@ msgstr[2] "маленьких бурдюков" msgstr[3] "маленькие бурдюки" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of" @@ -61439,23 +61657,6 @@ msgid "" msgstr "" "Большая жестяная банка, в каких хранятся бобы. Вмещает довольно много еды." -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "открытая большая консервная банка" -msgstr[1] "открытые большие консервные банки" -msgstr[2] "открытых больших консервных банок" -msgstr[3] "открытые большие консервные банки" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "" -"Большая жестяная банка, в каких хранятся бобы. Она вскрыта, и её не так-то " -"легко запечатать." - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -62105,6 +62306,42 @@ msgstr[3] "куски хитина" msgid "A piece of an insect's exoskeleton. It is light and very durable." msgstr "Кусок панциря насекомого. Лёгкий и очень прочный." +#: lang/json/GENERIC_from_json.py +msgid "strand of endochitin" +msgid_plural "strands of endochitin" +msgstr[0] "прядь эндохитина" +msgstr[1] "пряди эндохитина" +msgstr[2] "прядей эндохитина" +msgstr[3] "пряди эндохитина" + +#. ~ Description for {'str': 'strand of endochitin', 'str_pl': 'strands of +#. endochitin'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of an insect's endoskeleton." +msgstr "Кусок панциря насекомого" + +#: lang/json/GENERIC_from_json.py +msgid "cluster of gas sacs" +msgid_plural "clusters of gas sacs" +msgstr[0] "гроздь газовых мешков" +msgstr[1] "грозди газовых мешков" +msgstr[2] "гроздей газовых мешков" +msgstr[3] "грозди газовых мешков" + +#. ~ Description for {'str': 'cluster of gas sacs', 'str_pl': 'clusters of gas +#. sacs'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This is a cluster of membranous bubbles, each about the size of a grape, " +"retrieved from inside a mutant insect. They float like tiny helium " +"balloons, and are likely full of a lighter-than-air gas helping the bug to " +"fly." +msgstr "" +"Гроздь мембранных пузырей размером с виноградину, вырезанных из " +"внутренностей мутировавшего насекомого. Они парят, как шарики с гелием и " +"скорее всего наполнены каким-то газом легче воздуха, позволяющим насекомым " +"летать." + #: lang/json/GENERIC_from_json.py msgid "set of 100 ceramic disk" msgid_plural "ceramic disks" @@ -63703,8 +63940,8 @@ msgstr[1] "цветка лотоса" msgstr[2] "цветков лотоса" msgstr[3] "цветки лотоса" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -65510,6 +65747,19 @@ msgstr "" "Лазерная пушка, снятая с лазерной турели TX-5LR Цербер. Непригодна как " "оружие без необходимых деталей." +#: lang/json/GENERIC_from_json.py +msgid "bone armor kit" +msgid_plural "bone armor kits" +msgstr[0] "набор костяной брони" +msgstr[1] "набора костяной брони" +msgstr[2] "наборов костяной брони" +msgstr[3] "набор костяной брони" + +#. ~ Description for {'str': 'bone armor kit'} +#: lang/json/GENERIC_from_json.py +msgid "Bone plating made for a vehicle." +msgstr "Костяная броня для транспорта." + #: lang/json/GENERIC_from_json.py msgid "module template" msgid_plural "module templates" @@ -70748,10 +70998,10 @@ msgstr[3] "люцернские молоты" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with a spiked hammer head, a spike, and a hook " -"attached to a long stick." +"attached to a beefy wooden pole." msgstr "" -"Универсальное древковое оружие — шипастый молот, лезвие и крюк на длинном " -"шесте." +"Универсальное древковое оружие — шипастый молот, лезвие и крюк на прочном " +"деревянном шесте." #. ~ Description for {'str': 'lucerne hammer'} #: lang/json/GENERIC_from_json.py @@ -71225,7 +71475,6 @@ msgstr[2] "заострённых палок" msgstr[3] "заострённые палки" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "Простая деревянная палка, заточенная на одном конце." @@ -71345,7 +71594,7 @@ msgstr[3] "алебарды" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with an axe blade, a spike, and other fun things" -" attached to a long stick." +" attached to a long sturdy stick." msgstr "" "Универсальное древковое оружие, к длинному древку которого прикрепляются " "лезвие топора, шипы и другие весёлые вещи." @@ -71354,7 +71603,7 @@ msgstr "" #: lang/json/GENERIC_from_json.py msgid "" "This is a dull, cheaply made replica of a polearm with an axe blade, a " -"spike, and other fun things attached to a long stick." +"spike, and other fun things attached to a thick pole." msgstr "" "Тупая и дешёвая подделка древкового оружия, к длинному древку которого " "прикрепляются лезвие топора, шипы и другие весёлые вещи." @@ -72144,23 +72393,6 @@ msgstr "" "холодное оружие из Индии в виде когтей, предназначенное для скрытого ношения" " в ладони." -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "цестус" -msgstr[1] "цестуса" -msgstr[2] "цестусов" -msgstr[3] "цестусы" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "" -"Обмотка из кожи для руки и ладони с металлическими вставками на костяшках " -"для улучшения силы удара и защиты." - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -72481,7 +72713,6 @@ msgstr[2] "труб" msgstr[3] "трубы" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -72757,7 +72988,15 @@ msgstr "" "Большой лист из прочного гибкого пластика. Когда-то такие применялись для " "коммерческой упаковки или обшивки дома от непогоды." -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "жёсткий пластиковый лист" +msgstr[1] "жёстких пластиковых листа" +msgstr[2] "жёстких пластиковых листов" +msgstr[3] "жёсткие пластиковые листы" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -73925,8 +74164,8 @@ msgstr[3] "самодельные глефы" #. ~ Description for {'str': 'makeshift glaive'} #: lang/json/GENERIC_from_json.py msgid "" -"This is a large blade attached to a long stick. It could do a considerable " -"amount of damage." +"This is a large blade attached to a stout section of tree branch. It could " +"do a considerable amount of damage." msgstr "" "Огромное лезвие, прикреплённое к длинной палке. Может нанести серьёзные " "повреждения." @@ -74148,6 +74387,27 @@ msgstr[3] "степлеры" msgid "A stapler for fastening sheets of paper together." msgstr "Степлер для сшивания листов бумаги вместе." +#: lang/json/GENERIC_from_json.py +msgid "hole puncher" +msgid_plural "hole punchers" +msgstr[0] "дырокол" +msgstr[1] "дыроколы" +msgstr[2] "дыроколы" +msgstr[3] "дыроколы" + +#. ~ Description for {'str': 'hole puncher'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This metal tool can help you punch a single hole in a piece of paper. I " +"mean, you could do more if you wanted, but you'd have to do them one at a " +"time. Or, if you really wanted more holes with one punch, I suppose you " +"could fold the paper… This is a one cylinder hole puncher." +msgstr "" +"Металлический инструмент, позволяющий пробить одну дырку в листе бумаги. То " +"есть можно и больше, если вы хотите, но по одной за раз. Или, если вы хотите" +" делать много дырок одним движением, сложите лист бумаги несколько раз…  В " +"общем, обычный одноцилиндровый дырокол." + #: lang/json/GENERIC_from_json.py msgid "pen" msgid_plural "pens" @@ -74488,6 +74748,24 @@ msgstr "" "транспортное средство, пока оно не начнёт держаться на воде. Потом " "прикрепите вёсла или мотор, чтобы лодка могла плавать." +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "часть корпуса из брёвен" +msgstr[1] "части корпуса из брёвен" +msgstr[2] "частей корпуса из брёвен" +msgstr[3] "части корпуса из брёвен" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" +"Связанные вместе брёвна для придания транспорту плавучести. Устанавливайте " +"детали корпуса на транспортное средство, пока оно не начнёт держаться на " +"воде. Потом прикрепите вёсла или мотор, чтобы лодка могла плавать." + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -75679,7 +75957,6 @@ msgstr[2] "листов металла" msgstr[3] "листы металла" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "Тонкий лист металла." @@ -75822,19 +76099,6 @@ msgstr[3] "набор биосилицированной хитиновой бр msgid "Durable silica-coated chitin plating made for a vehicle." msgstr "Крепкая, покрытая кремнием хитиновая броня для транспорта." -#: lang/json/GENERIC_from_json.py -msgid "bone armor kit" -msgid_plural "bone armor kits" -msgstr[0] "набор костяной брони" -msgstr[1] "набора костяной брони" -msgstr[2] "наборов костяной брони" -msgstr[3] "набор костяной брони" - -#. ~ Description for {'str': 'bone armor kit'} -#: lang/json/GENERIC_from_json.py -msgid "Bone plating made for a vehicle." -msgstr "Костяная броня для транспорта." - #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "shredder" msgid_plural "shredders" @@ -76190,8 +76454,8 @@ msgstr[1] "верстака" msgstr[2] "верстаков" msgstr[3] "верстаки" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and" @@ -77231,6 +77495,20 @@ msgstr[3] "надпричинные логические перестановщ msgid "It has given you an answer, but you are yet to ask anything." msgstr "Дает ответ на вопрос, который вы только собираетесь задать." +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "лист плетёного метаматериала" +msgstr[1] "листа плетёного метаматериала" +msgstr[2] "листов плетёного метаматериала" +msgstr[3] "листы плетёного метаматериала" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "Сложно закрученный и тщательно сплетённый лист радужных волокон." + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -77351,11 +77629,28 @@ msgstr[3] "сверхпроводящие электромагниты" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." +msgid "A powerful electromagnet made from a room temperature superconductor." msgstr "" "Мощный электромагнит из сверхпроводников, работающих при комнатной " "температуре." +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "ферромагнитная жидкость" +msgstr[1] "ферромагнитная жидкость" +msgstr[2] "ферромагнитная жидкость" +msgstr[3] "ферромагнитная жидкость" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." +msgstr "" +"Чёрная металлическая жидкость, гармонично перетекающая из одной фрактальной " +"формы в другую. " + #: lang/json/GENERIC_from_json.py msgid "composite alloy" msgid_plural "composite alloys" @@ -78159,6 +78454,19 @@ msgstr "" "Собрание древних хилланских мифов и фольклора. Раздел книги, описывающий " "исторические битвы, отмечен закладкой." +#: lang/json/GENERIC_from_json.py +msgid "Stormguard Warrior" +msgid_plural "Stormguard Warrior" +msgstr[0] "«Штормовой страж»" +msgstr[1] "книги «Штормовой страж»" +msgstr[2] "книг «Штормовой страж»" +msgstr[3] "книги «Штормовой страж»" + +#. ~ Description for {'str_sp': 'Stormguard Warrior'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Iron Heart discipline." +msgstr "Книга, содержащая учение дисциплины Железного Сердца." + #: lang/json/GENERIC_from_json.py msgid "The Life and Work of Tiger Sauer" msgid_plural "The Life and Work of Tiger Sauer" @@ -78176,6 +78484,80 @@ msgstr "" "Биография военного киборга, подробно описывающая его боевые искусства и " "взгляды на жизнь." +#: lang/json/GENERIC_from_json.py +msgid "Pocket Monster Encyclopedia" +msgid_plural "Pocket Monster Encyclopedia" +msgstr[0] "«Энциклопедия карманных монстров»" +msgstr[1] "копии «Энциклопедии карманных монстров»" +msgstr[2] "копий «Энциклопедии карманных монстров»" +msgstr[3] "копии «Энциклопедии карманных монстров»" + +#. ~ Description for {'str_sp': 'Pocket Monster Encyclopedia'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This encyclopedia contains a detailed listing of the strengths and " +"techniques of various fictional monsters and how to apply them the in a real" +" fight." +msgstr "" +"Эта энциклопедия содержит подробный список сильных сторон и приемов " +"различных вымышленных монстров и способы их применения в реальной битве." + +#: lang/json/GENERIC_from_json.py +msgid "Distant Horizon" +msgid_plural "Distant Horizon" +msgstr[0] "«Дальний горизонт»" +msgstr[1] "книги «Дальний горизонт»" +msgstr[2] "книг «Дальний горизонт»" +msgstr[3] "книги «Дальний горизонт»" + +#. ~ Description for {'str_sp': 'Distant Horizon'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Setting Sun discipline." +msgstr "Книга, содержащая учение дисциплины Заходящего Солнца." + +#: lang/json/GENERIC_from_json.py +msgid "Jedi Holocrons: Form I" +msgid_plural "Jedi Holocrons: Form I" +msgstr[0] "Голокрона джедаев: Первая форма" +msgstr[1] "Голокроны джедаев: Первая форма" +msgstr[2] "Голокрон джедаев: Первая форма" +msgstr[3] "Голокроны джедаев: Первая форма" + +#. ~ Description for {'str_sp': 'Jedi Holocrons: Form I'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This device contains the teachings of the first form of Jedi lightsaber " +"combat: Shii-Cho." +msgstr "" +"Устройство, содержащее принципы первой формы боя на световых мечах джедаев: " +"Шии-Чо." + +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "«Осколки гранита»" +msgstr[1] "копии «Осколки гранита»" +msgstr[2] "копий «Осколки гранита»" +msgstr[3] "копии «Осколки гранита»" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "Книга, содержащая учение дисциплины Каменного Дракона." + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "«Когти Пожинателя»" +msgstr[1] "копии «Когти Пожинателя»" +msgstr[2] "копий «Когти Пожинателя»" +msgstr[3] "копии «Когти Пожинателя»" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "Книга, содержащая учение дисциплины Тигриного Когтя." + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -78204,7 +78586,7 @@ msgstr[3] "светящаяся пыль" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." msgstr "" "Растёртые в пыль остатки физического тела блуждающего огонька. Они всё ещё " @@ -78370,7 +78752,7 @@ msgstr[3] "пыль из маны" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." +"Crystalized mana in powdered form. It faintly pulses with arcane energy." msgstr "" "Кристаллизованная мана в форме порошка. Она слабо светится от магической " "энергии. " @@ -80199,174 +80581,6 @@ msgid "" msgstr "" "Рама из орихалка. Заметно прочнее стали, но соответственно заметно дороже." -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "ТЕСТОВАЯ доска" -msgstr[1] "ТЕСТОВЫЕ доски" -msgstr[2] "ТЕСТОВЫХ досок" -msgstr[3] "ТЕСТОВЫЕ доски" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional" -" lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "" -"Узкая толстая деревянная доска примерно 5 на 10 сантиметров. Неплохое " -"оружие, а ещё годится для изготовления самых разных вещей." - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "ТЕСТОВАЯ труба" -msgstr[1] "ТЕСТОВЫЕ трубы" -msgstr[2] "ТЕСТОВЫХ труб" -msgstr[3] "ТЕСТОВЫЕ трубы" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "ТЕСТОВЫЙ лист металла" -msgstr[1] "ТЕСТОВЫХ листа металла" -msgstr[2] "ТЕСТОВЫХ листов металла" -msgstr[3] "ТЕСТОВЫЕ листы металла" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "ТЕСТОВАЯ 4.5л бутылка" -msgstr[1] "ТЕСТОВЫЕ 4.5л бутылки" -msgstr[2] "ТЕСТОВЫХ 4.5л бутылок" -msgstr[3] "ТЕСТОВЫЕ 4.5л бутылки" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "ТЕСТОВЫЙ маленький бурдюк" -msgstr[1] "ТЕСТОВЫХ маленьких бурдюка" -msgstr[2] "ТЕСТОВЫХ маленьких бурдюков" -msgstr[3] "ТЕСТОВЫЕ маленькие бурдюки" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "тестовый воздушный шар" -msgstr[1] "тестовых воздушных шара" -msgstr[2] "тестовых воздушных шаров" -msgstr[3] "тестовые воздушные шары" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "" -"Тянется, не пропускает воду и воздух - идеальный шарик для тестирования." - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "тестовая заострённая палка" -msgstr[1] "тестовые заострённые палки" -msgstr[2] "тестовых заострённых палок" -msgstr[3] "тестовые заострённые палки" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "ТЕСТОВЫЙ неудобный меч" -msgstr[1] "ТЕСТОВЫХ неудобных меча" -msgstr[2] "ТЕСТОВЫХ неудобных мечей" -msgstr[3] "ТЕСТОВЫЕ неудобные мечи" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "Плохо сбалансированный меч для тестирования кода" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "ТЕСТОВЫЙ обычный меч" -msgstr[1] "ТЕСТОВЫХ обычных меча" -msgstr[2] "ТЕСТОВЫХ обычных мечей" -msgstr[3] "ТЕСТОВЫЕ обычные мечи" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "Меч для тестирования кода" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "ТЕСТОВЫЙ меч с хорошим балансом" -msgstr[1] "ТЕСТОВЫХ меча с хорошим балансом" -msgstr[2] "ТЕСТОВЫХ мечей с хорошим балансом" -msgstr[3] "ТЕСТОВЫЕ мечи с хорошим балансом" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "Хорошо сбалансированный меч для тестирования кода" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "тестовая коробка" -msgstr[1] "тестовые коробки" -msgstr[2] "тестовых коробок" -msgstr[3] "тестовые коробки" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "" -"Обычная коробка объемом в 1 литр с намеренно неопределенными пропорциями." - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "тестовый 14 см жезл" -msgstr[1] "тестовых 14 см жезла" -msgstr[2] "тестовых 14 см жезлов" -msgstr[3] "тестовые 14 см жезлы" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "Тонкий жезл длиной ровно 14 см." - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "тестовый 15 см жезл" -msgstr[1] "тестовых 15 см жезла" -msgstr[2] "тестовых 15 см жезлов" -msgstr[3] "тестовые 15 см жезлы" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "Тонкий жезл длиной ровно 15 см." - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "тестовый ядерный графин" -msgstr[1] "тестовых ядерных графина" -msgstr[2] "тестовых ядерных графинов" -msgstr[3] "тестовые ядерные графины" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "" -"Тестовый ядерный графин, в котором атомные напитки становятся особенно " -"радиоактивными. Постоянно излучает радиацию." - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "ОРУЖИЕ" @@ -84520,34 +84734,6 @@ msgstr "" "Это маленький кристалл маны, специально разработанный для прикрепления к " "кончику волшебной палочки." -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "тестовая одноразовая батарейка" -msgstr[1] "тестовые одноразовые батарейки" -msgstr[2] "тестовых одноразовых батареек" -msgstr[3] "тестовые одноразовые батарейки" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test -#. disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "Тестовая одноразовая батарейка." - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "тестовый электрический аккумулятор" -msgstr[1] "тестовых электрических аккумулятора" -msgstr[2] "тестовых электрических аккумуляторов" -msgstr[3] "тестовые электрические аккумуляторы" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test -#. rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "Тестовая батарея, которую можно зарядить." - #: lang/json/MOD_INFO_from_json.py src/color.cpp src/color.cpp msgid "default" msgstr "по умолчанию" @@ -84563,10 +84749,14 @@ msgstr "Aftershock" #. ~ Description for Aftershock #: lang/json/MOD_INFO_from_json.py -msgid "Drifts the game away from realism and more towards sci-fi." +msgid "" +"Drifts the game away from realism and more towards sci-fi. Long term goal " +"of being a significantly different experience that remains compatible with " +"other mods." msgstr "" "Мод, двигающий игру в направлении меньшего реализма и большей " -"фантастичности." +"фантастичности. В дальней перспективе будет предлагать значительно " +"отличающийся опыт игры, по прежнему совместимый с другими модами." #: lang/json/MOD_INFO_from_json.py msgid "Blaze Industries" @@ -84612,11 +84802,13 @@ msgstr "Темные Небеса" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." msgstr "" -"Полноценная модификация игры, меняющая фокус Катаклизма на вторжение и " -"инопланетную оккупацию в духе XCOM 2. Используйте на свой страх и риск!" +"Полная конверсия, сдвигающая сюжет Катаклизма к истории инопланетной " +"оккупации. ЭТОТ МОД НАРУШИТ ФУНКЦИОНАЛЬНОСТЬ ДРУГИХ МОДОВ! ИСПОЛЬЗУЙТЕ " +"ДРУГИЕ МОДЫ НА СВОЙ СТРАХ И РИСК." #: lang/json/MOD_INFO_from_json.py msgid "DinoMod" @@ -84842,18 +85034,6 @@ msgstr "Характеристики за навыки" msgid "Allows stats to raise via skill progression." msgstr "Позволяет характеристикам повышаться при росте навыков." -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "ТЕСТОВЫЕ ДАННЫЕ" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "" -"Добавляет абстрактные предметы, рецепты и прочее, необходимое для " -"автоматических тестов." - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "Городская застройка" @@ -87358,6 +87538,20 @@ msgstr "" " этой извращенной аномалии из плоти. Глаза на всех головах беспорядочно " "шныряют по сторонам, а рты сливаются в хоре стона и визга." +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "человек" +msgstr[1] "человека" +msgstr[2] "человек" +msgstr[3] "человек" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "" +"Это псевдовещь для человеческих трупов. Если вы ее видите, значит это баг." + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -90115,6 +90309,23 @@ msgstr "" msgid "Lightning arcs from the leech stalk!" msgstr "Молния бьет из стебля пиявочника!" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "сигнальное дерево" +msgstr[1] "сигнальных дерева" +msgstr[2] "сигнальных деревьев" +msgstr[3] "сигнальные деревья" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "" +"Тянущийся высоко в небо ствол, чьи верхние ветви светятся желтым светом. " +"Низкий рокот периодически сотрясет его окрестности." + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -90909,6 +91120,122 @@ msgstr "" " У его облика поразительные детали, но от скованных движений вам правда не " "по себе. Конец света не помешал ему искать пациента, которому нужна помощь." +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "саблезомби" +msgstr[1] "саблезомби" +msgstr[2] "саблезомби" +msgstr[3] "саблезомби" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" +"Глаза этой пумы сочатся чёрной маслянистой жидкостью, а её мех разорван и " +"покрыт глубокими гнойными ранами. Её ногти и зубы и когти неестественно " +"удлинены, превратившись в опасно выглядящие острые копья." + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "медведь-скелет" +msgstr[1] "медведя-скелета" +msgstr[2] "медведей-скелетов" +msgstr[3] "медведи-скелеты" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo" +" seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" +"Чудовищное разрастание окостеневшей ткани заменило гниющую кожу зомби " +"органической броней из плотных костей. Большие сгустки чёрной слизи сочатся " +"из сочленений. Оно издаёт отвратительные щелчки, когда двигается." + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "теневой кот" +msgstr[1] "теневых кота" +msgstr[2] "теневых котов" +msgstr[3] "теневые коты" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" +"Сверхъестественная тень окружает это существо, как будто сам свет отражается" +" от него. Вы можете разглядеть только дрожащий контур, похожий на огромного " +"кота." + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "кислотный медвезомби" +msgstr[1] "кислотных медвезомби" +msgstr[2] "кислотных медвезомби" +msgstr[3] "кислотные медвезомби" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "" +"Болезненного вида мертвый чёрный медведь с драной шерстью. Его кожа выглядит" +" необычайно тонкой, видно, как по его венам течёт жёлтая липкая жидкость." + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "рогатый молотобой" +msgstr[1] "рогатых молотобоя" +msgstr[2] "рогатых молотобоев" +msgstr[3] "рогатые молотобои" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" +"Глаза этого бывшего когда-то лосём монстра сочатся чёрной маслянистой " +"жидкостью, а его плоть разорвана и вся в шрамах. Все его тело вздуто " +"растянутыми мышцами и опухшими гнойными ранами." + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "шипастый медведь-ползун" +msgstr[1] "шипастых медведя-ползуна" +msgstr[2] "шипастых медведей-ползунов" +msgstr[3] "шипастые медведи-ползуны" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" +"То, что когда-то было большим лосем, теперь покрыто длинными спутанными " +"волосами, скрученными между собой колючими лозами, уходящими в тело. Длинные" +" переплетенные шипы покрывают рога, источая таинственную серебристую " +"жидкость." + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -94419,6 +94746,23 @@ msgstr "" "Массивный, похожий на носорога динозавр с костяным гребнем, из которого " "растут три больших рога." +#: lang/json/MONSTER_from_json.py +msgid "Triceratops bio-operator" +msgid_plural "Triceratops bio-operator" +msgstr[0] "трицератопс био-оперативник" +msgstr[1] "трицератопса био-оперативника" +msgstr[2] "трицератопсов био-оперативников" +msgstr[3] "трицератопсы био-оперативники" + +#. ~ Description for {'str_sp': 'Triceratops bio-operator'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive three-horned four-legged dinosaur dotted with crackling bionics. " +"The horns glow menacingly." +msgstr "" +"Массивный трехрогий четырехногий динозавр, покрытый щёлкающей бионикой. Рога" +" угрожающе светятся." + #: lang/json/MONSTER_from_json.py msgid "Stegosaurus" msgid_plural "Stegosaurus" @@ -94432,7 +94776,7 @@ msgstr[3] "стегозавры" msgid "" "A large slow quadruped dinosaur with plates on its back, and a spiked tail." msgstr "" -"Большой и мделительный четвероногий динозавр с пластинами на спине и хвостом" +"Большой и медлительный четвероногий динозавр с пластинами на спине и хвостом" " с шипами." #: lang/json/MONSTER_from_json.py @@ -94452,6 +94796,24 @@ msgstr "" "Этот динозавр выглядит как гигантский доисторический броненосец. На конце " "его хвоста находится массивная костяная булава с шипами." +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus" +msgid_plural "Apatosaurus" +msgstr[0] "апатозавр" +msgstr[1] "апатозавра" +msgstr[2] "апатозавров" +msgstr[3] "апатозавры" + +#. ~ Description for {'str_sp': 'Apatosaurus'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur with a long, whip-like tail. The" +" head is upright and the neck looks like it would make a good strong club." +msgstr "" +"Массивный четвероногий динозавр с длинной шеей и длинным хвостом, похожим " +"накнут. Голова поднята высоко вверх, а шея выглядит так, как будто её можно " +"использовать в качестве дубины." + #: lang/json/MONSTER_from_json.py msgid "Ceratosaurus" msgid_plural "Ceratosaurus" @@ -94744,6 +95106,154 @@ msgstr[1] "детеныша динозавра пурпурно-зеленого msgstr[2] "детенышей динозавра пурпурно-зеленого цвета" msgstr[3] "детеныши динозавра пурпурно-зеленого цвета" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "грибной зомби-спинозавр" +msgstr[1] "грибных зомби-спинозавра" +msgstr[2] "грибных зомби-спинозавров" +msgstr[3] "грибные зомби-спинозавры" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" +"Когда-то это было хищным динозавром с головой, похожей на крокодилью и " +"плавником на спине. Теперь грибные усики растут из его рта, глаз и других " +"отверстий, превращая его в огромную неловко переваливающаяся массу из " +"покрытой плесенью плоти." + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "грибной тираннозомби рекс" +msgstr[1] "грибных тираннозомби рекса" +msgstr[2] "грибных тираннозомби рексов" +msgstr[3] "грибные тираннозомби рексы" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "" +"Когда-то это было королём динозавров. Теперь грибные усики растут из его " +"рта, глаз и других отверстий, превращая его в огромную неловко " +"переваливающаяся массу из покрытой плесенью плоти." + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "грибной дейноних-зомби" +msgstr[1] "грибных дейнониха-зомби" +msgstr[2] "грибных дейнонихов-зомби" +msgstr[3] "грибные дейнонихи-зомби" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" +"Когда-то это было пернатым хищным динозавром среднего размера. Теперь " +"грибные усики растут из его рта, глаз и других отверстий, превращая его в " +"огромную неловко переваливающаяся массу из покрытой плесенью плоти." + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "зомби-галлимим" +msgstr[1] "зомби-галлимима" +msgstr[2] "зомби-галлимимов" +msgstr[3] "зомби-галлимимы" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "" +"Покачивающийся труп средних размеров двуногого динозавра, покрытый " +"ободранным оперением и черной жижей." + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "зомби-пахи" +msgstr[1] "зомби-пахи" +msgstr[2] "зомби-пахи" +msgstr[3] "зомби-пахи" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" +"Покачивающийся труп средних размеров двуногого динозавра, покрытый " +"ободранным оперением и черной жижей. Выглядит как страус-рептилия с круглой " +"прочной головой." + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "зомби-кампто" +msgstr[1] "зомби-кампто" +msgstr[2] "зомби-кампто" +msgstr[3] "зомби-кампто" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs," +" broad shoulders and a pointed beak. Its tattered feathers are stained with" +" black, sticky liquid." +msgstr "" +"Покачивающийся труп большого двуногого динозавра с мощными ногами, широкими " +"плечами и острым клювом, покрытый ободранным оперением и черной жижей." + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus zombie" +msgid_plural "Spinosaurus zombies" +msgstr[0] "зомби-спинозавр" +msgstr[1] "зомби-спинозавра" +msgstr[2] "зомби-спинозавров" +msgstr[3] "зомби-спинозавры" + +#. ~ Description for {'str': 'Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Enormous putrid dinosaur corpse with a ferocious crocodile-like head, oozing" +" black eyes, and a tattered sail on its back." +msgstr "" +"Огромный гниющий труп динозавра со свирепой крокодилоподобной головой, " +"сочащимися черным глазами и изодранным плавником на спине." + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "теневой зомби-спинозавр" +msgstr[1] "теневых зомби-спинозавра" +msgstr[2] "теневых зомби-спинозавров" +msgstr[3] "теневые зомби-спинозавры" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "" +"Жутковатая тень охватывает этого динозавра. Вы можете разглядеть силуэт " +"большого двуногого динозавра с разодранным плавником. У него длинная голова " +"и V-образная морда." + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -94758,14 +95268,176 @@ msgid "Massive piles of ragged, stinking flesh lifting enormous teeth." msgstr "Огромная груда рваной, зловонной плоти, щерящейся огромными зубами." #: lang/json/MONSTER_from_json.py -msgid "Z-Deinonychus" -msgid_plural "Z-Deinonychus" -msgstr[0] "Z-дейноних" -msgstr[1] "Z-дейнониха" -msgstr[2] "Z-дейнонихов" -msgstr[3] "Z-дейнонихи" +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "теневой тираннозомби рекс" +msgstr[1] "теневых тираннозомби рекса" +msgstr[2] "теневых тираннозомби рексов" +msgstr[3] "теневые тираннозомби рексы" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with feathery edges. The head looks big, lots of big" +" teeth would fit in it." +msgstr "" +"Жутковатая тень охватывает этого динозавра. Вы можете разглядеть силуэт " +"большого двуногого динозавра с подобием ободранного оперения. У него большая" +" голова с кучей зубов в пасти." + +#: lang/json/MONSTER_from_json.py +msgid "S-Rex" +msgid_plural "S-Rexes" +msgstr[0] "скелетозавр-рекс" +msgstr[1] "скелетозавр-рекса" +msgstr[2] "скелетозавр-рексов" +msgstr[3] "скелетозавр-рексы" -#. ~ Description for {'str_sp': 'Z-Deinonychus'} +#. ~ Description for {'str': 'S-Rex', 'str_pl': 'S-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Monstrous columns of dense bone lifting enormous sharp pointed teeth " +"dripping with black goo." +msgstr "" +"Чудовище из плотных костей, щерящееся с высоты огромными бритвенными зубами," +" с которых капает чёрная слизь." + +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" +msgstr[0] "зомби-альбертозавр" +msgstr[1] "зомби-альбертозавра" +msgstr[2] "зомби-альбертозавров" +msgstr[3] "зомби-альбертозавры" + +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "" +"Покачивающийся труп динозавра с массивной челюстью, источающей чёрную " +"жидкость, и длинными когтями для хватания жертвы." + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "Трицераптеррор" +msgstr[1] "Трицераптеррора" +msgstr[2] "Трицераптерроров" +msgstr[3] "Трицераптерроры" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "" +"Массивный, похожий на носорога качающийся труп динозавра с костяным гребнем," +" из которого растут три больших рога. Из его глаз течёт нечто, похожее на " +"густые чёрные слёзы." + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "зомби-стегозавр" +msgstr[1] "зомби-стегозавра" +msgstr[2] "зомби-стегозавров" +msgstr[3] "зомби-стегозавры" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" +"Большой и медлительный качающийся труп четвероногого динозавра с пластинами " +"на спине и резко покачивающимся хвостом с шипами." + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" +msgstr[0] "зомби-анкилозавр" +msgstr[1] "зомби-анкилозавра" +msgstr[2] "зомби-анкилозавров" +msgstr[3] "зомби-анкилозавры" + +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "" +"Покачивающийся труп динозавра, выглящий как гигантский доисторический " +"броненосец с отваливающимися пластинми брони и блестящими чёрными глазами. " +"На конце его хвоста находится массивная костяная булава с шипами." + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" +msgstr[0] "зомби-апатозавр" +msgstr[1] "зомби-апатозавра" +msgstr[2] "зомби-апатозавров" +msgstr[3] "зомби-апатозавры" + +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "" +"Массивный четвероногий труп динозавра с длинной шеей и длинным хвостом, " +"похожим накнут. Голова поднята высоко вверх, а шея выглядит так, как будто " +"её можно использовать в качестве дубины." + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "зомби-дракон" +msgstr[1] "зомби-дракона" +msgstr[2] "зомби-драконов" +msgstr[3] "зомби-драконы" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "" +"Огромный зомби, покрытый чешуёй, костяными шипами и двигающийся с пугающей " +"скоростью. Его цветастые рога ободраны и покрыты грязью, а его светлая чешуя" +" и костяные наросты заметно повреждены." + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "зомби-аллозавр" +msgstr[1] "зомби-аллозавра" +msgstr[2] "зомби-аллозавров" +msgstr[3] "зомби-аллозавры" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "" +"Большой, покачивающийся труп хищного двуногого динозавра с тигриными " +"полосами на широкой чешуйчатой спине." + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus zombie" +msgid_plural "Deinonychus zombies" +msgstr[0] "дейноних-зомби" +msgstr[1] "дейнониха-зомби" +msgstr[2] "дейнонихов-зомби" +msgstr[3] "дейнонихи-зомби" + +#. ~ Description for {'str': 'Deinonychus zombie'} #: lang/json/MONSTER_from_json.py msgid "" "The shuffling corpse of a medium-sized bipedal dinosaur covered with " @@ -94776,6 +95448,94 @@ msgstr "" "ободранным оперением и черной жижей. На каждой ноге растёт большой " "серповидный коготь." +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "теневой дейноних-зомби" +msgstr[1] "теневых дейнониха-зомби" +msgstr[2] "теневых дейнонихов-зомби" +msgstr[3] "теневые дейнонихи-зомби" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" +"Жутковатая тень охватывает этого динозавра. Вы можете разглядеть силуэт " +"динозавра среднего размера с подобием ободранного оперения. На каждой ноге " +"растёт большой серповидный коготь." + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "зомби-ютараптор" +msgstr[1] "зомби-ютараптора" +msgstr[2] "зомби-ютарапторов" +msgstr[3] "зомби-ютарапторы" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms," +" a long tail, and long sharp scythe-like claws." +msgstr "" +"Покачивающийся и мечущийся труп большого двуногого динозавра с перьями на " +"передних лапах, длинным хвостом и длинными, острыми серпообразными когтями." + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "зомби-паразауролоф" +msgstr[1] "зомби-паразауролофа" +msgstr[2] "зомби-паразауролофов" +msgstr[3] "зомби-паразауролофы" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "" +"Огромный пёстрый динозавр с тупым головным гребнем, мёртвый и бредущий с " +"пустым взглядом и раздувшимися глазами." + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "зомби-диморфодон" +msgstr[1] "зомби-диморфодона" +msgstr[2] "зомби-диморфодонов" +msgstr[3] "зомби-диморфодоны" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "" +"Ободранный труп когда-то летающей рептилии ростом чуть меньше метра с " +"короткими крыльями и крупным цветастым клювом." + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "зомби-дилофозавр" +msgstr[1] "зомби-дилофозавра" +msgstr[2] "зомби-дилофозавров" +msgstr[3] "зомби-дилофозавры" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent" +" bony crests on its head with ragged strips of ripped flesh hanging down " +"like a frill." +msgstr "" +"Средних размеров труп динозавра с острыми зубами и двумя костяными гребнями " +"на его голове и полосками оторванной плоти, свисающей подобно кружевам." + #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" msgid_plural "improvised SMG turrets" @@ -95761,23 +96521,6 @@ msgstr "" "вспомогательных самодостаточных войск, предназначенных для беспроблемной " "интеграции с традиционными войсками." -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "мумия из туалетной бумаги" -msgstr[1] "мумии из туалетной бумаги" -msgstr[2] "мумий из туалетной бумаги" -msgstr[3] "мумии из туалетной бумаги" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper -#. mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "" -"Человекоподобное создание, запутанное в нечто, напоминающее множество слоев " -"туалетной бумаги." - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -96280,23 +97023,6 @@ msgstr "" "Самодельная броня — нагривник, нагрудник и накрупник из демонического " "хитина, прикреплённого к тонкой сетке. Можно надеть на дружественную лошадь." -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "бронекотожилет" -msgstr[1] "бронекотожилета" -msgstr[2] "бронекотожилетов" -msgstr[3] "бронекотожилеты" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "" -"Облегченная и маловесная кевларовая упряжь для кошек с защитным капюшоном и " -"нагрудником. Включает очень маленький, неудобный карман с липучкой на спине." - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "млекопитающее" @@ -97051,6 +97777,24 @@ msgstr "" "Это псевдозаклинание срабатывает при активации черепной бомбы. Скорее всего," " смертельно." +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "Отдача черепной пушки" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" +"Это псевдозаклинание срабатывает при активации черепной пушки. Может быть " +"смертельно в критической ситуации." + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "Ваша голова дёргается назад из-за силы выстрела." + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "пси-оглушение" @@ -97476,8 +98220,8 @@ msgstr "Отталкивает все предметы наружу." msgid "Debug Full Protection" msgstr "Отладочная Полная защита" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "Ничто не может нанести вам вред." @@ -97993,10 +98737,10 @@ msgstr "Вызывает 4 демонических паучков навсег msgid "Jolt" msgstr "Разряд" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py lang/json/mutation_category_from_json.py msgid "a crackle" msgstr "потрескивание" @@ -98069,6 +98813,33 @@ msgstr "Создает настоящий эффект светошумовой msgid "Wall of Fog" msgstr "Стена тумана" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "Аура отталкивающих разрядов" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "Это вспомогательное заклинание Ауры отталкивающих разрядов." + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "разряд электричества!" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "Отталкивающий разряд" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" +"Создаёт вокруг вас потрескивающую электрическими разрядами ауру, разящую " +"молниями атакующих вас." + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "Благословение" @@ -98190,72 +98961,44 @@ msgstr "" msgid "X-ray Vision" msgstr "Рентгеновское зрение" -#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py -msgid "Mana Siphon" -msgstr "Сифон маны" - -#. ~ Description for Mana Siphon -#: lang/json/SPELL_from_json.py -msgid "" -"This is the spell portion of the mana siphon series of mutations. If you " -"have this spell you probably debugged it in." -msgstr "" -"Это псевдозаклинание для серии мутации сифона маны. Если оно у вас есть, " -"скорее всего вы добавили его для отладки." - -#: lang/json/SPELL_from_json.py -msgid "Pew, Pew" -msgstr "Пыщь-пыщь" - -#. ~ Description for Pew, Pew -#: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." -msgstr "Вы целитесь в противника пальцем и издаете звуки «Пыщь-пыщь»." - #: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "Пол это лава" +msgid "Knock" +msgstr "Взлом" -#. ~ Description for The Floor is Lava +#. ~ Description for Knock #: lang/json/SPELL_from_json.py msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" -msgstr "Лучше заберитесь на стул или стол, потому что пол стал лавой!" +"You channel magic into a force capable of opening doors. This variant can " +"only open wooden doors." +msgstr "" +"Вы направляете магическую энергию, способную открывать двери. Этот вариант " +"заклинания может открывать только деревянные двери." #: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" -msgstr "Смонтированная нарезка тренировки" +msgid "Improved Knock" +msgstr "Улучшенный Взлом" -#. ~ Description for Sports Training Montage +#. ~ Description for Improved Knock #: lang/json/SPELL_from_json.py msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." +"You channel magic into a force capable of opening doors. This variant can " +"open any locked door." msgstr "" -"Когда чтобы научиться чему-то, нужно слишком много времени, а вы хотите " -"сразу получить результат, вам понадобится нарезка из моментов вашей " -"тренировки." - -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "Поцелуй бо-бо" - -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." -msgstr "Нежный поцелуй туда, где болит. Будто мама сделала." +"Вы направляете магическую энергию, способную открывать двери. Этот вариант " +"заклинания может открывать только любые двери." -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" -msgstr "Призыв мумии" +#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py +msgid "Mana Siphon" +msgstr "Сифон маны" -#. ~ Description for Summon Mummy +#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." +"This is the spell portion of the mana siphon series of mutations. If you " +"have this spell you probably debugged it in." msgstr "" -"Призывает хрупкое существо из тряпок, появляющееся из чулана вашей дущи." +"Это псевдозаклинание для серии мутации сифона маны. Если оно у вас есть, " +"скорее всего вы добавили его для отладки." #: lang/json/TOOLMOD_from_json.py msgid "reactor core expansion device" @@ -101270,34 +102013,42 @@ msgstr "" "владельца." #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" -msgstr[0] "малый пояс карманов" -msgstr[1] "малых пояса карманов" -msgstr[2] "малых поясов карманов" -msgstr[3] "малые пояса карманов" - -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser -#. Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater -#. Girdles of Pockets'} +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" +msgstr[0] "малый ремень измерений" +msgstr[1] "малых ремня измерений" +msgstr[2] "малых ремней измерений" +msgstr[3] "малые ремни измерений" + +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." msgstr "" -"Широкий облегающий талию пояс, покрыт множеством маленьких кармашков, " -"которые вмешают больше, чем кажется. А вес их содержимого значительно " -"уменьшается." +"Прочный облегающий талию пояс, покрыт множеством маленьких удобных " +"кармашков. Как и любые хранилища, использующие другие измерения, они вмещают" +" куда больше, чем должны, заметно уменьшая при этом вес содержимого." #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" -msgstr[0] "большой пояс карманов" -msgstr[1] "больших пояса карманов" -msgstr[2] "больших поясов карманов" -msgstr[3] "большие пояса карманов" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" +msgstr[0] "большой ремень измерений" +msgstr[1] "больших ремня измерений" +msgstr[2] "больших ремней измерений" +msgstr[3] "большие ремни измерений" + +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" +"Прочный и тяжёлый облегающий талию пояс, покрыт множеством маленьких удобных" +" кармашков. Как и любые хранилища, использующие другие измерения, они " +"вмещают куда больше, чем должны, заметно уменьшая при этом вес содержимого." #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" @@ -107159,13 +107910,11 @@ msgstr[3] "смартфоны" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "Вы активировали приложение «фонарик»." #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "Заряд смартфона слишком мал." @@ -108922,7 +109671,6 @@ msgstr[2] "пожарных топоров" msgstr[3] "пожарные топоры" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -108941,7 +109689,6 @@ msgstr[2] "пожарных багров" msgstr[3] "пожарные багры" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -109258,6 +110005,36 @@ msgstr "" "Плоский камень, присоединённый к палке, работает вполне сносно в качестве " "лопаты, но не сможет сравниться с настоящей лопатой." +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "металлические грабли" +msgstr[1] "металлических граблей" +msgstr[2] "металлических граблей" +msgstr[3] "металлические грабли" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "Прочные металлические грабли. Осенью без них никуда." + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "пластиковые грабли" +msgstr[1] "пластиковых граблей" +msgstr[2] "пластиковых граблей" +msgstr[3] "пластиковые грабли" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than" +" raking leaves." +msgstr "" +"Дешёвые пластиковые грабли. Быстро развалятся, если использовать их для чего" +" угодно, кроме уборки листьев." + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -109292,6 +110069,32 @@ msgstr "" "Инструмент для копания. Используйте лопату, чтобы окопать глубокими ямами " "ваше убежище." +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "снегоуборочная лопата" +msgstr[1] "снегоуборочные лопаты" +msgstr[2] "снегоуборочных лопат" +msgstr[3] "снегоуборочные лопаты" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "Прочный инструмент для уборки снега." + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "пластиковая снегоуборочная лопата" +msgstr[1] "пластиковые снегоуборочные лопаты" +msgstr[2] "пластиковых снегоуборочных лопат" +msgstr[3] "пластиковые снегоуборочные лопаты" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "Дешёвая пластиковая лопата для уборки снега." + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -110208,6 +111011,14 @@ msgstr "" "Портативная кузня, работающая на древесном угле. При наличии необходимых " "инструментов может использоваться для кузнечных работ." +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "Каменная кузня" +msgstr[1] "Каменные кузни" +msgstr[2] "Каменных кузен" +msgstr[3] "Каменные кузни" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -110381,6 +111192,22 @@ msgstr "" "Длинные металлические щипцы. Обычно используются для приготовления пищи или " "в металлообработке." +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "лист наждачной бумаги" +msgstr[1] "листа наждачной бумаги" +msgstr[2] "листов наждачной бумаги" +msgstr[3] "листы наждачной бумаги" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "" +"Лист бумаги с абразивным покрытием. Используется в металлообработке и " +"столярном деле." + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -110578,6 +111405,23 @@ msgstr "" " убережёт вас от соприкосновения с землёй и поможет легче заснуть. " "Используйте, чтобы развернуть и разместить на земле." +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "садовый шланг" +msgstr[1] "садовых шланга" +msgstr[2] "садовых шлангов" +msgstr[3] "садовые шланги" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "" +"Гибкий садовый шланг. Можно разрезать на части покороче и использовать при " +"создании предметов или для слива бензина из автомобилей." + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -112942,7 +113786,6 @@ msgstr[2] "тряпок" msgstr[3] "тряпки" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -113480,14 +114323,14 @@ msgstr "" "Электропила включена и создаёт много шума. Активируйте её, чтобы выключить." #: lang/json/TOOL_from_json.py -msgid "stone hand axe" -msgid_plural "stone hand axes" -msgstr[0] "каменное рубило" -msgstr[1] "каменных рубила" -msgstr[2] "каменных рубил" -msgstr[3] "каменные рубила" +msgid "stone axe head" +msgid_plural "stone axe heads" +msgstr[0] "каменная головка топора" +msgstr[1] "каменные головки топора" +msgstr[2] "каменных головок топора" +msgstr[3] "каменные головки топора" -#. ~ Description for {'str': 'stone hand axe'} +#. ~ Description for {'str': 'stone axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a broad piece of stone with an edge narrow enough to roughly chop " @@ -113497,14 +114340,14 @@ msgstr "" "скалывать дерево." #: lang/json/TOOL_from_json.py -msgid "metal hand axe" -msgid_plural "metal hand axes" -msgstr[0] "металлическое рубило" -msgstr[1] "металлических рубила" -msgstr[2] "металлических рубил" -msgstr[3] "металлические рубила" +msgid "metal axe head" +msgid_plural "metal axe heads" +msgstr[0] "металлическая головка топора" +msgstr[1] "металлические головки топора" +msgstr[2] "металлических головок топора" +msgstr[3] "металлические головки топора" -#. ~ Description for {'str': 'metal hand axe'} +#. ~ Description for {'str': 'metal axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a chunk of steel with one edge hammered down to something resembling" @@ -113660,6 +114503,14 @@ msgstr "" "кирпичей, но вы можете использовать её, чтобы обжигать любые предметы из " "глины." +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "Печь" +msgstr[1] "Печи" +msgstr[2] "Печей" +msgstr[3] "Печи" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -113865,7 +114716,6 @@ msgstr[2] "винтовых домкратов" msgstr[3] "винтовые домкраты" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "Портативный винтовой домкрат, используется для поднятия машин." @@ -114166,7 +115016,6 @@ msgstr[2] "отвёрток" msgstr[3] "отвёртки" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -114221,7 +115070,6 @@ msgstr[2] "паяльников" msgstr[3] "паяльники" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -114749,14 +115597,6 @@ msgstr "" "Это выключенный дрон-гончая. Если его включить, он двинется в направлении " "врага и будет подсвечивать его позицию мощным прожектором." -#: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" -msgstr[0] "паяльный набор" -msgstr[1] "паяльных набора" -msgstr[2] "паяльных наборов" -msgstr[3] "паяльные наборы" - #: lang/json/TOOL_from_json.py msgid "pseudo atomic butter churn" msgid_plural "pseudo atomic butter churns" @@ -114765,6 +115605,14 @@ msgstr[1] "псевдо атомные маслобойки" msgstr[2] "псевдо атомных маслобоек" msgstr[3] "псевдо атомные маслобойки" +#: lang/json/TOOL_from_json.py +msgid "precision solderers" +msgid_plural "precision solderers" +msgstr[0] "паяльный набор" +msgstr[1] "паяльных набора" +msgstr[2] "паяльных наборов" +msgstr[3] "паяльные наборы" + #: lang/json/TOOL_from_json.py msgid "atomic smartphone" msgid_plural "atomic smartphones" @@ -115025,6 +115873,27 @@ msgstr "" "можно разбирать простую бионику, но что-то более сложное все равно потребует" " более подходящих инструментов." +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "полный набор инструментов для работы с КБМ" +msgstr[1] "полных набора инструментов для работы с КБМ" +msgstr[2] "полных наборов инструментов для работы с КБМ" +msgstr[3] "полные наборы инструментов для работы с КБМ" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" +"Набор очень маленьких роботизированных инструментов и шифрованных цифровых " +"ключей, изначально созданный для разборки и проверки качества промышленно " +"произведённых КБМ. Усидчивый и хорошо подготовленный инженер с их помощью " +"сможет собрать новые бионические модули." + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -116156,6 +117025,83 @@ msgstr[1] "больших жезла конуса холода" msgstr[2] "больших жезлов конуса холода" msgstr[3] "большие жезлы конуса холода" +#: lang/json/TOOL_from_json.py +msgid "minor wand of knock" +msgid_plural "minor wands of knock" +msgstr[0] "малый жезл взлома" +msgstr[1] "малых жезла взлома" +msgstr[2] "малых жезлов взлома" +msgstr[3] "малые жезлы взлома" + +#. ~ Description for {'str': 'minor wand of knock', 'str_pl': 'minor wands of +#. knock'} +#. ~ Description for {'str': 'lesser wand of knock', 'str_pl': 'lesser wands +#. of knock'} +#. ~ Description for {'str': 'greater wand of knock', 'str_pl': 'greater wands +#. of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts knock." +msgstr "" +"Тонкая деревянная палочка с отсеком для кристалла маны у основания, " +"призывающая заклинание при активации. Эта палочка создаёт заклинание Взлома." + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of knock" +msgid_plural "lesser wands of knock" +msgstr[0] "меньший жезл взлома" +msgstr[1] "меньших жезла взлома" +msgstr[2] "меньших жезлов взлома" +msgstr[3] "меньшие жезлы взлома" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of knock" +msgid_plural "greater wands of knock" +msgstr[0] "большой жезл взлома" +msgstr[1] "больших жезла взлома" +msgstr[2] "больших жезлов взлома" +msgstr[3] "большие жезлы взлома" + +#: lang/json/TOOL_from_json.py +msgid "minor wand of improved knock" +msgid_plural "minor wands of improved knock" +msgstr[0] "малый жезл улучшенного взлома" +msgstr[1] "малых жезла улучшенного взлома" +msgstr[2] "малых жезлов улучшенного взлома" +msgstr[3] "малые жезлы улучшенного взлома" + +#. ~ Description for {'str': 'minor wand of improved knock', 'str_pl': 'minor +#. wands of improved knock'} +#. ~ Description for {'str': 'lesser wand of improved knock', 'str_pl': +#. 'lesser wands of improved knock'} +#. ~ Description for {'str': 'greater wand of improved knock', 'str_pl': +#. 'greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts improved knock." +msgstr "" +"Тонкая деревянная палочка с отсеком для кристалла маны у основания, " +"призывающая заклинание при активации. Эта палочка создаёт заклинание " +"Улучшенного Взлома." + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of improved knock" +msgid_plural "lesser wands of improved knock" +msgstr[0] "меньший жезл улучшенного взлома" +msgstr[1] "меньших жезла улучшенного взлома" +msgstr[2] "меньших жезлов улучшенного взлома" +msgstr[3] "меньшие жезлы улучшенного взлома" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of improved knock" +msgid_plural "greater wands of improved knock" +msgstr[0] "большой жезл улучшенного взлома" +msgstr[1] "больших жезла улучшенного взлома" +msgstr[2] "больших жезлов улучшенного взлома" +msgstr[3] "большие жезлы улучшенного взлома" + #: lang/json/TOOL_from_json.py msgid "disposable minor wand of magic missile" msgid_plural "disposable minor wands of magic missile" @@ -116384,6 +117330,83 @@ msgstr[1] "одноразовых больших посоха конуса хо msgstr[2] "одноразовых больших посохов конуса холода" msgstr[3] "одноразовые большие посохи конуса холода" +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of knock" +msgid_plural "disposable minor wands of knock" +msgstr[0] "одноразовый малый жезл взлома" +msgstr[1] "одноразовых малых жезла взлома" +msgstr[2] "одноразовых малых жезлов взлома" +msgstr[3] "одноразовые малые жезлы взлома" + +#. ~ Description for {'str': 'disposable minor wand of knock', 'str_pl': +#. 'disposable minor wands of knock'} +#. ~ Description for {'str': 'disposable lesser wand of knock', 'str_pl': +#. 'disposable lesser wands of knock'} +#. ~ Description for {'str': 'disposable greater wand of knock', 'str_pl': +#. 'disposable greater wands of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts knock." +msgstr "" +"Тонкая деревянная палочка с отсеком для кристалла маны у основания, " +"создающая заклинание при активации. Эта палочка создает заклинание взлома." + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of knock" +msgid_plural "disposable lesser wands of knock" +msgstr[0] "одноразовый меньший жезл взлома" +msgstr[1] "одноразовых меньших жезла взлома" +msgstr[2] "одноразовых меньших жезлов взлома" +msgstr[3] "одноразовые меньшие жезлы взлома" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of knock" +msgid_plural "disposable greater wands of knock" +msgstr[0] "одноразовый большой жезл взлома" +msgstr[1] "одноразовых больших жезла взлома" +msgstr[2] "одноразовых больших жезлов взлома" +msgstr[3] "одноразовые большие жезлы взлома" + +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of improved knock" +msgid_plural "disposable minor wands of improved knock" +msgstr[0] "одноразовый малый жезл улучшенного взлома" +msgstr[1] "одноразовых малых жезла улучшенного взлома" +msgstr[2] "одноразовых малых жезлов улучшенного взлома" +msgstr[3] "одноразовые малые жезлы улучшенного взлома" + +#. ~ Description for {'str': 'disposable minor wand of improved knock', +#. 'str_pl': 'disposable minor wands of improved knock'} +#. ~ Description for {'str': 'disposable lesser wand of improved knock', +#. 'str_pl': 'disposable lesser wands of improved knock'} +#. ~ Description for {'str': 'disposable greater wand of improved knock', +#. 'str_pl': 'disposable greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts improved knock." +msgstr "" +"Тонкая деревянная палочка с отсеком для кристалла маны у основания, " +"создающая заклинание при активации. Эта палочка создает заклинание " +"улучшенного взлома." + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of improved knock" +msgid_plural "disposable lesser wands of improved knock" +msgstr[0] "одноразовый меньший жезл улучшенного взлома" +msgstr[1] "одноразовых меньших жезла улучшенного взлома" +msgstr[2] "одноразовых меньших жезлов улучшенного взлома" +msgstr[3] "одноразовые меньшие жезлы улучшенного взлома" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of improved knock" +msgid_plural "disposable greater wands of improved knock" +msgstr[0] "одноразовый большой жезл улучшенного взлома" +msgstr[1] "одноразовых больших жезла улучшенного взлома" +msgstr[2] "одноразовых больших жезлов улучшенного взлома" +msgstr[3] "одноразовые большие жезлы улучшенного взлома" + #: lang/json/TOOL_from_json.py msgid "finger firelighter" msgid_plural "finger firelighters" @@ -116560,93 +117583,6 @@ msgstr "" " демонического паука для возможности переплавки слитков магических металлов " "в подходящие формы." -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "ТЕСТОВАЯ тряпка" -msgstr[1] "ТЕСТОВЫЕ тряпки" -msgstr[2] "ТЕСТОВЫХ тряпок" -msgstr[3] "ТЕСТОВЫЕ тряпки" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "ТЕСТОВЫЙ пожарный лом" -msgstr[1] "ТЕСТОВЫХ пожарных лома" -msgstr[2] "ТЕСТОВЫХ пожарных ломов" -msgstr[3] "ТЕСТОВЫЕ пожарные ломы" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "ТЕСТОВЫЙ пожарный топор" -msgstr[1] "ТЕСТОВЫХ пожарных топора" -msgstr[2] "ТЕСТОВЫХ пожарных топоров" -msgstr[3] "ТЕСТОВЫЕ пожарные топоры" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "ТЕСТОВАЯ отвертка" -msgstr[1] "ТЕСТОВЫЕ отвертки" -msgstr[2] "ТЕСТОВЫХ отверток" -msgstr[3] "ТЕСТОВЫЕ отвертки" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "ТЕСТОВАЯ ультразвуковая отвертка" -msgstr[1] "ТЕСТОВЫЕ ультразвуковые отвертки" -msgstr[2] "ТЕСТОВЫХ ультразвуковых отверток" -msgstr[3] "ТЕСТОВЫЕ ультразвуковые отвертки" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "Это ультразвуковая отвертка. Как обычная, только ультразвуковая." - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "ТЕСТОВЫЙ паяльник" -msgstr[1] "ТЕСТОВЫХ паяльника" -msgstr[2] "ТЕСТОВЫХ паяльников" -msgstr[3] "ТЕСТОВЫЕ паяльники" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "ТЕСТОВЫЙ винтовой домкрат" -msgstr[1] "ТЕСТОВЫХ винтовых домкрата" -msgstr[2] "ТЕСТОВЫХ винтовых домкратов" -msgstr[3] "ТЕСТОВЫЕ винтовые домкраты" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "тестовый смартфон" -msgstr[1] "тестовых смартфона" -msgstr[2] "тестовых смартфонов" -msgstr[3] "тестовые смартфоны" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "Работающий от УБП смартфон с камерой, фонариком и MP3 плеером." - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "тестовый коробок спичек" -msgstr[1] "тестовых коробка спичек" -msgstr[2] "тестовых коробков спичек" -msgstr[3] "тестовые коробки спичек" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "Тестовые спички - если нужно что-то поджечь во имя науки!" - #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" msgid_plural "yokes and harnesses" @@ -117099,14 +118035,42 @@ msgstr "И глубже нет пещеры" msgid "Freeman's favorite" msgstr "Любимая игрушка Фримена" +#: lang/json/achievement_from_json.py +msgid "Wield a crowbar" +msgstr "Взять в руки монтировку" + #: lang/json/achievement_from_json.py msgid "Impenetrable" msgstr "Непробиваемый" +#: lang/json/achievement_from_json.py +msgid "Wear a tank suit" +msgstr "Надеть костюм ходячего танка" + #: lang/json/achievement_from_json.py msgid "What are they hiding?" msgstr "Что они скрывают?" +#: lang/json/achievement_from_json.py +msgid "Enter a lab finale room" +msgstr "Войти в святую святых лаборатории" + +#: lang/json/achievement_from_json.py +msgid "The Last Homely House" +msgstr "Последний настоящий дом" + +#: lang/json/achievement_from_json.py +msgid "Reach a refugee center" +msgstr "Добраться до центра беженцев" + +#: lang/json/achievement_from_json.py +msgid "Return to your roots" +msgstr "Возвращение к корням" + +#: lang/json/achievement_from_json.py +msgid "Return to the location you started the game" +msgstr "Вернуться к месту, где вы начали игру" + #: lang/json/achievement_from_json.py msgid "Would-be Wizard" msgstr "Начинающий волшебник" @@ -117926,10 +118890,6 @@ msgstr "ртуть" msgid "mana energy" msgstr "энергия маны" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "пьянящие пары" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "Адреналиновый инициатор" @@ -119678,23 +120638,6 @@ msgstr "" msgid "Wind Turbines" msgstr "Ветровые турбины" -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "Точные паяльники" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" -"Ваши руки оснащены точными паяльниками, кусачками и катушками проводов. Они " -"слишком миниатюрные, чтобы пригодиться при изготовлении предметов, но в " -"отсутствие необходимых механизмов и инструментов они необходимы для создания" -" бионических модулей." - #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" msgstr "Складной гранатомёт" @@ -119755,6 +120698,23 @@ msgstr "" "который нужно проверять примерно раз в 30 дней. Вам нужно поскорее от этого " "избавиться." +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "Точные паяльники" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" +"Ваши руки оснащены точными паяльниками, кусачками и катушками проводов. Они " +"слишком миниатюрные, чтобы пригодиться при изготовлении предметов, но в " +"отсутствие необходимых механизмов и инструментов они необходимы для создания" +" бионических модулей." + #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" msgid_plural "Ionic Overload Generators" @@ -120108,7 +121068,7 @@ msgid "Merciful" msgstr "Милосердие" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp src/scenario.cpp msgid "All" msgstr "Все" @@ -122789,7 +123749,7 @@ msgstr "Вы едете верхом." msgid "You mount your steed." msgstr "Вы забираетесь на скакуна." -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "В огне" @@ -125329,74 +126289,6 @@ msgstr "Вы покрыты жвачкой!" msgid "The gum webs constrict your movement." msgstr "Паутина из жвачки сковывает ваши движения." -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "Отлажен" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" -"Вы были отлажены!\n" -"Теперь все работает как положено." - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "" -"Нырнув прямо в исходный код, вы нашли резиновую уточки и заговорили ее до " -"смерти." - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "Оптимизированный" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "Принцип минимакс" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "Все преимущества и никаких недостатков!" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "" -"Вы чувствуете, как ваши навыки растут во все стороны, словно в кривом " -"зеркале." - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "Оооо" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "Чо?" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "Вау!" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" -"Все слишком насыщено, чувак!\n" -"Вы дезориентированы и чувствуете себя потерянно." - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "!!насыщенность насыщается!!" - #: lang/json/faction_from_json.py msgid "Your Followers" msgstr "Ваши союзники" @@ -125610,6 +126502,19 @@ msgstr "" "Ватели - эксцентричная семья из Новой Англии. Хотя эксцентричная - это мягко" " сказано." +#: lang/json/faction_from_json.py +msgid "Swampers Religious Community and Hotels and Casinos" +msgstr "Религиозное сообщество Болотников и сеть отелей и казино" + +#. ~ Description for Swampers Religious Community and Hotels and Casinos +#: lang/json/faction_from_json.py +msgid "" +"A prosperous but secretive group of churchgoers and entertainment moguls " +"with an affection for dinosaurs. They welcome all untainted humans." +msgstr "" +"Процветающая, но скрытная группа религиозных поклонников и индустрии " +"развлечений с любовью к динозаврам. Они рады всем неизменённым людям." + #: lang/json/faction_from_json.py msgid "The Ancient Ones" msgstr "Древние" @@ -130274,6 +131179,95 @@ msgstr "" "Этот холодильник ещё больше переделан и обеспечивает намного более низкую " "температуру. Сперва его нужно снять с основания." +#: lang/json/furniture_from_json.py +msgid "sleep pod" +msgstr "капсула сна" + +#. ~ Description for sleep pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a climate controlled sleep pod. An easy way to reduce energy costs " +"in dense urban environments." +msgstr "" +"Капсула сна с климат-контролем. Легкий способ экономии энергии в плотной " +"городской застройке." + +#: lang/json/furniture_from_json.py +msgid "cryo pod" +msgstr "криокапсула" + +#. ~ Description for cryo pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a long term sleep pod. Cryo pods are mostly used by people waiting " +"a short term for organs or criminals avoiding heat right after a crime." +msgstr "" +"Капсула криосна. Обычно такие использовали для людей, ждущих пересадки " +"донорских органов или преступниками, пережидающими повышенный интерес со " +"стороны закона." + +#: lang/json/furniture_from_json.py +msgid "CRISPR Biolab" +msgstr "Биолаборатория CRISPR" + +#. ~ Description for CRISPR Biolab +#: lang/json/furniture_from_json.py +msgid "" +"A boxy looking device of arms, droppers and pipettes. It was used pre-" +"Cataclysm to do expirements in gene editing." +msgstr "" +"Угловатое устройство с манипуляторами, капельницами и пипетками. До " +"Катаклизма использовалось для экспериментов в генной инженерии." + +#: lang/json/furniture_from_json.py +msgid "3D printer" +msgstr "3D принтер" + +#. ~ Description for 3D printer +#: lang/json/furniture_from_json.py +msgid "" +"This box was used for rapid prototyping of products and for general " +"entertainment purposes in the masses." +msgstr "" +"Устройство для быстрого создания прототипов продуктов и просто развлечения." + +#: lang/json/furniture_from_json.py +msgid "neural net inserter" +msgstr "система установки нейронных сетей" + +#. ~ Description for neural net inserter +#: lang/json/furniture_from_json.py +msgid "" +"This device looks like a cross between some kind of nightmare dentistry " +"equipment and socketing tool mounted on a slide that lets it drop precisely " +"down. Useful for those project that require putting delicate items into " +"hard to reach spaces." +msgstr "" +"Устройство, выглядящее как нечто среднее между каким-то кошмарным " +"стоматологическим оборудованием и инструментом для установки розеток, " +"установленное на предметном стекле, которое позволяет ему точно выполнять " +"свои операции. Полезно для задач, которые требуют размещения деликатных " +"предметов в труднодоступных местах." + +#: lang/json/furniture_from_json.py +msgid "monomolecular saw" +msgstr "мономолекулярная пила" + +#. ~ Description for monomolecular saw +#: lang/json/furniture_from_json.py +msgid "" +"A wire the size of a cheescutter runs in a single direction in this tool, " +"allowing atomically precise cuts at almost any angle. Even unpowered it " +"gives off a visual distortion for several inches around it to prevent you " +"from losing a hand. It is impossible to deconstruct this device without the" +" wire self destructing." +msgstr "" +"Нить, длиной примерно как в сырорезке, натянута в этом инструменте и " +"позволяет делает разрезы атомарной точности практически под любым углом. " +"Даже при отключенном питании она выдаёт визуальные искажения на несколько " +"сантиметров вокруг нити, чтобы вы случайно не остались без конечности. Это " +"устройство невозможно разобрать без уничтожения нити." + #. ~ Description for dresser #: lang/json/furniture_from_json.py msgid "Dress yourself!" @@ -130683,8 +131677,7 @@ msgstr "" " — под патроны для дробовика. Оно сделано из труб и частей двухствольного " "дробовика." -#: lang/json/gun_from_json.py lang/json/gun_from_json.py -#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" msgstr "дробовик" @@ -130895,7 +131888,8 @@ msgstr "" "устройство, чуть более сложное, чем монтажная лента и электроника, он " "питается от стандартного УБП." -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py src/item.cpp +#: lang/json/gun_from_json.py lang/json/gun_from_json.py +#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py src/item.cpp msgctxt "gun_type_type" msgid "pistol" msgstr "пистолеты" @@ -135678,6 +136672,22 @@ msgstr "" "ножом. Сейчас уже не нужно расчищать окопы, но заражённый зомби городок тоже" " подойдет." +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "самодельный дробовик" +msgstr[1] "самодельных дробовика" +msgstr[2] "самодельных дробовиков" +msgstr[3] "самодельные дробовики" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "" +"Грубый дробовик - две толстые стальные трубы и заглушка с гвоздём. Из-за " +"отсутствия прицела эффективно только при стрельбе практически в упор." + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -136608,6 +137618,19 @@ msgstr "" msgid "trilaser" msgstr "трехлучевой лазер" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "бионическая черепная пушка" +msgstr[1] "бионические черепные пушки" +msgstr[2] "бионических черепных пушек" +msgstr[3] "бионические черепные пушки" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" +"Бионическая однозарядная подкожная пушка калибра .40, встроенная в череп." + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -137756,6 +138779,14 @@ msgstr "" "непрост в использовании, его можно более тонко настроить для большей " "надежности." +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "ударный дробовик" +msgstr[1] "ударных дробовика" +msgstr[2] "ударных дробовиков" +msgstr[3] "ударные дробовики" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -137864,26 +138895,6 @@ msgstr "" msgid "Fake gun that fires barbed javelins." msgstr "Оружие отладки, стреляет шипастыми дротиками." -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "ТЕСТОВЫЙ блочный лук" -msgstr[1] "ТЕСТОВЫХ блочных лука" -msgstr[2] "ТЕСТОВЫХ блочных луков" -msgstr[3] "ТЕСТОВЫЕ блочные луки" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "Тестовый Глок" -msgstr[1] "Тестовых Глока" -msgstr[2] "Тестовых Глоков" -msgstr[3] "Тестовые Глоки" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "Пистолет для тестирования на базе Глока 9мм." - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -140401,18 +141412,6 @@ msgstr "" "верхнюю часть оружия, заменяя механический прицел. Увеличивает точность и " "вес." -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "тестовый глушитель" -msgstr[1] "тестовых глушителя" -msgstr[2] "тестовых глушителей" -msgstr[3] "тестовые глушители" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "Оружейный глушитель для отладки." - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "Вы разделываете рыбу и снимаете с неё филе." @@ -140446,8 +141445,40 @@ msgstr "" "найти что-нибудь стоящее." #: lang/json/harvest_from_json.py -msgid "You laboriously dissect the colossal insect." -msgstr "Вы старательно разделываете огромное насекомое." +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "You laboriously dissect the colossal insect. " +msgstr "Вы старательно разделываете огромное насекомое. " + +#: lang/json/harvest_from_json.py +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"What appeared to be insect hairs on the chitin of this creature look more " +"like tiny feathers as you pare them back. Inside is a bundle of bubble-like" +" tissue sacs that appear to be floating, which doesn't fit with what you " +"know about real bees." +msgstr "" +"То, что казалось волосками насекомого на хитине этого создания, оказалось " +"больше похоже на перышки, когда вы их отделили. Внутри оказались грозди " +"пузырчатой ткани, которая словно парит. Это не похоже ни на что из того, что" +" вам известно о настоящих пчёлах." + +#: lang/json/harvest_from_json.py +msgid "" +"There's a faintly hairy, skin-like membrane, covered in blood vessels, " +"beneath the chitin of this creature. Inside it is a bundle of bubble-like " +"tissue sacs that appear to be floating, which doesn't fit with what you know" +" about real wasps." +msgstr "" +"Под хитином этого существа оказывается волосатая, похожая на кожу мембрана, " +"покрытая кровеносными сосудами. Внутри оказались грозди пузырчатой ткани, " +"которая словно парит. Это не похоже ни на что из того, что вам известно о " +"настоящих осах." #: lang/json/harvest_from_json.py msgid "You laboriously hack and dig through the remains of the fungal mass." @@ -143470,6 +144501,15 @@ msgstr "" msgid "This item can be used to communicate with radio waves." msgstr "Этот предмет можно использовать для общения посредством радиоволн." +#. ~ Please leave anything in unchanged. +#: lang/json/json_flag_from_json.py +msgid "" +"This item can be used to pick locks with zero " +"effort." +msgstr "" +"Этот предмет можно использовать для взлома замков без каких-либо усилий." + #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is designed to keep you dry in the rain." @@ -145822,6 +146862,15 @@ msgstr "Ловушка для зомби" msgid "Zombie trap." msgstr "Ловушка для зомби." +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "Камыши" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "Растительность у воды." + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -147153,6 +148202,11 @@ msgid "" msgstr "" "Похоронный сервис семьи Ватели. На службе Новой Англии уже триста лет." +#. ~ Computer name +#: lang/json/mapgen_from_json.py +msgid "DinoLab Operating Theater Controls" +msgstr "Управление операционной лаборатории динозавров" + #: lang/json/martial_art_from_json.py msgid "No style" msgstr "Без стиля" @@ -147454,6 +148508,25 @@ msgstr "" "Активирует техники «Круговой удар» и «Размашистый удар».\n" "Длится 3 хода." +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "Ритм капоэйры" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': +#. 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" +"Это не промах, а часть танца, а самое лучшее - он только начался!\n" +"\n" +"+ 15% дробящего урона.\n" +"Длится 2 хода. До 3 стеков." + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "Стиль журавля" @@ -147644,6 +148717,27 @@ msgstr "" "\n" "+2 Точность." +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "Комбинация эскримы" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': +#. 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" +"Вы можете произвести сильную атаку после критического попадания, если представится возможность.\n" +"\n" +"+15% ко всему урону.\n" +"Включает технику «Комбинированный удар».\n" +"Длится 3 хода. До 3 стеков." + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "Фехтование" @@ -147688,6 +148782,42 @@ msgstr "" "\n" "Блокируемый урон снижается на 50% Ловкости." +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "Парирование" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" +"Ваш следующий удар попадёт куда точнее после парирования.\n" +"\n" +"+1 к Точности.\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "Ремиз" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" +"Ваш финт идеально подходит для последующей разрушительной атаки!\n" +"\n" +"+1 к Точности.\n" +"Включает технику «Составной атаки».\n" +"Длится 1 ход." + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -147746,6 +148876,42 @@ msgstr "" "-2 попытки блока, +1 навык Уклонения, блокируемый урон увеличивается на 50% Силы.\n" "Длится 1 ход." +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "Переход от обороны" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" +"Каждый удачный блок открывает брешь в обороне противника.\n" +"\n" +"+1 к Точности.\n" +"Длится 1 ход. До 3 стеков." + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "Тактическое фехтование" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" +"Они купились на твой финт!\n" +"\n" +"Включает технику «Подцепить и дёрнуть».\n" +"Длится 1 ход." + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "Дзюдо" @@ -148037,6 +149203,39 @@ msgstr "" "\n" "+1 попытка Уклонения, блокируемый урон снижается на 50% Силы." +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "Отражение" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" +"Вы отразили удар врага, и теперь он открыт для контратаки!\n" +"\n" +"Включает техники «Широкий удар» и «Добивающий удар».\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "Убийство" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" +"Ваша удачная атака даёт вам шанс закончить бой прямо сейчас!\n" +"Включает технику «Жестокий удар».\n" +"Длится 1 ход." + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "Тайский бокс" @@ -148082,6 +149281,25 @@ msgstr "" "\n" "Блокируемый урон снижается на 50% Силы." +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "Решимость" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay +#. Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% of Strength.\n" +"Lasts 5 turns." +msgstr "" +"Попадание по вам вас не замедляет. Вы переживёте вашего противника в этой схватке.\n" +"\n" +"Дробящий урон увеличен на 25% СИЛ, блокированный рон уменьшается на 50% СИЛ.\n" +"Длится 5 ходов." + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "Ниндзюцу" @@ -148161,6 +149379,42 @@ msgstr "" "+1.0 к навыку Уклонения, точность возрастает на 20% Ловкости.\n" "Длится 1 ход." +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "Потеря неожиданности" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': +#. 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" +"Ваши намерения раскрылись! Вам понадобится несколько секунд для новой скрытой атаки.\n" +"\n" +"-50% ко всему урону.\n" +"Длится 3 хода." + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "План отступления" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" +"Ваша цель пала. Время покинуть бой и запланировать следующее нападение.\n" +"\n" +"+2 попытки уклонения, +10 к скорости.\n" +"Длится 3 хода." + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "Нитэн Ити-рю" @@ -148255,6 +149509,51 @@ msgstr "" "Активирует «Рассчитанный удар».\n" "Длится 1 ход." +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "Падающий лист" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" +"Правда как клинок.\n" +"Хотя время лечит боль.\n" +"Терпи и учись.\n" +"\n" +"-1.0 к Уклонению, -1 к дробящему урону, -1 к режущему урону.\n" +"Длится 1 ход. До 5 стеков." + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "Неподвижность" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" +"Как око бури,\n" +"Неуловим сей момент,\n" +"И вот он исчез.\n" +"\n" +"+2 к Точности, навык Уклонения увеличивается на 50% ВОС.\n" +"Длится 2 хода." + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "Панкратион" @@ -148434,6 +149733,25 @@ msgstr "" "\n" "Восприятие повышает точность вместо Ловкости. Точность повышается на 25% Восприятия, но снижается на 25% Ловкости." +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "Бросок змеи" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" +"Каждая змея ждёт идеального момента для нападения. Цельтесь, пока противник мешкает, и бейте его без жалости в слабое место!\n" +"\n" +"+1 к Точности, пробивание брони в 50% ВОС.\n" +"Длится 1 ход. До 3 стеков." + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "Содзюцу" @@ -148622,6 +149940,26 @@ msgstr "" "Точность увеличена на 20% от восприятия, дробящее пробивание брони равно 50% от восприятия.\n" "Длится 2 хода." +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "Скрещенные руки" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" +"Потратив мгновение, чтобы собраться, вы можете использовать всё тело для атаки и защиты.\n" +"\n" +"+1.0 к Уклонению, блокированный урон снижается на 50% ВОС.\n" +"Включает техники «Удар ладонью» и «Двойной удар ладонью».\n" +"Длится 3 хода." + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "Стиль тигра" @@ -148686,6 +150024,25 @@ msgstr "" "\n" "Точность увеличивается на 25% от силы, но уменьшается на 25% от ловкости." +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "Ярость Тигра" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" +"Каждая промашка противника даёт вам преимущество. Ваш следующий удар обойдёт защиту противника.\n" +"\n" +"Пробивание брони усилено на 25% СИЛ.\n" +"Длится 1 ход. До 2 стеков." + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "Винь-Чунь" @@ -148751,6 +150108,24 @@ msgstr "" "\n" " Навык уклонения увеличен на 15% от восприятия. Урон уменьшен на 50% от восприятия." +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "Биу Цзы" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch (Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" +"Идеально применив форму Удара Пальцами, вы можете бить по слабым местам противника, отгоняя его и следуя!\n" +"\n" +"Точность увеличена на 20% ВОС. Включает техники « Апперкот (отбрасывающий)» и «Левый хук (отбрасывающий)».\n" +"Длится 2 хода." + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "Цзуй-цюань" @@ -148887,6 +150262,36 @@ msgstr "" "+Сила дробящая броня, +Ловкость кислотная броня, +Интеллект электрическая " "броня, +Восприятие огненная броня." +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "Злость" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "Щас я до тебя доберусь… +2 дробящего урона на 2 хода. До 5 стеков." + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "Удар молнии" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2" +" times." +msgstr "" +"Молния бьёт дважды в одно место. +ВОС электрического урона на 3 хода. До 2 " +"стеков." + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "Вы жжёте! +5 урона огнём на 5 ходов." + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "Бионические приёмы борьбы" @@ -148935,6 +150340,28 @@ msgstr "" "\n" "+2 попытки Блока, +1 Точность." +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "Оптимизация" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic +#. Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 точность, +2 ко всему урону.\n" +"Длится 3 хода. До 3 стеков." + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "Стиль многоножки" @@ -148979,6 +150406,24 @@ msgstr "" "-4 стоимость движения.\n" "Длится 3 хода. Складывается 4 раза." +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "Яд Многоножки" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': +#. 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" +"Ваш яд поражает противника в самый удачный момент.\n" +"\n" +"+2 дробящего урона.\n" +"Длится 2 хода." + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "Стиль ящерицы" @@ -149127,6 +150572,24 @@ msgstr "" "Активирует технику «Удар клешнями».\n" "Складывается 2 раза. Длится 2 хода." +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "Устрашение Скорпиона" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': +#. 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" +"Мало что страшнее скорпиона в гневе. Ваши атаки держат врагов в ужасе.\n" +"\n" +"+1 попытка уклонения.\n" +"Длится 1 ход." + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "Стиль жабы" @@ -149190,6 +150653,42 @@ msgstr "" "-1 к защите от дробящего, режущего и колющего урона.\n" "Длится 6 ходов. До 6 стеков." +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "Медитация Жабы" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad +#. Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" +"На мгновение сконцентрировавшись, вы усиливаете стойкость вашей кожи.\n" +"\n" +"+3 к защите от дробящего, режущего и колющего урона.\n" +"Длится 2 хода." + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "Яд Жабы" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" +"Ваш яд - ещё одна демонстрация стойкости вашего тела.\n" +"\n" +"+2 дробящего урона.\n" +"Длится 5 ходов." + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "Стиль гадюки" @@ -149596,6 +151095,42 @@ msgstr "" "+1 попытка уклонения\n" "Длится 1 ход. До 2 стеков" +#: lang/json/martial_art_from_json.py +msgid "Quicksilver Motion" +msgstr "Быстрота ртути" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': +#. 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence combine to allow you to make a fast, bold move that catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." +msgstr "" +"В мгновение ока вы выполняете движение. Ваша скорость, рефлексы и бескомпромиссная уверенность вместе позволяют вам совершить быстрый, наглый манёвр, который застанет противника врасплох.\n" +"\n" +"+50 к скорости.\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "Разум выше тела" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond +#. Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" +"Ваша подготовка и ментальная стойкость позволяют вам использовать фокус, чтобы превзойти физическую угрозу.\n" +"\n" +"+1 к Точности.\n" +"Длится 1 ход. До 2 стеков." + #: lang/json/martial_art_from_json.py msgid "Hylian Swordsmanship" msgstr "Хилланский бой на мечах" @@ -149710,6 +151245,56 @@ msgstr "" "-25% цена хода.\n" "Длится 1 ход." +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "Усиленный удар" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" +"Потратив момент на подготовку, вы наносите кручёный, мощный удар!\n" +"\n" +"+20% урона, включает технику «Атака вращением».\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Iron Heart" +msgstr "Железное сердце" + +#. ~ Description for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Absolute mastery of the sword is the goal of the Iron Heart discipline. " +"Through unending practice and study, the Iron Heart adept achieves " +"superhuman skill with her weapons. Iron Heart maneuvers are demonstrations " +"of uncanny martial skill—weaving patterns of steel that dizzy, confuse, and " +"ultimately kill with no recourse." +msgstr "" +"Цель дисциплины Железного Сердца - абсолютное владение мечом. Благодаря " +"бесконечной практике и обучению адепт Железного Сердца достигает " +"сверхчеловеческого мастерства во владении своим оружием. Маневры Железного " +"Сердца - это демонстрация сверхъестественных боевых навыков - плетение " +"стальных узоров, которые кружат голову, путают и в конечном итоге убивают " +"без всякого милосердия." + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "You push away your fear and stand tall." +msgstr "Вы отталкиваете страж и поднимаете голову." + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s takes a bold and fearless stance." +msgstr "%s встаёт в уверенную и бесстрашную стойку." + #: lang/json/martial_art_from_json.py msgid "Panzer Kunst" msgstr "Panzer Kunst" @@ -149771,6 +151356,486 @@ msgstr "" "+5 дробящего пробития брони.\n" "Длится 2 хода." +#: lang/json/martial_art_from_json.py +msgid "Pokken" +msgstr "Поккен" + +#. ~ Description for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Pokken or \"Pocket Fist\" is a strange martial art developed from the famous" +" Pokemon video game series. Somehow, a group of dedicated fans managed to " +"combine the moves used by various pokemon with multiple existing martial " +"arts such as boxing and karate. Amazingly, it actually works. Some might " +"even say it's a super effective way to fight." +msgstr "" +"Поккен, или «карманный кулак» - странное искусство рукопашного боя, " +"основанное на знаменитой серии игр про покемонов. Каким-то образом группа " +"фанатов скомбинировала движения различных покемонов с техниками других " +"боевых искусств, например бокса и карате. На удивление, это оказалось " +"эффективным. Кто-то даже мог бы сказать, что это СУПЕР-ЭФФЕКТИВНО!" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "You get ready to battle." +msgstr "Вы готовитесь к бою." + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s is about to challenge someone to a battle." +msgstr "%s готовится вызвать кого-то на бой." + +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "Выносливость" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" +"Усиливает вашу защиту после попадания по вам.\n" +"\n" +"Добавляет броню. от режущего, дробящего, колющего урона в 50% СИЛ.\n" +"Длится 3 хода." + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "Меткость" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" +"Усиливает ваше техники после критического попадания.\n" +"\n" +"+50% урона.\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "Дерзость" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" +"Усиливает ваш урон после поражения противника.\n" +"\n" +"+50% урона.\n" +"Длится 3 хода." + +#: lang/json/martial_art_from_json.py +msgid "Setting Sun" +msgstr "Заходящее Солнце" + +#. ~ Description for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Setting Sun discipline teaches its initiates to turn their opponents' " +"strength against them. With a quick shift in stance and carefully aimed " +"attack, a Setting Sun warrior sends a charging enemy tumbling in a new " +"direction." +msgstr "" +"Дисциплина Заходящего Солнца учит своих посвященных направлять силы своих " +"противников против них. Быстро изменяя позицию и тщательно нацеливая атаки, " +"воин Заходящего Солнца может послать атакующего в непредсказуемом " +"направлении." + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "You shift your weight and prepare to defend yourself." +msgstr "Вы сдвигаете свой центр массы и готовитесь к обороне." + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s shifts their weight and assumes a new stance." +msgstr "%s сдвигается и встаёт в новую стойку." + +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "Путающая оборона" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and \"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" +"Вы намеренно сдвигаетесь, становясь в неудобную позицию, чтобы запутать противника.\n" +"\n" +"Навык Уклонения увеличивается на 20% ИНТ. Включает техники «Могучий бросок» и «Бросок Баллиста».\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "Притворное открытие" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" +"Намеренно ослабив оборону, вы заставляете противника растянуться, что даёт вам преимущество в следующей атаке!\n" +"\n" +"+20% Скорости.\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Shii-Cho" +msgstr "Шии-Чо" + +#. ~ Description for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Shii-Cho, \"The way of the Sarlacc\" was the first form lightsaber combat " +"developed by the Jedi during their transition from metal weaponry to " +"lightsabers. Shii-Cho is regarded as a training form that all Jedi learn to" +" understand the basics of armed combat. Shii-Cho excels at fighting against" +" groups but lacks the offensive power of the other lightsaber forms." +msgstr "" +"Шии-Чо, или Путь Сарлакка - первая форма боя на световых мечах, " +"разработанная джедаями при переходе от металлического оружия к световым " +"мечам. Шии-Чо считается тренировочной формой, которую должны освоить все " +"джедаи для понимания основ боя. Шии-Чо отлично подходит для боя против групп" +" противников, но ей не хватает наступательной мощи других форм." + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You place one foot back and hold your weapon vertically on your dominant " +"side." +msgstr "" +"Вы отставляете одну нону и держите оружие вертикально вашей рабочей рукой." + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s places one foot back and hold their weapon vertically." +msgstr "%s отставляет одну ногу назад и поднимает оружие вертикально." + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are a determined warrior. Your inner calm aids you in landing your strikes and protecting yourself.\n" +"\n" +"Blocked damage reduced by 100% of Strength, +1 Accuracy." +msgstr "" +"Вы решительный воин. Ваш внутренний покой помогает вам наносить удары и защищать себя.\n" +"\n" +"Урон при блокировании снижается на 100% СИЛ. +1 Точность." + +#: lang/json/martial_art_from_json.py +msgid "Apprentice Training" +msgstr "Подготовка падавана" + +#. ~ Description of buff 'Apprentice Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training in Shii-Cho teaches you how to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"Ваши тренировки в Шии-Чо подготовили вас к бою с несколькими противниками.\n" +"\n" +"+1 попытка блока, +1 эффективность блока." + +#: lang/json/martial_art_from_json.py +msgid "Knight Training" +msgstr "Подготовка рыцаря-джедая" + +#. ~ Description of buff 'Knight Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Further training in Shii-Cho improves your ability to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"Рост ваших навыков в Шии-Чо улучшил вашу способность сражаться с несколькими противниками.\n" +"\n" +"+1 попытка блока, +1 эффективность блока." + +#: lang/json/martial_art_from_json.py +msgid "Master Training" +msgstr "Подготовка магистра джедаев" + +#. ~ Description of buff 'Master Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"As a master of Shii-Cho, your ability to fight against groups is second to none.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"Ваше умение сражаться сразу с несколькими противниками, как мастера Шии-Чо, практически невозможно превзойти.\n" +"\n" +"+1 попытка блока, +1 эффективность блока." + +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "Каменный Дракон" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" +"Дисциплина Каменного Дракона фокусируется на силе, мощи и стойкости. Учение " +"даёт способность расщепить сталь одним мощным, концентрированным ударом. " +"Оборонительные способности Каменного Дракона черпаются из стойкости камня " +"перед любыми атаками." + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "Вы упираетесь пятками в землю и выравниваете своё положение." + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "%s зарывается пятками в поверхность." + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "Каменные кости" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" +"Вы фокусируете энергию на усилении защиты, вытягивая энергию попаданий вашего оружия по врагу, чтобы усилить себя против контратак.\n" +"\n" +"+1 брони против колющего, режущего и дробящего урона.\n" +"Длится 1 ход. До 5 стеков." + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "Стойка Каменные Ноги" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" +"Вы приседаете и ставите ноги вдоль поверхности, вытягивая стойкость земли в свое тело. Слишком большое количество передвижений выведет вас из стойки.\n" +"\n" +"+10% урона, +2 дробящего урона и брони от колющего урона." + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "Трещина в камне" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" +"Слишком много передвижений - эффект стойки каменных ног удалён. Не двигайтесь, чтобы не расколоть свою стойкость окончательно!\n" +"\n" +"Включает усиление «Расколотый камень».\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "Расколотый камень" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" +"Вы не смогли удержать стойку каменных ног, и теперь должны замереть на время, чтобы вернуть себе её преимущества.\n" +"\n" +"-10% урона, -2 колющей, режущей и дробящей брони.\n" +"Длится 4 хода." + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "Железные Кости" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" +"Когда вы совершаете удачную атаку, вы входите в медитативное состояние, в котором вам практически невозможно нанести урон.\n" +"\n" +"+5 дробящей, режущей и колющей брони.\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "Коготь Тигра" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" +"Дисциплина Тигриного Когтя использует погружение в животную ярость для своих" +" учеников. В битве эти бойцы ревут подобно диким животным, атакуя с " +"варварской яростью и используя ошеломляющие, жестокие атаки, чтобы победить " +"своих врагов." + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "Вы издаёте рычание и готовитесь к битве." + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "%s опускается на конечности, словно дикое животное." + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "Улучшенные критические" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to die.\n" +"\n" +"+5% critical hit chance." +msgstr "" +"Всегда бейте в полную силу. Не сдерживайте себя, если не хотите умереть.\n" +"\n" +"+5% к шансу критического удара." + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "Бросок тигра" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" +"С рёвом дикого зверя вы влетаете в самый центр схватки. Бейте первым, бейте сильно.\n" +"\n" +"+2 к Точности, +10% урона.\n" +"Длится 1 ход." + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "Загнанный в угол Хищник" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" +"Загнанный в угол зверь пугающ и опасен\n" +"\n" +"-20% стоимости движения\n" +"Длится 1 ход" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "Кровь в Воде" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" +"Запах крови приводит вас в ярость. Вы хотите еще. СЕЙЧАС ЖЕ!\n" +"\n" +"+1 Меткость, +15% урона\n" +"Длится 1 ход. Стакается 2 раза" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "Избиение слабых" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" +"Вы прорезаете путь сквозь слабых противников словно могущий хищник, пробивающийся через стадо добычи.\n" +"\n" +"+30 к скорости.\n" +"Длится 3 хода. До 2 стеков." + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "алкоголь" @@ -150254,8 +152319,8 @@ msgid "Emulsified Hydrogel" msgstr "эмульгированный гидрогель" #: lang/json/material_from_json.py -msgid "pupled" -msgstr "стёртый в кашу" +msgid "pulped" +msgstr "стёртый в кашу " #: lang/json/material_from_json.py msgid "Arcane Skin" @@ -152225,7 +154290,7 @@ msgstr "" " порядке?" #: lang/json/mission_def_from_json.py lang/json/mission_def_from_json.py -#: lang/json/talk_topic_from_json.py +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py msgid "Thank you." msgstr "Спасибо." @@ -152554,10 +154619,10 @@ msgstr "Мне нужна помощь в поисках кое-чего." #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20" +"We could use some 3 liter jars to preserve our produce. Can you bring me 10" " large three liter jars? I'll give you some preserves in exchange." msgstr "" -"Нам нужны трёхлитровые банки, чтобы консервировать еду. Принесёшь 20 больших" +"Нам нужны трёхлитровые банки, чтобы консервировать еду. Принесёшь 10 больших" " трёхлитровых банок? Я в обмен дам тебе кое-какие соленья." #: lang/json/mission_def_from_json.py @@ -154712,6 +156777,93 @@ msgstr "Ага, конечно." msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "Мда, мне придётся лезть за золотом самому, спасибо ни за что." +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "Активное шумоподавление" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" +"Проверьте радиобашню Хаба 01, найдите источник помех и решите проблему." + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check" +" it out, I'll owe you a favor." +msgstr "" +"Несколько дней назад мне удалось установить радиопередатчик на радиовышку " +"неподалёку, но он перестал работать. Если сможете прикрыть меня, пока я " +"разбираюсь с проблемой, с меня причитается." + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "Ладно, в путь. Я сразу за вами." + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "Что ж, спасибо за предложение, наверное." + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" +"Мы наверняка разберёмся с этим на месте. В любом случае, сначала стрелять, " +"потом задавать вопросы." + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "Думаете, мы убили виновника?" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "Очень похоже на то. Вернёмся в Хаб." + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "Ага, спасибо за бездействие." + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "Вернуться в Хаб 01" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "Вернуться в Хаб 01." + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "Давайте вернёмся в Хаб" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "Что ж…" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "У вас же есть карта под рукой? У меня есть, и вам её стоит иметь." + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "Уже добрались?" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "Спасибо, что охраняли меня. Как и было уговорено, за мной должок." + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "Заблудились что ли?" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "Не могу поверить, что мы потерялись…" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "Изготовить 2 дистиллятора" @@ -156241,6 +158393,60 @@ msgid "I can't be Dr Frankenstein unless you get me these." msgstr "" "Я не могу стать доктором Франкенштейном, если ты не принесешь мне эти части." +#: lang/json/mission_def_from_json.py +msgid "Gather meat for Bo Baronyx. About 8 should do it." +msgstr "Собрать мясо для Бо Бароникса. 8 кусков должно хватить." + +#: lang/json/mission_def_from_json.py +msgid "The eaters are hungry. They need meat" +msgstr "Едоки голодны. Им нужно мясо." + +#: lang/json/mission_def_from_json.py +msgid "" +"If you wish to feed the eaters, your work will be rewarded. Go out, butcher" +" a pure animal. Not a false eater, the meat must be good to eat. Then " +"bring me the meat and I will see to the eaters." +msgstr "" +"Если вы желаете накормить едоков, ваш труд будет вознаграждён. Ступайте, " +"разделайте чистое животное. Никакого ложного мяса, оно должно быть " +"правильным. Затем принесите мясо мне, и я отправлюсь к едокам." + +#: lang/json/mission_def_from_json.py +msgid "Excellent. The eaters must feed." +msgstr "Превосходно. Едоки должны быть накормлены." + +#: lang/json/mission_def_from_json.py +msgid "Understood. The great eaters will feed either way." +msgstr "Понимаю. Великие едоки в любом случае не останутся без еды." + +#: lang/json/mission_def_from_json.py +msgid "" +"Some of the animals have become touched by the pretenders in recent days, " +"larger and more dangerous, producing tainted mutant meat. This will not " +"work for the great eaters, it must be the true meat." +msgstr "" +"Некоторых из животных коснулись притворщики совсем недавно, более крупные и " +"опасные, что отравило их мясо. Оно не подойдёт для великих едоков, им нужно " +"чистое мясо." + +#: lang/json/mission_def_from_json.py +msgid "Have you brought meat?" +msgstr "Вы принесли мясо?" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed." +msgstr "Едоки будут накормлены." + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed I am sure." +msgstr "Едоки будут сыты, без сомнения." + +#: lang/json/mission_def_from_json.py +msgid "" +"I see no meat. There is meat in the forests and swamps waiting for the " +"eaters." +msgstr "Я не вижу мяса. Его можно найти в лесах и на болотах, ждущее едоков." + #: lang/json/mission_def_from_json.py msgid "Retrieve Magic Book" msgstr "Принести волшебную книгу" @@ -158659,6 +160865,26 @@ msgstr "" "Вы можете двигаться быстрее большинства существ, получая 15% бонус к " "скорости на твёрдой поверхности." +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore" +msgstr "Рефлекторный фотофор" + +#. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "" +"A photophore has grown from your head. You can't consciously control it, " +"and it might start to shine in response to your emotions or your " +"physiological state." +msgstr "" +"На вашей голове растут фотофоры. Вы не можете сознательно ими управлять, они" +" могут начать светиться в зависимости от ваших эмоций или психологического " +"состояния." + +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "Рефлекторный фотофор (акт)" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "Слабый фотофор" @@ -158674,15 +160900,54 @@ msgstr "" " очень выдаёт вас в темноте, но идеально подходит для привлечения партнера " "во время брачного сезона." +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "Слабый фотофор (акт)" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "Ваш фотофор мягко светится." + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "Фотофор" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." +msgid "You can make your photophore glow brightly." msgstr "Ваш фотофор может ярко светиться." +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "Фотофор (акт)" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." +msgstr "Ваш фотофор ярко светится." + +#: lang/json/mutation_from_json.py +msgid "Normal Human" +msgstr "Обыкновенный человек" + +#. ~ Description for {'str': 'Normal Human'} +#: lang/json/mutation_from_json.py +msgid "" +"You're a normal human, there's nothing wrong with you. No need to worry." +msgstr "" +"Вы обыкновенный человек, с вами всё хорошо. Нет причин для беспокойства." + +#: lang/json/mutation_from_json.py +msgid "Violent Monster" +msgstr "Жестокий монстр" + +#. ~ Description for {'str': 'Violent Monster'} +#: lang/json/mutation_from_json.py +msgid "Anger clouds your mind, you can't think straight but you feel strong." +msgstr "" +"Гнев застилает ваш разум, вы не можете ясно мыслить, но ощущаете свою мощь." + #: lang/json/mutation_from_json.py msgid "Good Hearing" msgstr "Хороший слух" @@ -158788,12 +161053,15 @@ msgstr "Быстрое лечение" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." msgstr "" -"Вы лечитесь быстрее во время сна, а также восстанавливаете небольшое " -"количество здоровья, когда не спите." +"Ваши раны зарастают быстрее обычного. Вы лечитесь на 50% быстрее, пока " +"спите, и на 20% быстрее, пока бодрствуете. Ваши сломанные конечности также " +"восстанавливаются вдвое быстрее." #: lang/json/mutation_from_json.py msgid "Light Eater" @@ -159539,9 +161807,13 @@ msgstr "Медленное лечение" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." msgstr "" -"Вы медленнее лечитесь; сон восстанавливает меньше потерянных очков здоровья." +"Ваши раны зарастают медленнее обычного. Ваши раны и переломы проходят со " +"скоростью 75% от обычной." #: lang/json/mutation_from_json.py msgid "Poor Healer" @@ -159549,13 +161821,13 @@ msgstr "Слабое лечение" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to" -" recover only a third of usual HP." +"Your health recovery is severely impaired. Your HP whilst asleep as well as" +" your broken limbs heal at 33% the regular rate." msgstr "" -"Восстановление вашего здоровья во время сна серьёзно снижено, поэтому вы " -"восстанавливаете только треть от обычного числа очков здоровья в единицу " -"времени." +"Ваши раны очень медленно заживают. Ваши раны и переломы проходят со " +"скоростью 33% от обычной." #: lang/json/mutation_from_json.py msgid "Imperceptive Healer" @@ -159563,13 +161835,13 @@ msgstr "Невосприимчивость к лечению" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth" -" of usual HP." +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP" +" whilst asleep as well as your broken limbs heal at 10% the regular rate." msgstr "" -"Вы практически не восстанавливаете здоровье во время сна; сон " -"восстанавливает всего одну десятую от обычного числа очков здоровья в " -"единицу времени." +"Раны крайне опасны для вас и почти не зарастают. Ваши раны и переломы " +"проходят со скоростью 10% от обычной." #: lang/json/mutation_from_json.py msgid "Far-Sighted" @@ -160413,12 +162685,14 @@ msgstr "Очень быстрое исцеление" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not " -"sleeping." +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." msgstr "" -"Ваша плоть медленно восстанавливается и вы восполняете очки здоровья, даже " -"когда не спите." +"Ваши раны зарастают куда быстрее обычного. Вы лечитесь на 50% быстрее, пока " +"спите, и на 66% быстрее, пока бодрствуете. Ваши сломанные конечности также " +"восстанавливаются в 4 раза быстрее." #: lang/json/mutation_from_json.py msgid "Regeneration" @@ -160426,8 +162700,15 @@ msgstr "Регенерация" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." -msgstr "Ваша плоть восстанавливается от ран невероятно быстро." +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster" +" whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16" +" times faster than usual." +msgstr "" +"Ваша плоть почти мгновенно затягивает раны. . Вы лечитесь на 150% быстрее, " +"пока спите, и на 200% быстрее, пока бодрствуете. Ваши сломанные конечности " +"также восстанавливаются в 16 раз быстрее." #: lang/json/mutation_from_json.py msgid "Reptilian Healing" @@ -160435,8 +162716,12 @@ msgstr "Регенерация рептилии" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." -msgstr "Ваши сломанные конечности восстанавливаются без особых сложностей." +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." +msgstr "" +"Ваши сломанные конечности восстанавливаются без особых сложностей. Вам не " +"требуются шины, а конечности срастаются в 20 раз быстрее." #: lang/json/mutation_from_json.py msgid "Very Little Sleep" @@ -165189,9 +167474,11 @@ msgstr "Быстрые рефлексы" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." msgstr "" -"У вас хорошие рефлексы, что позволяет вам легче уворачиваться от атак." +"У вас хорошие рефлексы, что позволяет вам легче уворачиваться от атак и " +"захватов." #: lang/json/mutation_from_json.py msgid "Survivor Story" @@ -166572,6 +168859,32 @@ msgstr "" "Кому нужно оружие? Вы наносите больше урона в ближнем бою без оружия. Этот " "урон становится больше с ростом навыка безоружного боя." +#: lang/json/mutation_from_json.py +msgid "Jedi Training" +msgstr "Подготовка джедая" + +#. ~ Description for {'str': 'Jedi Training'} +#: lang/json/mutation_from_json.py +msgid "" +"You are trained in the ways of the Jedi. Your knowledge allows you to " +"utilize a form of lightsaber combat." +msgstr "" +"Вы имеет подготовку джедая. Ваше знание позволяет вам использовать в бою " +"одну из форм битвы на световых мечах." + +#: lang/json/mutation_from_json.py +msgid "Pokken Master" +msgstr "Мастер Поккена" + +#. ~ Description for {'str': 'Pokken Master'} +#: lang/json/mutation_from_json.py +msgid "" +"You are well versed in the monsterous Pocket Fist martial art. Train well, " +"because it is your destiny to be a master." +msgstr "" +"Вы хорошо разбираетесь в искусстве чудовищного Карманного Кулака. Хорошо " +"тренируйтесь, ведь ваша судьба - стать мастером." + #: lang/json/mutation_from_json.py msgid "Martial Adept" msgstr "Ученик боевых искусств" @@ -166580,10 +168893,12 @@ msgstr "Ученик боевых искусств" #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." msgstr "" "Вы обучались боевому искусству и выучили одну из дисциплин Возвышенного " -"Пути." +"Пути. Вы начинаете с одной из техник: Пустынный Ветер, Алмазный Разум, " +"Железное Сердце, Заходящее Солнце, Каменный Дракон или Тигриный Коготь." #: lang/json/mutation_from_json.py msgid "Magus" @@ -167651,6 +169966,14 @@ msgstr "Возвышение мастодонта" msgid "Humans created me. Let's see what I can be on my own." msgstr "Люди создали меня. Посмотрим, на что я способен сам по себе." +#: lang/json/npc_class_from_json.py +msgid "Swamper" +msgstr "Болотник" + +#: lang/json/npc_class_from_json.py +msgid "The great eaters have returned and they must be fed" +msgstr "Великие пожиратели вернулись, и они должны быть накормлены." + #: lang/json/npc_class_from_json.py msgid "Operator" msgstr "Оператор" @@ -167936,6 +170259,14 @@ msgstr "Ксенобиолог, безумна" msgid "Millyficen Whately" msgstr "Миллифицен Ватели" +#: lang/json/npc_from_json.py +msgid "CEO" +msgstr "Генеральный директор" + +#: lang/json/npc_from_json.py +msgid "Bo Baronyx" +msgstr "Бо Бароникс" + #: lang/json/npc_from_json.py msgid "magus" msgstr "маг" @@ -174074,7 +176405,7 @@ msgstr "" #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Death Row Convict" -msgstr "Осуждённый к смертной казни" +msgstr "Приговорённый к смертной казни" #. ~ Profession (male Death Row Convict) description #: lang/json/professions_from_json.py @@ -174091,7 +176422,7 @@ msgstr "" #: lang/json/professions_from_json.py msgctxt "profession_female" msgid "Death Row Convict" -msgstr "Осуждённая к смертной казни" +msgstr "Приговорённая к смертной казни" #. ~ Profession (female Death Row Convict) description #: lang/json/professions_from_json.py @@ -176330,6 +178661,136 @@ msgstr "" "в другое. Вы знали, что было вопросом времени, когда ужасы, реющие в небе, " "собьют и вас." +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "Врач скорой помощи" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" +"Вы были на выезде, когда вам напарник потерялся. Теперь у вас есть только " +"ваша верная машина скорой помощи, но куда везти пациентов в апокалипсисе?" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "Врач скорой помощи" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" +"Вы были на выезде, когда вам напарник потерялся. Теперь у вас есть только " +"ваша верная машина скорой помощи, но куда везти пациентов в апокалипсисе?" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "Фельдшер" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" +"Вы потеряли своего напарника, когда были на выезде. Вам удалось прихватить " +"немного лекарств, но похоже теперь вы будете заняты спасением собственной " +"жизни." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "Фельдшер" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" +"Вы потеряли своего напарника, когда были на выезде. Вам удалось прихватить " +"немного лекарств, но похоже теперь вы будете заняты спасением собственной " +"жизни." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "Армейский врач" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" +"Вы были на передовой, когда всё началось, латая раненых и обеспечивая " +"помощь. Однако они нападали и нападали. Теперь вы сам по себе." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "Армейский врач" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" +"Вы были на передовой, когда всё началось, латая раненых и обеспечивая " +"помощь. Однако они нападали и нападали. Теперь вы сама по себе." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "Героинщик" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" +"Последнее, что ты помнишь - как встретил Бога возле Сядь-и-поешь. А затем " +"люди сели и стали есть друг друга. Это не похоже на приход." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "Героинщик" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" +"Последнее, что ты помнишь - как встретила Бога возле Сядь-и-поешь. А затем " +"люди сели и стали есть друг друга. Это не похоже на приход." + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -176546,12 +179007,14 @@ msgstr "Инженер КБМ" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" "Вы работали техником в стерильной хорошо охраняемой фабрике и занимались " -"изготовлением бионических имплантов. При помощи точных машин и оснащённых " -"паяльниками рук вы зарабатывали очень неплохо." +"изготовлением бионических имплантов. Приказ об эвакуации застал вас посреди " +"16-часовой смены, и вы едва ухитрились ускользнуть, даже не успев оставить " +"на рабочем месте инструменты." #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -176563,12 +179026,14 @@ msgstr "Инженер КБМ" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" "Вы работали техником в стерильной хорошо охраняемой фабрике и занимались " -"изготовлением бионических имплантов. При помощи точных машин и оснащённых " -"паяльниками рук вы зарабатывали очень неплохо." +"изготовлением бионических имплантов. Приказ об эвакуации застал вас посреди " +"16-часовой смены, и вы едва ухитрились ускользнуть, даже не успев оставить " +"на рабочем месте инструменты." #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -178105,6 +180570,278 @@ msgstr "" "Наступил Катаклизм, и тебе придётся найти иное применение уловкам, которыми " "ты мухлевала на контрольных." +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "Интроспекционист " + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" +"Вы удалились от общества, так как хотели сосредоточиться на " +"самосовершенствовании. Вас было двое - вы и ваш друг, но из-за апокалипсиса " +"вы остались в одиночестве." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "Интроспекционист " + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" +"Вы удалились от общества, так как хотели сосредоточиться на " +"самосовершенствовании. Вас было двое - вы и ваш друг, но из-за апокалипсиса " +"вы остались в одиночестве." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "Мстительный проповедник" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" +"Вы потеряли веру, когда ваша супруга умерла от болезни. С тех пор вы " +"пытались упиться до смерти. Бог наказал всех с помощью апокалипсиса, и вы " +"покажете им, каково ваше милосердие." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "Мстительная проповедница" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" +"Вы потеряли веру, когда ваш супруг умер от болезни. С тех пор вы пытались " +"упиться до смерти. Бог наказал всех с помощью апокалипсиса, и вы покажете " +"им, каково ваше милосердие." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "Техно-выживальщик" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" +"Вы давно заподозрили, что мир может полететь в тартарары. С вашей " +"подготовкой, заклинаниями и револьвером ваши шансы получше, чем у " +"большинства." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "Техно-выживальщица" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" +"Вы давно заподозрили, что мир может полететь в тартарары. С вашей " +"подготовкой, заклинаниями и револьвером ваши шансы получше, чем у " +"большинства." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "Бионический псевдовампир" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" +"Вы всегда обожали романы ужасов и использовали своё состояние, чтобы " +"улучшить себя с помощью заклинаний и бионики до обитателя ночи. Ваше " +"пренебрежение собственным здоровьем на этом пути оставило вас бледным и " +"мрачным." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "Бионический псевдовампир" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" +"Вы всегда обожали романы ужасов и использовали своё состояние, чтобы " +"улучшить себя с помощью заклинаний и бионики до обитателя ночи. Ваше " +"пренебрежение собственным здоровьем на этом пути оставило вас бледной и " +"мрачной." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "Волшебник из Академии" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" +"Год обучения в академии волшебства научил вас терпения, мудрости и " +"нескольким полезным заклинаниям. Теперь учителя превратились в нежить, " +"занятия отменены, и начался последний экзамен." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "Волшебница из Академии" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" +"Год обучения в академии волшебства научил вас терпения, мудрости и " +"нескольким полезным заклинаниям. Теперь учителя превратились в нежить, " +"занятия отменены, и начался последний экзамен." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "Кислотный рокер" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" +"Ваша карьера в метале взлетела до новых высот, когда вы заменили спецэффекты" +" на едкую кровь и шипастые хлысты. Похоже, Катаклизм станет вашим финальным " +"туром." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "Кислотная рокерша" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" +"Ваша карьера в метале взлетела до новых высот, когда вы заменили спецэффекты" +" на едкую кровь и шипастые хлысты. Похоже, Катаклизм станет вашим финальным " +"туром." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "Шоковый полицейский" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" +"Вы попали в экспериментальную программу обеспечения правопорядка, " +"направленную на уменьшение смертности подозреваемых при арестах и сокращение" +" расходов на тазеры и пули путём использования ваших способностей управления" +" молниями." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "Шоковый полицейский" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" +"Вы попали в экспериментальную программу обеспечения правопорядка, " +"направленную на уменьшение смертности подозреваемых при арестах и сокращение" +" расходов на тазеры и пули путём использования ваших способностей управления" +" молниями." + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "Землетряс" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" +"Вы заработали себе имя в подпольных магических боях, получив славу " +"неостановимого сокрушителя. Теперь все ваши соперники мертвы, и нет нужды " +"сдерживать свою мощь." + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "Землетряс" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" +"Вы заработали себе имя в подпольных магических боях, получив славу " +"неостановимого сокрушителя. Теперь все ваши соперники мертвы, и нет нужды " +"сдерживать свою мощь." + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -180112,7 +182849,7 @@ msgid "build a metalworking forge" msgstr "построить кузницу" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." +msgid "Let's build an anvil and crucible to increase our crafting options." msgstr "" "Давайте установим тигель с наковальней для расширения наших возможностей." @@ -184952,6 +187689,44 @@ msgctxt "start_name" msgid "Wizard's Retreat Vacation" msgstr "Отпуск в убежище волшебника" +#. ~ Name for scenario 'Exile' for a male character +#: lang/json/scenario_from_json.py +msgctxt "scenario_male" +msgid "Exile" +msgstr "Изгнанный" + +#. ~ Name for scenario 'Exile' for a female character +#: lang/json/scenario_from_json.py +msgctxt "scenario_female" +msgid "Exile" +msgstr "Изгнанная" + +#. ~ Description for scenario 'Exile' for a male character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_male" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" +"Вы изгнанник, потому ли, что люди избегают вас из-за того, кто вы есть, или " +"по вашему собственному выбору. Мертвые же не хотят оставлять вас в покое." + +#. ~ Description for scenario 'Exile' for a female character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_female" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" +"Вы изгнанник, потому ли, что люди избегают вас из-за того, кто вы есть, или " +"по вашему собственному выбору. Мертвые же не хотят оставлять вас в покое." + +#. ~ Starting location for scenario 'Exile'. +#: lang/json/scenario_from_json.py +msgctxt "start_name" +msgid "Exiled" +msgstr "Изгнание" + #. ~ Name for scenario 'The Sweet Life' for a male character #: lang/json/scenario_from_json.py msgctxt "scenario_male" @@ -196657,6 +199432,431 @@ msgstr "-стайл." msgid "-chant" msgstr "балладный напев." +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. It has an unsettling loose and spongy " +"texture, but smells… mostly normal. There are strange tangles and " +"formations in it that don't appear natural at all: bits of bone and hair " +"crusted up inside the muscle, as if trying to form another organism. Still," +" seems digestible at least, if you cook it and remove the worst parts." +msgstr "" +"Мясо сильно мутировавшего животного. У него неприятная рыхлая губчатая " +"текстура, а пахнет оно… Почти как обычно. В нём есть странные неестественные" +" волокна и образования: волосы и кусочки костей внутри мышц, будто бы там " +"пытался развиться другой организм. Тем не менее это кажется съедобным, если " +"его приготовить и удалить самые мерзкие части." + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although it came from muscle tissue, it" +" has a curious swirling grain pattern, and at the center of each grain is a " +"knot of hard, cartilaginous tissue. It smells offputting." +msgstr "" +"Мясо сильно мутировавшего животного. Несмотря на то, что оно произошло из " +"мышечной ткани, оно имеет странный вихревой рисунок с зёрнами, а в центре " +"каждого зерна находится узел из твердой хрящевой ткани. Пахнет отталкивающе." + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. This is from muscle, but in the fascial" +" tissue between the muscles, thick spiny hairs have grown. Foul smelling, " +"cream-colored fluid gushes out whenever a hair pulls loose." +msgstr "" +"Мясо сильно мутировавшего животного. Это мышцы, но на внешней стороне ткани " +"между отдельными мускулами проросли густые жёсткие волосы. Жутко пахнущая, " +"кремового цвета жидкость выделяется каждый раз, когда волос выпадает." + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although this came from muscle, it has " +"a thick cordlike texture and smells like leather and bread mold." +msgstr "" +"Мясо сильно мутировавшего животного. Несмотря на то, что оно произошло из " +"мышечной ткани, оно обладает толстой, похожей на верёвку текстурой и пахнет " +"как кожа и хлебная плесень." + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. It has an unsettling," +" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" +" the bits of hair and bone out…" +msgstr "" +"Это приготовленный кусок мяса мутировавшего животного. У него неприятная " +"губчатая структура, но вкус… Почти нормальный. Вы надеетесь, что вырезали " +"все волосы и кусочки костей…" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. You thought you'd " +"cleared out all the gross parts, but while cooking, a fluid-filled sac " +"inside burst and covered it in some kind of thick grease." +msgstr "" +"Это приготовленный кусок мяса мутанта. Вы думали, что вычистили его от всего" +" неприятного, но при готовке внутри лопнул мешок с жидкостью, покрыв всё " +"блюдо чем-то густым и жирным." + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. The surface is " +"peppered with divets from the pieces you had to dig out to make it seem " +"edible." +msgstr "" +"Это приготовленный кусок мяса мутанта. Поверхность мяса покрыта щербинами " +"там, где вы выковыривали более несъедобные кусочки." + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. Heat caused the " +"muscles to twist and move as if they were alive, and now it has writhed " +"itself into a dense knot." +msgstr "" +"Это приготовленный кусок мяса мутанта. Жар заставил мышцы крутиться и " +"двигаться, как будто они всё ещё живы, и теперь он превратился в плотный " +"узел." + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug, and you really aren't sure what " +"to make of them. There are things you've never seen in any anatomy book, " +"with spines and hair and other unidentified parts protruding off seemingly " +"at random." +msgstr "" +"Эти органы извлечены из огромного мутировавшего насекомого, и вы не уверены," +" что с ними вообще можно сделать. Здесь много такого, что не найти ни в " +"одной книге по анатомии, с костями, волосами и прочими ни на что не похожими" +" частями, судя по всему, случайно растущими во всех направлениях." + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug. They have a sickly green color, " +"and one of them ripped when you were removing it, revealing an inner surface" +" that looks like row upon row of human fingers, nails and all." +msgstr "" +"Эти органы извлечены из огромного мутировавшего насекомого. У них нездоровый" +" зелёный оттенок, и один из них разорвался при извлечении, открыв под " +"поверхностью нечто, похожее на множество человеческих пальцев и ногтей." + +#: lang/json/snippet_from_json.py +msgid "" +"This is a huge, thick, fleshy sac you removed from a giant mutant bug. The " +"surface is covered in smooth, soft skin, and beneath it is a coiled, twisted" +" mess of cordlike tissue." +msgstr "" +"Большая, мясистая сумка, извлечённая вами из огромного мутировавшего " +"насекомого. Поверхность покрыта гладкой, мягкой кожей, а под ней находится " +"спиральная, беспорядочно перепутанная ткань, похожая на шнуры." + +#: lang/json/snippet_from_json.py +msgid "" +"This is a long, corded organ you removed from a giant mutant bug. It ran " +"from the head to the abdomen and has long tendrils coming off it, not unlike" +" a spinal cord." +msgstr "" +"Это длинный, проволочный орган, который вы извлекли из огромного " +"мутировавшего насекомого. Он проходил от головы до брюшной полости и имеет " +"длинные усики, что придаёт ему сходство со спинным мозгом." + +#: lang/json/snippet_from_json.py +msgid "" +"This is a meaty grey organ you removed from a mutant. It has a chalky " +"yellow coating that burns your skin, and several unidentifiable fleshy tubes" +" sticking out of it. The smell it gives off stings your nostrils. You're " +"pretty confident no natural creature has one of these." +msgstr "" +"Это мясистый серый орган, извлечённый из мутанта. У него мелово-желтое " +"покрытие, которое обжигает вашу кожу, и из него торчат несколько непонятных " +"мясистых трубок. Запах щипет ноздри. Вы уверены, что ни у одного " +"естественного существа нет ничего подобного." + +#: lang/json/snippet_from_json.py +msgid "" +"This organ meat, retrieved from a mutated creature, looks like a series of " +"small mammalian hearts arranged in series on a long fleshy tube. At the end" +" of the chain is a large fleshy sac resembling a stomach." +msgstr "" +"Это орган, извлечённая из мутировавшего существа, похожая на несколько " +"сердец млекопитающего, закреплённых на длинной трубке из плоти. На конце " +"расположена сумка, напоминающая желудок." + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It looks like a lung from a larger " +"mammal, like a dog, but instead of a few distinct lobes, it has dozens of " +"lobes arranged in sheets. Strange spindles and gnarled tumescences dot the " +"surface." +msgstr "" +"Вы вполне уверены, что это лёгочная ткань. Похоже на лёгкие крупного " +"млекопитающего вроде собаки, но вместо нескольких хорошо различимых долей " +"здесь их десятки, и они расположены рядами. Странные выступи и наросты " +"покрывают всю поверхность." + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It has a vaguely wing-like shape, " +"with a series of nodules around what would be the trailing edge of the " +"'wing'. A cluster of quills in each corner of the organ held it to the " +"bug's carapace like clasps." +msgstr "" +"Вы вполне уверены, что это лёгочная ткань. Форма слегка смахивает на крылья " +"с рядами узелков на краю. Скопления игл в на углах органа держали его на " +"панцире жука, как застежки." + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton, but mutated. The inner side is lined with " +"veins and strange hooked protuberances." +msgstr "" +"Кусок экзоскелета насекомого, подвергшийся мутации. Внутренняя сторона " +"покрыта венами и странными загнутыми наростами." + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton. Stringy lines of nervous tissue and blood " +"vessels still cling to the inner surface." +msgstr "" +"Кусок экзоскелета насекомого. Внутренняя стороны покрыта нитями нервной " +"ткани и кровеносными сосудами." + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of rigid, tube-shaped chitin from the inside of a giant bug. It " +"seemed to be performing some kind of support role. You're quite sure normal" +" insects don't have these." +msgstr "" +"Кусок жесткого хитина в форме трубки, извлечённый из гигантского насекомого." +" Похоже, он служил для поддержки чего-то. Вам кажется, у нормальных " +"насекомых такого внутри нет." + +#: lang/json/snippet_from_json.py +msgid "" +"A long, flexible rod of chitin from inside a giant mutant bug. It is laced " +"with blood vessels and chitinous nodules." +msgstr "" +"Длинный, гибкий цилиндрический кусок хитина, извлечённый из гигантского " +"мутировавшего насекомого. Он покрыт кровеносными сосудами и хитиновыми " +"наростами." + +#: lang/json/snippet_from_json.py +msgid "" +"As you peel away the outer shell, you find veins lining the chitin plates" +msgstr "" +"Когда вы снимаете верхний слой панциря, вы обнаруживаете, что хитин покрыт " +"венами" + +#: lang/json/snippet_from_json.py +msgid "With the creature dead, its carapace comes away surprisingly easily" +msgstr "" +"Теперь, когда это создание мертво, хитин сходит с удивительной лёгкостью" + +#: lang/json/snippet_from_json.py +msgid "" +"There's a thin membrane, much like skin, spread over the chitin of this " +"creature" +msgstr "" +"По всему хитину этого существа натянута тонкая мембрана, схожая с кожей" + +#: lang/json/snippet_from_json.py +msgid "Under the carapace of this mutant is a bristly, velcro-like material" +msgstr "" +"Под панцирем этого существа хрустящая, похожая на застёжки на одежде ткань" + +#: lang/json/snippet_from_json.py +msgid "" +"The anatomy concealed beneath seems almost like a small mammal given a shell" +" and twisted into the shape of an arthropod" +msgstr "" +"Анатомия существа выглядит так, будто это млекопитающее, приобретшее панцирь" +" и форму членистоногого" + +#: lang/json/snippet_from_json.py +msgid "You crack the beast open like a horrific lobster" +msgstr "Вы вскрываете монстра словно гигантского лобстера в ресторане" + +#: lang/json/snippet_from_json.py +msgid "" +"The chitin holds tight to the creature, and you need to snap and tear it " +"away, sawing at tough fibers beneath" +msgstr "" +"Хитин плотно сидит на этом создании, и вам приходится отрывать его и срезать" +" волокна под ним, удерживающие его на месте" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside, half-formed organs press against spongy meat that doesn't look " +"anything like raw arthropod meat from normal creatures" +msgstr "" +"Внутри существа наполовину сформированные органы прижаты к губчатой плоти, " +"которая очень далека от того, как выглядит сырое мясо членистоногих" + +#: lang/json/snippet_from_json.py +msgid "" +"You find a collection of hooked spines beneath that seem to have been " +"clasping it on somehow" +msgstr "" +"Вы обнаруживаете набор крючковатых костяных наростов, которые словно " +"удерживают его на месте" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a complex, still-squirming mess of strange appendages and organs " +"that bear only a passing resemblance to any natural creature" +msgstr "" +"Внутри обнаруживается сложная, ещё дергающаяся масса странных отростков и " +"органов, которые едва ли похоже на что угодно, встречающееся в природе" + +#: lang/json/snippet_from_json.py +msgid "" +"Beneath the chitin, the meat is covered in thick, bristly hair hiding a " +"chaotic bramble of half-formed, mutated organs" +msgstr "" +"Плоть под хитином покрыта густыми, колючими волосами, скрывающими месиво " +"мутировавших, не до конца сформировавшихся органов" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a tangled mess of organs and tissues that do not appear to " +"entirely natural" +msgstr "" +"Внутри обнаруживается месиво из органов и тканей, выглядящее не слишком " +"естественно" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside the creature you find lungs, hearts, and intestines more like a " +"mammal than a giant bug" +msgstr "" +"Внутри существа вы обнаруживаете лёгкие, сердца и внутренности, больше " +"похожие на принадлежащие млекопитающему, чем гигантскому насекомому" + +#: lang/json/snippet_from_json.py +msgid "" +"The meat inside gives off a horrifying stench, and seems to be covered in " +"thin damp hair, like a newborn animal gone horribly wrong" +msgstr "" +"Плоть внутри издаёт омерзительный запах и покрыта сырыми волосами, словно " +"ужасное новорождённое животное" + +#: lang/json/snippet_from_json.py +msgid "" +"Small bundles of fiber break loose as you work, splitting open to reveal " +"twisted, half-formed copies of the creature itself" +msgstr "" +"Скрутки волокон рвутся, являя вам скрученные, частично сформировавшиеся " +"копии самого существа" + +#: lang/json/snippet_from_json.py +msgid "" +"It is difficult to work, as the spongey tissue tears apart under your tools" +msgstr "Работать тяжело, губчатая ткань рвётся под вашими инструментами" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Steaming puddles of acid spill from its outer shell as you pull it back" +msgstr "" +"Дымящиеся струйки кислоты начинают литься из под панциря, когда вы его " +"удаляете" + +#: lang/json/snippet_from_json.py +msgid "Steaming acid burbles from the creature's chitin as you peel it back" +msgstr "Дымящаяся кислота льётся из под хитина, когда вы его удаляете" + +#: lang/json/snippet_from_json.py +msgid "" +"Several acid glands rupture as you peel back the carapace, sending streams " +"of steaming caustic fluids spraying around" +msgstr "" +"Несколько кислотных желёз лопается, когда вы удаляете панцирь, посылая струи" +" едкой жидкости во все стороны" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The organs themselves have an acrid odour, but don't seem as caustically " +"acidic as the outer shell" +msgstr "" +"Сами органы имеют едкий запах, но они не кажутся такими едкими, как внешняя " +"оболочка" + +#: lang/json/snippet_from_json.py +msgid "" +"You carefully avoid breaking through pockets of what you think may be acid-" +"secreting glands" +msgstr "" +"Вы тщательно избегаете проникновения в карманы желез, выделяющих кислоту, " +"как вам кажется" + +#: lang/json/snippet_from_json.py +msgid "" +"Thick, ropey cords of tissue beneath its chitin protect an inner layer of " +"strange organs, resembling those of a bird more than anything" +msgstr "" +"Толстые, похожие на верёвки волокна ткани под хитином защищают внутренний " +"слой странных органов, больше всего напоминающих птичьи" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The powerfully acidic vapors coming from the carcass make it hard to work" +msgstr "Сильные кислотные испарения от трупа существенно осложняют вам работу" + +#: lang/json/snippet_from_json.py +msgid "" +"The tissues of the creature are full of half-formed organs, their purpose " +"unclear" +msgstr "" +"Ткани существа полны наполовину сформировавшимися органами, чьё " +"предназначение непонятно" + +#: lang/json/snippet_from_json.py +msgid "" +"Several times, you nearly burn yourself piercing a concealed gland full of " +"acid" +msgstr "" +"Несколько раз вы едва не обжигаетесь, прокалывая скрытые от глаз желёзы, " +"полные кислоты" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "." + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr ". ." + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" +". . " +"." + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "." + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr ". ." + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" +". . " +"." + #: lang/json/snippet_from_json.py msgid "" "ATOMIC DEREGULATION! President Toffer announced to a mixed crowd today that" @@ -206452,6 +209652,10 @@ msgstr "Убежище «последнего человека на Земле» msgid "Middle of Nowhere" msgstr "Чёрт-те где" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "Пустынный остров" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "Клетка для экспериментов" @@ -206778,6 +209982,13 @@ msgstr "" msgid "Yeah, alright." msgstr "Да-да, точно." +#: lang/json/talk_topic_from_json.py +msgid "" +"The song is… quiet for now. Perhaps with time, more notes will be etched in" +" the bones of this world." +msgstr "" +"Пока что песня… Утихла. Возможно, на костях мира будет высечено больше нот." + #: lang/json/talk_topic_from_json.py msgid "An acolyte should not take on too many songs at once." msgstr "Послушнику не следует браться за много песен сразу." @@ -206787,11 +209998,8 @@ msgid "That is all for now." msgstr "Пока что всё." #: lang/json/talk_topic_from_json.py -msgid "" -"The song is… quiet for now. Perhaps with time, more notes will be etched in" -" the bones of this world." -msgstr "" -"Пока что песня… Утихла. Возможно, на костях мира будет высечено больше нот." +msgid "There are bones to etch, songs to sing. Wish to join me?" +msgstr "Ещё есть невырезанные кости и неспетые песни. Присоединишься ко мне?" #: lang/json/talk_topic_from_json.py msgid "Do you wish to take on more songs?" @@ -206802,8 +210010,8 @@ msgid "Do you believe you can take on the burden of additional bones?" msgstr "Думаешь, ты сможешь взвалить обузу лишних костей?" #: lang/json/talk_topic_from_json.py -msgid "There are bones to etch, songs to sing. Wish to join me?" -msgstr "Ещё есть невырезанные кости и неспетые песни. Присоединишься ко мне?" +msgid "A song may yet be sung by you, should you wish to." +msgstr "Тебе ещё предстоит спеть песню, если желаешь." #: lang/json/talk_topic_from_json.py msgid "There is an additional song you could take on, if you'd like." @@ -206814,10 +210022,6 @@ msgid "" "I know of certain bones that could be of use, if you'd like to know more." msgstr "Я знаю несколько полезных костей, если хочешь услышать побольше." -#: lang/json/talk_topic_from_json.py -msgid "A song may yet be sung by you, should you wish to." -msgstr "Тебе ещё предстоит спеть песню, если желаешь." - #: lang/json/talk_topic_from_json.py msgid "I see." msgstr "Понятно." @@ -207524,14 +210728,14 @@ msgstr "да, разбудить!" msgid "no, go back to sleep." msgstr "нет, пускай спит." -#: lang/json/talk_topic_from_json.py -msgid "What is it, friend?" -msgstr "Что такое, друг?" - #: lang/json/talk_topic_from_json.py msgid " *pshhhttt* I'm reading you boss, over." msgstr "*пшшш-пшшш* я тебя слушаю, босс, приём." +#: lang/json/talk_topic_from_json.py +msgid "What is it, friend?" +msgstr "Что такое, друг?" + #: lang/json/talk_topic_from_json.py msgid "I want to give you some commands for combat." msgstr "Я хочу дать тебе боевые команды." @@ -207768,15 +210972,15 @@ msgstr "Двигайся как угодно, чтобы добраться до msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "Держать строй: не иди в препятствия рядом со мной." -#: lang/json/talk_topic_from_json.py src/action.cpp src/activity_handlers.cpp -#: src/avatar.cpp src/avatar.cpp src/avatar_action.cpp src/avatar_action.cpp -#: src/avatar_action.cpp src/crafting.cpp src/game.cpp src/handle_action.cpp -#: src/handle_action.cpp src/handle_liquid.cpp src/handle_liquid.cpp -#: src/iexamine.cpp src/iexamine.cpp src/iexamine.cpp src/iuse.cpp -#: src/iuse.cpp src/iuse.cpp src/iuse_actor.cpp src/iuse_actor.cpp -#: src/iuse_actor.cpp src/monexamine.cpp src/monexamine.cpp src/npc.cpp -#: src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp -#: src/veh_interact.cpp src/vehicle_use.cpp +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py +#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp src/avatar.cpp +#: src/avatar_action.cpp src/avatar_action.cpp src/crafting.cpp +#: src/crafting.cpp src/game.cpp src/handle_action.cpp src/handle_action.cpp +#: src/handle_liquid.cpp src/handle_liquid.cpp src/iexamine.cpp +#: src/iexamine.cpp src/iexamine.cpp src/iuse.cpp src/iuse.cpp src/iuse.cpp +#: src/iuse_actor.cpp src/iuse_actor.cpp src/iuse_actor.cpp src/monexamine.cpp +#: src/monexamine.cpp src/npc.cpp src/pickup.cpp src/player.cpp src/player.cpp +#: src/player.cpp src/veh_interact.cpp src/vehicle_use.cpp msgid "Never mind." msgstr "Ничего особенного." @@ -207994,14 +211198,14 @@ msgstr "Забудь. Пошли." msgid "OVERRIDE: " msgstr "ПЕРЕГРУЗКА: " -#: lang/json/talk_topic_from_json.py -msgid "" -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "" msgstr "" @@ -208366,14 +211570,14 @@ msgstr "Ладно, не делай резких движений…" msgid "Keep your distance!" msgstr "Не подходи ближе!" -#: lang/json/talk_topic_from_json.py -msgid "This is my territory, ." -msgstr "Это моя территория, ." - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "This is my territory, ." +msgstr "Это моя территория, ." + #: lang/json/talk_topic_from_json.py msgid "Calm down. I'm not going to hurt you." msgstr "Успокойся. Я не причиню тебе зла." @@ -208426,30 +211630,30 @@ msgstr "Что случилось?" msgid "I don't care." msgstr "Мне всё равно." -#: lang/json/talk_topic_from_json.py -msgid "I don't have any more jobs for you." -msgstr "У меня больше нет для тебя работы." - #: lang/json/talk_topic_from_json.py msgid "I don't have any jobs for you." msgstr "У меня нет работы для тебя." #: lang/json/talk_topic_from_json.py -msgid "I have more jobs for you. Want to hear about them?" -msgstr "У меня для тебя есть ещё работа. Хочешь послушать?" +msgid "I don't have any more jobs for you." +msgstr "У меня больше нет для тебя работы." #: lang/json/talk_topic_from_json.py msgid "I have other jobs for you. Want to hear about them?" msgstr "У меня для тебя есть и другая работа. Хочешь послушать?" #: lang/json/talk_topic_from_json.py -msgid "I just have one job for you. Want to hear about it?" -msgstr "У меня есть работа для тебя. Хочешь послушать?" +msgid "I have more jobs for you. Want to hear about them?" +msgstr "У меня для тебя есть ещё работа. Хочешь послушать?" #: lang/json/talk_topic_from_json.py msgid "I have another job for you. Want to hear about it?" msgstr "У меня есть ещё одна работёнка для тебя. Хочешь послушать?" +#: lang/json/talk_topic_from_json.py +msgid "I just have one job for you. Want to hear about it?" +msgstr "У меня есть работа для тебя. Хочешь послушать?" + #: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py #: src/npctalk.cpp msgid "Oh, okay." @@ -208459,6 +211663,10 @@ msgstr "Ну, ладно." msgid "Never mind, I'm not interested." msgstr "Неважно, мне не интересно." +#: lang/json/talk_topic_from_json.py +msgid "You're not working on anything for me now." +msgstr "Ты сейчас на меня не работаешь." + #: lang/json/talk_topic_from_json.py msgid "Which job?" msgstr "Какое задание?" @@ -208467,10 +211675,6 @@ msgstr "Какое задание?" msgid "What about it?" msgstr "Что насчёт него?" -#: lang/json/talk_topic_from_json.py -msgid "You're not working on anything for me now." -msgstr "Ты сейчас на меня не работаешь." - #: lang/json/talk_topic_from_json.py msgid "I'll do it!" msgstr "Я это сделаю!" @@ -208687,6 +211891,10 @@ msgstr "Хмм, ладно." msgid "Thanks!" msgstr "Спасибо!" +#: lang/json/talk_topic_from_json.py +msgid "Focus on the road, mate!" +msgstr "Смотри на дорогу, бро!" + #: lang/json/talk_topic_from_json.py msgid "I must focus on the road!" msgstr "Мне надо смотреть на дорогу!" @@ -208711,10 +211919,6 @@ msgstr "Ничего в голову не лезет. Может позже сп msgid "I have some reason for not telling you." msgstr "У меня есть причины не рассказывать тебе об этом." -#: lang/json/talk_topic_from_json.py -msgid "Focus on the road, mate!" -msgstr "Смотри на дорогу, бро!" - #: lang/json/talk_topic_from_json.py msgid "Ah, okay." msgstr "Ну, ладно." @@ -208819,6 +212023,10 @@ msgstr "Нет, мы здесь будем в порядке." msgid "On second thought, never mind." msgstr "А впрочем, неважно." +#: lang/json/talk_topic_from_json.py +msgid "I can't train you properly while you're operating a vehicle!" +msgstr "Я не могу полноценно обучать тебя, пока ты за рулём!" + #: lang/json/talk_topic_from_json.py msgid "I can't train you properly while I'm operating a vehicle!" msgstr "Я не могу тебя учить, когда я за рулём!" @@ -208831,10 +212039,6 @@ msgstr "Дай мне немного времени, и я научу тебя msgid "I have some reason for denying you training." msgstr "У меня есть причины не учить тебя." -#: lang/json/talk_topic_from_json.py -msgid "I can't train you properly while you're operating a vehicle!" -msgstr "Я не могу полноценно обучать тебя, пока ты за рулём!" - #: lang/json/talk_topic_from_json.py msgid "Not a bloody chance, I'm going to get left behind!" msgstr "Ни единого шанса, я сматываю удочки!" @@ -216084,15 +219288,15 @@ msgstr "Хорошо, я с ними переговорю." msgid "All right! Let's get going." msgstr "Хорошо! Давай идти." +#: lang/json/talk_topic_from_json.py +msgid "We've done it! We've solved the list!" +msgstr "Мы сделали это! Мы закончили список!" + #: lang/json/talk_topic_from_json.py msgid "" "How's things with you? My cardboard collection is getting quite impressive." msgstr "Как продвигаются дела? У меня уже впечатляющее количество картона." -#: lang/json/talk_topic_from_json.py -msgid "We've done it! We've solved the list!" -msgstr "Мы сделали это! Мы закончили список!" - #: lang/json/talk_topic_from_json.py msgid "Have I told you about cardboard, friend? Do you have any?" msgstr "Дружище, говорил ли я тебе про картон? Нет ли у тебя его с собой?" @@ -221468,6 +224672,18 @@ msgstr "Ты знаешь, что делать, удачи." msgid "Got it." msgstr "Понятно." +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "Лучше следить за дорогой." + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "Будь осторожнее в этих местах." + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "Да?" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "Есть что сказать?" @@ -221480,14 +224696,14 @@ msgstr "У меня почасовая оплата, так что короче msgid "Hey." msgstr "Привет." -#: lang/json/talk_topic_from_json.py -msgid "Yes?" -msgstr "Да?" - #: lang/json/talk_topic_from_json.py msgid "Good to see you." msgstr "Приятно вновь тебя видеть." +#: lang/json/talk_topic_from_json.py +msgid "About those jobs…" +msgstr "По поводу этих заданий…" + #: lang/json/talk_topic_from_json.py msgid "Good to see you around." msgstr "Приятно видеть, что ты ещё среди живых." @@ -221497,8 +224713,8 @@ msgid "Want help with something else?" msgstr "Хочешь кое с чем помочь?" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." -msgstr "Забей, мне всё равно пора." +msgid "Lets set a combat strategy" +msgstr "Давай договоримся о стратегии боя" #: lang/json/talk_topic_from_json.py msgid "" @@ -221554,6 +224770,10 @@ msgstr "Слышно ли что-нибудь интересное?" msgid "Anything on your mind?" msgstr "О чём думаешь?" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "Хочешь помочь кое с чем ещё?" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "Знаешь ли что-то про наших нанимателей?" @@ -222739,6 +225959,306 @@ msgstr "" msgid "Now I choose the cause I'll die for." msgstr "Теперь я выбираю, чего ради погибну." +#: lang/json/talk_topic_from_json.py +msgid "" +"Yes. I ask because I noticed there are dinosaurs around. Do you know " +"anything about that?" +msgstr "" +"Да. Я спрашиваю потому, что вокруг и правда есть динозавры. Вам что-нибудь " +"известно об этом?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"I know all kinds of weird useless stuff. I've seen things at churches, I've" +" seen things on farms, I've seen whole exhibits way out. Those Swampers, " +"they know what's happening. They're creatures of light come back to save us" +" all. Or eat us, I forget." +msgstr "" +"Я знаю много всего странного и бесполезного. Приходилось видеть всякое в " +"церквях, на фермах, даже как-то целая выставка попалась. Эти Болотники, они " +"знают, что творится. Они создания света, что пришли спасти нас. Или съесть " +"нас, уже и не помню." + +#: lang/json/talk_topic_from_json.py +msgid "The eaters will be fed." +msgstr "Едоки будут накормлены." + +#: lang/json/talk_topic_from_json.py +msgid "Welcome. Are you hungry friend?" +msgstr "Добро пожаловать. Вы голодны, друг мой?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You look hungry friend. So much hunger in this world. This is the time of " +"the eaters." +msgstr "" +"Вы выглядите так, будто вам не помешает поесть. Слишком много голода в мире." +" Это время едоков." + +#: lang/json/talk_topic_from_json.py +msgid "Hello. Who are the eaters?" +msgstr "Здравствуйте. Кто такие едоки?" + +#: lang/json/talk_topic_from_json.py +msgid "So about the eaters…" +msgstr "Насчёт едоков…" + +#: lang/json/talk_topic_from_json.py +msgid "You mentioned some pretenders before. What does that mean?" +msgstr "Вы упоминали каких-то притворщиков. О чем вы говорили?" + +#: lang/json/talk_topic_from_json.py +msgid "Is there a way I can help feed the eaters?" +msgstr "Могу ли я как-то помочь накормить едоков?" + +#: lang/json/talk_topic_from_json.py +msgid "I have to get going. Take care, CEO Baronyx." +msgstr "Мне пора идти. Берегите себя, Директор Бароникс." + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters have returned, along with the false ones. We must feed the" +" eaters and destroy the pretenders child." +msgstr "" +"Великие едоки вернулись, а за ними пришли и ложные. Мы должны накормить " +"едоков и уничтожить семя притворщиков." + +#: lang/json/talk_topic_from_json.py +msgid "Who are you talking about?" +msgstr "О чём вообще речь?" + +#: lang/json/talk_topic_from_json.py +msgid "No thank you, I'd like to leave now." +msgstr "Нет, спасибо, и мне уже пора, пожалуй." + +#: lang/json/talk_topic_from_json.py +msgid "" +"This Cataclysm has woken the great eaters, lost in time, returned them to " +"the world to do their great work, to multiply and fill the land with their " +"song. The time of man is over, but we few who remain can do our part to " +"protect this new world from the pretenders, who would steal the meat." +msgstr "" +"Этот Катаклизм пробудил великих едоков, потерянных во времени, они " +"вернулись, чтобы завершить свою великую работу, размножаться и заполнить " +"земли своей песней. Время человека подошло к концу, но мы, немногие " +"оставшиеся, делаем всё, что можем, чтобы защитить мир от притворщиков, " +"пришедших, чтобы красть плоть." + +#: lang/json/talk_topic_from_json.py +msgid "So what do you do with the meat?" +msgstr "Так что вы делаете с мясом?" + +#: lang/json/talk_topic_from_json.py +msgid "Who are the great eaters and the pretenders?" +msgstr "Что за великие едоки и притворщики?" + +#: lang/json/talk_topic_from_json.py +msgid "Are there any others left?" +msgstr "А другие остались?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are the ones that were lost, what we call dinosaurs whose " +"meat we took and who are taking it back. The pretenders are those others " +"that have come to steal the meat of this world. It does not belong to them " +"and we will take it from their mouths." +msgstr "" +"Великие едоки - потерянные, которых мы зовём динозаврами, чью плоть мы " +"забрали, и которые возвращают её себе. Притворщики - это другие, пришедшие, " +"чтобы украсть плоть этого мира. Она им не принадлежит, и мы заберём её у " +"них, пусть даже вытащив изо рта." + +#: lang/json/talk_topic_from_json.py +msgid "Okay, so you worship dinosaurs. Understood." +msgstr "Ясно, вы поклоняетесь динозаврам. Понятно." + +#: lang/json/talk_topic_from_json.py +msgid "" +"The Swampers knew these times would return and we prepared for them. When " +"others wasted their time and meat, we fed and grew strong, and we filled our" +" stores with meat for this day." +msgstr "" +"Болотники знали, что эти времена вернутся, и мы к ним готовились. Пока " +"другие тратили зря своё время и мясо, мы питались и становились сильнее, и " +"мы заполнили наши кладовые мясом для этого дня." + +#: lang/json/talk_topic_from_json.py +msgid "Yes, very good." +msgstr "Да, очень хорошо." + +#: lang/json/talk_topic_from_json.py +msgid "You keep talking about meat. Why is meat so important?" +msgstr "Вы продолжаете говорить про мясо и плоть. Почему мясо так важно?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The meat makes the great eaters strong. We gather the meat and feed them, " +"and in the end we too will serve the eaters in death as we do in life. This" +" was always our purpose and we lucky few have lived to see it." +msgstr "" +"Мясо делает великих едоков сильнее. Мы собираем мясо и скармливаем его им, и" +" в конце концов даже в нашей смерти мы послужим великим едокам. Это всегда " +"было нашей целью, и мы немногие счастливцы, которым повезло узреть этот " +"день." + +#: lang/json/talk_topic_from_json.py +msgid "Our purpose? How do you know?" +msgstr "Вашей целью? Откуда вам такое знать?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The return of the great eaters was fortold by a prophet. We faithful have " +"been waiting and preparing since the revelation." +msgstr "" +"Возвращение великих едоков было предсказано пророком. Мы ,верящие, ждали и " +"готовились со дня откровения." + +#: lang/json/talk_topic_from_json.py +msgid "I guess it must be nice to be proven right." +msgstr "Думаю, приятно получить доказательства своей правоты." + +#: lang/json/talk_topic_from_json.py +msgid "This is crazy." +msgstr "Это безумие." + +#: lang/json/talk_topic_from_json.py +msgid "" +"You understand our purpose. I welcome you to this work, all are needed to " +"feed the eaters." +msgstr "" +"Вы понимаете нашу цель. Я приветствую вас на этом пути, и всё что нужно - " +"кормить едоков." + +#: lang/json/talk_topic_from_json.py +msgid "" +"You deny what you see right in front of you. This world is what was " +"fortold." +msgstr "" +"Вы отрицаете то, что находится прямо перед вами. Мир таков, как это было " +"предсказано." + +#: lang/json/talk_topic_from_json.py +msgid "The eaters have fed. They will be hungry again in time" +msgstr "Едоки сыты. Вскоре они вновь проголодаются." + +#: lang/json/talk_topic_from_json.py +msgid "You know what to do." +msgstr "Вы знаете, что делать." + +#: lang/json/talk_topic_from_json.py +msgid "The great eaters must be fed. Are you ready?" +msgstr "Великие едоки должны быть накормлены. Вы готовы?" + +#: lang/json/talk_topic_from_json.py +msgid "There is still more work to do. Are you ready?" +msgstr "Ещё немало работы. Вы готовы?" + +#: lang/json/talk_topic_from_json.py +msgid "There is meat ready for the feeding. Are you ready to gather it?" +msgstr "Вокруг полно плоти, что нужно скормить. Вы готовы собрать её?" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters are hungry." +msgstr "Едоки голодны." + +#: lang/json/talk_topic_from_json.py +msgid "There is more meat needed." +msgstr "Нужно больше мяса." + +#: lang/json/talk_topic_from_json.py +msgid "I know of eaters ready for meat." +msgstr "Я знаю, едоки готовы к мясу." + +#: lang/json/talk_topic_from_json.py +msgid "Maybe another time CEO Baronyx." +msgstr "Возможно, в другой раз, Директор Бароникс." + +#: lang/json/talk_topic_from_json.py +msgid "" +"If you are ready to be of service to the great eaters, go and find meat and " +"bring it back. There is always need for more." +msgstr "" +"Если вы готовы послужить великим едокам, ступайте и найдите мясо, а затем " +"возвращайтесь с ним. Нам всегда нужно больше." + +#: lang/json/talk_topic_from_json.py +msgid "Happy to be of service to the great eaters. I'm in." +msgstr "Для меня счастье послужить великим едокам. Я в деле." + +#: lang/json/talk_topic_from_json.py +msgid "Excellent. Make it happen." +msgstr "Превосходно. Сделайте всё, что необходимо." + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are not picky, any pure meat will do, but mutant and " +"tainted meat are not good enough." +msgstr "" +"Великие едоки не привередливы, они примут любое чистое мясо. Мясо мутантов и" +" заражённое не подойдут." + +#: lang/json/talk_topic_from_json.py +msgid "" +"So, meat from a creature that isn't a zombie, or a giant monster. Got it." +msgstr "В общем, мясо, которое не с зомби или монстра. Ясно." + +#: lang/json/talk_topic_from_json.py +msgid "Of course, you should find everything you need here." +msgstr "Конечно, здесь вы найдёте всё, что вам нужно." + +#: lang/json/talk_topic_from_json.py +msgid "That explains the knives then." +msgstr "Это объясняет ножи." + +#: lang/json/talk_topic_from_json.py +msgid "Oh, you know my friend Brigitte. Well in that case, let's go!" +msgstr "О, вы знаете мою подругу Бриджит. В таком случае, вперёд!" + +#: lang/json/talk_topic_from_json.py +msgid "No, I must remain here to oversee the company." +msgstr "Нет, мне нужно остаться, что наблюдать за делами компании." + +#: lang/json/talk_topic_from_json.py +msgid "Of course CEO Baronyx." +msgstr "Конечно, Директор Бароникс." + +#: lang/json/talk_topic_from_json.py +msgid "Sweet!" +msgstr "Отлично!" + +#: lang/json/talk_topic_from_json.py +msgid "Not just now. You should remain here to oversee the company." +msgstr "" +"Не прямо сейчас. Вам стоит остаться, чтобы наблюдать за делами компании." + +#: lang/json/talk_topic_from_json.py +msgid "" +"Of course, the company will be ready when you are and the great eaters will " +"feed either way." +msgstr "" +"Конечно, компания всегда будет ждать тебя, и великие едоки в любом случае не" +" останутся без еды." + +#: lang/json/talk_topic_from_json.py +msgid "" +"It was fortold that as the great eaters returned, so too would the " +"pretenders, who would come to steal the meat. Very little is asked of us, " +"except that we do all we can to ensure that the true great eaters received " +"as much meat as possible and the pretenders go hungry." +msgstr "" +"Было предсказано, что великие едоки вернутся, а за ними придут и " +"притворщики, чтобы красть плоть. От нас требуется малость, лишь сделать всё," +" чтобы истинные поедатели получили столько плоти, сколько возможно, а " +"притворщики голодали." + +#: lang/json/talk_topic_from_json.py +msgid "Yes CEO Baronyx, very good CEO Baronyx." +msgstr "Да, Директор Бароникс, очень хорошо, Директор Бароникс." + +#: lang/json/talk_topic_from_json.py +msgid "This makes no sense and I'm done talking about it." +msgstr "В этом нет смысла, и я больше не буду об этом говорить." + #: lang/json/talk_topic_from_json.py msgid "Heya, scav." msgstr "Здарова, добытчик." @@ -223283,10 +226803,6 @@ msgstr "Вы блокируете противника (%s)" msgid " blocks %s" msgstr " блокирует противника (%s)" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "Парирование" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -225798,6 +229314,101 @@ msgstr "Вы проводите атаку вращением по против msgid " unleashes a spin attack against %s and those nearby" msgstr " проводит атаку вращением по противнику (%s) и стоящим рядом" +#: lang/json/technique_from_json.py +msgid "Disarming Strike" +msgstr "Обезоруживающий удар" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You skillfully disarm %s" +msgstr "Вы умело разоружаете противника (%s)" + +#: lang/json/technique_from_json.py +#, python-format +msgid " skillfully disarms %s" +msgstr " умело разоружает противника (%s)" + +#: lang/json/technique_from_json.py +msgid "Lightning Recovery" +msgstr "Мгновенное восстановление" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You miss %s but recover in the blink of an eye" +msgstr "" +"Вы промахиваетесь по противнику (%s), но восстанавливаете равновесие в " +"мгновение ока" + +#: lang/json/technique_from_json.py +#, python-format +msgid " misses %s but recovers in the blink of an eye" +msgstr "" +" промахивается по противнику (%s), но восстанавливает равновесие в " +"мгновение ока" + +#: lang/json/technique_from_json.py +msgid "Finishing Move" +msgstr "Добивающая атака" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You finish off %s with a powerful slash" +msgstr "Вы добиваете противника (%s) сильным режущим движением" + +#: lang/json/technique_from_json.py +#, python-format +msgid " finishes off %s with a powerful slash" +msgstr " добивает противника (%s) сильным режущим движением" + +#: lang/json/technique_from_json.py +msgid "Dazing Strike" +msgstr "Ошеломляющий удар" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You harshly stun %s" +msgstr "Вы ошеломляете противника (%s)" + +#: lang/json/technique_from_json.py +#, python-format +msgid " harshly stuns %s" +msgstr " ошеломляет противника (%s)" + +#: lang/json/technique_from_json.py +msgid "Steel Wind" +msgstr "Стальной ветер" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleave through %s and those nearby like a steel wind" +msgstr "" +"Вы прорубаетесь сквозь противника (%s) и окружающих, словно стальной ветер" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleaves through %s and those nearby like a steel wind" +msgstr "" +" прорубается сквозь противника (%s) и окружающих, словно стальной " +"ветер" + +#: lang/json/technique_from_json.py +msgid "Scything Blade" +msgstr "Косящее лезвие" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleanly reap through %s and those nearby" +msgstr "" +"Вы наносите чистый удар по противнику (%s) и стоящим рядом, собирая кровавую" +" жатву" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleanly reap throug %s and those nearby" +msgstr "" +" наносит чистый удар по противнику (%s) и стоящим рядом, собирая " +"кровавую жатву" + #: lang/json/technique_from_json.py msgid "Ausstoß" msgstr "Ausstoß" @@ -225854,6 +229465,220 @@ msgstr "Вы бьёте противника (%s) сверхзвуковым у msgid " launches a supersonic punch at %s" msgstr " бьёт противника (%s) сверхзвуковым ударом" +#: lang/json/technique_from_json.py +msgid "Mega Kick" +msgstr "Мегапинок" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Mega Kick on %s" +msgstr "Вы используете Мегапинок на противнике (%s)" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Mega Kick on %s" +msgstr " использует Мегапинок на противнике (%s)" + +#: lang/json/technique_from_json.py +msgid "Darkest Lariat" +msgstr "Тёмный лариат" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Darkest Lariat on %s" +msgstr "Вы используете Тёмный Лариат на противнике (%s)" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Darkest Lariat on %s" +msgstr " использует Тёмный Лариат на противнике (%s)" + +#: lang/json/technique_from_json.py +msgid "Smart Strike" +msgstr "Умный удар" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Smart Strike on %s" +msgstr "Вы используете Умный удар на противнике (%s)" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Smart Strike on %s" +msgstr " использует Умный удар на противнике (%s)" + +#: lang/json/technique_from_json.py +msgid "Low Sweep" +msgstr "Удар вниз" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Low Sweep on %s" +msgstr "Вы используете Удар вниз на противнике (%s)" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Low Sweep on %s" +msgstr " использует Удар вниз на противнике (%s)" + +#: lang/json/technique_from_json.py +msgid "Fool's Strike" +msgstr "Атака глупца" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely fool %s and strike back" +msgstr "Вы обманываете противника (%s) и наносите удар в ответ" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely fools %s and strike back" +msgstr " обманывает противника (%s) и наносит удар в ответ" + +#: lang/json/technique_from_json.py +msgid "Hydra Slaying Strike" +msgstr "Убийство гидры" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You interrupt %s with a perfectly aimed strike" +msgstr "Вы прерываете атаку противника (%s) ударом идеальной точности" + +#: lang/json/technique_from_json.py +#, python-format +msgid " interrupt %s with a perfectly aimed strike" +msgstr " прерывает атаку противника (%s) ударом идеальной точности" + +#: lang/json/technique_from_json.py +msgid "Mighty Throw" +msgstr "Могучий бросок" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You toss %s aside with a Mighty Throw" +msgstr "Вы отбрасываете противника (%s) прочь Могучим броском" + +#: lang/json/technique_from_json.py +#, python-format +msgid " tosses %s with a Mighty Throw" +msgstr " отбрасывает противника (%s) прочь Могучим броском" + +#: lang/json/technique_from_json.py +msgid "Ballista Throw" +msgstr "Бросок «Баллиста»" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You spin and hurl %s away with a Ballista Throw" +msgstr "Вы крутитесь и бросаете противника (%s) броском «Баллиста»" + +#: lang/json/technique_from_json.py +#, python-format +msgid " spins and hurls %s away with a Ballista Throw" +msgstr " крутится и бросает противника (%s) броском «Баллиста»" + +#: lang/json/technique_from_json.py +msgid "Flowing Water" +msgstr "Текущая вода" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You deflect %s's attack and counter in one fluid motion" +msgstr "" +"Вы отражаете атаку противника (%s) и атакуете в ответ одним плавным " +"движением" + +#: lang/json/technique_from_json.py +#, python-format +msgid " deflects %s's attack and counters in one fluid motion" +msgstr "" +" отражает атаку противника (%s) и атакует в ответ одним плавным " +"движением" + +#: lang/json/technique_from_json.py +msgid "Disarming Slash" +msgstr "Обезоруживающий порез" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You disarm %s with a quick flick of your weapon" +msgstr "Вы обезоруживаете противника (%s) быстрым рывком своего оружия" + +#: lang/json/technique_from_json.py +#, python-format +msgid " disarms %s with a quick flick of their weapon" +msgstr " обезоруживает противника (%s) быстрым рывком своего оружия" + +#: lang/json/technique_from_json.py +msgid "Sarlacc Sweep" +msgstr "Размах Сарлакка" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You quickly sweep through %s and those nearby" +msgstr "Вы стремительно рассекаете противника (%s) и окружающих" + +#: lang/json/technique_from_json.py +#, python-format +msgid " quickly sweeps through %s and those nearby" +msgstr " стремительно рассекает противника (%s) и окружающих" + +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "Молот Гор" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "Вы сокрушаете противника (%s) всем весом Молота Гор." + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr " сокрушает противника (%s) всем весом Молота Гор." + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "Неотразимый удар гор" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "Вы врезаете по противнику (%s) Ударом гор." + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr " врезает по противнику (%s) Ударом гор." + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "Удар Колосса" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "Вы полностью разбиваете противника (%s) Ударом Колосса" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr " полностью разбивает противника (%s) Ударом Колосса" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "Стойка Росомахи" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "%s пытается вас схватить, но вы выдираетесь из захвата!" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "%s пытается схватить, но выдирается из захвата!" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "Эта земля не слушается ваших приказов сдвинуться." @@ -225901,6 +229726,10 @@ msgstr "Мёртвое дерево ожило." msgid "Life springs anew from the dead grass." msgstr "Жизнь вновь вырывается среди мертвой поросли." +#: lang/json/ter_furn_transform_messages_from_json.py +msgid "The door opens forcefully!" +msgstr "Дверь с силой распахивается!" + #: lang/json/terrain_from_json.py msgid "scorched earth" msgstr "выжженная земля" @@ -232753,11 +236582,11 @@ msgstr "хетчбэк" #: lang/json/vehicle_from_json.py msgid "Sports Car" -msgstr "спортмобиль" +msgstr "спортивный автомобиль" #: lang/json/vehicle_from_json.py msgid "Atomic Sports Car" -msgstr "атомный спортмобиль" +msgstr "атомный спортивный автомобиль" #: lang/json/vehicle_from_json.py msgid "Electric Sports Car" @@ -234550,6 +238379,12 @@ msgstr "деревянный лодочный корпус" msgid "A wooden board that keeps the water out of your boat." msgstr "Деревянный борт удерживает воду снаружи вашей лодки." +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" +"Связанные вместе брёвна, предназначенные для придания транспорту плавучести." + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -235077,14 +238912,19 @@ msgstr "" "можно будет ее потянуть." #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" -msgstr "деревянное сидение" +msgid "flimsy wooden seat" +msgstr "хлипкое деревянное сидение" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "Место для сидения." +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "деревянное сидение" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "деревянный штырь" @@ -235985,6 +239825,11 @@ msgstr "с начала игры" msgid "At least %s from %s (%s remaining)" msgstr "По крайней мере %s из %s (%s остается )" +#: src/achievement.cpp +#, c-format +msgid "Exactly %s from %s" +msgstr "Точно %s из %s" + #: src/achievement.cpp #, c-format msgid "Within %s of %s (%s remaining)" @@ -236001,13 +239846,14 @@ msgid "Within %s of %s (passed)" msgstr "В %s из %s (пройдено)" #: src/achievement.cpp -msgid "Triggered by " -msgstr "Активируется " +#, c-format +msgid "Triggered by %s" +msgstr "Активируется: %s" #: src/achievement.cpp #, c-format -msgid "%s/%s " -msgstr "%s/%s" +msgid "%s/%s %s" +msgstr "%s/%s %s" #: src/achievement.cpp msgid " (further requirements hidden)" @@ -237272,7 +241118,7 @@ msgstr "Вы разряжаете %s." #: src/activity_handlers.cpp #, c-format msgid "You have run out of %s." -msgstr "У вас закончилось%s." +msgstr "У вас закончилось %s." #: src/activity_handlers.cpp msgid "You fertilized every plot you could." @@ -238076,7 +241922,7 @@ msgstr "[<] страница %1$d из %2$d [>]" msgid "< [%s] Sort: %s >" msgstr "< [%s] Сорт.: %s >" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "[%s] Фильтр" @@ -241358,10 +245204,18 @@ msgstr "" msgid "Accuracy" msgstr "Точность" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "Шанс критического попадания" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "Уклонение" +#: src/bonuses.cpp +msgid "Block effectiveness" +msgstr "Эффективность блока" + #: src/bonuses.cpp src/panels.cpp msgid "Speed" msgstr "Скорость" @@ -241882,20 +245736,26 @@ msgstr " поднимается." #: src/character.cpp src/monster.cpp #, c-format -msgid "The %s breaks free of the webs!" -msgstr "%s высвобождается из паутины!" +msgid "The %s escapes the bear trap!" +msgstr "%s вырывается из медвежьего капкана!" #: src/character.cpp -msgid "You free yourself from the webs!" -msgstr "Вы освобождаетесь от паутины!" +#, c-format +msgid "Your %s tries to free itself from the bear trap, but can't get loose!" +msgstr "Ваш %s безуспешно пытается вырваться из капкана!" #: src/character.cpp -msgid " frees themselves from the webs!" -msgstr " освобождается от паутины!" +msgid "You free yourself from the bear trap!" +msgstr "Вы освобождаетесь от медвежьего капкана!" #: src/character.cpp -msgid "You try to free yourself from the webs, but can't get loose!" -msgstr "Вы пытаетесь освободиться от паутины, но у вас не получается!" +msgid " frees themselves from the bear trap!" +msgstr " освобождается от медвежьего капкана!" + +#: src/character.cpp +msgid "You try to free yourself from the bear trap, but can't get loose!" +msgstr "" +"Вы пытаетесь освободиться от медвежьего капкана, но у вас не получается!" #: src/character.cpp src/monster.cpp #, c-format @@ -241931,29 +245791,6 @@ msgstr " освобождается из тяжёлого силка!" msgid "You try to free yourself from the heavy snare, but can't get loose!" msgstr "Вы пытаетесь вырваться из тяжёлого силка, но у вас не получается!" -#: src/character.cpp src/monster.cpp -#, c-format -msgid "The %s escapes the bear trap!" -msgstr "%s вырывается из медвежьего капкана!" - -#: src/character.cpp -#, c-format -msgid "Your %s tries to free itself from the bear trap, but can't get loose!" -msgstr "Ваш %s безуспешно пытается вырваться из капкана!" - -#: src/character.cpp -msgid "You free yourself from the bear trap!" -msgstr "Вы освобождаетесь от медвежьего капкана!" - -#: src/character.cpp -msgid " frees themselves from the bear trap!" -msgstr " освобождается от медвежьего капкана!" - -#: src/character.cpp -msgid "You try to free yourself from the bear trap, but can't get loose!" -msgstr "" -"Вы пытаетесь освободиться от медвежьего капкана, но у вас не получается!" - #: src/character.cpp msgid "You free yourself from the rubble!" msgstr "Вы вырываетесь из завала!" @@ -241966,18 +245803,6 @@ msgstr " освобождается из завала!" msgid "You try to free yourself from the rubble, but can't get loose!" msgstr "Вы пытаетесь освободиться из завала, но у вас не получается!" -#: src/character.cpp -msgid "You try to escape the pit, but slip back in." -msgstr "Вы пытаетесь выбраться из ямы, но соскальзываете вниз." - -#: src/character.cpp -msgid "You escape the pit!" -msgstr "Вы выбрались из ямы!" - -#: src/character.cpp -msgid " escapes the pit!" -msgstr " выползает из ямы!" - #: src/character.cpp #, c-format msgid "Your %s tries to break free, but fails!" @@ -242017,6 +245842,35 @@ msgstr "Вы разрываете захват!" msgid " breaks out of the grab!" msgstr " разрывает захват!" +#: src/character.cpp src/monster.cpp +#, c-format +msgid "The %s breaks free of the webs!" +msgstr "%s высвобождается из паутины!" + +#: src/character.cpp +msgid "You free yourself from the webs!" +msgstr "Вы освобождаетесь от паутины!" + +#: src/character.cpp +msgid " frees themselves from the webs!" +msgstr " освобождается от паутины!" + +#: src/character.cpp +msgid "You try to free yourself from the webs, but can't get loose!" +msgstr "Вы пытаетесь освободиться от паутины, но у вас не получается!" + +#: src/character.cpp +msgid "You try to escape the pit, but slip back in." +msgstr "Вы пытаетесь выбраться из ямы, но соскальзываете вниз." + +#: src/character.cpp +msgid "You escape the pit!" +msgstr "Вы выбрались из ямы!" + +#: src/character.cpp +msgid " escapes the pit!" +msgstr " выползает из ямы!" + #: src/character.cpp #, c-format msgid "Your %s bionic comes back online." @@ -246005,14 +249859,6 @@ msgstr "Запустить бенчмарк (X секунд)" msgid "Test trait group" msgstr "Протестировать группу черт" -#: src/debug_menu.cpp -msgid "Show debug message" -msgstr "Показать отладочное сообщение" - -#: src/debug_menu.cpp -msgid "Crash game (test crash handling)" -msgstr "Вылет игры (тест обработки вылета)" - #: src/debug_menu.cpp msgid "Toggle NPC pathfinding on map" msgstr "Переключить отображение пути NPC на карте" @@ -246041,6 +249887,18 @@ msgstr "Информация…" msgid "Enable achievements" msgstr "Включить достижения" +#: src/debug_menu.cpp +msgid "Show debug message" +msgstr "Показать отладочное сообщение" + +#: src/debug_menu.cpp +msgid "Crash game (test crash handling)" +msgstr "Вылет игры (тест обработки вылета)" + +#: src/debug_menu.cpp +msgid "Quit to main menu" +msgstr "Выйти в главное меню" + #: src/debug_menu.cpp msgid "Game…" msgstr "Игра..." @@ -246137,10 +249995,6 @@ msgstr "Спавн шаблона генератора карты" msgid "Map…" msgstr "Карта…" -#: src/debug_menu.cpp -msgid "Quit to main menu" -msgstr "Выйти в главное меню" - #: src/debug_menu.cpp msgid "" "Debug Functions - Using these will cheat not only the game, but yourself.\n" @@ -246664,6 +250518,10 @@ msgstr "Пометить как выполненное" msgid "Remove mission without proper cleanup" msgstr "Удалить задание без правильной очистки" +#: src/debug_menu.cpp +msgid "Benchmark in progress…" +msgstr "Бенчмарк в процессе…" + #: src/debug_menu.cpp #, c-format msgid "Drew %d times in %.3f seconds. (%.3f fps average)" @@ -247930,138 +251788,182 @@ msgid "Liked" msgstr "Нравится" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "Легендарные" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" msgstr "Непревзойдённые" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" msgstr "Могущественные" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" msgstr "Знаменитые" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" -msgstr "Всем известные" +msgstr "Широко известные" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" -msgstr "Говорят о" +msgstr "Известные" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" msgstr "Отбросы общества" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "Вредители" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "Презренные" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "Паразиты" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "Вымогатели" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "Посмешища" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "Нейтральные" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" msgstr "Неприлично богатые" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "Богатые" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" msgstr "Преуспевающие" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" msgstr "Зажиточные" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" -msgstr "Комфортно" +msgstr "Обеспеченные" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "Нуждающиеся" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" msgstr "Бедствующие" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" msgstr "Обнищавшие" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" msgstr "Нищие" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "Жирующие" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" msgstr "Сытые" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "Побирающиеся" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" -msgstr "Истощал" +msgstr "Истощавшие" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" msgstr "Голодающие" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "Легендарные" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" -msgstr "Эксперт" +msgstr "Эксперты" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" msgstr "Ветераны" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" msgstr "Опытные" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "Компетентные" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" msgstr "Новички" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" msgstr "Ослабленные" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" msgstr "Жалкие" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "Никчёмные" @@ -248674,12 +252576,12 @@ msgstr "" #, c-format msgid "" "Notes:\n" -"Send a companion to gather light brush and heavy sticks.\n" +"Send a companion to gather light brush and stout branches.\n" "\n" "Skill used: survival\n" "Difficulty: N/A\n" "Gathering Possibilities:\n" -"> heavy sticks\n" +"> stout branches\n" "> withered plants\n" "> splintered wood\n" "\n" @@ -248688,12 +252590,12 @@ msgid "" "Positions: %d/3\n" msgstr "" "Примечание:\n" -"Отправить компаньона собирать мелкие кустарники и палки.\n" +"Отправить компаньона собирать мелкие кустарники и ветки.\n" " \n" "Используемый навык: выживание\n" "Сложность: Н/Д\n" "Возможная добыча:\n" -"> тяжёлые палки\n" +"> прочные ветки\n" "> увядшие растения\n" "> расколотая древесина\n" " \n" @@ -249972,8 +253874,8 @@ msgid "You do not have a camp food zone. Aborting…" msgstr "У вас нет зоны еды. Отмена…" #: src/faction_camp.cpp -msgid "No items are located at the drop point…" -msgstr "На точке сброса не найдено никаких предметов…" +msgid "No suitable items are located at the drop points…" +msgstr "На точке сброса не найдено подходящих предметов…" #: src/faction_camp.cpp #, c-format @@ -250199,6 +254101,15 @@ msgstr "%s опасно близко!" msgid "Wait till you wake up…" msgstr "Ожидайте, пока ваш персонаж не проснётся…" +#: src/game.cpp +#, c-format +msgid "" +"\n" +"%s to interrupt" +msgstr "" +"\n" +"%s, чтобы прервать" + #: src/game.cpp #, c-format msgid "%s, cancel Auto-move?" @@ -250309,6 +254220,11 @@ msgctxt "action" msgid "open" msgstr "открыть" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "настройки автоподбора кармана" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -251889,11 +255805,27 @@ msgstr "Вы проходите мимо препятствия (%s), прегр msgid "You cannot haul items here." msgstr "Вы не можете тащить предметы тут." +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "%s на пути!" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "%s на пути!" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a +#. zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" +"%s Попытаться пройти? Возможно, вам придётся сражаться, чтобы выбраться " +"оттуда." + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -253294,11 +257226,6 @@ msgstr "На дороге стоит какой-то шут!" msgid "The %s is in the way!" msgstr "%s на пути!" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "%s на пути!" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -254600,6 +258527,11 @@ msgstr "Вы начали вскрывать сейф." msgid "Attempt to hack this safe?" msgstr "Попытаться взломать сейф?" +#: src/iexamine.cpp +#, c-format +msgid "The %s is locked. You could pry it open with the right tool…" +msgstr "Это (%s) закрыто. Можно было бы взломать подходящим инструментом." + #: src/iexamine.cpp #, c-format msgid "The %s is locked. If only you had something to pry it with…" @@ -255858,6 +259790,10 @@ msgstr "Выбрать установленную бионику для удал msgid "Splint broken limbs" msgstr "Наложить шину на сломанные конечности" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "Обработать раны" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "У вас не установлена никакая бионика." @@ -255888,17 +259824,97 @@ msgid " doesn't have limbs that require splinting." msgstr "У NPC () нет травм, требующих наложения шины." #: src/iexamine.cpp -msgid "This mill already contains flour." -msgstr "В мельнице уже содержится мука." +msgid "You don't have any wounds that need treatment." +msgstr "У вас нет ран, требующих обработки." #: src/iexamine.cpp -msgid "Remove it before starting the mill again." -msgstr "Извлеките её, прежде чем снова запустить мельницу." +msgid " doesn't have any wounds that need treatment." +msgstr " не имеет ран, требующих обработки." + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" +"Автодок обнаружил бактериальную инфекцию в вашем организме, но также " +"обнаружил, что вы недавно принимали антибиотики, и не стал вводить " +"дополнительную дозу." + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" +"Автодок обнаружил бактериальную инфекцию в организме NPC (), но " +"также обнаружил, что недавно были приняты антибиотики, и не стал вводить " +"дополнительную дозу." + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" +"Автодок обнаружил бактериальную инфекцию в вашем организме и ввёл дозу " +"антибиотиков для борьбы с ней." + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" +"Автодок обнаружил бактериальную инфекцию в организме NPC () и ввёл " +"дозу антибиотиков для борьбы с ней." + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "Мышечные спазмы начинают уходить." + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "Препарат не помогает против спазмов." + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." +msgstr "" +"Автодок обнаружил у вас кровотечение (%s) и применил кровоостанавливающий " +"препарат." #: src/iexamine.cpp #, c-format -msgid "This rack contains %s, which can't be milled!" -msgstr "В мельнице лежит %s, это нельзя перемалывать!" +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" +"Автодок обнаружил кровотечение ( - %s) и применил " +"кровоостанавливающий препарат." + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" +"Автодок обнаружил у вас открытую рану (%s) и применил антисептическое " +"средство." + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" +"Автодок обнаружил открытую рану ( - %s) и применил антисептическое " +"средство." + +#: src/iexamine.cpp +#, c-format +msgid "This mill contains %s, which can't be milled!" +msgstr "В мельнице лежит: %s. Это нельзя перемалывать!" #: src/iexamine.cpp #, c-format @@ -256087,8 +260103,9 @@ msgid "Remove brake and start milling" msgstr "Снять с тормоза и начать перемалывать" #: src/iexamine.cpp -msgid "Remove brake and start milling, milling will take about 6 hours." -msgstr "Снять с тормоза и начать перемалывать. Это займёт примерно 6 часов." +#, c-format +msgid "Remove brake and start milling, milling will take about %s." +msgstr "Снять с тормоза и начать перемалывать. Это займёт примерно %s." #: src/iexamine.cpp msgid "Insert products for milling… mill is full" @@ -256123,21 +260140,8 @@ msgstr "Это мельница, жернова вращаются и перем #: src/iexamine.cpp #, c-format -msgid "It will finish milling in about %d hour." -msgid_plural "It will finish milling in about %d hours." -msgstr[0] "До конца помола осталось %d час." -msgstr[1] "До конца помола осталось %d часа." -msgstr[2] "До конца помола осталось %d часов." -msgstr[3] "До конца помола осталось %d час." - -#: src/iexamine.cpp -msgid "It will finish milling in less than an hour." -msgstr "До конца помола осталось меньше часа." - -#: src/iexamine.cpp -#, c-format -msgid "It should take about %d minutes to finish milling." -msgstr "До конца помола осталось примерно %d минут." +msgid "It should take about %s to finish milling." +msgstr "До конца помола осталось примерно %s." #: src/iexamine.cpp msgid "There's a mill here." @@ -256909,7 +260913,7 @@ msgstr "Объём (%s):" msgid "There are no available choices" msgstr "Без вариантов." -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "[%s] Фильтр: " @@ -257832,10 +261836,6 @@ msgstr "Модификатор переносимого веса: " msgid "Weight capacity bonus: " msgstr "Бонус переносимого веса: " -#: src/item.cpp -msgid "Storage: " -msgstr "Вместимость: " - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "* Этот предмет можно носить одновременно со шлемом." @@ -258143,6 +262143,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "* Этот предмет работает на бионической энергии." +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "Новое, может гореть" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "Почти новое, много горючего материала." + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "Чуть больше четверти сгорело." + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "Чуть больше половины сгорело." + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "Осталось меньше четверти несгоревшего." + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "Почти полностью сгорело." + +#: src/item.cpp +msgid "Fuel: " +msgstr "Топливо: " + #: src/item.cpp #, c-format msgid "Using: %s" @@ -258166,10 +262194,24 @@ msgstr "* Эту вещь можно укрепить." msgid "* This item is not repairable." msgstr "* Этот предмет невозможно починить." +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." -msgstr "Разборка займёт %s, и может дать: %s." +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "Разборка займёт %1$s, и может дать: %2$s." + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a +#. list of items. +#. ~ Bold text in the middle makes it easier to see where the second list +#. starts. +#: src/item.cpp +#, c-format +msgid "" +"Disassembly takes %1$s, requires %2$s and might " +"yield: %3$s." +msgstr "" +"Разборка займёт %1$s, требуется: %2$s, и может " +"дать: %3$s." #: src/item.cpp #, c-format @@ -258291,33 +262333,28 @@ msgid "Critical hit chance %d%% - %d%%" msgstr "Шанс на крит. попадание %d%% — %d%%" #: src/item.cpp -#, c-format -msgid "" -"%d bashing (%d on a critical hit)" -msgstr "" -"%d ударного урона (%d при крит. " -"попадании)" +msgid "Bashing: " +msgstr "Дробящий: " #: src/item.cpp -#, c-format -msgid "" -"%d cutting (%d on a critical hit)" -msgstr "" -"%d режущего урона (%d при крит. " -"попадании)" +msgid "Critical bash: " +msgstr "Крит. дробящий: " #: src/item.cpp -#, c-format -msgid "" -"%d piercing (%d on a critical hit)" -msgstr "" -"%d колющего урона (%d при крит. " -"попадании)" +msgid "Cutting: " +msgstr "Режущий: " #: src/item.cpp -#, c-format -msgid "%d moves per attack" -msgstr "%d ходов на атаку" +msgid "Critical cut: " +msgstr "Крит. режущий: " + +#: src/item.cpp +msgid "Piercing: " +msgstr "Колющий: " + +#: src/item.cpp +msgid "Critical pierce: " +msgstr "Крит. колющий: " #: src/item.cpp msgid "Integrated mod: " @@ -258932,10 +262969,11 @@ msgstr "Эта ёмкость (%1$s) не может хранить больше msgid "That %s doesn't have room to expand." msgstr "%s не имеет места для расширения." -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" -msgstr "%2$s x %1$d" +msgstr "%s x %d" #: src/item.cpp msgid "A nearby robot has repaired itself and stands up!" @@ -259061,6 +263099,56 @@ msgstr "У вас нет предметов с зарегистрированн msgid "Execute which action?" msgstr "Какое действие выполнить?" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "Нажмите клавишу, чтобы добавить к: %s" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "чёрный список" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "белый список" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "приоритет, " + +#: src/item_contents.cpp +msgid " item, " +msgstr "предмет, " + +#: src/item_contents.cpp +msgid " category, " +msgstr " категория, " + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "белый список, " + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "чёрный список, " + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "Введите приоритет (текущий: %d)" + +#: src/item_contents.cpp +msgid "item id" +msgstr "id предмета" + +#: src/item_contents.cpp +msgid "item category" +msgstr "категория предмета" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "Выберите предмет из находящихся рядом" + #: src/item_contents.cpp msgid "is not a container" msgstr "не является контейнером" @@ -259104,6 +263192,11 @@ msgstr "Какую группу протестировать?" msgid "Result of 100 spawns:" msgstr "Результат 100 генераций:" +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "%2$s x %1$d" + #: src/item_location.cpp msgid "inventory" msgstr "инвентарь" @@ -259292,6 +263385,34 @@ msgstr "в кармане уже слишком много веса" msgid "not enough space" msgstr "недостаточно места" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "Приоритет:" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "Белый список предметов: %s" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "(пусто)" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "Чёрный список предметов: %s" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "Белый список категорий: %s" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "Чёрный список категорий: %s" + #: src/itype.h msgid "click." msgstr "«щёлк»." @@ -259361,14 +263482,6 @@ msgstr "Вы приняли антибиотики." msgid " takes some antibiotics." msgstr " принимает антибиотики." -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "Мышечные спазмы начинают уходить." - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "Препарат не помогает против спазмов." - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -259380,12 +263493,12 @@ msgstr "" #: src/iuse.cpp #, c-format msgid "You're out of %s." -msgstr "У вас закончилось %s." +msgstr "У вас закончился препарат: %s." #: src/iuse.cpp src/iuse_actor.cpp #, c-format msgid "You use your %s." -msgstr "Вы используете ваш %s." +msgstr "Вы используете препарат: %s." #: src/iuse.cpp msgid "You wash the slime from your eyes." @@ -259594,7 +263707,7 @@ msgstr "Как ни странно, это неплохое на вкус." #: src/iuse.cpp #, c-format msgid "You chew your %s." -msgstr "Вы пожевали %s." +msgstr "Вы пожевали: %s." #: src/iuse.cpp msgid "You feel cleansed." @@ -259633,7 +263746,8 @@ msgstr "" msgid "" "As you eat the %s, you have a near-religious experience, feeling at one with" " your surroundings…" -msgstr "Съев %s, вы испытали почти религиозное чувство единения с окружением…" +msgstr "" +"Съев это (%s), вы испытали почти религиозное чувство единения с окружением…" #: src/iuse.cpp msgid "It tastes extremely strange!" @@ -259813,7 +263927,7 @@ msgstr "%s не считает это за еду." #: src/iuse.cpp #, c-format msgid "Put the %s where?" -msgstr "Куда положить %s?" +msgstr "Куда положить это (%s)?" #: src/iuse.cpp msgid "Are you sure you want to feed a person the dog food?" @@ -259918,8 +264032,8 @@ msgstr "Этот предмет уже был модифицирован так msgid "" "You modify your %1$s to listen for %2$s activation signal on the radio." msgstr "" -"Вы модифицируете %1$s таким образом, чтобы он принимал %2$s сигнал активации" -" по радио." +"Вы модифицируете предмет (%1$s) таким образом, чтобы он принимал %2$s сигнал" +" активации по радио." #: src/iuse.cpp msgid "Remove mods from tool?" @@ -259932,7 +264046,7 @@ msgstr "У вас нет модифицированных инструменто #: src/iuse.cpp #, c-format msgid "You remove the %s from the tool." -msgstr "Вы вынимаете %s из инструмента." +msgstr "Вы удаляете модификацию (%s) из инструмента." #: src/iuse.cpp msgid "You doubt you will have much luck catching fish here" @@ -259967,7 +264081,7 @@ msgstr "Куда распылить?" #: src/iuse.cpp #, c-format msgid "The %s is sprayed!" -msgstr "%s распылён!" +msgstr "%s покрывается распылённым веществом!" #: src/iuse.cpp #, c-format @@ -259977,7 +264091,7 @@ msgstr "%s выглядит ослеплённым." #: src/iuse.cpp #, c-format msgid "The %s is frozen!" -msgstr "%s замёрз!" +msgstr "%s замерзает!" #: src/iuse.cpp msgid "The RM13 combat armor's fuel cells are dead." @@ -260030,7 +264144,7 @@ msgstr "Ваша боевая броня RM13 выключена" #: src/iuse.cpp #, c-format msgid "You unpack your %s for use." -msgstr "Вы распаковали %s." +msgstr "Вы распаковали: %s." #: src/iuse.cpp msgid "Choose CBM to pack" @@ -260055,12 +264169,12 @@ msgstr "У вас не вышло правильно подготовить КБ #: src/iuse.cpp #, c-format msgid "You can't pack your %s until you take it off." -msgstr "Вы не можете свернуть %s, пока не снимете его." +msgstr "Вы не можете свернуть это (%s), пока не снимете." #: src/iuse.cpp #, c-format msgid "You pack your %s for storage." -msgstr "Вы сворачиваете ваш %s на хранение." +msgstr "Вы сворачиваете предмет (%s) на хранение." #: src/iuse.cpp msgid "You need batteries to cauterize wounds." @@ -260220,7 +264334,9 @@ msgstr "Вы пытаетесь, но не можете взломать окн #: src/iuse.cpp #, c-format msgid "You can't get sufficient leverage to open that with your %s." -msgstr "Вы не сможете создать достаточное усилие и открыть это с помощью %s." +msgstr "" +"Вы не сможете создать достаточное усилие и открыть это с помощью вашего " +"инструмента (%s)." #: src/iuse.cpp msgid "You break the glass." @@ -260485,7 +264601,7 @@ msgstr "Транспортное средство на пути!" #: src/iuse.cpp #, c-format msgid "You start drilling into the %1$s with your %2$s." -msgstr "Вы начинаете сверлить %1$s при помощи %2$s." +msgstr "Вы начинаете сверлить участок (%1$s) при помощи инструмента (%2$s)." #: src/iuse.cpp msgid "Mine where?" @@ -260498,7 +264614,7 @@ msgstr "Здесь нельзя раскапывать." #: src/iuse.cpp #, c-format msgid "You strike the %1$s with your %2$s." -msgstr "Вы атакуете %1$s, используя %2$s." +msgstr "Вы бьёте по поверхности (%1$s), используя свой инструмент (%2$s)." #: src/iuse.cpp msgid "Burrow where?" @@ -260511,7 +264627,8 @@ msgstr "Здесь нельзя рыть." #: src/iuse.cpp #, c-format msgid "You start tearing into the %1$s with your %2$s." -msgstr "Вы начинаете вгрызаться в %1$s при помощи %2$s." +msgstr "" +"Вы начинаете вгрызаться в поверхность (%1$s) при помощи инструмента (%2$s)." #: src/iuse.cpp msgid "buzzing" @@ -260615,7 +264732,7 @@ msgstr "У счётчика Гейгера включился индикатор #: src/iuse.cpp #, c-format msgid "Black goo emerges from the canister and envelopes a %s!" -msgstr "Чёрная слизь вылезла из контейнера и обволокла %s!" +msgstr "Чёрная слизь вылезла из контейнера и обволокла противника (%s)!" #: src/iuse.cpp msgid "Living black goo emerges from the canister!" @@ -260738,37 +264855,37 @@ msgstr "Здесь нечего оглушать!" #: src/iuse.cpp #, c-format msgid "Really shock %s?" -msgstr "Ударить током %s?" +msgstr "Ударить током цель (%s)?" #: src/iuse.cpp #, c-format msgid "You attempt to shock %s, but miss." -msgstr "Вы пытаетесь ударить %s током, но промахиваетесь." +msgstr "Вы пытаетесь ударить цель (%s) током, но промахиваетесь." #: src/iuse.cpp #, c-format msgid " attempts to shock %s, but misses." -msgstr " пытается ударить %s током, но промахивается." +msgstr " пытается ударить цель (%s) током, но промахивается." #: src/iuse.cpp #, c-format msgid "You shock %s!" -msgstr "Вы бьёте %s током!" +msgstr "Вы бьёте цель (%s) током!" #: src/iuse.cpp #, c-format msgid " shocks %s!" -msgstr " бьёт %s электрическим разрядом!" +msgstr " бьёт цель (%s) электрическим разрядом!" #: src/iuse.cpp #, c-format msgid "You unsuccessfully attempt to shock %s!" -msgstr "Вы безуспешно пытаетесь ударить током %s!" +msgstr "Вы безуспешно пытаетесь ударить током цель (%s)!" #: src/iuse.cpp #, c-format msgid " unsuccessfully attempts to shock %s!" -msgstr " безуспешно пытается ударить током %s!" +msgstr " безуспешно пытается ударить током цель (%s)!" #: src/iuse.cpp msgid "Insufficient power" @@ -260860,22 +264977,22 @@ msgstr "Телефон отключается." #, c-format msgctxt "dice" msgid "You roll a %1$d on your %2$d sided %3$s" -msgstr "Вы выбрасываете %1$d на вашем %2$d-гранном %3$s" +msgstr "Вы бросаете кубик (%3$s), и на нём выпадает%1$d из %2$d" #: src/iuse.cpp #, c-format msgid "You take a deep breath from your %s." -msgstr "Вы глубоко вдыхаете из %s." +msgstr "Вы глубоко вдыхаете из баллона (%s)." #: src/iuse.cpp #, c-format msgid "Air in your %s runs out." -msgstr "Воздух в вашем %s закончится." +msgstr "Воздух в вашем баллоне (%s) закончится." #: src/iuse.cpp #, c-format msgid "Your %s is empty." -msgstr "Ваш %s пуст." +msgstr "Ваш баллон (%s) пуст." #: src/iuse.cpp msgid "You turn off the regulator and close the air valve." @@ -260904,12 +265021,12 @@ msgstr "" #: src/iuse.cpp #, c-format msgid "You need to wear the %1$s before you can unfold it." -msgstr "Вы должны надеть %1$s перед тем, как разложить его." +msgstr "Вы должны надеть это (%1$s) перед тем, как разложить его." #: src/iuse.cpp #, c-format msgid "You cannot use the %1$s with another of it's kind." -msgstr "Вы не можете использовать %1$s с ещё одним его экземпляром." +msgstr "Вы не можете использовать это (%1$s) с ещё одним его экземпляром." #: src/iuse.cpp msgid "" @@ -260930,7 +265047,7 @@ msgstr "Вы отсоединяете и складываете портатив #: src/iuse.cpp #, c-format msgid "Your %s requires new filter!" -msgstr "Ваш %s требует замены фильтра!" +msgstr "Ваша маска (%s) требует замены фильтра!" #: src/iuse.cpp msgid " needs new gas mask filter!" @@ -260944,7 +265061,7 @@ msgstr "%s не имеет фильтра." #: src/iuse.cpp #, c-format msgid "You prepared your %s." -msgstr "Вы подготовили к использованию %s." +msgstr "Вы подготовили к использованию: %s." #: src/iuse.cpp msgid "What do you want to play?" @@ -261055,13 +265172,14 @@ msgstr "Не настолько водонепроницаемое, чтобы #: src/iuse.cpp #, c-format msgid "You start cranking the %s to charge its %s." -msgstr "Вы начинаете работать с %s, чтобы зарядить %s." +msgstr "Вы начинаете работать с инструментом (%s), чтобы зарядить: %s." #: src/iuse.cpp #, c-format msgid "You could use the %s to charge its %s, but it's already charged." msgstr "" -"Вы могли бы использовать %s для зарядки %s, но заряд уже максимальный." +"Вы могли бы использовать инструмент (%s) для зарядки подходящего предмета " +"(%s), но заряд уже максимальный." #: src/iuse.cpp msgid "You need a rechargeable battery cell to charge." @@ -261069,7 +265187,7 @@ msgstr "Для зарядки требуется перезаряжаемая б #: src/iuse.cpp msgid "You cannot do… that while mounted." -msgstr "Во время верховой езды этого делать нельзя." +msgstr "Во время верховой езды этого делать точно нельзя." #: src/iuse.cpp msgid "It's waterproof, but oxygen maybe?" @@ -261104,12 +265222,12 @@ msgstr "Вы свистите в собачий свисток." #: src/iuse.cpp #, c-format msgid "Your %s looks ready to attack." -msgstr "%s выглядит готовым к атаке." +msgstr "%s демонстрирует готовность атаковать." #: src/iuse.cpp #, c-format msgid "Your %s goes docile." -msgstr "Ваш %s стал послушным." +msgstr "Ваше животное (%s) стало послушным." #: src/iuse.cpp msgid "You hear a low-pitched echoing howl." @@ -261118,17 +265236,17 @@ msgstr "Вы слышите низкий раскатистый вой." #: src/iuse.cpp #, c-format msgid "That %s is full!" -msgstr "%s заполнен!" +msgstr "Контейнер (%s) заполнен!" #: src/iuse.cpp #, c-format msgid "Draw blood from %s?" -msgstr "Взять кровь у %s?" +msgstr "Взять кровь: %s?" #: src/iuse.cpp #, c-format msgid "You drew blood from the %s…" -msgstr "Вы берёте кровь у %s…" +msgstr "Вы берёте кровь: %s…" #: src/iuse.cpp msgid "Draw your own blood?" @@ -261141,17 +265259,17 @@ msgstr "Вы берёте собственную кровь…" #: src/iuse.cpp #, c-format msgid "…but acidic blood melts the %s, destroying it!" -msgstr "…но кислотная кровь плавит и уничтожает %s!" +msgstr "…но кислотная кровь плавит и ёмкость (%s)!" #: src/iuse.cpp #, c-format msgid "…but acidic blood damages the %s!" -msgstr "…но кислотная кровь повреждает %s!" +msgstr "…но кислотная кровь повреждает ёмкость (%s)!" #: src/iuse.cpp #, c-format msgid "Use the mind splicer kit on the %s?" -msgstr "Использовать мыслесоединитель на %s?" +msgstr "Использовать мыслесоединитель - %s?" #: src/iuse.cpp msgid "Select storage media" @@ -261160,7 +265278,7 @@ msgstr "Выберите носитель" #: src/iuse.cpp #, c-format msgid "There's nothing to use the %s on here." -msgstr "Здесь %s не к чему применять." +msgstr "Здесь это (%s) не к чему применять." #: src/iuse.cpp msgid "Chop down which tree?" @@ -261274,12 +265392,12 @@ msgstr "%s ярко светится!" #: src/iuse.cpp #, c-format msgid "a deafening boom from %s %s" -msgstr "оглушительный взрыв с %s %s" +msgstr "оглушительный взрыв - %s %s" #: src/iuse.cpp #, c-format msgid "a disturbing scream from %s %s" -msgstr "душераздирающий вопль с %s %s" +msgstr "душераздирающий вопль - %s %s" #: src/iuse.cpp #, c-format @@ -261335,7 +265453,8 @@ msgstr "" #, c-format msgid "You need to be next to fire to heat something up with the %s." msgstr "" -"Вам нужно быть рядом с огнём, чтобы подогреть что-нибудь при помощи %s." +"Вам нужно быть рядом с огнём, чтобы подогреть что-нибудь при помощи посуды " +"(%s)." #: src/iuse.cpp msgid "Using hotplate:" @@ -261357,27 +265476,27 @@ msgstr "Ваше %s и так слишком влажное, чтобы впит #: src/iuse.cpp #, c-format msgid "You use the %s to clean yourself off, saturating it with slime!" -msgstr "Вы начисто вытерлись при помощи %s и пропитали его слизью!" +msgstr "Вы начисто вытерлись, теперь%s пропитано слизью!" #: src/iuse.cpp #, c-format msgid "You use the %s to dry off, saturating it with water!" -msgstr "Вы насухо вытерлись при помощи %s и пропитали его водой!" +msgstr "Вы насухо вытерлись, теперь %s пропитано водой!" #: src/iuse.cpp #, c-format msgid "You are already dry, the %s does nothing." -msgstr "Вы уже высохли, %s не имеет эффекта." +msgstr "Вы уже высохли, %s ничем не поможет." #: src/iuse.cpp src/iuse_actor.cpp #, c-format msgid "There's no room to unfold the %s." -msgstr "Здесь нет места, чтобы разложить %s." +msgstr "Здесь нет места, чтобы разложить транспорт (%s)." #: src/iuse.cpp #, c-format msgid "You painstakingly unfold the %s and make it ready to ride." -msgstr "Вы кропотливо раскладываете %s, и он готов ехать." +msgstr "Вы кропотливо раскладываете транспорт (%s), и он готов ехать." #: src/iuse.cpp msgid "You inject yourself with adrenaline." @@ -261462,12 +265581,12 @@ msgstr "Поменять ваши контактные линзы?" #: src/iuse.cpp #, c-format msgid "You replace your current %s." -msgstr "Вы заменили %s." +msgstr "Вы заменили: %s." #: src/iuse.cpp #, c-format msgid "You don't do anything with your %s." -msgstr "Вы не можете ничего сделать с %s." +msgstr "Вы не можете ничего сделать с этим (%s)." #: src/iuse.cpp #, c-format @@ -261494,12 +265613,12 @@ msgstr "Это не огнестрельное оружие!" #: src/iuse.cpp #, c-format msgid "You cannot repair your %s." -msgstr "Вы не можете починить %s." +msgstr "Вы не можете починить это (%s)." #: src/iuse.cpp src/iuse_actor.cpp #, c-format msgid "You cannot improve your %s any more this way." -msgstr "Вы больше не можете усовершенствовать %s подобным образом." +msgstr "Вы больше не можете усовершенствовать оружие (%s) подобным образом." #: src/iuse.cpp #, c-format @@ -261515,17 +265634,17 @@ msgstr "" #: src/iuse.cpp #, c-format msgid "You accurize your %s." -msgstr "Вы сделали %s более точным." +msgstr "Вы сделали оружие (%s) более точным." #: src/iuse.cpp src/iuse_actor.cpp #, c-format msgid "You repair your %s! ( %s-> %s)" -msgstr "Вы починили %s! ( %s-> %s)" +msgstr "Вы починили оружие (%s)! ( %s-> %s)" #: src/iuse.cpp src/iuse_actor.cpp #, c-format msgid "You repair your %s completely! ( %s-> %s)" -msgstr "Вы полностью починили %s! ( %s-> %s)" +msgstr "Вы полностью починили оружие (%s)! ( %s-> %s)" #: src/iuse.cpp msgid "Select tool to modify" @@ -261578,12 +265697,12 @@ msgstr "Нет злых роботов в округе." #: src/iuse.cpp #, c-format msgid "You start reprogramming the %s into an ally." -msgstr "Вы начали перепрограммировать %s в союзника." +msgstr "Вы начали перепрограммировать робота (%s) в союзника." #: src/iuse.cpp #, c-format msgid "A following %s goes into passive mode." -msgstr "Следующий за вами %s переходит в пассивный режим." +msgstr "Следующий за вами робот (%s) переходит в пассивный режим." #: src/iuse.cpp msgid "You are not commanding any robots." @@ -261592,7 +265711,7 @@ msgstr "Вы не командуете никакими роботами." #: src/iuse.cpp #, c-format msgid "A following %s goes into combat mode." -msgstr "Следующий за вами %s переходит в боевой режим." +msgstr "Следующий за вами робот (%s) переходит в боевой режим." #: src/iuse.cpp #, c-format @@ -261615,12 +265734,12 @@ msgstr[3] "Вы скачиваете %d новую песню во внутре #: src/iuse.cpp #, c-format msgid "You download a recipe for %s into the tablet's memory." -msgstr "Вы скачиваете рецепт %s в память планшета." +msgstr "Вы скачиваете рецепт (%s) в память планшета." #: src/iuse.cpp #, c-format msgid "Your tablet already has a recipe for %s." -msgstr "На твоём планшете есть рецепт %s." +msgstr "На вашем планшете уже есть рецепт: %s." #: src/iuse.cpp msgid "You have downloaded your photos." @@ -261636,7 +265755,7 @@ msgstr "На этой карте памяти нет никакой новой #: src/iuse.cpp msgid "bad" -msgstr "плохо" +msgstr "плохое" #: src/iuse.cpp msgid "exceptional" @@ -261644,7 +265763,7 @@ msgstr "исключительное" #: src/iuse.cpp msgid "fine" -msgstr "прекрасно" +msgstr "прекрасное" #: src/iuse.cpp msgid "Tablet's batteries are dead." @@ -261743,12 +265862,12 @@ msgstr "Вы чувствуете ностальгию, глядя на это #: src/iuse.cpp #, c-format msgid "You turned off music on your %s." -msgstr "Вы выключили музыку на %s." +msgstr "Вы выключили музыку на вашем устройстве (%s)." #: src/iuse.cpp #, c-format msgid "You turned on music on your %s." -msgstr "Вы включили музыку на %s." +msgstr "Вы включили музыку на вашем устройстве (%s)." #: src/iuse.cpp msgid "List recipes:" @@ -261777,12 +265896,12 @@ msgstr "Карта памяти не зашифрована." #: src/iuse.cpp #, c-format msgid "You successfully decrypted content on %s!" -msgstr "Вы успешно расшифровали содержимое на %s!" +msgstr "Вы успешно расшифровали содержимое (%s)!" #: src/iuse.cpp #, c-format msgid "You failed to decrypt the %s." -msgstr "Вы не смогли расшифровать %s." +msgstr "Вы не смогли расшифровать содержимое (%s)." #: src/iuse.cpp msgid "You tripped the firmware protection, and the card deleted its data!" @@ -261805,13 +265924,13 @@ msgstr " с надписью «%s»" #: src/iuse.cpp #, c-format msgid " with %s on it" -msgstr " с %s на нём" +msgstr " с предметом (%s) на нём" #: src/iuse.cpp msgctxt "" "Article 'a', replace it with empty string if it is not used in language" msgid "a " -msgstr "— " +msgstr " " #: src/iuse.cpp msgid " is on fire. " @@ -261831,7 +265950,7 @@ msgstr "на земле" #: src/iuse.cpp msgid "stuck" -msgstr "застрял" +msgstr "застрял(а)" #: src/iuse.cpp msgid " is stunned. " @@ -261943,7 +266062,7 @@ msgstr "верхом" #: src/iuse.cpp #, c-format msgid " is riding %s. " -msgstr " верхом на %s." +msgstr " верхом на скакуне (%s)." #: src/iuse.cpp msgid "A bionic LED is glowing softly. " @@ -261955,20 +266074,20 @@ msgstr "" #, c-format msgctxt "vehicle part" msgid "%1$s from %2$s" -msgstr "%1$s от %2$s" +msgstr "%1$s - %2$s" #. ~ %1$s: terrain description, %2$s: item name #: src/iuse.cpp #, c-format msgctxt "terrain and item" msgid "%1$s with a %2$s" -msgstr "%1$s с %2$s" +msgstr "%1$s - %2$s" #: src/iuse.cpp #, c-format msgctxt "someone stands/sits *on* something" msgid " on a %s." -msgstr " на %s." +msgstr " на предмете мебели (%s)." #: src/iuse.cpp #, c-format @@ -262007,7 +266126,7 @@ msgstr "На этой фотографии " #: src/iuse.cpp #, c-format msgid "It lies on the %s." -msgstr "Лежит на %s." +msgstr "Лежит на поверхности (%s)." #: src/iuse.cpp #, c-format @@ -262118,7 +266237,7 @@ msgstr "Погода — %s." #: src/iuse.cpp #, c-format msgid "%s appearance:" -msgstr "внешность %s:" +msgstr "внешность - %s:" #: src/iuse.cpp #, c-format @@ -262176,7 +266295,7 @@ msgstr "Вы неправильно сфокусировали камеру." #: src/iuse.cpp #, c-format msgid "A %s got in the way of your photo." -msgstr "%s оказывается на линии фотографирования." +msgstr "%s оказывается на линии съемки." #: src/iuse.cpp msgid "Strange… there's nothing in the center of picture?" @@ -262185,7 +266304,7 @@ msgstr "Странно… В середине фотографии ничего #: src/iuse.cpp #, c-format msgid "Strange… %s's not visible on the picture?" -msgstr "Странно… на фотографии не видно %s?" +msgstr "Странно… %s на фотографии не проявляется?" #: src/iuse.cpp #, c-format @@ -262199,7 +266318,7 @@ msgstr "Вы сделали селфи." #: src/iuse.cpp #, c-format msgid "You took a photo of %s." -msgstr "Вы делаете фото %s." +msgstr "Вы делаете фото: %s." #: src/iuse.cpp #, c-format @@ -262301,7 +266420,7 @@ msgstr "Зарядить чем?" #: src/iuse.cpp #, c-format msgid "You armed your RC car with %s." -msgstr "Вы положили %s в свою машинку на РУ." +msgstr "Вы положили предмет (%s) в свою машинку на РУ." #: src/iuse.cpp #, c-format @@ -262311,7 +266430,7 @@ msgstr "Машинка на радиоуправлении и %s? Как?" #: src/iuse.cpp #, c-format msgid "Your %s is too heavy or bulky for this RC car." -msgstr "%s слишком тяжело или громоздко для этой машинки на РУ." +msgstr "Это (%s) слишком тяжело или громоздко для этой машинки на РУ." #: src/iuse.cpp msgid "You disarmed your RC car." @@ -262381,16 +266500,16 @@ msgid "" "The %1$s in your %2$s would explode on this signal. Place it down before " "sending the signal." msgstr "" -"%1$s в вашем %2$s взорвётся, если послать этот сигнал. Лучше положить на " +"%1$s у вас (%2$s) взорвётся, если послать этот сигнал. Лучше положить на " "землю перед отправкой сигнала." #: src/iuse.cpp msgid "This vehicle's security system has locked you out!" -msgstr "Система безопасности автомобиля заперла вас!" +msgstr "Система безопасности автомобиля заперла транспорт!" #: src/iuse.cpp msgid "You trigger the alarm!" -msgstr "Вы активируете тревогу!" +msgstr "Вы заставили сигнализацию сработать!" #: src/iuse.cpp msgid "You quickly bypass the security system!" @@ -262455,8 +266574,8 @@ msgid "" "Despite using a controller, you still refuse to take control of this " "vehicle." msgstr "" -"Несмотря на использование контроллера, вы все еще не способны управлять этим" -" транспортным средством." +"Несмотря на использование контроллера, вы все еще не желаете управлять этим " +"транспортным средством." #: src/iuse.cpp msgid "You take control of the vehicle." @@ -262517,7 +266636,7 @@ msgid "" "%s charges." msgstr "" "В автоклаве не хватает заряда батарей для запуска рабочего цикла. Требуется " -"хотя бы %s заряда." +"хотя бы %s ед. заряда." #: src/iuse.cpp #, c-format @@ -262577,7 +266696,7 @@ msgstr "Действительно прекратить готовить?" #: src/iuse.cpp #, c-format msgid "You don't have a suitable container to store your %s." -msgstr "У вас нет подходящего контейнера для хранения %s." +msgstr "У вас нет подходящего контейнера для этого блюда (%s)." #: src/iuse.cpp #, c-format @@ -262587,7 +266706,7 @@ msgstr "Вы вытащили блюдо из мультиварки. %s пах #: src/iuse.cpp #, c-format msgid "You got the %s from the multi-cooker." -msgstr "Вы взяли %s из мультиварки." +msgstr "Вы взяли блюдо (%s) из мультиварки." #: src/iuse.cpp msgid "Choose desired meal:" @@ -262612,7 +266731,7 @@ msgstr "Настроение ни к чёрту, чтобы что-либо де #: src/iuse.cpp #, c-format msgid "You need a %s." -msgstr "Вам понадобится %s." +msgstr "Вам понадобится инструмент: %s." #: src/iuse.cpp #, c-format @@ -262647,7 +266766,7 @@ msgstr "Прицепите трос к машине, которая будет #: src/iuse.cpp msgid "That vehicle already has a tow-line attached." -msgstr "К это машине трос уже прицеплен." +msgstr "К этой машине трос уже прицеплен." #: src/iuse.cpp msgid "You can't attach the tow-line to an internal part." @@ -262659,7 +266778,7 @@ msgstr "Использование кабеля:" #: src/iuse.cpp msgid "Detach and re-spool the cable" -msgstr "Отсоединить кабель и снова смотать" +msgstr "Отсоединить и смотать кабель" #: src/iuse.cpp msgid "Attach loose end to vehicle" @@ -262676,7 +266795,7 @@ msgstr "Транспорт не может буксировать сам себ #: src/iuse.cpp #, c-format msgid "You link up the %1$s and the %2$s." -msgstr "Вы сцепляете %1$s и %2$s." +msgstr "Вы сцепляете: %1$s и %2$s." #: src/iuse.cpp msgid "Choose UPS:" @@ -262754,7 +266873,7 @@ msgstr "%s и так имеет доступ к своей собственно #: src/iuse.cpp #, c-format msgid "You link up the electric systems of the %1$s and the %2$s." -msgstr "Вы связываете электрические системы %1$s и %2$s." +msgstr "Вы связываете электрические системы: %1$s и %2$s." #: src/iuse.cpp msgid "You need soap to use this." @@ -262763,17 +266882,17 @@ msgstr "Для этого вам понадобится мыло." #: src/iuse.cpp #, c-format msgid "The %s's monitor slowly outputs the data…" -msgstr "Монитор %s медленно выводит данные…" +msgstr "Монитор (%s) медленно выводит данные…" #: src/iuse.cpp #, c-format msgid "The %1$s reads %2$s." -msgstr "%1$s показывает %2$s." +msgstr "%1$s показывает: %2$s." #: src/iuse.cpp src/iuse_actor.cpp #, c-format msgid "You need to wear the %1$s before activating it." -msgstr "Вы должны надеть %1$s перед тем, как включить его." +msgstr "Вы должны надеть это (%1$s) перед тем, как включить его." #: src/iuse.cpp msgid "Choose hologram direction." @@ -262786,7 +266905,7 @@ msgstr "Здесь невозможно создать голограмму." #: src/iuse.cpp #, c-format msgid "The %s must be installed in a vehicle before being loaded." -msgstr "%s необходимо установить в транспорт, прежде чем загружать." +msgstr "%s: необходимо установить в транспорт, прежде чем загружать." #: src/iuse.cpp #, c-format @@ -262796,7 +266915,7 @@ msgstr "Ошибка восстановления монстра: %s" #: src/iuse.cpp #, c-format msgid "%s holding %s" -msgstr "%s держит %s" +msgstr "%s содержит: %s" #: src/iuse.cpp msgid "You cannot capture a creature mounted." @@ -262805,22 +266924,22 @@ msgstr "Нельзя ловить животных, будучи верхом." #: src/iuse.cpp #, c-format msgid "There is no place to put the %s." -msgstr "Негде разместить %s." +msgstr "Негде разместить существо (%s)." #: src/iuse.cpp src/iuse_actor.cpp #, c-format msgid "Place the %s where?" -msgstr "Где разместить %s?" +msgstr "Где разместить существо (%s)?" #: src/iuse.cpp #, c-format msgid "You cannot place the %s there!" -msgstr "Вы не можете разместить %s здесь!" +msgstr "Вы не можете разместить существо (%s) здесь!" #: src/iuse.cpp #, c-format msgid "Grab which creature to place in the %s?" -msgstr "Какое существо поместить в %s?" +msgstr "Какое существо поместить сюда (%s)?" #: src/iuse.cpp msgid "There is no creature nearby you can capture." @@ -262829,27 +266948,27 @@ msgstr "Поблизости нет существа, которое можно #: src/iuse.cpp #, c-format msgid "You cannot use a %s there." -msgstr "Вы не можете использовать здесь %s." +msgstr "Вы не можете использовать здесь это (%s)." #: src/iuse.cpp #, c-format msgid "The %1$s is too big to put in your %2$s." -msgstr "Этот предмет (%1$s) слишком велик, чтобы убрать в %2$s!" +msgstr "Это существо (%1$s) слишком велико, чтобы поместиться сюда (%2$s)!" #: src/iuse.cpp #, c-format msgid "You capture the %1$s in your %2$s." -msgstr "Вы закрываете %1$s в ваш %2$s." +msgstr "Вы закрываете существо (%1$s) в подходящий контейнер (%2$s)." #: src/iuse.cpp #, c-format msgid "The %1$s avoids your attempts to put it in the %2$s." -msgstr "%1$s избегает ваших попыток убрать в %2$s." +msgstr "Существо (%1$s) избегает ваших попыток поместить его сюда (%2$s)." #: src/iuse.cpp #, c-format msgid "The %s can't capture nothing" -msgstr "%s не может никого поймать" +msgstr "Сюда (%s) нельзя никого поместить" #: src/iuse.cpp msgid "Put the ladder where?" @@ -262926,12 +267045,12 @@ msgstr "Вы чувствуете себя намного лучше — поч #: src/iuse.cpp #, c-format msgid "Wield the %s and start working?" -msgstr "Взять в руки %s и начать работать?" +msgstr "Взять в руки предмет (%s) и начать работать?" #: src/iuse.cpp #, c-format msgid "You pop a %s." -msgstr "Вы хлопаете %s." +msgstr "Вы закидываете лекарство (%s)." #: src/iuse.cpp msgid "" @@ -262942,7 +267061,7 @@ msgstr "Нет смысла принимать много мелатонина. #: src/iuse.cpp #, c-format msgid "You flip a %s." -msgstr "Вы подбросили %s." +msgstr "Вы подбросили монетку (%s)." #: src/iuse.cpp msgid "Heads!" @@ -262955,7 +267074,7 @@ msgstr "Решка!" #: src/iuse.cpp #, c-format msgid "Play a game with the %s?" -msgstr "Играть в игру с %s?" +msgstr "Играть в игру: %s?" #: src/iuse.cpp msgid "You start playing." @@ -263040,7 +267159,7 @@ msgstr "Очень сомнительно." #: src/iuse.cpp #, c-format msgid "You ask the %s, then flip it." -msgstr "Вы спросили %s, а после подбросили." +msgstr "Вы спросили шар (%s), а затем перевернули." #: src/iuse.cpp #, c-format @@ -263050,17 +267169,17 @@ msgstr "%s говорит: %s" #: src/iuse.cpp src/player.cpp #, c-format msgid "You can't do anything interesting with your %s." -msgstr "Вы не можете сделать ничего интересного с %s." +msgstr "Вы не можете сделать ничего интересного с этим (%s)." #: src/iuse_actor.cpp #, c-format msgid "The %s is empty!" -msgstr "Этот %s пуст!" +msgstr "Здесь (%s) пусто!" #: src/iuse_actor.cpp #, c-format msgid "You need to wield the %1$s before activating it." -msgstr "%1$s нужно надеть перед использованием." +msgstr "Это (%1$s) нужно взять в руки перед использованием." #: src/iuse_actor.cpp msgid "You can't do that while underwater" @@ -263070,10 +267189,10 @@ msgstr "Вы не можете это делать под водой." #, c-format msgid "You need a tool with %s." msgid_plural "You need tools with %s." -msgstr[0] "Вам понадобятся инструменты с %s." -msgstr[1] "Вам понадобятся инструменты с %s." -msgstr[2] "Вам понадобятся инструменты с %s." -msgstr[3] "Вам понадобятся инструменты с %s." +msgstr[0] "Вам понадобится инструмент с: %s." +msgstr[1] "Вам понадобятся инструменты с: %s." +msgstr[2] "Вам понадобятся инструменты с: %s." +msgstr[3] "Вам понадобятся инструменты с: %s." #: src/iuse_actor.cpp #, c-format @@ -263087,7 +267206,7 @@ msgstr "Ходов до взрыва: " #: src/iuse_actor.cpp #, c-format msgid "You unpack the %s." -msgstr "Вы распаковываете%s." +msgstr "Вы распаковываете: %s." #: src/iuse_actor.cpp msgid "This item could be unpacked to receive something." @@ -263126,17 +267245,18 @@ msgstr "Вам нужен шприц, для инъекции эт #: src/iuse_actor.cpp #, c-format msgid "You need %1$s to consume %2$s!" -msgstr "Вам потребуется %1$s, чтобы употребить %2$s!" +msgstr "" +"Вам потребуется подходящий инструмент (%1$s), чтобы употребить это (%2$s)!" #: src/iuse_actor.cpp #, c-format msgid "I need a %1$s to consume %2$s!" -msgstr "Мне нужен %1$s, чтобы употребить %2$s!" +msgstr "Мне нужен %1$s, чтобы употребить это - %2$s!" #: src/iuse_actor.cpp #, c-format msgid "There is no adjacent square to release the %s in!" -msgstr "Недостаточно места, чтобы выпустить %s." +msgstr "Недостаточно места, чтобы выпустить существо (%s)." #: src/iuse_actor.cpp #, c-format @@ -263147,7 +267267,8 @@ msgstr "Вы не можете разместить %s здесь." #, c-format msgid "" "If you had standard factory-built %1$s bullets, you could load the %2$s." -msgstr "Если бы у вас были заводские %1$s пули, вы бы смогли зарядить %2$s." +msgstr "" +"Если бы у вас были заводские пули (%1$s) , вы бы смогли зарядить это (%2$s)." #. ~ First %s is the ammo item (with plural form and count included), second #. is the monster name @@ -263155,10 +267276,10 @@ msgstr "Если бы у вас были заводские %1$s пули, вы #, c-format msgid "You load %1$d x %2$s round into the %3$s." msgid_plural "You load %1$d x %2$s rounds into the %3$s." -msgstr[0] "Вы зарядили %1$d патрон %2$s в %3$s." -msgstr[1] "Вы зарядили %1$d патрона %2$s в %3$s." -msgstr[2] "Вы зарядили %1$d патронов %2$s в %3$s." -msgstr[3] "Вы зарядили %1$d патрон %2$s в %3$s." +msgstr[0] "Вы зарядили %1$d патрон %2$s сюда (%3$s)." +msgstr[1] "Вы зарядили %1$d патрона %2$s сюда (%3$s)." +msgstr[2] "Вы зарядили %1$d патронов %2$s сюда (%3$s)." +msgstr[3] "Вы зарядили %1$d патрон %2$s сюда (%3$s)." #: src/iuse_actor.cpp #, c-format @@ -263181,7 +267302,7 @@ msgstr "Здесь нет места для спавна НПС!" #: src/iuse_actor.cpp #, c-format msgid "You should wear the %s before activating it." -msgstr "Вы должны надеть %s, перед тем как включить его." +msgstr "Вы должны надеть это (%s), перед тем как использовать его." #: src/iuse_actor.cpp #, c-format @@ -263238,7 +267359,7 @@ msgid "" "which can then be used as %s." msgstr "" "Можно активировать и превратить в мебель (%s), " -"способную служить как %s." +"способную служить как: %s." #: src/iuse_actor.cpp msgid "Deploy where?" @@ -263251,12 +267372,12 @@ msgstr "Вы пытаетесь стать одним целым с мебель #: src/iuse_actor.cpp #, c-format msgid "The space under %s is too cramped to deploy a %s in." -msgstr "Пространства под %s слишком мало, чтобы разместить %s." +msgstr "Под этим (%s) слишком мало места, чтобы разместить: %s." #: src/iuse_actor.cpp #, c-format msgid "You can't deploy a %s there." -msgstr "Вы не можете разместить %s здесь." +msgstr "Вы не можете разместить это (%s) здесь." #: src/iuse_actor.cpp msgid "There is already furniture at that location." @@ -263265,12 +267386,12 @@ msgstr "В этом месте уже стоит мебель." #: src/iuse_actor.cpp #, c-format msgid "There isn't anything new on the %s." -msgstr "На этой %s нет ничего нового." +msgstr "Здесь (%s) нет ничего нового." #: src/iuse_actor.cpp #, c-format msgid "You should read your %s when you get to the surface." -msgstr "Вам следует прочесть %s, когда вы доберетесь до поверхности." +msgstr "Вам следует прочесть это (%s), когда вы доберетесь до поверхности." #: src/iuse_actor.cpp msgid "Light where?" @@ -263278,7 +267399,7 @@ msgstr "Что поджечь?" #: src/iuse_actor.cpp msgid "You would set yourself on fire." -msgstr "Ты бы зажёг сам себя." +msgstr "Ты так себя подожжёшь." #: src/iuse_actor.cpp msgid "But you're already smokin' hot." @@ -263330,12 +267451,12 @@ msgstr "С вашим уровнем навыка разведение огня #: src/iuse_actor.cpp #, c-format msgid "Can't salvage anything from %s." -msgstr "Нельзя извлечь что-нибудь из %s." +msgstr "Нельзя извлечь ничего отсюда (%s)." #: src/iuse_actor.cpp #, c-format msgid "Try disassembling the %s instead." -msgstr "Вместо этого попытайтесь разобрать %s." +msgstr "Вместо этого попытайтесь разобрать: %s." #: src/iuse_actor.cpp #, c-format @@ -263345,7 +267466,7 @@ msgstr "%s из материала, который нельзя разрезат #: src/iuse_actor.cpp #, c-format msgid "Please empty the %s before cutting it up." -msgstr "Пожалуйста, опустошите %s перед тем, как разрезать." +msgstr "Пожалуйста, опустошите это (%s) перед тем, как разрезать." #: src/iuse_actor.cpp #, c-format @@ -263365,12 +267486,12 @@ msgstr "Вы ведь носите это, вы уверены?" #: src/iuse_actor.cpp #, c-format msgid "You can not cut the %s with itself." -msgstr "Вы не можете разрезать %s при помощи этого же самого предмета." +msgstr "Вы не можете разрезать это (%s) при помощи этого же самого предмета." #: src/iuse_actor.cpp #, c-format msgid "You try to salvage materials from the %s." -msgstr "Вы пытаетесь извлечь материалы из %s." +msgstr "Вы пытаетесь извлечь материалы из: %s." #: src/iuse_actor.cpp #, c-format @@ -263393,7 +267514,8 @@ msgstr "Вы не можете нанести надпись на не твёр #: src/iuse_actor.cpp #, c-format msgid "You can't %1$s %2$s because of the material it is made of." -msgstr "Вы не можете %1$s %2$s из-за материала, из которого это изготовлено." +msgstr "" +"Вы не можете %1$s это (%2$s) из-за материала, из которого это изготовлено." #: src/iuse_actor.cpp #, c-format @@ -263417,7 +267539,7 @@ msgstr "(Чтобы удалить, очистите текст и подтве #, c-format msgctxt "carving" msgid "%1$s on the %2$s is: " -msgstr "%1$s на %2$s: " +msgstr "%1$s на предмете (%2$s): " #: src/iuse_actor.cpp #, c-format @@ -263427,7 +267549,7 @@ msgstr "%s что?" #: src/iuse_actor.cpp #, c-format msgid "%s on what?" -msgstr "%s на что?" +msgstr "%s на чём?" #: src/iuse_actor.cpp msgid "The terrain" @@ -263448,7 +267570,7 @@ msgstr "Нанести надпись на что?" #: src/iuse_actor.cpp #, c-format msgid "You try to bend your %s, but fail." -msgstr "Вы пытаетесь согнуть %s, но не получается." +msgstr "Вы пытаетесь согнуть это (%s), но не получается." #: src/iuse_actor.cpp msgid "You cauterize yourself." @@ -263491,7 +267613,7 @@ msgstr " не может играть на инструменте, бу #: src/iuse_actor.cpp msgid "You can't play music underwater" -msgstr "Вы не можете играть музыку под водой." +msgstr "Вы не можете играть музыку под водой" #: src/iuse_actor.cpp msgid " can't play music underwater" @@ -263500,45 +267622,45 @@ msgstr " не может играть на музыкальном ин #: src/iuse_actor.cpp #, c-format msgid "You stop playing your %s" -msgstr "Вы прекратили играть на инструменте (%s)." +msgstr "Вы прекратили играть на инструменте (%s)" #: src/iuse_actor.cpp #, c-format msgid " stops playing their %s" -msgstr " прекращает играть на инструменте (%s)." +msgstr " прекращает играть на инструменте (%s)" #: src/iuse_actor.cpp #, c-format msgid "You need to hold or wear %s to play it" -msgstr "%s нужно держать в руках или повесить на шею, чтобы играть." +msgstr "Это (%s) нужно держать в руках или повесить на шею, чтобы играть" #: src/iuse_actor.cpp #, c-format msgid " needs to hold or wear %s to play it" msgstr "" -" нужно держать в руках или повесить на шею инструмент (%s), чтобы " -"играть на нём. " +" придётся держать в руках или повесить на шею инструмент (%s), " +"чтобы играть на нём" #: src/iuse_actor.cpp #, c-format msgid "You feel too weak to play your %s" -msgstr "Вы чувствуете себя слишком слабым, чтобы играть на %s." +msgstr "Вы чувствуете себя слишком слабым, чтобы играть на инструменте (%s)." #: src/iuse_actor.cpp #, c-format msgid " feels too weak to play their %s" msgstr "" -" чувствует себя слишком слабым, чтобы играть на инструменте (%s)." +" чувствует себя слишком слабо, чтобы играть на инструменте (%s)." #: src/iuse_actor.cpp #, c-format msgid "You start playing your %s" -msgstr "Вы начали играть на %s." +msgstr "Вы начали играть на инструменте (%s)." #: src/iuse_actor.cpp #, c-format msgid " starts playing their %s" -msgstr " прекращает играть на инструменте (%s)." +msgstr " начинает играть на инструменте (%s)." #: src/iuse_actor.cpp #, c-format @@ -263631,7 +267753,7 @@ msgstr "До получения уровня заклинания" #: src/iuse_actor.cpp #, c-format msgid "This item casts %1$s at level %2$i." -msgstr "Этот предмет кастует %1$s на уровне %2$i." +msgstr "Этот предмет кастует заклинание %1$s на уровне %2$i." #: src/iuse_actor.cpp msgid "This item never fails." @@ -263640,17 +267762,18 @@ msgstr "Этот предмет никогда не сбоит." #: src/iuse_actor.cpp #, c-format msgid "You don't think putting your %1$s in your %2$s is a good idea" -msgstr "Вы думаете, что положить %1$s в %2$s — не очень хорошая идея." +msgstr "" +"Вы думаете, что положить это (%1$s) сюда (%2$s) — не очень хорошая идея." #: src/iuse_actor.cpp #, c-format msgid "You holster your %s" -msgstr "Вы убираете %s в кобуру." +msgstr "Вы убираете оружие (%s) в кобуру." #: src/iuse_actor.cpp #, c-format msgid "You need to unwield your %s before using it." -msgstr "Вам нужно убрать %s из рук перед использованием." +msgstr "Вам нужно убрать это (%s) из рук перед использованием." #: src/iuse_actor.cpp msgid "Holster item" @@ -263659,16 +267782,16 @@ msgstr "Убрать вещь в кобуру" #: src/iuse_actor.cpp #, c-format msgid "Draw %s" -msgstr "Вытащить %s" +msgstr "Вытащить из кобуры: %s" #: src/iuse_actor.cpp src/monexamine.cpp #, c-format msgid "Use %s" -msgstr "Использовать %s" +msgstr "Использовать: %s" #: src/iuse_actor.cpp msgid "Can be activated to store suitable items." -msgstr "Может быть активирован для хранения подходящих предметов." +msgstr "Можно активировать для хранения подходящих предметов." #: src/iuse_actor.cpp #, c-format @@ -263678,7 +267801,7 @@ msgstr "Может быть использовано для сборки: %s" #: src/iuse_actor.cpp #, c-format msgid "Insufficient ammunition to assemble %s" -msgstr "Недостаточно боеприпасов для сборки %s." +msgstr "Недостаточно боеприпасов для сборки: %s." #: src/iuse_actor.cpp msgid " can't do that while mounted." @@ -263691,17 +267814,17 @@ msgstr "В вашем инструменте не хватает зарядов #: src/iuse_actor.cpp #, c-format msgid "Your %s is not made of any of:" -msgstr "Ваш %s сделан не из следующих материалов:" +msgstr "Предмет (%s) сделан не из следующих материалов:" #: src/iuse_actor.cpp #, c-format msgid "%s (repaired using %s)" -msgstr "%s (починено при помощи %s)" +msgstr "%s (чинится при помощи: %s)" #: src/iuse_actor.cpp #, c-format msgid "You don't have enough %s to do that. Have: %d, need: %d" -msgstr "Вам не хватает %s для этого. Есть: %d, нужно: %d" +msgstr "Вам не хватает компонентов (%s) для этого. Есть: %d, нужно: %d" #: src/iuse_actor.cpp msgid "That requires gunsmithing tools." @@ -263725,7 +267848,7 @@ msgstr "Предмет (%s) уже максимально улучшен." #: src/iuse_actor.cpp #, c-format msgid "You damage your %s! ( %s-> %s)" -msgstr "Вы повреждаете %s! ( %s-> %s)" +msgstr "Вы повреждаете предмет (%s)! ( %s-> %s)" #: src/iuse_actor.cpp msgid "You destroy it!" @@ -263734,27 +267857,27 @@ msgstr "Вы уничтожили предмет!" #: src/iuse_actor.cpp #, c-format msgid "You take your %s in, improving the fit." -msgstr "Вы ушиваете %s, подгоняя вещь по фигуре." +msgstr "Вы ушиваете предмет (%s), подгоняя вещь по фигуре." #: src/iuse_actor.cpp #, c-format msgid "You resize the %s to accommodate your tiny build." -msgstr "Вы подгоняете %s по вашему крохотному размеру." +msgstr "Вы подгоняете предмет (%s) по вашему крохотному размеру." #: src/iuse_actor.cpp #, c-format msgid "You adjust the %s back to its normal size." -msgstr "Вы возвращаете обычный размер %s." +msgstr "Вы возвращаете обычный размер предмету (%s)." #: src/iuse_actor.cpp #, c-format msgid "You make your %s extra sturdy." -msgstr "Вы сделали %s очень прочным." +msgstr "Вы сделали предмет (%s) очень прочным." #: src/iuse_actor.cpp #, c-format msgid "Your %s is already enhanced." -msgstr "%s уже улучшено." +msgstr "Предмет (%s) уже улучшен." #: src/iuse_actor.cpp msgid "Refitting" @@ -263775,7 +267898,7 @@ msgstr "Практика" #: src/iuse_actor.cpp #, c-format msgid "Repair %s" -msgstr "Починить %s" +msgstr "Починить: %s" #: src/iuse_actor.cpp msgid "You can't use filthy items for healing." @@ -263832,7 +267955,7 @@ msgstr "Ваша рана всё ещё болит." #: src/iuse_actor.cpp #, c-format msgid "You finish using the %s." -msgstr "Вы закончили использовать %s." +msgstr "Вы закончили использовать предмет (%s)." #: src/iuse_actor.cpp msgid "That arm is broken. It needs surgical attention or a splint." @@ -263846,7 +267969,7 @@ msgstr "" #: src/iuse_actor.cpp msgid "'s biology is not compatible with that item." -msgstr "Биология несовместима с этим предметом." +msgstr "Биология NPC () несовместима с этим предметом." #: src/iuse_actor.cpp msgid "Select a body part for: " @@ -263857,7 +267980,7 @@ msgstr "Выберите часть тела: " #, c-format msgctxt "healing" msgid "Select a body part of %1$s for %2$s:" -msgstr "Выберите часть тела %1$s для %2$s:" +msgstr "Выберите часть тела пациента (%1$s) для применения лечения (%2$s):" #: src/iuse_actor.cpp msgid "Healing effects " @@ -263922,37 +268045,37 @@ msgstr "Ходов на использование: " #: src/iuse_actor.cpp #, c-format msgid "Yeah. Place the %s at your feet. Real damn smart move." -msgstr "Ага, разместите %s прямо под ногами. Чертовски умный ход." +msgstr "Ага, разместите ловушку (%s) прямо под ногами. Чертовски умный ход." #: src/iuse_actor.cpp #, c-format msgid "You can't place a %s there." -msgstr "Вы не можете разместить %s здесь." +msgstr "Вы не можете разместить ловушку (%s) здесь." #: src/iuse_actor.cpp #, c-format msgid "You must place the %s between two solid tiles." -msgstr "Вы можете установить %s только между двумя твёрдыми клетками." +msgstr "Вы можете установить это (%s) только между двумя твёрдыми клетками." #: src/iuse_actor.cpp #, c-format msgid "The %s needs a %s adjacent to it." -msgstr "Для %s нужно, чтобы рядом был %s." +msgstr "Для этой ловушки (%s) нужно, чтобы рядом было: %s." #: src/iuse_actor.cpp #, c-format msgid "You can't place a %s there. It contains a trap already." -msgstr "Тут уже есть ловушка, поэтому %s не получится разместить здесь." +msgstr "Тут уже есть ловушка, поэтому эту (%s) не получится разместить здесь." #: src/iuse_actor.cpp #, c-format msgid "You trigger a %s!" -msgstr "Вы активируете %s!" +msgstr "Вы активируете ловушку (%s)!" #: src/iuse_actor.cpp #, c-format msgid "Place %s where?" -msgstr "Где разместить %s?" +msgstr "Где разместить это (%s)?" #: src/iuse_actor.cpp #, c-format @@ -264045,17 +268168,17 @@ msgstr " внезапно падает на землю!" #: src/iuse_actor.cpp #, c-format msgid "Put up the %s where (%dx%d clear area)?" -msgstr "Куда положить %s? (%dx%d чистая зона)?" +msgstr "Где установить палатку (%s)? (%dx%d чистая зона)?" #: src/iuse_actor.cpp #, c-format msgid "The %s is in the way." -msgstr "%s на пути." +msgstr "%s мешается." #: src/iuse_actor.cpp #, c-format msgid "The %s in that direction isn't suitable for placing the %s." -msgstr "%s в этом направлении не подходит для размещения %s." +msgstr "%s в этом направлении не подходит для размещения палатки (%s)." #: src/iuse_actor.cpp #, c-format @@ -264065,7 +268188,7 @@ msgstr "Здесь уже есть мебель (%s)." #: src/iuse_actor.cpp #, c-format msgid "You set up the %s on the ground." -msgstr "Вы поставили %s на землю." +msgstr "Вы поставили палатку (%s) на землю." #: src/iuse_actor.cpp msgid "Examine the center square to pack it up again." @@ -264108,13 +268231,13 @@ msgstr "Какую модификацию вы хотите сделать?" #: src/iuse_actor.cpp #, c-format msgid "Can't %1$s (need %2$d thread loaded)" -msgstr "Невозможно %1$s (нужно %2$d нитки)" +msgstr "Невозможно %1$s (нужны нитки -%2$d)" #. ~ %1$s: modification desc, %2$d: number of items needed, %3$s: items needed #: src/iuse_actor.cpp #, c-format msgid "Can't %1$s (need %2$d %3$s)" -msgstr "Невозможно %1$s (нужно %2$d %3$s)" +msgstr "Невозможно %1$s (нужно %2$d-%3$s)" #. ~ %1$s: modification desc, %2$s: mod name #: src/iuse_actor.cpp @@ -264160,7 +268283,7 @@ msgstr "Вы уверены? Вы не сможете получить обра #: src/iuse_actor.cpp #, c-format msgid "You damage your %s trying to modify it! ( %s-> %s)" -msgstr "В попытке улучшить %s вы повреждаете его! ( %s-> %s)" +msgstr "В попытке улучшить предмет (%s) вы повреждаете его! ( %s-> %s)" #: src/iuse_actor.cpp msgid "You fail to modify the clothing, and you waste thread and materials." @@ -264169,25 +268292,25 @@ msgstr "Вы не смогли модифицировать одежду и по #: src/iuse_actor.cpp #, c-format msgid "You modify your %s, but waste a lot of thread." -msgstr "Вы модифицируете %s, но потратили много ниток." +msgstr "Вы модифицируете предмет (%s), но потратили много ниток." #: src/iuse_actor.cpp #, c-format msgid "You modify your %s!" -msgstr "Вы модифицируете %s!" +msgstr "Вы модифицируете предмет (%s)!" #: src/iuse_actor.cpp #, c-format msgid "You use the %s to mask your scent" -msgstr "Вы используете %s, чтобы замаскировать свой запах" +msgstr "Вы используете это (%s), чтобы замаскировать свой запах" #: src/iuse_actor.h msgid "Carve" -msgstr "выстрогать" +msgstr "Вырезать" #: src/iuse_actor.h msgid "Carved" -msgstr "Вырезанная" +msgstr "Вырезано" #: src/iuse_software.cpp msgid "You found kitten!" @@ -265158,6 +269281,10 @@ msgstr "Лёгкий" msgid "Intermediate" msgstr "Средний" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "Эксперт" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "Ширина уровня:" @@ -265558,7 +269685,7 @@ msgstr "" #: src/magic.cpp #, c-format msgid "You learned %s!" -msgstr "Вы выучили %s!" +msgstr "Вы выучили: %s!" #: src/magic.cpp msgid "You can't learn this spell." @@ -265567,7 +269694,7 @@ msgstr "Вы не можете выучить это заклинание." #: src/magic.cpp #, c-format msgid "All knowledge of %s leaves you." -msgstr "Вы забываете все о %s." +msgstr "Вы забываете все о: %s." #: src/magic.cpp msgid "Choose a new hotkey for this spell." @@ -265581,7 +269708,7 @@ msgstr "Эта горячая клавиша уже используется." #, c-format msgid "%c set. Close and reopen spell menu to refresh list with changes." msgstr "" -"%cустановлен. Закройте и снова откройте менюя заклинаний, чтобы обновить " +"%c назначено. Закройте и снова откройте меню заклинаний, чтобы обновить " "список." #: src/magic.cpp @@ -265667,7 +269794,7 @@ msgstr "Стоимость каста (затрудн.)" #: src/magic.cpp #, c-format msgid " (%s current)" -msgstr " (%s сейчас)" +msgstr " (сейчас %s)" #: src/magic.cpp msgid "Not Enough Energy" @@ -265750,15 +269877,15 @@ msgstr "Выберите заклинание" #: src/magic.cpp msgid "AoE" -msgstr "область эффекта" +msgstr "Эффект по области" #: src/magic.cpp msgid "Spawned" -msgstr "Порожденный" +msgstr "Порождает" #: src/magic.cpp msgid "Recover" -msgstr "Восстановить" +msgstr "Восстанваливает" #: src/magic.cpp msgid "Damage Type" @@ -265809,7 +269936,7 @@ msgstr "Ваши раны равномерно распределяются." #: src/magic_spell_effect.cpp #, c-format msgid "%s wounds are closing up!" -msgstr "Раны %s затягиваются!" +msgstr "Раны (%s) затягиваются!" #: src/magic_spell_effect.cpp msgid "There is already a vehicle there." @@ -265898,7 +270025,7 @@ msgstr "Мир" #: src/main_menu.cpp msgctxt "Main Menu" msgid "pecial" -msgstr "Особое" +msgstr "Особые режимы" #: src/main_menu.cpp msgctxt "Main Menu" @@ -266020,7 +270147,7 @@ msgstr "Случайный персонаж" #: src/main_menu.cpp msgctxt "Main Menu|New Game" msgid "Play Now! (ixed Scenario)" -msgstr "Сразу в игру! ( фиксированный сценарий)" +msgstr "Сразу в игру! (фиксированный сценарий)" #: src/main_menu.cpp msgctxt "Main Menu|New Game" @@ -266074,7 +270201,7 @@ msgstr "Нажмите [d], чтобы удалить ша #: src/main_menu.cpp #, c-format msgid "Are you sure you want to delete %s?" -msgstr "Вы уверены, что хотите удалить %s?" +msgstr "Вы уверены, что хотите удалить шаблон: %s?" #: src/main_menu.cpp msgid "Sorry, something went wrong." @@ -266113,7 +270240,7 @@ msgstr "%1$s своим весом" #: src/map.cpp #, c-format msgid "A towing cable snaps off of the %s." -msgstr "Буксирный трос отцепляется от %s." +msgstr "Буксирный трос отцепляется от транспорта (%s)." #: src/map.cpp #, c-format @@ -266128,7 +270255,7 @@ msgstr "%s" #: src/map.cpp #, c-format msgid "The %s you were grabbing is destroyed!" -msgstr "%s, что вы тащили, уничтожен!" +msgstr "%s, что вы тащили, уничтожается!" #: src/map.cpp msgid "Smashable." @@ -266169,34 +270296,34 @@ msgstr "Упор для сошек." #: src/map.cpp #, c-format msgid "Falling %s hits you!" -msgstr "Вас задевает падающий %s!" +msgstr "%s падает и задевает вас!" #: src/map.cpp #, c-format msgid "Falling %s hits " -msgstr " задевает падающий %s!" +msgstr "%s падает и задевает NPC ()!" #: src/map.cpp #, c-format msgid "The %s destroys several items!" -msgstr "%s уничтожил несколько вещей!" +msgstr "%s уничтожает несколько вещей!" #. ~ %1$s: the cause of destruction, %2$s: destroyed item name #: src/map.cpp #, c-format msgid "The %1$s destroys the %2$s!" -msgstr "%1$s уничтожил %2$s!" +msgstr "%1$s уничтожает что-то (%2$s)!" #: src/map.cpp #, c-format msgid "The %s damages several items." -msgstr "%s повредил несколько вещей." +msgstr "%s повреждает несколько вещей." #. ~ %1$s: the cause of damage, %2$s: damaged item name #: src/map.cpp #, c-format msgid "The %1$s damages the %2$s." -msgstr "%1$s повредил %2$s." +msgstr "%1$s повреждает что-то (%2$s)." #: src/map.cpp msgid "an alarm go off!" @@ -266208,11 +270335,11 @@ msgstr "звук бьющегося стекла." #: src/map.cpp msgid "You are crushed by the falling debris!" -msgstr "Вас зацепили падающие обломки!" +msgstr "На вас падают обломки!" #: src/map.cpp msgid " is crushed by the falling debris!" -msgstr "Падающие обломки зацепили !" +msgstr "На NPC () падают обломки!" #: src/map.cpp msgid "The shot is stopped by the reinforced glass door!" @@ -266273,12 +270400,12 @@ msgstr "%d мин. осталось до окончания цикла стер #: src/map.cpp #, c-format msgid "The autoclave in the %s has finished its cycle." -msgstr "Автоклав в %s завершил рабочий цикл." +msgstr "Автоклав в транспорте (%s) завершил рабочий цикл." #: src/map.cpp #, c-format msgid "The %s is taken down." -msgstr "%s снят." +msgstr "Предмет (%s) снят." #: src/map.cpp msgid "You disarm the trap!" @@ -266300,7 +270427,7 @@ msgstr "Что-то вылезло из побегов (%s)!" #: src/map.cpp #, c-format msgid "Something has crawled out of the %s!" -msgstr "Что-то вылезло из %s!" +msgstr "Что-то вылезло из предмета (%s)!" #: src/map_extras.cpp msgid "DANGER! MINEFIELD!" @@ -266364,12 +270491,12 @@ msgstr "%s бьёт вас!" #: src/map_field.cpp #, c-format msgid "A %1$s hits %2$s!" -msgstr "%1$s бьёт %2$s!" +msgstr "%1$s бьёт: %2$s!" #: src/map_field.cpp #, c-format msgid "A %1$s hits the %2$s!" -msgstr "%1$s бьёт %2$s!" +msgstr "%1$s бьёт: %2$s!" #: src/map_field.cpp msgid "The acid burns your body!" @@ -266377,7 +270504,7 @@ msgstr "Кислота жжёт ваше тело!" #: src/map_field.cpp msgid "The acid burns s body!" -msgstr "Кислота жжёт тело !" +msgstr "Кислота жжёт тело NPC ()!" #: src/map_field.cpp msgid "The acid burns your legs and feet!" @@ -266385,7 +270512,7 @@ msgstr "Кислота разъедает ваши ноги" #: src/map_field.cpp msgid "The acid burns s legs and feet!" -msgstr "Кислота разъедает ноги и ступни !" +msgstr "Кислота разъедает ноги и ступни NPC ()!" #: src/map_field.cpp msgid "You're lying in a pool of acid" @@ -266429,7 +270556,7 @@ msgstr " загорелся!" #: src/map_field.cpp msgid "s whole body is burning!" -msgstr "Всё тело горит!" +msgstr "Всё тело NPC () горит!" #: src/map_field.cpp msgid "You're standing in a fire!" @@ -266453,7 +270580,7 @@ msgstr "Вас охватило пламя!" #: src/map_field.cpp msgid " is torched by flames!" -msgstr "Пламя охватывает !" +msgstr "Пламя охватывает NPC ()!" #: src/map_field.cpp msgid "These flames do not burn you." @@ -266461,11 +270588,11 @@ msgstr "Огонь не обжигает вас." #: src/map_field.cpp msgid "Those flames do not burn ." -msgstr "Огонь не обжигает ." +msgstr "Огонь не обжигает NPC ()." #: src/map_field.cpp msgid "You're painfully electrocuted!" -msgstr "Вас поджарило электричеством!" +msgstr "Вас болезненно бьёт током!" #: src/map_field.cpp msgid " is shocked!" @@ -266485,12 +270612,12 @@ msgstr ", похоже, не ощущает эффекта от эле #: src/map_field.cpp msgid "You're violently teleported!" -msgstr "Вас резко телепортировало!" +msgstr "Вас жёстко телепортировало!" #: src/map_field.cpp #, c-format msgid "The bees sting you in %s!" -msgstr "Пчёлы жалят вас в %s!" +msgstr "Пчёлы жалят вас (%s)!" #: src/map_field.cpp msgid "The incendiary burns you!" @@ -266498,7 +270625,7 @@ msgstr "Зажигательное средство обжигает вас!" #: src/map_field.cpp msgid "The incendiary burns !" -msgstr "Зажигательное средство обжигает !" +msgstr "Зажигательное средство обжигает NPC ()!" #: src/map_field.cpp msgid "The incendiary melts into your skin!" @@ -266506,7 +270633,7 @@ msgstr "Зажигательное средство вплавилось в ва #: src/map_field.cpp msgid "The incendiary melts into s skin!" -msgstr "Зажигательное средство вплавилось в кожу !" +msgstr "Зажигательное средство вплавилось в кожу NPC ()!" #: src/map_field.cpp #, c-format @@ -266565,7 +270692,7 @@ msgstr "Инициировать подземные толчки" #: src/mapgen.cpp msgid "Wreckage" -msgstr "обломки аварии" +msgstr "Обломки аварии" #: src/mapgen.cpp msgid "Log Console" @@ -266635,11 +270762,11 @@ msgstr "Требования: " #: src/martialarts.cpp msgid "activate" -msgstr "активировать" +msgstr "активироваться" #: src/martialarts.cpp msgid "be used" -msgstr "будет использовано" +msgstr "быть использовано" #: src/martialarts.cpp #, c-format @@ -266649,7 +270776,7 @@ msgstr "* Может %s с оружием или без ор #: src/martialarts.cpp #, c-format msgid "* Can %s while using any unarmed weapon" -msgstr "* Возможен %s с любым оружием для рукопашной драки" +msgstr "* Может %s с любым оружием для рукопашной драки" #: src/martialarts.cpp #, c-format @@ -266743,7 +270870,7 @@ msgstr "%s нельзя использовать с оружием." #: src/martialarts.cpp #, c-format msgid "The %1$s is not a valid %2$s weapon." -msgstr "%1$s — неподходящее оружие для %2$s." +msgstr "%1$s — неподходящее оружие для стиля %2$s." #: src/martialarts.cpp msgid "Block Counter" @@ -266853,7 +270980,7 @@ msgstr "* Будет атаковать вашу цель и #: src/martialarts.cpp #, c-format msgid "* Will knock back enemies %d %s" -msgstr "* Будет отбрасывать врагов %d %s" +msgstr "* Будет отбрасывать врагов на %d %s" #: src/martialarts.cpp msgid "tile" @@ -267007,32 +271134,32 @@ msgstr "%s бросается на вас, но вы уклоняетесь!" #: src/mattack_actors.cpp #, c-format msgid "The %1$s bites your %2$s, but fails to penetrate armor!" -msgstr "%1$s кусает вас в %2$s, но не может пробить броню." +msgstr "%1$s кусает вас (%2$s), но не может пробить броню." #: src/mattack_actors.cpp #, c-format msgid "The %1$s bites your %2$s!" -msgstr "%1$s кусает вас в %2$s!" +msgstr "%1$s кусает вас (%2$s)!" #: src/mattack_actors.cpp src/monattack.cpp src/monattack.cpp #, c-format msgid "The %s lunges at , but they dodge!" -msgstr "%s бросается на , но тот уклоняется!" +msgstr "%s бросается на NPC (), но тот уклоняется!" #: src/mattack_actors.cpp #, c-format msgid "The %1$s bites 's %2$s, but fails to penetrate armor!" -msgstr "%1$s кусает %2$s (), но не может пробить броню!" +msgstr "%1$s кусает (%2$s - ), но не может пробить броню!" #: src/mattack_actors.cpp #, c-format msgid "The %1$s bites 's %2$s!" -msgstr "%1$s кусает %2$s ()!" +msgstr "%1$s кусает NPC ( - %2$s)!" #: src/mattack_actors.cpp src/turret.cpp #, c-format msgid "The %1$s fires its %2$s!" -msgstr "%1$s стреляет из %2$s!" +msgstr "%1$s стреляет (%2$s)!" #: src/mattack_actors.cpp msgid "Beep." @@ -267076,7 +271203,7 @@ msgstr "%s разваливается!" #: src/melee.cpp #, c-format msgid "'s %s breaks apart!" -msgstr "%s у разваливается!" +msgstr "%s у NPC () разваливается!" #: src/melee.cpp src/mondeath.cpp #, c-format @@ -267086,7 +271213,7 @@ msgstr "%s разрушается!" #: src/melee.cpp #, c-format msgid "Your %s is destroyed by the blow!" -msgstr "Ваш %s уничтожен ударом!" +msgstr "Ваше оружие (%s) разрушается ударом!" #: src/melee.cpp #, c-format @@ -267104,7 +271231,7 @@ msgstr "Из-за своей дальнозоркости вы не можете #: src/melee.cpp #, c-format msgid "The %s has dead batteries and will not move its arms." -msgstr "У %s сели батарейки, его руки не могут двигаться." +msgstr "У меха (%s) сели батарейки, его руки не могут двигаться." #: src/melee.cpp #, c-format @@ -267145,12 +271272,12 @@ msgstr "%s промахивается." #: src/melee.cpp #, c-format msgid "You poison %s!" -msgstr "Вы отравили %s!" +msgstr "Вы отравили противника (%s)!" #: src/melee.cpp #, c-format msgid "You inject your venom into %s!" -msgstr "Вы вводите яд в %s!" +msgstr "Вы впрыскиваете яд противнику (%s)!" #: src/melee.cpp msgid "You hit something." @@ -267171,12 +271298,12 @@ msgstr " обезоруживает вас и берёт ваше ор #: src/melee.cpp #, c-format msgid "You disarm %s and take their weapon!" -msgstr "Вы обезоруживаете %s и берёте оружие!" +msgstr "Вы обезоруживаете противника (%s) и берёте оружие!" #: src/melee.cpp #, c-format msgid " disarms %s and takes their weapon!" -msgstr " обезоруживает %s и берёт оружие!" +msgstr " обезоруживает противника (%s) и берёт оружие!" #: src/melee.cpp msgid " disarms you!" @@ -267185,12 +271312,12 @@ msgstr " обезоруживает вас!" #: src/melee.cpp #, c-format msgid "You disarm %s!" -msgstr "Вы обезоружили %s." +msgstr "Вы обезоружили противника (%s)." #: src/melee.cpp #, c-format msgid " disarms %s!" -msgstr " обезоруживает %s!" +msgstr " обезоруживает противника (%s)!" #: src/melee.cpp #, c-format @@ -267234,12 +271361,12 @@ msgstr "немного" #: src/melee.cpp #, c-format msgid "You block %1$s of the damage with your %2$s!" -msgstr "Вы блокируете %1$s полученного урона с помощью %2$s!" +msgstr "Вы блокируете %1$s полученного урона с помощью своего оружия (%2$s)!" #: src/melee.cpp #, c-format msgid " blocks %1$s of the damage with their %2$s!" -msgstr " блокирует %1$s полученного урона с помощью %2$s!" +msgstr " блокирует %1$s полученного урона с помощью оружия (%2$s)!" #: src/melee.cpp src/player.cpp msgid "You try to counterattack but you are too exhausted!" @@ -267252,32 +271379,32 @@ msgstr "Предмет, который вы держите, слишком хр #: src/melee.cpp #, c-format msgid "You shock %s." -msgstr "Вы ударили %s электрическим разрядом." +msgstr "Вы ударили противника (%s) электрическим разрядом." #: src/melee.cpp #, c-format msgid " shocks %s." -msgstr " бьёт %s электрическим разрядом." +msgstr " бьёт противника (%s) электрическим разрядом." #: src/melee.cpp #, c-format msgid "You drain %s's body heat." -msgstr "Вы поглощаете тепло тела %s." +msgstr "Вы поглощаете тепло тела противника (%s)." #: src/melee.cpp #, c-format msgid " drains %s's body heat!" -msgstr " поглощает тепло тела %s!" +msgstr " поглощает тепло тела противника (%s)!" #: src/melee.cpp #, c-format msgid "You burn %s." -msgstr "Вы жжёте %s." +msgstr "Вы жжёте противника (%s)." #: src/melee.cpp #, c-format msgid " burns %s." -msgstr " жжёт %s." +msgstr " жжёт противника (%s)." #: src/melee.cpp #, c-format @@ -267287,229 +271414,229 @@ msgstr "%s режет вашу руку!" #: src/melee.cpp #, c-format msgid "'s %s shatters!" -msgstr "%s () разрывается!" +msgstr "%s () разбивается!" #: src/melee.cpp #, c-format msgid "You impale %s" -msgstr "Вы пронзаете %s" +msgstr "Вы пронзаете противника (%s)" #: src/melee.cpp #, c-format msgid "You gouge %s" -msgstr "Вы долбите %s" +msgstr "Вы долбите противника (%s)" #: src/melee.cpp #, c-format msgid "You run %s through" -msgstr "Вы протыкаете %s." +msgstr "Вы протыкаете противника (%s)" #: src/melee.cpp #, c-format msgid "You puncture %s" -msgstr "Вы прокалываете %s" +msgstr "Вы прокалываете противника (%s)" #: src/melee.cpp #, c-format msgid "You pierce %s" -msgstr "Вы протыкаете %s" +msgstr "Вы протыкаете противника (%s)" #: src/melee.cpp #, c-format msgid "You poke %s" -msgstr "Вы ткнули %s" +msgstr "Вы ткнули противника (%s)" #: src/melee.cpp #, c-format msgid " impales %s" -msgstr " пронзает %s" +msgstr " пронзает противника (%s)" #: src/melee.cpp #, c-format msgid " gouges %s" -msgstr " долбит %s" +msgstr " долбит противника (%s)" #: src/melee.cpp #, c-format msgid " runs %s through" -msgstr " протыкает %s" +msgstr " протыкает противника (%s)" #: src/melee.cpp #, c-format msgid " punctures %s" -msgstr " прокалывает %s" +msgstr " прокалывает противника (%s)" #: src/melee.cpp #, c-format msgid " pierces %s" -msgstr " протыкает %s" +msgstr " протыкает противника (%s)" #: src/melee.cpp #, c-format msgid " pokes %s" -msgstr " ткнул %s" +msgstr " тыкает противника (%s)" #: src/melee.cpp #, c-format msgid "You gut %s" -msgstr "Вы потрошите %s" +msgstr "Вы потрошите противника (%s)" #: src/melee.cpp #, c-format msgid "You chop %s" -msgstr "Вы раскалываете %s" +msgstr "Вы рубите противника (%s)" #: src/melee.cpp #, c-format msgid "You slash %s" -msgstr "Вы кромсаете %s" +msgstr "Вы кромсаете противника (%s)" #: src/melee.cpp #, c-format msgid "You mutilate %s" -msgstr "Вы уродуете %s" +msgstr "Вы уродуете противника (%s)" #: src/melee.cpp #, c-format msgid "You maim %s" -msgstr "Вы калечите %s" +msgstr "Вы калечите противника (%s)" #: src/melee.cpp #, c-format msgid "You stab %s" -msgstr "Вы прокалываете %s" +msgstr "Вы прокалываете противника (%s)" #: src/melee.cpp #, c-format msgid "You slice %s" -msgstr "Вы разрезаете %s" +msgstr "Вы разрезаете противника (%s)" #: src/melee.cpp #, c-format msgid "You cut %s" -msgstr "Вы режете %s" +msgstr "Вы режете противника (%s)" #: src/melee.cpp #, c-format msgid "You nick %s" -msgstr "Вы даёте затрещину %s" +msgstr "Вы даёте затрещину противнику (%s)" #: src/melee.cpp #, c-format msgid " guts %s" -msgstr "потрошит %s" +msgstr "потрошит противника (%s)" #: src/melee.cpp #, c-format msgid " slashes %s" -msgstr " хлещет %s" +msgstr " хлещет противника (%s)" #: src/melee.cpp #, c-format msgid " mutilates %s" -msgstr " уродует %s" +msgstr " уродует противника (%s)" #: src/melee.cpp #, c-format msgid " maims %s" -msgstr " калечит %s" +msgstr " калечит противника (%s)" #: src/melee.cpp #, c-format msgid " stabs %s" -msgstr " колет %s" +msgstr " колет противника (%s)" #: src/melee.cpp #, c-format msgid " slices %s" -msgstr " резанул %s" +msgstr " режет противника (%s)" #: src/melee.cpp #, c-format msgid " cuts %s" -msgstr " разрезает %s" +msgstr " разрезает противника (%s)" #: src/melee.cpp #, c-format msgid " nicks %s" -msgstr " даёт затрещину %s" +msgstr " даёт затрещину противнику (%s)" #: src/melee.cpp #, c-format msgid "You clobber %s" -msgstr "Вы избили %s" +msgstr "Вы избиваете противника (%s)" #: src/melee.cpp #, c-format msgid "You smash %s" -msgstr "Вы ломаете %s" +msgstr "Вы ломаете противника (%s)" #: src/melee.cpp #, c-format msgid "You thrash %s" -msgstr "Вы лупите %s" +msgstr "Вы лупите противника (%s)" #: src/melee.cpp #, c-format msgid "You batter %s" -msgstr "Вы колотите %s" +msgstr "Вы колотите противника (%s)" #: src/melee.cpp #, c-format msgid "You whack %s" -msgstr "Вы сильно бьёте %s" +msgstr "Вы сильно бьёте противника (%s)" #: src/melee.cpp #, c-format msgid "You hit %s" -msgstr "Вы ударили %s" +msgstr "Вы ударяете противника (%s)" #: src/melee.cpp #, c-format msgid " clobbers %s" -msgstr " избил %s" +msgstr " избивает противника (%s)" #: src/melee.cpp #, c-format msgid " smashes %s" -msgstr " ломает %s" +msgstr " ломает противника (%s)" #: src/melee.cpp #, c-format msgid " thrashes %s" -msgstr " лупит %s" +msgstr " лупит противника (%s)" #: src/melee.cpp #, c-format msgid " batters %s" -msgstr " колотит %s" +msgstr " колотит противника (%s)" #: src/melee.cpp #, c-format msgid " whacks %s" -msgstr " сильно бьёт %s" +msgstr " сильно бьёт противника (%s)" #: src/melee.cpp #, c-format msgid " hits %s" -msgstr " бьёт %s" +msgstr " бьёт противника (%s)" #: src/melee.cpp #, c-format msgid "The bugs attack %s" -msgstr "Жуки атакуют %s" +msgstr "Баги атакуют противника (%s)" #. ~ NPC hits something but does no damage #: src/melee.cpp #, c-format msgid "%s but does no damage." -msgstr "%s, но не нанёс ни единого повреждения." +msgstr "%s, но не наносит ни единого повреждения." #. ~ someone hits something but do no damage #: src/melee.cpp #, c-format msgid "%s but do no damage." -msgstr "%s, но не нанесли урона." +msgstr "%s, но это не нанесло урона." #. ~ NPC hits something (critical) #: src/melee.cpp @@ -267538,59 +271665,61 @@ msgstr "%s, нанеся урон %d." #: src/melee.cpp #, c-format msgid "You lunge for the %s, but miss!" -msgstr "Вы делаете выпад в сторону %s, но промахиваетесь!" +msgstr "Вы делаете выпад в сторону противника (%s), но промахиваетесь!" #. ~ %s: weapon name #: src/melee.cpp #, c-format msgid "You grab at %s and pull with all your force!" -msgstr "Вы хватаете %s и тянете изо всех сил!" +msgstr "Вы хватаете оружие (%s) и тянете изо всех сил!" #. ~ %1$s: weapon name, %2$s: NPC name #: src/melee.cpp #, c-format msgid "You forcefully take %1$s from %2$s!" -msgstr "Вы силой отбираете %1$s у %2$s!" +msgstr "Вы силой отбираете оружие (%1$s) у противника (%2$s)!" #: src/melee.cpp #, c-format msgid "You grab at %s and pull with all your force, but it drops nearby!" -msgstr "Вы хватаете %s и тянете изо всех сил, но это падает на землю!" +msgstr "" +"Вы хватаете оружие (%s) и тянете изо всех сил, но оно падает на землю!" #: src/melee.cpp #, c-format msgid "You grab at %s and pull with all your force, but in vain!" -msgstr "Вы хватаете %s и тянете изо всех сил, но это бесполезно!" +msgstr "Вы хватаете оружие (%s) и тянете изо всех сил, но это бесполезно!" #: src/melee.cpp #, c-format msgid "You smash %s with all your might forcing their %s to drop down nearby!" -msgstr "Вы бьёте %s изо всех сил, так что %s падает на землю!" +msgstr "Вы бьёте противника (%s) изо всех сил, так что %s падает на землю!" #: src/melee.cpp #, c-format msgid "You smash %s with all your might but %s remains in their hands!" -msgstr "Вы бьёте %s изо всех сил, но %s остаётся в руках!" +msgstr "Вы бьёте противника (%s) изо всех сил, но %s остаётся в руках!" #: src/melee.cpp src/npctalk.cpp #, c-format msgid "%s is hostile!" -msgstr "%s враг!" +msgstr "%s - враг!" #: src/melee.cpp #, c-format msgid "You sneakily steal %1$s from %2$s!" -msgstr "Вы скрытно украли %1$s из %2$s!" +msgstr "Вы скрытно украли предмет (%1$s) у цели (%2$s)!" #: src/melee.cpp #, c-format msgid "You failed to steal %1$s from %2$s, but did not attract attention." -msgstr "Кража %1$s из %2$s не удалась, но вы не привлекли внимания." +msgstr "" +"Кража предмета (%1$s) у цели (%2$s) не удалась, но вы не привлекли внимания." #: src/melee.cpp #, c-format msgid "You failed to steal %1$s from %2$s." -msgstr "Кража %1$s из %2$s не удалась." +msgstr "Кража предмета (%1$s) у цели (%2$s) не удалась." #: src/memorial_logger.cpp msgid "an unemployed male" @@ -267621,7 +271750,7 @@ msgstr "Мемориальный файл Катаклизм: Тёмные дн #: src/memorial_logger.cpp #, c-format msgid "In memory of: %s" -msgstr "В память о %s" +msgstr "В память: %s" #. ~ The "%s" will be replaced by an epitaph as displayed in the memorial #. files. Replace the quotation marks as appropriate for your language. @@ -267636,12 +271765,12 @@ msgstr "«%s»" #: src/memorial_logger.cpp #, c-format msgid "%1$s was %2$s when the apocalypse began." -msgstr "%1$s был %2$s, когда случился апокалипсис." +msgstr "%1$s - %2$s, когда случился апокалипсис." #: src/memorial_logger.cpp #, c-format msgid "%1$s died on %2$s." -msgstr "%1$s погибает в %2$s." +msgstr "%1$s - смерть настигла %2$s." #: src/memorial_logger.cpp #, c-format @@ -267786,13 +271915,13 @@ msgstr "История игры" #, c-format msgctxt "memorial_male" msgid "Activated the %s." -msgstr "Активировал %s." +msgstr "Активировал артефакт: %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Activated the %s." -msgstr "Активировала %s." +msgstr "Активировала артефакт: %s." #: src/memorial_logger.cpp msgctxt "memorial_male" @@ -267889,13 +272018,13 @@ msgstr "Была объявлена в розыск полицией!" #, c-format msgctxt "memorial_male" msgid "Broken %s began to mend." -msgstr "Сломанная %s пошла на поправку." +msgstr "Сломанная конечность (%s) пошла на поправку." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Broken %s began to mend." -msgstr "Сломанная %s пошла на поправку." +msgstr "Сломанная конечность (%s) пошла на поправку." #: src/memorial_logger.cpp msgctxt "memorial_male" @@ -267911,13 +272040,13 @@ msgstr "Вы хороните неизвестную жертву Катакли #, c-format msgctxt "memorial_male" msgid "You buried %s." -msgstr "Вы похоронили %s." +msgstr "Вы похоронили: %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "You buried %s." -msgstr "Вы похоронили %s." +msgstr "Вы похоронили: %s." #: src/memorial_logger.cpp msgctxt "memorial_male" @@ -267955,13 +272084,13 @@ msgstr "Убила вкусно выглядящего невинного: %s. #, c-format msgctxt "memorial_male" msgid "Killed an innocent, %s, in cold blood. They were weak." -msgstr "Хладнокровно убил невинного слабака %s." +msgstr "Хладнокровно убил невинного слабака - %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Killed an innocent, %s, in cold blood. They were weak." -msgstr "Хладнокровно убила невинного слабака %s." +msgstr "Хладнокровно убила невинного слабака - %s." #: src/memorial_logger.cpp #, c-format @@ -267997,13 +272126,13 @@ msgstr "" #, c-format msgctxt "memorial_male" msgid "Killed a %s." -msgstr "Убил %s." +msgstr "Убил: %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Killed a %s." -msgstr "Убила %s." +msgstr "Убила: %s." #: src/memorial_logger.cpp msgctxt "memorial_male" @@ -268279,13 +272408,13 @@ msgstr "Активирована теневая змеиная ловушка." #, c-format msgctxt "memorial_male" msgid "Consumed a %s." -msgstr "Съел %s." +msgstr "Съел: %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Consumed a %s." -msgstr "Съела %s." +msgstr "Съела: %s." #: src/memorial_logger.cpp msgctxt "memorial_male" @@ -268350,12 +272479,12 @@ msgstr "Стала жертвой приступа астмы." #: src/memorial_logger.cpp msgctxt "memorial_male" msgid "Died of datura overdose." -msgstr "Вы умерли от передозировки дурмана." +msgstr "Умер от передозировки дурмана." #: src/memorial_logger.cpp msgctxt "memorial_female" msgid "Died of datura overdose." -msgstr "Вы умерли от передозировки дурмана." +msgstr "Умерла от передозировки дурмана." #: src/memorial_logger.cpp msgctxt "memorial_male" @@ -268517,26 +272646,26 @@ msgstr "Не смогла больше не спать." #, c-format msgctxt "memorial_male" msgid "The fuel tank of the %s exploded!" -msgstr "Топливный бак в %s взорвался!" +msgstr "Топливный бак (%s) взорвался!" #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "The fuel tank of the %s exploded!" -msgstr "Топливный бак в %s взорвался!" +msgstr "Топливный бак (%s) взорвался!" #. ~ %s is addiction name #: src/memorial_logger.cpp #, c-format msgctxt "memorial_male" msgid "Became addicted to %s." -msgstr "Получил зависимость от %s." +msgstr "Получил зависимость - %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Became addicted to %s." -msgstr "Получила зависимость от %s." +msgstr "Получила зависимость - %s." #: src/memorial_logger.cpp #, c-format @@ -268642,38 +272771,38 @@ msgstr "Установлена сломанная бионика: %s." #, c-format msgctxt "memorial_male" msgid "Learned %s." -msgstr "Изучил %s." +msgstr "Изучил - %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Learned %s." -msgstr "Изучила %s." +msgstr "Изучила - %s." #. ~ %s is addiction name #: src/memorial_logger.cpp #, c-format msgctxt "memorial_male" msgid "Overcame addiction to %s." -msgstr "Избавился от зависимости к %s." +msgstr "Избавился от зависимости - %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Overcame addiction to %s." -msgstr "Избавилась от зависимости к %s." +msgstr "Избавилась от зависимости - %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_male" msgid "%s became hostile." -msgstr "%s становится враждебным." +msgstr "%s проявил враждебность." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "%s became hostile." -msgstr "%s становится враждебной." +msgstr "%s проявила враждебность." #: src/memorial_logger.cpp msgctxt "memorial_male" @@ -268699,13 +272828,13 @@ msgstr "Открыла странный храм." #, c-format msgctxt "memorial_male" msgid "Lost the conduct %s%s." -msgstr "Не выполнено ограничение «%s» %s." +msgstr "Не выполнил ограничение «%s» %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Lost the conduct %s%s." -msgstr "Не выполнено ограничение «%s» %s." +msgstr "Не выполнила ограничение «%s» %s." #: src/memorial_logger.cpp msgid " (disabled)" @@ -268715,13 +272844,13 @@ msgstr "(отключено)" #, c-format msgctxt "memorial_male" msgid "Gained the achievement %s%s." -msgstr "Получено достижение «%s» %s." +msgstr "Получил достижение «%s» %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Gained the achievement %s%s." -msgstr "Получено достижение «%s» %s." +msgstr "Получила достижение «%s» %s." #: src/memorial_logger.cpp #, c-format @@ -268795,35 +272924,35 @@ msgstr "Запечатала саркофаг с опасными веществ #, c-format msgctxt "memorial_male" msgid "Telefragged a %s." -msgstr "Телефрагнул %s." +msgstr "Телефрагнул: %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Telefragged a %s." -msgstr "Телефрагнула %s." +msgstr "Телефрагнула: %s." #: src/memorial_logger.cpp msgctxt "memorial_male" msgid "Spontaneous teleport." -msgstr "Спонтанно телепортируется." +msgstr "Спонтанная телепортация." #: src/memorial_logger.cpp msgctxt "memorial_female" msgid "Spontaneous teleport." -msgstr "Спонтанно телепортируется." +msgstr "Спонтанная телепортация." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_male" msgid "Teleported into a %s." -msgstr "Телепортировался в %s." +msgstr "Телепортировался - %s." #: src/memorial_logger.cpp #, c-format msgctxt "memorial_female" msgid "Teleported into a %s." -msgstr "Телепортировалась в %s." +msgstr "Телепортировалась - %s." #: src/memorial_logger.cpp msgctxt "memorial_male" @@ -268855,6 +272984,18 @@ msgctxt "memorial_female" msgid "Set off an alarm." msgstr "Отключила сигнализацию." +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_male" +msgid "Used the debug menu (%s)." +msgstr "Использовал меню отладки (%s)." + +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_female" +msgid "Used the debug menu (%s)." +msgstr "Использовала меню отладки (%s)." + #. ~ Message %s on the message log was repeated %d times, e.g. "You hear a #. whack! x 12" #: src/messages.cpp @@ -268865,17 +273006,17 @@ msgstr "%s x %d" #: src/messages.cpp msgctxt "message type" msgid "good" -msgstr "хорошо" +msgstr "хорошее" #: src/messages.cpp msgctxt "message type" msgid "bad" -msgstr "плохо" +msgstr "плохое" #: src/messages.cpp msgctxt "message type" msgid "mixed" -msgstr "смешанный" +msgstr "смешанное" #: src/messages.cpp msgctxt "message type" @@ -268890,7 +273031,7 @@ msgstr "информация" #: src/messages.cpp msgctxt "message type" msgid "neutral" -msgstr "безразличен" +msgstr "нейтральное" #: src/messages.cpp msgctxt "message type" @@ -269238,7 +273379,7 @@ msgstr "" " ..#Ov..**\n" " ...O|....\n" " \n" -"Вы можете связаться с нами, чтобы продать урожай и выплатить вам наличные или заплатить нам, чтобы убрать его для вас." +"Вы можете связаться с нами, чтобы продать урожай и получить наличные или заплатить нам, чтобы мы собрали его для вас." #: src/mission_companion.cpp msgid "Harvest East Field" @@ -269256,7 +273397,7 @@ msgstr "" "Опасность: низкая\n" "Время: 4 часа минимум\n" " \n" -"Добыча продовольствия включает в себя отправление компаньона на поиски еды в окружающую пустошь. Боя можно избежать, но могут встретиться дикие звери. Низкая оплата дополняется редкими предметами в качестве вознаграждения за особо крупную добычу." +"Добыча продовольствия включает в себя отправление компаньона на поиски еды в окружающую пустошь. Боя можно избежать, но могут встретиться дикие звери. Низкая оплата дополняется иногда попадающимися предметами в качестве вознаграждения за особо крупную добычу." #: src/mission_companion.cpp msgid "Assign Ally to Forage for Food" @@ -269294,13 +273435,13 @@ msgstr "" "Опасность: высокая\n" "Время: неизвестно\n" " \n" -"Добавление компаньонов к каравану увеличивает вероятность успеха. По своей природе, караваны — чрезвычайно привлекательные цели для налётчиков или враждебных групп, поэтому рекомендуется только сильная группа. Вознаграждение значительней для тех, кто в нём участвует, но ещё более важное для фракций их прибыль.\n" +"Добавление компаньонов к каравану увеличивает вероятность успеха. По своей природе, караваны — чрезвычайно привлекательные цели для налётчиков или враждебных групп, поэтому рекомендуется только сильная группа. Вознаграждение велико для тех, кто в нём участвует, но ещё они очень важны для участвующих фракций.\n" " \n" "Коммуна отправляет продовольствие Свободным торговцам в центр беженцев, как часть налога и в обмен на квалифицированную работу." #: src/mission_companion.cpp msgid "Caravan Commune-Refugee Center" -msgstr "Собрать караван центра Коммуны беженцев" +msgstr "Собрать караван Коммуна-Центр беженцев" #: src/mission_companion.cpp msgid "" @@ -269341,11 +273482,11 @@ msgstr "" #: src/mission_companion.cpp msgid "Begin Commune-Refugee Center Run" -msgstr "Начать работу центра Коммуны беженцев" +msgstr "Отправить караван Коммуна-Центр беженцев" #: src/mission_companion.cpp msgid "Recover Commune-Refugee Center" -msgstr "Восстановить центр Коммуны беженцев" +msgstr "Восстановить караван Коммуна-Центр беженцев" #: src/mission_companion.cpp msgid "There are no missions at this colony. Press Spacebar…" @@ -269411,12 +273552,12 @@ msgstr "" #: src/mission_companion.cpp #, c-format msgid "%s is wasted by %s!" -msgstr "%s погибает из-за %s!" +msgstr "%s погибает из-за атаки (%s)!" #: src/mission_companion.cpp #, c-format msgid "%s dodges %s's attack!" -msgstr "%s уворачивается от атаки %s!" +msgstr "%s уворачивается от атаки (%s)!" #: src/mission_companion.cpp msgid "I'm sorry, you don't have enough money." @@ -269455,7 +273596,7 @@ msgstr "Мне жаль, но у вас недостаточно денег, ч #: src/mission_companion.cpp #, c-format msgid "Do you wish to have %d %s planted here for $%d?" -msgstr "Вы хотите получить %d %s посаженный здесь за $%d?" +msgstr "Вы хотите посадить здесь: %d-%s? Это будет стоить $%d?" #: src/mission_companion.cpp #, c-format @@ -269489,17 +273630,17 @@ msgstr "" #: src/mission_companion.cpp #, c-format msgid "Do you wish to sell the crop of %d %s for a profit of $%d?" -msgstr "Вы хотите продать урожай %d %s, получив прибыль в размере $%d?" +msgstr "Вы хотите продать урожай (%s - %d), получив прибыль в размере $%d?" #: src/mission_companion.cpp #, c-format msgid "The %s are sold for $%d…" -msgstr "%s продано за $%d…" +msgstr "%s - продано за $%d…" #: src/mission_companion.cpp #, c-format msgid "You receive %d %s…" -msgstr "Вы получаете %d %s…" +msgstr "Вы получаете: %d - %s…" #: src/mission_companion.cpp #, c-format @@ -269507,7 +273648,7 @@ msgid "" "While scavenging, %s's party suddenly found itself set upon by a large mob " "of undead…" msgstr "" -"Пока искали добычу, группа %s внезапно обнаружила себя окружённой " +"Пока искали добычу, группа (%s) внезапно обнаружила себя окружённой " "многочисленной толпой нежити…" #: src/mission_companion.cpp @@ -269559,7 +273700,7 @@ msgstr "%s возвращается из рейда, зарабатывая $%d #: src/mission_companion.cpp #, c-format msgid "%s returned with a %s for you!" -msgstr "%s возвращает вам %s" +msgstr "%s возвращается, вам достаётся %s!" #: src/mission_companion.cpp #, c-format @@ -269581,12 +273722,12 @@ msgstr "" #: src/mission_companion.cpp #, c-format msgid "While %s was framing a building one of the walls began to collapse…" -msgstr "Во время строительства на %s обрушилась одна из стен…" +msgstr "Во время строительства обрушилась одна из стен, %s попадает под неё…" #: src/mission_companion.cpp #, c-format msgid "In the blink of an eye, %s threw a brace up and averted a disaster." -msgstr "В мгновение ока, %s метнул скобу и предотвратил катастрофу." +msgstr "В мгновение ока, %s мечет скобу и предотвращает катастрофу." #: src/mission_companion.cpp #, c-format @@ -269596,13 +273737,12 @@ msgstr "Пулей вылетев из окна, %s умудряется изб #: src/mission_companion.cpp #, c-format msgid "%s didn't make it out in time…" -msgstr "%s не сделал это вовремя…" +msgstr "%s не убирается вовремя…" #: src/mission_companion.cpp #, c-format msgid "but %s was rescued from the debris with only minor injuries!" -msgstr "" -"но %s был освобождён из обломков, отделавшись только лёгкими травмами!" +msgstr "но %s спасается из обломков, отделавшись только лёгкими травмами!" #: src/mission_companion.cpp msgid "Everyone who was trapped under the collapsing roof died…" @@ -269623,7 +273763,7 @@ msgstr "" #: src/mission_companion.cpp #, c-format msgid "While foraging, a beast began to stalk %s…" -msgstr "Пока %s добывал продовольствие, его начал преследовать зверь…" +msgstr "Пока %s добывает продовольствие, его начал преследовать зверь…" #: src/mission_companion.cpp #, c-format @@ -269634,18 +273774,18 @@ msgstr "" #: src/mission_companion.cpp #, c-format msgid "As soon as the cougar sprang %s darted to the safety of the outpost!" -msgstr "Как только пума бросилась, %s рванулся к безопасному аванпосту!" +msgstr "Как только пума бросилась, %s рвётся к безопасному аванпосту!" #: src/mission_companion.cpp #, c-format msgid "" "%s was caught unaware and was forced to fight the creature at close range!" -msgstr "%s был застигнут врасплох и вынужден вести ближний бой!" +msgstr "%s застигается врасплох и принуждается к ближнему бою!" #: src/mission_companion.cpp #, c-format msgid "%s was able to scare off the bear after delivering a nasty blow!" -msgstr "%s смог отпугнуть медведя после того, как нанёс ужасный удар!" +msgstr "%s успешно отпугивает медведя после того, как наносит ужасный удар!" #: src/mission_companion.cpp #, c-format @@ -269658,8 +273798,8 @@ msgid "" "%s was able to hold off the first wolf but the others that were skulking in " "the tree line caught up…" msgstr "" -"%s смог удержать первого волка, но другие, которые находились в лесополосе, " -"достали…" +"%s справляется с первым волком, но другие, которые находились в лесу, " +"догнали…" #: src/mission_companion.cpp msgid "I'm sorry, there wasn't anything we could do…" @@ -269671,8 +273811,8 @@ msgid "" "We… we don't know what exactly happened but we found %s's gear ripped and " "bloody…" msgstr "" -"Мы… мы не знаем что точно произошло, но мы нашли окровавленные и разорванные" -" вещи %s…" +"Мы… мы не знаем что точно произошло, но… %s… мы нашли окровавленные и " +"разорванные вещи…" #: src/mission_companion.cpp msgid "I fear your companion won't be returning." @@ -269690,17 +273830,17 @@ msgstr "" #: src/mission_companion.cpp #, c-format msgid "Engagement between %d members of %s %s and %d %s%s!" -msgstr "Схватка между %d членами %s %s и %d %s%s!" +msgstr "Схватка между %d членами %s (%s) и %d (%s)%s!" #: src/mission_companion.cpp #, c-format msgid "%s forces are destroyed!" -msgstr "%s силы уничтожены!" +msgstr "%s: силы уничтожены!" #: src/mission_companion.cpp #, c-format msgid "%s forces retreat from combat!" -msgstr "%s силы отступили от боя!" +msgstr "%s: силы отступили из боя!" #: src/mission_companion.cpp msgid "The monsters are destroyed!" @@ -269713,7 +273853,7 @@ msgstr "Монстры отступают!" #: src/mission_companion.cpp #, c-format msgid "Engagement between %d members of %s %s and %d members of %s %s%s!" -msgstr "Обязательство между %d членами %s %s и %d членами %s %s%s!" +msgstr "Стычка между %d членами %s (%s) и %d членами %s (%s)%s!" #: src/mission_companion.cpp msgid "You don't have any companions to send out…" @@ -269732,7 +273872,7 @@ msgstr "[ БОЙ : ВЫЖИВАНИЕ : ПРОИЗВОДСТВО ]" #, c-format msgctxt "companion" msgid "%1$s (Guarding)" -msgstr "%1$s (Защищается)" +msgstr "%1$s (Сторожит)" #: src/mission_companion.cpp #, c-format @@ -269778,7 +273918,7 @@ msgstr "%s даёт вам предмет из ячейки хранения." #: src/mission_start.cpp #, c-format msgid "%s gave you a dog whistle." -msgstr "%s отдал вам собачий свисток." +msgstr "%s отдёт вам собачий свисток." #: src/mission_start.cpp msgid "Demonic Soul" @@ -269792,7 +273932,7 @@ msgstr "%s передаёт вам флешку." #: src/mission_start.cpp #, c-format msgid "%s's Terminal" -msgstr "%s терминал" +msgstr "%s - терминал" #: src/mission_start.cpp msgid "Download Software" @@ -270019,7 +274159,7 @@ msgstr "%s выстреливает в вас дротиком, но он отс #: src/monattack.cpp #, c-format msgid "The %1$s feeds an %2$s and it grows!" -msgstr "%1$s съедает %2$s и растёт!" +msgstr "%1$s съедает противника (%2$s) и растёт!" #: src/monattack.cpp #, c-format @@ -270059,7 +274199,7 @@ msgstr "скрежет." #: src/monattack.cpp #, c-format msgid "A glob of acid hits the %s!" -msgstr "Капли кислоты повреждают %s!" +msgstr "Капли кислоты наносят урон (%s)!" #: src/monattack.cpp #, c-format @@ -270088,18 +274228,19 @@ msgstr "" #: src/monattack.cpp #, c-format msgid "The %1$s barfs acid on your %2$s, but it washes off the armor!" -msgstr "%1$s изрыгает кислоту вам на %2$s, но она отскакивает от вашей брони!" +msgstr "" +"%1$s изрыгает кислоту на вас (%2$s), но она отскакивает от вашей брони!" #: src/monattack.cpp #, c-format msgid "The %1$s barfs acid on 's %2$s, but it washes off the armor!" msgstr "" -"%1$s изрыгает кислоту на %2$s (), но она отскакивает от брони!" +"%1$s изрыгает кислоту NPC (%2$s - ), но она отскакивает от брони!" #: src/monattack.cpp #, c-format msgid "A bolt of electricity arcs towards %s!" -msgstr "Рядом с %s вспыхивают электрические дуги!" +msgstr "Разряд электричества несётся к цели (%s)! " #: src/monattack.cpp #, c-format @@ -270109,12 +274250,12 @@ msgstr "%s оскорбительно кричит «%s!!!»" #: src/monattack.cpp #, c-format msgid "%s is pulled away from your hands!" -msgstr "У вас из рук вырвали %s!" +msgstr "%s вылетает у вас из рук!" #: src/monattack.cpp #, c-format msgid "%s is pulled away from 's hands!" -msgstr "Из рук вырвали %s!" +msgstr "Из рук NPC () вылетает %s!" #: src/monattack.cpp #, c-format @@ -270124,7 +274265,7 @@ msgstr "%s безуспешно пытается вырвать оружие у #: src/monattack.cpp #, c-format msgid "The %s unsuccessfully attempts to pull 's weapon away." -msgstr "%s безуспешно пытается вырвать оружие у из рук." +msgstr "%s безуспешно пытается вырвать оружие у NPC () из рук." #: src/monattack.cpp #, c-format @@ -270134,7 +274275,7 @@ msgstr "%s изрыгает желчь!" #: src/monattack.cpp #, c-format msgid "Bile splatters on the %s!" -msgstr "Желчь попадает на %s!" +msgstr "Желчь забрызгивает окрестности (%s)!" #: src/monattack.cpp msgid "You dodge it!" @@ -270162,7 +274303,7 @@ msgstr "%s указывает на ближайший труп." #: src/monattack.cpp #, c-format msgid "A nearby %s rises from the dead!" -msgstr "%s поблизости восстал из мёртвых!" +msgstr "%s поблизости восстёт из мёртвых!" #: src/monattack.cpp msgid "But nothing seems to happen." @@ -270176,7 +274317,7 @@ msgstr "%s наносит по вам мощный удар, но вы увор #: src/monattack.cpp #, c-format msgid "The %s takes a powerful swing at , who dodges it!" -msgstr "%s наносит мощный удар по , но тот уворачивается от него!" +msgstr "%s наносит мощный удар, но уворачивается от него!" #: src/monattack.cpp #, c-format @@ -270191,7 +274332,7 @@ msgstr "%s наносит удар такой силы, что отп #: src/monattack.cpp #, c-format msgid "The %1$s fires a shimmering beam towards %2$s!" -msgstr "%1$s выстреливает мерцающим лучом в направлении %2$s!" +msgstr "%1$s выстреливает мерцающим лучом туда, где %2$s!" #: src/monattack.cpp msgid "You dodge the beam!" @@ -270212,7 +274353,7 @@ msgstr "Вас пронзает как иголкой." #: src/monattack.cpp #, c-format msgid "A manhack flies out of one of the holes on the %s!" -msgstr "Дрон вылетает из одного из отверстий в корпусе %s!" +msgstr "Дрон вылетает из одного из отверстий в корпусе робота (%s)!" #: src/monattack.cpp #, c-format @@ -270241,42 +274382,42 @@ msgstr "%s вопросительно пикает и фокусирует на #: src/monattack.cpp #, c-format msgid "The %s's combat arms crackle with electricity." -msgstr "Боевые манипуляторы %s потрескивают из-за электричества." +msgstr "Боевые манипуляторы (%s) потрескивают из-за электричества." #. ~ %s is bodypart name in accusative. #: src/monattack.cpp #, c-format msgid "A tree bursts forth from the earth and pierces your %s!" -msgstr "Дерево прорывается из земли и пронзает ваш %s!" +msgstr "Дерево прорывается из земли и пронзает вашу часть тела (%s)!" #. ~ %s is bodypart name in accusative. #: src/monattack.cpp #, c-format msgid "A tree bursts forth from the earth and pierces 's %s!" -msgstr "Дерево прорывается из земли и пронзает %s у !" +msgstr "Дерево прорывается из земли и пронзает NPC ( - %s)!" #. ~ %s is bodypart name in accusative. #: src/monattack.cpp #, c-format msgid "The underbrush beneath your feet grows and pierces your %s!" -msgstr "Кустарник под вашими ногами прорастает сквозь ваши %s!" +msgstr "Кустарник под вашими ногами прорастает сквозь вашу часть тела (%s)!" #. ~ %s is bodypart name in accusative. #: src/monattack.cpp #, c-format msgid "Underbrush grows into a tree, and it pierces 's %s!" -msgstr "Кустарник вырастает в дерево и пронзает %s у !" +msgstr "Кустарник вырастает в дерево и пронзает NPC ( - %s)!" #. ~ 1$s monster name(vine), 2$s bodypart in accusative #: src/monattack.cpp #, c-format msgid "The %1$s lashes your %2$s!" -msgstr "%1$s хлещет вас в %2$s!" +msgstr "%1$s хлещет вас - %2$s!" #: src/monattack.cpp #, c-format msgid "The %1$s lashes 's %2$s!" -msgstr "%1$s хлещет %2$s у !" +msgstr "%1$s хлещет NPC ( - %2$s)!" #: src/monattack.cpp msgid "thu-THUMP." @@ -270289,7 +274430,7 @@ msgstr "Стена из корней вокруг вас издаёт скрип #: src/monattack.cpp #, c-format msgid "Spores are released from the %s!" -msgstr "Споры вылетают из %s!" +msgstr "Споры вылетают из существа (%s)!" #: src/monattack.cpp msgid "\"Buy SpOreos(tm) now!\"" @@ -270298,7 +274439,7 @@ msgstr "«Купите СпОрео(tm) сейчас!»" #: src/monattack.cpp #, c-format msgid "Delicious snacks are released from the %s!" -msgstr "Великолепные закуски появляются из %s!" +msgstr "Великолепные закуски появляются из существа (%s)!" #: src/monattack.cpp #, c-format @@ -270349,7 +274490,7 @@ msgstr "%s колет вас иглоподобным щупом!" #: src/monattack.cpp #, c-format msgid "The %1$s sinks its point into your %2$s!" -msgstr "%1$s втыкает свой щуп вам в %2$s!" +msgstr "%1$s втыкает свой щуп вам в часть тела (%2$s)!" #: src/monattack.cpp msgid "You feel thousands of live spores pumping into you…" @@ -270359,24 +274500,26 @@ msgstr "Вы чувствуете, как тысячи живых спор вл #: src/monattack.cpp #, c-format msgid "The %1$s strikes your %2$s, but your armor protects you." -msgstr "%1$s бьёт в %2$s, но ваша броня защищает вас." +msgstr "%1$s бьёт вас (%2$s), но ваша броня защищает вас." #: src/monattack.cpp #, c-format msgid "The %1$s swipes at %2$s with a barbed tendril!" -msgstr "%1$s бьёт в %2$s своим колючим усиком!" +msgstr "%1$s бьёт в цель (%2$s) своим колючим усиком!" #. ~ 1$s is monster name, 2$s bodypart in accusative #: src/monattack.cpp #, c-format msgid "The %1$s sinks several needlelike barbs into your %2$s!" -msgstr "%1$s втыкает свои иглоподобные колючки вам в %2$s!" +msgstr "%1$s втыкает свои иглоподобные колючки вам в часть тела (%2$s)!" #. ~ 1$s is monster name, 2$s bodypart in accusative #: src/monattack.cpp #, c-format msgid "The %1$s slashes your %2$s, but your armor protects you." -msgstr "%1$s пытается покромсать вашу %2$s, но ваша броня защищает вас." +msgstr "" +"%1$s пытается раскромсать вашу часть тела (%2$s), но ваша броня защищает " +"вас." #: src/monattack.cpp #, c-format @@ -270439,7 +274582,7 @@ msgstr "Вас оттолкнула выросшая грибная изгоро #: src/monattack.cpp #, c-format msgid "A fungal tendril bursts forth from the earth and pierces your %s!" -msgstr "Грибной усик прорывается из земли и пронзает ваш %s!" +msgstr "Грибной усик прорывается из земли и пронзает вашу часть тела (%s)!" #: src/monattack.cpp msgid "A fungal tendril bursts forth from the earth!" @@ -270462,7 +274605,7 @@ msgstr "%s прыгает на вас, но вы уворачиваетесь." #: src/monattack.cpp #, c-format msgid "You swat at the %s with your tail!" -msgstr "Вы хлопаете по %s своим хвостом!" +msgstr "Вы хлопаете по противнику (%s) своим хвостом!" #: src/monattack.cpp #, c-format @@ -270473,13 +274616,13 @@ msgstr "%s запрыгивает на вас, но вы стряхиваете #: src/monattack.cpp #, c-format msgid "The %1$s lands on your %2$s, but can't penetrate your armor." -msgstr "%1$s запрыгнул вам на %2$s, но не может пробить броню." +msgstr "%1$s запрыгнул вам на часть тела (%2$s), но не может пробить броню." #. ~ 1$s monster name(dermatik), 2$s bodypart name in accusative. #: src/monattack.cpp #, c-format msgid "The %1$s sinks its ovipositor into your %2$s!" -msgstr "%1$s втыкает свой яйцеклад вам в %2$s!" +msgstr "%1$s втыкает свой яйцеклад вам в часть тела (%2$s)!" #: src/monattack.cpp #, c-format @@ -270499,7 +274642,7 @@ msgstr "%s падает на землю и лопается!" #: src/monattack.cpp #, c-format msgid "%s is engulfed by %s!" -msgstr "%s охвачен %s!" +msgstr "%s охвачен - %s!" #: src/monattack.cpp #, c-format @@ -270559,7 +274702,7 @@ msgstr "%s хлопает!" #: src/monattack.cpp #, c-format msgid "The %s's head explodes in a mass of roiling tentacles!" -msgstr "Голова %s лопается, высвобождая массу извивающихся щупалец!" +msgstr "Голова монстра (%s) лопается, высвобождая массу извивающихся щупалец!" #: src/monattack.cpp #, c-format @@ -270569,13 +274712,13 @@ msgstr "%s хлещет своим щупальцем по вам!" #: src/monattack.cpp #, c-format msgid "The %s lashes its tentacle at !" -msgstr "%s хлещет своим щупальцем !" +msgstr "%s хлещет своим щупальцем NPC ()!" #. ~ 1$s is bodypart name, 2$d is damage value. #: src/monattack.cpp #, c-format msgid "Your %1$s is hit for %2$d damage!" -msgstr "Ваш %1$s получает %2$d урона!" +msgstr "Ваша часть тела (%1$s) получает %2$d урона!" #. ~ 1$s is bodypart name, 2$d is damage value. #: src/monattack.cpp @@ -270586,7 +274729,8 @@ msgstr "%1$s () получает %2$d урона!" #: src/monattack.cpp #, c-format msgid "The %1$s lashes its tentacle at your %2$s, but glances off your armor!" -msgstr "%1$s бьёт щупальцем ваш %2$s, но соскальзывает по броне!" +msgstr "" +"%1$s бьёт щупальцем вашу часть тела (%2$s), но соскальзывает по броне!" #: src/monattack.cpp #, c-format @@ -270594,7 +274738,8 @@ msgid "" "The %1$s lashes its tentacle at 's %2$s, but glances off their " "armor!" msgstr "" -"%1$s режет своим щупальцем %2$s у , но оно соскальзывает по броне!" +"%1$s режет своим щупальцем по NPC ( - %2$s), но оно соскальзывает " +"по броне!" #: src/monattack.cpp #, c-format @@ -270605,7 +274750,8 @@ msgstr "%s выбрасывает свои руки в вашем направл #, c-format msgid "The %s's arms fly out at , but they dodge!" msgstr "" -"%s выбрасывает свои руки в направлении , но тот уворачивается!" +"%s выбрасывает свои руки в направлении NPC (), но тот " +"уворачивается!" #: src/monattack.cpp #, c-format @@ -270616,7 +274762,7 @@ msgstr "" #: src/monattack.cpp #, c-format msgid "The %1$s reaches out and pulls %2$s!" -msgstr "%1$s выгибается и подтягивает %2$s!" +msgstr "%1$s выгибается и подтягивает противника (%2$s)!" #: src/monattack.cpp #, c-format @@ -270626,7 +274772,7 @@ msgstr "%s ощупывает вас, но вы уворачиваетесь!" #: src/monattack.cpp #, c-format msgid "The %s gropes at , but they dodge!" -msgstr "%s ощупывает , но тот уворачивается!" +msgstr "%s ощупывает NPC (), но тот уворачивается!" #: src/monattack.cpp #, c-format @@ -270636,7 +274782,7 @@ msgstr "%s пытается вас схватить…" #: src/monattack.cpp #, c-format msgid "The %s grabs !" -msgstr "%s хватает !" +msgstr "%s хватает NPC ()!" #: src/monattack.cpp #, c-format @@ -270653,7 +274799,8 @@ msgstr "%s пытается вас оттащить, но вы надёжно п msgid "" "The %s tries to drag , but they're securely fastened in the " "autodoc." -msgstr "%s пытается оттащить , но тот надёжно пристёгнут к автодоку." +msgstr "" +"%s пытается оттащить NPC (), но тот надёжно пристёгнут к автодоку." #: src/monattack.cpp #, c-format @@ -270663,7 +274810,7 @@ msgstr "%s тащит вас за собой!" #: src/monattack.cpp #, c-format msgid " gets dragged behind the %s!" -msgstr "%s тащит за собой !" +msgstr "%s тащит за собой NPC ()!" #: src/monattack.cpp #, c-format @@ -270709,12 +274856,12 @@ msgstr "%s вторгается в ваш разум, но не преодоле #: src/monattack.cpp #, c-format msgid "The terrifying visage of the %s paralyzes you." -msgstr "Ужасающий вид %sа парализует вас." +msgstr "Ужасающий вид монстра (%s) парализует вас." #: src/monattack.cpp #, c-format msgid "You manage to avoid staring at the horrendous %s." -msgstr "Вы смогли отвести взгляд от ужасного %s." +msgstr "Вы смогли отвести взгляд от ужасного монстра (%s)." #: src/monattack.cpp msgid "You get a medical check-up." @@ -270746,7 +274893,7 @@ msgstr "%s угрюмо смотрит на пустой набор для ан #: src/monattack.cpp #, c-format msgid "The %1$s scans %2$s and seems to detect something." -msgstr "%1$s сканирует %2$s и находит что-то." +msgstr "%1$s сканирует пациента (%2$s) и находит что-то." #: src/monattack.cpp #, c-format @@ -270853,7 +275000,7 @@ msgstr "%s безуспешно пытается ударить вас токо #: src/monattack.cpp #, c-format msgid "The %s unsuccessfully attempts to shock ." -msgstr "%s безуспешно пытается ударить током ." +msgstr "%s безуспешно пытается ударить током NPC ()." #: src/monattack.cpp #, c-format @@ -270918,7 +275065,7 @@ msgstr "%s стреляет из 120-мм пушки!" #: src/monattack.cpp #, c-format msgid "The tongue of flame hits the %s!" -msgstr "Язык пламени попадает в %s!" +msgstr "Язык пламени попадает по окружению (%s)!" #: src/monattack.cpp msgid "a robotic voice boom, \"Citizen, Halt!\"" @@ -270961,18 +275108,18 @@ msgstr "«ГЛУПЫЙ ЧЕЛОВЕЧИШКА…»" #: src/monattack.cpp #, c-format msgid "A black mist floats from the %1$s around the %2$s." -msgstr "Чёрное облако, выпущенное %1$s, окутывает %2$s." +msgstr "Чёрное облако, выпущенное монстром (%1$s), окутывает другого (%2$s)." #: src/monattack.cpp #, c-format msgid "A black mist floats from the %s." -msgstr "Чёрное облако вылетает со стороны %s." +msgstr "Чёрное облако вылетает со стороны монстра (%s)." #. ~ %1$s is the pre-upgrade monster, %2$s is the post-upgrade monster. #: src/monattack.cpp #, c-format msgid "The %1$s becomes a %2$s!" -msgstr "%1$s становится %2$s!" +msgstr "%1$s превращается! Теперь здесь %2$s!" #: src/monattack.cpp #, c-format @@ -270987,13 +275134,16 @@ msgstr "Появляется %s!" #: src/monattack.cpp #, c-format msgid "The %1$s stretches its head at you, but bounces off the %2$s" -msgstr "%1$s вытягивает голову в вашем направлении, но отскакивает от %2$s" +msgstr "" +"%1$s вытягивает голову в вашем направлении, но отскакивает от препятствия " +"(%2$s)" #: src/monattack.cpp #, c-format msgid "The %1$s stretches its head at , but bounces off the %2$s" msgstr "" -"%1$s вытягивает голову в направлении , но отскакивает от %2$s" +"%1$s вытягивает голову в направлении NPC (), но отскакивает от " +"препятствия (%2$s)" #: src/monattack.cpp #, c-format @@ -271009,30 +275159,32 @@ msgid "" "The %s's head extends to bite , but they dodge and the head sails " "past!" msgstr "" -"Голова существа (%s) вытягивается в попытке укусить , но не " +"Голова существа (%s) вытягивается в попытке укусить NPC (), но не " "попадает и пролетает мимо!" #. ~ 1$s is monster name, 2$s bodypart in accusative #: src/monattack.cpp #, c-format msgid "The %1$s's teeth sink into your %2$s!" -msgstr "Зубы (%1$s) впиваются в ваш %2$s!" +msgstr "Зубы (%1$s) впиваются в вашу часть тела (%2$s)!" #. ~ 1$s is monster name, 2$s bodypart in accusative #: src/monattack.cpp #, c-format msgid "The %1$s's teeth sink into 's %2$s!" -msgstr "Зубы (%1$s) впиваются в %2$s ()!" +msgstr "Зубы (%1$s) впиваются в NPC ( - %2$s)!" #: src/monattack.cpp #, c-format msgid "The %1$s's head hits your %2$s, but glances off your armor!" -msgstr "Голова (%1$s) попадает в ваш %2$s, но соскальзывает по броне!" +msgstr "" +"Голова (%1$s) попадает в вашу часть тела (%2$s), но соскальзывает по броне!" #: src/monattack.cpp #, c-format msgid "The %1$s's head hits 's %2$s, but glances off armor!" -msgstr "Голова (%1$s) попадает в %2$s (), но соскальзывает по броне!" +msgstr "" +"Голова (%1$s) попадает в NPC ( - %2$s), но соскальзывает по броне!" #: src/monattack.cpp msgid "He's brandishing a knife!" @@ -271055,22 +275207,22 @@ msgstr "%1$s замахивается на противника (%2$s) масс #: src/monattack.cpp #, c-format msgid "Your %1$s is battered for %2$d damage!" -msgstr "Ваш %1$s получает %2$d урона!" +msgstr "Ваша часть тела (%1$s) получает %2$d урона!" #: src/monattack.cpp #, c-format msgid "The %1$s quivers hungrily in the direction of the %2$s." -msgstr "%1$s подрагивает от голода при виде %2$s." +msgstr "%1$s голодно дёргается - %2$s явно вызывает его аппетит." #: src/monattack.cpp #, c-format msgid "The %1$s absorbs the %2$s, growing larger." -msgstr "%1$s поглощает %2$s и растёт в размере." +msgstr "%1$s поглощает пищу (%2$s) и растёт в размере." #: src/monattack.cpp #, c-format msgid "The %1$s lunges for %2$s!" -msgstr "%1$s бросается на %2$s!" +msgstr "%1$s бросается на цель (%2$s)!" #: src/monattack.cpp #, c-format @@ -271080,42 +275232,44 @@ msgstr "%1$s бросается на вас, но вы отходите в ст #: src/monattack.cpp #, c-format msgid "The %1$s lunges at , but they sidestep it!" -msgstr "%1$s бросается на , но тот отходит в сторону!" +msgstr "%1$s бросается на NPC (), но тот отходит в сторону!" #: src/monattack.cpp #, c-format msgid "The %1$s lunges at your %2$s, battering it for %3$d damage!" -msgstr "%1$s бросается на ваш %2$s, нанеся урон в %3$d единиц!" +msgstr "%1$s бросается на вашу часть тела (%2$s), нанеся урон в %3$d единиц!" #: src/monattack.cpp #, c-format msgid "The %1$s lunges at 's %2$s, battering it for %3$d damage!" -msgstr "%1$s бросается на %2$s у , нанеся урон в %3$d единиц!" +msgstr "%1$s бросается на NPC ( - %2$s), нанеся урон в %3$d единиц!" #: src/monattack.cpp #, c-format msgid "The %1$s lunges at your %2$s, but your armor prevents injury!" msgstr "" -"%1$s бросается на ваш %2$s, но ваша броня предотвратила нанесение урона!" +"%1$s бросается на ваc (%2$s), но ваша броня предотвратила нанесение урона!" #: src/monattack.cpp #, c-format msgid "The %1$s lunges at 's %2$s, but their armor prevents injury!" msgstr "" -"%1$s бросается на %2$s у , но его броня предотвратила нанесение " -"урона!" +"%1$s бросается на NPC ( - %2$s), но его броня предотвратила " +"нанесение урона!" #: src/monattack.cpp #, c-format msgid "The %1$s thrusts a claw at you, but it bounces off the %2$s!" msgstr "" -"%1$s выбрасывает свой коготь в вашу сторону, но он отскакивает от %2$s!" +"%1$s выбрасывает свой коготь в вашу сторону, но он отскакивает от " +"препятствия (%2$s)!" #: src/monattack.cpp #, c-format msgid "The %1$s thrusts a claw at , but it bounces off the %2$s!" msgstr "" -"%1$s выбрасывает свой коготь в сторону , но он отскакивает от %2$s!" +"%1$s выбрасывает свой коготь в сторону NPC (), но он отскакивает от" +" препятствия (%2$s)!" #: src/monattack.cpp #, c-format @@ -271125,13 +275279,13 @@ msgstr "%s выбрасывает в вашу сторону клешню, но #: src/monattack.cpp #, c-format msgid "The %s thrusts a claw at , but they evade it!" -msgstr "%s выбрасывает в сторону клешню, но он уворачивается!" +msgstr "%s выбрасывает в сторону NPC () клешню, но он уворачивается!" #. ~ 1$s is bodypart name, 2$d is damage value. #: src/monattack.cpp #, c-format msgid "The %1$s thrusts a claw at your %2$s, slashing it for %3$d damage!" -msgstr "%1$s выбрасывает клешню на ваш %2$s, нанеся урон в %3$d единиц!" +msgstr "%1$s выбрасывает клешню по вам (%2$s), нанеся урон в %3$d единиц!" #. ~ 1$s is bodypart name, 2$d is damage value. #: src/monattack.cpp @@ -271139,18 +275293,20 @@ msgstr "%1$s выбрасывает клешню на ваш %2$s, нанеся msgid "" "The %1$s thrusts a claw at 's %2$s, slashing it for %3$d damage!" msgstr "" -"%1$s выбрасывает клешню на %2$s у , нанеся урон в %3$d единиц!" +"%1$s выбрасывает клешню по NPC ( - %2$s), нанеся урон в %3$d " +"единиц!" #: src/monattack.cpp #, c-format msgid "The %1$s thrusts a claw at your %2$s, but glances off your armor!" -msgstr "%1$s выбрасывает клешню на ваш %2$s, но соскальзывает по броне!" +msgstr "%1$s выбрасывает клешню по вам (%2$s), но соскальзывает по броне!" #: src/monattack.cpp #, c-format msgid "The %1$s thrusts a claw at 's %2$s, but glances off armor!" msgstr "" -"%1$s выбрасывает клешню на %2$s у , но соскальзывает по броне!" +"%1$s выбрасывает клешню по NPC ( - %2$s), но соскальзывает по " +"броне!" #: src/monattack.cpp #, c-format @@ -271160,7 +275316,7 @@ msgstr "%s режет вашу шею! Вы пригибаетесь!" #: src/monattack.cpp #, c-format msgid "The %s slashes at 's neck! They duck!" -msgstr "%s режет шею ! Он пригибается!" +msgstr "%s режет шею NPC ()! Тот пригибается!" #: src/monattack.cpp #, c-format @@ -271171,22 +275327,22 @@ msgstr "%1$s режет вашу шею, нанеся урон в %2$d един #, c-format msgid "" "The %1$s slashes at 's neck, cutting their throat for %2$d damage!" -msgstr "%1$s режет шею у , нанеся урон в %2$d единиц!" +msgstr "%1$s режет шею NPC (), нанеся урон в %2$d единиц!" #: src/monattack.cpp #, c-format msgid "The %1$s slashes at your %2$s, but glances off your armor!" -msgstr "%1$s режет ваш %2$s, но соскальзывает по броне!" +msgstr "%1$s режет ваc (%2$s), но соскальзывает по броне!" #: src/monattack.cpp #, c-format msgid "The %1$s slashes at 's %2$s, but glances off armor!" -msgstr "%1$s режет %2$s у , но соскальзывает по броне!" +msgstr "%1$s режет NPC ( - %2$s), но соскальзывает по броне!" #: src/monattack.cpp #, c-format msgid "A shadow splits from the %s!" -msgstr "Тень отделяется от %s!" +msgstr "Тень отделяется от монстра (%s)!" #: src/monattack.cpp msgid "\"Stop it please\"" @@ -271284,7 +275440,7 @@ msgstr "Робот осторожно сканирует вас." #: src/monattack.cpp msgid "The robot carefully scans ." -msgstr "Робот тщательно сканирует ." +msgstr "Робот тщательно сканирует NPC ()." #: src/monattack.cpp msgid "The riotbot orders you to present your hands and be cuffed." @@ -271386,7 +275542,7 @@ msgstr "%1$s пронзает вашу грудь на %2$d урона!" #: src/monattack.cpp #, c-format msgid "The %1$s impales 's chest for %2$d damage!" -msgstr "%1$s пронзает грудь на %2$d урона!" +msgstr "%1$s пронзает грудь NPC () на %2$d урона!" #: src/monattack.cpp #, c-format @@ -271397,23 +275553,23 @@ msgstr "%1$s пытается проникнуть в ваше тело, но н #: src/monattack.cpp #, c-format msgid "The %1$s slashes at 's torso, but is stopped by their armor!" -msgstr "%1$s рубанул по торсу, но броня защищает от урона!" +msgstr "%1$s рубанул NPC () по торсу, но броня защищает от урона!" #: src/monattack.cpp #, c-format msgid "" "The %1$s burrows within %2$s corpse and a %3$s emerges from the remains!" -msgstr "%1$s зарывается в тело %2$s, и из остатков выбирается %3$s!" +msgstr "%1$s зарывается в тело (%2$s), и из остатков выбирается %3$s!" #: src/monattack.cpp #, c-format msgid "The %1$s burrows within %2$s corpse!" -msgstr "%1$s зарывается в тело %2$s!" +msgstr "%1$s зарывается в тело (%2$s)!" #: src/monattack.cpp #, c-format msgid "A %1$s emerges from %2$s corpse!" -msgstr "%1$s вылезает из тела %2$s!" +msgstr "%1$s вылезает из тела (%2$s)!" #: src/monattack.cpp #, c-format @@ -271453,23 +275609,23 @@ msgstr "оглушительный рёв!" #: src/monattack.cpp #, c-format msgid "A %s struggles to pull itself free from the %s!" -msgstr "%s пытается вывернуться из %s!" +msgstr "%s пытается вырваться из монстра (%s)!" #: src/monattack.cpp #, c-format msgid "The %1$s mechanically grabs at %2$s!" -msgstr "%1$s механически хватает %2$s!" +msgstr "%1$s механически хватает цель (%2$s)!" #: src/monattack.cpp #, c-format msgid "%1$s slams %2$s to the ground!" -msgstr "%1$s швыряет %2$s на землю!" +msgstr "%1$s швыряет врага (%2$s) на землю!" #. ~ 1$s is bodypart name in accusative, 2$d is damage value. #: src/monattack.cpp #, c-format msgid "The zombie kicks your %1$s for %2$d damage…" -msgstr "Зомби ударил ваш %1$s и нанёс %2$d урона…" +msgstr "Зомби ударяет вас (%1$s) и наносит %2$d урона…" #: src/monattack.cpp #, c-format @@ -271489,20 +275645,20 @@ msgstr "и швыряет вас, нанеся урон %d!" #: src/monattack.cpp #, c-format msgid "The %1$s mechanically lunges at %2$s!" -msgstr "%1$s делает механический выпад в сторону %2$s!" +msgstr "%1$s делает механический выпад в сторону противника (%2$s)!" #: src/monattack.cpp #, c-format msgid "The %1$s impales %2$s!" -msgstr "%1$s пронзает %2$s!" +msgstr "%1$s пронзает противника (%2$s)!" #: src/monattack.cpp msgid "The %1$s tries to impale your %s…" -msgstr "%1$s пытается пронзить ваш %s…" +msgstr "%1$s пытается пронзить вас (%s)…" #: src/monattack.cpp msgid "The %1$s tries to impale 's %s…" -msgstr "%1$s пытается пронзить %s …" +msgstr "%1$s пытается пронзить NPC ( - %s)…" #: src/monattack.cpp #, c-format @@ -271515,17 +275671,17 @@ msgstr "но не может пробить вашу броню!" #: src/monattack.cpp msgid "but fails to penetrate 's armor!" -msgstr "но не может пробить броню !" +msgstr "но не может пробить броню NPC ()!" #: src/monattack.cpp #, c-format msgid "The %1$s mechanically reaches for %2$s!" -msgstr "%1$s механически тянется к %2$s!" +msgstr "%1$s механически тянется к цели (%2$s)!" #: src/monattack.cpp #, c-format msgid "The zombie grabs your %s…" -msgstr "Зомби хватает вас за %s…" +msgstr "Зомби хватает вас за оружие (%s)…" #: src/monattack.cpp msgid "and throws it to the ground!" @@ -271573,12 +275729,16 @@ msgstr "Ревёт клаксон, и %s выпускает дрона с мин #: src/monattack.cpp #, c-format msgid "The %1$s thrusts its arm at you, but bounces off the %2$s." -msgstr "%1$s выбрасывает свою руку в вашу сторону, он она отскакивает от %2$s" +msgstr "" +"%1$s выбрасывает свою руку в вашу сторону, но она отскакивает от препятствия" +" (%2$s)" #: src/monattack.cpp #, c-format msgid "The %1$s thrusts its arm at , but bounces off the %2$s." -msgstr "%1$s выбрасывает руку в сторону , но он отскакивает от %2$s!" +msgstr "" +"%1$s выбрасывает руку в сторону NPC (), но он отскакивает от " +"препятствия (%2$s)!" #: src/monattack.cpp #, c-format @@ -271590,7 +275750,7 @@ msgstr "" #: src/monattack.cpp #, c-format msgid "The %s thrusts its arm at ." -msgstr "%s выбрасывает руку в направлении " +msgstr "%s выбрасывает руку в направлении NPC ()" #: src/monattack.cpp msgid "You evade the stretched arm and it sails past you!" @@ -271604,28 +275764,30 @@ msgstr " уклоняется от вытянутых рук!" #: src/monattack.cpp #, c-format msgid "The %1$s's arm pierces your %2$s!" -msgstr "Рука %1$s протыкает ваш %2$s!" +msgstr "Рука %1$s протыкает вашу часть тела (%2$s)!" #. ~ 1$s is monster name, 2$s bodypart in accusative #: src/monattack.cpp #, c-format msgid "The %1$s arm pierces 's %2$s!" -msgstr "Рука существа (%1$s) протыкает %2$s ()!" +msgstr "Рука существа (%1$s) протыкает NPC ( - %2$s)!" #: src/monattack.cpp #, c-format msgid "The %1$s arm hits your %2$s, but glances off your armor!" -msgstr "Рука существа (%1$s) попадает в ваш %2$s, но соскальзывает по броне!" +msgstr "" +"Рука существа (%1$s) попадает в вашу часть тела (%2$s), но соскальзывает по " +"броне!" #: src/monattack.cpp #, c-format msgid "The %1$s hits 's %2$s, but glances off armor!" -msgstr "%1$s попадает в %2$s (), но соскальзывает по броне!" +msgstr "%1$s попадает в NPC ( - %2$s), но соскальзывает по броне!" #: src/monattack.cpp #, c-format msgid "The %1$s fuses with the %2$s." -msgstr "%1$s сливается с %2$s." +msgstr "%1$s сливается с другим существом (%2$s)." #: src/monattack.cpp #, c-format @@ -271648,12 +275810,12 @@ msgstr "%s умирает!" #: src/mondeath.cpp #, c-format msgid "The %s's body dissolves into acid." -msgstr "Тело %s растворяется в кислоте." +msgstr "Тело (%s) растворяется в кислоте." #: src/mondeath.cpp #, c-format msgid "The %s's body leaks acid." -msgstr "Тело %s растекается кислотной лужей." +msgstr "Тело (%s) растекается кислотной лужей." #: src/mondeath.cpp #, c-format @@ -271672,12 +275834,12 @@ msgstr "%s распадается!" #: src/mondeath.cpp src/monmove.cpp #, c-format msgid "The %s splits in two!" -msgstr "%s разделился надвое!" +msgstr "%s разделяется надвое!" #: src/mondeath.cpp #, c-format msgid "Two worms crawl out of the %s's corpse." -msgstr "Два червя вылезают из трупа %s." +msgstr "Два червя вылезают из трупа (%s)." #: src/mondeath.cpp #, c-format @@ -271687,22 +275849,22 @@ msgstr "%s исчезает." #: src/mondeath.cpp #, c-format msgid "You feel guilty for killing %s." -msgstr "Вы чувствуете себя виноватым за убийство %s." +msgstr "Вы чувствуете себя виноватым из-за убийства (%s)." #: src/mondeath.cpp #, c-format msgid "You feel ashamed for killing %s." -msgstr "Вам стыдно за убийство %s." +msgstr "Вам стыдно за убийство (%s)." #: src/mondeath.cpp #, c-format msgid "You regret killing %s." -msgstr "Вы жалеете об убийстве %s." +msgstr "Вы жалеете об убийстве (%s)." #: src/mondeath.cpp #, c-format msgid "You feel remorse for killing %s." -msgstr "Вы чувствуете угрызения совести из-за убийства %s." +msgstr "Вы чувствуете угрызения совести из-за убийства (%s)." #. ~ Message after killing a lot of monsters which would normally affect the #. morale negatively. %s is the monster name, it will be pluralized with a @@ -271712,7 +275874,8 @@ msgstr "Вы чувствуете угрызения совести из-за у msgid "" "After killing so many bloody %s you no longer care about their deaths " "anymore." -msgstr "После убийства множества %s, вас больше не беспокоит их смерть." +msgstr "" +"После убийства целой чертовой армии %s, вас больше не беспокоит их смерть." #: src/mondeath.cpp msgid "Culling the weak is distasteful, but necessary." @@ -271782,7 +275945,7 @@ msgstr "%s уничтожен! ИГРА ОКОНЧЕНА!" #, c-format msgid "The %s's interior compartment sizzles with destructive energy." msgstr "" -"Из внутреннего отделения %s доносится шипение, вызываемое разрушительной " +"Из внутреннего отделения (%s) доносится шипение, вызываемое разрушительной " "энергией." #: src/mondeath.cpp @@ -271802,17 +275965,18 @@ msgstr "Люблю запах горящего зэда по утрам." #: src/mondefense.cpp #, c-format msgid "Striking the %1$s shocks %2$s!" -msgstr "Атаковав %1$s, %2$s получает электрический разряд!" +msgstr "Атаковав противника (%1$s), %2$s получает электрический разряд!" #: src/mondefense.cpp #, c-format msgid "Acid covering %s burns your hand!" -msgstr "Покрывающая %s кислота обжигает вашу кожу." +msgstr "Покрывающая существо (%s) кислота обжигает вашу кожу." #: src/mondefense.cpp #, c-format msgid "Acid sprays out of %s as it is hit!" -msgstr "Брызги кислоты разлетаются по округе при попадании по существу (%s)!" +msgstr "" +"Брызги кислоты разлетаются во все строны при попадании по существу (%s)!" #: src/mondefense.cpp msgid "Detected shots from unseen attacker, return fire mode engaged." @@ -271843,12 +276007,12 @@ msgstr "Вытащить все из сумки" #: src/monexamine.cpp #, c-format msgid "Attach bag to %s" -msgstr "Закрепить сумку на %s" +msgstr "Закрепить сумку: %s" #: src/monexamine.cpp #, c-format msgid "Remove vehicle harness from %s" -msgstr "Снять упряжь с %s" +msgstr "Снять упряжь: %s" #: src/monexamine.cpp #, c-format @@ -271863,7 +276027,7 @@ msgstr "Одеть броню (%s)" #: src/monexamine.cpp #, c-format msgid "Play with %s" -msgstr "Поиграть с %s" +msgstr "Поиграть с: %s" #: src/monexamine.cpp msgid "Untie" @@ -271876,7 +276040,7 @@ msgstr "Привязать" #: src/monexamine.cpp #, c-format msgid "You need any type of rope to tie %s in place" -msgstr "Чтобы привязать %s, нужна любая верёвка." +msgstr "Чтобы привязать существо (%s), нужна любая верёвка." #: src/monexamine.cpp msgid "Tear out pheromone ball" @@ -271885,7 +276049,7 @@ msgstr "Вырвать железу с феромоном" #: src/monexamine.cpp #, c-format msgid "Milk %s" -msgstr "Доить %s" +msgstr "Доить: %s" #: src/monexamine.cpp msgid "This animal would freeze if you shear it during winter." @@ -271898,7 +276062,7 @@ msgstr "Это животное еще не готово к стрижке." #: src/monexamine.cpp #, c-format msgid "Shear %s." -msgstr "Постричь %s." +msgstr "Постричь: %s." #: src/monexamine.cpp msgid "You cannot shear this animal without shears." @@ -271917,27 +276081,27 @@ msgstr "%s, снять сбрую" #: src/monexamine.cpp #, c-format msgid "You don't know how to saddle %s" -msgstr "Вы не знаете, как оседлать %s" +msgstr "Вы не знаете, как оседлать это существо (%s)" #: src/monexamine.cpp #, c-format msgid "Manage your friendship with %s" -msgstr "Установить дружбу с %s" +msgstr "Установить дружбу: %s" #: src/monexamine.cpp #, c-format msgid "Mount %s" -msgstr "Сесть верхом на %s" +msgstr "Сесть верхом: %s" #: src/monexamine.cpp #, c-format msgid "%s cannot be mounted" -msgstr "На %s нельзя ездить " +msgstr "На существе (%s) нельзя ездить верхом" #: src/monexamine.cpp #, c-format msgid "%s is too small to carry your weight" -msgstr "%s слишком маленький, чтобы выдержать ваш вес" +msgstr "%s: слишком маленькое создание, чтобы выдержать ваш вес" #: src/monexamine.cpp msgid "You have no knowledge of riding at all" @@ -271955,7 +276119,7 @@ msgstr "Вы недостаточно умелы, чтобы ездить без #: src/monexamine.cpp #, c-format msgid "%s battery level is %d%%" -msgstr "Заряд батарей у %s на уровне%d%%" +msgstr "Заряд батарей (%s) на уровне%d%%" #: src/monexamine.cpp msgid "Climb into the mech and take control" @@ -271980,12 +276144,12 @@ msgstr "Вставить новую батарею" #: src/monexamine.cpp #, c-format msgid "You need a %s to power this mech" -msgstr "Вам нужно %s, чтобы запустить этот мех" +msgstr "Чтобы запустить этот мех, вам нужно: %s " #: src/monexamine.cpp #, c-format msgid "Spend a few minutes to play with your %s?" -msgstr "Поиграть немного с %s?" +msgstr "Поиграть немного с питомцем (%s)?" #: src/monexamine.cpp msgid "Really kill the zombie slave?" @@ -271994,7 +276158,7 @@ msgstr "Точно убить зомби-раба?" #: src/monexamine.cpp #, c-format msgid "You start shearing the %s." -msgstr "Вы начинаете стричь %s." +msgstr "Вы начинаете стричь существо (%s)." #: src/monexamine.cpp msgid "Pet armor" @@ -272007,7 +276171,7 @@ msgstr "Сбруя" #: src/monexamine.cpp #, c-format msgid "Select an battery to insert into your %s." -msgstr "Выберите, какую батарею вставить в %s." +msgstr "Выберите, какую батарею вставить сюда: %s." #: src/monexamine.cpp msgid "Swipe your ID card into the mech's security port?" @@ -272028,7 +276192,7 @@ msgid "" "Welcome to the %s Friendship Interface. What would you like to do?\n" "Your current friendship will last: %s" msgstr "" -"Добро пожаловать в Интерфейс Дружбы %s. Что вы хотите сделать?\n" +"Добро пожаловать в Интерфейс Дружбы: %s. Что вы хотите сделать?\n" "Ваша текущая дружба продлится: %s" #: src/monexamine.cpp @@ -272056,7 +276220,7 @@ msgid "" " This %s will follow you for %s." msgstr "" "Ваша дружба растёт!\n" -"Этот %s будет следовать за вами в течение %s." +"%s будет следовать за вами в течение %s." #: src/monexamine.cpp #, c-format @@ -272066,12 +276230,12 @@ msgstr "Вы и %s меняетесь местами." #: src/monexamine.cpp #, c-format msgid "You pushed the %s." -msgstr "Вы толкаете %s." +msgstr "Вы толкаете: %s." #: src/monexamine.cpp #, c-format msgid "You pushed the %s, but it resisted." -msgstr "Вы толкаете %s, но он сопротивляется." +msgstr "Вы толкаете, но %sсопротивляется." #: src/monexamine.cpp msgid "Enter new pet name:" @@ -272084,27 +276248,27 @@ msgstr "Вещи сумки" #: src/monexamine.cpp #, c-format msgid "You mount the %1$s on your %2$s." -msgstr "Вы поставили %1$s на %2$s." +msgstr "Вы прикрепили предмет (%1$s) на существо (%2$s)." #: src/monexamine.cpp #, c-format msgid "You remove the %1$s from %2$s." -msgstr "Вы снимаете %1$s с %2$s." +msgstr "Вы снимаете предмет (%1$s) с существа (%2$s)." #: src/monexamine.cpp #, c-format msgid "Your %1$s doesn't have a bag!" -msgstr "Ваш %1$s не имеет прикрепленной сумки!" +msgstr "Ваш питомец (%1$s) не имеет прикрепленной сумки!" #: src/monexamine.cpp #, c-format msgid "You dump the contents of the %s's bag on the ground." -msgstr "Вы вываливаете содержимое мешка %s на землю." +msgstr "Вы вываливаете содержимое седельной сумки (%s) на землю." #: src/monexamine.cpp #, c-format msgid "There is no container on your %s to put things in!" -msgstr "Нет контейнера на %s, чтобы убрать!" +msgstr "На существе (%s) нет контейнера, куда можно складывать вещи!" #: src/monexamine.cpp #, c-format @@ -272114,35 +276278,35 @@ msgstr "%1$s слишком много весит, %2$s не сможет его #: src/monexamine.cpp #, c-format msgid "The %1$s is too big to fit in the %2$s." -msgstr "%1$s больше, чем может поместиться в %2$s." +msgstr "%1$s больше, чем можно поместить сюда (%2$s)." #: src/monexamine.cpp #, c-format msgctxt "pet armor" msgid "Your %1$s is too heavy for your %2$s." -msgstr "Эта броня (%1$s) слишком тяжела для %2$s." +msgstr "Эта броня (%1$s) слишком тяжела для существа (%2$s)." #: src/monexamine.cpp #, c-format msgctxt "pet armor" msgid "You put the %1$s on your %2$s." -msgstr "Вы кладете %1$s на ваш %2$s." +msgstr "Вы надеваете броню (%1$s) на существо (%2$s)." #: src/monexamine.cpp #, c-format msgid "You unhitch %s from the vehicle." -msgstr "Вы отцепляете %s от транспорта." +msgstr "Вы отцепляете тягловое животное (%s) от транспорта." #: src/monexamine.cpp #, c-format msgctxt "pet armor" msgid "You remove the %1$s from %2$s." -msgstr "Вы снимаете %1$s с %2$s." +msgstr "Вы снимаете броню (%1$s) с существа (%2$s)." #: src/monexamine.cpp #, c-format msgid "Your %1$s isn't wearing armor!" -msgstr "На %1$s нет брони!" +msgstr "На существе (%1$s) нет брони!" #: src/monexamine.cpp msgid "You tear out the pheromone ball from the zombie slave." @@ -272151,28 +276315,29 @@ msgstr "Вы вырезаете шар с феромонами из зомби- #: src/monexamine.cpp #, c-format msgid "Select an item to tie your %s with." -msgstr "Выберите предмет, которым вы хотите привязать %s." +msgstr "Выберите предмет, которым вы хотите привязать существо (%s)." #: src/monexamine.cpp #, c-format msgid "You milk the %s." -msgstr "Вы доите %s." +msgstr "Вы доите: %s." #: src/monexamine.cpp #, c-format msgid "The %s has no more milk." -msgstr "У %s не осталось молока." +msgstr "У существа (%s) не осталось молока." #: src/monmove.cpp #, c-format msgid "" "The %s flows around the objects on the floor and they are quickly dissolved!" -msgstr "%s растекается вокруг объектов на полу и они быстро растворяются!" +msgstr "%s растекается вокруг объектов на полу, и они быстро растворяются!" #: src/monmove.cpp #, c-format msgid "The %1$s slowly but firmly puts %2$s down onto the autodoc couch." -msgstr "%1$s медленно, но настойчиво укладывает %2$s на кушетку автодока." +msgstr "" +"%1$s медленно, но настойчиво укладывает пациента (%2$s) на кушетку автодока." #: src/monmove.cpp #, c-format @@ -272190,17 +276355,17 @@ msgstr "" #: src/monmove.cpp #, c-format msgid "The %1$s flies over the %2$s." -msgstr "%1$s перелетает через %2$s." +msgstr "%1$s перелетает через препятствие (%2$s)." #: src/monmove.cpp #, c-format msgid "The %1$s climbs over the %2$s." -msgstr "%1$s перелезает через %2$s." +msgstr "%1$s перелезает через препятствие (%2$s).." #: src/monmove.cpp #, c-format msgid "A %1$s flies over the %2$s!" -msgstr "%1$s перелетает через %2$s!" +msgstr "%1$s перелетает через препятствие (%2$s).!" #. ~ Message when a monster emerges from water #. ~ %1$s: monster name, %2$s: leaps/emerges, %3$s: terrain name @@ -272208,7 +276373,7 @@ msgstr "%1$s перелетает через %2$s!" #, c-format msgctxt "monster movement" msgid "A %1$s %2$s from the %3$s!" -msgstr "%1$s %2$s из %3$s!" +msgstr "%1$s %2$s из: %3$s!" #: src/monmove.cpp msgid "emerges" @@ -272224,7 +276389,7 @@ msgstr "выскакивает" #, c-format msgctxt "monster movement" msgid "A %1$s %2$s into the %3$s!" -msgstr "%1$s %2$s в %3$s!" +msgstr "%1$s %2$s в: %3$s!" #: src/monmove.cpp msgid "dives" @@ -272237,22 +276402,22 @@ msgstr "погружается" #: src/monmove.cpp #, c-format msgid "The %1$s tramples %2$s" -msgstr "%1$s попирает %2$s" +msgstr "%1$s топчет другого (%2$s)" #: src/monmove.cpp #, c-format msgid "The %1$s bounces off a %2$s!" -msgstr "%1$s отскакивает от %2$s!" +msgstr "%1$s отскакивает от другого (%2$s)!" #: src/monmove.cpp #, c-format msgid "The %1$s bounces off %2$s!" -msgstr "%1$s отскакивает от %2$s!" +msgstr "%1$s отскакивает от другого (%2$s)!" #: src/monmove.cpp #, c-format msgid "The %1$s bounces off a %2$s." -msgstr "%1$s отскакивает от %2$s." +msgstr "%1$s отскакивает от препятствия (%2$s)." #. ~ %1$s - monster name, %2$s - vehicle name #: src/monmove.cpp @@ -272678,7 +276843,7 @@ msgstr "%s взрывается, словно огненный шар!" #: src/monster.cpp #, c-format msgid "Lightning from %1$s engulfs the %2$s!" -msgstr "Электрическое поле от %1$s накрывает %2$s!" +msgstr "Электрическое поле от %1$s накрывает окружение (%2$s)!" #: src/monster.cpp msgid "BOOOOOOOM!!!" @@ -272691,7 +276856,7 @@ msgstr "вррррРРРРУУМММММММ!" #: src/monster.cpp #, c-format msgid "Lightning strikes the %s!" -msgstr "Молния попадает в %s!" +msgstr "Молния попадает куда-то (%s)!" #: src/monster.cpp msgid "Your vision goes white!" @@ -272742,7 +276907,7 @@ msgstr "%s ужасающее сгорает под солнечным свет #: src/monster.cpp #, c-format msgid "The spores transform %1$s into a %2$s!" -msgstr "Споры превращают %1$s в %2$s!" +msgstr "Споры превращают существо (%1$s) во что-то ещё (%2$s)!" #: src/monstergenerator.cpp src/mtype.cpp msgid "footsteps." @@ -272797,23 +276962,15 @@ msgstr "Фокус смещается в сторону:" msgid "You feel bugs crawl over your skin." msgstr "Вы чувствуете, как по вам ползают насекомые." -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "человек" -msgstr[1] "человека" -msgstr[2] "человек" -msgstr[3] "человек" - #: src/mutation.cpp #, c-format msgid "Your %s is destroyed!" -msgstr "Ваш %s уничтожен!" +msgstr "%s уничтожается!" #: src/mutation.cpp #, c-format msgid "'s %s is destroyed!" -msgstr "У %s уничтожено!" +msgstr "%s () уничтожается!" #: src/mutation.cpp #, c-format @@ -272823,12 +276980,13 @@ msgstr "Ваше снаряжение (%s) спадает!" #: src/mutation.cpp #, c-format msgid "'s %s is pushed off!" -msgstr "Снаряжение (%s) у спадает!" +msgstr "Снаряжение (%s) у NPC () спадает!" #: src/mutation.cpp #, c-format msgid "You feel like using your %s would kill you!" -msgstr "Вам кажется, что если вы будете использовать %s, то это убьёт вас!" +msgstr "" +"Вам кажется, что если вы будете использовать это (%s), то оно убьёт вас!" #: src/mutation.cpp msgid "You start spinning web with your spinnerets!" @@ -272899,7 +277057,7 @@ msgstr "Ваша мутация %1$s превращается в %2$s!" #: src/mutation.cpp #, c-format msgid "'s %1$s mutation turns into %2$s!" -msgstr "мутация %1$s у превращается в %2$s!" +msgstr "мутация %1$s () превращается в %2$s!" #: src/mutation.cpp #, c-format @@ -272909,7 +277067,7 @@ msgstr "Ваша врождённая черта %1$s превращается #: src/mutation.cpp #, c-format msgid "'s innate %1$s trait turns into %2$s!" -msgstr "Врождённая черта %1$s у превращается в %2$s!" +msgstr "Врождённая черта %1$s () превращается в %2$s!" #: src/mutation.cpp #, c-format @@ -272986,7 +277144,7 @@ msgid "" "It was probably that marloss -- how did you know to call it \"marloss\" " "anyway?" msgstr "" -"Скорее всего, это было марло — а вообще, откуда ты узнал, что его нужно " +"Скорее всего, это было марло — а вообще, откуда тебе знать, что это нужно " "называть «марло»?" #: src/mutation.cpp @@ -273503,7 +277661,7 @@ msgstr "Выбранный вами сценарий не позволяет в #: src/newcharacter.cpp #, c-format msgid "Your profession of %s prevents you from taking this trait." -msgstr "Ваша профессия %s не позволяет взять эту черту." +msgstr "Ваша профессия (%s) не позволяет взять эту черту." #: src/newcharacter.cpp #, c-format @@ -273652,7 +277810,7 @@ msgstr "Заклинания:" #: src/newcharacter.cpp #, c-format msgid "%s level %d" -msgstr "%s уровень %d" +msgstr "%s уровня %d" #: src/newcharacter.cpp #, c-format @@ -273696,20 +277854,20 @@ msgstr "Поиск по профессии." #, c-format msgid "%d level" msgid_plural "%d levels" -msgstr[0] "%d уровень" +msgstr[0] "%d уровня" msgstr[1] "%d уровня" -msgstr[2] "%d уровней" -msgstr[3] "%d уровни" +msgstr[2] "%d уровня" +msgstr[3] "%d уровня" #. ~ Second string is e.g. "1 level" or "2 levels" #: src/newcharacter.cpp #, c-format msgid "Upgrading %s by %s costs %d point" msgid_plural "Upgrading %s by %s costs %d points" -msgstr[0] "Улучшение %s на %s стоит %d очко" -msgstr[1] "Улучшение %s на %s стоит %d очка" -msgstr[2] "Улучшение %s на %s стоит %d очков" -msgstr[3] "Улучшение %s на %s стоит %d очков" +msgstr[0] "Улучшение навыка «%s» на %s стоит %d очко" +msgstr[1] "Улучшение навыка «%s» на %s стоит %d очка" +msgstr[2] "Улучшение навыка «%s» на %s стоит %d очков" +msgstr[3] "Улучшение навыка «%s» на %s стоит %d очков" #. ~ 1s - scenario name, 2d - current character points. #: src/newcharacter.cpp @@ -273774,19 +277932,19 @@ msgstr "Флаги сценария:" #: src/newcharacter.cpp msgid "Spring start" -msgstr "Пришла весна" +msgstr "Начало весны" #: src/newcharacter.cpp msgid "Summer start" -msgstr "Лето настало" +msgstr "Начало лета" #: src/newcharacter.cpp msgid "Autumn start" -msgstr "Пришла осень" +msgstr "Начало осени" #: src/newcharacter.cpp msgid "Winter start" -msgstr "Зима близко" +msgstr "Начало зимы" #: src/newcharacter.cpp msgid "Next summer start" @@ -273836,18 +277994,6 @@ msgstr "Возраст:" msgid "Blood type:" msgstr "Группа крови:" -#: src/newcharacter.cpp -#, c-format -msgid "" -"* Random location * (%d variants)" -msgstr "" -"*Случайная локация* (%d вариантов)" - -#: src/newcharacter.cpp -#, c-format -msgid "%s (%d variants)" -msgstr "%s(%d вариантов)" - #: src/newcharacter.cpp msgid "Name:" msgstr "Имя:" @@ -273860,6 +278006,30 @@ msgstr "Пол:" msgid "Select a starting location." msgstr "Выберите начальную локацию" +#: src/newcharacter.cpp +#, c-format +msgid "" +"* Random location * (%d variant)" +msgid_plural "" +"* Random location * (%d variants)" +msgstr[0] "" +"*Случайная локация* (%d вариант)" +msgstr[1] "" +"*Случайная локация* (%d варианта)" +msgstr[2] "" +"*Случайная локация* (%d вариантов)" +msgstr[3] "" +"*Случайная локация* (%d вариант)" + +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "%s(%d вариант)" +msgstr[1] "%s(%d варианта)" +msgstr[2] "%s(%d вариантов)" +msgstr[3] "%s(%d вариант)" + #: src/newcharacter.cpp msgid "Stats:" msgstr "Характеристики:" @@ -273943,6 +278113,15 @@ msgstr "Нажмите %s для выбора лок msgid "Starting location:" msgstr "Начальная локация:" +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "%s(%d вариант)" +msgstr[1] "%s(%d варианта)" +msgstr[2] "%s(%d вариантов)" +msgstr[3] "%s(%d вариант)" + #: src/newcharacter.cpp msgid "Starting Vehicle: " msgstr "Стартовый транспорт:" @@ -274048,7 +278227,7 @@ msgstr "%s — плохое чтиво." #: src/npc.cpp msgid "I'm not smart enough to read this book." -msgstr "Я недостаточно умён для этой книги." +msgstr "Я не хватает ума для этой книги." #: src/npc.cpp msgid "I won't learn anything from this book." @@ -274077,43 +278256,43 @@ msgstr "Спасибо, я буду это носить." #: src/npc.cpp msgid "I tried but couldn't wear it." -msgstr "У меня не получилось ходить в этом." +msgstr "У меня не получилось надеть это." #: src/npc.cpp #, c-format msgid " wears the %s." -msgstr " носит %s." +msgstr " носит: %s." #. ~ %1$s: weapon name, %2$s: holster name #: src/npc.cpp #, c-format msgid " puts away the %1$s in the %2$s." -msgstr " убирает %1$s в %2$s." +msgstr " убирает оружие (%1$s) в кобуру (%2$s)." #: src/npc.cpp #, c-format msgid " puts away the %s." -msgstr " откладывает в сторону %s." +msgstr " откладывает в сторону оружие (%s)." #: src/npc.cpp #, c-format msgid " drops the %s." -msgstr " выкладывает на пол %s." +msgstr " выкладывает на пол оружие (%s)." #: src/npc.cpp #, c-format msgid " wields a %s." -msgstr " берёт в руки %s." +msgstr " берёт в руки оружие (%s)." #: src/npc.cpp #, c-format msgid "%s is tired of your incompetent leadership and abuse!" msgstr "" -"%s по горло сыт вашим некомпетентным руководством и плохим обращением!" +"%s по горло сыт(а) вашим некомпетентным руководством и плохим обращением!" #: src/npc.cpp msgid " Adios, motherfucker!" -msgstr " Пошёл на хуй, мудак!" +msgstr " Иди на хуй, мудила!" #: src/npc.cpp #, c-format @@ -274285,7 +278464,7 @@ msgstr "Ожидает вас" #: src/npc.cpp msgid "Mugging you" -msgstr "Вас ограбили" +msgstr "Грабит вас" #: src/npc.cpp msgid "Waiting for you to leave" @@ -274309,7 +278488,7 @@ msgstr "Выполняет задание" #: src/npc.cpp msgid "Trying to recover stolen goods" -msgstr "Попытка вернуть украденный товар" +msgstr "Пытается вернуть украденный товар" #: src/npc.cpp msgid "NPC Legacy Attitude" @@ -274333,7 +278512,7 @@ msgstr "Следует за вами." #: src/npc.cpp msgid "Is guiding you." -msgstr "Направляет тебя." +msgstr "Направляет вас." #: src/npc.cpp msgid "Will try to kill you or flee from you if you reveal yourself." @@ -274408,7 +278587,7 @@ msgstr "%s ложится спать." #: src/npcmove.cpp #, c-format msgid "Hold still %s, I'm coming to help you." -msgstr "Держись %s, иду на помощь." +msgstr "Держись, %s, иду на помощь." #: src/npcmove.cpp msgid "Don't move a muscle…" @@ -274417,22 +278596,22 @@ msgstr "Не двигай, , ни одним мускулом…" #: src/npcmove.cpp #, c-format msgid "%1$s tries to climb the %2$s but slips." -msgstr "%1$s пытается забраться на %2$s, но соскальзывает." +msgstr "%1$s пытается забраться на препятствие (%2$s), но соскальзывает." #: src/npcmove.cpp #, c-format msgid "%1$s climbs over the %2$s." -msgstr "%1$s перелезает через %2$s." +msgstr "%1$s перелезает через препятствие (%2$s)." #: src/npcmove.cpp #, c-format msgid "Hold on, I want to pick up that %s." -msgstr "Погоди, я хочу подобрать %s." +msgstr "Погоди, я хочу подобрать, вон там - %s." #: src/npcmove.cpp #, c-format msgid "%1$s picks up a %2$s and a %3$s." -msgstr "%1$s подбирает %2$s и %3$s." +msgstr "%1$s подбирает: %2$s и %3$s." #: src/npcmove.cpp #, c-format @@ -274455,37 +278634,37 @@ msgstr[3] "%s выбросил %d предмет." #: src/npcmove.cpp #, c-format msgid "%1$s drops a %2$s." -msgstr "%1$s бросает %2$s." +msgstr "%1$s бросает: %2$s." #: src/npcmove.cpp #, c-format msgid "Hold on, I want to pulp that %s." -msgstr "Погоди, я хочу разделать %s." +msgstr "Погоди, я хочу разделать, вон там - %s." #: src/npcmove.cpp #, c-format msgid "%1$s throws a %2$s." -msgstr "%1$s бросает %2$s." +msgstr "%1$s бросает: %2$s." #: src/npcmove.cpp #, c-format msgid "%1$s heals %2$s." -msgstr "%1$s лечит %2$s." +msgstr "%1$s лечит: %2$s." #: src/npcmove.cpp #, c-format msgid "%s applies a %s" -msgstr "%s применяет %s" +msgstr "%s применяет: %s" #: src/npcmove.cpp #, c-format msgid "%1$s takes some %2$s." -msgstr "%1$s принимает немного %2$s." +msgstr "%1$s принимает: %2$s." #: src/npcmove.cpp #, c-format msgid "%1$s takes %2$s's money!" -msgstr "%1$s забирает деньги у %2$s!" +msgstr "%1$s забирает деньги у: %2$s!" #: src/npcmove.cpp #, c-format @@ -274495,18 +278674,18 @@ msgstr "%s забирает ваши деньги!" #: src/npcmove.cpp #, c-format msgid "%1$s takes %2$s's %3$s." -msgstr "%1$s берёт %3$s (принадлежит %2$s)." +msgstr "%1$s берёт: %3$s (владелец - %2$s)." #: src/npcmove.cpp #, c-format msgid "%1$s takes your %2$s." -msgstr "%1$s забирает ваш %2$s." +msgstr "%1$s забирает у вас: %2$s." #: src/npcmove.cpp #, c-format msgid "" "From your two-way radio you hear %s reporting in, 'I've arrived, boss!'" -msgstr "Из рации слышно голос %s: «Я на месте, босс!»" +msgstr "Из рации слышно голос (%s): «Я на месте, босс!»" #: src/npcmove.cpp #, c-format @@ -274521,12 +278700,12 @@ msgstr "%s %s%s" #: src/npcmove.cpp #, c-format msgid "My %s wound is infected…" -msgstr "Рана у меня на %s заражена…" +msgstr "У меня рана… %s плохо выглядит…" #: src/npcmove.cpp #, c-format msgid "The bite wound on my %s looks bad." -msgstr "Рана от укуса у меня на %s выглядит плохо." +msgstr "У меня тут укус… %s выглядит плохо." #: src/npcmove.cpp msgid "" @@ -274552,7 +278731,7 @@ msgstr "%s: идёт кровь!" #: src/npcmove.cpp #, c-format msgid "%1$s reloads their %2$s." -msgstr "%1$s перезаряжает %2$s." +msgstr "%1$s перезаряжает: %2$s." #: src/npctalk.cpp msgid "INTIMIDATE" @@ -274568,7 +278747,7 @@ msgstr "УБЕЖДЕНИЕ" #: src/npctalk.cpp msgid "Everyone" -msgstr "Каждый" +msgstr "Все" #: src/npctalk.cpp #, c-format @@ -274650,7 +278829,7 @@ msgstr "Что вы хотите сделать?" #: src/npctalk.cpp #, c-format msgid "Talk to %s" -msgstr "Поговорить с %s" +msgstr "Поговорить с: %s" #: src/npctalk.cpp msgid "Talk to…" @@ -274690,7 +278869,7 @@ msgstr "Свистните тягловым животным перестать #: src/npctalk.cpp #, c-format msgid "Tell %s to follow" -msgstr "Приказать %s следовать за вами" +msgstr "Приказать (%s) следовать за вами" #: src/npctalk.cpp msgid "Tell someone to follow…" @@ -274699,7 +278878,7 @@ msgstr "Приказать кому-нибудь следовать…" #: src/npctalk.cpp #, c-format msgid "Tell %s to guard" -msgstr "Приказать %s охранять позицию" +msgstr "Приказать (%s) охранять позицию" #: src/npctalk.cpp msgid "Tell someone to guard…" @@ -274800,7 +278979,7 @@ msgstr "Вы кричите: %s" #: src/npctalk.cpp #, c-format msgid "%s yelling %s" -msgstr "%s кричит %s" +msgstr "%s кричит: %s" #: src/npctalk.cpp #, c-format @@ -274932,11 +279111,11 @@ msgstr "Вос %d — %d" #: src/npctalk.cpp msgid "Dead tired" -msgstr "Устал до смерти" +msgstr "Жуткая усталость" #: src/npctalk.cpp msgid "Not tired" -msgstr "Не устал" +msgstr "Нет усталости" #: src/npctalk.cpp msgid ". Will need sleep in " @@ -274956,7 +279135,7 @@ msgid "" "Thirsty" msgstr "" "\n" -"Хочет пить" +"Есть жажда" #: src/npctalk.cpp msgid "" @@ -274972,7 +279151,7 @@ msgid "" "Hungry" msgstr "" "\n" -"Хочет есть" +"Есть голод" #: src/npctalk.cpp msgid "YES, MASTER!" @@ -274985,7 +279164,7 @@ msgstr "У меня есть новости." #: src/npctalk.cpp #, c-format msgid "Yes, let's resume training %s" -msgstr "Да, давай продолжим тренировку %s" +msgstr "Да, давай продолжим тренировать %s" #: src/npctalk.cpp #, c-format @@ -275110,47 +279289,47 @@ msgstr "Вы не можете себе этого позволить!" #: src/npctalk.cpp #, c-format msgid "%1$s gives you a %2$s." -msgstr "%1$s даёт вам %2$s." +msgstr "%1$s даёт вам: %2$s." #. ~ %1%s is the NPC name, %2$d is a number of items, %3$s are items #: src/npctalk.cpp #, c-format msgid "%1$s gives you %2$d %3$s." -msgstr "%1$s даёт вам %2$d %3$s." +msgstr "%1$s даёт вам: %2$d %3$s." #. ~ %1$s is a translated item name #: src/npctalk.cpp #, c-format msgid "You don't have a %1$s!" -msgstr "У вас нет %1$s!" +msgstr "У вас нет этого (%1$s)!" #. ~ %1%s is the NPC name, %2$s is an item #: src/npctalk.cpp #, c-format msgid "You give %1$s a %2$s." -msgstr "Вы даёте %1$s %2$s." +msgstr "Вы даёте NPC (%1$s): %2$s." #. ~ %1%s is the NPC name, %2$d is a number of items, %3$s are items #: src/npctalk.cpp #, c-format msgid "You give %1$s %2$d %3$s." -msgstr "Вы даёте %1$s %2$d %3$s." +msgstr "Вы даёте NPC (%1$s): %2$d %3$s." #. ~ %1%s is the "You" or the NPC name, %2$s are a translated item name #: src/npctalk.cpp #, c-format msgid "%1$s doesn't have a %2$s!" -msgstr "У %1$s нет %2$s!" +msgstr "У персонажа (%1$s) нет этого (%2$s)!" #: src/npctalk.cpp #, c-format msgid "%1$s gives you %2$s." -msgstr "%1$s даёт вам %2$s." +msgstr "%1$s даёт вам: %2$s." #: src/npctalk.cpp #, c-format msgid "You learn how to craft %s." -msgstr "Вы учитесь, как делать %s." +msgstr "Вы учитесь, как создавать: %s." #: src/npctalk.cpp msgid "I don't trust you enough to eat THIS…" @@ -275167,7 +279346,7 @@ msgstr "Спасибо, то что надо." #: src/npctalk.cpp #, c-format msgid "I need a %s to consume that!" -msgstr "Мне нужен %s, чтобы употребить это!" +msgstr "Мне нужен инструмент - %s, чтобы употребить это!" #: src/npctalk.cpp msgid "Thanks, I feel better already." @@ -275175,7 +279354,7 @@ msgstr "Спасибо, мне уже становится лучше." #: src/npctalk.cpp msgid "Thanks, I used it." -msgstr "Спасибо, я использовал это." +msgstr "Спасибо, я использую это." #: src/npctalk.cpp msgid "Offer what?" @@ -275187,7 +279366,7 @@ msgstr "Вам нечего предложить." #: src/npctalk.cpp msgid "Changed your mind?" -msgstr "Передумал?" +msgstr "Передумали?" #: src/npctalk.cpp msgid "How?" @@ -275195,7 +279374,7 @@ msgstr "Как?" #: src/npctalk.cpp msgid "Are you insane!?" -msgstr "Ты, , псих?!" +msgstr "Ты, , совсем ку-ку?!" #: src/npctalk.cpp msgid "Thanks, I'll wield that now." @@ -275225,7 +279404,7 @@ msgstr "У меня нету места для хранения." #: src/npctalk.cpp #, c-format msgid "I can only store %s %s more." -msgstr "Я могу взять только %s %s ещё." +msgstr "Я могу взять ещё только %s %s." #: src/npctalk.cpp msgid "…or to store anything else for that matter." @@ -275261,12 +279440,12 @@ msgstr "Мое текущее местоположение" #: src/npctalk_funcs.cpp #, c-format msgid "That is not a valid destination for %s." -msgstr "Это не подходящее место для %s." +msgstr "Это неподходящее назначение для: %s." #: src/npctalk_funcs.cpp #, c-format msgid "%1$s is assigned to %2$s" -msgstr "%1$s приписан к %2$s" +msgstr "%1$s приписан: %2$s" #: src/npctalk_funcs.cpp #, c-format @@ -275281,7 +279460,7 @@ msgstr "%s игнорирует вас." #: src/npctalk_funcs.cpp #, c-format msgid "You start a fight with %s!" -msgstr "Вы начали драться с %s!" +msgstr "Вы начали драться с: %s!" #: src/npctalk_funcs.cpp msgid "You don't have any bionics installed…" @@ -275298,12 +279477,12 @@ msgstr "Вы решили подождать…" #: src/npctalk_funcs.cpp #, c-format msgid "%s has nothing to give!" -msgstr "У %s ничего нет!" +msgstr "%s ничего не может дать!" #: src/npctalk_funcs.cpp #, c-format msgid "%1$s gives you a %2$s" -msgstr "%1$s даёт вам %2$s" +msgstr "%1$s даёт вам: %2$s" #: src/npctalk_funcs.cpp msgid "Choose a new hairstyle" @@ -275324,22 +279503,22 @@ msgstr "У вас новая модная стрижка!" #: src/npctalk_funcs.cpp #, c-format msgid "%s gives you a decent haircut…" -msgstr "%s прилично вас постриг…" +msgstr "%s прилично вас стрижёт…" #: src/npctalk_funcs.cpp #, c-format msgid "%s gives you a decent shave…" -msgstr "%s прилично вас побрил…" +msgstr "%s прилично вас бреет…" #: src/npctalk_funcs.cpp #, c-format msgid "That was a pleasant conversation with %s…" -msgstr "Было приятно пообщаться с %s…" +msgstr "Было приятно пообщаться с: %s…" #: src/npctalk_funcs.cpp #, c-format msgid "That was a pleasant conversation with %s." -msgstr "Было приятно пообщаться с %s." +msgstr "Было приятно пообщаться с: %s." #: src/npctalk_funcs.cpp #, c-format @@ -275375,7 +279554,8 @@ msgstr "%s чувствует, что вы не представляете бо #, c-format msgid "Pause to stay still. Any movement may cause %s to attack." msgstr "" -"Ждите, чтобы стоять на месте. Любое движение может заставить %s атаковать." +"Ждите, чтобы стоять на месте. %s может быть спровоцирован(а) атаковать любым" +" движением." #: src/npctalk_funcs.cpp msgid "Pay:" @@ -275391,8 +279571,8 @@ msgid "" "Trading with %s.\n" "%s to switch lists, letters to pick items, %s to finalize, %s to quit, %s to get information on an item." msgstr "" -"Торговля с %s\n" -"%s — переключение писками и выбором по букве, %s — завершить выбор, %s — выход, %s — для получения информации о предмете." +"Торговля с: %s.\n" +"%s — переключение между списками и выбором по букве, %s — завершить выбор, %s — выход, %s — для получения информации о предмете." #: src/npctrade.cpp #, c-format @@ -275664,6 +279844,14 @@ msgstr "Разбивать" msgid "Pulp Adjacent" msgstr "Разбивать рядом" +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "Разбивать только зомби поблизости" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "Разбивать только зомби" + #: src/options.cpp msgid "Auto mining" msgstr "Авто-копание" @@ -275688,7 +279876,7 @@ msgid "" msgstr "" "Действие при включённом «Авто-собирательстве». Кусты: Обыскивать только " "кусты. — Деревья: Обыскивать только деревья. — Всё: Обыскивать кусты, " -"деревья и всё остальное, включая рогоз." +"деревья и всё остальное, включая цветы, рогоз и пр." #: src/options.cpp msgid "Bushes" @@ -275728,14 +279916,14 @@ msgid "" msgstr "" "Всегда: вас всегда предупреждают о переходе на опасные тайлы. Бегом: вы " "сможете перемещаться на опасные тайлы только бегом и об этом будет " -"предупреждение. Подкрадыванием: вы сможете перемещаться на опасные тайлы " -"только во время подкрадывания и получите об этом оповещение. Никогда: вы не " -"сможете перейти на опасные тайлы, если не бежите, и вас не будут " -"предупреждать или запрашивать." +"предупреждение. Подкрадываясь: вы сможете перемещаться на опасные тайлы " +"только подкрадываясь и получите об этом оповещение. Никогда: вы не сможете " +"перейти на опасные тайлы, если не бежите, и вас не будут предупреждать или " +"запрашивать." #: src/options.cpp msgid "Crouching" -msgstr "Подкрадыванием" +msgstr "Подкрадываясь" #: src/options.cpp msgid "Running" @@ -277117,7 +281305,7 @@ msgid "" "to very slow mapgen." msgstr "" "Число определяет, как далеко будут города друг от друга. Осторожно, " -"маленькие числа может очень сильно замедлить генерацию мира." +"маленькие числа могут очень сильно замедлить генерацию мира." #: src/options.cpp msgid "Spawn rate scaling factor" @@ -277700,7 +281888,7 @@ msgstr "" #: src/options.cpp msgid "Default gameplay shortcuts" -msgstr "По умолчанию сочетание клавиш" +msgstr "Горячие клавиши по умолчанию" #: src/options.cpp msgid "" @@ -278099,14 +282287,14 @@ msgid "" "[q]uality, [n]otes or " "[d]isassembled components." msgstr "" -"Поиск [c] Категория, [m] - " +"Поиск [c] - категория, [m] - " "материал, [q] - качество, [n] - " -"заметки, [d] компоненты после разборки." +"заметки, [d] - компоненты после разборки." #. ~ An example of how to filter items based on category or material. #: src/output.cpp msgid "Examples: c:food,m:iron,q:hammering,n:toolshelf,d:pipe" -msgstr "Например: c:food,m:iron,q:hammering,n:toolshelf,d:pipe" +msgstr "Например: c:еда,m:железо,q:забивание,n:инструменты,d:труба" #: src/output.cpp msgid "unknown" @@ -278151,7 +282339,7 @@ msgstr "$%.2f" #: src/overmap.cpp src/skill.cpp msgid "invalid" -msgstr "неправильная" +msgstr "неверное" #: src/overmap.cpp msgid "" @@ -278173,7 +282361,8 @@ msgstr "" #: src/overmap.cpp msgid "Head West. All survivors, head West. Help is waiting." -msgstr "На запад. Все уцелевшие, двигайтесь на запад. Там вам помогут." +msgstr "" +"Двигайтесь на запад. Все уцелевшие, двигайтесь на запад. Там вам помогут." #: src/overmap.cpp #, c-format @@ -278260,6 +282449,16 @@ msgstr "Зона:" msgid "# Unexplored" msgstr "# Неисследованно" +#: src/overmap_ui.cpp +#, c-format +msgid "oter: %s" +msgstr "мест.: %s" + +#: src/overmap_ui.cpp +#, c-format +msgid "oter_type: %s" +msgstr "тип_мест: %s" + #: src/overmap_ui.cpp msgid "Distance to active mission:" msgstr "Расстояние до активного задания:" @@ -278386,7 +282585,7 @@ msgstr "Вращение: %s %s" #: src/overmap_ui.cpp msgid "(fixed)" -msgstr "(исправленная)" +msgstr "(фиксирован.)" #: src/overmap_ui.cpp msgid "Areas highlighted in red" @@ -278591,6 +282790,10 @@ msgstr "Обжигающе!" msgid "Very hot!" msgstr "Очень жарко!" +#: src/panels.cpp +msgid "Comfortable" +msgstr "Комфортно" + #: src/panels.cpp msgid "Very cold!" msgstr "Очень холодно!" @@ -278601,7 +282804,7 @@ msgstr "Замерзание!" #: src/panels.cpp msgid "SAFE" -msgstr "SAFE" +msgstr "БЕЗОП." #: src/panels.cpp msgid "STM" @@ -278946,22 +283149,22 @@ msgstr "Выйти" #: src/pickup.cpp #, c-format msgid "Dispose of %s and wield %s" -msgstr "Избавиться от %s и взять в руки %s" +msgstr "Избавиться от предмета (%s) и взять в руки: %s" #: src/pickup.cpp #, c-format msgid "Wield %s" -msgstr "Взять в руки %s" +msgstr "Взять в руки: %s" #: src/pickup.cpp #, c-format msgid "Wear %s" -msgstr "Надеть %s" +msgstr "Надеть: %s" #: src/pickup.cpp #, c-format msgid "Spill contents of %s, then pick up %s" -msgstr "Вылить содержимое (%s), затем поднять %s" +msgstr "Вылить содержимое (%s), затем поднять: %s" #: src/pickup.cpp msgid "" @@ -278978,17 +283181,17 @@ msgstr "Если подберёте этот предмет, то соверши #: src/pickup.cpp #, c-format msgid "The %s is too heavy!" -msgstr "%s слишком тяжёлый!" +msgstr "%s - слишком тяжело!" #: src/pickup.cpp #, c-format msgid "Can't stash %s while it's not empty" -msgstr "Вы не можете положить %s, пока тот не пуст." +msgstr "Вы не можете убрать это (%s) в инвентарь, пока в нём что-то есть." #: src/pickup.cpp #, c-format msgid "Not enough capacity to stash %s" -msgstr "Недостаточно места, чтобы вместить %s" +msgstr "Недостаточно места, чтобы вместить: %s" #: src/pickup.cpp msgid "You can't pick up a liquid!" @@ -279078,12 +283281,16 @@ msgstr "Вы подняли: %d %s" #: src/pickup.cpp #, c-format msgid "To avoid spilling its contents, you set your %1$s on the %2$s." -msgstr "Вы ставите %1$s на %2$s, чтобы избежать разлива содержимого." +msgstr "" +"Вы ставите предмет (%1$s) на повехность (%2$s), чтобы избежать разлива " +"содержимого." #: src/pickup.cpp #, c-format msgid "To avoid spilling its contents, sets their %1$s on the %2$s." -msgstr " ставит %1$s на %2$s, чтобы избежать разлива содержимого." +msgstr "" +" ставит предмет (%1$s) на поверхность (%2$s), чтобы избежать " +"разлива содержимого." #: src/player.cpp #, c-format @@ -279109,29 +283316,31 @@ msgstr " пытается потушить огонь!" #: src/player.cpp #, c-format msgid "Your ground sonar detected a %1$s to the %2$s!" -msgstr "Ваш сонар заметил %1$s к %2$sу от вас!" +msgstr "Ваш сонар заметил: %1$s, к %2$sу от вас!" #: src/player.cpp src/vehicle_move.cpp #, c-format msgid "You've spotted a %1$s to the %2$s!" -msgstr "Вы заметили %1$s к %2$sу от вас!" +msgstr "Вы заметили: %1$s к %2$sу от вас!" #: src/player.cpp #, c-format msgid "Your offensive defense system shocks %s in mid-attack!" msgstr "" -"Ваша наступательная система обороны бьёт %s электрическим разрядом во время " -"атаки!" +"Ваша наступательная система обороны бьёт противника (%s) электрическим " +"разрядом во время атаки!" #: src/player.cpp #, c-format msgid "%1$s's offensive defense system shocks %2$s in mid-attack!" -msgstr "Наступательная система обороны (%1$s) бьёт %2$s током во время атаки!" +msgstr "" +"Наступательная система обороны (%1$s) бьёт противника (%2$s) током во время " +"атаки!" #: src/player.cpp #, c-format msgid "%1$s's %2$s puncture %3$s in mid-attack!" -msgstr "%2$s (%1$s) прокалывает %3$s во время атаки!" +msgstr "%2$s (%1$s) прокалывают противника (%3$s) во время атаки!" #: src/player.cpp msgid "quills" @@ -279144,12 +283353,12 @@ msgstr "иголки" #: src/player.cpp #, c-format msgid "Your %1$s puncture %2$s in mid-attack!" -msgstr "Ваш %1$s прокалывает %2$s во время атаки!" +msgstr "Ваши %1$s прокалывают противника (%2$s) во время атаки!" #: src/player.cpp #, c-format msgid "%1$s's %2$s scrape %3$s in mid-attack!" -msgstr "%2$s (%1$s) царапает %3$s во время атаки!" +msgstr "%2$s (%1$s) царапают противника (%3$s) во время атаки!" #: src/player.cpp msgid "thorns" @@ -279158,21 +283367,21 @@ msgstr "колючки" #: src/player.cpp #, c-format msgid "Your thorns scrape %s in mid-attack!" -msgstr "Ваши колючки царапают %s во время атаки!" +msgstr "Ваши колючки царапают противника (%s) во время атаки!" #: src/player.cpp #, c-format msgid "%1$s gets a load of %2$s's %3$s stuck in!" -msgstr "%1$s вырывает клок %3$s у %2$s!" +msgstr "%1$s вырывает клок %3$s у противника (%2$s)!" #: src/player.cpp msgid "hair" -msgstr "волосы" +msgstr "волос" #: src/player.cpp #, c-format msgid "Your hairs detach into %s!" -msgstr "Ваши волосы отрывает %s!" +msgstr "Ваши волосы отрывает - %s!" #: src/player.cpp #, c-format @@ -279186,17 +283395,17 @@ msgstr "Вы теряете равновесие после удара!" #: src/player.cpp #, c-format msgid "You land on %s." -msgstr "Вы приземлились на %s." +msgstr "Вы приземлились на: %s." #: src/player.cpp #, c-format msgid "You are slammed against %1$s for %2$d damage." -msgstr "Вы врезались в %1$s, получив %2$d урона." +msgstr "Вы врезались в препятствие (%1$s), получив %2$d урона." #: src/player.cpp #, c-format msgid "You are slammed against %s!" -msgstr "Вы врезались в %s!" +msgstr "Вы врезались в препятствие (%s)!" #: src/player.cpp msgid "…but your shock absorbers negate the damage!" @@ -279205,37 +283414,37 @@ msgstr "… но ваши кинетические амортизаторы по #: src/player.cpp #, c-format msgid "You are slammed against %s." -msgstr "Вы врезались в %s." +msgstr "Вы врезались в препятствие (%s)." #: src/player.cpp #, c-format msgid " is slammed against %s." -msgstr " врезается в %s!" +msgstr " врезается в препятствие (%s)!" #: src/player.cpp #, c-format msgid " bounces off a %s!" -msgstr " отскакивает от %s!" +msgstr " отскакивает от препятствия (%s)!" #: src/player.cpp #, c-format msgid "You bounce off a %s!" -msgstr "Вы отскакиваете от %s!" +msgstr "Вы отскакиваете от препятствия (%s)!" #: src/player.cpp #, c-format msgid " bounces off %s!" -msgstr " отскакивает от %s!" +msgstr " отскакивает от препятствия (%s)!" #: src/player.cpp #, c-format msgid "You bounce off %s!" -msgstr "Вы отскакиваете от %s!" +msgstr "Вы отскакиваете от препятствия (%s)!" #: src/player.cpp #, c-format msgid "There is not enough %s left to siphon it." -msgstr "Здесь осталось недостаточно %s." +msgstr "Здесь осталось недостаточно жидкости (%s), чтобы можно было слить." #: src/player.cpp msgid "Your body is wracked with excruciating pain!" @@ -279260,27 +283469,27 @@ msgstr "У вас болит всё тело." #: src/player.cpp #, c-format msgid "Your %s is wracked with excruciating pain!" -msgstr "Ваша %s охвачено мучительной болью!" +msgstr "Ваша часть тела (%s) охвачена мучительной болью!" #: src/player.cpp #, c-format msgid "Your %s is wracked with terrible pain!" -msgstr "Ваша %s охвачено ужасной болью!" +msgstr "Ваша часть тела (%s) охвачена ужасной болью!" #: src/player.cpp #, c-format msgid "Your %s is wracked with pain!" -msgstr "Ваша %s охвачена болью!" +msgstr "Ваша часть тела (%s) охвачена болью!" #: src/player.cpp #, c-format msgid "Your %s pains you!" -msgstr "Ваш %s причиняет вам боль!" +msgstr "Ваш часть тела (%s) причиняет вам боль!" #: src/player.cpp #, c-format msgid "Your %s aches." -msgstr "У вас болит %s." +msgstr "Ваша часть тела (%s) болит." #: src/player.cpp #, c-format @@ -279323,17 +283532,17 @@ msgstr "Ваша силовая броня деактивирована." #: src/player.cpp src/veh_interact.cpp #, c-format msgid "Refill %s" -msgstr "Заправить %s" +msgstr "Заправить: %s" #: src/player.cpp src/vehicle_use.cpp #, c-format msgid "Reload %s" -msgstr "Перезарядить %s" +msgstr "Перезарядить: %s" #: src/player.cpp #, c-format msgid "Select ammo for %s" -msgstr "Выберите боеприпасы для %s" +msgstr "Выберите боеприпасы для оружия (%s)" #. ~ battery storage (charges) #: src/player.cpp @@ -279368,7 +283577,7 @@ msgstr "| Урон | Бронеб. " #: src/player.cpp #, c-format msgid "You need a compatible magazine to reload the %s!" -msgstr "Вам нужен совместимый магазин, чтобы перезарядить %s!" +msgstr "Вам нужен совместимый магазин, чтобы перезарядить оружие (%s)!" #: src/player.cpp msgid "Nothing to reload!" @@ -279377,7 +283586,7 @@ msgstr "Нечего перезаряжать!" #: src/player.cpp #, c-format msgid "You don't have any %s to reload your %s!" -msgstr "У вас нет %s, чтобы перезарядить %s!" +msgstr "У вас нет зарядов (%s), чтобы перезарядить оружие (%s)!" #: src/player.cpp msgid "Can't wield spilt liquids." @@ -279390,7 +283599,7 @@ msgstr "Чтобы что-нибудь взять, вам необходима #: src/player.cpp #, c-format msgid "The %s is preventing you from wielding the %s." -msgstr "%s не дает вам взять в руки %s." +msgstr "%s не дает вам взять в руки предмет (%s)." #: src/player.cpp msgid "Something you are wearing hinders the use of both hands." @@ -279399,12 +283608,12 @@ msgstr "Что-то, что надето на вас, мешает пользо #: src/player.cpp #, c-format msgid "The %s can't be wielded with only one arm." -msgstr "%s нельзя держать только одной рукой." +msgstr "Это (%s) нельзя держать только одной рукой." #: src/player.cpp #, c-format msgid "You are too weak to wield %s with only one arm." -msgstr "Вы слишком слабы, чтобы держать %s одной рукой." +msgstr "Вы слишком слабы, чтобы держать это (%s) одной рукой." #: src/player.cpp msgid "Keep hands free (off)" @@ -279439,12 +283648,12 @@ msgstr "Установить: %s" #: src/player.cpp #, c-format msgid "The %s doesn't have any faults to toggle." -msgstr "У %s нет дефектов для переключения." +msgstr "У предмета (%s) нет дефектов для переключения." #: src/player.cpp #, c-format msgid "The %s doesn't have any faults to mend." -msgstr "В %s нет никаких дефектов." +msgstr "У предмета (%s) нет никаких дефектов." #: src/player.cpp msgid "It is damaged, but cannot be repaired." @@ -279455,12 +283664,12 @@ msgstr "Предмет повреждён, его нельзя отремонт msgid "" "It is damaged, and could be repaired with %s. %s to use one of those items." msgstr "" -"Это повреждено, может быть отремонтировано, для ремонта потребуется %s. %s, " -"чтобы использовать один из этих предметов." +"Это повреждено, может быть отремонтировано, для ремонта потребуется: %s. %s," +" чтобы использовать один из этих предметов." #: src/player.cpp msgid "Mend which fault?" -msgstr "Исправить какой дефект?" +msgstr "Какой дефект исправить?" #: src/player.cpp #, c-format @@ -279503,7 +283712,8 @@ msgstr "%1$s (%2$d/%3$d)" #: src/player.cpp #, c-format msgid "You are currently unable to mend the %s this way." -msgstr "В настоящий момент вы не можете исправить %s таким способом." +msgstr "" +"В настоящий момент вы не можете исправить дефекты (%s) таким способом." #: src/player.cpp msgid "You are already wearing that." @@ -279515,7 +283725,7 @@ msgstr " уже носит это." #: src/player.cpp msgid " doesn't have that item." -msgstr "У нет этого предмета." +msgstr "У NPC () нет этого предмета." #: src/player.cpp msgid " is not wearing that item." @@ -279547,22 +283757,22 @@ msgstr " не может снять этот предмет." #: src/player.cpp #, c-format msgid "You take off your %s." -msgstr "Вы сняли %s." +msgstr "Вы сняли: %s." #: src/player.cpp #, c-format msgid " takes off their %s." -msgstr " снимает %s." +msgstr " снимает: %s." #: src/player.cpp #, c-format msgid "You put the %s in your inventory." -msgstr "Вы убираете %s в свой инвентарь." +msgstr "Вы убираете предмет (%s) в свой инвентарь." #: src/player.cpp #, c-format msgid "The %s is already empty!" -msgstr "Этот %s уже пуст!" +msgstr "Предмет (%s) уже пуст!" #: src/player.cpp msgid "The liquid can't be unloaded in its current state!" @@ -279575,22 +283785,22 @@ msgstr "Разрядить что?" #: src/player.cpp #, c-format msgid "You can't unload a %s!" -msgstr "Вы не можете разрядить %s!" +msgstr "Вы не можете разрядить это (%s)!" #: src/player.cpp #, c-format msgid "You can't unload a rechargeable %s!" -msgstr "Вы не можете разрядить перезаряжаемый %s!" +msgstr "Вы не можете разрядить перезаряжаемый предмет (%s)!" #: src/player.cpp #, c-format msgid "Your %s isn't charged." -msgstr "Ваш %s не заряжен." +msgstr "Предмет (%s) не заряжен." #: src/player.cpp #, c-format msgid "Your %s isn't loaded." -msgstr "%s не заряжен." +msgstr "Предмет (%s) не заряжен." #: src/player.cpp #, c-format @@ -279605,17 +283815,17 @@ msgstr "Вы не можете убрать частично обеднённы #: src/player.cpp #, c-format msgid "You remove your %1$s from your %2$s." -msgstr "Вы вынимаете %1$s из %2$s." +msgstr "Вы вынимаете модификацию (%1$s) из оружия (%2$s)." #: src/player.cpp #, c-format msgid "Permanently install your %1$s in your %2$s?" -msgstr "Установить %1$s в %2$s навсегда?" +msgstr "Установить модификацию (%1$s) в оружие (%2$s) навсегда?" #: src/player.cpp #, c-format msgid "Attach your %1$s to your %2$s?" -msgstr "Присоединить %1$s к %2$s?" +msgstr "Присоединить модификацию (%1$s) к оружию (%2$s)?" #: src/player.cpp #, c-format @@ -279689,7 +283899,7 @@ msgstr "Вы лежите под объятиями волн, глядя скв #: src/player.cpp msgid "You settle into the water and begin to drowse…" -msgstr "Вы ложитесь на воду и начинаете дремать…" +msgstr "Вы устраиваетесь в воде и начинаете дремать…" #: src/player.cpp msgid "This is a comfortable place to sleep." @@ -279698,24 +283908,24 @@ msgstr "Это удобное место для сна." #: src/player.cpp #, c-format msgid "It's a little hard to get to sleep on this %s." -msgstr "Не так-то просто заснуть на %s." +msgstr "Не так-то просто заснуть здесь (%s)." #: src/player.cpp #, c-format msgid "It's hard to get to sleep on this %s." -msgstr "Трудно заснуть на %s." +msgstr "Трудно заснуть здесь (%s)." #. ~ %1$s: vehicle name, %2$s: vehicle part name #: src/player.cpp #, c-format msgid "It's a little hard to get to sleep on this %2$s in %1$s." -msgstr "Не так-то просто заснуть на %2$s в %1$s." +msgstr "Не так-то просто заснуть здесь (%2$s - %1$s)." #. ~ %1$s: vehicle name #: src/player.cpp #, c-format msgid "It's hard to get to sleep in %1$s." -msgstr "Не так-то просто заснуть на %1$s." +msgstr "Не так-то просто заснуть здесь (%1$s)." #: src/player.cpp msgid "You start trying to fall asleep." @@ -279732,7 +283942,7 @@ msgstr "Стимулятору сна не хватает энергии для #: src/player.cpp #, c-format msgid "You use your %s for comfort." -msgstr "С %s вам комфортнее." +msgstr "Вы используете предмет (%s) для комфортного сна." #: src/player.cpp msgid "Your soporific inducer runs out of power!" @@ -279931,7 +284141,7 @@ msgstr "" #: src/player_display.cpp #, c-format msgid "Base HP: %d" -msgstr "Базовые HP: %d" +msgstr "Базовые ОЗ: %d" #: src/player_display.cpp #, c-format @@ -280062,13 +284272,13 @@ msgstr "Текущая скорость:" #, c-format msgctxt "speed penalty" msgid "Overburdened -%2d%%" -msgstr "Перегруз -%2d%%" +msgstr "Перегруз -%2d%%" #: src/player_display.cpp #, c-format msgctxt "speed penalty" msgid "Pain -%2d%%" -msgstr "Боль -%2d%%" +msgstr "Боль -%2d%%" #: src/player_display.cpp #, c-format @@ -280076,6 +284286,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "Жажда -%2d%%" +#: src/player_display.cpp +msgid "Starving" +msgstr "Голодающие" + #: src/player_display.cpp msgid "Underfed" msgstr "Недоедание" @@ -280170,6 +284384,10 @@ msgstr "" "Ваше тело сильно ослаблено из-за голодания. Вы можете умереть, если не начнёте регулярно питаться!\n" "\n" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "Истощал" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help you recover.\n" @@ -280248,7 +284466,7 @@ msgstr "Вас сильно рвёт густой серой слизью." #: src/player_hardcoded_effects.cpp msgid " vomits a thick, gray goop." -msgstr " стошнило густой серой слизью." +msgstr " блюёт густой серой слизью." #: src/player_hardcoded_effects.cpp msgid "You vomit thousands of live spores!" @@ -280256,7 +284474,7 @@ msgstr "Вас стошнило тысячами живых спор!" #: src/player_hardcoded_effects.cpp msgid " vomits thousands of live spores!" -msgstr " стошнило тысячами живых спор!" +msgstr " блюёт тысячами живых спор!" #: src/player_hardcoded_effects.cpp msgid "The flesh on your broken arms bulges. Fungus stalks burst through!" @@ -280264,7 +284482,7 @@ msgstr "Плоть на ваших сломанных руках вздувае #: src/player_hardcoded_effects.cpp msgid "'s broken arms bulge. Fungus stalks burst out of the bulges!" -msgstr "Сломанные руки вздуваются. Из них прорастают грибы!" +msgstr "Сломанные руки () вздуваются. Из них прорастают грибы!" #: src/player_hardcoded_effects.cpp msgid "" @@ -280276,7 +284494,7 @@ msgstr "" #: src/player_hardcoded_effects.cpp msgid "'s arms bulge. Fungus stalks burst out of the bulges!" -msgstr "Руки вздуваются. Из них прорастают грибы!" +msgstr "Руки () вздуваются. Из них прорастают грибы!" #: src/player_hardcoded_effects.cpp msgid "Your hands bulge. Fungus stalks burst through the bulge!" @@ -280284,7 +284502,7 @@ msgstr "Ваши руки вздуваются. Из них прорастают #: src/player_hardcoded_effects.cpp msgid "'s hands bulge. Fungus stalks burst through the bulge!" -msgstr "Руки вздуваются. Из них прорастают грибы!" +msgstr "Руки () вздуваются. Из них прорастают грибы!" #: src/player_hardcoded_effects.cpp msgid "You feel nauseous!" @@ -280304,7 +284522,7 @@ msgstr "Вы чувствуете себя немного странно." #: src/player_hardcoded_effects.cpp msgid "The world takes on a dreamlike quality." -msgstr "Мир вокруг принимает фантастическое очертание." +msgstr "Мир вокруг принимает фантастические очертания." #: src/player_hardcoded_effects.cpp msgid "You have a sudden nostalgic feeling." @@ -280498,19 +284716,19 @@ msgstr "" #: src/player_hardcoded_effects.cpp msgid "Insects begin to emerge from 's skin!" -msgstr "Насекомые начинают прорываться из кожи !" +msgstr "Насекомые начинают прорываться из кожи NPC ()!" #. ~ %s is bodypart in accusative. #: src/player_hardcoded_effects.cpp #, c-format msgid "You start scratching your %s!" -msgstr "Вы начали чесать %s!" +msgstr "Вы начали чесать часть тела (%s)!" #. ~ 1$s is NPC name, 2$s is bodypart in accusative. #: src/player_hardcoded_effects.cpp #, c-format msgid "%1$s starts scratching their %2$s!" -msgstr "%1$s начал чесать %2$s!" +msgstr "%1$s начинает чесать себя (%2$s)!" #: src/player_hardcoded_effects.cpp msgid "Why waste your time on that insignificant speck?" @@ -280808,22 +285026,25 @@ msgstr "Ваше оружие (%s) дало осечку, издав лишь т #: src/ranged.cpp #, c-format msgid "'s %s misfires with a muffled click!" -msgstr "Оружие %s () даёт осечку, издав лишь тихий щелчок!" +msgstr "Оружие (%s - ) даёт осечку, издав лишь тихий щелчок!" #: src/ranged.cpp #, c-format msgid "Perhaps taking the ammo out of your %s and reloading will help." -msgstr "Возможно патроны из %s будут кстати." +msgstr "" +"Возможно извлечение патрона из оружия (%s) и перезарядка решат проблему." #: src/ranged.cpp #, c-format msgid "Perhaps taking the ammo out of 's %s and reloading will help." -msgstr "Возможно патроны из %s у будут кстати." +msgstr "" +"Возможно извлечение патрона из оружия (%s - ) и перезарядка решат " +"проблему." #: src/ranged.cpp #, c-format msgid "Your %s misfires with a wet click!" -msgstr "Ваш %s влажно щёлкает и даёт осечку!" +msgstr "Ваше оружие (%s) влажно щёлкает и даёт осечку!" #: src/ranged.cpp #, c-format @@ -280833,7 +285054,7 @@ msgstr "%s () влажно щёлкает и даёт осечку!" #: src/ranged.cpp #, c-format msgid "Your %s malfunctions!" -msgstr "Ваш %s работает неисправно!" +msgstr "%s работает неисправно!" #: src/ranged.cpp #, c-format @@ -280848,7 +285069,7 @@ msgstr "Прикреплённая модификация (%s) уничтоже #: src/ranged.cpp #, c-format msgid "'s attached %s is destroyed by their shot!" -msgstr "Прикреплённая модификация (%s) уничтожена выстрелом!" +msgstr "Прикреплённая модификация (%s - ) уничтожена выстрелом!" #: src/ranged.cpp #, c-format @@ -280858,7 +285079,8 @@ msgstr "Прикреплённая модификация (%s) поврежда #: src/ranged.cpp #, c-format msgid "'s %s is damaged by their shot!" -msgstr "Прикреплённая модификация (%s) повреждается из-за выстрела!" +msgstr "" +"Прикреплённая модификация (%s - ) повреждается из-за выстрела!" #: src/ranged.cpp #, c-format @@ -280868,27 +285090,27 @@ msgstr "%s издаёт невыносимый пилящий звук!" #: src/ranged.cpp #, c-format msgid "'s %s emits a grimace-inducing screech!" -msgstr "%s у издаёт невыносимый пилящий звук!" +msgstr "%s () издаёт невыносимый пилящий звук!" #: src/ranged.cpp #, c-format msgid "Your %s fails to cycle!" -msgstr "Ваш %s заклинило!" +msgstr "Ваше оружие (%s) заклинило!" #: src/ranged.cpp #, c-format msgid "'s %s fails to cycle!" -msgstr "У заклинило %s!" +msgstr "У NPC () заклинило оружие (%s)!" #: src/ranged.cpp #, c-format msgid "Your %s is damaged by the high pressure!" -msgstr "Высокое давление повреждает ваш %s!" +msgstr "Высокое давление повреждает ваше оружие (%s)!" #: src/ranged.cpp #, c-format msgid "'s %s is damaged by the high pressure!" -msgstr "Высокое давление повреждает %s!" +msgstr "Высокое давление повреждает оружие (%s - )!" #: src/ranged.cpp #, c-format @@ -280903,12 +285125,12 @@ msgstr "Вы слышите %s." #: src/ranged.cpp #, c-format msgid "You cycle your %s manually." -msgstr "Вы вручную освобождаете камору %s." +msgstr "Вы вручную освобождаете камору оружия (%s)." #: src/ranged.cpp #, c-format msgid "You feel a surge of euphoria as flames roar out of the %s!" -msgstr "Вы чувствуете прилив эйфории, когда из %s с рёвом вырывается пламя!" +msgstr "Вы чувствуете прилив эйфории, когда %s с рёвом извергает пламя!" #: src/ranged.cpp msgid "Steadiness" @@ -281077,27 +285299,27 @@ msgstr "«Ты-Дыщ!»" #: src/ranged.cpp #, c-format msgid "You don't have enough %s to cast this spell" -msgstr "У вас не хватает %s для этого заклинания" +msgstr "У вас не хватает энергии (%s) для этого заклинания" #: src/ranged.cpp #, c-format msgid "Really attack %s?" -msgstr "Действительно атаковать %s?" +msgstr "Действительно атаковать: %s?" #: src/ranged.cpp #, c-format msgid "Firing %s" -msgstr "Стрельба из %s" +msgstr "Стрельба: %s" #: src/ranged.cpp #, c-format msgid "Throwing %s" -msgstr "Метнуть %s" +msgstr "Метнуть: %s" #: src/ranged.cpp #, c-format msgid "Blind throwing %s" -msgstr "Метнуть %s вслепую" +msgstr "Метнуть вслепую: %s " #: src/ranged.cpp msgid "Set target" @@ -281273,7 +285495,7 @@ msgstr "Радиус действия: %s%s" #: src/ranged.cpp msgid " WARNING! IN RANGE" -msgstr "ОПАСНО! В ДОСЯГАЕМОСТИ" +msgstr "ОПАСНО! В ЗОНЕ ПОРАЖЕНИЯ" #: src/ranged.cpp #, c-format @@ -281318,7 +285540,18 @@ msgid_plural "%1$d tools with %2$s of %3$d or more." msgstr[0] "%1$d инструмент со значением %2$s %3$d или выше." msgstr[1] "%1$d инструмента со значением %2$s %3$d или выше." msgstr[2] "%1$d инструментов со значением %2$s %3$d или выше." -msgstr[3] "%1$d инструментов со значением %2$s %3$d или выше." +msgstr[3] "%1$d инструмент со значением %2$s %3$d или выше." + +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level +#. requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "%1$d инструмент со значением %2$s %3$d или выше." +msgstr[1] "%1$d инструмента со значением %2$s %3$d или выше." +msgstr[2] "%1$d инструментов со значением %2$s %3$d или выше." +msgstr[3] "%1$d инструмент со значением %2$s %3$d или выше." #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp @@ -281454,7 +285687,7 @@ msgstr "Ч/Б" #: src/safemode_ui.cpp msgctxt "category" msgid "Cat" -msgstr "Кот" +msgstr "Кат" #: src/safemode_ui.cpp msgid "Safe Mode enabled:" @@ -281707,37 +285940,39 @@ msgstr "d: удалить историю" #: src/suffer.cpp #, c-format msgid "Your %s is damaged by the water." -msgstr "Вода повреждает вам %s." +msgstr "Вода повреждает часть тела (%s)." #: src/suffer.cpp #, c-format msgid "'s %s is damaged by the water." -msgstr "Вода повреждает %s." +msgstr "Вода повреждает часть тела ( - %s)." #: src/suffer.cpp #, c-format msgid "Your %s is healed by the water." -msgstr "Вода исцеляет вам %s." +msgstr "Вода исцеляет вам часть тела (%s)." #: src/suffer.cpp #, c-format msgid "'s %s is healed by the water." -msgstr "Вода исцеляет %s." +msgstr "Вода исцеляет часть тела ( - %s)." #: src/suffer.cpp #, c-format msgid "You're too malnourished to keep your %s going." -msgstr "Вы слишком истощены, чтобы поддерживать ваш %s." +msgstr "" +"Вы слишком истощены, чтобы поддерживать вашу способность (%s) активной." #: src/suffer.cpp #, c-format msgid "You're too dehydrated to keep your %s going." -msgstr "Вы слишком обезвожены, чтобы поддерживать ваш %s." +msgstr "" +"Вы слишком обезвожены, чтобы поддерживать вашу способность (%s) активной." #: src/suffer.cpp #, c-format msgid "You're too exhausted to keep your %s going." -msgstr "Вы слишком устали, чтобы поддерживать ваш %s." +msgstr "Вы слишком устали, чтобы поддерживать вашу способность (%s) активной." #: src/suffer.cpp msgid "You're drowning!" @@ -281795,7 +286030,7 @@ msgstr "Внезапно, вам стало жарко." #: src/suffer.cpp #, c-format msgid "your %1$s" -msgstr "ваше %1$s" +msgstr "ваше оружие (%1$s)" #: src/suffer.cpp msgid "You suddenly feel so numb…" @@ -281807,7 +286042,7 @@ msgstr "Вас бросило в озноб." #: src/suffer.cpp msgid " starts to shake uncontrollably." -msgstr " бросило в озноб." +msgstr "NPC () бросило в озноб." #: src/suffer.cpp #, c-format @@ -282039,7 +286274,7 @@ msgstr " потягивает спину." #: src/suffer.cpp msgid "You feel mentally tired." -msgstr "Вы чувствуете себя душевно уставшими." +msgstr "Вы чувствуете себя умственную усталость." #: src/suffer.cpp msgid " lets out a huge yawn." @@ -282059,7 +286294,7 @@ msgstr "Ваше зрение немного размывается. " #: src/suffer.cpp msgid "Your mind lapses into unawareness briefly." -msgstr "Ваш разум быстро впадает в неосознанность." +msgstr "Ваш разум ненадолго впадает в неосознанность." #: src/suffer.cpp msgid "Your muscles ache in stressfully unpredictable ways." @@ -282104,13 +286339,13 @@ msgstr "Вы падаете!" #: src/suffer.cpp #, c-format msgid "Your radiation badge changes from %1$s to %2$s!" -msgstr "Ваш плёночный дозиметр сменил свой цвет с %1$s на %2$s!" +msgstr "Ваш плёночный дозиметр сменил свой цвет - %1$s на %2$s!" #. ~ %s is bodypart #: src/suffer.cpp #, c-format msgid "Your %s has started to mend!" -msgstr "Ваша %s начала заживать!" +msgstr "Ваша часть тела (%s) начала заживать!" #: src/suffer.cpp msgid "The water wash away the scent." @@ -282143,18 +286378,19 @@ msgstr "Вы разлетаетесь на тысячи кусочков." #: src/teleport.cpp #, c-format msgid "You teleport into %s, and they explode into thousands of fragments." -msgstr "Вы телепортируетесь в %s, и тот разлетается на тысячи кусочков." +msgstr "Вы телепортируетесь внутрь, и %s разлетается на тысячи кусочков." #: src/teleport.cpp #, c-format msgid "" " teleports into %s, and they explode into thousands of fragments." -msgstr " телепортируется в %s, и тот разлетается на тысячи кусочков." +msgstr "" +" телепортируется внутрь, и %s разлетается на тысячи кусочков." #: src/teleport.cpp #, c-format msgid "%1$s teleports into %2$s, killing them!" -msgstr "%1$s телепортируется в %2$s и убивает его!" +msgstr "%1$s телепортируется внутрь, и %2$s погибает!" #: src/timed_event.cpp msgctxt "memorial_male" @@ -282253,7 +286489,7 @@ msgstr " наступает на пузырчатую плёнку!" #: src/trapfunc.cpp #, c-format msgid "Your %s steps on some bubble wrap!" -msgstr "Ваш %s наступает на пузырчатую плёнку!" +msgstr "%s наступает на пузырчатую плёнку!" #: src/trapfunc.cpp msgid "You step on some glass!" @@ -282278,12 +286514,12 @@ msgstr "Медвежий капкан захлопнулся на вашей н #: src/trapfunc.cpp msgid "A bear trap closes on 's foot!" -msgstr "Медвежий капкан захлопнулся на ноге !" +msgstr "Медвежий капкан захлопнулся на ноге NPC ()!" #: src/trapfunc.cpp #, c-format msgid "Your %s is caught by a beartrap!" -msgstr "Ваш %s попал в капкан!" +msgstr "Ваш скакун (%s) попал в капкан!" #: src/trapfunc.cpp msgid "You step on a spiked board!" @@ -282296,7 +286532,7 @@ msgstr " наступает на доску с шипами!" #: src/trapfunc.cpp #, c-format msgid "Your %s stepped on a spiked board!" -msgstr "Ваш %s наступил на доску с шипами!" +msgstr "Ваш скакун (%s) наступил на доску с шипами!" #: src/trapfunc.cpp msgid "You step on a sharp metal caltrop!" @@ -282309,7 +286545,7 @@ msgstr " наступает на острую металлическу #: src/trapfunc.cpp #, c-format msgid "Your %s steps on a sharp metal caltrop!" -msgstr "Ваш %s наступает на острую металлическую триболу!" +msgstr "Ваш скакун (%s) наступает на острую металлическую триболу!" #: src/trapfunc.cpp msgid "You step on a sharp glass caltrop!" @@ -282334,12 +286570,12 @@ msgstr " спотыкается об растяжку!" #: src/trapfunc.cpp #, c-format msgid "Your %s trips over a tripwire!" -msgstr "Ваш %s спотыкается о растяжку!" +msgstr "Ваш скакун (%s) спотыкается о растяжку!" #: src/trapfunc.cpp #, c-format msgid "Your %s triggers a crossbow trap." -msgstr "Ваш %s вызывает срабатывание арбалетной ловушки." +msgstr "Ваш скакун (%s) вызывает срабатывание арбалетной ловушки." #: src/trapfunc.cpp msgid "You trigger a crossbow trap!" @@ -282353,7 +286589,7 @@ msgstr " вызывает срабатывание арбалетной #: src/trapfunc.cpp #, c-format msgid "Your %s is hit!" -msgstr "Вас ударило по %s!" +msgstr "В вас попало - %s!" #: src/trapfunc.cpp msgid "You dodge the shot!" @@ -282366,12 +286602,12 @@ msgstr " уворачивается от выстрела!" #: src/trapfunc.cpp #, c-format msgid "A bolt shoots out and hits the %s!" -msgstr "Болт вылетает и попадает в %s!" +msgstr "Болт вылетает и попадает в существо (%s)!" #: src/trapfunc.cpp #, c-format msgid "A bolt shoots out, but misses the %s." -msgstr "Болт вылетает, но промахивается по %s." +msgstr "Болт вылетает, но промахивается по существу (%s)." #: src/trapfunc.cpp msgid "Kerblam!" @@ -282380,7 +286616,7 @@ msgstr "«Ты-дыщ!»" #: src/trapfunc.cpp #, c-format msgid "Your %s triggers a shotgun trap!" -msgstr "Ваш %s вызывает срабатывание ловушки с дробовиком!" +msgstr "Ваш скакун (%s) вызывает срабатывание ловушки с дробовиком!" #: src/trapfunc.cpp msgid "You trigger a shotgun trap!" @@ -282388,17 +286624,17 @@ msgstr "Вы вызвали срабатывание ловушки с дроб #: src/trapfunc.cpp msgid " triggers a shotgun trap!" -msgstr " заставил сработать ловушку с дробовиком!" +msgstr " заставляет сработать ловушку с дробовиком!" #: src/trapfunc.cpp #, c-format msgid "A shotgun fires and hits the %s!" -msgstr "Дробовик стреляет и попадает в %s!" +msgstr "Дробовик стреляет и попадает по существу (%s)!" #: src/trapfunc.cpp #, c-format msgid "A blade swings out and hacks your %s!" -msgstr "Лезвие замахивается и рубит ваш %s!" +msgstr "Лезвие замахивается и рубит вашего скакуна (%s)!" #: src/trapfunc.cpp msgid "A blade swings out and hacks your torso!" @@ -282406,7 +286642,7 @@ msgstr "Лезвие замахивается и рубит ваш торс!" #: src/trapfunc.cpp msgid "A blade swings out and hacks 's torso!" -msgstr "Лезвие замахивается и рубит торс !" +msgstr "Лезвие замахивается и рубит торс ()!" #: src/trapfunc.cpp msgid "Snap!" @@ -282415,7 +286651,7 @@ msgstr "«Щёлк!»" #: src/trapfunc.cpp #, c-format msgid "A snare closes on your %s's leg!" -msgstr "Силок затягивается на ноге у %s!" +msgstr "Силок затягивается на ноге у вашего скакуна (%s)!" #: src/trapfunc.cpp msgid "A snare closes on your leg." @@ -282423,26 +286659,26 @@ msgstr "Силок затягивается у вас на ноге." #: src/trapfunc.cpp msgid "A snare closes on s leg." -msgstr "Силок затягивается на ноге у ." +msgstr "Силок затягивается на ноге ()." #. ~ %s is bodypart name in accusative. #: src/trapfunc.cpp #, c-format msgid "A snare closes on your %s." -msgstr "Силок затягивается у вас на %s." +msgstr "Силок затягивается на вас (%s)." #: src/trapfunc.cpp #, c-format msgid "A snare closes on s %s." -msgstr "Силок затягивается на %s у ." +msgstr "Силок затягивается на NPC ( - %s)." #: src/trapfunc.cpp msgid "You trigger a land mine!" -msgstr "Вы наступили на фугас!" +msgstr "Вы наступили на мину!" #: src/trapfunc.cpp msgid " triggers a land mine!" -msgstr " вызывает срабатывание фугаса!" +msgstr " вызывает срабатывание мины!" #: src/trapfunc.cpp msgid "You trigger a booby trap!" @@ -282464,7 +286700,7 @@ msgstr "Воздух мерцает вокруг вас…" #: src/trapfunc.cpp #, c-format msgid "The air shimmers around %s…" -msgstr "Воздух мерцает вокруг %s…" +msgstr "Воздух мерцает вокруг существа (%s)…" #: src/trapfunc.cpp msgid "You step in a puddle of thick goo." @@ -282492,12 +286728,12 @@ msgstr "Электрические разряды вылетают из пола #: src/trapfunc.cpp msgid "Electrical beams emit from the floor and slice s flesh!" -msgstr "Электрические разряды вылетают из пола и пронзают плоть !" +msgstr "Электрические разряды вылетают из пола и пронзают плоть ()!" #: src/trapfunc.cpp #, c-format msgid "Electrical beams emit from the floor and slice the %s!" -msgstr "Электрические лучи вылетают из пола и рассекают %s!" +msgstr "Электрические лучи вылетают из пола и рассекают вашего скакуна (%s)!" #: src/trapfunc.cpp msgid " falls in a pit!" @@ -282526,7 +286762,7 @@ msgstr "Вы ловко приземлились." #: src/trapfunc.cpp #, c-format msgid "Your %s falls into a pit!" -msgstr "Ваш %s падает в яму!" +msgstr "Ваш скакун (%s) падает в яму!" #: src/trapfunc.cpp msgid "You fall in a spiked pit!" @@ -282538,12 +286774,12 @@ msgstr " падает в яму с шипами!" #: src/trapfunc.cpp msgid "You avoid the spikes within." -msgstr "Вы увернулись от внутренних шипов." +msgstr "Вы увернулись от шипов в яме." #: src/trapfunc.cpp #, c-format msgid "The spikes impale your %s!" -msgstr "Шипы пронзают вам %s!" +msgstr "Шипы пронзают часть вашего тела (%s)!" #: src/trapfunc.cpp msgid "The spears break!" @@ -282551,7 +286787,7 @@ msgstr "Копья ломаются!" #: src/trapfunc.cpp msgid "You fall in a pit filled with glass shards!" -msgstr "Ты падаешь в яму, наполненную стеклянными осколками!" +msgstr "Вы падаете в яму, наполненную стеклянными осколками!" #: src/trapfunc.cpp msgid " falls in pit filled with glass shards!" @@ -282564,12 +286800,12 @@ msgstr "Вы увернулись от осколков стекла." #: src/trapfunc.cpp #, c-format msgid "The glass shards slash your %s!" -msgstr "Стеклянные осколки порезали %s!" +msgstr "Стеклянные осколки порезали вас (%s)!" #: src/trapfunc.cpp #, c-format msgid "The %s burns !" -msgstr "%s поджигает !" +msgstr "%s поджигает NPC ()!" #: src/trapfunc.cpp #, c-format @@ -282579,7 +286815,7 @@ msgstr "%s ужасно обжигает вас!" #: src/trapfunc.cpp #, c-format msgid "Your %s is burned by the lava!" -msgstr "Ваш %s обжигается о лаву!" +msgstr "Ваш скакун (%s) обжигается о лаву!" #: src/trapfunc.cpp msgid "You fail to attach it…" @@ -282602,7 +286838,7 @@ msgstr "" #: src/trapfunc.cpp #, c-format msgid "Your %s falls into a sinkhole!" -msgstr "Ваш %s падает в карстовую воронку!" +msgstr "Ваш скакун (%s) падает в карстовую воронку!" #: src/trapfunc.cpp msgid "" @@ -282630,7 +286866,7 @@ msgstr "Карстовая воронка обрушивается!" #: src/trapfunc.cpp msgid "A sinkhole under collapses!" -msgstr "Карстовая воронка под обрушивается!" +msgstr "Карстовая воронка под NPC () обрушивается!" #: src/trapfunc.cpp msgid "You fall into the sinkhole!" @@ -282651,7 +286887,7 @@ msgstr " провалился на уровень ниже!" #: src/trapfunc.cpp #, c-format msgid "You fall down under %s!" -msgstr "Вы падаете под %s!" +msgstr "Вы падаете под: %s!" #: src/trapfunc.cpp #, c-format @@ -282684,7 +286920,7 @@ msgstr "Вас слепит вспышка света!" #: src/trapfunc.cpp msgid "Small flashes surround you." -msgstr "Маленькие вспышки вокруг вас." +msgstr "Вас окружают маленькие вспышки." #. ~ a quiet humming sound #: src/trapfunc.cpp @@ -282839,7 +287075,7 @@ msgstr "Нельзя пометить эту машину, потому что #: src/veh_interact.cpp #, c-format msgid "Only one %1$s powered engine can be installed." -msgstr "Можно установить только один %1$s двигатель." +msgstr "Можно установить только один двигатель, где топливо - %1$s." #: src/veh_interact.cpp msgid "This vehicle cannot be modified in this way.\n" @@ -283164,7 +287400,8 @@ msgstr "Эта часть не может быть удалена.\n" msgid "" "Removing the broken %1$s may yield some fragments.\n" msgstr "" -"Удаление сломанного %1$s может дать несколько частей.\n" +"Удаление сломанной части (%1$s) может принести несколько " +"обломков.\n" #: src/veh_interact.cpp #, c-format @@ -283205,7 +287442,7 @@ msgstr "Вы не можете убрать эту деталь, пока к н #: src/veh_interact.cpp msgid "Better not remove something while driving." -msgstr "Лучше не убирать детали, пока ведёшь." +msgstr "Лучше не удалять детали, пока ведёшь." #: src/veh_interact.cpp msgid "" @@ -283224,11 +287461,11 @@ msgstr "Вам нужен шланг, чтобы сливат #: src/veh_interact.cpp msgid "You can't siphon from a moving vehicle." -msgstr "Вы не можете перелить из движущейся машины." +msgstr "Вы не можете слить содержимое баков движущейся машины." #: src/veh_interact.cpp msgid "Select part to siphon:" -msgstr "Выберите часть для сливания жидкости:" +msgstr "Выберите, откуда сливать жидкость:" #: src/veh_interact.cpp msgid "The vehicle has no solid fuel left to remove." @@ -283294,11 +287531,11 @@ msgstr "достаточно" #: src/veh_interact.cpp msgid "sinks" -msgstr "умывальники" +msgstr "утонет" #: src/veh_interact.cpp msgid "floats" -msgstr "поплавки" +msgstr "держится на воде" #: src/veh_interact.cpp #, c-format @@ -283620,12 +287857,12 @@ msgstr "В этом транспорте нет заряженных плуто #: src/veh_interact.cpp #, c-format msgid "You don't meet the requirements to install the %s." -msgstr "Не выполнены условия для установки %s." +msgstr "Не выполнены условия для установки этого: %s." #: src/veh_interact.cpp #, c-format msgid "Could not find base part in requirements for %s." -msgstr "Невозможно найти основную часть в условиях для %s." +msgstr "Невозможно найти основную часть в условиях для этого: %s." #: src/veh_interact.cpp #, c-format @@ -283633,41 +287870,41 @@ msgid "" "Press space, choose a facing direction for the new %s and confirm with " "enter." msgstr "" -"Нажмите пробел, выберите направление для %s и нажмите enter для " -"подтверждения." +"Нажмите пробел, выберите направление для новой части (%s) и нажмите enter " +"для подтверждения." #: src/veh_interact.cpp #, c-format msgid "You install a %1$s into the %2$s." -msgstr "Вы смонтировали %1$s в машине (%2$s)." +msgstr "Вы смонтировали: %1$s - %2$s." #. ~ 1$s vehicle name, 2$s tank name #: src/veh_interact.cpp #, c-format msgid "You refill the %1$s's %2$s." -msgstr "Вы наполняете %2$s (%1$s)." +msgstr "Вы наполняете: %2$s - %1$s." #. ~ 1$s vehicle name, 2$s tank name #: src/veh_interact.cpp #, c-format msgid "You completely refill the %1$s's %2$s." -msgstr "Вы полностью наполняете %2$s (%1$s)." +msgstr "Вы полностью наполняете: %2$s - %1$s." #. ~ 1$s vehicle name, 2$s reactor name #: src/veh_interact.cpp #, c-format msgid "You refuel the %1$s's %2$s." -msgstr "Вы заправляете %2$s (%1$s)." +msgstr "Вы заправляете: %2$s - %1$s." #: src/veh_interact.cpp #, c-format msgid "The %s has already been removed by someone else." -msgstr "%s уже кем-то удалён." +msgstr "%s - уже кем-то удалено." #: src/veh_interact.cpp #, c-format msgid "You don't meet the requirements to remove the %s." -msgstr "Не выполнены условия для снятия %s." +msgstr "Не выполнены условия для удаления части (%s)." #: src/veh_interact.cpp #, c-format @@ -283684,12 +287921,12 @@ msgstr "" #: src/veh_interact.cpp #, c-format msgid "You remove the %1$s from the %2$s." -msgstr "Вы вынимаете %1$s из %2$s." +msgstr "Вы вынимаете часть (%1$s) из транспорта (%2$s)." #: src/veh_interact.cpp #, c-format msgid "You completely dismantle the %s." -msgstr "Вы полностью демонтировали %s" +msgstr "Вы полностью разобрали транспорт -%s" #: src/veh_type.cpp msgid "Description\n" @@ -283717,17 +287954,17 @@ msgstr " и рассчитан на %1$d %2$s" #: src/veh_utils.cpp #, c-format msgid "You don't meet the requirements to repair the %s." -msgstr "Не выполнены условия для ремонта %s." +msgstr "Не выполнены условия для ремонта: %s." #: src/veh_utils.cpp #, c-format msgid "You replace the %1$s's %2$s. (was %3$s)" -msgstr "Вы заменили %2$s (%3$s) в %1$s." +msgstr "Вы заменили %2$s - %1$s (было %3$s)." #: src/veh_utils.cpp #, c-format msgid "You repair the %1$s's %2$s. (was %3$s)" -msgstr "Вы отремонтировали %2$s (%3$s) в %1$s." +msgstr "Вы отремонтировали %2$s - %1$s (было %3$s)." #: src/vehicle.cpp msgid "The vehicle part you were working on has gone!" @@ -283750,7 +287987,7 @@ msgstr "%s издаёт звуковой сигнал и произносит: #: src/vehicle.cpp #, c-format msgid "a loud BANG! from the %s" -msgstr "громкий БАБАХ с %s" +msgstr "громкий БАБАХ - %s" #: src/vehicle.cpp #, c-format @@ -283773,13 +288010,13 @@ msgstr "Демонтаж этой детали разделит транспор #: src/vehicle.cpp #, c-format msgid "You load the %1$s on the rack" -msgstr "Вы загрузили %1$s на стойку транспорта" +msgstr "Вы загрузили транспорт (%1$s) на велосипедную стойку" #. ~ %1$s is the vehicle being loaded onto the bicycle rack #: src/vehicle.cpp #, c-format msgid "You can't get the %1$s on the rack" -msgstr "Вы не можете загрузить %1$s на стойку транспорта" +msgstr "Вы не можете загрузить это (%1$s) на стойку транспорта" #: src/vehicle.cpp #, c-format @@ -283803,7 +288040,7 @@ msgstr "" #: src/vehicle.cpp #, c-format msgid "You unload the %s from the bike rack." -msgstr "Вы разгрузили %s с велосипедной стойки." +msgstr "Вы сгрузили транспорт (%s) с велосипедной стойки." #. ~ %s is the vehicle being loaded onto the bicycle rack #: src/vehicle.cpp @@ -283813,7 +288050,7 @@ msgstr "Вы не снять это (%s) с велосипедной стойк #: src/vehicle.cpp msgid "hmm" -msgstr "хмм" +msgstr "«хмм»" #: src/vehicle.cpp msgid "hummm!" @@ -283863,7 +288100,7 @@ msgstr "" #: src/vehicle.cpp #, c-format msgid "The %s's reactor dies!" -msgstr "Реактор у %s умирает!" +msgstr "Реактор (%s) умирает!" #: src/vehicle.cpp #, c-format @@ -283896,17 +288133,17 @@ msgstr "Ваш %s растворяется прочь из бытия." #: src/vehicle.cpp #, c-format msgid "The %s's %s breaks into pieces!" -msgstr "%s %s рассыпается на куски!" +msgstr "%s - %s рассыпается на куски!" #: src/vehicle.cpp #, c-format msgid "The %1$s's %2$s is torn off!" -msgstr "%2$s машины (%1$s) отрывается!" +msgstr "%2$s транспорта (%1$s) отрывается!" #: src/vehicle.cpp #, c-format msgid "The %1$s's %2$s is destroyed!" -msgstr "%2$s машины (%1$s) уничтожено!" +msgstr "%2$s транспорта (%1$s) уничтожается!" #: src/vehicle_display.cpp msgid "More parts here…" @@ -283976,7 +288213,7 @@ msgstr "завал" #: src/vehicle_move.cpp #, c-format msgid "The %s is too leaky!" -msgstr "%s слишком дырявый!" +msgstr "Транспорт (%s) слишком дырявый!" #: src/vehicle_move.cpp #, c-format @@ -283986,7 +288223,7 @@ msgstr "Транспорту (%s) не хватает колёс для езды #: src/vehicle_move.cpp #, c-format msgid "The %s struggles to pull the %s on this surface!" -msgstr "%s пытается поднять %s на эту поверхность!" +msgstr "%s с трудом тянет другой транспорт (%s) на такой поверхности!" #: src/vehicle_move.cpp #, c-format @@ -283996,7 +288233,7 @@ msgstr "Транспорт (%s) слишком тяжёл для своих дв #: src/vehicle_move.cpp #, c-format msgid "The %s's mechanism is out of reach!" -msgstr "Механизм %s вне досягаемости!" +msgstr "Механизм (%s) вне досягаемости!" #: src/vehicle_move.cpp #, c-format @@ -284006,7 +288243,7 @@ msgstr "Двигатель (%s) не заведён!" #: src/vehicle_move.cpp #, c-format msgid "The %s is stuck." -msgstr "%s застрял." +msgstr "Транспорт (%s) застрял." #: src/vehicle_move.cpp #, c-format @@ -284016,39 +288253,40 @@ msgstr "Двигатель (%s) жужжит и не заводится." #: src/vehicle_move.cpp #, c-format msgid "Your %s is not fast enough to keep up with the %s" -msgstr "Ваш %s недостаточно быстрый, чтобы успевать за %s" +msgstr "" +"Ваш питомец (%s) недостаточно быстрый, чтобы успевать за транспортом (%s)" #. ~ 1$s - vehicle name, 2$s - part name, 3$s - NPC or monster #: src/vehicle_move.cpp #, c-format msgid "Your %1$s's %2$s rams into %3$s and stuns it!" -msgstr "%2$s (%1$s) врезается в %3$s и оглушает его!" +msgstr "%2$s (%1$s) врезается в существо (%3$s) и оглушает его!" #. ~ 1$s - vehicle name, 2$s - part name, 3$s - NPC or monster #: src/vehicle_move.cpp #, c-format msgid "Your %1$s's %2$s rams into %3$s!" -msgstr "%2$s (%1$s) врезается в %3$s!" +msgstr "%2$s (%1$s) врезается в существо (%3$s)!" #. ~ 1$s - vehicle name, 2$s - part name, 3$s - collision object name, 4$s - #. sound message #: src/vehicle_move.cpp #, c-format msgid "Your %1$s's %2$s rams into %3$s with a %4$s" -msgstr "%2$s (%1$s) врезается в %3$s со звуком %4$s" +msgstr "%2$s (%1$s) врезается в существо (%3$s) со звуком %4$s" #. ~ 1$s - vehicle name, 2$s - part name, 3$s - collision object name #: src/vehicle_move.cpp #, c-format msgid "Your %1$s's %2$s rams into %3$s." -msgstr "%2$s (%1$s) врезается в %3$s." +msgstr "%2$s (%1$s) врезается во что-то (%3$s)." #. ~ %1$s: name of the vehicle; %2$s: name of the related vehicle part; %3$s: #. trap name #: src/vehicle_move.cpp #, c-format msgid "The %1$s's %2$s runs over %3$s." -msgstr "%2$s (%1$s) наезжает на %3$s." +msgstr "%2$s (%1$s) наезжает на что-то (%3$s)." #: src/vehicle_move.cpp #, c-format @@ -284093,7 +288331,7 @@ msgstr "Рулевое управление полностью сломано!" #: src/vehicle_move.cpp #, c-format msgid "You fumble with the %s's controls." -msgstr "Вы неумело ведёте %s." +msgstr "Вы неумело ведёте транспорт (%s)." #: src/vehicle_move.cpp msgid "It takes you a very long time to steer that vehicle!" @@ -284107,7 +288345,7 @@ msgstr "Вам понадобилось много времени, чтобы п #: src/vehicle_move.cpp #, c-format msgid "You regain control of the %s." -msgstr "Вы вновь контролируете %s." +msgstr "Вы вновь контролируете транспорт (%s)." #: src/vehicle_move.cpp #, c-format @@ -284117,7 +288355,7 @@ msgstr "%s выходит из заноса." #: src/vehicle_move.cpp #, c-format msgid "Your %s sank." -msgstr "Ваш %s утонул." +msgstr "Ваш %s тонет." #: src/vehicle_move.cpp #, c-format @@ -284127,7 +288365,7 @@ msgstr "%s не может двигаться по такой местности #: src/vehicle_move.cpp #, c-format msgid "Your %s is beached." -msgstr "Ваша %s вытащена на берег." +msgstr "Ваш транспорт (%s) вытащен на берег." #: src/vehicle_move.cpp #, c-format @@ -284142,27 +288380,27 @@ msgstr " получает от столкновения урон %d!" #: src/vehicle_move.cpp #, c-format msgid "You lose control of the %s." -msgstr "Вы потеряли управление над %s." +msgstr "Вы потеряли управление над транспортом (%s)." #: src/vehicle_move.cpp #, c-format msgid " loses control of the %s." -msgstr " теряет управление над %s." +msgstr " теряет управление над транспортом (%s)." #: src/vehicle_move.cpp #, c-format msgid "You are hurled from the %s's seat by the power of the impact!" -msgstr "От столкновения вы вылетели из сидения %s!" +msgstr "От столкновения вы вылетели из сидения транспорта (%s)!" #: src/vehicle_move.cpp #, c-format msgid " is hurled from the %s's seat by the power of the impact!" -msgstr "От столкновения вылетает из сидения %s !" +msgstr "От столкновения вылетает из сидения транспорта (%s)!" #: src/vehicle_move.cpp #, c-format msgid "The %s is hurled from %s's by the power of the impact!" -msgstr "От столкновения %s вылетел из %s!" +msgstr "От столкновения %s вылетает из транспорта (%s)!" #: src/vehicle_part.cpp #, c-format @@ -284181,7 +288419,7 @@ msgstr " (дефект)" #: src/vehicle_part.cpp #, c-format msgid " holding %s" -msgstr " содержит %s" +msgstr " содержит: %s" #: src/vehicle_part.cpp msgid " (draining)" @@ -284190,7 +288428,7 @@ msgstr " (осушение)" #: src/vehicle_part.cpp #, c-format msgid "Insufficient power to enable %s" -msgstr "Недостаточно энергии, чтобы включить %s" +msgstr "Недостаточно энергии, чтобы включить: %s" #: src/vehicle_use.cpp #, c-format @@ -285499,6 +289737,10 @@ msgstr "…%s = Полное описание " msgid "--NO AVAILABLE MODS--" msgstr "—НЕТ ДОСТУПНЫХ МОДОВ—" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "--НИЧЕГО НЕ НАЙДЕНО--" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "Текущий список модов сохранён как список по умолчанию." diff --git a/lang/po/zh_CN.po b/lang/po/zh_CN.po index f3a04b69791ec..f2b29d3f77a8c 100644 --- a/lang/po/zh_CN.po +++ b/lang/po/zh_CN.po @@ -39,29 +39,29 @@ # 保周 郭 , 2020 # none none <514065589@qq.com>, 2020 # ehnuhc , 2020 -# Brett Dong , 2020 # 等离子 坦克 , 2020 # 曾泰瑋 , 2020 # Mein Führer <851000914@qq.com>, 2020 # Jianxiang Wang , 2020 # 万 和 <380014507@qq.com>, 2020 -# Amans Tofu , 2020 -# fei li , 2020 -# 何方神圣 何 <1366003560@qq.com>, 2020 # VoidForge , 2020 -# L rient <1972308206@qq.com>, 2020 # GeekDuanLian , 2020 -# Aloxaf , 2020 # Silencess , 2020 +# L rient <1972308206@qq.com>, 2020 +# fei li , 2020 +# 何方神圣 何 <1366003560@qq.com>, 2020 # cainiao , 2020 +# Amans Tofu , 2020 +# Aloxaf , 2020 +# Brett Dong , 2020 # msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-06 11:53+0800\n" +"POT-Creation-Date: 2020-06-23 10:06+0800\n" "PO-Revision-Date: 2018-04-26 14:47+0000\n" -"Last-Translator: cainiao , 2020\n" +"Last-Translator: Brett Dong , 2020\n" "Language-Team: Chinese (China) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -293,7 +293,6 @@ msgid_plural "rocks" msgstr[0] "石头" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -5103,7 +5102,6 @@ msgstr[0] "金块" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -5173,7 +5171,6 @@ msgid_plural "small metal sheets" msgstr[0] "小型薄钢板" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "一小片薄钢板。" @@ -6420,63 +6417,6 @@ msgstr[0] "魔力动力" msgid "Seeing this is a bug." msgstr "看见这个说明出bug了。" -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "测试用石头" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "测试用小型薄钢板" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "测试用木制宽刃箭" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "测试用箭。" - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "测试用9mm弹" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "测试用9mm空尖弹。" - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "测试用.45弹" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "测试用.45空尖弹。" - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "测试用气体" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "某种气体形式的神秘物质。只作测试,不要吸入!" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "测试用铂金块" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -6748,8 +6688,6 @@ msgstr[0] "防噪耳塞" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear #. plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs -#. of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "" @@ -8508,8 +8446,6 @@ msgid_plural "pairs of socks" msgstr[0] "袜子" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of -#. socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "一双穿在脚上的棉制袜子。" @@ -10178,6 +10114,17 @@ msgid "" "heat." msgstr "用凯夫拉和芳纶纤维制成的用于处理爆炸物的轻型防护手套。它们被设计得能够防护破片和高温。" +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "镶钉手套" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of +#. studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "一对嵌有金属钉饰的手套。" + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -15917,7 +15864,6 @@ msgstr[0] "作战用外骨骼" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "你的动力装甲启动了。" @@ -16249,7 +16195,6 @@ msgid_plural "backpacks" msgstr[0] "背包" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "一个小型布制背包,用一点点累赘换取可观的储存空间。" @@ -16349,7 +16294,6 @@ msgid_plural "briefcases" msgstr[0] "手提箱" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "一个配有提手的箱子,内部可存放纸币、文档、或者是走私物品。" @@ -17190,7 +17134,6 @@ msgid_plural "hazmat suits" msgstr[0] "三防服" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -18022,7 +17965,6 @@ msgid_plural "long-sleeved shirts" msgstr[0] "长袖衬衫" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "一件长袖的全棉衬衣。" @@ -18697,6 +18639,18 @@ msgid "" "weight." msgstr "一个可以把你从头到脚包住的大睡袋。它采用中厚织物制成。" +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "铁拳套" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "一个皮革缠绕而成的护手和护臂,在指关节上嵌入了金属板,以提高拳击威力和防护。" + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -20083,54 +20037,15 @@ msgid "" msgstr "一个覆盖全身的肉眼无法看见的环境防护光环。" #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" -msgstr[0] "测试用袜子" - -#: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "测试用长袖衬衫" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" -msgstr[0] "测试用防噪耳塞" - -#: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "测试用三防服" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" -msgstr[0] "测试用背包" - -#: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "测试用手提箱" - -#: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "测试用箭筒" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "测试用箭筒,能储存20支箭或弩矢。" - -#: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" -msgstr[0] "测试用动力装甲" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" +msgstr[0] "电弧击退光环" -#. ~ Description for {'str': 'test power armor'} +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." -msgstr "一件测试用的动力装甲。" +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." +msgstr "" #: lang/json/BATTERY_from_json.py msgid "test battery" @@ -20525,8 +20440,8 @@ msgid "Aero-Evaporator CBM" msgid_plural "Aero-Evaporator CBMs" msgstr[0] "湿气凝水器CBM" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -21610,8 +21525,8 @@ msgid "Internal Furnace CBM" msgid_plural "Internal Furnace CBMs" msgstr[0] "内燃锅炉CBM" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel" @@ -21710,8 +21625,8 @@ msgid "Wind Turbine CBM" msgid_plural "Wind Turbine CBMs" msgstr[0] "风力发电机CBM" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -21719,18 +21634,6 @@ msgid "" "power level." msgstr "你的身上安装了一排可伸缩的风力发电机。开启后,它们会自动伸出,缓慢收集风能并为你充能生化能量。" -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "精密焊接仪CBM" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire cutters." -" They serve no purpose on their own, but are required for crafting bionics." -msgstr "一套微型电子工具,包括烙铁和钢丝钳。它们本身没有任何用处,但是在制造生化插件时却必不可少。" - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -21784,13 +21687,37 @@ msgid "" "from installation and you don't have the codes to reset the timer." msgstr "一个安装在脊柱和脑干交汇处的炸弹。它在安装时就被设置了一个定时器,而你没有能够重置定时器的代码。" +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "精密焊接仪CBM" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire cutters." +" They serve no purpose on their own, but are required for crafting bionics." +msgstr "一套微型电子工具,包括烙铁和钢丝钳。它们本身没有任何用处,但是在制造生化插件时却必不可少。" + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" msgstr[0] "离子过载发生器CBM" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -21945,6 +21872,33 @@ msgstr[0] "非小说类书籍" msgid "template for a paperback nonfiction book" msgstr "非小说类平装书模板" +#: lang/json/BOOK_from_json.py +msgid "Generic Pulp Book" +msgid_plural "Generic Pulp Books" +msgstr[0] "虚拟低俗小说" + +#. ~ Description for Generic Pulp Book +#: lang/json/BOOK_from_json.py +msgid "" +"This is a template for pulp books. Which really all ought to be paperbacks," +" right?" +msgstr "劣质低俗类书籍的模板。" + +#: lang/json/BOOK_from_json.py +msgid "Generic SciFi Book" +msgid_plural "Generic SciFi Books" +msgstr[0] "虚拟科幻类书籍" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for paperback scifi books." +msgstr "平装科幻类书籍的模板。" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for a hard cover scifi book." +msgstr "精装科幻类书籍的模板。" + #: lang/json/BOOK_from_json.py msgid "Homemaking Book" msgid_plural "Homemaking Books" @@ -23221,8 +23175,8 @@ msgstr[0] "原理图" #. 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py lang/json/TOOL_from_json.py #: lang/json/furniture_from_json.py lang/json/skill_from_json.py @@ -24243,8 +24197,8 @@ msgstr[0] "冒险小说" #: lang/json/BOOK_from_json.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." -msgstr "一本讲述和时间赛跑的激动人心的故事书,讲述了一个搜寻位于非洲大陆黑暗之心的失落城市的故事。" +"in the heart of the African continent." +msgstr "一本讲述和时间赛跑的激动人心的故事书,讲述了一个搜寻位于非洲大陆中心的失落城市的故事。" #: lang/json/BOOK_from_json.py msgid "buddy novel" @@ -24258,25 +24212,6 @@ msgid "" "York City." msgstr "一本讲述了两个朋友如何在纽约街头挣扎生存的小说。" -#: lang/json/BOOK_from_json.py -msgid "coming of age novel" -msgid_plural "coming of age novels" -msgstr[0] "青春小说" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." -msgstr "一本关于成长的经典小说,描绘了一个年轻小伙在生活、爱情、性等方面有趣而辛酸的经历。" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A graphic novel about a young girl living in Iran during the 1980's, seeing " -"the world change around her as Iraq invaded her country." -msgstr "一部图画小说,内容是关于1980年代一个生活在伊朗的年轻女孩,在国家受到伊拉克入侵时,对周遭世界变迁的见闻。" - #: lang/json/BOOK_from_json.py msgid "crime novel" msgid_plural "crime novels" @@ -24393,71 +24328,6 @@ msgstr[0] "悬疑小说" msgid "A detective investigates an unusual murder in a secluded location." msgstr "描述了一个侦探在偏僻地点调查变态杀人狂的凶杀案线索的故事。" -#: lang/json/BOOK_from_json.py -msgid "pulp novel" -msgid_plural "pulp novels" -msgstr[0] "低俗小说" - -#. ~ Description for {'str': 'pulp novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "一本冷硬派的侦探小说,充满着硬派动作与阴谋,由\"文森特和马沙的妻子\"、\"金表\"、\"邦妮的处境\"三个故事组成。" - -#: lang/json/BOOK_from_json.py -msgid "Planet of the Murderous Squids that Time Forgot!" -msgid_plural "Planet of the Murderous Squids that Time Forgot!s" -msgstr[0] "被时间遗忘的杀人乌贼星球" - -#. ~ Description for Planet of the Murderous Squids that Time Forgot! -#: lang/json/BOOK_from_json.py -msgid "" -"In this psychedelic adventure novel of cosmic exploration, an elderly " -"assassin discovers a planet too good to be true. Only once it is too late " -"does she discover the harrowing truth at the center of \"The Planet of the " -"Murderous Squids that Time Forgot!\"" -msgstr "" -"一部关于宇宙探索的迷幻冒险小说,讲述了一位年长的刺客发现了一颗好得难以置信的行星。当她发现位于\"那颗被时间遗忘的杀人乌贼星球\"中心那万分恐怖的真相时,一切都太迟了。" - -#: lang/json/BOOK_from_json.py -msgid "The Great Capes of Metropolis" -msgid_plural "The Great Capes of Metropoliss" -msgstr[0] "大都市中的斗篷英雄们" - -#. ~ Description for The Great Capes of Metropolis -#: lang/json/BOOK_from_json.py -msgid "" -"In this classic pulp paperback of superheroic exploits, a group of masked " -"vigilantes with diverse superpowers learn to work together to defeat the " -"ultimate villain." -msgstr "一本经典的平装超级英雄故事书,描述了一群拥有不同超能力的平民蒙面英雄学习如何齐心战胜终极大反派的故事。" - -#: lang/json/BOOK_from_json.py -msgid "Yesterday's Murdered" -msgid_plural "Yesterday's Murdereds" -msgstr[0] "昨日凶案" - -#. ~ Description for Yesterday's Murdered -#: lang/json/BOOK_from_json.py -msgid "" -"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" -" has one last shot at vengeance." -msgstr "这本快节奏的平装小说讲述了一位拥有好酒量的侦探如何用他钢铁般的意志抓住了最后一次复仇机会。" - -#: lang/json/BOOK_from_json.py -msgid "Flashgun Condor and the Crimson Criminal" -msgid_plural "Flashgun Condor and the Crimson Criminals" -msgstr[0] "快门秃鹰和腥红狂徒" - -#. ~ Description for Flashgun Condor and the Crimson Criminal -#: lang/json/BOOK_from_json.py -msgid "" -"A hot-blooded photographer who fights crime with film, footage, and fists, " -"Condor is more than a mere shutterbug on the crime beat. But will she be " -"able to unravel a devious deception and bring the \"Crimson Criminal\" to " -"justice?" -msgstr "秃鹰不仅仅是一个普通的摄影迷,她是一位用电影、镜头和拳头打击犯罪的热血摄影师。但这次,她能解开这个狡猾的骗局,将\"腥红狂徒\"绳之以法吗?" - #: lang/json/BOOK_from_json.py msgid "road novel" msgid_plural "road novels" @@ -24616,8 +24486,8 @@ msgstr[0] "武士小说" 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." -msgstr "一本经典小说,主要描写了日本战国时代,贫穷家村百姓为保卫家园,与雇来的七位武士联手击退强盗的故事。" +"marauding outlaws. This hardback is quite hefty." +msgstr "一本经典小说,主要描写了日本战国时代,贫穷家村百姓为保卫家园,与雇来的七位武士联手击退强盗的故事。这本精装本还有点重。" #: lang/json/BOOK_from_json.py msgid "satire novel" @@ -24660,17 +24530,19 @@ msgstr "这本《第二十二条军规》平装版有份简短介绍背景的前 #: lang/json/BOOK_from_json.py msgid "The Master and Margarita" -msgid_plural "The Master and Margaritas" +msgid_plural "copies of Master and Margarita" msgstr[0] "大师和玛格丽特" -#. ~ Description for The Master and Margarita +#. ~ Description for {'str': 'The Master and Margarita', 'str_pl': 'copies of +#. Master and Margarita'} #: lang/json/BOOK_from_json.py msgid "" "Featuring a cast that includes Satan, Pontius Pilate, Jesus Christ, " -"vampires, a talking cat, and the literary elite of Moscow, this is a satire " -"on Stalinist tyranny written by Mikhail Bulgakov." +"vampires, a talking cat, and the literary elite of Moscow, this novel by " +"Mikhail Bulgakov explores philosophical issues on the nature of good and " +"evil." msgstr "" -"这是一部由米哈伊尔·布尔加科夫创作的关于斯大林暴政的政治讽刺小说,书中角色包括了撒旦、本丢·彼拉多、耶稣基督、吸血鬼、一只会说话的猫和莫斯科的文艺精英们。" +"一部由米哈伊尔·布尔加科夫创作的探讨了善恶本质的哲学问题的政治讽刺小说,书中角色包括了撒旦、本丢·彼拉多、耶稣基督、吸血鬼、一只会说话的猫和莫斯科的文艺精英们。" #: lang/json/BOOK_from_json.py msgid "A Handful of Dust" @@ -24697,350 +24569,6 @@ msgid "" msgstr "" "库尔特·冯内古特第四本小说的平装本,书中核毁灭对人性并没有太大的影响。(译注:书中核弹的制造者在核弹被扔向人类时正在玩“猫的摇篮”,一种翻花绳游戏)" -#: lang/json/BOOK_from_json.py -msgid "scifi novel" -msgid_plural "scifi novels" -msgstr[0] "科幻小说" - -#. ~ Description for {'str': 'scifi novel'} -#: lang/json/BOOK_from_json.py -msgid "Aliens, ray guns, and space ships." -msgstr "一本充斥着各类外星人、激光枪以及太空飞船描写的小说。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" -" surprisingly accurate in predicting much of modern society… Until " -"recently." -msgstr "" -"这是一本威廉·吉布森的《神经漫游者》。虽然成书于上世纪80年代,但这本科幻经典令人惊奇地精准预测了许多现代社会的情形……但并不包括如今的情况。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" -"\n" -"Tyger, Tyger, Burning bright,\n" -"In the forests of the night:\n" -"What immortal hand or eye,\n" -"Dare frame thy fearful symmetry?" -msgstr "" -"这是一本DC著名编剧、科幻作家阿尔弗雷德·贝斯特 所著的《群星,我的归宿》(又名《虎,虎》),书名源于威廉·布莱克的名诗《老虎》。\n" -"\n" -"“虎,虎,光焰灼灼\n" -"燃烧在黑夜之林,\n" -"怎样的神手和神眼\n" -"构造出你可畏的美健?”\n" -"(选自《老虎》张炽恒译)" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" -"stains have smudged the occasional word." -msgstr "这是一本厄休拉·勒奎恩所著的《天钧》。这本书被人用脏手拿过,所以有些词被污迹覆盖了。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." -msgstr "这是一本著名科幻作家厄休拉·勒奎恩所著的雨果奖、星云奖获奖作品《一无所有》。" - -#: lang/json/BOOK_from_json.py -msgid "This copy of Ray Bradbury's \"Fahrenheit 451\"." -msgstr "这是一本著名科幻作家雷·布莱伯利所著的反乌托邦小说《华氏451度》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Hyperion\" by Dan Simmons." -msgstr "这是一本天才科幻作家丹·西蒙斯的雨果奖获奖作品、著名的“海伯利安四部曲”中的第一部《海伯利安》。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" -"\n" -"Give us gods. Oh give them us!\n" -"Give us gods.\n" -"We are so tired of men\n" -"And motor-power." -msgstr "" -"这是一本天才科幻作家丹·西蒙斯的获奖作品、著名的“海伯利安四部曲”的第三部《安迪密恩》。它以一段戴维·赫伯特·劳伦斯的诗作开篇:\n" -"\n" -"“赐予我们神灵吧,\n" -"哦,请把他们赐予我们吧!\n" -"赐予我们神灵吧。\n" -"我们是如此地厌倦,\n" -"凡人和发动机。”\n" -"(选自《Give us Gods》,翻译来自网络,原诗可登陆https://kalliope.org/en/text/lawrence2001061108 查看)" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." -msgstr "这是一本由著名科幻作家菲利普·K·迪克所著的科幻名篇《仿生人会梦见电子羊吗?》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." -msgstr "一本被翻旧了的《新星快递》,由威廉·巴勒斯所著。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " -"ripped off." -msgstr "这是一本由全球知名科幻作家艾萨克·阿西莫夫所著的、享誉全球的”基地系列“第一部《基地》。它的封底已经被撕掉了。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " -"some of its pages. Weird." -msgstr "这是一本折了角的《沙丘》,由著名科幻作家弗兰克·赫伯特所著。这本《沙丘》的一些书页之间夹了些沙子,真奇怪。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." -msgstr "这是一本弗兰兹·卡夫卡的经典文学著作《审判》。这本书已经被翻得破旧不堪了。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." -msgstr "这是一本加拿大小说家玛格丽特·阿特伍德的文学著作《使女的故事》。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " -"you wonder how Thailand fared the end of the world." -msgstr "这是一本科幻作家保罗·巴奇加卢皮所著的科幻大奖作品《发条女孩》。这本书的简介使你不禁思索遥远的泰国是如何度过这个末日的。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." -msgstr "这是一本赛博朋克背景的科幻小说《网上的孤岛》,由赛博朋克之父、著名科幻作家布鲁斯·斯特林所著。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " -"contains a hand-written grocery list." -msgstr "这是一本由全球知名科幻作家艾萨克·阿西莫夫所著的、享誉全球的”基地系列“第二部《基地与帝国》。它的封底上被人写了一页超市购物单。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " -"still has the smell of new books within its pages." -msgstr "" -"这是一本几乎全新的《遮蔽的眼睛》(又译《黑暗扫描仪》《心机扫描》《盲区行者》),由著名科幻作家菲利普·K·迪克所著。翻开它的时候,你仍然能闻到新书特有的油墨香气。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " -"Sterling. The cover has rings of coffee stains over it." -msgstr "这是一本由赛博朋克之父布鲁斯·斯特林编撰的《镜影:赛博朋克文集》。它的封面上残留着晕开的咖啡渍。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " -"looks to have been used to press flowers." -msgstr "这是一本由著名科幻作家范·沃克特所著的科幻著作《非A世界》。这本书看起来好像被原主人用来做过压花。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." -msgstr "这是一本科幻作家理查德·摩根所著的科幻作品《副本》(同名网剧在Netfix上映)。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " -"the monster?" -msgstr "这是一本由世界上第一位科幻作家玛丽·雪莱所著的世界上第一本科幻作品《弗兰肯斯坦》。这不就是那种怪物的名字吗?" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" -" handbook." -msgstr "这是一本英国早期科幻作家埃里克·弗兰克·拉塞尔所著的科幻作品《黄蜂》(1957)。这简直就是一本为未来主义恐怖分子量身打造的手册。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " -"covered in dried blood." -msgstr "" -"这是一本由著名编剧、科幻小说家理查德·麦瑟森所著的《我是传奇》(同名电影由弗朗西斯·劳伦斯导演、威尔·史密斯主演)。这本书的封套上沾染了干掉的血渍。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Roadside Picnic\" by Arkady and Boris Strugatsky." -msgstr "这是一本由著名科幻作家阿尔迪与鲍里斯·斯特里加茨基兄弟合著的科幻作品《路边野餐》。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " -"if it's been slightly chewed by a dog or other large animal." -msgstr "这是一本由著名科幻作家乔`霍尔德曼所著的《永世之战》(1974)。这本书看起来破烂得就像被狗或者别的大型动物嚼过一小会。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." -msgstr "这是一本由硬科幻大师罗伯特·A·海因莱因所著的《严厉的月亮》(又译《月亮是冷傲的情人》)。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Cat's Cradle\" by Kurt Vonnegut. You notice there is a " -"typo in the authors name on the spine of the book." -msgstr "这是一本由著名黑色幽默作家库尔特·冯内古特所著的科幻讽刺作品《猫的摇篮》。你发现书脊上的作者名字拼错了。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " -"Copy. Not for re-sale.\"" -msgstr "这是一本著名后现代科幻作家萨缪尔·R·德兰尼的科幻著作《新星》。这本书的封面上写着“赠阅本,非卖品”。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." -msgstr "这是一本由著名黑色幽默作家库尔特·冯古内特所著的科幻小说《泰坦族的海妖》(1959)。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " -"the first pages in crayon." -msgstr "这是一本由美国女性主义奇幻科幻作家雪莉.泰珀所著的科幻奇幻作品《草》。有个孩子曾在封面上用蜡笔涂鸦。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " -"with 'Library Copy'. And a sticker reading 'Science Fiction'." -msgstr "这是一本由著名科幻作家威廉·吉布森所著的著名科幻小说《零伯爵》。书脊上盖着“图书馆藏书”的章,还贴了一个“科幻小说”的分类贴纸。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Fifth Season\" by N.K. Jemsin. It smells faintly of" -" dirt." -msgstr "这是一本由科幻作家N·K·杰姆森所著的2016年获奖作品《第五季》。它闻起来有一股微弱的泥土味。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." -msgstr "这是一本由著名科幻作家A.E.范·沃克特所著的科幻作品《武器制造商》。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" -" almost brand new." -msgstr "这是一本由2019年雨果奖入围作家贝基·钱伯斯创作的长篇科幻小说《太空出生者的少数派报告》。它看起来几乎是全新的。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " -"and worn, some pages appear to be loose." -msgstr "" -"这是一本由著名科幻小说作家伊恩·班克斯所著的太空歌剧《武器制造商》(又译《武器浮生录》)。这本书的书脊被扯破了,有些书页看起来已经变得松动。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." -msgstr "这是一本由法国作家让-巴普提斯特·库辛·德·格兰维尔所著的《最后一个人类》。这是世界上第一部描述世界末日的现代推想小说。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " -"and thin. You should probably be careful with this copy." -msgstr "这是一本乔治·奥威尔的著名反乌托邦小说《一九八四》。这本书的书页又松又薄,你得小心别把它弄坏了。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " -"dog-eared and worn." -msgstr "这是一本著名硬科幻大师罗伯特·安森·海因莱因所著的科幻文学作品《异乡异客》。它的封面已经卷边破损了。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." -msgstr " 这是一本著名科幻作家奥森·斯科特·卡德创作的雨果奖、星云奖获奖作品《安德的游戏》(1986)。" - -#: lang/json/BOOK_from_json.py -msgid "This is a weather worn copy of \"Brave New World\" by Aldous Huxley." -msgstr "这是一本饱经风霜的反乌托邦著作《美丽新世界》,由著名作家阿道司·赫胥黎所著。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." -msgstr "这是一本由著名推理小说家、福尔摩斯之父阿瑟·柯南·道尔所著的著名科幻小说《迷失的世界》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." -msgstr "这是一本由世界知名科幻小说家阿瑟·C·克拉克所创作的科幻作品《空中列岛》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." -msgstr "这是一本由世界知名小说家、政治家H·G·威尔斯所创作的科幻著作《莫洛博士岛》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." -msgstr "这是一本由波兰著名天才科幻作家、哲学家斯坦尼斯拉夫·莱姆所创作的科幻小说《其主之声》(1968)。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." -msgstr "这是一本由英国著名天文学家弗雷德·霍伊尔所创作的科幻小说《黑云压境》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." -msgstr "这是一本由英国哲学家、科幻作家奥拉夫·斯塔普雷创作的科幻著作《最后和最先的人》(1930)。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"Solaris\"." -msgstr "这是一本由波兰著名天才科幻作家、哲学家斯坦尼斯拉夫·莱姆所创作的著名克苏鲁风格科幻小说《索拉里斯星》(同名电影被翻拍多次)。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." -msgstr "这是一本由著名科幻小说作家西奥多·斯特金所著的国际幻想文学奖获奖作品《超人类》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Vurt\" by Jeff Noon." -msgstr "这是一本由著名赛博朋克作家杰夫·努恩所创作的科幻小说《瓦尔特》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." -msgstr "这是一本由美国科幻小说家小沃尔特·M·米勒所创作的科幻著作《莱伯维茨的赞歌》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." -msgstr "这是一本由世界知名小说家、政治家H·G·威尔斯所创作的科幻著作《星际战争》(又译《世界之战》、《世界大战》、《强战世界》)。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." -msgstr "这是一本由英国科幻小说家查尔斯·斯特罗斯创作的科幻小说《末日奇点:钢铁朝阳》(《奇点天空》续作)。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " -"blurb reminds you of a Japanese movie you think you once caught on the " -"television late at night." -msgstr "这是一本由全美著名畅销小说作家苏珊妮·科林斯所创作的《饥饿游戏》。看到封面上的宣传语,你不禁想起一部曾在深夜里偶然在电视上瞥见的日本电影。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." -msgstr "" -"这是一本由著名短篇科幻小说家约翰·温德汉姆创作的著名科幻小说《三尖树之日》(又译《三尖树时代》)。\n" -"(译注:这本书就是cdda中三尖树怪物的出处)" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." -msgstr "这是一本由著名作家安东尼·伯吉斯所著的青春幻想小说《发条橙》。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." -msgstr "" -"这是一本由科幻作家沃尔特·特维斯创作的科幻小说《天外来客》(翻拍为同名电影(1976)、电视剧(1987),或将在2020年再次翻拍为电视剧)。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." -msgstr "" -"这是一本由著名科幻小说家丹尼尔·弗朗西斯·伽洛耶所著的赛博朋克经典著作《三重模拟》(又译《十三层空间》,不知道多了的十层是哪里来的)。这是科幻文学史上第一部描写虚拟现实技术的小说。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." -msgstr "这是一本由德国著名作家恩斯特·荣格创作的科幻小说《玻璃蜜蜂》,其中探讨了纳米机器人的未来。" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." -msgstr "这是一本由全球知名的法国科幻小说大师儒勒·凡尔纳创作的知名科幻巨著《地心游记》。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " -"missing from the end of the book. Luckily only mail-order advertisements." -msgstr "" -"这是一本由著名科幻小说作家拉里·尼文所创作的星云奖、雨果奖、轨迹奖获奖作品、世界公认硬科幻大师之作《环形世界》。这本书最后几页不幸遗失了,但幸好那只是一些邮购广告。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " -"Douglas Adams." -msgstr "这是一本被翻旧的科幻著作《银河系漫游指南》,由著名科幻作家道格拉斯·亚当斯所著。" - #: lang/json/BOOK_from_json.py msgid "spy novel" msgid_plural "spy novels" @@ -26206,6 +25734,600 @@ msgid "" " key work in the existentialist tradition." msgstr "一本平装版的《存在与虚无》,让-保罗·萨特著,存在主义的重要著作。" +#: lang/json/BOOK_from_json.py +msgid "pulp novel" +msgid_plural "pulp novels" +msgstr[0] "低俗小说" + +#. ~ Description for {'str': 'pulp novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hardboiled detective tale filled with hard hitting action and intrigue." +msgstr "一本冷硬派的侦探小说,充满着硬派动作与阴谋,由\"文森特和马沙的妻子\"、\"金表\"、\"邦妮的处境\"三个故事组成。" + +#: lang/json/BOOK_from_json.py +msgid "Black Valkyries From Venus" +msgid_plural "copies of Black Valkyries" +msgstr[0] "来自火星的黑色女武神" + +#. ~ Description for {'str': 'Black Valkyries From Venus', 'str_pl': 'copies +#. of Black Valkyries'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a weather-beaten novel written by someone named \"Lee" +" Racket.\"" +msgstr "你手里拿着一本饱经风霜的小说,这本小说是由一个名叫“李·勒克”的人写的。" + +#: lang/json/BOOK_from_json.py +msgid "The Wrong Tomorrow" +msgid_plural "copies of Wrong Tomorrow" +msgstr[0] "错误的未来" + +#. ~ Description for {'str': 'The Wrong Tomorrow', 'str_pl': 'copies of Wrong +#. Tomorrow'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a cheap drugstore paperback written by someone named " +"\"Lee Racket.\"" +msgstr "你手里拿着一本廉价的药店平装小说,这本小说是由一个名叫“李·勒克”的人写的。" + +#: lang/json/BOOK_from_json.py +msgid "No God From a Corpse" +msgid_plural "copies of No God" +msgstr[0] "没有来自尸体的神灵" + +#. ~ Description for {'str': 'No God From a Corpse', 'str_pl': 'copies of No +#. God'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a weatherworn paperback written by some skirt named \"Lee Racket.\"" +" It tells how rage and jealousy can turn a man, or a woman, into a monster." +" This story is hard-boiled enough to break a spoon." +msgstr "" +"一本由名为“李·勒克”的人写的粗糙平装小说,讲述了愤怒和嫉妒是如何把一个男人,或女人,变成怪物的。这本小说太过冷峻,以至于连勺子都能砸弯了。" + +#: lang/json/BOOK_from_json.py +msgid "The Deep Dive" +msgid_plural "copies of Deep Dive" +msgstr[0] "深潜" + +#. ~ Description for {'str': 'The Deep Dive', 'str_pl': 'copies of Deep Dive'} +#: lang/json/BOOK_from_json.py +msgid "" +"This dimestore short story about space travel is written by a broad named " +"\"Lee Racket.\"" +msgstr "一部关于太空旅行的短篇小说,这本小说是由一个名叫“李·勒克”的人写的。" + +#: lang/json/BOOK_from_json.py +msgid "Planet of the Murderous Squids that Time Forgot!" +msgid_plural "Planet of the Murderous Squids that Time Forgot!s" +msgstr[0] "被时间遗忘的杀人乌贼星球" + +#. ~ Description for Planet of the Murderous Squids that Time Forgot! +#: lang/json/BOOK_from_json.py +msgid "" +"In this psychedelic adventure novel of cosmic exploration, an elderly " +"assassin discovers a planet too good to be true. Only once it is too late " +"does she discover the harrowing truth at the center of \"The Planet of the " +"Murderous Squids that Time Forgot!\"" +msgstr "" +"一部关于宇宙探索的迷幻冒险小说,讲述了一位年长的刺客发现了一颗好得难以置信的行星。当她发现位于\"那颗被时间遗忘的杀人乌贼星球\"中心那万分恐怖的真相时,一切都太迟了。" + +#: lang/json/BOOK_from_json.py +msgid "The Great Capes of Metropolis" +msgid_plural "The Great Capes of Metropoliss" +msgstr[0] "大都市中的斗篷英雄们" + +#. ~ Description for The Great Capes of Metropolis +#: lang/json/BOOK_from_json.py +msgid "" +"In this classic pulp paperback of superheroic exploits, a group of masked " +"vigilantes with diverse superpowers learn to work together to defeat the " +"ultimate villain." +msgstr "一本经典的平装超级英雄故事书,描述了一群拥有不同超能力的平民蒙面英雄学习如何齐心战胜终极大反派的故事。" + +#: lang/json/BOOK_from_json.py +msgid "Yesterday's Murdered" +msgid_plural "Yesterday's Murdereds" +msgstr[0] "昨日凶案" + +#. ~ Description for Yesterday's Murdered +#: lang/json/BOOK_from_json.py +msgid "" +"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" +" has one last shot at vengeance." +msgstr "这本快节奏的平装小说讲述了一位拥有好酒量的侦探如何用他钢铁般的意志抓住了最后一次复仇机会。" + +#: lang/json/BOOK_from_json.py +msgid "Flashgun Condor and the Crimson Criminal" +msgid_plural "Flashgun Condor and the Crimson Criminals" +msgstr[0] "快门秃鹰和腥红狂徒" + +#. ~ Description for Flashgun Condor and the Crimson Criminal +#: lang/json/BOOK_from_json.py +msgid "" +"A hot-blooded photographer who fights crime with film, footage, and fists, " +"Condor is more than a mere shutterbug on the crime beat. But will she be " +"able to unravel a devious deception and bring the \"Crimson Criminal\" to " +"justice?" +msgstr "秃鹰不仅仅是一个普通的摄影迷,她是一位用电影、镜头和拳头打击犯罪的热血摄影师。但这次,她能解开这个狡猾的骗局,将\"腥红狂徒\"绳之以法吗?" + +#: lang/json/BOOK_from_json.py +msgid "scifi novel" +msgid_plural "scifi novels" +msgstr[0] "科幻小说" + +#. ~ Description for {'str': 'scifi novel'} +#: lang/json/BOOK_from_json.py +msgid "Aliens, ray guns, and space ships." +msgstr "一本充斥着各类外星人、激光枪以及太空飞船描写的小说。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" +" surprisingly accurate in predicting much of modern society… Until " +"recently." +msgstr "" +"这是一本威廉·吉布森的《神经漫游者》。虽然成书于上世纪80年代,但这本科幻经典令人惊奇地精准预测了许多现代社会的情形……但并不包括如今的情况。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" +"\n" +"Tyger, Tyger, Burning bright,\n" +"In the forests of the night:\n" +"What immortal hand or eye,\n" +"Dare frame thy fearful symmetry?" +msgstr "" +"这是一本DC著名编剧、科幻作家阿尔弗雷德·贝斯特 所著的《群星,我的归宿》(又名《虎,虎》),书名源于威廉·布莱克的名诗《老虎》。\n" +"\n" +"“虎,虎,光焰灼灼\n" +"燃烧在黑夜之林,\n" +"怎样的神手和神眼\n" +"构造出你可畏的美健?”\n" +"(选自《老虎》张炽恒译)" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" +"stains have smudged the occasional word." +msgstr "这是一本厄休拉·勒奎恩所著的《天钧》。这本书被人用脏手拿过,所以有些词被污迹覆盖了。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." +msgstr "这是一本著名科幻作家厄休拉·勒奎恩所著的雨果奖、星云奖获奖作品《一无所有》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Hyperion\" by Dan Simmons." +msgstr "这是一本天才科幻作家丹·西蒙斯的雨果奖获奖作品、著名的“海伯利安四部曲”中的第一部《海伯利安》。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" +"\n" +"Give us gods. Oh give them us!\n" +"Give us gods.\n" +"We are so tired of men\n" +"And motor-power." +msgstr "" +"这是一本天才科幻作家丹·西蒙斯的获奖作品、著名的“海伯利安四部曲”的第三部《安迪密恩》。它以一段戴维·赫伯特·劳伦斯的诗作开篇:\n" +"\n" +"“赐予我们神灵吧,\n" +"哦,请把他们赐予我们吧!\n" +"赐予我们神灵吧。\n" +"我们是如此地厌倦,\n" +"凡人和发动机。”\n" +"(选自《Give us Gods》,翻译来自网络,原诗可登陆https://kalliope.org/en/text/lawrence2001061108 查看)" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." +msgstr "这是一本由著名科幻作家菲利普·K·迪克所著的科幻名篇《仿生人会梦见电子羊吗?》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." +msgstr "一本被翻旧了的《新星快递》,由威廉·巴勒斯所著。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " +"ripped off." +msgstr "这是一本由全球知名科幻作家艾萨克·阿西莫夫所著的、享誉全球的”基地系列“第一部《基地》。它的封底已经被撕掉了。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." +msgstr "这是一本弗兰兹·卡夫卡的经典文学著作《审判》。这本书已经被翻得破旧不堪了。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." +msgstr "这是一本加拿大小说家玛格丽特·阿特伍德的文学著作《使女的故事》。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " +"you wonder how Thailand fared the end of the world." +msgstr "这是一本科幻作家保罗·巴奇加卢皮所著的科幻大奖作品《发条女孩》。这本书的简介使你不禁思索遥远的泰国是如何度过这个末日的。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." +msgstr "这是一本赛博朋克背景的科幻小说《网上的孤岛》,由赛博朋克之父、著名科幻作家布鲁斯·斯特林所著。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " +"contains a hand-written grocery list." +msgstr "这是一本由全球知名科幻作家艾萨克·阿西莫夫所著的、享誉全球的”基地系列“第二部《基地与帝国》。它的封底上被人写了一页超市购物单。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " +"still has the smell of new books within its pages." +msgstr "" +"这是一本几乎全新的《遮蔽的眼睛》(又译《黑暗扫描仪》《心机扫描》《盲区行者》),由著名科幻作家菲利普·K·迪克所著。翻开它的时候,你仍然能闻到新书特有的油墨香气。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " +"Sterling. The cover has rings of coffee stains over it." +msgstr "这是一本由赛博朋克之父布鲁斯·斯特林编撰的《镜影:赛博朋克文集》。它的封面上残留着晕开的咖啡渍。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " +"looks to have been used to press flowers." +msgstr "这是一本由著名科幻作家范·沃克特所著的科幻著作《非A世界》。这本书看起来好像被原主人用来做过压花。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." +msgstr "这是一本科幻作家理查德·摩根所著的科幻作品《副本》(同名网剧在Netfix上映)。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " +"the monster?" +msgstr "这是一本由世界上第一位科幻作家玛丽·雪莱所著的世界上第一本科幻作品《弗兰肯斯坦》。这不就是那种怪物的名字吗?" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" +" handbook." +msgstr "这是一本英国早期科幻作家埃里克·弗兰克·拉塞尔所著的科幻作品《黄蜂》(1957)。这简直就是一本为未来主义恐怖分子量身打造的手册。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " +"covered in dried blood." +msgstr "" +"这是一本由著名编剧、科幻小说家理查德·麦瑟森所著的《我是传奇》(同名电影由弗朗西斯·劳伦斯导演、威尔·史密斯主演)。这本书的封套上沾染了干掉的血渍。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " +"if it's been slightly chewed by a dog or other large animal." +msgstr "这是一本由著名科幻作家乔`霍尔德曼所著的《永世之战》(1974)。这本书看起来破烂得就像被狗或者别的大型动物嚼过一小会。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." +msgstr "这是一本由硬科幻大师罗伯特·A·海因莱因所著的《严厉的月亮》(又译《月亮是冷傲的情人》)。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " +"Copy. Not for re-sale.\"" +msgstr "这是一本著名后现代科幻作家萨缪尔·R·德兰尼的科幻著作《新星》。这本书的封面上写着“赠阅本,非卖品”。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." +msgstr "这是一本由著名黑色幽默作家库尔特·冯古内特所著的科幻小说《泰坦族的海妖》(1959)。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " +"the first pages in crayon." +msgstr "这是一本由美国女性主义奇幻科幻作家雪莉.泰珀所著的科幻奇幻作品《草》。有个孩子曾在封面上用蜡笔涂鸦。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " +"with 'Library Copy'. And a sticker reading 'Science Fiction'." +msgstr "这是一本由著名科幻作家威廉·吉布森所著的著名科幻小说《零伯爵》。书脊上盖着“图书馆藏书”的章,还贴了一个“科幻小说”的分类贴纸。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." +msgstr "这是一本由著名科幻作家A.E.范·沃克特所著的科幻作品《武器制造商》。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" +" almost brand new." +msgstr "这是一本由2019年雨果奖入围作家贝基·钱伯斯创作的长篇科幻小说《太空出生者的少数派报告》。它看起来几乎是全新的。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " +"and worn, some pages appear to be loose." +msgstr "" +"这是一本由著名科幻小说作家伊恩·班克斯所著的太空歌剧《武器制造商》(又译《武器浮生录》)。这本书的书脊被扯破了,有些书页看起来已经变得松动。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." +msgstr "这是一本由法国作家让-巴普提斯特·库辛·德·格兰维尔所著的《最后一个人类》。这是世界上第一部描述世界末日的现代推想小说。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " +"and thin. You should probably be careful with this copy." +msgstr "这是一本乔治·奥威尔的著名反乌托邦小说《一九八四》。这本书的书页又松又薄,你得小心别把它弄坏了。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " +"dog-eared and worn." +msgstr "这是一本著名硬科幻大师罗伯特·安森·海因莱因所著的科幻文学作品《异乡异客》。它的封面已经卷边破损了。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." +msgstr " 这是一本著名科幻作家奥森·斯科特·卡德创作的雨果奖、星云奖获奖作品《安德的游戏》(1986)。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." +msgstr "这是一本由著名推理小说家、福尔摩斯之父阿瑟·柯南·道尔所著的著名科幻小说《迷失的世界》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." +msgstr "这是一本由世界知名科幻小说家阿瑟·C·克拉克所创作的科幻作品《空中列岛》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." +msgstr "这是一本由世界知名小说家、政治家H·G·威尔斯所创作的科幻著作《莫洛博士岛》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." +msgstr "这是一本由波兰著名天才科幻作家、哲学家斯坦尼斯拉夫·莱姆所创作的科幻小说《其主之声》(1968)。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." +msgstr "这是一本由英国著名天文学家弗雷德·霍伊尔所创作的科幻小说《黑云压境》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." +msgstr "这是一本由英国哲学家、科幻作家奥拉夫·斯塔普雷创作的科幻著作《最后和最先的人》(1930)。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"Solaris\"." +msgstr "这是一本由波兰著名天才科幻作家、哲学家斯坦尼斯拉夫·莱姆所创作的著名克苏鲁风格科幻小说《索拉里斯星》(同名电影被翻拍多次)。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." +msgstr "这是一本由著名科幻小说作家西奥多·斯特金所著的国际幻想文学奖获奖作品《超人类》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Vurt\" by Jeff Noon." +msgstr "这是一本由著名赛博朋克作家杰夫·努恩所创作的科幻小说《瓦尔特》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." +msgstr "这是一本由美国科幻小说家小沃尔特·M·米勒所创作的科幻著作《莱伯维茨的赞歌》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." +msgstr "这是一本由世界知名小说家、政治家H·G·威尔斯所创作的科幻著作《星际战争》(又译《世界之战》、《世界大战》、《强战世界》)。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." +msgstr "这是一本由英国科幻小说家查尔斯·斯特罗斯创作的科幻小说《末日奇点:钢铁朝阳》(《奇点天空》续作)。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " +"blurb reminds you of a Japanese movie you think you once caught on the " +"television late at night." +msgstr "这是一本由全美著名畅销小说作家苏珊妮·科林斯所创作的《饥饿游戏》。看到封面上的宣传语,你不禁想起一部曾在深夜里偶然在电视上瞥见的日本电影。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." +msgstr "" +"这是一本由著名短篇科幻小说家约翰·温德汉姆创作的著名科幻小说《三尖树之日》(又译《三尖树时代》)。\n" +"(译注:这本书就是cdda中三尖树怪物的出处)" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." +msgstr "这是一本由著名作家安东尼·伯吉斯所著的青春幻想小说《发条橙》。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." +msgstr "" +"这是一本由科幻作家沃尔特·特维斯创作的科幻小说《天外来客》(翻拍为同名电影(1976)、电视剧(1987),或将在2020年再次翻拍为电视剧)。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." +msgstr "" +"这是一本由著名科幻小说家丹尼尔·弗朗西斯·伽洛耶所著的赛博朋克经典著作《三重模拟》(又译《十三层空间》,不知道多了的十层是哪里来的)。这是科幻文学史上第一部描写虚拟现实技术的小说。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." +msgstr "这是一本由德国著名作家恩斯特·荣格创作的科幻小说《玻璃蜜蜂》,其中探讨了纳米机器人的未来。" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." +msgstr "这是一本由全球知名的法国科幻小说大师儒勒·凡尔纳创作的知名科幻巨著《地心游记》。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " +"missing from the end of the book. Luckily only mail-order advertisements." +msgstr "" +"这是一本由著名科幻小说作家拉里·尼文所创作的星云奖、雨果奖、轨迹奖获奖作品、世界公认硬科幻大师之作《环形世界》。这本书最后几页不幸遗失了,但幸好那只是一些邮购广告。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " +"Douglas Adams." +msgstr "这是一本被翻旧的科幻著作《银河系漫游指南》,由著名科幻作家道格拉斯·亚当斯所著。" + +#: lang/json/BOOK_from_json.py +msgid "Dune" +msgid_plural "copies of Dune" +msgstr[0] "沙丘" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " +"some of its pages. Weird." +msgstr "这是一本折了角的《沙丘》,由著名科幻作家弗兰克·赫伯特所著。这本《沙丘》的一些书页之间夹了些沙子,真奇怪。" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Dune\" by Frank Herbert. It is a fairly new " +"reprint with the words \"SOON TO BE A MAJOR MOTION PICTURE\" splashed across" +" its dust jacket." +msgstr "一本结实的弗兰克·赫伯特所著的《沙丘》的复刻本。它是最近才出版的重印本,在它附带的防尘套上面喷印着“剧场版即将上映”的文字。" + +#: lang/json/BOOK_from_json.py +msgid "Parable of the Talents" +msgid_plural "copies of Parable of the Talents" +msgstr[0] "天才寓言" + +#. ~ Description for {'str': 'Parable of the Talents', 'str_pl': 'copies of +#. Parable of the Talents'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Parable of the Talents.\". It is Octavia " +"Butler's sequel to her book \"Parable of the Sower.\"" +msgstr "一本结实的《天才寓言》。此书是奥克塔维亚·巴特勒所著《播种者寓言》的续集。" + +#: lang/json/BOOK_from_json.py +msgid "The Fifth Season" +msgid_plural "signed copies of Fifth Season" +msgstr[0] "第五季" + +#. ~ Description for {'str': 'The Fifth Season', 'str_pl': 'signed copies of +#. Fifth Season'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a signed hardcover copy of the Hugo award winning \"The Fifth " +"Season\" by N.K. Jemisin. It smells faintly of dirt." +msgstr "这是一本由科幻作家N·K·杰米辛所著的2016年雨果奖获奖作品《第五季》的作者签名精装版。它闻起来有一股微弱的泥土味。" + +#: lang/json/BOOK_from_json.py +msgid "We" +msgid_plural "copies of We" +msgstr[0] "我们" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"This hardback book is titled \"The Annotated We: A New Translation of Evgeny Zamiatin's Novel.\"\n" +"\n" +"It is Vladimir Wozniuk's 2015 translation of \"We,\" originally published in 1924 and generally seen as the first modern dystopian novel. The commentary examines the profusive allusions and highlights the poetic nature of Zamiatin's language." +msgstr "" +"这本精装书的标题是《注释〈我们〉:叶夫根尼·扎米亚金小说的新译本》。\n" +"\n" +"此书是由弗拉基米尔·沃兹尼克于2015年重新翻译的《我们》,原版最初出版于1924年,被普遍视为第一部现代反乌托邦小说。新书中注释详细介绍了丰富的历史典故并突出了扎米亚金小说语言中所富有的诗意。" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"A seminal work of dystopian fiction, Evgeny Zamiatin's \"We\" was first published in 1924 but suppresed by the Soviet Union until 1988.\n" +"\n" +"This mass-market 1993 edition you've found was translated from the Russian by Clarence Brown and includes a short introduction. The slightly worn cover features a surrealist photo of a person gazing backward suspiciouly." +msgstr "" +"作为反乌托邦小说的开创性作品,叶夫根尼·扎米亚金的《我们》于1924年首次出版,但苏联一直到1988年才将其解禁。\n" +"\n" +"你手中这本书是1993年批量出版翻译自俄文的版本,由克拉伦斯·布朗翻译,包括一个简短的前言介绍。略显破旧的封面上有一张超现实主义的照片,照片中一个人怀疑地向身后凝视着。" + +#: lang/json/BOOK_from_json.py +msgid "The Cyberiad" +msgid_plural "copies of The Cyberiad" +msgstr[0] "赛博利亚特" + +#. ~ Description for {'str': 'The Cyberiad', 'str_pl': 'copies of The +#. Cyberiad'} +#: lang/json/BOOK_from_json.py +msgid "" +"This 350 page paperback presents the exploits and robotic rivalries of Trurl" +" and Klapaucius. Originally written in Polish by Stanislaw Lem, it has been" +" masterfully translated into English by Michael Kandel." +msgstr "" +"这本350页的平装书介绍了造物者图尔和克莱鲍修斯的功绩和它们之间的机器人竞争。此书最初是由斯坦尼斯拉夫·莱姆用波兰语写成的,后来被迈克尔·坎德尔熟练地翻译成英译本。" + +#: lang/json/BOOK_from_json.py +msgid "Brave New World" +msgid_plural "copies of Brave New World" +msgstr[0] "美丽新世界" + +#. ~ Description for {'str': 'Brave New World', 'str_pl': 'copies of Brave New +#. World'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is weather worn copy of \"Brave New World\" by Aldous Huxley looks like" +" it has been left out in rain. The novel begins in a bleak building where " +"fetuses are grown in bottles on an assembly line." +msgstr "" +"一本奥尔德斯·赫胥黎所著的经典小说《美丽新世界》,看起来像是被雨淋过一般饱经风霜。这部小说的故事开始于一座凄惨建筑之中,在那里,胎儿是在流水线上的瓶子中长大的。" + +#: lang/json/BOOK_from_json.py +msgid "Roadside Picnic" +msgid_plural "copies of Roadside Picnic" +msgstr[0] "路边野餐" + +#. ~ Description for {'str': 'Roadside Picnic', 'str_pl': 'copies of Roadside +#. Picnic'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a paperback copy of \"Roadside Picnic\" by Arkady and Boris " +"Strugatsky. It has been translated into over 20 languages, occasionally " +"under the name \"Stalker.\" This copy, fortunately for you, just happens to" +" be in your native tongue." +msgstr "" +"一本阿卡迪和鲍里斯·斯特鲁伽茨基兄弟所著《路边野餐》的平装本。这本书已经被翻译成20多种语言,偶尔还被冠以《潜行者》的名字。幸运的是,这本书正好是你母语的译本。" + +#: lang/json/BOOK_from_json.py +msgid "Fahrenheit 451" +msgid_plural "copies of Fahrenheit 451" +msgstr[0] "华氏451度" + +#. ~ Description for {'str': 'Fahrenheit 451', 'str_pl': 'copies of Fahrenheit +#. 451'} +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "这是一本著名科幻作家雷·布雷德伯里所著的反乌托邦小说《华氏451度》。" + +#: lang/json/BOOK_from_json.py +msgid "" +"Some joker has gently burnt the exterior edge of this paperback dystopia. " +"It's still perfectly readable." +msgstr "一些爱开玩笑的人轻轻地烧焦了这边平装本反乌托邦小说的外部边缘。书仍然是完整可读的。" + +#: lang/json/BOOK_from_json.py +msgid "" +"\"It was a pleasure to burn. It was a special pleasure to see things eaten," +" to see things blackened and changed.\"" +msgstr "这本书封面写着:“燃烧是一种乐趣。看到吃的东西,看到变黑变黑的东西,我感到特别高兴。”" + +#: lang/json/BOOK_from_json.py +msgid "" +"This 1979 softcover edition of Ray Bradbury's \"Fahrenheit 451\" was once a " +"library book. It still has a light blue checkout card pocketed on the torn " +"back cover. One \"Suzanne Collins\" borrowed it in 1981." +msgstr "" +"这部1979年出版的雷·布雷德伯里所著的《华氏451度》的软封面版曾经是一本图书馆的书。在它被撕破的后封面上仍然插着一张浅蓝色的借阅卡。最后记录显示在1981年被一个叫做“苏珊娜·柯林斯”的人借走了它。" + +#: lang/json/BOOK_from_json.py +msgid "" +"The red and black paperback novel you hold in your hands is a modern reprint" +" of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "你手中拿着的这本红黑色封面的平装小说是雷·布雷德伯里所著的《华氏451度》的现代重印本。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This scifi novel is divided into three parts: \"The Hearth and the " +"Salamander,\" \"The Sieve and the Sand,\", and \"Burning Bright.\"" +msgstr "这部科幻小说分为三个章节:《壁炉与火蜥蜴》、《筛子与沙砾》、《火光熊熊》。" + #: lang/json/BOOK_from_json.py msgid "sports novel" msgid_plural "sports novels" @@ -26508,9 +26630,11 @@ msgstr[0] "当捧戒者的十件酷事" #: lang/json/BOOK_from_json.py msgid "" "This book is for the delightful little ring bearer in your wedding. The " -"author depicts the responsibility and the honor in being a ring bearer your " -"little angel will cherish." -msgstr "这本书是为你婚礼上可爱的捧戒男孩准备的。作者描述了作为捧戒者的责任和荣誉,希望你的小天使能珍惜它。" +"author depicts the responsibility and honor in being a ring bearer. Your " +"little angel will cherish this book as he or she learns how to behave on " +"your perfect day." +msgstr "" +"这本书是为你婚礼上可爱的捧戒小孩准备的。作者描述了作为捧戒者的责任和荣誉,希望你的小天使能珍惜它,因为他或她需要学会如何在你最美好的一天上表现得体。" #: lang/json/BOOK_from_json.py msgid "How to Raise a Gentleman: A Civilized Guide to Parenting" @@ -27744,10 +27868,11 @@ msgstr "标题为《逃走的松饼》的民间童话故事集,适合讲给小 #: lang/json/BOOK_from_json.py msgid "The Adorkable Girl" -msgid_plural "The Adorkable Girls" +msgid_plural "copies of Adorkable" msgstr[0] "呆萌女孩" -#. ~ Description for The Adorkable Girl +#. ~ Description for {'str': 'The Adorkable Girl', 'str_pl': 'copies of +#. Adorkable'} #: lang/json/BOOK_from_json.py msgid "" "When a therapist's daughter transfers to a new school, she decides to change" @@ -27757,22 +27882,24 @@ msgstr "当心理医生的女儿转到新学校时,她决定改变自己的性 #: lang/json/BOOK_from_json.py msgid "Becoming Jackson" -msgid_plural "Becoming Jacksons" +msgid_plural "copies of Becoming Jackson" msgstr[0] "成为杰克逊" -#. ~ Description for Becoming Jackson +#. ~ Description for {'str': 'Becoming Jackson', 'str_pl': 'copies of Becoming +#. Jackson'} #: lang/json/BOOK_from_json.py msgid "" "When Jackson gains the mystical talent to alter his appearance on command, " -"how will he continue to recognize himself in his own mirror?" -msgstr "当杰克逊获得能够改变自身外貌的神秘天赋时,他将如何在镜子中继续认出自己?" +"will he be able to recognize himself in his own mirror?" +msgstr "当杰克逊获得能够改变自身外貌的神秘天赋时,他还能在镜子中继续认出自己吗?" #: lang/json/BOOK_from_json.py msgid "Nothing Burned" -msgid_plural "Nothing Burneds" +msgid_plural "copies of Nothing Burned" msgstr[0] "无人烧伤" -#. ~ Description for Nothing Burned +#. ~ Description for {'str': 'Nothing Burned', 'str_pl': 'copies of Nothing +#. Burned'} #: lang/json/BOOK_from_json.py msgid "" "A teenage influencer becomes fast friends with someone who may or may not be" @@ -27781,10 +27908,11 @@ msgstr "一位青年意见领袖交到了一个新密友。这个朋友很可能 #: lang/json/BOOK_from_json.py msgid "High and Low" -msgid_plural "High and Lows" +msgid_plural "copies of High and Low" msgstr[0] "天国与地狱" -#. ~ Description for High and Low +#. ~ Description for {'str': 'High and Low', 'str_pl': 'copies of High and +#. Low'} #: lang/json/BOOK_from_json.py msgid "" "In this work of adolescent fiction, a young gemini discovers that the " @@ -27796,10 +27924,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Fire When You See My Eyes" -msgid_plural "Fire When You See My Eyess" +msgid_plural "copies of Fire When" msgstr[0] "当你看见我眼中之火时" -#. ~ Description for Fire When You See My Eyes +#. ~ Description for {'str': 'Fire When You See My Eyes', 'str_pl': 'copies of +#. Fire When'} #: lang/json/BOOK_from_json.py msgid "" "In a cataclysmic future, advanced technology gives parents access to video " @@ -27808,10 +27937,11 @@ msgstr "故事发生在翻天覆地的未来,高度发达的科技让父母可 #: lang/json/BOOK_from_json.py msgid "Peanut Butter Bruised" -msgid_plural "Peanut Butter Bruiseds" +msgid_plural "copies of Peanut Butter Bruised" msgstr[0] "花生酱碰伤了" -#. ~ Description for Peanut Butter Bruised +#. ~ Description for {'str': 'Peanut Butter Bruised', 'str_pl': 'copies of +#. Peanut Butter Bruised'} #: lang/json/BOOK_from_json.py msgid "" "In this work of young adult fiction, a woman raised on food stamps falls in " @@ -27821,10 +27951,11 @@ msgstr "在这部青年小说中,一位靠食品券长大的女人爱上了一 #: lang/json/BOOK_from_json.py msgid "Ready When You Are" -msgid_plural "Ready When You Ares" +msgid_plural "copies of Ready When" msgstr[0] "就等你了" -#. ~ Description for Ready When You Are +#. ~ Description for {'str': 'Ready When You Are', 'str_pl': 'copies of Ready +#. When'} #: lang/json/BOOK_from_json.py msgid "" "When three teenage girls ditch class to drive cross country together they " @@ -27834,10 +27965,11 @@ msgstr "三个十几岁的少女们一起逃课去开车巡游全国,她们在 #: lang/json/BOOK_from_json.py msgid "Study of a Boy" -msgid_plural "Study of a Boys" +msgid_plural "copies of \"Study of a Boy\"" msgstr[0] "男孩的学习日记" -#. ~ Description for Study of a Boy +#. ~ Description for {'str': 'Study of a Boy', 'str_pl': 'copies of "Study of +#. a Boy"'} #: lang/json/BOOK_from_json.py msgid "" "A high school sophomore's personal journal is stolen and then leaked on " @@ -27847,10 +27979,11 @@ msgstr "一个高二学生的个人日记被偷,然后被泄露到社交媒体 #: lang/json/BOOK_from_json.py msgid "Summer Variables" -msgid_plural "Summer Variabless" +msgid_plural "copies of Summer Variables" msgstr[0] "夏季变量" -#. ~ Description for Summer Variables +#. ~ Description for {'str': 'Summer Variables', 'str_pl': 'copies of Summer +#. Variables'} #: lang/json/BOOK_from_json.py msgid "" "In this book written primarily for young adults, a woman's modest summer " @@ -27858,6 +27991,59 @@ msgid "" " unsavory elements." msgstr "在这本主要为年轻人写的书中,一位少女在参加一次不太重要的暑期实习时有了一次令人难以置信的发现,吸引了一些不良分子的注意。" +#: lang/json/BOOK_from_json.py +msgid "In a Dark Place" +msgid_plural "copies of Dark Place" +msgstr[0] "黑暗之地" + +#. ~ Description for {'str': 'In a Dark Place', 'str_pl': 'copies of Dark +#. Place'} +#: lang/json/BOOK_from_json.py +msgid "" +"Markia dreams about the future. Theo longs for the past. Together can they" +" find a way to live in the now?" +msgstr "马基亚梦想着未来。西奥渴望着过去。他们能一起找到一种生活在当下的方式吗?" + +#: lang/json/BOOK_from_json.py +msgid "Betrayal Takes Two" +msgid_plural "copies of Betrayal" +msgstr[0] "背叛需要两次" + +#. ~ Description for {'str': 'Betrayal Takes Two', 'str_pl': 'copies of +#. Betrayal'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a hard cover book for older teens. The two main characters pull a " +"cruel prank on their classmates, and are brought together both by their " +"frantic efforts to avoid being caught and their shared sense of guilt." +msgstr "" +"一部专为大一点的青少年编写的精装小说。书中讲述了两个主角对他们的同学做恶作剧,以及为了避免被抓所做出的疯狂闹剧和他们共同的负罪感让他们成为挚友的故事。" + +#: lang/json/BOOK_from_json.py +msgid "coming of age novel" +msgid_plural "coming of age novels" +msgstr[0] "青春小说" + +#. ~ Description for {'str': 'coming of age novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." +msgstr "一本关于成长的经典小说,描绘了一个年轻小伙在生活、爱情、性等方面有趣而辛酸的经历。" + +#: lang/json/BOOK_from_json.py +msgid "Pantheon: The Story of an Iranian Youth" +msgid_plural "copies of Pantheon" +msgstr[0] "万神殿:伊朗青年的故事" + +#. ~ Description for {'str': 'Pantheon: The Story of an Iranian Youth', +#. 'str_pl': 'copies of Pantheon'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hard cover graphic novel about a young girl living in Iran during the " +"1980's, seeing the world change around her as Iraq invaded her country." +msgstr "一部精装图画小说,内容是关于1980年代一个生活在伊朗的年轻女孩,在国家受到伊拉克入侵时,对周遭世界变迁的见闻。" + #: lang/json/BOOK_from_json.py msgid "original copy of Housefly" msgid_plural "original copies of Housefly" @@ -29428,6 +29614,44 @@ msgid "" "harmless." msgstr "召唤出一堵厚厚的雾墙。虽然突然出现的气压会击倒任何被困在里面的敌人,但这个魔法无法造成其它伤害。" +#: lang/json/BOOK_from_json.py +msgid "Scroll of Knock" +msgid_plural "Scrolls of Knock" +msgstr[0] "敲击术卷轴" + +#. ~ Description for {'str': 'Scroll of Knock', 'str_pl': 'Scrolls of Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open locked wooden doors from a short " +"range away." +msgstr "你可以引导魔力打开近距离内锁着的木门。" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Improved Knock" +msgid_plural "Scrolls of Improved Knock" +msgstr[0] "高等敲击术卷轴" + +#. ~ Description for {'str': 'Scroll of Improved Knock', 'str_pl': 'Scrolls of +#. Improved Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open any locked door from a short range " +"away." +msgstr "你可以引导魔力打开近距离内任何锁着的门。" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of +#. Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers" +" with baleful lightning." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -29763,35 +29987,6 @@ msgstr "" "我还有很多事想告诉你,但我必须先走一步了。我为你留了个朋友,对它好点。\n" "-爱你的 F。\"" -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "在创世之初……只有命令行" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', -#. 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "一篇尼尔·斯蒂芬森在1999年写的幽默文章,文中把操作系统经销商和汽车经销商拿来做比较。" - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "编译器设计原理" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': -#. 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" -"一本由和阿尔佛雷德·艾侯与杰弗里·乌尔曼于1977年编写的经典计算机教科书。这本书的显著特征是封面的骑士,他手持着LALR语法分析器和语法制导翻译对抗着含有隐喻编译器设计复杂性的绿色巨龙。" - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -31306,14 +31501,8 @@ msgstr[0] "变异肉块" #. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py -msgid "" -"Meat from a heavily mutated animal. It has an unsettling loose and spongy " -"texture, but smells… mostly normal. There are strange tangles and " -"formations in it that don't appear natural at all: bits of bone and hair " -"crusted up inside the muscle, as if trying to form another organism. Still," -" seems digestible at least, if you cook it and remove the worst parts." -msgstr "" -"从变异生物身上切下的肉块。这块肉有着恶心的海绵般的松散质感,不过闻起来……还算正常。肉的内部有着一些明显不自然的杂乱组织:骨头和毛发堆积在肌肉组织之间,就像是要生长出另一只生物一般。至少它看起来还能被消化,前提是你得把它烹饪加工并处理掉那些不好的部分。" +msgid "Meat from a heavily mutated animal." +msgstr "从严重变异的生物身上切下的一大块肉。" #: lang/json/COMESTIBLE_from_json.py msgid "scrap of mutant meat" @@ -31324,12 +31513,9 @@ msgstr[0] "变异碎肉" #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"A tiny scrap of meat from a heavily mutated animal. It smells a bit odd, " -"and has bits of hair and bone mixed in that seem like they grew inside the " -"muscle itself. Still, seems digestible at least, if you cook it and remove " -"the worst parts." -msgstr "" -"一小块变异生物身上的肉。闻起来有点奇怪,里面混着不少毛发和骨头,像是直接从肉里长出来的。至少它看起来还能被消化,前提是你得把它烹饪加工并处理掉那些不好的部分。" +"A tiny scrap of meat from a heavily mutated animal. It smells unappealing, " +"to say the least." +msgstr "从严重变异的生物身上切下的一小片肉。客气点说,闻起来不太诱人。" #: lang/json/COMESTIBLE_from_json.py msgid "mutant humanoid meat" @@ -31396,17 +31582,22 @@ msgstr[0] "变异熟肉" #. ~ Description for cooked mutant meat #: lang/json/COMESTIBLE_from_json.py -msgid "" -"This is a cooked chunk of meat from a mutated animal. It has an unsettling," -" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" -" the bits of hair and bone out…" -msgstr "一块煮熟的变异肉块。这块肉有着恶心的海绵般的松散质感,不过尝起来……还算正常。但愿你已经把里面的毛发和骨头全部清理干净了……" +msgid "This is a cooked chunk of meat from a mutated animal." +msgstr "一大块煮熟的变异生物的肉。" #: lang/json/COMESTIBLE_from_json.py msgid "cooked scrap of mutant meat" msgid_plural "cooked scraps of mutant meat" msgstr[0] "变异熟碎肉" +#. ~ Description for {'str': 'cooked scrap of mutant meat', 'str_pl': 'cooked +#. scraps of mutant meat'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"This is a tiny scrap of cooked mutant meat. It is small enough that it's " +"hard to tell how disgusting it is." +msgstr "一小片煮熟的变异生物的肉。它小到让你很难分辨出它原来有多恶心。" + #: lang/json/COMESTIBLE_from_json.py msgid "raw offal" msgid_plural "raw offals" @@ -31433,6 +31624,16 @@ msgid "" "prepared." msgstr "一些煮熟的新鲜内脏和肠子。富含人体所需的各种维生素,但大多数人认为它有些恶心,除非经过精心料理。" +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant organs" +msgid_plural "mutant organs" +msgstr[0] "变异器官" + +#. ~ Description for {'str_sp': 'mutant organs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "These organs came from a giant mutant bug." +msgstr "从巨大的变异昆虫身上切下的奇怪器官。" + #: lang/json/COMESTIBLE_from_json.py msgid "pickled offal" msgid_plural "pickled offal" @@ -31601,6 +31802,16 @@ msgid "" msgstr "" "一块来自某种动物的肺脏。由于采用这种方式料理,它就是一大块不易嚼烂且枯燥乏味的灰褐色结缔组织。看上去并不比生的更好吃,但是起码寄生虫都被煮熟了。" +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant lungs" +msgid_plural "mutant lungs" +msgstr[0] "变异肺脏" + +#. ~ Description for {'str_sp': 'mutant lungs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "You're pretty sure this is lung tissue." +msgstr "你很确定这是肺脏组织。" + #: lang/json/COMESTIBLE_from_json.py msgid "raw liver" msgid_plural "raw livers" @@ -31753,9 +31964,10 @@ msgstr[0] "变异脂肪块" #. mutant fat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Freshly butchered fat from a heavily mutated animal. You could eat it raw, " -"but it is better used as an ingredient in other foods or projects." -msgstr "屠宰变异生物尸体得到的新鲜脂肪,可以用来充饥,但最好经过加工,与其他食材一同使用。" +"Freshly butchered fat from a heavily mutated animal. It smells, if " +"anything, even more disgusting than the rest of the mutant. There are " +"little puddles of unidentified oils dripping from it." +msgstr "从严重变异的生物身上切下的新鲜脂肪。它闻起来甚至比其他变异部位更恶心。有些不明油脂从中滴落下来形成小水坑。" #: lang/json/COMESTIBLE_from_json.py msgid "mutant tallow" @@ -33017,16 +33229,16 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "白水里加了点糖或蜂蜜,尝起来还不赖。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" -msgstr[0] "茶" +msgid "black tea" +msgid_plural "black teas" +msgstr[0] "红茶" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves" -" of the tea plant /Camellia sinensis/." -msgstr "一份供全球绅士享用的饮品,通过将滚烫的开水倒入被称作\"山茶科山茶属\"的茶树的叶子中而成。" +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." +msgstr "一份供全球绅士享用的饮品,通过将滚烫的开水倒入被称作\"山茶科山茶属\"的茶树的脱氧叶子中而成。" #: lang/json/COMESTIBLE_from_json.py msgid "bark tea" @@ -33070,6 +33282,31 @@ msgstr[0] "矿泉水" msgid "Fancy mineral water, so fancy it makes you feel fancy just holding it." msgstr "一份从地下深处自然涌出的或者是经人工揭露的、未受污染的纯净矿泉水。" +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "绿茶" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia sinensis/." +" Green tea has a lighter, fresher taste than black and is traditionally " +"preferred in Asian cultures." +msgstr "用热水浸泡茶树的叶子制成。绿茶比红茶口味清淡,是传统亚洲文化中的首选。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "果茶" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "一种美味的饮料,由草药和干果制成,而不是茶树。虽然被称为“茶”,但严格来说它只是一种冲泡饮料。" + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -38279,7 +38516,6 @@ msgid_plural "pine nuts" msgstr[0] "松籽" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "一把从松果里剥出来的松籽,又香又脆。" @@ -39176,16 +39412,40 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "一些花蜜。该物品不应该出现在正常游戏中。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" -msgstr[0] "茶包" +msgid "black tea bag" +msgid_plural "black tea bags" +msgstr[0] "红茶包" + +#. ~ Description for {'str': 'black tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "一个装满了茶叶的小纸袋。把它丢进一杯开水里就能泡出红茶了。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "绿茶包" + +#. ~ Description for {'str': 'green tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." +msgstr "一个装满了茶叶的小纸袋。把它丢进一杯开水里就能泡出绿茶了。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" +msgstr[0] "果茶包" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'fruit tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." -msgstr "一个装满了茶叶的小纸袋。把它丢进一杯开水里就能喝茶了。" +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." +msgstr "一个装满了草叶和干果的小纸袋。把它丢进一杯开水里就能泡出果茶了。" #: lang/json/COMESTIBLE_from_json.py msgid "herbal tea bag" @@ -39270,16 +39530,17 @@ msgstr[0] "蛋白口粮" #. ~ Description for {'str': 'protein ration'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"SoyPelusa ran a highly successful crowdfunding campaign for their signature " -"protein bar, dubbed \"DaiZoom.\" A person can live on one of these bars, " -"three times a day, presumably forever. After backers received their " -"product, a single flaw was found: most consumers found starvation preferable" -" to the flavor. Warehouses of the product went unsold as the company went " -"bankrupt, providing the perfect opportunity for FEMA to scoop them up and " -"stock the evac shelters. Now, you hold a piece of famous crowdfunding " -"history in your hands. How exciting." +"SoyPelusa ran a highly successful crowdfunding campaign for their signature protein bar, dubbed \"DaiZoom.\"\n" +"\n" +"A person can live on one of these bars, three times a day, presumably forever. After backers received their product, a single flaw was found: most consumers found starvation preferable to the flavor. Warehouses of the product went unsold as the company went bankrupt, providing the perfect opportunity for FEMA to scoop them up and stock the evac shelters.\n" +"\n" +"Now, you hold a piece of famous crowdfunding history in your hands. How exciting." msgstr "" -"SoyPelusa公司成功地众筹并生产了这款现象级的“DaiZoom”牌的蛋白质棒。普通人只靠这种棒子过活的话,一天三根,大概永远都死不了。在众筹支持者们收到产品后,他们发现了它仅有的一个缺陷:大部分食用者宁愿饿死也受不了这味道。当公司破产之际,存放这些产品的仓库无人问津,这为联邦应急管理局提供了一个绝佳的机会,它接手了这些产品,并用其供应各个紧急避难所。\"现在你手中拿着的就是一段众筹历史的见证。真可谓亦可赛艇。\"" +"SoyPelusa公司成功地众筹并生产了这款现象级的“DaiZoom”牌的蛋白质棒。\n" +"\n" +"普通人可以只靠吃这种蛋白棒生存下去,一天三根,大概永远都死不了。在众筹支持者们收到产品后,他们发现了它仅有的一个缺陷:大部分食用者宁愿饿死也受不了这味道。当公司破产之际,存放这些产品的仓库无人问津,这为联邦应急管理局提供了一个绝佳的机会,它接手了这些产品,并用其供应各个紧急避难所。\n" +"\n" +"\"现在你手中拿着的就是一段众筹历史的见证。真可谓亦可赛艇。\"" #: lang/json/COMESTIBLE_from_json.py msgid "protein shake" @@ -40055,17 +40316,29 @@ msgid "" msgstr "这块新鲜的根茎已经成熟并且充满了糖分。赶紧把它们都榨出来吧。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" -msgstr[0] "茶叶" +msgid "black tea leaf" +msgid_plural "black tea leaves" +msgstr[0] "红茶叶" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " "just eat them raw. They aren't too filling though." msgstr "热带植物的晒干的叶子,可以当茶叶泡,还可以直接嚼着吃,只是不饱肚子。" +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "绿茶叶" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "热带植物的晒干的叶子。可以煮沸得到绿茶,还可以直接嚼着吃。不过它们并不能填饱肚子。" + #: lang/json/COMESTIBLE_from_json.py msgid "tomato" msgid_plural "tomatoes" @@ -42622,6 +42895,66 @@ msgid "" "to bake bread more efficiently than with just flour." msgstr "与水混合的面粉,被揉成黏糊糊的一团。这种面团相比于面粉,更适合用来烤面包。" +#: lang/json/COMESTIBLE_from_json.py +msgid "pineapple stem" +msgid_plural "pineapple stem" +msgstr[0] "菠萝根茎" + +#. ~ Description for {'str_sp': 'pineapple stem'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Roots of a pineapple plant, for growing your own." +msgstr "菠萝的根茎,你可以用它来种出你自己的菠萝。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "melon seeds" +msgid_plural "melon seeds" +msgstr[0] "甜瓜种子" + +#. ~ Description for {'str_sp': 'melon seeds'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some melon seeds." +msgstr "一些甜瓜种子。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "banana saplings" +msgid_plural "banana saplings" +msgstr[0] "香蕉种苗" + +#. ~ Description for {'str_sp': 'banana saplings'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some banana saplings." +msgstr "一些香蕉种苗。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "orange vine" +msgid_plural "orange vine" +msgstr[0] "橙子种苗" + +#. ~ Description for {'str_sp': 'orange vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some orange vine. Definitely GMO." +msgstr "一些橘子种苗。肯定是转基因产品。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "lemon vine" +msgid_plural "lemon vine" +msgstr[0] "柠檬种苗" + +#. ~ Description for {'str_sp': 'lemon vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some lemon vines. Definitely GMO." +msgstr "一些柠檬种苗。肯定是转基因产品。" + +#: lang/json/COMESTIBLE_from_json.py +msgid "subterraenean coconut" +msgid_plural "subterraenean coconut" +msgstr[0] "地下椰子" + +#. ~ Description for {'str_sp': 'subterraenean coconut'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Proof that man went too far before the Cataclysm." +msgstr "证明人类在大灾变之前走得太远了。" + #: lang/json/COMESTIBLE_from_json.py msgid "vampire mutagen" msgid_plural "vampire mutagens" @@ -42988,6 +43321,11 @@ msgid "ankylosaurus egg" msgid_plural "ankylosaurus eggs" msgstr[0] "甲龙蛋" +#: lang/json/COMESTIBLE_from_json.py +msgid "apatosaurus egg" +msgid_plural "apatosaurus eggs" +msgstr[0] "迷惑龙蛋" + #: lang/json/COMESTIBLE_from_json.py msgid "ceratosaurus egg" msgid_plural "ceratosaurus eggs" @@ -43295,7 +43633,7 @@ msgid "scream mushroom" msgid_plural "scream mushrooms" msgstr[0] "尖叫蘑菇" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -43475,104 +43813,6 @@ msgid "" "see this? We will not permit you to join us while we are modded out." msgstr "吾等不应存在在这一时空,聪明的小小人类哟,汝是用了调试模式吗,在当前模组加载设置下,吾等是不能允许汝加入的。" -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "测试用松籽" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "测试用苦扁桃仁" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when" -" eaten raw." -msgstr "一种含有微量氢氰酸的扁桃仁,生吃可能中毒。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "测试用迷幻肉豆蔻" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "高剂量的肉豆蔻可以引起幻觉和兴奋,同时也会产生许多令人讨厌的副作用。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "测试用苹果" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "测试用苹果。可能含有虫子,但味道鲜美!" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "测试用液体" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do" -" not drink!" -msgstr "某种液体形式的神秘物质。只作测试,不要喝下!" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "测试用网球酒原汁" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "未发酵的网球酒。一种由捣碎的网球煮制成的有弹性的饮料。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "测试用网球酒" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "由发酵的网球汁制成的廉价酒。尝起来就像它名字听起来一样。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "测试用口香糖" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "带有奇异兴奋和解渴效果的蓝莓味口香糖。" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "测试用变异拇指" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "变异的人类拇指,丧心病狂的人才去吃,吃了后会恶心,并且导致DNA突变。" - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -44370,18 +44610,6 @@ msgstr[0] "铝罐" msgid "An aluminum can, like what soda comes in." msgstr "一个铝罐,就是装汽水的那种。" -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "铝罐(开)" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "一个铝罐,就是装汽水的那种。这个已经被打开了而且没法简单的重新密封。" - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -44390,22 +44618,10 @@ msgstr[0] "纸桶" #. ~ Description for {'str': 'paper carton'} #: lang/json/GENERIC_from_json.py msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." +"A half gallon carton constructed of a paper, aluminum, and plastic laminate." " It has a threaded cap for easy resealing." msgstr "由纸,铝和塑料层压制成的纸板盒,容积为半加仑。附带一个螺纹盖子以便封装。" -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "纸桶(开)" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." -" This one is open and its contents will spoil." -msgstr "由纸,铝和塑料层压制成的纸板盒,容积为半加仑。它已经被打开了,内容物会开始变质。" - #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" msgid_plural "vacuum-packed bags" @@ -44426,18 +44642,6 @@ msgstr[0] "小锡罐" msgid "A small tin can, like what tuna comes in." msgstr "一个小型锡制罐子,就是装金枪鱼的那种。" -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "小锡罐(开)" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "一个小型锡制罐子,就是装金枪鱼的那种。这个已经被打开而且没法简单的重新密封。" - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -44448,18 +44652,6 @@ msgstr[0] "中锡罐" msgid "A medium tin can, like what soup comes in." msgstr "一个中型锡制罐子,就是装汤水的那种。" -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "中锡罐(开)" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "一个中型锡制罐子,就是装汤水的那种。这个已经被打开而且没法简单的重新密封。" - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -44528,16 +44720,6 @@ msgstr[0] "塑料杯" msgid "A small, vacuum formed cup." msgstr "一只真空包装了的杯子。" -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "塑料杯(开)" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "一只真空包装了的杯子,基本上是垃圾。" - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -44694,7 +44876,6 @@ msgid_plural "gallon jugs" msgstr[0] "加仑壶" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "一个标准容量的塑料壶,一般盛放家用清洁剂或者牛奶等液体。" @@ -44786,7 +44967,6 @@ msgid_plural "small waterskins" msgstr[0] "小号皮水袋" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of" @@ -44905,18 +45085,6 @@ msgid "" "food." msgstr "一个大型锡制罐子,就是装豆子的那种。能够容纳大量食物。" -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "大锡罐(开)" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "一个大型锡制罐子,就是装豆子的那种。这个已经被打开而且没法简单的重新密封。" - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -45382,6 +45550,33 @@ msgstr[0] "甲壳块" msgid "A piece of an insect's exoskeleton. It is light and very durable." msgstr "这是一块昆虫的坚硬躯壳,它不仅轻巧,而且很耐用。" +#: lang/json/GENERIC_from_json.py +msgid "strand of endochitin" +msgid_plural "strands of endochitin" +msgstr[0] "内几丁质丝" + +#. ~ Description for {'str': 'strand of endochitin', 'str_pl': 'strands of +#. endochitin'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of an insect's endoskeleton." +msgstr "一块昆虫内骨骼。" + +#: lang/json/GENERIC_from_json.py +msgid "cluster of gas sacs" +msgid_plural "clusters of gas sacs" +msgstr[0] "气囊团" + +#. ~ Description for {'str': 'cluster of gas sacs', 'str_pl': 'clusters of gas +#. sacs'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This is a cluster of membranous bubbles, each about the size of a grape, " +"retrieved from inside a mutant insect. They float like tiny helium " +"balloons, and are likely full of a lighter-than-air gas helping the bug to " +"fly." +msgstr "" +"这是一团薄膜状气泡,每一个都有葡萄大小,是从某种变异的巨型昆虫体内屠宰而来的。它们像微小的氦气球一样在空中漂浮,内部充满了比空气还轻的气体,帮助昆虫飞行。" + #: lang/json/GENERIC_from_json.py msgid "set of 100 ceramic disk" msgid_plural "ceramic disks" @@ -46533,8 +46728,8 @@ msgid "lotus flower" msgid_plural "lotus flowers" msgstr[0] "荷花" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -47883,6 +48078,16 @@ msgid "" "Unusable as a weapon on its own without the necessary parts." msgstr "一个从TX-5LR地狱犬激光炮塔拆下来的激光炮。在缺少必要部件的情况下无法单独工作。" +#: lang/json/GENERIC_from_json.py +msgid "bone armor kit" +msgid_plural "bone armor kits" +msgstr[0] "骨制装甲板" + +#. ~ Description for {'str': 'bone armor kit'} +#: lang/json/GENERIC_from_json.py +msgid "Bone plating made for a vehicle." +msgstr "载具用骨制装甲板。" + #: lang/json/GENERIC_from_json.py msgid "module template" msgid_plural "module templates" @@ -51794,7 +51999,7 @@ msgstr[0] "琉森锤" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with a spiked hammer head, a spike, and a hook " -"attached to a long stick." +"attached to a beefy wooden pole." msgstr "这种多功能的长柄武器上面有一个钉锤头,一个矛头,和一道弯钩。" #. ~ Description for {'str': 'lucerne hammer'} @@ -52157,7 +52362,6 @@ msgid_plural "pointy sticks" msgstr[0] "尖木棍" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "一头削的尖尖的木棍,可以用来演杂技,当然也可以用来扎人。" @@ -52249,15 +52453,15 @@ msgstr[0] "战戟" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with an axe blade, a spike, and other fun things" -" attached to a long stick." -msgstr "一个长棍,顶端安装着一个由尖矛、斧头和其他装饰所构成的戟头,在14-15世纪被广泛使用于战争之中,如今常见于梵蒂冈的瑞士守卫。" +" attached to a long sturdy stick." +msgstr "这种多功能的长柄武器上面有一个斧头,一个矛头,和其他装饰。" #. ~ Description for {'str': 'halberd'} #: lang/json/GENERIC_from_json.py msgid "" "This is a dull, cheaply made replica of a polearm with an axe blade, a " -"spike, and other fun things attached to a long stick." -msgstr "战戟的拙劣仿制品。一个斧头,一个尖矛头,以及其他有趣的东西固定在一根长棍上。" +"spike, and other fun things attached to a thick pole." +msgstr "这种多功能的长柄武器上面有一个斧头,一个矛头,和其他装饰。它是一把廉价的复制品。" #: lang/json/GENERIC_from_json.py msgid "glaive" @@ -52824,18 +53028,6 @@ msgid "" "from India designed to be concealed under and against the palm." msgstr "一个小型刃爪武器,发源于印度,也被称作\"bagh nakha\"或\"铁爪\"。其小巧的体型使其能够被轻易隐藏在掌心之中。" -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "铁拳套" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "一个皮革缠绕而成的护手和护臂,在指关节上嵌入了金属板,以提高拳击威力和防护。" - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -53069,7 +53261,6 @@ msgid_plural "pipes" msgstr[0] "钢管" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -53264,7 +53455,12 @@ msgid "" "been used for commercial wrapping or for weather-sealing a home." msgstr "这是一种大型的柔性塑料薄膜,这种塑料可能用于商业包装或密封房屋。" -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -54131,9 +54327,9 @@ msgstr[0] "简易长刀" #. ~ Description for {'str': 'makeshift glaive'} #: lang/json/GENERIC_from_json.py msgid "" -"This is a large blade attached to a long stick. It could do a considerable " -"amount of damage." -msgstr "长长的棍子上有个大大的刀片,能造成严重的伤害。" +"This is a large blade attached to a stout section of tree branch. It could " +"do a considerable amount of damage." +msgstr "由粗树枝构成的棍身前端有个大大的刀片,能造成严重的伤害。" #: lang/json/GENERIC_from_json.py msgid "mind splicer kit" @@ -54292,6 +54488,21 @@ msgstr[0] "订书机" msgid "A stapler for fastening sheets of paper together." msgstr "一种将纸张固定在一起的订书机。" +#: lang/json/GENERIC_from_json.py +msgid "hole puncher" +msgid_plural "hole punchers" +msgstr[0] "打孔器" + +#. ~ Description for {'str': 'hole puncher'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This metal tool can help you punch a single hole in a piece of paper. I " +"mean, you could do more if you wanted, but you'd have to do them one at a " +"time. Or, if you really wanted more holes with one punch, I suppose you " +"could fold the paper… This is a one cylinder hole puncher." +msgstr "" +"这个金属工具可以帮你在纸上打一个洞。当然如果你想的话,也可以打更多孔,但必须一下一下来。或者,如果你真的想用它一次打更多的孔的话,也许你可以把纸折起来……它是一个单筒打孔器。" + #: lang/json/GENERIC_from_json.py msgid "pen" msgid_plural "pens" @@ -54534,6 +54745,18 @@ msgid "" "until it floats. Then attach oars or a motor to get the boat to move." msgstr "一个让船只保持浮力的木板。将其安装在载具上直到它浮在水上。继续添加桨或者引擎来移动船只。" +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -55392,7 +55615,6 @@ msgid_plural "sheet metal" msgstr[0] "薄钢板" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "薄薄的一片金属板。" @@ -55501,16 +55723,6 @@ msgstr[0] "硅化甲壳装甲片" msgid "Durable silica-coated chitin plating made for a vehicle." msgstr "载具用硅化甲壳装甲板。" -#: lang/json/GENERIC_from_json.py -msgid "bone armor kit" -msgid_plural "bone armor kits" -msgstr[0] "骨制装甲板" - -#. ~ Description for {'str': 'bone armor kit'} -#: lang/json/GENERIC_from_json.py -msgid "Bone plating made for a vehicle." -msgstr "载具用骨制装甲板。" - #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "shredder" msgid_plural "shredders" @@ -55761,8 +55973,8 @@ msgid "workbench" msgid_plural "workbenches" msgstr[0] "工作台" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and" @@ -56510,6 +56722,17 @@ msgstr[0] "非因果逻辑变换器" msgid "It has given you an answer, but you are yet to ask anything." msgstr "它已经给出了答案,而你还没有问任何问题。" +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -56596,8 +56819,20 @@ msgstr[0] "超导电磁铁" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." -msgstr "一个由室温超导体制成的强力电磁铁。" +msgid "A powerful electromagnet made from a room temperature superconductor." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." +msgstr "" #: lang/json/GENERIC_from_json.py msgid "composite alloy" @@ -57177,6 +57412,16 @@ msgid "" "battles is bookmarked." msgstr "一本古老的海拉尔传说和故事集。其中关于一次历史上著名的战役的章节被加上了书签标记。" +#: lang/json/GENERIC_from_json.py +msgid "Stormguard Warrior" +msgid_plural "Stormguard Warrior" +msgstr[0] "风暴之盾" + +#. ~ Description for {'str_sp': 'Stormguard Warrior'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Iron Heart discipline." +msgstr "这本书包含了铁心流派相关的武术教学。" + #: lang/json/GENERIC_from_json.py msgid "The Life and Work of Tiger Sauer" msgid_plural "The Life and Work of Tiger Sauer" @@ -57189,6 +57434,61 @@ msgid "" "art." msgstr "一位战斗改造人特工的传记,详述了他的哲学和武术。" +#: lang/json/GENERIC_from_json.py +msgid "Pocket Monster Encyclopedia" +msgid_plural "Pocket Monster Encyclopedia" +msgstr[0] "精灵宝可梦百科" + +#. ~ Description for {'str_sp': 'Pocket Monster Encyclopedia'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This encyclopedia contains a detailed listing of the strengths and " +"techniques of various fictional monsters and how to apply them the in a real" +" fight." +msgstr "这部百科全书详细列出了宝可梦游戏中各种虚构怪物的强度和招式,以及如何在真实战斗中运用它们的手段。" + +#: lang/json/GENERIC_from_json.py +msgid "Distant Horizon" +msgid_plural "Distant Horizon" +msgstr[0] "高瞻远瞩" + +#. ~ Description for {'str_sp': 'Distant Horizon'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Setting Sun discipline." +msgstr "这本书包含了暮日流派相关的武术教学。" + +#: lang/json/GENERIC_from_json.py +msgid "Jedi Holocrons: Form I" +msgid_plural "Jedi Holocrons: Form I" +msgstr[0] "绝地全息仪:第一式" + +#. ~ Description for {'str_sp': 'Jedi Holocrons: Form I'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This device contains the teachings of the first form of Jedi lightsaber " +"combat: Shii-Cho." +msgstr "这个装置包含了绝地武士光剑战斗的第一式:锡秋剑法相关的武术教学。" + +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -57209,9 +57509,9 @@ msgstr[0] "发光粉尘" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." -msgstr "一缕鬼火遗留下来的物理形态粉末,它似乎还在散发着神奇的光芒。" +msgstr "" #: lang/json/GENERIC_from_json.py msgid "magical reading light" @@ -57325,8 +57625,8 @@ msgstr[0] "魔力之尘" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." -msgstr "粉末状的魔力结晶。它所含的奥术能量不断脉动着发出微光。" +"Crystalized mana in powdered form. It faintly pulses with arcane energy." +msgstr "" #: lang/json/GENERIC_from_json.py msgid "black dragon scale" @@ -58574,126 +58874,6 @@ msgid "" "much more expensive." msgstr "一个由山铜制成的车架。比钢制车架要坚固得多,但同时也比它昂贵得多。" -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "测试用木板" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional" -" lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "一块尺寸大概有2x4平方英寸的狭窄而厚实的木板。当做近战武器刚好趁手,也可用于各种建造。" - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "测试用钢管" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "测试用薄钢板" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "测试用加仑壶" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "测试用小号皮水袋" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "测试用气球" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "弹性,水密,气密,一个完美的测试用气球。" - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "测试用尖木棍" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "测试用笨剑" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "测试用的平衡性很差的武器。" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "测试用普通剑" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "测试用的武器。" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "测试用平衡剑" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "测试用的平衡性很好的武器。" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "测试用纸盒" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "一个简单的1升纸板箱,故意未设定比例。" - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "测试用14厘米短棍" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "一根14厘米长的短棍。" - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "测试用15厘米短棍" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "一根15厘米长的短棍。" - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "测试用核咖啡壶" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "这是一个测试用咖啡壶,设计能保持原子饮料的放射性。它一直在泄漏辐射。" - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "枪械" @@ -61765,28 +61945,6 @@ msgid "" "tips." msgstr "这是一个小型魔力水晶,专门被设计用来存储魔杖所需的能量。" -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "测试用一次性电池" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test -#. disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "一个测试用一次性电池。" - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "测试用可充电电池" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test -#. rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "一个测试用可充电电池。" - #: lang/json/MOD_INFO_from_json.py src/color.cpp src/color.cpp msgid "default" msgstr "默认" @@ -61802,8 +61960,11 @@ msgstr "余波未尽" #. ~ Description for Aftershock #: lang/json/MOD_INFO_from_json.py -msgid "Drifts the game away from realism and more towards sci-fi." -msgstr "在现实主义的游戏中添加更多的科幻元素。" +msgid "" +"Drifts the game away from realism and more towards sci-fi. Long term goal " +"of being a significantly different experience that remains compatible with " +"other mods." +msgstr "在现实主义的游戏中添加更多的科幻元素。长期目标是为玩家带来显著不同的体验,同时维持与其他模组的兼容性。" #: lang/json/MOD_INFO_from_json.py msgid "Blaze Industries" @@ -61845,9 +62006,10 @@ msgstr "暗黑天际" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" -msgstr "将大灾变转变为类似XCOM2风格的外星人入侵的全面改动类模组。不兼容其他模组,使用风险自负!" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." +msgstr "" #: lang/json/MOD_INFO_from_json.py msgid "DinoMod" @@ -62051,16 +62213,6 @@ msgstr "技能提升属性" msgid "Allows stats to raise via skill progression." msgstr "让玩家的基础属性根据技能等级不断提高。" -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "测试数据" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "这组数据包含了物品模型,配方以及其他为了自动化测试使用的东西。" - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "更多城镇建筑" @@ -63854,6 +64006,16 @@ msgid "" "about rapidly and the mouths form a chorus of groaning screams." msgstr "这个血肉傀儡是由腐烂的人类和动物躯体融合在一起组成,它飞快的移动着所有头上的眼睛。口中发出尖叫和呻吟。" +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "人类" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -65806,6 +65968,18 @@ msgstr "一株光彩夺目而硕大的异界蕨类植物。从它身上散发出 msgid "Lightning arcs from the leech stalk!" msgstr "水蛭花茎秆射出了一道电弧!" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -66217,7 +66391,7 @@ msgid "" " This one is fitted with a M2HB." msgstr "" "这是一台M153 CROWS II " -"自主武器系统的升级型号,安装了自主操作软件。在大灾难发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何轻型车辆交战。这一台配备了一支" +"自主武器系统的升级型号,安装了自主操作软件。在大灾变发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何轻型车辆交战。这一台配备了一支" " M2HB 重机枪。" #: lang/json/MONSTER_from_json.py @@ -66234,7 +66408,7 @@ msgid "" " infantry without exposing the operator. This one is fitted with a M249." msgstr "" "这是一台M153 CROWS II " -"自主武器系统的升级型号,安装了自主操作软件。在大灾难发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何步兵交战。这一台配备了一支" +"自主武器系统的升级型号,安装了自主操作软件。在大灾变发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何步兵交战。这一台配备了一支" " M249 机枪。" #: lang/json/MONSTER_from_json.py @@ -66251,7 +66425,7 @@ msgid "" " infantry without exposing the operator. This one is fitted with a M240." msgstr "" "这是一台M153 CROWS II " -"自主武器系统的升级型号,安装了自主操作软件。在大灾难发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何步兵交战。这一台配备了一支" +"自主武器系统的升级型号,安装了自主操作软件。在大灾变发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何步兵交战。这一台配备了一支" " M240 机枪。" #: lang/json/MONSTER_from_json.py @@ -66370,6 +66544,86 @@ msgid "" msgstr "" "安可异公司的第一款产品,一个高耸的四臂人形机器人,脸部柔和。它的面貌细节引人注目,但它的硬度让你感到非常不舒服。世界末日并没有阻止它寻找病人协助。" +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo" +" seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -68873,6 +69127,18 @@ msgid "" " emerge." msgstr "一种庞大的、犀牛般的恐龙。头上有三个大角和一个骨质头冠。" +#: lang/json/MONSTER_from_json.py +msgid "Triceratops bio-operator" +msgid_plural "Triceratops bio-operator" +msgstr[0] "生化三角龙" + +#. ~ Description for {'str_sp': 'Triceratops bio-operator'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive three-horned four-legged dinosaur dotted with crackling bionics. " +"The horns glow menacingly." +msgstr "一只巨大的三角四足恐龙,上面点缀着噼啪作响的生化插件。它的角发出可怕的光。" + #: lang/json/MONSTER_from_json.py msgid "Stegosaurus" msgid_plural "Stegosaurus" @@ -68896,6 +69162,18 @@ msgid "" "massive spiked club of bone." msgstr "这种恐龙看上去像是一种巨大的史前犰狳,它的尾端有一个巨大的骨质狼牙棒。" +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus" +msgid_plural "Apatosaurus" +msgstr[0] "迷惑龙" + +#. ~ Description for {'str_sp': 'Apatosaurus'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur with a long, whip-like tail. The" +" head is upright and the neck looks like it would make a good strong club." +msgstr "一只巨大的长颈四足恐龙,尾巴非常长,像鞭子一样。它的头能够直立起来,脖子看起来像一根巨大而坚固的棍子。" + #: lang/json/MONSTER_from_json.py msgid "Ceratosaurus" msgid_plural "Ceratosaurus" @@ -69094,6 +69372,108 @@ msgid "magenta and green hatchling" msgid_plural "magenta and green hatchlings" msgstr[0] "紫绿色恐龙幼仔" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs," +" broad shoulders and a pointed beak. Its tattered feathers are stained with" +" black, sticky liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus zombie" +msgid_plural "Spinosaurus zombies" +msgstr[0] "丧尸棘龙" + +#. ~ Description for {'str': 'Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Enormous putrid dinosaur corpse with a ferocious crocodile-like head, oozing" +" black eyes, and a tattered sail on its back." +msgstr "一具巨大的腐烂恐龙尸体,有着凶猛的像鳄鱼一样的头,眼睛渗出黑色的液体,背上有一个破烂的帆一样的东西。" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -69105,11 +69485,123 @@ msgid "Massive piles of ragged, stinking flesh lifting enormous teeth." msgstr "一大坨破烂发臭的血肉,托起了它巨大的牙齿。" #: lang/json/MONSTER_from_json.py -msgid "Z-Deinonychus" -msgid_plural "Z-Deinonychus" +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with feathery edges. The head looks big, lots of big" +" teeth would fit in it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "S-Rex" +msgid_plural "S-Rexes" +msgstr[0] "丧尸骨霸王龙" + +#. ~ Description for {'str': 'S-Rex', 'str_pl': 'S-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Monstrous columns of dense bone lifting enormous sharp pointed teeth " +"dripping with black goo." +msgstr "巨大而密集的骨柱托举起巨大的尖牙,牙尖不断滴下黑色的黏液。" + +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus zombie" +msgid_plural "Deinonychus zombies" msgstr[0] "丧尸恐爪龙" -#. ~ Description for {'str_sp': 'Z-Deinonychus'} +#. ~ Description for {'str': 'Deinonychus zombie'} #: lang/json/MONSTER_from_json.py msgid "" "The shuffling corpse of a medium-sized bipedal dinosaur covered with " @@ -69117,6 +69609,68 @@ msgid "" "sickle-like claw." msgstr "一具体表覆盖着破碎羽毛和黑色腐臭液体的蹒跚而行的中型两足恐龙尸体。双脚前端巨大的镰刀状利爪正不断挥舞着。" +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms," +" a long tail, and long sharp scythe-like claws." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent" +" bony crests on its head with ragged strips of ripped flesh hanging down " +"like a frill." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" msgid_plural "improvised SMG turrets" @@ -69137,7 +69691,7 @@ msgid "" " This one is fitted with a heavy machinegun." msgstr "" "这是一台M153 CROWS II " -"自主武器系统的升级型号,安装了自主操作软件。在大灾难发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何轻型车辆交战。这一台配备了一支重机枪。" +"自主武器系统的升级型号,安装了自主操作软件。在大灾变发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何轻型车辆交战。这一台配备了一支重机枪。" #: lang/json/MONSTER_from_json.py msgid "CROWS II, light machinegun" @@ -69154,7 +69708,7 @@ msgid "" "machine gun." msgstr "" "这是一台M153 CROWS II " -"自主武器系统的升级型号,安装了自主操作软件。在大灾难发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何步兵交战。这一台配备了一支轻机枪。" +"自主武器系统的升级型号,安装了自主操作软件。在大灾变发生前,美国军方已经部署了数千架辆这种炮塔,它们的价值在于能够在不暴露驾驶员的情况下,在远距离与任何步兵交战。这一台配备了一支轻机枪。" #: lang/json/MONSTER_from_json.py msgid "autonomous rifle TALON UGV" @@ -69821,18 +70375,6 @@ msgid "" "traditional forces." msgstr "\"幽灵怪\"(12N)10 级建筑工型机器人 。该型号是\"幽灵怪\"系列的单兵辅助型号的一部分,该系列设计得可与更传统的军队无缝衔接。" -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "厕纸木乃伊" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper -#. mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "一个看上去略像人形的怪物,被层层包裹在类似厕纸的东西里。" - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -70190,18 +70732,6 @@ msgid "" msgstr "" "一套自制的马铠,包含保护马颈的鸡颈、保护马胸的当胸和保护马臀的搭后,上面的恶魔甲壳片和薄薄的网状织物贴合在一起。你可以将这套马铠穿在一匹友好的马身上。" -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "喵力装甲" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "一套光滑又轻便的凯夫拉猫具,带有保护头盔和胸板。背面有个非常小、用起来很不方便的魔术贴口袋。" - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "哺乳动物" @@ -70946,6 +71476,22 @@ msgstr "颅脑爆炸" msgid "This fake spell occurs on cranial bomb activation. Likely fatal." msgstr "这个虚拟法术用于引爆颅脑内的炸弹。极度致命。" +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "灵能击晕" @@ -71348,8 +71894,8 @@ msgstr "排斥所有物体。" msgid "Debug Full Protection" msgstr "调试用全身防护" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "没有东西能够伤害到你。" @@ -71841,10 +72387,10 @@ msgstr "召唤4个永久的恶魔蜘蛛。" msgid "Jolt" msgstr "震颤电击" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py lang/json/mutation_category_from_json.py msgid "a crackle" msgstr "噼里啪啦的闪电声" @@ -71913,6 +72459,31 @@ msgstr "为电离术添加闪光弹效果。" msgid "Wall of Fog" msgstr "雾墙术" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "" + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "祝福" @@ -72025,66 +72596,38 @@ msgstr "你将体内的生化能量过载并导入你的灵脉中,并将其导 msgid "X-ray Vision" msgstr "X光视觉" -#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py -msgid "Mana Siphon" -msgstr "法力虹吸" - -#. ~ Description for Mana Siphon -#: lang/json/SPELL_from_json.py -msgid "" -"This is the spell portion of the mana siphon series of mutations. If you " -"have this spell you probably debugged it in." -msgstr "这是法力虹吸系列突变的法术部分。如果你学会了这个法术,说明你用了调试功能。" - -#: lang/json/SPELL_from_json.py -msgid "Pew, Pew" -msgstr "砰砰术" - -#. ~ Description for Pew, Pew -#: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." -msgstr "你用手指指着施法目标,嘴里发出“砰砰”声。" - #: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "地板变岩浆" +msgid "Knock" +msgstr "敲击术" -#. ~ Description for The Floor is Lava +#. ~ Description for Knock #: lang/json/SPELL_from_json.py msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" -msgstr "最好赶紧找一把椅子或柜台爬上去,因为地板变成岩浆了!" +"You channel magic into a force capable of opening doors. This variant can " +"only open wooden doors." +msgstr "你引导魔力,将其变成能够打开门的力量。这种法术只能打开木门。" #: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" -msgstr "运动训练蒙太奇" +msgid "Improved Knock" +msgstr "高等敲击术" -#. ~ Description for Sports Training Montage +#. ~ Description for Improved Knock #: lang/json/SPELL_from_json.py msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." -msgstr "当做一件事需要很长时间,而你又想快速完成时,你需要一个蒙太奇。" - -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "亲亲伤口术" +"You channel magic into a force capable of opening doors. This variant can " +"open any locked door." +msgstr "你引导魔力,将其变成能够打开门的力量。这种法术能打开任何锁住的门。" -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." -msgstr "一个温柔的吻,让痛苦消失,就像妈妈曾经做的那样。" - -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" -msgstr "召唤木乃伊" +#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py +msgid "Mana Siphon" +msgstr "法力虹吸" -#. ~ Description for Summon Mummy +#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." -msgstr "从你灵魂中的扫帚柜里召唤出一个脆弱的纸巾生物。" +"This is the spell portion of the mana siphon series of mutations. If you " +"have this spell you probably debugged it in." +msgstr "这是法力虹吸系列突变的法术部分。如果你学会了这个法术,说明你用了调试功能。" #: lang/json/TOOLMOD_from_json.py msgid "reactor core expansion device" @@ -74370,25 +74913,30 @@ msgid "" msgstr "传说中雷神索尔的神奇腰带,至少看起来是这样的。它能使佩戴者的基础力量加倍。" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" -msgstr[0] "次级口袋腰带" - -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser -#. Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater -#. Girdles of Pockets'} +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" +msgstr[0] "" + +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." -msgstr "一条很适合你腰部的宽腰带,上面覆盖着许多小口袋,能装下超出它们体积的物品,而且口袋中的物品重量大大减少。" +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." +msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" -msgstr[0] "高级口袋腰带" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" +msgstr[0] "" + +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" @@ -78784,13 +79332,11 @@ msgstr[0] "智能手机" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "你启动了手电筒应用。" #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "智能手机没电了。" @@ -80109,7 +80655,6 @@ msgid_plural "fire axes" msgstr[0] "消防斧" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -80124,7 +80669,6 @@ msgid_plural "Halligan bars" msgstr[0] "消防破拆棍" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -80346,6 +80890,28 @@ msgid "" "shovel but really can't compare to a real shovel." msgstr "扁平的石头绑在了木棍上,就当做铁锹用吧,虽然显然比不上啊。" +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than" +" raking leaves." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -80369,6 +80935,26 @@ msgstr[0] "铁锹" msgid "This is a digging tool. Use it to dig pits adjacent to your location." msgstr "一个挖坑工具,你可以用它在你周围挖坑。" +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -81077,6 +81663,11 @@ msgid "" "the right tools, you could use this for metalworking." msgstr "一种便携式烧炭金工锻造工具。搭配合适当的工具,你可以用它来加工金属物品。" +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -81203,6 +81794,17 @@ msgid "" "metalworking fabrication recipes." msgstr "长颈的铝制火钳。是烹饪或金属加工制造的常用工具。" +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -81352,6 +81954,18 @@ msgid "" "and place on the ground." msgstr "一床皮毛制成的铺盖,可以卷起来随身携带。垫在地上,让你更容易入睡。" +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -83092,7 +83706,6 @@ msgid_plural "rags" msgstr[0] "布条" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -83500,11 +84113,11 @@ msgid "" msgstr "电锯已经启动,发出可怕的噪声。激活它来关闭。" #: lang/json/TOOL_from_json.py -msgid "stone hand axe" -msgid_plural "stone hand axes" -msgstr[0] "石手斧" +msgid "stone axe head" +msgid_plural "stone axe heads" +msgstr[0] "石斧斧头" -#. ~ Description for {'str': 'stone hand axe'} +#. ~ Description for {'str': 'stone axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a broad piece of stone with an edge narrow enough to roughly chop " @@ -83512,11 +84125,11 @@ msgid "" msgstr "一块扁平的石头,边缘窄得足以勉强用来砍木头。" #: lang/json/TOOL_from_json.py -msgid "metal hand axe" -msgid_plural "metal hand axes" -msgstr[0] "金属手斧" +msgid "metal axe head" +msgid_plural "metal axe heads" +msgstr[0] "金属斧头" -#. ~ Description for {'str': 'metal hand axe'} +#. ~ Description for {'str': 'metal axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a chunk of steel with one edge hammered down to something resembling" @@ -83630,6 +84243,11 @@ msgid "" "but you could use it to fire anything made of clay." msgstr "这是一个可移动的砖窑,设计用来烧砖的,但也可以烧任何粘土制品。" +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -83776,7 +84394,6 @@ msgid_plural "scissor jacks" msgstr[0] "剪式千斤顶" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "紧凑的剪式千斤顶,用于起重车辆。" @@ -83990,7 +84607,6 @@ msgid_plural "screwdrivers" msgstr[0] "螺丝刀" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -84028,7 +84644,6 @@ msgid_plural "soldering irons" msgstr[0] "电烙铁" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -84410,16 +85025,16 @@ msgid "" " towards enemy targets and highlight them with a powerful spotlight." msgstr "这是一部未激活的猎犬无人机。当成功部署时,它会飞向敌对目标并用它的高功率探照灯照射目标。" -#: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" -msgstr[0] "精密焊接仪" - #: lang/json/TOOL_from_json.py msgid "pseudo atomic butter churn" msgid_plural "pseudo atomic butter churns" msgstr[0] "虚拟原子黄油搅拌机" +#: lang/json/TOOL_from_json.py +msgid "precision solderers" +msgid_plural "precision solderers" +msgstr[0] "精密焊接仪" + #: lang/json/TOOL_from_json.py msgid "atomic smartphone" msgid_plural "atomic smartphones" @@ -84434,7 +85049,7 @@ msgid "" "price made them a rarity. It includes an alarm clock, a high-resolution " "camera, and a bright flashlight." msgstr "" -"使用Rivtech原子智能手机后,你再用不需要给手机充电了。这台尖端设备的使用期超过1000万年,在大灾难来临时,它上市还不到一个星期,贵到令人想哭的价格使其成为稀缺品。它包括一个闹钟、一个高分辨率照相机和一个明亮的手电筒。" +"使用Rivtech原子智能手机后,你再用不需要给手机充电了。这台尖端设备的使用期超过1000万年,在大灾变来临前,它上市还不到一个星期,贵到令人想哭的价格使其成为稀缺品。它包括一个闹钟、一个高分辨率照相机和一个明亮的手电筒。" #: lang/json/TOOL_from_json.py msgid "atomic smartphone - music" @@ -84606,6 +85221,20 @@ msgid "" msgstr "" "一整套非常小的工具和加密所用的数字密钥,通常用于在专门诊所中修复生化插件。它们可以让你拆解一些简单的生化插件,但任何复杂的生化插件都需要更专业的工具才能拆解。" +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -85420,6 +86049,60 @@ msgid "greater wand of cone of cold" msgid_plural "greater wands of cone of cold" msgstr[0] "高级极寒喷射法杖" +#: lang/json/TOOL_from_json.py +msgid "minor wand of knock" +msgid_plural "minor wands of knock" +msgstr[0] "下级敲击术法杖" + +#. ~ Description for {'str': 'minor wand of knock', 'str_pl': 'minor wands of +#. knock'} +#. ~ Description for {'str': 'lesser wand of knock', 'str_pl': 'lesser wands +#. of knock'} +#. ~ Description for {'str': 'greater wand of knock', 'str_pl': 'greater wands +#. of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts knock." +msgstr "一根细长的木制法杖,在底端有一个魔法水晶插槽,激活时会施放一次法术。这根法杖发射的是敲击术。" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of knock" +msgid_plural "lesser wands of knock" +msgstr[0] "次级敲击术法杖" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of knock" +msgid_plural "greater wands of knock" +msgstr[0] "高级敲击术法杖" + +#: lang/json/TOOL_from_json.py +msgid "minor wand of improved knock" +msgid_plural "minor wands of improved knock" +msgstr[0] "下级高等敲击术法杖" + +#. ~ Description for {'str': 'minor wand of improved knock', 'str_pl': 'minor +#. wands of improved knock'} +#. ~ Description for {'str': 'lesser wand of improved knock', 'str_pl': +#. 'lesser wands of improved knock'} +#. ~ Description for {'str': 'greater wand of improved knock', 'str_pl': +#. 'greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts improved knock." +msgstr "一根细长的木制法杖,在底端有一个魔法水晶插槽,激活时会施放一次法术。这根法杖发射的是高等敲击术。" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of improved knock" +msgid_plural "lesser wands of improved knock" +msgstr[0] "次级高等敲击术法杖" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of improved knock" +msgid_plural "greater wands of improved knock" +msgstr[0] "高级高等敲击术法杖" + #: lang/json/TOOL_from_json.py msgid "disposable minor wand of magic missile" msgid_plural "disposable minor wands of magic missile" @@ -85582,6 +86265,60 @@ msgid "disposable greater wand of cone of cold" msgid_plural "disposable greater wands of cone of cold" msgstr[0] "一次性高级极寒喷射法杖" +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of knock" +msgid_plural "disposable minor wands of knock" +msgstr[0] "一次性下级敲击术法杖" + +#. ~ Description for {'str': 'disposable minor wand of knock', 'str_pl': +#. 'disposable minor wands of knock'} +#. ~ Description for {'str': 'disposable lesser wand of knock', 'str_pl': +#. 'disposable lesser wands of knock'} +#. ~ Description for {'str': 'disposable greater wand of knock', 'str_pl': +#. 'disposable greater wands of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts knock." +msgstr "一根细长的木制法杖,在底端镶嵌有一颗魔法水晶,激活时会施放一次法术。这根法杖发射的是敲击术。" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of knock" +msgid_plural "disposable lesser wands of knock" +msgstr[0] "一次性次级敲击术法杖" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of knock" +msgid_plural "disposable greater wands of knock" +msgstr[0] "一次性高级敲击术法杖" + +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of improved knock" +msgid_plural "disposable minor wands of improved knock" +msgstr[0] "一次性下级高等敲击术法杖" + +#. ~ Description for {'str': 'disposable minor wand of improved knock', +#. 'str_pl': 'disposable minor wands of improved knock'} +#. ~ Description for {'str': 'disposable lesser wand of improved knock', +#. 'str_pl': 'disposable lesser wands of improved knock'} +#. ~ Description for {'str': 'disposable greater wand of improved knock', +#. 'str_pl': 'disposable greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts improved knock." +msgstr "一根细长的木制法杖,在底端镶嵌有一颗魔法水晶,激活时会施放一次法术。这根法杖发射的是高等敲击术。" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of improved knock" +msgid_plural "disposable lesser wands of improved knock" +msgstr[0] "一次性次级高等敲击术法杖" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of improved knock" +msgid_plural "disposable greater wands of improved knock" +msgstr[0] "一次性高级高等敲击术法杖" + #: lang/json/TOOL_from_json.py msgid "finger firelighter" msgid_plural "finger firelighters" @@ -85709,66 +86446,6 @@ msgid "" "magical metals into their workable ingot form." msgstr "一个便携式版本的火炭锻造台,它使用了恶魔蜘蛛甲壳进行附魔和强化,以便能够将魔法金属熔化成能够制造物品的锭。" -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "测试用布条" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "测试用消防破拆棍" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "测试用消防斧" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "测试用螺丝刀" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "测试用超音速螺丝刀" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "一把测试用超音速螺丝刀。和普通螺丝刀一样,但是是超音速的。" - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "测试用电烙铁" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "测试用剪式千斤顶" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "测试用智能手机" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "一个带手电筒、相机和MP3播放器的UPS供电的智能手机。" - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "测试用火柴" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "测试用火柴,当你必须燃烧东西时点燃它,为了科学!" - #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" msgid_plural "yokes and harnesses" @@ -86126,14 +86803,42 @@ msgstr "无论谷有多深" msgid "Freeman's favorite" msgstr "弗里曼博士的最爱" +#: lang/json/achievement_from_json.py +msgid "Wield a crowbar" +msgstr "手持撬棍" + #: lang/json/achievement_from_json.py msgid "Impenetrable" msgstr "固若金汤" +#: lang/json/achievement_from_json.py +msgid "Wear a tank suit" +msgstr "穿上机甲" + #: lang/json/achievement_from_json.py msgid "What are they hiding?" msgstr "他们在隐瞒什么?" +#: lang/json/achievement_from_json.py +msgid "Enter a lab finale room" +msgstr "进入实验室终点房" + +#: lang/json/achievement_from_json.py +msgid "The Last Homely House" +msgstr "最后的庇护所" + +#: lang/json/achievement_from_json.py +msgid "Reach a refugee center" +msgstr "抵达难民中心" + +#: lang/json/achievement_from_json.py +msgid "Return to your roots" +msgstr "寻根之旅" + +#: lang/json/achievement_from_json.py +msgid "Return to the location you started the game" +msgstr "回到游戏起始位置" + #: lang/json/achievement_from_json.py msgid "Would-be Wizard" msgstr "准魔法师" @@ -86941,10 +87646,6 @@ msgstr "液态汞" msgid "mana energy" msgstr "魔力" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "兴奋蒸汽" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "肾上腺素泵" @@ -88364,20 +89065,6 @@ msgstr "你的背上安装了一排像蝴蝶翅膀的可伸缩太阳能面板。 msgid "Wind Turbines" msgstr "风力发电机" -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "精密焊接仪" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" -"你的手上配备了精确的焊接工具、钢丝钳和电缆线轴。它们太迷你了,不适用于制造大多数物品,但是在缺乏合适的机器的情况下,它们对于制造生化插件而言是必不可少的。" - #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" msgstr "榴弹发射器" @@ -88426,6 +89113,20 @@ msgid "" msgstr "" "你曾经为一些可怕的人工作过。那些人在你颅脑里安装了一个炸弹。他们现在都死了,但不幸的是,如果你30天内没向他们报告就会触发炸弹的自毁装置。你需要尽快把这玩意取出来。" +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "精密焊接仪" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" +"你的手上配备了精确的焊接工具、钢丝钳和电缆线轴。它们太迷你了,不适用于制造大多数物品,但是在缺乏合适的机器的情况下,它们对于制造生化插件而言是必不可少的。" + #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" msgid_plural "Ionic Overload Generators" @@ -88773,7 +89474,7 @@ msgid "Merciful" msgstr "仁慈" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp src/scenario.cpp msgid "All" msgstr "全部" @@ -91257,7 +91958,7 @@ msgstr "你骑着动物。" msgid "You mount your steed." msgstr "你骑上你的坐骑。" -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "着火" @@ -93722,70 +94423,6 @@ msgstr "你被口香糖黏住了!" msgid "The gum webs constrict your movement." msgstr "口香糖网限制了你的行动。" -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "调试" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" -"你正在调试游戏!\n" -"一切都会变得正常了吧。" - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "深入你的内心代码,你会找到一只橡皮鸭,然后向它反复解释到死。" - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "充分优化" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "调试最大最小值" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "拥有做坏人的所有好处,而没有做好人的任何缺点!" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "你觉得自己体内指标就像是面对哈哈镜时一样被拉紧。" - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "喔噢" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "瓦特?" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "哇噢!" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" -"一切都太紧张了,我的伙计!\n" -"你感到困惑和迷失。" - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "!!紧张紧张,刺激刺激!!" - #: lang/json/faction_from_json.py msgid "Your Followers" msgstr "你和你的同伴" @@ -93970,6 +94607,17 @@ msgid "" " the kind words used about them." msgstr "沃特利家族是新英格兰一个守旧的怪人家庭。用怪人来形容他们算是说他们的好话。" +#: lang/json/faction_from_json.py +msgid "Swampers Religious Community and Hotels and Casinos" +msgstr "沼泽教及下属酒店和赌场" + +#. ~ Description for Swampers Religious Community and Hotels and Casinos +#: lang/json/faction_from_json.py +msgid "" +"A prosperous but secretive group of churchgoers and entertainment moguls " +"with an affection for dinosaurs. They welcome all untainted humans." +msgstr "一群富有但神秘的教会信徒和娱乐大亨,他们对恐龙有着某种浓厚的爱慕之情。他们欢迎所有未受污染的人类。" + #: lang/json/faction_from_json.py msgid "The Ancient Ones" msgstr "上古遗存" @@ -98054,6 +98702,79 @@ msgid "" "temperature. You'll need to take it down first." msgstr "这台冰箱经过了进一步的整修,可在更低的温度下运行。你得先把它取下来。" +#: lang/json/furniture_from_json.py +msgid "sleep pod" +msgstr "休眠舱" + +#. ~ Description for sleep pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a climate controlled sleep pod. An easy way to reduce energy costs " +"in dense urban environments." +msgstr "这是一个带有恒温控制机构的休眠舱。在密集的城市环境中降低能源成本的简单方法。" + +#: lang/json/furniture_from_json.py +msgid "cryo pod" +msgstr "低温休眠舱" + +#. ~ Description for cryo pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a long term sleep pod. Cryo pods are mostly used by people waiting " +"a short term for organs or criminals avoiding heat right after a crime." +msgstr "这是一个长期休眠舱。低温休眠舱主要是用来等待器官的病人或是供罪犯躲避犯罪后的热度。" + +#: lang/json/furniture_from_json.py +msgid "CRISPR Biolab" +msgstr "CRISPR生物实验室" + +#. ~ Description for CRISPR Biolab +#: lang/json/furniture_from_json.py +msgid "" +"A boxy looking device of arms, droppers and pipettes. It was used pre-" +"Cataclysm to do expirements in gene editing." +msgstr "一个方形的装置,由各式机械臂、滴管和吸管组成。它被用于大灾变前的基因编辑实验之中。" + +#: lang/json/furniture_from_json.py +msgid "3D printer" +msgstr "3D打印机" + +#. ~ Description for 3D printer +#: lang/json/furniture_from_json.py +msgid "" +"This box was used for rapid prototyping of products and for general " +"entertainment purposes in the masses." +msgstr "这台方形设备用于产品原型的快速迭代和普通大众的娱乐使用。" + +#: lang/json/furniture_from_json.py +msgid "neural net inserter" +msgstr "神经网络植入器" + +#. ~ Description for neural net inserter +#: lang/json/furniture_from_json.py +msgid "" +"This device looks like a cross between some kind of nightmare dentistry " +"equipment and socketing tool mounted on a slide that lets it drop precisely " +"down. Useful for those project that require putting delicate items into " +"hard to reach spaces." +msgstr "" +"这个设备看起来像是某种梦魇般的牙科设备和安装在滑槽上的套管工具的混合体,滑槽可以精确地控制套管落下的位置。对于那些需要将精细物品放入难以触及的空间的手术很有用。" + +#: lang/json/furniture_from_json.py +msgid "monomolecular saw" +msgstr "单分子锯" + +#. ~ Description for monomolecular saw +#: lang/json/furniture_from_json.py +msgid "" +"A wire the size of a cheescutter runs in a single direction in this tool, " +"allowing atomically precise cuts at almost any angle. Even unpowered it " +"gives off a visual distortion for several inches around it to prevent you " +"from losing a hand. It is impossible to deconstruct this device without the" +" wire self destructing." +msgstr "" +"一根像奶酪刀那么大的线在这台机器中单向运行,能以任何角度进行原子级别的精确切割。即使没有动力,刀头周围几英寸范围内的物体也会有些视觉畸变扭曲,以防止你意外失去一只手。如果不先摧毁刀头,你无法拆解这台设备。" + #. ~ Description for dresser #: lang/json/furniture_from_json.py msgid "Dress yourself!" @@ -98423,8 +99144,7 @@ msgid "" " a double barrel shotgun." msgstr "一把自制三管枪械,一根枪管用来发射 .30-06 口径步枪子弹,另外两根则用来发射霰弹。它是用从双管猎枪上拆下来的部件和钢管制成的。" -#: lang/json/gun_from_json.py lang/json/gun_from_json.py -#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" msgstr "霰弹枪" @@ -98572,7 +99292,8 @@ msgid "" "standard UPS." msgstr "一款自制的激光手枪,设计灵感源自于21世纪中期的V29激光手枪。虽然只是各类由胶带简单固定在一起电子原件,它依旧可以使用标准的UPS供能。" -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py src/item.cpp +#: lang/json/gun_from_json.py lang/json/gun_from_json.py +#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py src/item.cpp msgctxt "gun_type_type" msgid "pistol" msgstr "手枪" @@ -101959,6 +102680,17 @@ msgstr "" "温彻斯特 1897 " "霰弹枪是首批在商业上成功的泵动霰弹枪之一。它的\"堑壕战\"型号已经成为一个高度浪漫化的一战美国象征。它的枪套、刺刀卡口和17英寸长的刺刀,无可否认,让这把霰弹枪看上去十分骇人。现在已经没有战壕需要清理,但来个充满丧尸的城镇也足够了。" +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "" + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -102591,6 +103323,15 @@ msgstr "一把仍安装在\"幽灵怪\"机器人的一只机械手上的三管 msgid "trilaser" msgstr "三管激光" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -103368,6 +104109,11 @@ msgid "" msgstr "" "一种使用可拆卸弹匣供弹的霰弹枪,主要用户是狂热的普通爱好者。它有一条导轨、看上去相当有威慑力的黑色外观,这类霰弹枪看上去一点都不像是为竞赛设计的。它使用弹匣供弹,减少了霰弹枪为人熟知的漫长装填时间。尽管因为保养要求高而出名,但经过使用者的精心校准之后可以提高整体可靠性。" +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -103444,20 +104190,6 @@ msgstr "一把魔法生成的华丽反曲弓。由结实而有弹性的木料制 msgid "Fake gun that fires barbed javelins." msgstr "射出带刺标枪的假枪。" -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "测试用现代复合弓" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "测试用格洛克手枪" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "一把测试用的格洛克手枪,数据基于格洛克9mm手枪。" - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -105239,15 +105971,6 @@ msgid "" "replacing the iron sights. Increases accuracy and weight." msgstr "在你的枪上安装一个使用魔力结晶发光的蓝点瞄具以取代机械瞄准具。提高命中率,增加重量。" -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "测试用消音器" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "测试用的消音器模组。" - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "你把鱼掏除内脏并切成片" @@ -105275,8 +105998,34 @@ msgid "" msgstr "你笨手笨脚地将这一大块融合的腐烂肉块砍开,并小心观察是否有什么突出的特殊物品。" #: lang/json/harvest_from_json.py -msgid "You laboriously dissect the colossal insect." -msgstr "你费力地解剖了这只体型巨大的昆虫。" +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "You laboriously dissect the colossal insect. " +msgstr "你费力地解剖了这只体型巨大的昆虫。" + +#: lang/json/harvest_from_json.py +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"What appeared to be insect hairs on the chitin of this creature look more " +"like tiny feathers as you pare them back. Inside is a bundle of bubble-like" +" tissue sacs that appear to be floating, which doesn't fit with what you " +"know about real bees." +msgstr "" +"在剥皮时,你发现这只生物的甲壳上的附带的昆虫毛发看起来更像是小羽毛。里面是一团气泡状组织构成的气囊,看起来像是漂浮在空中,这与你所知道的真正的蜜蜂解剖结构不符。" + +#: lang/json/harvest_from_json.py +msgid "" +"There's a faintly hairy, skin-like membrane, covered in blood vessels, " +"beneath the chitin of this creature. Inside it is a bundle of bubble-like " +"tissue sacs that appear to be floating, which doesn't fit with what you know" +" about real wasps." +msgstr "" +"在这种生物的甲壳下面,有一层薄薄的毛茸茸的皮肤一样的薄膜,上面覆盖着血管。里面是一团气泡状组织构成的气囊,看起来像是漂浮在空中,这与你所知道的真正的黄蜂解剖结构不符。" #: lang/json/harvest_from_json.py msgid "You laboriously hack and dig through the remains of the fungal mass." @@ -107743,6 +108492,13 @@ msgstr "这种装备会让你难以稳定重心。穿着时被击中可能会让 msgid "This item can be used to communicate with radio waves." msgstr "通过这件物品可以进行无线交流。" +#. ~ Please leave anything in unchanged. +#: lang/json/json_flag_from_json.py +msgid "" +"This item can be used to pick locks with zero " +"effort." +msgstr "这件物品可以 无消耗 开锁。" + #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is designed to keep you dry in the rain." @@ -110025,6 +110781,15 @@ msgstr "丧尸陷阱" msgid "Zombie trap." msgstr "这里有个吸引丧尸的陷阱。" +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "" + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -111339,6 +112104,11 @@ msgid "" "years.'" msgstr "沃特利家族殡仪馆服务。已为新英格兰服务了三百年。" +#. ~ Computer name +#: lang/json/mapgen_from_json.py +msgid "DinoLab Operating Theater Controls" +msgstr "恐龙实验室手术中心控制台" + #: lang/json/martial_art_from_json.py msgid "No style" msgstr "无流派" @@ -111628,6 +112398,21 @@ msgstr "" "解锁“回旋踢”和“扫堂腿”。\n" "持续 3 回合。" +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "巴西战舞节拍" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': +#. 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "鹤形拳" @@ -111807,6 +112592,22 @@ msgstr "" "\n" "命中+2。" +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "卡力连击" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': +#. 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "击剑" @@ -111848,6 +112649,33 @@ msgstr "" "\n" "被格挡的伤害按敏捷的 50% 减少。" +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "招架" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -111903,6 +112731,34 @@ msgstr "" "格挡次数-2,闪避技能+1,所受格挡伤害按力量的 50% 增加。\n" "持续 1 回合。" +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "柔道" @@ -112178,6 +113034,32 @@ msgstr "" "\n" "格挡次数 +1,格挡后的伤害按力量的 50% 减少。" +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "泰拳" @@ -112220,6 +113102,21 @@ msgstr "" "\n" "格挡后的伤害按力量的 50% 减少。" +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "坚定决心" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay +#. Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% of Strength.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "忍术" @@ -112296,6 +113193,34 @@ msgstr "" "+1 闪避技能,命中率按敏捷的 20% 提升。\n" "持续 1 回合。" +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': +#. 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "二天一流" @@ -112387,6 +113312,39 @@ msgstr "" "解锁\"闪现突攻\"。\n" "持续 1 回合。" +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "古希腊搏击" @@ -112558,6 +113516,21 @@ msgstr "" "\n" "命中按感知的 25% 增加,同时按敏捷的 25% 减少。" +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "日本枪术" @@ -112735,6 +113708,21 @@ msgstr "" "命中率按感知的 20% 增加,钝击护甲穿透按感知的 50% 增加。\n" "持续 2 回合。" +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "虎形拳" @@ -112796,6 +113784,21 @@ msgstr "" "\n" "命中按力量的 25% 增加,同时按敏捷的 25% 减少。" +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "咏春" @@ -112857,6 +113860,20 @@ msgstr "" "\n" "闪避技能按感知的 15% 增加。格挡伤害按感知的 50% 减少。" +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch (Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "醉拳" @@ -112986,6 +114003,34 @@ msgid "" "armor, +Perception fire armor." msgstr "+力量 钝击防护,+敏捷 酸液防护,+智力 电击防护,+感知 火焰防护。" +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2" +" times." +msgstr "" + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "生化格斗术" @@ -113031,6 +114076,22 @@ msgstr "" "\n" "格挡次数+2,命中+1。" +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic +#. Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "蜈蚣拳" @@ -113072,6 +114133,20 @@ msgstr "" "移动耗时-4。\n" "持续 3 回合。可叠加 4 次。" +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': +#. 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "壁虎功" @@ -113213,6 +114288,20 @@ msgstr "" "解锁“巨螯击”。\n" "可叠加 2 次。持续 2 回合。" +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': +#. 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "蛤蟆功" @@ -113272,6 +114361,34 @@ msgstr "" "-1 钝击/斩击/刺击防护。\n" "持续 6 回合。可叠加 6 次。" +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad +#. Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "毒蛇功" @@ -113641,6 +114758,34 @@ msgstr "" "闪避次数+1\n" "持续 1 回合。可叠加 2 次" +#: lang/json/martial_art_from_json.py +msgid "Quicksilver Motion" +msgstr "" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': +#. 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence combine to allow you to make a fast, bold move that catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond +#. Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Hylian Swordsmanship" msgstr "海拉尔剑术" @@ -113751,6 +114896,47 @@ msgstr "" "-25%行动耗时。\n" "持续 1 回合。" +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Heart" +msgstr "铁心" + +#. ~ Description for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Absolute mastery of the sword is the goal of the Iron Heart discipline. " +"Through unending practice and study, the Iron Heart adept achieves " +"superhuman skill with her weapons. Iron Heart maneuvers are demonstrations " +"of uncanny martial skill—weaving patterns of steel that dizzy, confuse, and " +"ultimately kill with no recourse." +msgstr "" +"对剑术的绝对掌握是铁心流派修炼的目标。通过不断的训练和学习,一名铁心高手能用手中的武器展现出超人般的技能。铁心流派的招式大都是不可思议的武术技巧,它用钢铁编织出的图案让人晕眩、迷惑,最终杀死毫无抵抗的敌人。" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "You push away your fear and stand tall." +msgstr "你清空内心的恐惧并站直身体。" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s takes a bold and fearless stance." +msgstr "%s 摆出了一个勇敢无畏的姿势。" + #: lang/json/martial_art_from_json.py msgid "Panzer Kunst" msgstr "机甲术" @@ -113810,6 +114996,407 @@ msgstr "" "钝击护甲穿透+5。\n" "持续 2 回合。" +#: lang/json/martial_art_from_json.py +msgid "Pokken" +msgstr "口袋铁拳" + +#. ~ Description for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Pokken or \"Pocket Fist\" is a strange martial art developed from the famous" +" Pokemon video game series. Somehow, a group of dedicated fans managed to " +"combine the moves used by various pokemon with multiple existing martial " +"arts such as boxing and karate. Amazingly, it actually works. Some might " +"even say it's a super effective way to fight." +msgstr "" +"“口袋铁拳”是从著名的宝可梦系列电子游戏发展而来的一种奇怪的武术流派。不知怎的,一群热心的粉丝设法将各种精灵宝可梦中的招式与拳击、空手道等多种现有武术结合起来。令人惊讶的是,它确实有效。有人甚至会说这是一种效果拔群的战斗方式。" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "You get ready to battle." +msgstr "你准备好战斗了。" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s is about to challenge someone to a battle." +msgstr "%s 准备好和人战斗了。" + +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Setting Sun" +msgstr "暮日" + +#. ~ Description for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Setting Sun discipline teaches its initiates to turn their opponents' " +"strength against them. With a quick shift in stance and carefully aimed " +"attack, a Setting Sun warrior sends a charging enemy tumbling in a new " +"direction." +msgstr "暮日流派教导其修习者利用敌人的力量对抗敌人。随着姿态的快速转变和精心瞄准的攻击,暮日战士能让向自己冲锋的敌人失去重心翻滚向另一个方向。" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "You shift your weight and prepare to defend yourself." +msgstr "你调整重心,准备好防御自己。" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s shifts their weight and assumes a new stance." +msgstr "%s 调整重心,摆出了一个新姿势。" + +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and \"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Shii-Cho" +msgstr "锡秋剑法" + +#. ~ Description for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Shii-Cho, \"The way of the Sarlacc\" was the first form lightsaber combat " +"developed by the Jedi during their transition from metal weaponry to " +"lightsabers. Shii-Cho is regarded as a training form that all Jedi learn to" +" understand the basics of armed combat. Shii-Cho excels at fighting against" +" groups but lacks the offensive power of the other lightsaber forms." +msgstr "" +"锡秋剑法,“沙拉克之路”是绝地武士从金属武器向光剑过渡期间发展起来的第一种光剑战斗流派。锡秋剑法被认为是所有绝地武士在学习了解武装战斗基本知识时使用的训练剑法。锡秋剑法擅长对抗多名敌人,但缺乏其他光剑流派的攻击力。" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You place one foot back and hold your weapon vertically on your dominant " +"side." +msgstr "你一只脚后退,把你的武器竖直握在你的主手侧。" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s places one foot back and hold their weapon vertically." +msgstr "%s 一只脚后退,把武器竖直握在主手侧。" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are a determined warrior. Your inner calm aids you in landing your strikes and protecting yourself.\n" +"\n" +"Blocked damage reduced by 100% of Strength, +1 Accuracy." +msgstr "" +"你是一名坚定的战士。你内心的平静有助于你击中敌人并保护自己。\n" +"\n" +"格挡后的伤害按力量的100%减少,命中+1。" + +#: lang/json/martial_art_from_json.py +msgid "Apprentice Training" +msgstr "实习训练" + +#. ~ Description of buff 'Apprentice Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training in Shii-Cho teaches you how to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"你对锡秋剑法的训练教你如何与多个对手作战。\n" +"\n" +"格挡次数+1,格挡效果+1。" + +#: lang/json/martial_art_from_json.py +msgid "Knight Training" +msgstr "武士训练" + +#. ~ Description of buff 'Knight Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Further training in Shii-Cho improves your ability to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"你对锡秋剑法的进一步训练提高了你与多个对手作战的能力。\n" +"\n" +"格挡次数+1,格挡效果+1。" + +#: lang/json/martial_art_from_json.py +msgid "Master Training" +msgstr "大师训练" + +#. ~ Description of buff 'Master Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"As a master of Shii-Cho, your ability to fight against groups is second to none.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" +"作为一名锡秋剑法大师,你对抗多个敌人的能力无人能敌。\n" +"\n" +"格挡次数+1,格挡效果+1。" + +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to die.\n" +"\n" +"+5% critical hit chance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "酒精" @@ -114293,8 +115880,8 @@ msgid "Emulsified Hydrogel" msgstr "乳化水凝胶" #: lang/json/material_from_json.py -msgid "pupled" -msgstr "碎浆的" +msgid "pulped" +msgstr "" #: lang/json/material_from_json.py msgid "Arcane Skin" @@ -116011,7 +117598,7 @@ msgid "Can you go find my son and tell him to check in with us." msgstr "你能找到我儿子让他回来吗?" #: lang/json/mission_def_from_json.py lang/json/mission_def_from_json.py -#: lang/json/talk_topic_from_json.py +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py msgid "Thank you." msgstr "谢谢你。" @@ -116304,9 +117891,9 @@ msgstr "我需要有人帮我找点东西。" #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20" +"We could use some 3 liter jars to preserve our produce. Can you bring me 10" " large three liter jars? I'll give you some preserves in exchange." -msgstr "我们需要些 3L 玻璃罐来腌制我们的作物。你能帮我找 20 个吗?作为谢礼我会给你一些腌菜。" +msgstr "" #: lang/json/mission_def_from_json.py msgid "Thank you. It's important to preserve foods while we can." @@ -118080,6 +119667,87 @@ msgstr "是啊,当然了。" msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "好吧,我只能自己去找金子了,算我自讨没趣。" +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check" +" it out, I'll owe you a favor." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "制造 2 个蒸馏器" @@ -119368,6 +121036,54 @@ msgstr "让我们看看我们能从这些宝贝身上得到些什么改进。" msgid "I can't be Dr Frankenstein unless you get me these." msgstr "你不给我带来这些东西我可当不成弗兰肯斯坦医生。" +#: lang/json/mission_def_from_json.py +msgid "Gather meat for Bo Baronyx. About 8 should do it." +msgstr "收集些肉带给博·巴罗尼克斯。8块应该就够了。" + +#: lang/json/mission_def_from_json.py +msgid "The eaters are hungry. They need meat" +msgstr "大食客们饿了,他们需要肉。" + +#: lang/json/mission_def_from_json.py +msgid "" +"If you wish to feed the eaters, your work will be rewarded. Go out, butcher" +" a pure animal. Not a false eater, the meat must be good to eat. Then " +"bring me the meat and I will see to the eaters." +msgstr "如果你想给大食客们喂食,你的工作就会得到回报。去外面,屠宰一只纯种动物。不是假食者,肉必须是可以吃的。然后把肉给我,我去拿给大食客们。" + +#: lang/json/mission_def_from_json.py +msgid "Excellent. The eaters must feed." +msgstr "太棒了。大食客们必将进食。" + +#: lang/json/mission_def_from_json.py +msgid "Understood. The great eaters will feed either way." +msgstr "明白了。大食客们总会找到方法进食的。" + +#: lang/json/mission_def_from_json.py +msgid "" +"Some of the animals have become touched by the pretenders in recent days, " +"larger and more dangerous, producing tainted mutant meat. This will not " +"work for the great eaters, it must be the true meat." +msgstr "最近一阵子一些生物被伪神触碰过,变得又大又危险,产生了被污染的变异肉。这些肉不能给大食客,它必须是真正的肉。" + +#: lang/json/mission_def_from_json.py +msgid "Have you brought meat?" +msgstr "你带肉来了吗?" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed." +msgstr "大食客们必将进食。" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed I am sure." +msgstr "大食客们必将进食,我确信。" + +#: lang/json/mission_def_from_json.py +msgid "" +"I see no meat. There is meat in the forests and swamps waiting for the " +"eaters." +msgstr "我没看到肉。森林和沼泽里都有肉在等着大食客们。" + #: lang/json/mission_def_from_json.py msgid "Retrieve Magic Book" msgstr "取回魔法书" @@ -121687,6 +123403,23 @@ msgid "" "footing." msgstr "你的腿部肌肉与协调能力更加出色,可以比别人走、跑得更快,俗称\"健步如飞\"。你步行的速度增加15%。" +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore" +msgstr "反射式发光器" + +#. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "" +"A photophore has grown from your head. You can't consciously control it, " +"and it might start to shine in response to your emotions or your " +"physiological state." +msgstr "你的头上长出了一个发光器。你不能自主控制它,它可能会随着你的情绪或生理状态而自行发光。" + +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "弱发光器" @@ -121699,14 +123432,51 @@ msgid "" "mating season." msgstr "从你的额头上长出一个发光器官,你可以使它发出微光。这将使你在黑暗中非常明显,很适合在交配季节吸引伴侣。" +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "发光器" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." -msgstr "你额头上的发光器官现在能发出强光。" +msgid "You can make your photophore glow brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Normal Human" +msgstr "正常人" + +#. ~ Description for {'str': 'Normal Human'} +#: lang/json/mutation_from_json.py +msgid "" +"You're a normal human, there's nothing wrong with you. No need to worry." +msgstr "你现在是个正常人,没什么问题。不用担心。" + +#: lang/json/mutation_from_json.py +msgid "Violent Monster" +msgstr "猛兽形态" + +#. ~ Description for {'str': 'Violent Monster'} +#: lang/json/mutation_from_json.py +msgid "Anger clouds your mind, you can't think straight but you feel strong." +msgstr "莫名的愤怒充满了你的头脑,你脑子里一团糟,但你感觉自己很强大。" #: lang/json/mutation_from_json.py msgid "Good Hearing" @@ -121800,10 +123570,12 @@ msgstr "快速自愈" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." -msgstr "睡眠时你恢复得比普通人更快,甚至在不睡觉的时候也会少量恢复HP。" +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." +msgstr "" #: lang/json/mutation_from_json.py msgid "Light Eater" @@ -122430,8 +124202,11 @@ msgstr "慢速自愈" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." -msgstr "你的恢复速度比大多数人要慢一些;你通过睡眠恢复的HP比普通人要少一些。" +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Poor Healer" @@ -122439,10 +124214,11 @@ msgstr "自愈弱化" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to" -" recover only a third of usual HP." -msgstr "你的机体自愈能力严重受损,你通过睡眠所恢复的HP只有常人的三分之一。" +"Your health recovery is severely impaired. Your HP whilst asleep as well as" +" your broken limbs heal at 33% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Imperceptive Healer" @@ -122450,10 +124226,11 @@ msgstr "自愈无效" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth" -" of usual HP." -msgstr "你身上的伤口几乎无法通过睡眠治愈,你通过睡眠所恢复的HP只有常人的十分之一。" +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP" +" whilst asleep as well as your broken limbs heal at 10% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Far-Sighted" @@ -123165,10 +124942,11 @@ msgstr "高速自愈" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not " -"sleeping." -msgstr "你的机体自愈能力发生了变异,能在受创发生时缓慢愈合,即使不睡觉的时候也能恢复HP。" +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Regeneration" @@ -123176,8 +124954,12 @@ msgstr "急速自愈" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." -msgstr "你的机体自愈能力发生了变异,你在受创时,身体会以难以置信的速度愈合伤口。" +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster" +" whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16" +" times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Reptilian Healing" @@ -123185,8 +124967,10 @@ msgstr "蜥蜴再生" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." -msgstr "你的机体自愈能力发生了变异,并产生了强大的断肢再生能力。断掉的肢体可以如蜥蜴的尾巴一般轻易的再生。" +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Very Little Sleep" @@ -127286,8 +129070,9 @@ msgstr "快速反应" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." -msgstr "你反应很快,让你更容易闪避敌人的攻击。" +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." +msgstr "" #: lang/json/mutation_from_json.py msgid "Survivor Story" @@ -128515,6 +130300,28 @@ msgid "" "improves as your unarmed skill increases." msgstr "谁说要用武器呢?你在徒手攻击时能够造成更多的近战伤害。伤害随着你的徒手格斗技能等级提升而提升。" +#: lang/json/mutation_from_json.py +msgid "Jedi Training" +msgstr "绝地武士训练" + +#. ~ Description for {'str': 'Jedi Training'} +#: lang/json/mutation_from_json.py +msgid "" +"You are trained in the ways of the Jedi. Your knowledge allows you to " +"utilize a form of lightsaber combat." +msgstr "你受过绝地武士训练。这让你能够使用光剑战斗流派作战。" + +#: lang/json/mutation_from_json.py +msgid "Pokken Master" +msgstr "口袋铁拳大师" + +#. ~ Description for {'str': 'Pokken Master'} +#: lang/json/mutation_from_json.py +msgid "" +"You are well versed in the monsterous Pocket Fist martial art. Train well, " +"because it is your destiny to be a master." +msgstr "你非常精通口袋铁拳中的各类武术招式。好好训练,因为你命中注定要成为一名训练师。" + #: lang/json/mutation_from_json.py msgid "Martial Adept" msgstr "武术专长" @@ -128523,8 +130330,9 @@ msgstr "武术专长" #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." -msgstr "你是一名武道高手,学会了至高之道的武术流派中的一种。" +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." +msgstr "" #: lang/json/mutation_from_json.py msgid "Magus" @@ -129508,6 +131316,14 @@ msgstr "乳齿象基因擢升战士" msgid "Humans created me. Let's see what I can be on my own." msgstr "人类创造了我。让我看看我自己能做什么。" +#: lang/json/npc_class_from_json.py +msgid "Swamper" +msgstr "沼泽教教众" + +#: lang/json/npc_class_from_json.py +msgid "The great eaters have returned and they must be fed" +msgstr "大食客们回来了,他们必须进食。" + #: lang/json/npc_class_from_json.py msgid "Operator" msgstr "特种兵" @@ -129793,6 +131609,14 @@ msgstr "异界生物学家,疯女人" msgid "Millyficen Whately" msgstr "米利菲森·沃特利" +#: lang/json/npc_from_json.py +msgid "CEO" +msgstr "CEO" + +#: lang/json/npc_from_json.py +msgid "Bo Baronyx" +msgstr "博·巴罗尼克斯" + #: lang/json/npc_from_json.py msgid "magus" msgstr "魔术师" @@ -137262,6 +139086,118 @@ msgid "" "time before the horrors patrolling the skies shot you down." msgstr "你受够了看到东西从天上掉下来,把士兵和幸存者从一个地方运输到另外一个地方。你知道在天空巡逻的恐惧迟早会把你击倒。" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -137440,9 +139376,10 @@ msgstr "CBM工程师" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." -msgstr "你是一名在一间全无菌高安防级别的设施中制造生化插件的技术工程师。在你手中植入的焊枪和精密焊接设备的帮助下,你获得了丰厚的报酬。" +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." +msgstr "" #: lang/json/professions_from_json.py msgctxt "profession_female" @@ -137454,9 +139391,10 @@ msgstr "CBM女工程师" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." -msgstr "你是一名在一间全无菌高安防级别的设施中制造生化插件的技术工程师。在你手中植入的焊枪和精密焊接设备的帮助下,你获得了丰厚的报酬。" +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." +msgstr "" #: lang/json/professions_from_json.py msgctxt "profession_male" @@ -138750,6 +140688,226 @@ msgid "" "find some other use." msgstr "随着大灾变的到来,你可能得想办法把在考试时学会的作弊技巧用在其它方面了。" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -140416,8 +142574,8 @@ msgid "build a metalworking forge" msgstr "建造金属锻造工坊" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." -msgstr "让我们建造一个铁砧和熔炉来增加我们的制造物品选项。" +msgid "Let's build an anvil and crucible to increase our crafting options." +msgstr "" #: lang/json/recipe_from_json.py msgid "add an anvil and crucible" @@ -144686,6 +146844,40 @@ msgctxt "start_name" msgid "Wizard's Retreat Vacation" msgstr "魔法师度假地" +#. ~ Name for scenario 'Exile' for a male character +#: lang/json/scenario_from_json.py +msgctxt "scenario_male" +msgid "Exile" +msgstr "流放者" + +#. ~ Name for scenario 'Exile' for a female character +#: lang/json/scenario_from_json.py +msgctxt "scenario_female" +msgid "Exile" +msgstr "流放者" + +#. ~ Description for scenario 'Exile' for a male character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_male" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "你是一个流放者,不管是因为人们害怕你的背景而回避你,亦或是因为你个人的选择。但这些亡者并不想放过你。" + +#. ~ Description for scenario 'Exile' for a female character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_female" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "你是一个流放者,不管是因为人们害怕你的背景而回避你,亦或是因为你个人的选择。但这些亡者并不想放过你。" + +#. ~ Starting location for scenario 'Exile'. +#: lang/json/scenario_from_json.py +msgctxt "start_name" +msgid "Exiled" +msgstr "流放地" + #. ~ Name for scenario 'The Sweet Life' for a male character #: lang/json/scenario_from_json.py msgctxt "scenario_male" @@ -145263,7 +147455,7 @@ msgstr "为什么还要走路,当你明明可以开车时?或是开坦克时 #: lang/json/snippet_from_json.py msgid "Food from before the Cataclysm won't last forever. Keep that in mind." -msgstr "大灾难之前的食物不会永远保持新鲜。记住这一点。" +msgstr "大灾变前的食物不会永远保持新鲜。记住这一点。" #: lang/json/snippet_from_json.py msgid "" @@ -149619,7 +151811,7 @@ msgstr "你是怎么度过最初的混乱的?" #: lang/json/snippet_from_json.py msgid "Tell me how you survived the initial wave of the Cataclysm." -msgstr "和我说说你是如何在大灾难的最初阶段幸存下来的。" +msgstr "和我说说你是如何在大灾变的最初阶段幸存下来的。" #: lang/json/snippet_from_json.py msgid "Was it rough surviving thus far?" @@ -154662,6 +156854,337 @@ msgstr "风格" msgid "-chant" msgstr "颂歌" +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. It has an unsettling loose and spongy " +"texture, but smells… mostly normal. There are strange tangles and " +"formations in it that don't appear natural at all: bits of bone and hair " +"crusted up inside the muscle, as if trying to form another organism. Still," +" seems digestible at least, if you cook it and remove the worst parts." +msgstr "" +"从变异生物身上切下的肉块。这块肉有着恶心的海绵般的松散质感,不过闻起来……还算正常。肉的内部有着一些明显不自然的杂乱组织:骨头和毛发堆积在肌肉组织之间,就像是要生长出另一只生物一般。至少它看起来还能被消化,前提是你得把它烹饪加工并处理掉那些不好的部分。" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although it came from muscle tissue, it" +" has a curious swirling grain pattern, and at the center of each grain is a " +"knot of hard, cartilaginous tissue. It smells offputting." +msgstr "" +"从严重变异的生物身上切下的一大块肉。虽然它来自肌肉组织,但它上面布满了奇怪的颗粒状旋转花纹,在每个颗粒中心是一团坚硬的软骨组织。闻起来很恶心。" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. This is from muscle, but in the fascial" +" tissue between the muscles, thick spiny hairs have grown. Foul smelling, " +"cream-colored fluid gushes out whenever a hair pulls loose." +msgstr "" +"从严重变异的生物身上切下的一大块肉。看上去像是来自肌肉组织,但在肌肉之间的筋膜组织中,长出了许多粗大的多刺毛发已经生长。一旦把毛发拔出,就会涌出一股臭气熏天的奶油色的液体。" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although this came from muscle, it has " +"a thick cordlike texture and smells like leather and bread mold." +msgstr "从严重变异的生物身上切下的一大块肉。虽然这是来自肌肉组织,但它表面布满了厚厚的绳索状纹理,闻起来像是皮革和发霉的面包。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. It has an unsettling," +" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" +" the bits of hair and bone out…" +msgstr "一块煮熟的变异肉块。这块肉有着恶心的海绵般的松散质感,不过尝起来……还算正常。但愿你已经把里面的毛发和骨头全部清理干净了……" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. You thought you'd " +"cleared out all the gross parts, but while cooking, a fluid-filled sac " +"inside burst and covered it in some kind of thick grease." +msgstr "" +"一大块煮熟的变异生物的肉。你本以为自己已经除掉了所有的脏物,但是在烹饪时,里面的一个充满奇怪液体的液囊破了,整块肉都被裹上了某种厚厚的油脂。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. The surface is " +"peppered with divets from the pieces you had to dig out to make it seem " +"edible." +msgstr "一大块煮熟的变异生物的肉。它的表面布满了羽绒一样的硬茬,需要你清除干净,才勉强让它看起来可以食用。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. Heat caused the " +"muscles to twist and move as if they were alive, and now it has writhed " +"itself into a dense knot." +msgstr "一大块煮熟的变异生物的肉。加热使肌肉组织像活着一样扭曲移动,现在它已经扭成一个密集的肉结。" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug, and you really aren't sure what " +"to make of them. There are things you've never seen in any anatomy book, " +"with spines and hair and other unidentified parts protruding off seemingly " +"at random." +msgstr "" +"从巨大的变异昆虫身上切下的奇怪器官,你真的不知道如何利用它们。有些东西你从来没有在任何解剖学书上看到过,脊刺、毛发和其他不明的器官结构似乎是随意地从其中伸出来。" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug. They have a sickly green color, " +"and one of them ripped when you were removing it, revealing an inner surface" +" that looks like row upon row of human fingers, nails and all." +msgstr "" +"从巨大的变异昆虫身上切下的奇怪器官。它们有一种病态的绿色,其中一个在你取下它时被撕裂了,露出了它的内表面,看起来像是一排排像是人类手指或是指甲之类的结构。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a huge, thick, fleshy sac you removed from a giant mutant bug. The " +"surface is covered in smooth, soft skin, and beneath it is a coiled, twisted" +" mess of cordlike tissue." +msgstr "从巨大的变异昆虫身上切下的一个巨大的厚肉囊。表面覆盖着光滑柔软的皮肤,内部是一团盘绕扭曲的绳索状组织。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a long, corded organ you removed from a giant mutant bug. It ran " +"from the head to the abdomen and has long tendrils coming off it, not unlike" +" a spinal cord." +msgstr "从巨大的变异昆虫身上切下的一个长长的绳索状器官。它从头部一直延伸到腹部,有长长的卷须从上面脱落,和脊柱没什么两样。" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a meaty grey organ you removed from a mutant. It has a chalky " +"yellow coating that burns your skin, and several unidentifiable fleshy tubes" +" sticking out of it. The smell it gives off stings your nostrils. You're " +"pretty confident no natural creature has one of these." +msgstr "" +"从变异生物身上切下的一个肉质灰色器官。它有一层粉状黄色涂层,能灼伤你的皮肤,还有几根无法辨认的肉质管子从里面伸出来。它散发出的气味相当刺鼻。你很肯定任何自然生物都不会有这种器官。" + +#: lang/json/snippet_from_json.py +msgid "" +"This organ meat, retrieved from a mutated creature, looks like a series of " +"small mammalian hearts arranged in series on a long fleshy tube. At the end" +" of the chain is a large fleshy sac resembling a stomach." +msgstr "从变异生物身上切下的器官肉,看起来像是一系列排列在长长的肉质血管上的小型哺乳动物心脏。在长链的末端是一个巨大的肉质囊,看上去像是胃。" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It looks like a lung from a larger " +"mammal, like a dog, but instead of a few distinct lobes, it has dozens of " +"lobes arranged in sheets. Strange spindles and gnarled tumescences dot the " +"surface." +msgstr "" +"你很确定这是肺脏组织。它看起来像一个大型哺乳动物的肺,例如狗,但它没有几个明显的肺叶,而是有几十个肺叶排列成片状。奇怪的肌梭和扭曲的肿胀点缀在表面。" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It has a vaguely wing-like shape, " +"with a series of nodules around what would be the trailing edge of the " +"'wing'. A cluster of quills in each corner of the organ held it to the " +"bug's carapace like clasps." +msgstr "" +"你很确定这是肺脏组织。它看起来大致呈飞翼形状,在“飞翼”的后缘周围有一系列的小瘤。在器官的每个角落都有一团团棘刺把整个器官像搭扣一样扣在虫子的甲壳上。" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton, but mutated. The inner side is lined with " +"veins and strange hooked protuberances." +msgstr "一块昆虫的坚硬躯壳,但变异了。内侧布满了血管和奇怪的钩状突起。" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton. Stringy lines of nervous tissue and blood " +"vessels still cling to the inner surface." +msgstr "一块昆虫的坚硬躯壳。细线一样的神经组织和血管仍然附着在内表面。" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of rigid, tube-shaped chitin from the inside of a giant bug. It " +"seemed to be performing some kind of support role. You're quite sure normal" +" insects don't have these." +msgstr "从巨大的变异昆虫体内切下的一块坚硬的管状昆虫躯壳。它似乎在其体内起到某种支撑作用。你很确定普通昆虫没有这些器官结构。" + +#: lang/json/snippet_from_json.py +msgid "" +"A long, flexible rod of chitin from inside a giant mutant bug. It is laced " +"with blood vessels and chitinous nodules." +msgstr "从巨大的变异昆虫体内切下的一根细长而有弹性的棍状昆虫躯壳。它的表面布满了血管和几丁质结节。" + +#: lang/json/snippet_from_json.py +msgid "" +"As you peel away the outer shell, you find veins lining the chitin plates" +msgstr "当你剥开它的外壳时,你发现甲壳板上布满了血管" + +#: lang/json/snippet_from_json.py +msgid "With the creature dead, its carapace comes away surprisingly easily" +msgstr "这只生物已经死了,它的甲壳出奇的容易剥开" + +#: lang/json/snippet_from_json.py +msgid "" +"There's a thin membrane, much like skin, spread over the chitin of this " +"creature" +msgstr "这只生物的外层甲壳上长出了一层薄膜,很像皮肤" + +#: lang/json/snippet_from_json.py +msgid "Under the carapace of this mutant is a bristly, velcro-like material" +msgstr "在这只变异生物的甲壳下是一层刚毛状、类似魔术贴的材质" + +#: lang/json/snippet_from_json.py +msgid "" +"The anatomy concealed beneath seems almost like a small mammal given a shell" +" and twisted into the shape of an arthropod" +msgstr "隐藏在这只生物内部的解剖结构看起来像是一只长了甲壳的小型哺乳动物,被扭曲成节肢动物的形状" + +#: lang/json/snippet_from_json.py +msgid "You crack the beast open like a horrific lobster" +msgstr "你把这只怪兽的尸体像撕开一只可怕的龙虾一样撕开" + +#: lang/json/snippet_from_json.py +msgid "" +"The chitin holds tight to the creature, and you need to snap and tear it " +"away, sawing at tough fibers beneath" +msgstr "甲壳紧紧地包裹着这只生物,你需要把它撕开,锯开下方坚硬的纤维" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside, half-formed organs press against spongy meat that doesn't look " +"anything like raw arthropod meat from normal creatures" +msgstr "在它体内,半成形的器官挤压着海绵状的肉,这些肉看起来不像是正常节肢动物会长的肉" + +#: lang/json/snippet_from_json.py +msgid "" +"You find a collection of hooked spines beneath that seem to have been " +"clasping it on somehow" +msgstr "你发现甲壳下方有一堆钩状的刺,不知怎么地紧紧地扣在了一起" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a complex, still-squirming mess of strange appendages and organs " +"that bear only a passing resemblance to any natural creature" +msgstr "里面是一团复杂的、仍在蠕动的奇怪附肢和器官混合体,和任何正常生物都没有一丝相似之处" + +#: lang/json/snippet_from_json.py +msgid "" +"Beneath the chitin, the meat is covered in thick, bristly hair hiding a " +"chaotic bramble of half-formed, mutated organs" +msgstr "在甲壳下面,肉被厚厚的刚毛覆盖,其中隐藏着一个由半成形的变异器官构成的混乱荆棘" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a tangled mess of organs and tissues that do not appear to " +"entirely natural" +msgstr "里面是一团杂乱的器官和组织,看起来毫不自然" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside the creature you find lungs, hearts, and intestines more like a " +"mammal than a giant bug" +msgstr "在这只生物体内,你发现了肺脏、心脏和肠子,看上去更像是哺乳动物而不是巨大的昆虫" + +#: lang/json/snippet_from_json.py +msgid "" +"The meat inside gives off a horrifying stench, and seems to be covered in " +"thin damp hair, like a newborn animal gone horribly wrong" +msgstr "里面的肉散发出一股可怕的臭味,似乎被一团湿漉漉的细毛覆盖着,就像一只出了可怕毛病的新生动物" + +#: lang/json/snippet_from_json.py +msgid "" +"Small bundles of fiber break loose as you work, splitting open to reveal " +"twisted, half-formed copies of the creature itself" +msgstr "当你进行屠宰时,许多细小的纤维随着你的动作飞散分裂开来,露出这只生物自己扭曲的半成型的复制品" + +#: lang/json/snippet_from_json.py +msgid "" +"It is difficult to work, as the spongey tissue tears apart under your tools" +msgstr "屠宰工作进展得很慢,因为海绵一般的组织在你的工具下方不断裂开" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Steaming puddles of acid spill from its outer shell as you pull it back" +msgstr "在你把它翻过来时,它的外壳上冒出了一滩热气腾腾的酸液" + +#: lang/json/snippet_from_json.py +msgid "Steaming acid burbles from the creature's chitin as you peel it back" +msgstr "当你剥开它的外壳时,它所流出的热气腾腾的酸液汩汩作响" + +#: lang/json/snippet_from_json.py +msgid "" +"Several acid glands rupture as you peel back the carapace, sending streams " +"of steaming caustic fluids spraying around" +msgstr "当你剥开甲壳时,几个酸腺破裂,喷出一股股热气腾腾的酸液" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The organs themselves have an acrid odour, but don't seem as caustically " +"acidic as the outer shell" +msgstr "器官本身有一股刺鼻的气味,但不像外壳那样有腐蚀酸性" + +#: lang/json/snippet_from_json.py +msgid "" +"You carefully avoid breaking through pockets of what you think may be acid-" +"secreting glands" +msgstr "你小心地避免撕破你认为可能是酸液分泌腺的口袋形结构" + +#: lang/json/snippet_from_json.py +msgid "" +"Thick, ropey cords of tissue beneath its chitin protect an inner layer of " +"strange organs, resembling those of a bird more than anything" +msgstr "甲壳素下面厚厚的、绳索状的组织保护着内层的奇怪器官,看上去最像鸟的器官" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The powerfully acidic vapors coming from the carcass make it hard to work" +msgstr "尸体所喷出的强酸性蒸汽使你很难进行屠宰工作" + +#: lang/json/snippet_from_json.py +msgid "" +"The tissues of the creature are full of half-formed organs, their purpose " +"unclear" +msgstr "这只生物的组织中充满了半成形的器官,它们的作用还不清楚" + +#: lang/json/snippet_from_json.py +msgid "" +"Several times, you nearly burn yourself piercing a concealed gland full of " +"acid" +msgstr "有好几次,你在不小心刺穿一个充满酸液的隐藏腺体时差点烧伤自己" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "。" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "。" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" +"。" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "。" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "。" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" +"。" + #: lang/json/snippet_from_json.py msgid "" "ATOMIC DEREGULATION! President Toffer announced to a mixed crowd today that" @@ -162795,6 +165318,10 @@ msgstr "LMOE避难所(地下室)" msgid "Middle of Nowhere" msgstr "无人区" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "实验室单间" @@ -163095,6 +165622,12 @@ msgstr "你的怀疑并不令我惊讶。也许有一天,你也会不可避免 msgid "Yeah, alright." msgstr "是的,好吧。" +#: lang/json/talk_topic_from_json.py +msgid "" +"The song is… quiet for now. Perhaps with time, more notes will be etched in" +" the bones of this world." +msgstr "现在歌……很安静。也许随着时间的推移,更多的音符会刻在这个世界的骨头上。" + #: lang/json/talk_topic_from_json.py msgid "An acolyte should not take on too many songs at once." msgstr "一名助手一次不应该唱太多的歌。" @@ -163104,10 +165637,8 @@ msgid "That is all for now." msgstr "到此为止。" #: lang/json/talk_topic_from_json.py -msgid "" -"The song is… quiet for now. Perhaps with time, more notes will be etched in" -" the bones of this world." -msgstr "现在歌……很安静。也许随着时间的推移,更多的音符会刻在这个世界的骨头上。" +msgid "There are bones to etch, songs to sing. Wish to join me?" +msgstr "有骨待刻,有曲当歌。想加入吗?" #: lang/json/talk_topic_from_json.py msgid "Do you wish to take on more songs?" @@ -163118,8 +165649,8 @@ msgid "Do you believe you can take on the burden of additional bones?" msgstr "你相信自己能承担额外骨骼带来的重担吗?" #: lang/json/talk_topic_from_json.py -msgid "There are bones to etch, songs to sing. Wish to join me?" -msgstr "有骨待刻,有曲当歌。想加入吗?" +msgid "A song may yet be sung by you, should you wish to." +msgstr "尚有歌未被你所唱,如果你想的话。" #: lang/json/talk_topic_from_json.py msgid "There is an additional song you could take on, if you'd like." @@ -163130,10 +165661,6 @@ msgid "" "I know of certain bones that could be of use, if you'd like to know more." msgstr "我知道有一些有用的骨头,如果你想知道更多的话。" -#: lang/json/talk_topic_from_json.py -msgid "A song may yet be sung by you, should you wish to." -msgstr "尚有歌未被你所唱,如果你想的话。" - #: lang/json/talk_topic_from_json.py msgid "I see." msgstr "我懂了。" @@ -163246,7 +165773,7 @@ msgid "" "That's why we need to amass the Song. That's why it has to end, even if it " "means the destruction, not restoration." msgstr "" -"大灾难改变的不仅仅是行走的死者和怪物。它启动了……某种循环。一切都在不断重复。我们只能在别人身上看到它,但它也发生在我们身上,包括你和我。你的肉从你身上撕裂,被吞食。也可能是面对死亡的无声呻吟。但你的骨头又复活了。不同的肉体,不同的名字,有时甚至是不同的知识,但骨头,是一样的。我们都被困在同一个循环中。我们只是一直在遗忘。这就是为什么我们需要收集歌声。这就是为什么这一切必须终结,即使它意味着毁灭,而不是恢复。" +"大灾变改变的不仅仅是行走的死者和怪物。它启动了……某种循环。一切都在不断重复。我们只能在别人身上看到它,但它也发生在我们身上,包括你和我。你的肉从你身上撕裂,被吞食。也可能是面对死亡的无声呻吟。但你的骨头又复活了。不同的肉体,不同的名字,有时甚至是不同的知识,但骨头,是一样的。我们都被困在同一个循环中。我们只是一直在遗忘。这就是为什么我们需要收集歌声。这就是为什么这一切必须终结,即使它意味着毁灭,而不是恢复。" #: lang/json/talk_topic_from_json.py msgid "" @@ -163799,14 +166326,14 @@ msgstr "是的,快醒醒!" msgid "no, go back to sleep." msgstr "不了,继续睡吧。" -#: lang/json/talk_topic_from_json.py -msgid "What is it, friend?" -msgstr "干什么,老铁?" - #: lang/json/talk_topic_from_json.py msgid " *pshhhttt* I'm reading you boss, over." msgstr "*电流声* 老大,我收到了。完毕。" +#: lang/json/talk_topic_from_json.py +msgid "What is it, friend?" +msgstr "干什么,老铁?" + #: lang/json/talk_topic_from_json.py msgid "I want to give you some commands for combat." msgstr "[战斗]我想给你一些作战指令。" @@ -164043,15 +166570,15 @@ msgstr "自由移动以对抗敌人。" msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "坚守阵地:不要移动到我旁边的障碍物上。" -#: lang/json/talk_topic_from_json.py src/action.cpp src/activity_handlers.cpp -#: src/avatar.cpp src/avatar.cpp src/avatar_action.cpp src/avatar_action.cpp -#: src/avatar_action.cpp src/crafting.cpp src/game.cpp src/handle_action.cpp -#: src/handle_action.cpp src/handle_liquid.cpp src/handle_liquid.cpp -#: src/iexamine.cpp src/iexamine.cpp src/iexamine.cpp src/iuse.cpp -#: src/iuse.cpp src/iuse.cpp src/iuse_actor.cpp src/iuse_actor.cpp -#: src/iuse_actor.cpp src/monexamine.cpp src/monexamine.cpp src/npc.cpp -#: src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp -#: src/veh_interact.cpp src/vehicle_use.cpp +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py +#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp src/avatar.cpp +#: src/avatar_action.cpp src/avatar_action.cpp src/crafting.cpp +#: src/crafting.cpp src/game.cpp src/handle_action.cpp src/handle_action.cpp +#: src/handle_liquid.cpp src/handle_liquid.cpp src/iexamine.cpp +#: src/iexamine.cpp src/iexamine.cpp src/iuse.cpp src/iuse.cpp src/iuse.cpp +#: src/iuse_actor.cpp src/iuse_actor.cpp src/iuse_actor.cpp src/monexamine.cpp +#: src/monexamine.cpp src/npc.cpp src/pickup.cpp src/player.cpp src/player.cpp +#: src/player.cpp src/veh_interact.cpp src/vehicle_use.cpp msgid "Never mind." msgstr "算了。" @@ -164255,14 +166782,14 @@ msgstr "算了。我们该走了。" msgid "OVERRIDE: " msgstr "临时指令:" -#: lang/json/talk_topic_from_json.py -msgid "" -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "" msgstr "" @@ -164618,14 +167145,14 @@ msgstr "好吧,别乱动……" msgid "Keep your distance!" msgstr "离我远点!" -#: lang/json/talk_topic_from_json.py -msgid "This is my territory, ." -msgstr "这是我的地盘,。" - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "This is my territory, ." +msgstr "这是我的地盘,。" + #: lang/json/talk_topic_from_json.py msgid "Calm down. I'm not going to hurt you." msgstr "冷静点,我不会伤害你。" @@ -164678,30 +167205,30 @@ msgstr "你怎么了?" msgid "I don't care." msgstr "我不在乎。" -#: lang/json/talk_topic_from_json.py -msgid "I don't have any more jobs for you." -msgstr "我没有更多的工作可以给你了。" - #: lang/json/talk_topic_from_json.py msgid "I don't have any jobs for you." msgstr "我没有工作可以给你。" #: lang/json/talk_topic_from_json.py -msgid "I have more jobs for you. Want to hear about them?" -msgstr "我还有更多的工作想交给你,要听听看吗?" +msgid "I don't have any more jobs for you." +msgstr "我没有更多的工作可以给你了。" #: lang/json/talk_topic_from_json.py msgid "I have other jobs for you. Want to hear about them?" msgstr "我还有些其它的工作想交给你,要听听看吗?" #: lang/json/talk_topic_from_json.py -msgid "I just have one job for you. Want to hear about it?" -msgstr "我这正好有份你能做的事,想听听吗?" +msgid "I have more jobs for you. Want to hear about them?" +msgstr "我还有更多的工作想交给你,要听听看吗?" #: lang/json/talk_topic_from_json.py msgid "I have another job for you. Want to hear about it?" msgstr "我还有件事要拜托你,要听听看吗?" +#: lang/json/talk_topic_from_json.py +msgid "I just have one job for you. Want to hear about it?" +msgstr "我这正好有份你能做的事,想听听吗?" + #: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py #: src/npctalk.cpp msgid "Oh, okay." @@ -164711,6 +167238,10 @@ msgstr "哦,好的。" msgid "Never mind, I'm not interested." msgstr "[拒绝]算了,我没兴趣。" +#: lang/json/talk_topic_from_json.py +msgid "You're not working on anything for me now." +msgstr "你现在没有为我做任何事情。" + #: lang/json/talk_topic_from_json.py msgid "Which job?" msgstr "哪个工作?" @@ -164719,10 +167250,6 @@ msgstr "哪个工作?" msgid "What about it?" msgstr "怎么样了?" -#: lang/json/talk_topic_from_json.py -msgid "You're not working on anything for me now." -msgstr "你现在没有为我做任何事情。" - #: lang/json/talk_topic_from_json.py msgid "I'll do it!" msgstr "[确认]我去做吧!" @@ -164931,6 +167458,10 @@ msgstr "嗯嗯,好吧。" msgid "Thanks!" msgstr "谢谢啦!" +#: lang/json/talk_topic_from_json.py +msgid "Focus on the road, mate!" +msgstr "专心开车,兄弟!" + #: lang/json/talk_topic_from_json.py msgid "I must focus on the road!" msgstr "我在开车呢!" @@ -164955,10 +167486,6 @@ msgstr "我现在什么都想不到,下次再问我吧。" msgid "I have some reason for not telling you." msgstr "我不方便对你说。" -#: lang/json/talk_topic_from_json.py -msgid "Focus on the road, mate!" -msgstr "专心开车,兄弟!" - #: lang/json/talk_topic_from_json.py msgid "Ah, okay." msgstr "啊,好吧。" @@ -165063,6 +167590,10 @@ msgstr "不要,在这挺好的。" msgid "On second thought, never mind." msgstr "[取消]回头想一想,算了吧。" +#: lang/json/talk_topic_from_json.py +msgid "I can't train you properly while you're operating a vehicle!" +msgstr "你开车的时候,我没法好好儿训练你!" + #: lang/json/talk_topic_from_json.py msgid "I can't train you properly while I'm operating a vehicle!" msgstr "我开车的时候没法训练你!" @@ -165075,10 +167606,6 @@ msgstr "给我点时间,我会给你看点新玩意……" msgid "I have some reason for denying you training." msgstr "我不教你是有原因的。" -#: lang/json/talk_topic_from_json.py -msgid "I can't train you properly while you're operating a vehicle!" -msgstr "你开车的时候,我没法好好儿训练你!" - #: lang/json/talk_topic_from_json.py msgid "Not a bloody chance, I'm going to get left behind!" msgstr "一点可能也没有。我要留下来!" @@ -165830,7 +168357,7 @@ msgstr "你怎么活下来的?" #: lang/json/talk_topic_from_json.py msgid "What did you do before the Cataclysm?" -msgstr "你在大灾难之前是做什么的?" +msgstr "你在大灾变之前是做什么的?" #: lang/json/talk_topic_from_json.py msgid "Have anything to trade?" @@ -171204,15 +173731,15 @@ msgstr "好吧,我也会和他们谈谈的。" msgid "All right! Let's get going." msgstr "好的!那我们走吧。" +#: lang/json/talk_topic_from_json.py +msgid "We've done it! We've solved the list!" +msgstr "成功了!购物清单完成了!" + #: lang/json/talk_topic_from_json.py msgid "" "How's things with you? My cardboard collection is getting quite impressive." msgstr "近况如何?我收集的纸箱越来越多了!" -#: lang/json/talk_topic_from_json.py -msgid "We've done it! We've solved the list!" -msgstr "成功了!购物清单完成了!" - #: lang/json/talk_topic_from_json.py msgid "Have I told you about cardboard, friend? Do you have any?" msgstr "我跟你说过硬纸板的事吗,朋友?你有吗?" @@ -172011,7 +174538,7 @@ msgid "" "Gross, isn't it? Feels like pubes. I just started growing it everywhere a " "little while after the Cataclysm. No idea what caused it. I can't blame " "them for hating it, I hate it." -msgstr "真恶心,不是吗?像个野人一样。大灾难过后不久,我身上就开始到处长毛。不知道是什么引起的。我不怪他们讨厌这玩意,我也讨厌。" +msgstr "真恶心,不是吗?像个野人一样。大灾变过后不久,我身上就开始到处长毛。不知道是什么引起的。我不怪他们讨厌这玩意,我也讨厌。" #: lang/json/talk_topic_from_json.py msgid "" @@ -175766,6 +178293,18 @@ msgstr "你知道这里的规矩的,祝你好运。" msgid "Got it." msgstr "知道了。" +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "怎么了?" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "有什么事吗?" @@ -175778,14 +178317,14 @@ msgstr "我这里按小时计费,所以快点……" msgid "Hey." msgstr "嗨。" -#: lang/json/talk_topic_from_json.py -msgid "Yes?" -msgstr "怎么了?" - #: lang/json/talk_topic_from_json.py msgid "Good to see you." msgstr "很高兴见到你。" +#: lang/json/talk_topic_from_json.py +msgid "About those jobs…" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Good to see you around." msgstr "很高兴再次见到你。" @@ -175795,8 +178334,8 @@ msgid "Want help with something else?" msgstr "还有什么需要吗?" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." -msgstr "算了,我该走了。" +msgid "Lets set a combat strategy" +msgstr "" #: lang/json/talk_topic_from_json.py msgid "" @@ -175849,6 +178388,10 @@ msgstr "最近有啥有趣的事吗?" msgid "Anything on your mind?" msgstr "你在想什么呢?" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "你对我们这个雇主有了解吗?" @@ -176867,6 +179410,267 @@ msgstr "现在活下来的人太少了,再也没法把我区分开了。除了 msgid "Now I choose the cause I'll die for." msgstr "现在我可以自己选择了能为之死去的信条了。" +#: lang/json/talk_topic_from_json.py +msgid "" +"Yes. I ask because I noticed there are dinosaurs around. Do you know " +"anything about that?" +msgstr "是的。我这么问是因为我注意到周围有很多恐龙。你知道关于它们的事吗?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"I know all kinds of weird useless stuff. I've seen things at churches, I've" +" seen things on farms, I've seen whole exhibits way out. Those Swampers, " +"they know what's happening. They're creatures of light come back to save us" +" all. Or eat us, I forget." +msgstr "" +"我知道各种奇怪又无用的知识。我在教堂看到过东西,在农场看到过东西,我看过整场展览。那些沼泽人,他们知道发生了什么。他们是光之生物,回来拯救我们所有人。也许是吃掉我们,我记不清了。" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters will be fed." +msgstr "大食客们必将进食。" + +#: lang/json/talk_topic_from_json.py +msgid "Welcome. Are you hungry friend?" +msgstr "欢迎。你饿了吗朋友?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You look hungry friend. So much hunger in this world. This is the time of " +"the eaters." +msgstr "你看起来很饿,朋友。世界上有那么多的饥饿。现在是大食客们的时代。" + +#: lang/json/talk_topic_from_json.py +msgid "Hello. Who are the eaters?" +msgstr "啊。谁是大食客?" + +#: lang/json/talk_topic_from_json.py +msgid "So about the eaters…" +msgstr "关于大食客……" + +#: lang/json/talk_topic_from_json.py +msgid "You mentioned some pretenders before. What does that mean?" +msgstr "之前你提到过什么伪神。那是什么?" + +#: lang/json/talk_topic_from_json.py +msgid "Is there a way I can help feed the eaters?" +msgstr "有什么方法可以让我帮你喂养大食客吗?" + +#: lang/json/talk_topic_from_json.py +msgid "I have to get going. Take care, CEO Baronyx." +msgstr "我该走了。保重,CEO巴罗尼克斯。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters have returned, along with the false ones. We must feed the" +" eaters and destroy the pretenders child." +msgstr "大食客和假食客都回来了。我们必须喂饱大食客,消灭伪神之子。" + +#: lang/json/talk_topic_from_json.py +msgid "Who are you talking about?" +msgstr "什么?你在说什么?" + +#: lang/json/talk_topic_from_json.py +msgid "No thank you, I'd like to leave now." +msgstr "不了,谢谢,我想我该走了。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"This Cataclysm has woken the great eaters, lost in time, returned them to " +"the world to do their great work, to multiply and fill the land with their " +"song. The time of man is over, but we few who remain can do our part to " +"protect this new world from the pretenders, who would steal the meat." +msgstr "" +"这场大灾变唤醒了那些迷失在时间里的大食客们,让他们回到这个世界去完成他们伟大的工作,繁衍生息,用他们的歌声填满这片土地。人类的时代已经结束了,但我们这些有幸活下来的少数人应当尽我们的一份力量来保护这个新世界不受那些会偷肉的伪神的伤害。" + +#: lang/json/talk_topic_from_json.py +msgid "So what do you do with the meat?" +msgstr "那么你究竟对那些肉做了什么呢?" + +#: lang/json/talk_topic_from_json.py +msgid "Who are the great eaters and the pretenders?" +msgstr "谁是大食客,谁又是伪神?" + +#: lang/json/talk_topic_from_json.py +msgid "Are there any others left?" +msgstr "还有其他人活着吗?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are the ones that were lost, what we call dinosaurs whose " +"meat we took and who are taking it back. The pretenders are those others " +"that have come to steal the meat of this world. It does not belong to them " +"and we will take it from their mouths." +msgstr "" +"大食客是那些已经消失的,我们称之为恐龙的动物,它们的肉被我们拿走了,而他们正在把它取回。伪神是那些来偷这个世界的肉的外人。它不属于他们,我们会从他们嘴里拿走。" + +#: lang/json/talk_topic_from_json.py +msgid "Okay, so you worship dinosaurs. Understood." +msgstr "好吧,所以你们供奉的是恐龙。懂了。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The Swampers knew these times would return and we prepared for them. When " +"others wasted their time and meat, we fed and grew strong, and we filled our" +" stores with meat for this day." +msgstr "沼泽教教众们知道这些日子会回来,我们为他们做了准备。当别人浪费他们的时间和肉的时候,我们吃饱了,变强了,现在我们的商店里堆满了肉。" + +#: lang/json/talk_topic_from_json.py +msgid "Yes, very good." +msgstr "是的,很好。" + +#: lang/json/talk_topic_from_json.py +msgid "You keep talking about meat. Why is meat so important?" +msgstr "你一直在说肉。为什么肉这么重要?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The meat makes the great eaters strong. We gather the meat and feed them, " +"and in the end we too will serve the eaters in death as we do in life. This" +" was always our purpose and we lucky few have lived to see it." +msgstr "" +"肉使大食客强壮。我们把肉收起来喂他们,最后我们也要以死亡来供奉大食者,正如我们活着时一样。这一直是我们的目标,我们这几个人有幸能活着看到它实现。" + +#: lang/json/talk_topic_from_json.py +msgid "Our purpose? How do you know?" +msgstr "我们的目标?你怎么知道的?" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The return of the great eaters was fortold by a prophet. We faithful have " +"been waiting and preparing since the revelation." +msgstr "一位预言家预言了大食客们的回归。我们这些忠心的人,自从这神启开始,就一直在等候和准备。" + +#: lang/json/talk_topic_from_json.py +msgid "I guess it must be nice to be proven right." +msgstr "我想被证明是对的一定让你感觉很好。" + +#: lang/json/talk_topic_from_json.py +msgid "This is crazy." +msgstr "这也太疯狂了。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You understand our purpose. I welcome you to this work, all are needed to " +"feed the eaters." +msgstr "你理解我们的目标。我欢迎你加入这项工作,所有的食物都需要被用来喂饱大食客。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You deny what you see right in front of you. This world is what was " +"fortold." +msgstr "你否认眼前的一切。这个世界早就被神告知过了。" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters have fed. They will be hungry again in time" +msgstr "大食客们已经吃饱了。他们很快又会饿的。" + +#: lang/json/talk_topic_from_json.py +msgid "You know what to do." +msgstr "你知道该怎么做。" + +#: lang/json/talk_topic_from_json.py +msgid "The great eaters must be fed. Are you ready?" +msgstr "大食客们必须进食。你准备好了吗?" + +#: lang/json/talk_topic_from_json.py +msgid "There is still more work to do. Are you ready?" +msgstr "还有更多的工作要做。你准备好了吗?" + +#: lang/json/talk_topic_from_json.py +msgid "There is meat ready for the feeding. Are you ready to gather it?" +msgstr "可以喂肉了。你准备好了吗?" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters are hungry." +msgstr "大食客们饿了。" + +#: lang/json/talk_topic_from_json.py +msgid "There is more meat needed." +msgstr "我们需要更多的肉。" + +#: lang/json/talk_topic_from_json.py +msgid "I know of eaters ready for meat." +msgstr "我想大食客要吃肉了。" + +#: lang/json/talk_topic_from_json.py +msgid "Maybe another time CEO Baronyx." +msgstr "下次再说吧,CEO巴罗尼克斯。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"If you are ready to be of service to the great eaters, go and find meat and " +"bring it back. There is always need for more." +msgstr "如果你准备好为大食客效劳,就去找些肉带回来。这里总是需要更多肉。" + +#: lang/json/talk_topic_from_json.py +msgid "Happy to be of service to the great eaters. I'm in." +msgstr "很高兴能为大食客效劳。算我一个。" + +#: lang/json/talk_topic_from_json.py +msgid "Excellent. Make it happen." +msgstr "太棒了。努力让这一切实现吧。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are not picky, any pure meat will do, but mutant and " +"tainted meat are not good enough." +msgstr "大食客们并不挑剔,任何纯净的肉都可以,但变异和污染的肉不行。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"So, meat from a creature that isn't a zombie, or a giant monster. Got it." +msgstr "所以,任何不是丧尸或怪物的生物的肉。明白了。" + +#: lang/json/talk_topic_from_json.py +msgid "Of course, you should find everything you need here." +msgstr "当然,在这里你应该能找到你需要的一切。" + +#: lang/json/talk_topic_from_json.py +msgid "That explains the knives then." +msgstr "这就解释了为什么这里会有刀。" + +#: lang/json/talk_topic_from_json.py +msgid "Oh, you know my friend Brigitte. Well in that case, let's go!" +msgstr "哦,你认识我的朋友布丽吉特。好吧,那样的话,我们走吧!" + +#: lang/json/talk_topic_from_json.py +msgid "No, I must remain here to oversee the company." +msgstr "不,我必须留在这里管理公司。" + +#: lang/json/talk_topic_from_json.py +msgid "Of course CEO Baronyx." +msgstr "好吧,CEO巴罗尼克斯。" + +#: lang/json/talk_topic_from_json.py +msgid "Sweet!" +msgstr "真棒!" + +#: lang/json/talk_topic_from_json.py +msgid "Not just now. You should remain here to oversee the company." +msgstr "现在还不行,你必须留在这里管理公司。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"Of course, the company will be ready when you are and the great eaters will " +"feed either way." +msgstr "当然,当你准备好的时候,公司也会随时准备好的,而且大食客们总会找到方法进食的。" + +#: lang/json/talk_topic_from_json.py +msgid "" +"It was fortold that as the great eaters returned, so too would the " +"pretenders, who would come to steal the meat. Very little is asked of us, " +"except that we do all we can to ensure that the true great eaters received " +"as much meat as possible and the pretenders go hungry." +msgstr "据说,当大食客回来时,那些来偷肉的伪神也会回来。神示里对我们的要求不多,除了我们需要确保真正的大食客得到尽可能多的肉,并让假食客们去挨饿。" + +#: lang/json/talk_topic_from_json.py +msgid "Yes CEO Baronyx, very good CEO Baronyx." +msgstr "是的,CEO巴罗尼克斯。很好,CEO巴罗尼克斯。" + +#: lang/json/talk_topic_from_json.py +msgid "This makes no sense and I'm done talking about it." +msgstr "这都是胡说八道,我不想再谈这件事了。" + #: lang/json/talk_topic_from_json.py msgid "Heya, scav." msgstr "你好,伙计。" @@ -177399,10 +180203,6 @@ msgstr "你格挡了%s的攻击" msgid " blocks %s" msgstr "格挡了%s的攻击" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "招架" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -179837,6 +182637,90 @@ msgstr "你对 %s 和其周围的人发动回旋斩" msgid " unleashes a spin attack against %s and those nearby" msgstr " 对 %s 和其周围的人发动回旋斩" +#: lang/json/technique_from_json.py +msgid "Disarming Strike" +msgstr "缴械攻击" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You skillfully disarm %s" +msgstr "你巧妙地将%s缴械" + +#: lang/json/technique_from_json.py +#, python-format +msgid " skillfully disarms %s" +msgstr "巧妙地将%s缴械" + +#: lang/json/technique_from_json.py +msgid "Lightning Recovery" +msgstr "快速整顿" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You miss %s but recover in the blink of an eye" +msgstr "你没能击中 %s,但转瞬间就已恢复 " + +#: lang/json/technique_from_json.py +#, python-format +msgid " misses %s but recovers in the blink of an eye" +msgstr " 没能击中 %s,但转瞬间就已恢复 " + +#: lang/json/technique_from_json.py +msgid "Finishing Move" +msgstr "终结之舞" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You finish off %s with a powerful slash" +msgstr "你用一记强力的劈砍终结了 %s" + +#: lang/json/technique_from_json.py +#, python-format +msgid " finishes off %s with a powerful slash" +msgstr " 用一记强力的劈砍终结了 %s" + +#: lang/json/technique_from_json.py +msgid "Dazing Strike" +msgstr "晕眩打击" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You harshly stun %s" +msgstr "你用力击晕了 %s" + +#: lang/json/technique_from_json.py +#, python-format +msgid " harshly stuns %s" +msgstr " 用力击晕了 %s" + +#: lang/json/technique_from_json.py +msgid "Steel Wind" +msgstr "钢铁之风" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleave through %s and those nearby like a steel wind" +msgstr "你像钢铁之风一样劈穿了%s和附近的敌人" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleaves through %s and those nearby like a steel wind" +msgstr "像钢铁之风一样劈穿了%s和附近的敌人" + +#: lang/json/technique_from_json.py +msgid "Scything Blade" +msgstr "收割之刃" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleanly reap through %s and those nearby" +msgstr "你干净利落地收割了%s和附近的敌人" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleanly reap throug %s and those nearby" +msgstr "干净利落地收割了%s和附近的敌人" + #: lang/json/technique_from_json.py msgid "Ausstoß" msgstr "导力反转" @@ -179893,6 +182777,216 @@ msgstr "你如导弹一般对%s发动超音速冲击。" msgid " launches a supersonic punch at %s" msgstr "如导弹一般,突破音速撞向%s。" +#: lang/json/technique_from_json.py +msgid "Mega Kick" +msgstr "百万吨重踢" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Mega Kick on %s" +msgstr "你对%s使用了百万吨重踢" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Mega Kick on %s" +msgstr "对%s使用了百万吨重踢" + +#: lang/json/technique_from_json.py +msgid "Darkest Lariat" +msgstr "DD金勾臂" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Darkest Lariat on %s" +msgstr "你对%s使用了DD金勾臂" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Darkest Lariat on %s" +msgstr "对%s使用了DD金勾臂" + +#: lang/json/technique_from_json.py +msgid "Smart Strike" +msgstr "修长之角" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Smart Strike on %s" +msgstr "你对%s使用了修长之角" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Smart Strike on %s" +msgstr "对%s使用了修长之角" + +#: lang/json/technique_from_json.py +msgid "Low Sweep" +msgstr "下盘踢" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Low Sweep on %s" +msgstr "你对%s使用了下盘踢" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Low Sweep on %s" +msgstr "对%s使用了下盘踢" + +#: lang/json/technique_from_json.py +msgid "Fool's Strike" +msgstr "真·斗转星移" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely fool %s and strike back" +msgstr "你反转并回击了 %s" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely fools %s and strike back" +msgstr " 反转并回击了 %s" + +#: lang/json/technique_from_json.py +msgid "Hydra Slaying Strike" +msgstr "破龙击" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You interrupt %s with a perfectly aimed strike" +msgstr "你精准一击打断了 %s" + +#: lang/json/technique_from_json.py +#, python-format +msgid " interrupt %s with a perfectly aimed strike" +msgstr " 精准一击打断了 %s" + +#: lang/json/technique_from_json.py +msgid "Mighty Throw" +msgstr "暮日投" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You toss %s aside with a Mighty Throw" +msgstr "你使出一招暮日投,将%s丢倒在地" + +#: lang/json/technique_from_json.py +#, python-format +msgid " tosses %s with a Mighty Throw" +msgstr "使出一招暮日投,将%s丢倒在地" + +#: lang/json/technique_from_json.py +msgid "Ballista Throw" +msgstr "穿云投" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You spin and hurl %s away with a Ballista Throw" +msgstr "你使出一招穿云投,将%s远远丟倒在地" + +#: lang/json/technique_from_json.py +#, python-format +msgid " spins and hurls %s away with a Ballista Throw" +msgstr "使出一招穿云投,将%s远远丟倒在地" + +#: lang/json/technique_from_json.py +msgid "Flowing Water" +msgstr "流水击" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You deflect %s's attack and counter in one fluid motion" +msgstr "你用流畅的动作格挡并回击了%s" + +#: lang/json/technique_from_json.py +#, python-format +msgid " deflects %s's attack and counters in one fluid motion" +msgstr "用流畅的动作格挡并回击了%s" + +#: lang/json/technique_from_json.py +msgid "Disarming Slash" +msgstr "缴械斩" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You disarm %s with a quick flick of your weapon" +msgstr "你用武器轻轻一砍,将 %s 缴械" + +#: lang/json/technique_from_json.py +#, python-format +msgid " disarms %s with a quick flick of their weapon" +msgstr " 用武器轻轻一砍,将 %s 缴械" + +#: lang/json/technique_from_json.py +msgid "Sarlacc Sweep" +msgstr "沙拉克扫击" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You quickly sweep through %s and those nearby" +msgstr "你迅速地扫击了%s和附近的敌人" + +#: lang/json/technique_from_json.py +#, python-format +msgid " quickly sweeps through %s and those nearby" +msgstr "迅速地扫击了%s和附近的敌人" + +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "大地纹丝不动,拒绝服从你的命令。" @@ -179938,6 +183032,10 @@ msgstr "枯木重生。" msgid "Life springs anew from the dead grass." msgstr "生命从枯死的草丛中重新涌发。" +#: lang/json/ter_furn_transform_messages_from_json.py +msgid "The door opens forcefully!" +msgstr "门被强行打开了!" + #: lang/json/terrain_from_json.py msgid "scorched earth" msgstr "焦土" @@ -187509,6 +190607,11 @@ msgstr "木制船壳" msgid "A wooden board that keeps the water out of your boat." msgstr "一块木板,可以把水挡在船外。" +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -187947,14 +191050,19 @@ msgid "" msgstr "一种重型牵引索。当一头连接至另一辆车后,可以拉动其他车辆。" #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" -msgstr "木椅" +msgid "flimsy wooden seat" +msgstr "" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "一个可以坐的地方。" +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "木椅" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "木钉刺" @@ -188763,6 +191871,11 @@ msgstr "游戏开始" msgid "At least %s from %s (%s remaining)" msgstr "至少已经过 %s 自 %s 起(还需 %s)" +#: src/achievement.cpp +#, c-format +msgid "Exactly %s from %s" +msgstr "恰好于 %s 自 %s 起" + #: src/achievement.cpp #, c-format msgid "Within %s of %s (%s remaining)" @@ -188779,13 +191892,14 @@ msgid "Within %s of %s (passed)" msgstr "于 %s 之内自 %s 起(已超出)" #: src/achievement.cpp -msgid "Triggered by " -msgstr "触发条件:" +#, c-format +msgid "Triggered by %s" +msgstr "触发于 %s" #: src/achievement.cpp #, c-format -msgid "%s/%s " -msgstr "%s/%s" +msgid "%s/%s %s" +msgstr "%s/%s %s" #: src/achievement.cpp msgid " (further requirements hidden)" @@ -190692,7 +193806,7 @@ msgstr "[<] %1$d / %2$d页 [>]" msgid "< [%s] Sort: %s >" msgstr "< [%s] 排序:%s >" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "[%s] 筛选" @@ -193835,10 +196949,18 @@ msgstr "" msgid "Accuracy" msgstr "命中" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "闪避" +#: src/bonuses.cpp +msgid "Block effectiveness" +msgstr "格挡效率" + #: src/bonuses.cpp src/panels.cpp msgid "Speed" msgstr "速度" @@ -194317,20 +197439,25 @@ msgstr " 站了起来。" #: src/character.cpp src/monster.cpp #, c-format -msgid "The %s breaks free of the webs!" -msgstr "%s 挣脱了蛛网的束缚!" +msgid "The %s escapes the bear trap!" +msgstr "%s 从捕熊陷阱中脱出!" #: src/character.cpp -msgid "You free yourself from the webs!" -msgstr "你从网中挣脱出来!" +#, c-format +msgid "Your %s tries to free itself from the bear trap, but can't get loose!" +msgstr "你的%s尝试从捕熊陷阱里挣脱出来,但是失败了。" #: src/character.cpp -msgid " frees themselves from the webs!" -msgstr " 从网中挣脱出来!" +msgid "You free yourself from the bear trap!" +msgstr "你从捕熊陷阱中挣脱了出来!" #: src/character.cpp -msgid "You try to free yourself from the webs, but can't get loose!" -msgstr "你尝试从网中挣脱出来,但是失败了。" +msgid " frees themselves from the bear trap!" +msgstr " 从捕熊陷阱挣脱了出来!" + +#: src/character.cpp +msgid "You try to free yourself from the bear trap, but can't get loose!" +msgstr "你尝试从捕熊陷阱里挣脱出来,但是失败了。" #: src/character.cpp src/monster.cpp #, c-format @@ -194366,28 +197493,6 @@ msgstr " 从大型捕猎陷阱中挣扎了出来!" msgid "You try to free yourself from the heavy snare, but can't get loose!" msgstr "你尝试从大型捕猎陷阱中挣扎出来,但是失败了。" -#: src/character.cpp src/monster.cpp -#, c-format -msgid "The %s escapes the bear trap!" -msgstr "%s 从捕熊陷阱中脱出!" - -#: src/character.cpp -#, c-format -msgid "Your %s tries to free itself from the bear trap, but can't get loose!" -msgstr "你的%s尝试从捕熊陷阱里挣脱出来,但是失败了。" - -#: src/character.cpp -msgid "You free yourself from the bear trap!" -msgstr "你从捕熊陷阱中挣脱了出来!" - -#: src/character.cpp -msgid " frees themselves from the bear trap!" -msgstr " 从捕熊陷阱挣脱了出来!" - -#: src/character.cpp -msgid "You try to free yourself from the bear trap, but can't get loose!" -msgstr "你尝试从捕熊陷阱里挣脱出来,但是失败了。" - #: src/character.cpp msgid "You free yourself from the rubble!" msgstr "你从瓦砾中挣脱了出来!" @@ -194400,18 +197505,6 @@ msgstr " 从瓦砾中挣脱了出来!" msgid "You try to free yourself from the rubble, but can't get loose!" msgstr "你尝试从瓦砾中挣脱出来,但是失败了。" -#: src/character.cpp -msgid "You try to escape the pit, but slip back in." -msgstr "你试图从深坑里头爬出来,但是又滑落进去了。" - -#: src/character.cpp -msgid "You escape the pit!" -msgstr "你逃离了深坑!" - -#: src/character.cpp -msgid " escapes the pit!" -msgstr " 逃离了深坑!" - #: src/character.cpp #, c-format msgid "Your %s tries to break free, but fails!" @@ -194451,6 +197544,35 @@ msgstr "你挣脱了!" msgid " breaks out of the grab!" msgstr " 挣脱了!" +#: src/character.cpp src/monster.cpp +#, c-format +msgid "The %s breaks free of the webs!" +msgstr "%s 挣脱了蛛网的束缚!" + +#: src/character.cpp +msgid "You free yourself from the webs!" +msgstr "你从网中挣脱出来!" + +#: src/character.cpp +msgid " frees themselves from the webs!" +msgstr " 从网中挣脱出来!" + +#: src/character.cpp +msgid "You try to free yourself from the webs, but can't get loose!" +msgstr "你尝试从网中挣脱出来,但是失败了。" + +#: src/character.cpp +msgid "You try to escape the pit, but slip back in." +msgstr "你试图从深坑里头爬出来,但是又滑落进去了。" + +#: src/character.cpp +msgid "You escape the pit!" +msgstr "你逃离了深坑!" + +#: src/character.cpp +msgid " escapes the pit!" +msgstr " 逃离了深坑!" + #: src/character.cpp #, c-format msgid "Your %s bionic comes back online." @@ -198258,14 +201380,6 @@ msgstr "渲染测试(秒)" msgid "Test trait group" msgstr "测试特性组" -#: src/debug_menu.cpp -msgid "Show debug message" -msgstr "显示调试信息" - -#: src/debug_menu.cpp -msgid "Crash game (test crash handling)" -msgstr "强制游戏崩溃(测试崩溃处理)" - #: src/debug_menu.cpp msgid "Toggle NPC pathfinding on map" msgstr "在地图上切换NPC寻路" @@ -198294,6 +201408,18 @@ msgstr "信息…" msgid "Enable achievements" msgstr "启用成就" +#: src/debug_menu.cpp +msgid "Show debug message" +msgstr "显示调试信息" + +#: src/debug_menu.cpp +msgid "Crash game (test crash handling)" +msgstr "强制游戏崩溃(测试崩溃处理)" + +#: src/debug_menu.cpp +msgid "Quit to main menu" +msgstr "退出至主菜单" + #: src/debug_menu.cpp msgid "Game…" msgstr "游戏..." @@ -198390,10 +201516,6 @@ msgstr "嵌套式生成地图" msgid "Map…" msgstr "地图…" -#: src/debug_menu.cpp -msgid "Quit to main menu" -msgstr "退出至主菜单" - #: src/debug_menu.cpp msgid "" "Debug Functions - Using these will cheat not only the game, but yourself.\n" @@ -198917,6 +202039,10 @@ msgstr "标记任务完成" msgid "Remove mission without proper cleanup" msgstr "强制移除任务" +#: src/debug_menu.cpp +msgid "Benchmark in progress…" +msgstr "渲染测试进行中……" + #: src/debug_menu.cpp #, c-format msgid "Drew %d times in %.3f seconds. (%.3f fps average)" @@ -200143,138 +203269,182 @@ msgid "Liked" msgstr "喜欢" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "传奇" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" msgstr "无人质疑" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" msgstr "强大" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" msgstr "著名" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" msgstr "广为人知" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" msgstr "时常提起" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" msgstr "渣滓" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "害虫" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "卑劣" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "寄生虫" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "水蛭" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "笑柄" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "中立" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" msgstr "壕无人性" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "富甲一方" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" msgstr "繁荣昌盛" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" msgstr "丰衣足食" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" msgstr "舒适" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "囊中羞涩" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" msgstr "捉襟见肘" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" msgstr "不名一文" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" msgstr "一无所有" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "酒池肉林" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" msgstr "户有余粮" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "野果裹腹" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" msgstr "营养不良" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" msgstr "饥肠辘辘" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "传奇" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" msgstr "所向无敌" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" msgstr "兵强将勇" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" msgstr "兵强马壮" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "半斤八两" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" msgstr "势单力薄" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" msgstr "老弱病残" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" msgstr "弱不禁风" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "百无一用" @@ -200885,12 +204055,12 @@ msgstr "" #, c-format msgid "" "Notes:\n" -"Send a companion to gather light brush and heavy sticks.\n" +"Send a companion to gather light brush and stout branches.\n" "\n" "Skill used: survival\n" "Difficulty: N/A\n" "Gathering Possibilities:\n" -"> heavy sticks\n" +"> stout branches\n" "> withered plants\n" "> splintered wood\n" "\n" @@ -200899,12 +204069,12 @@ msgid "" "Positions: %d/3\n" msgstr "" "说明:\n" -"选择一名同伴去收集灌木和重木棍。\n" +"选择一名同伴去收集灌木和树枝。\n" "\n" "技能:生存\n" "需求等级:N/A\n" "可能的收集物:\n" -"> 重木棍\n" +"> 粗树枝\n" "> 枯萎植物\n" "> 碎木\n" "\n" @@ -202174,8 +205344,8 @@ msgid "You do not have a camp food zone. Aborting…" msgstr "你没有设置营地食品区。中止……" #: src/faction_camp.cpp -msgid "No items are located at the drop point…" -msgstr "食物储藏点没有任何物品……" +msgid "No suitable items are located at the drop points…" +msgstr "食物储藏点没有任何符合要求的食品……" #: src/faction_camp.cpp #, c-format @@ -202387,6 +205557,15 @@ msgstr "%s 过于接近!" msgid "Wait till you wake up…" msgstr "等待你醒来……" +#: src/game.cpp +#, c-format +msgid "" +"\n" +"%s to interrupt" +msgstr "" +"\n" +"按 %s 中断" + #: src/game.cpp #, c-format msgid "%s, cancel Auto-move?" @@ -202497,6 +205676,11 @@ msgctxt "action" msgid "open" msgstr "开启" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -204007,11 +207191,25 @@ msgstr "你从 %s 旁边挤了过去。" msgid "You cannot haul items here." msgstr "你不能在这里搬运物品。" +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "%s挡在路上!" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "%s挡住了你!" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a +#. zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -205385,11 +208583,6 @@ msgstr "一个傻子挡住路了!" msgid "The %s is in the way!" msgstr "%s挡在路上!" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "%s挡在路上!" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -206648,6 +209841,11 @@ msgstr "你开始破解保险箱。" msgid "Attempt to hack this safe?" msgstr "尝试破解保险箱?" +#: src/iexamine.cpp +#, c-format +msgid "The %s is locked. You could pry it open with the right tool…" +msgstr "%s上锁了。你要是有把合适的工具就好了……" + #: src/iexamine.cpp #, c-format msgid "The %s is locked. If only you had something to pry it with…" @@ -207846,6 +211044,10 @@ msgstr "选择要移除的生化插件" msgid "Splint broken limbs" msgstr "断肢夹板" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "你没有任何已安装的生化插件。" @@ -207873,16 +211075,78 @@ msgid " doesn't have limbs that require splinting." msgstr " 的四肢完好,不需要夹板。" #: src/iexamine.cpp -msgid "This mill already contains flour." -msgstr "这个碾磨机已经装满了面粉。" +msgid "You don't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid " doesn't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" #: src/iexamine.cpp -msgid "Remove it before starting the mill again." -msgstr "再次碾磨前请把碾磨机清空。" +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "肌肉痉挛开始缓解了。" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "药物无法缓解当前的痉挛症状。" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" #: src/iexamine.cpp #, c-format -msgid "This rack contains %s, which can't be milled!" +msgid "This mill contains %s, which can't be milled!" msgstr "碾磨机里有%s,无法被碾磨!" #: src/iexamine.cpp @@ -208056,8 +211320,9 @@ msgid "Remove brake and start milling" msgstr "放开制动器并开始碾磨" #: src/iexamine.cpp -msgid "Remove brake and start milling, milling will take about 6 hours." -msgstr "放开制动器并开始碾磨,大约需要6个小时完成。" +#, c-format +msgid "Remove brake and start milling, milling will take about %s." +msgstr "放开制动器并开始碾磨,大约需要 %s 完成。" #: src/iexamine.cpp msgid "Insert products for milling… mill is full" @@ -208090,18 +211355,8 @@ msgstr "这里有个碾磨机,它在转动和碾磨。" #: src/iexamine.cpp #, c-format -msgid "It will finish milling in about %d hour." -msgid_plural "It will finish milling in about %d hours." -msgstr[0] "大概需要 %d 小时完成碾磨。" - -#: src/iexamine.cpp -msgid "It will finish milling in less than an hour." -msgstr "它将在不到一小时内完成碾磨。" - -#: src/iexamine.cpp -#, c-format -msgid "It should take about %d minutes to finish milling." -msgstr "大概需要 %d 分钟完成碾磨。" +msgid "It should take about %s to finish milling." +msgstr "大概需要 %s 完成碾磨。" #: src/iexamine.cpp msgid "There's a mill here." @@ -208861,7 +212116,7 @@ msgstr "体积(%s):" msgid "There are no available choices" msgstr "没有可用的选项" -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "[%s] 筛选:" @@ -209731,10 +212986,6 @@ msgstr "负重系数:" msgid "Weight capacity bonus: " msgstr "负重增益:" -#: src/item.cpp -msgid "Storage: " -msgstr "容积:" - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "* 这件物品可与 头盔同时穿着。" @@ -210000,6 +213251,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "* 这件工具使用 生化能量。" +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "" + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "" + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "" + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "" + +#: src/item.cpp +msgid "Fuel: " +msgstr "" + #: src/item.cpp #, c-format msgid "Using: %s" @@ -210023,10 +213302,22 @@ msgstr "* 这件物品可以被 强化。" msgid "* This item is not repairable." msgstr "* 这件物品 无法修理。" +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." -msgstr "拆解 需要 %s 可获得:%s。" +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "" + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a +#. list of items. +#. ~ Bold text in the middle makes it easier to see where the second list +#. starts. +#: src/item.cpp +#, c-format +msgid "" +"Disassembly takes %1$s, requires %2$s and might " +"yield: %3$s." +msgstr "" #: src/item.cpp #, c-format @@ -210138,27 +213429,28 @@ msgid "Critical hit chance %d%% - %d%%" msgstr "暴击几率 %d%% - %d%%" #: src/item.cpp -#, c-format -msgid "" -"%d bashing (%d on a critical hit)" -msgstr "%d 钝击(%d 暴击)" +msgid "Bashing: " +msgstr "钝击:" #: src/item.cpp -#, c-format -msgid "" -"%d cutting (%d on a critical hit)" -msgstr "%d 斩击(%d 暴击)" +msgid "Critical bash: " +msgstr "钝击(暴击):" #: src/item.cpp -#, c-format -msgid "" -"%d piercing (%d on a critical hit)" -msgstr "%d 穿刺(%d 暴击)" +msgid "Cutting: " +msgstr "斩击:" #: src/item.cpp -#, c-format -msgid "%d moves per attack" -msgstr "攻击消耗 %d 点行动点" +msgid "Critical cut: " +msgstr "斩击(暴击):" + +#: src/item.cpp +msgid "Piercing: " +msgstr "刺击:" + +#: src/item.cpp +msgid "Critical pierce: " +msgstr "刺击(暴击):" #: src/item.cpp msgid "Integrated mod: " @@ -210737,8 +214029,9 @@ msgstr "你的 %1$s 不能装下更多的 %2$s。" msgid "That %s doesn't have room to expand." msgstr "%s 没有可扩展的空间。" -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" msgstr "%d x %s" @@ -210860,6 +214153,56 @@ msgstr "没有可以使用的物品" msgid "Execute which action?" msgstr "执行哪个行动?" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "" + +#: src/item_contents.cpp +msgid " item, " +msgstr "" + +#: src/item_contents.cpp +msgid " category, " +msgstr "" + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "" + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "" + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "" + +#: src/item_contents.cpp +msgid "item id" +msgstr "" + +#: src/item_contents.cpp +msgid "item category" +msgstr "" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "" + #: src/item_contents.cpp msgid "is not a container" msgstr "不是容器" @@ -210900,6 +214243,11 @@ msgstr "测试哪一组?" msgid "Result of 100 spawns:" msgstr "100次生成结果:" +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "%d x %s" + #: src/item_location.cpp msgid "inventory" msgstr "物品栏" @@ -211082,6 +214430,34 @@ msgstr "可用重量不足" msgid "not enough space" msgstr "可用容量不足" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "" + #: src/itype.h msgid "click." msgstr "喀哒。" @@ -211149,14 +214525,6 @@ msgstr "你服用了一些抗生素。" msgid " takes some antibiotics." msgstr " 服用了一些抗生素。" -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "肌肉痉挛开始缓解了。" - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "药物无法缓解当前的痉挛症状。" - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -216750,6 +220118,10 @@ msgstr "初级" msgid "Intermediate" msgstr "中级" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "所向无敌" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "关卡宽度:" @@ -220384,6 +223756,18 @@ msgctxt "memorial_female" msgid "Set off an alarm." msgstr "引发警报。" +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_male" +msgid "Used the debug menu (%s)." +msgstr "使用了调试菜单(%s)。" + +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_female" +msgid "Used the debug menu (%s)." +msgstr "使用了调试菜单(%s)。" + #. ~ Message %s on the message log was repeated %d times, e.g. "You hear a #. whack! x 12" #: src/messages.cpp @@ -224222,11 +227606,6 @@ msgstr "专注值平衡点:" msgid "You feel bugs crawl over your skin." msgstr "你感觉虫子在你的移动模式上爬。" -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "人类" - #: src/mutation.cpp #, c-format msgid "Your %s is destroyed!" @@ -225193,17 +228572,6 @@ msgstr "年龄:" msgid "Blood type:" msgstr "血型:" -#: src/newcharacter.cpp -#, c-format -msgid "" -"* Random location * (%d variants)" -msgstr "*随机*(共 %d 种)" - -#: src/newcharacter.cpp -#, c-format -msgid "%s (%d variants)" -msgstr "%s(共 %d 种)" - #: src/newcharacter.cpp msgid "Name:" msgstr "名字:" @@ -225216,6 +228584,20 @@ msgstr "性别:" msgid "Select a starting location." msgstr "选择一个起始位置。" +#: src/newcharacter.cpp +#, c-format +msgid "" +"* Random location * (%d variant)" +msgid_plural "" +"* Random location * (%d variants)" +msgstr[0] "*随机*(共 %d 种)" + +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "%s(共 %d 种)" + #: src/newcharacter.cpp msgid "Stats:" msgstr "属性:" @@ -225293,6 +228675,12 @@ msgstr "按 %s 选择地点。" msgid "Starting location:" msgstr "起始位置:" +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "%s(共 %d 种)" + #: src/newcharacter.cpp msgid "Starting Vehicle: " msgstr "起始载具:" @@ -226965,6 +230353,14 @@ msgstr "捣碎" msgid "Pulp Adjacent" msgstr "捣碎附近" +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "" + #: src/options.cpp msgid "Auto mining" msgstr "自动挖矿" @@ -229287,6 +232683,16 @@ msgstr "区域:" msgid "# Unexplored" msgstr "# 未探索" +#: src/overmap_ui.cpp +#, c-format +msgid "oter: %s" +msgstr "大地图:%s" + +#: src/overmap_ui.cpp +#, c-format +msgid "oter_type: %s" +msgstr "大地图类型:%s" + #: src/overmap_ui.cpp msgid "Distance to active mission:" msgstr "距离当前任务目标:" @@ -229614,6 +233020,10 @@ msgstr "酷热!" msgid "Very hot!" msgstr "炎热!" +#: src/panels.cpp +msgid "Comfortable" +msgstr "舒适" + #: src/panels.cpp msgid "Very cold!" msgstr "寒冷!" @@ -231058,6 +234468,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "口渴 -%2d%%" +#: src/player_display.cpp +msgid "Starving" +msgstr "饥肠辘辘" + #: src/player_display.cpp msgid "Underfed" msgstr "营养不良" @@ -231152,6 +234566,10 @@ msgstr "" "你的身体已经因为严重营养不良而变得十分虚弱。你再不开始规律进食,就会死亡!\n" "\n" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "营养不良" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help you recover.\n" @@ -232278,6 +235696,14 @@ msgid "%1$d tool with %2$s of %3$d or more." msgid_plural "%1$d tools with %2$s of %3$d or more." msgstr[0] "%1$d 个 %2$s 功能至少 %3$d 级的工具。" +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level +#. requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "" + #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp #, c-format @@ -233155,7 +236581,7 @@ msgstr "选择游戏语言" #: src/translations.cpp msgctxt "grammatical gender list" msgid "n" -msgstr "中性" +msgstr "n" #: src/trapfunc.cpp msgid "You step on some bubble wrap!" @@ -236322,6 +239748,10 @@ msgstr "…%s = 显示完整说明" msgid "--NO AVAILABLE MODS--" msgstr "--无有效模组--" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "激活模组列表已保存为默认" diff --git a/lang/po/zh_TW.po b/lang/po/zh_TW.po index a262638447850..1f7ce57770883 100644 --- a/lang/po/zh_TW.po +++ b/lang/po/zh_TW.po @@ -15,21 +15,21 @@ # 菲伊斯 , 2020 # 為勳 周 , 2020 # HOXV , 2020 -# Brett Dong , 2020 # 類凱宇 , 2020 -# kiddragon Chung , 2020 # Jeremy Wu , 2020 -# Hsinyu Chan, 2020 -# xap, 2020 -# Laughing Man, 2020 # Hao JK , 2020 +# kiddragon Chung , 2020 +# Laughing Man, 2020 +# xap, 2020 +# Brett Dong , 2020 +# Hsinyu Chan, 2020 # Yangerine Yuan , 2020 # msgid "" msgstr "" "Project-Id-Version: cataclysm-dda 0.E\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-06-06 11:53+0800\n" +"POT-Creation-Date: 2020-06-23 10:06+0800\n" "PO-Revision-Date: 2018-04-26 14:47+0000\n" "Last-Translator: Yangerine Yuan , 2020\n" "Language-Team: Chinese (Taiwan) (https://www.transifex.com/cataclysm-dda-translators/teams/2217/zh_TW/)\n" @@ -265,7 +265,6 @@ msgid_plural "rocks" msgstr[0] "石頭" #. ~ Description for {'str': 'rock'} -#. ~ Description for TEST rock #: lang/json/AMMO_from_json.py msgid "" "A rock the size of a baseball. Makes a decent melee weapon, and is also " @@ -4998,7 +4997,6 @@ msgstr[0] "金塊" #. ~ Description for {'str_sp': 'gold'} #. ~ Description for {'str_sp': 'platinum'} -#. ~ Description for {'str': 'TEST platinum bit'} #: lang/json/AMMO_from_json.py msgid "" "A soft shiny metal. Before the apocalypse this would've been worth a small " @@ -5066,7 +5064,6 @@ msgid_plural "small metal sheets" msgstr[0] "" #. ~ Description for {'str': 'small metal sheet'} -#. ~ Description for TEST small metal sheet #: lang/json/AMMO_from_json.py msgid "A small sheet of metal." msgstr "一片小型金屬板。" @@ -6294,63 +6291,6 @@ msgstr[0] "" msgid "Seeing this is a bug." msgstr "看到這訊息是程式錯誤導致的。" -#: lang/json/AMMO_from_json.py -msgid "TEST rock" -msgid_plural "TEST rocks" -msgstr[0] "" - -#: lang/json/AMMO_from_json.py -msgid "TEST small metal sheet" -msgid_plural "TEST small metal sheets" -msgstr[0] "" - -#: lang/json/AMMO_from_json.py -msgid "test wooden broadhead arrow" -msgid_plural "test wooden broadhead arrows" -msgstr[0] "" - -#. ~ Description for {'str': 'test wooden broadhead arrow'} -#: lang/json/AMMO_from_json.py -msgid "Test arrow" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test 9mm ammo" -msgid_plural "Test 9mm ammos" -msgstr[0] "" - -#. ~ Description for {'str': 'Test 9mm ammo'} -#: lang/json/AMMO_from_json.py -msgid "Generic 9mm ammo based on JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "Test .45 ammo" -msgid_plural "Test .45 ammos" -msgstr[0] "" - -#. ~ Description for {'str': 'Test .45 ammo'} -#: lang/json/AMMO_from_json.py -msgid "Test ammo based on the .45 JHP." -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "test gas" -msgid_plural "test gas" -msgstr[0] "" - -#. ~ Description for {'str_sp': 'test gas'} -#: lang/json/AMMO_from_json.py -msgid "" -"Some mysterious substance in the form of a gas. Only for testing, do not " -"inhale!" -msgstr "" - -#: lang/json/AMMO_from_json.py -msgid "TEST platinum bit" -msgid_plural "TEST platinum bits" -msgstr[0] "" - #: lang/json/ARMOR_from_json.py msgid "pair of bone arm guards" msgid_plural "pairs of bone arm guards" @@ -6624,8 +6564,6 @@ msgstr[0] "耳塞" #. ~ Description for {'str': 'pair of ear plugs', 'str_pl': 'pairs of ear #. plugs'} -#. ~ Description for {'str': 'TEST pair of ear plugs', 'str_pl': 'TEST pairs -#. of ear plugs'} #: lang/json/ARMOR_from_json.py msgid "Industrial grade ear plugs. They fit inside the ear." msgstr "工業等級耳塞。能夠服貼耳朵。" @@ -8359,8 +8297,6 @@ msgid_plural "pairs of socks" msgstr[0] "襪子" #. ~ Description for {'str': 'pair of socks', 'str_pl': 'pairs of socks'} -#. ~ Description for {'str': 'TEST pair of socks', 'str_pl': 'TEST pairs of -#. socks'} #: lang/json/ARMOR_from_json.py msgid "Socks. Put 'em on your feet." msgstr "襪子。穿在腳上的玩意。" @@ -10004,6 +9940,17 @@ msgid "" "heat." msgstr "" +#: lang/json/ARMOR_from_json.py +msgid "pair of studded gloves" +msgid_plural "pairs of studded gloves" +msgstr[0] "" + +#. ~ Description for {'str': 'pair of studded gloves', 'str_pl': 'pairs of +#. studded gloves'} +#: lang/json/ARMOR_from_json.py +msgid "A pair of gloves with studded metal knuckles." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "ten-gallon hat" msgid_plural "ten-gallon hats" @@ -15678,7 +15625,6 @@ msgstr[0] "" #. ~ Use action activate_msg for {'str': 'combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'heavy combat exoskeleton'}. #. ~ Use action activate_msg for {'str': 'field combat exoskeleton'}. -#. ~ Use action activate_msg for {'str': 'test power armor'}. #: lang/json/ARMOR_from_json.py msgid "Your power armor engages." msgstr "你的動力裝甲啟動了。" @@ -16004,7 +15950,6 @@ msgid_plural "backpacks" msgstr[0] "背包" #. ~ Description for {'str': 'backpack'} -#. ~ Description for TEST backpack #: lang/json/ARMOR_from_json.py msgid "A small backpack. Good storage for a little encumbrance." msgstr "一個小背包, 有許多的儲物空間卻只會增加一點點累贅。" @@ -16102,7 +16047,6 @@ msgid_plural "briefcases" msgstr[0] "公事包" #. ~ Description for {'str': 'briefcase'} -#. ~ Description for TEST briefcase #: lang/json/ARMOR_from_json.py msgid "Useful for carrying money, documents, or smuggled goods." msgstr "用途是裝錢, 放文件, 或是走私物品。" @@ -16932,7 +16876,6 @@ msgid_plural "hazmat suits" msgstr[0] "防護衣" #. ~ Description for {'str': 'hazmat suit'} -#. ~ Description for TEST hazmat suit #: lang/json/ARMOR_from_json.py msgid "" "An impermeable whole-body garment worn as protection against hazardous " @@ -17753,7 +17696,6 @@ msgid_plural "long-sleeved shirts" msgstr[0] "長袖T恤" #. ~ Description for {'str': 'long-sleeved shirt'} -#. ~ Description for TEST long-sleeved shirt #: lang/json/ARMOR_from_json.py msgid "A long-sleeved cotton shirt." msgstr "一件長袖的棉質上衣。" @@ -18263,7 +18205,7 @@ msgstr[0] "" msgid "" "A lightweight, form-fitting long-sleeved spandex undershirt that helps " "maintains body temperature." -msgstr "" +msgstr "一件輕巧、合身的長袖氨綸(萊卡)汗衫,能夠保持體溫。" #: lang/json/ARMOR_from_json.py msgid "sports bra" @@ -18421,6 +18363,18 @@ msgid "" "weight." msgstr "一件大睡袋能夠從頭到腳把你蓋住。這件重量適中。" +#: lang/json/ARMOR_from_json.py +msgid "cestus" +msgid_plural "cestuses" +msgstr[0] "金屬拳套" + +#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} +#: lang/json/ARMOR_from_json.py +msgid "" +"A leather hand and arm wrap incorporating metal plates over the knuckles to " +"improve punching power and defence." +msgstr "" + #: lang/json/ARMOR_from_json.py msgid "helmet netting" msgid_plural "helmet nettings" @@ -19787,53 +19741,14 @@ msgid "" msgstr "" #: lang/json/ARMOR_from_json.py -msgid "TEST pair of socks" -msgid_plural "TEST pairs of socks" -msgstr[0] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST long-sleeved shirt" -msgid_plural "TEST long-sleeved shirts" -msgstr[0] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST pair of ear plugs" -msgid_plural "TEST pairs of ear plugs" -msgstr[0] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST hazmat suit" -msgid_plural "TEST hazmat suits" -msgstr[0] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST backpack" -msgid_plural "TEST backpacks" -msgstr[0] "" - -#: lang/json/ARMOR_from_json.py -msgid "TEST briefcase" -msgid_plural "TEST briefcases" -msgstr[0] "" - -#: lang/json/ARMOR_from_json.py -msgid "test quiver" -msgid_plural "test quivers" -msgstr[0] "" - -#. ~ Description for {'str': 'test quiver'} -#: lang/json/ARMOR_from_json.py -msgid "Quiver of Testing, with room for 20 arrows or bolts." -msgstr "" - -#: lang/json/ARMOR_from_json.py -msgid "test power armor" -msgid_plural "test power armors" +msgid "aura of repelling arc" +msgid_plural "aura of repelling arcs" msgstr[0] "" -#. ~ Description for {'str': 'test power armor'} +#. ~ Description for aura of repelling arc #: lang/json/ARMOR_from_json.py -msgid "This is a prototype power armor just for testing." +msgid "" +"An invisible aura that strikes melee attackers with arcs of electricity." msgstr "" #: lang/json/BATTERY_from_json.py @@ -20225,8 +20140,8 @@ msgid "Aero-Evaporator CBM" msgid_plural "Aero-Evaporator CBMs" msgstr[0] "CBM: 濕氣凝水裝置" -#. ~ Description for {'str': 'Aero-Evaporator'} #. ~ Description for {'str': 'Aero-Evaporator CBM'} +#. ~ Description for {'str': 'Aero-Evaporator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "This unit draws moisture from the surrounding air, which slowly trickles " @@ -21298,8 +21213,8 @@ msgid "Internal Furnace CBM" msgid_plural "Internal Furnace CBMs" msgstr[0] "CBM: 內燃機" -#. ~ Description for {'str': 'Internal Furnace'} #. ~ Description for {'str': 'Internal Furnace CBM'} +#. ~ Description for {'str': 'Internal Furnace'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "When this bionic is active, you can burn nearly any organic material as fuel" @@ -21398,8 +21313,8 @@ msgid "Wind Turbine CBM" msgid_plural "Wind Turbine CBMs" msgstr[0] "" -#. ~ Description for {'str': 'Wind Turbines'} #. ~ Description for {'str': 'Wind Turbine CBM'} +#. ~ Description for {'str': 'Wind Turbines'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "Installed on your body is a set of small retractable wind turbines. When " @@ -21407,18 +21322,6 @@ msgid "" "power level." msgstr "" -#: lang/json/BIONIC_ITEM_from_json.py -msgid "Precision Solderers CBM" -msgid_plural "Precision Solderers CBMs" -msgstr[0] "CBM:精工焊接" - -#. ~ Description for {'str': 'Precision Solderers CBM'} -#: lang/json/BIONIC_ITEM_from_json.py -msgid "" -"A set of tiny electronics tools, including soldering irons and wire cutters." -" They serve no purpose on their own, but are required for crafting bionics." -msgstr "一套微型電子工具,包括烙鐵和鋼絲鉗。它們本身沒有任何用途,但是製作生化插件時是必要的。" - #: lang/json/BIONIC_ITEM_from_json.py msgid "Deployable Grenade Launcher CBM" msgid_plural "Deployable Grenade Launcher CBMs" @@ -21471,13 +21374,37 @@ msgid "" "from installation and you don't have the codes to reset the timer." msgstr "" +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "Skullgun CBM" +msgid_plural "Skullgun CBMs" +msgstr[0] "" + +#. ~ Description for {'str': 'Skullgun CBM'} +#: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py +msgid "" +"Concealed in your head is a single shot .40 pistol. Activate the bionic to " +"fire and reload the skullgun." +msgstr "" + +#: lang/json/BIONIC_ITEM_from_json.py +msgid "Precision Solderers CBM" +msgid_plural "Precision Solderers CBMs" +msgstr[0] "CBM:精工焊接" + +#. ~ Description for {'str': 'Precision Solderers CBM'} +#: lang/json/BIONIC_ITEM_from_json.py +msgid "" +"A set of tiny electronics tools, including soldering irons and wire cutters." +" They serve no purpose on their own, but are required for crafting bionics." +msgstr "一套微型電子工具,包括烙鐵和鋼絲鉗。它們本身沒有任何用途,但是製作生化插件時是必要的。" + #: lang/json/BIONIC_ITEM_from_json.py msgid "Ionic Overload Generator CBM" msgid_plural "Ionic Overload Generator CBMs" msgstr[0] "CBM: 離子超載生成器" -#. ~ Description for {'str': 'Ionic Overload Generator'} #. ~ Description for {'str': 'Ionic Overload Generator CBM'} +#. ~ Description for {'str': 'Ionic Overload Generator'} #: lang/json/BIONIC_ITEM_from_json.py lang/json/bionic_from_json.py msgid "" "A powerful ion energy generator is implanted on your chest. Fires a " @@ -21635,6 +21562,33 @@ msgstr[0] "" msgid "template for a paperback nonfiction book" msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Generic Pulp Book" +msgid_plural "Generic Pulp Books" +msgstr[0] "" + +#. ~ Description for Generic Pulp Book +#: lang/json/BOOK_from_json.py +msgid "" +"This is a template for pulp books. Which really all ought to be paperbacks," +" right?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Generic SciFi Book" +msgid_plural "Generic SciFi Books" +msgstr[0] "" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for paperback scifi books." +msgstr "" + +#. ~ Description for Generic SciFi Book +#: lang/json/BOOK_from_json.py +msgid "This is a template for a hard cover scifi book." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "Homemaking Book" msgid_plural "Homemaking Books" @@ -22905,8 +22859,8 @@ msgstr[0] "" #. 'str_pl': 'none'} #. ~ Description for {'str_sp': 'none'} #. ~ Description for {'str': 'abstract map'} -#. ~ Description for {'str': 'weapon'} #. ~ Description for {'str_sp': 'seeing this is a bug'} +#. ~ Description for {'str': 'weapon'} #: lang/json/BOOK_from_json.py lang/json/GENERIC_from_json.py #: lang/json/GENERIC_from_json.py lang/json/TOOL_from_json.py #: lang/json/furniture_from_json.py lang/json/skill_from_json.py @@ -23918,8 +23872,8 @@ msgstr[0] "冒險小說" #: lang/json/BOOK_from_json.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." -msgstr "一個與時間賽跑的熱血故事, 內容是關於搜索一個坐落於非洲大陸的失落城市。" +"in the heart of the African continent." +msgstr "" #: lang/json/BOOK_from_json.py msgid "buddy novel" @@ -23933,25 +23887,6 @@ msgid "" "York City." msgstr "一個扣人心弦的故事, 講述兩個朋友在紐約市街頭掙扎求存。" -#: lang/json/BOOK_from_json.py -msgid "coming of age novel" -msgid_plural "coming of age novels" -msgstr[0] "成長小說" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A classic tale about growing up, portraying one young man's funny and " -"poignant experiences with life, love, and sex." -msgstr "一本關於成長的經典寓言故事, 描述一位年輕男子在生活、愛、和性的有趣和淒美的經驗。" - -#. ~ Description for {'str': 'coming of age novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A graphic novel about a young girl living in Iran during the 1980's, seeing " -"the world change around her as Iraq invaded her country." -msgstr "這是一部關於 1980 年代生活在伊朗的年輕女孩的視覺文學, 描述當伊拉克入侵她的國家時, 她周遭世界產生的種種變化。" - #: lang/json/BOOK_from_json.py msgid "crime novel" msgid_plural "crime novels" @@ -24064,70 +23999,6 @@ msgstr[0] "推理小說" msgid "A detective investigates an unusual murder in a secluded location." msgstr "一個僻靜的地點, 一起不尋常的謀殺, 一名偵探。" -#: lang/json/BOOK_from_json.py -msgid "pulp novel" -msgid_plural "pulp novels" -msgstr[0] "推理小說" - -#. ~ Description for {'str': 'pulp novel'} -#: lang/json/BOOK_from_json.py -msgid "" -"A hardboiled detective tale filled with hard hitting action and intrigue." -msgstr "一本冷硬派的偵探小說, 充滿著硬派動作與陰謀。" - -#: lang/json/BOOK_from_json.py -msgid "Planet of the Murderous Squids that Time Forgot!" -msgid_plural "Planet of the Murderous Squids that Time Forgot!s" -msgstr[0] "" - -#. ~ Description for Planet of the Murderous Squids that Time Forgot! -#: lang/json/BOOK_from_json.py -msgid "" -"In this psychedelic adventure novel of cosmic exploration, an elderly " -"assassin discovers a planet too good to be true. Only once it is too late " -"does she discover the harrowing truth at the center of \"The Planet of the " -"Murderous Squids that Time Forgot!\"" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "The Great Capes of Metropolis" -msgid_plural "The Great Capes of Metropoliss" -msgstr[0] "" - -#. ~ Description for The Great Capes of Metropolis -#: lang/json/BOOK_from_json.py -msgid "" -"In this classic pulp paperback of superheroic exploits, a group of masked " -"vigilantes with diverse superpowers learn to work together to defeat the " -"ultimate villain." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Yesterday's Murdered" -msgid_plural "Yesterday's Murdereds" -msgstr[0] "" - -#. ~ Description for Yesterday's Murdered -#: lang/json/BOOK_from_json.py -msgid "" -"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" -" has one last shot at vengeance." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Flashgun Condor and the Crimson Criminal" -msgid_plural "Flashgun Condor and the Crimson Criminals" -msgstr[0] "" - -#. ~ Description for Flashgun Condor and the Crimson Criminal -#: lang/json/BOOK_from_json.py -msgid "" -"A hot-blooded photographer who fights crime with film, footage, and fists, " -"Condor is more than a mere shutterbug on the crime beat. But will she be " -"able to unravel a devious deception and bring the \"Crimson Criminal\" to " -"justice?" -msgstr "" - #: lang/json/BOOK_from_json.py msgid "road novel" msgid_plural "road novels" @@ -24285,8 +24156,8 @@ msgstr[0] "武士小說" 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." -msgstr "經典的故事, 講述一個小鎮來了一個陌生劍士被雇用來幫忙鎮民防衛, 阻止劫匪的入侵。" +"marauding outlaws. This hardback is quite hefty." +msgstr "" #: lang/json/BOOK_from_json.py msgid "satire novel" @@ -24327,15 +24198,17 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Master and Margarita" -msgid_plural "The Master and Margaritas" +msgid_plural "copies of Master and Margarita" msgstr[0] "" -#. ~ Description for The Master and Margarita +#. ~ Description for {'str': 'The Master and Margarita', 'str_pl': 'copies of +#. Master and Margarita'} #: lang/json/BOOK_from_json.py msgid "" "Featuring a cast that includes Satan, Pontius Pilate, Jesus Christ, " -"vampires, a talking cat, and the literary elite of Moscow, this is a satire " -"on Stalinist tyranny written by Mikhail Bulgakov." +"vampires, a talking cat, and the literary elite of Moscow, this novel by " +"Mikhail Bulgakov explores philosophical issues on the nature of good and " +"evil." msgstr "" #: lang/json/BOOK_from_json.py @@ -24362,326 +24235,6 @@ msgid "" "nuclear destruction isn't much of an influence on human nature." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "scifi novel" -msgid_plural "scifi novels" -msgstr[0] "科幻小說" - -#. ~ Description for {'str': 'scifi novel'} -#: lang/json/BOOK_from_json.py -msgid "Aliens, ray guns, and space ships." -msgstr "外星人, 雷射槍, 還有太空船。" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" -" surprisingly accurate in predicting much of modern society… Until " -"recently." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" -"\n" -"Tyger, Tyger, Burning bright,\n" -"In the forests of the night:\n" -"What immortal hand or eye,\n" -"Dare frame thy fearful symmetry?" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" -"stains have smudged the occasional word." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This copy of Ray Bradbury's \"Fahrenheit 451\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Hyperion\" by Dan Simmons." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" -"\n" -"Give us gods. Oh give them us!\n" -"Give us gods.\n" -"We are so tired of men\n" -"And motor-power." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " -"ripped off." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " -"some of its pages. Weird." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " -"you wonder how Thailand fared the end of the world." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " -"contains a hand-written grocery list." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " -"still has the smell of new books within its pages." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " -"Sterling. The cover has rings of coffee stains over it." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " -"looks to have been used to press flowers." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " -"the monster?" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" -" handbook." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " -"covered in dried blood." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Roadside Picnic\" by Arkady and Boris Strugatsky." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " -"if it's been slightly chewed by a dog or other large animal." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Cat's Cradle\" by Kurt Vonnegut. You notice there is a " -"typo in the authors name on the spine of the book." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " -"Copy. Not for re-sale.\"" -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " -"the first pages in crayon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " -"with 'Library Copy'. And a sticker reading 'Science Fiction'." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Fifth Season\" by N.K. Jemsin. It smells faintly of" -" dirt." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" -" almost brand new." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " -"and worn, some pages appear to be loose." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " -"and thin. You should probably be careful with this copy." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " -"dog-eared and worn." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a weather worn copy of \"Brave New World\" by Aldous Huxley." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Stanislaw Lem's \"Solaris\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Vurt\" by Jeff Noon." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " -"blurb reminds you of a Japanese movie you think you once caught on the " -"television late at night." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " -"missing from the end of the book. Luckily only mail-order advertisements." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "" -"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " -"Douglas Adams." -msgstr "" - #: lang/json/BOOK_from_json.py msgid "spy novel" msgid_plural "spy novels" @@ -25825,6 +25378,564 @@ msgid "" " key work in the existentialist tradition." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "pulp novel" +msgid_plural "pulp novels" +msgstr[0] "推理小說" + +#. ~ Description for {'str': 'pulp novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hardboiled detective tale filled with hard hitting action and intrigue." +msgstr "一本冷硬派的偵探小說, 充滿著硬派動作與陰謀。" + +#: lang/json/BOOK_from_json.py +msgid "Black Valkyries From Venus" +msgid_plural "copies of Black Valkyries" +msgstr[0] "" + +#. ~ Description for {'str': 'Black Valkyries From Venus', 'str_pl': 'copies +#. of Black Valkyries'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a weather-beaten novel written by someone named \"Lee" +" Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Wrong Tomorrow" +msgid_plural "copies of Wrong Tomorrow" +msgstr[0] "" + +#. ~ Description for {'str': 'The Wrong Tomorrow', 'str_pl': 'copies of Wrong +#. Tomorrow'} +#: lang/json/BOOK_from_json.py +msgid "" +"You hold in your hands a cheap drugstore paperback written by someone named " +"\"Lee Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "No God From a Corpse" +msgid_plural "copies of No God" +msgstr[0] "" + +#. ~ Description for {'str': 'No God From a Corpse', 'str_pl': 'copies of No +#. God'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a weatherworn paperback written by some skirt named \"Lee Racket.\"" +" It tells how rage and jealousy can turn a man, or a woman, into a monster." +" This story is hard-boiled enough to break a spoon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Deep Dive" +msgid_plural "copies of Deep Dive" +msgstr[0] "" + +#. ~ Description for {'str': 'The Deep Dive', 'str_pl': 'copies of Deep Dive'} +#: lang/json/BOOK_from_json.py +msgid "" +"This dimestore short story about space travel is written by a broad named " +"\"Lee Racket.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Planet of the Murderous Squids that Time Forgot!" +msgid_plural "Planet of the Murderous Squids that Time Forgot!s" +msgstr[0] "" + +#. ~ Description for Planet of the Murderous Squids that Time Forgot! +#: lang/json/BOOK_from_json.py +msgid "" +"In this psychedelic adventure novel of cosmic exploration, an elderly " +"assassin discovers a planet too good to be true. Only once it is too late " +"does she discover the harrowing truth at the center of \"The Planet of the " +"Murderous Squids that Time Forgot!\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Great Capes of Metropolis" +msgid_plural "The Great Capes of Metropoliss" +msgstr[0] "" + +#. ~ Description for The Great Capes of Metropolis +#: lang/json/BOOK_from_json.py +msgid "" +"In this classic pulp paperback of superheroic exploits, a group of masked " +"vigilantes with diverse superpowers learn to work together to defeat the " +"ultimate villain." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Yesterday's Murdered" +msgid_plural "Yesterday's Murdereds" +msgstr[0] "" + +#. ~ Description for Yesterday's Murdered +#: lang/json/BOOK_from_json.py +msgid "" +"In this fast paced pulp noir, a hard-drinking detective with nerves of steel" +" has one last shot at vengeance." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Flashgun Condor and the Crimson Criminal" +msgid_plural "Flashgun Condor and the Crimson Criminals" +msgstr[0] "" + +#. ~ Description for Flashgun Condor and the Crimson Criminal +#: lang/json/BOOK_from_json.py +msgid "" +"A hot-blooded photographer who fights crime with film, footage, and fists, " +"Condor is more than a mere shutterbug on the crime beat. But will she be " +"able to unravel a devious deception and bring the \"Crimson Criminal\" to " +"justice?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "scifi novel" +msgid_plural "scifi novels" +msgstr[0] "科幻小說" + +#. ~ Description for {'str': 'scifi novel'} +#: lang/json/BOOK_from_json.py +msgid "Aliens, ray guns, and space ships." +msgstr "外星人, 雷射槍, 還有太空船。" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Gibson's \"Neuromancer\". Written in the eighties, it was" +" surprisingly accurate in predicting much of modern society… Until " +"recently." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Stars My Destination\" by Alfred Bester.\n" +"\n" +"Tyger, Tyger, Burning bright,\n" +"In the forests of the night:\n" +"What immortal hand or eye,\n" +"Dare frame thy fearful symmetry?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Lathe of Heaven\" by Ursula Le Guin. Dirty finger-" +"stains have smudged the occasional word." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Dispossessed\" by Ursula Le Guin." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Hyperion\" by Dan Simmons." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Endymion\" by Dan Simmons. It opens with a poem by D.H. Lawrence:\n" +"\n" +"Give us gods. Oh give them us!\n" +"Give us gods.\n" +"We are so tired of men\n" +"And motor-power." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Philip K. Dick's \"Do Androids Dream of Electric Sheep?\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a dog-eared copy of \"Nova Express\" by William Burroughs." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation\" by Isaac Asimov. The back cover has been " +"ripped off." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Trial\" by Franz Kafka. This book is rather worn." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Handmaid's Tale\" by Margaret Atwood." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Windup Girl\" by Paolo Bacigalupi. The blurb makes " +"you wonder how Thailand fared the end of the world." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Net\" by Bruce Sterling." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Foundation and Empire\" by Isaac Asimov. The back page " +"contains a hand-written grocery list." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is an almost new copy of \"A Scanner Darkly\" by Philip K. Dick. It " +"still has the smell of new books within its pages." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Mirrorshades: A Cyberpunk Anthology\" compiled by Bruce " +"Sterling. The cover has rings of coffee stains over it." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The World of Null-A\" by A. E. van Vogt. This copy " +"looks to have been used to press flowers." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Altered Carbon\" by Richard Morgan." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Mary Shelly's \"Frankenstein\". Wasn't that the name of " +"the monster?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Wasp\" by Eric Frank Russel. The futuristic terrorist's" +" handbook." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"I Am Legend\" by Richard Matheson. The sleeve is " +"covered in dried blood." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Forever War\" by Joe Haldeman. This copy looks as " +"if it's been slightly chewed by a dog or other large animal." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Moon Is a Harsh Mistress\" by Robert A. Heinlein." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Samuel R. Delany's \"Nova\". The cover reads \"Review " +"Copy. Not for re-sale.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Vonnegut's \"The Sirens of Titan\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Grass\" by Sheri S. Tepper. A child has scribbled over " +"the first pages in crayon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of William Gibson's \"Count Zero\". The spine is stamped " +"with 'Library Copy'. And a sticker reading 'Science Fiction'." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Weapon Makers\" by A. E. van Vogt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Record of a Spaceborn Few\" by Becky Chambers. It looks" +" almost brand new." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"Use of Weapons\" by Ian M. Banks. The spine is cracked " +"and worn, some pages appear to be loose." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Jean-Baptiste Cousin de Grainville's \"Le Dernier Homme\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Orwell's \"Nineteen Eighty-Four\". The pages are loose " +"and thin. You should probably be careful with this copy." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Heinlein's \"Stranger in a Strange Land\". The cover is " +"dog-eared and worn." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Orson Scott Card's \"Ender's Game\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Lost World\" by Arthur Conan Doyle." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Islands in the Sky\" by Arthur C. Clarke." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of H. G. Wells' \"The Island of Doctor Moreau\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"His Masters Voice\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Fred Hoyle's \"The Black Cloud\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Last and First Men\" by Olaf Stapeldon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Stanislaw Lem's \"Solaris\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Theodore Sturgeon's \"More Than Human\"." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Vurt\" by Jeff Noon." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Canticle for Leibowitz\" by Walter M. Miller Jr." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The War of The Worlds\" by H.G Wells." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Iron Sunrise\" by Charles Stross." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of \"The Hunger Games\" by Suzanne Collins. Reading the " +"blurb reminds you of a Japanese movie you think you once caught on the " +"television late at night." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Day of the Triffids\" by John Wyndham." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"A Clockwork Orange\" by Anthony Burges." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Man Who Fell to Earth\" by Walter Tevis." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Simulacron-3\" by Daniel F. Galouye." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"The Glass Bees\" by Ernst Jünger." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "This is a copy of \"Journey to The Center of the Earth\" by Jules Verne." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a copy of Larry Niven's \"Ringworld\". There are a couple of pages " +"missing from the end of the book. Luckily only mail-order advertisements." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This is a well-worn copy of \"The Hitchhikers Guide to the Galaxy\" by " +"Douglas Adams." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Dune" +msgid_plural "copies of Dune" +msgstr[0] "" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a dog-eared copy of \"Dune\" by Frank Herbert. It has sand between " +"some of its pages. Weird." +msgstr "" + +#. ~ Description for {'str': 'Dune', 'str_pl': 'copies of Dune'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Dune\" by Frank Herbert. It is a fairly new " +"reprint with the words \"SOON TO BE A MAJOR MOTION PICTURE\" splashed across" +" its dust jacket." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Parable of the Talents" +msgid_plural "copies of Parable of the Talents" +msgstr[0] "" + +#. ~ Description for {'str': 'Parable of the Talents', 'str_pl': 'copies of +#. Parable of the Talents'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a sturdy copy of \"Parable of the Talents.\". It is Octavia " +"Butler's sequel to her book \"Parable of the Sower.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Fifth Season" +msgid_plural "signed copies of Fifth Season" +msgstr[0] "" + +#. ~ Description for {'str': 'The Fifth Season', 'str_pl': 'signed copies of +#. Fifth Season'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a signed hardcover copy of the Hugo award winning \"The Fifth " +"Season\" by N.K. Jemisin. It smells faintly of dirt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "We" +msgid_plural "copies of We" +msgstr[0] "" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"This hardback book is titled \"The Annotated We: A New Translation of Evgeny Zamiatin's Novel.\"\n" +"\n" +"It is Vladimir Wozniuk's 2015 translation of \"We,\" originally published in 1924 and generally seen as the first modern dystopian novel. The commentary examines the profusive allusions and highlights the poetic nature of Zamiatin's language." +msgstr "" + +#. ~ Description for {'str': 'We', 'str_pl': 'copies of We'} +#: lang/json/BOOK_from_json.py +msgid "" +"A seminal work of dystopian fiction, Evgeny Zamiatin's \"We\" was first published in 1924 but suppresed by the Soviet Union until 1988.\n" +"\n" +"This mass-market 1993 edition you've found was translated from the Russian by Clarence Brown and includes a short introduction. The slightly worn cover features a surrealist photo of a person gazing backward suspiciouly." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "The Cyberiad" +msgid_plural "copies of The Cyberiad" +msgstr[0] "" + +#. ~ Description for {'str': 'The Cyberiad', 'str_pl': 'copies of The +#. Cyberiad'} +#: lang/json/BOOK_from_json.py +msgid "" +"This 350 page paperback presents the exploits and robotic rivalries of Trurl" +" and Klapaucius. Originally written in Polish by Stanislaw Lem, it has been" +" masterfully translated into English by Michael Kandel." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Brave New World" +msgid_plural "copies of Brave New World" +msgstr[0] "" + +#. ~ Description for {'str': 'Brave New World', 'str_pl': 'copies of Brave New +#. World'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is weather worn copy of \"Brave New World\" by Aldous Huxley looks like" +" it has been left out in rain. The novel begins in a bleak building where " +"fetuses are grown in bottles on an assembly line." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Roadside Picnic" +msgid_plural "copies of Roadside Picnic" +msgstr[0] "" + +#. ~ Description for {'str': 'Roadside Picnic', 'str_pl': 'copies of Roadside +#. Picnic'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a paperback copy of \"Roadside Picnic\" by Arkady and Boris " +"Strugatsky. It has been translated into over 20 languages, occasionally " +"under the name \"Stalker.\" This copy, fortunately for you, just happens to" +" be in your native tongue." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Fahrenheit 451" +msgid_plural "copies of Fahrenheit 451" +msgstr[0] "" + +#. ~ Description for {'str': 'Fahrenheit 451', 'str_pl': 'copies of Fahrenheit +#. 451'} +#: lang/json/BOOK_from_json.py +msgid "This is a copy of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"Some joker has gently burnt the exterior edge of this paperback dystopia. " +"It's still perfectly readable." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"\"It was a pleasure to burn. It was a special pleasure to see things eaten," +" to see things blackened and changed.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This 1979 softcover edition of Ray Bradbury's \"Fahrenheit 451\" was once a " +"library book. It still has a light blue checkout card pocketed on the torn " +"back cover. One \"Suzanne Collins\" borrowed it in 1981." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"The red and black paperback novel you hold in your hands is a modern reprint" +" of Ray Bradbury's \"Fahrenheit 451.\"" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "" +"This scifi novel is divided into three parts: \"The Hearth and the " +"Salamander,\" \"The Sieve and the Sand,\", and \"Burning Bright.\"" +msgstr "" + #: lang/json/BOOK_from_json.py msgid "sports novel" msgid_plural "sports novels" @@ -26121,8 +26232,9 @@ msgstr[0] "" #: lang/json/BOOK_from_json.py msgid "" "This book is for the delightful little ring bearer in your wedding. The " -"author depicts the responsibility and the honor in being a ring bearer your " -"little angel will cherish." +"author depicts the responsibility and honor in being a ring bearer. Your " +"little angel will cherish this book as he or she learns how to behave on " +"your perfect day." msgstr "" #: lang/json/BOOK_from_json.py @@ -27260,7 +27372,7 @@ msgstr "" msgid "" "A book of Italian fairy tales translated into English. The cover features " "an orange fairy juggling a lemon, a lime, and a tangerine." -msgstr "" +msgstr "一本將義大利童話的英譯本。封面上有一隻柳橙仙子正在用檸檬、萊姆、橘子雜耍。" #: lang/json/BOOK_from_json.py msgid "A book of fables about people who change into birds." @@ -27343,10 +27455,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "The Adorkable Girl" -msgid_plural "The Adorkable Girls" +msgid_plural "copies of Adorkable" msgstr[0] "" -#. ~ Description for The Adorkable Girl +#. ~ Description for {'str': 'The Adorkable Girl', 'str_pl': 'copies of +#. Adorkable'} #: lang/json/BOOK_from_json.py msgid "" "When a therapist's daughter transfers to a new school, she decides to change" @@ -27356,22 +27469,24 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Becoming Jackson" -msgid_plural "Becoming Jacksons" +msgid_plural "copies of Becoming Jackson" msgstr[0] "" -#. ~ Description for Becoming Jackson +#. ~ Description for {'str': 'Becoming Jackson', 'str_pl': 'copies of Becoming +#. Jackson'} #: lang/json/BOOK_from_json.py msgid "" "When Jackson gains the mystical talent to alter his appearance on command, " -"how will he continue to recognize himself in his own mirror?" +"will he be able to recognize himself in his own mirror?" msgstr "" #: lang/json/BOOK_from_json.py msgid "Nothing Burned" -msgid_plural "Nothing Burneds" +msgid_plural "copies of Nothing Burned" msgstr[0] "" -#. ~ Description for Nothing Burned +#. ~ Description for {'str': 'Nothing Burned', 'str_pl': 'copies of Nothing +#. Burned'} #: lang/json/BOOK_from_json.py msgid "" "A teenage influencer becomes fast friends with someone who may or may not be" @@ -27380,10 +27495,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "High and Low" -msgid_plural "High and Lows" +msgid_plural "copies of High and Low" msgstr[0] "" -#. ~ Description for High and Low +#. ~ Description for {'str': 'High and Low', 'str_pl': 'copies of High and +#. Low'} #: lang/json/BOOK_from_json.py msgid "" "In this work of adolescent fiction, a young gemini discovers that the " @@ -27394,10 +27510,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Fire When You See My Eyes" -msgid_plural "Fire When You See My Eyess" +msgid_plural "copies of Fire When" msgstr[0] "" -#. ~ Description for Fire When You See My Eyes +#. ~ Description for {'str': 'Fire When You See My Eyes', 'str_pl': 'copies of +#. Fire When'} #: lang/json/BOOK_from_json.py msgid "" "In a cataclysmic future, advanced technology gives parents access to video " @@ -27406,10 +27523,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Peanut Butter Bruised" -msgid_plural "Peanut Butter Bruiseds" +msgid_plural "copies of Peanut Butter Bruised" msgstr[0] "" -#. ~ Description for Peanut Butter Bruised +#. ~ Description for {'str': 'Peanut Butter Bruised', 'str_pl': 'copies of +#. Peanut Butter Bruised'} #: lang/json/BOOK_from_json.py msgid "" "In this work of young adult fiction, a woman raised on food stamps falls in " @@ -27419,10 +27537,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Ready When You Are" -msgid_plural "Ready When You Ares" +msgid_plural "copies of Ready When" msgstr[0] "" -#. ~ Description for Ready When You Are +#. ~ Description for {'str': 'Ready When You Are', 'str_pl': 'copies of Ready +#. When'} #: lang/json/BOOK_from_json.py msgid "" "When three teenage girls ditch class to drive cross country together they " @@ -27432,10 +27551,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Study of a Boy" -msgid_plural "Study of a Boys" +msgid_plural "copies of \"Study of a Boy\"" msgstr[0] "" -#. ~ Description for Study of a Boy +#. ~ Description for {'str': 'Study of a Boy', 'str_pl': 'copies of "Study of +#. a Boy"'} #: lang/json/BOOK_from_json.py msgid "" "A high school sophomore's personal journal is stolen and then leaked on " @@ -27445,10 +27565,11 @@ msgstr "" #: lang/json/BOOK_from_json.py msgid "Summer Variables" -msgid_plural "Summer Variabless" +msgid_plural "copies of Summer Variables" msgstr[0] "" -#. ~ Description for Summer Variables +#. ~ Description for {'str': 'Summer Variables', 'str_pl': 'copies of Summer +#. Variables'} #: lang/json/BOOK_from_json.py msgid "" "In this book written primarily for young adults, a woman's modest summer " @@ -27456,6 +27577,58 @@ msgid "" " unsavory elements." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "In a Dark Place" +msgid_plural "copies of Dark Place" +msgstr[0] "" + +#. ~ Description for {'str': 'In a Dark Place', 'str_pl': 'copies of Dark +#. Place'} +#: lang/json/BOOK_from_json.py +msgid "" +"Markia dreams about the future. Theo longs for the past. Together can they" +" find a way to live in the now?" +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Betrayal Takes Two" +msgid_plural "copies of Betrayal" +msgstr[0] "" + +#. ~ Description for {'str': 'Betrayal Takes Two', 'str_pl': 'copies of +#. Betrayal'} +#: lang/json/BOOK_from_json.py +msgid "" +"This is a hard cover book for older teens. The two main characters pull a " +"cruel prank on their classmates, and are brought together both by their " +"frantic efforts to avoid being caught and their shared sense of guilt." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "coming of age novel" +msgid_plural "coming of age novels" +msgstr[0] "成長小說" + +#. ~ Description for {'str': 'coming of age novel'} +#: lang/json/BOOK_from_json.py +msgid "" +"A classic tale about growing up, portraying one young man's funny and " +"poignant experiences with life, love, and sex." +msgstr "一本關於成長的經典寓言故事, 描述一位年輕男子在生活、愛、和性的有趣和淒美的經驗。" + +#: lang/json/BOOK_from_json.py +msgid "Pantheon: The Story of an Iranian Youth" +msgid_plural "copies of Pantheon" +msgstr[0] "" + +#. ~ Description for {'str': 'Pantheon: The Story of an Iranian Youth', +#. 'str_pl': 'copies of Pantheon'} +#: lang/json/BOOK_from_json.py +msgid "" +"A hard cover graphic novel about a young girl living in Iran during the " +"1980's, seeing the world change around her as Iraq invaded her country." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "original copy of Housefly" msgid_plural "original copies of Housefly" @@ -28248,7 +28421,7 @@ msgid "" "Summons a small flame that does not burn you, but you can use it to light " "things on fire. It seems to need you to have some intent to light things on" " fire, because you are able to put it in your pocket with no issue." -msgstr "" +msgstr "召喚一個不會燒傷你的細小火焰,你可以用它去點燃物品。它看來需要你一點專注去點燃東西,因為你能毫無阻礙地把它放進去你的口袋之中。" #: lang/json/BOOK_from_json.py msgid "Scroll of Ice Spike" @@ -29018,6 +29191,44 @@ msgid "" "harmless." msgstr "" +#: lang/json/BOOK_from_json.py +msgid "Scroll of Knock" +msgid_plural "Scrolls of Knock" +msgstr[0] "" + +#. ~ Description for {'str': 'Scroll of Knock', 'str_pl': 'Scrolls of Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open locked wooden doors from a short " +"range away." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Improved Knock" +msgid_plural "Scrolls of Improved Knock" +msgstr[0] "" + +#. ~ Description for {'str': 'Scroll of Improved Knock', 'str_pl': 'Scrolls of +#. Improved Knock'} +#: lang/json/BOOK_from_json.py +msgid "" +"You can channel magical energy to open any locked door from a short range " +"away." +msgstr "" + +#: lang/json/BOOK_from_json.py +msgid "Scroll of Repelling Arc" +msgid_plural "Scrolls of Repelling Arc" +msgstr[0] "" + +#. ~ Description for {'str': 'Scroll of Repelling Arc', 'str_pl': 'Scrolls of +#. Repelling Arc'} +#: lang/json/BOOK_from_json.py +msgid "" +"You manifest an aura of crackling electricity around you to strike attackers" +" with baleful lightning." +msgstr "" + #: lang/json/BOOK_from_json.py msgid "A Technomancer's Guide to Debugging C:DDA" msgid_plural "copies of A Technomancer's Guide to Debugging C:DDA" @@ -29345,34 +29556,6 @@ msgid "" " - F. \"." msgstr "" -#: lang/json/BOOK_from_json.py -msgid "In the Beginning… Was the Command Line" -msgid_plural "copies of In the Beginning… Was the Command Line" -msgstr[0] "" - -#. ~ Description for {'str': 'In the Beginning… Was the Command Line', -#. 'str_pl': 'copies of In the Beginning… Was the Command Line'} -#: lang/json/BOOK_from_json.py -msgid "" -"Humorous 1999 essay by Neal Stephenson comparing computer operating system " -"vendors to car dealerships." -msgstr "" - -#: lang/json/BOOK_from_json.py -msgid "Principles of Compiler Design" -msgid_plural "copies of Principles of Compiler Design" -msgstr[0] "" - -#. ~ Description for {'str': 'Principles of Compiler Design', 'str_pl': -#. 'copies of Principles of Compiler Design'} -#: lang/json/BOOK_from_json.py -msgid "" -"Alfred Aho and Jeffrey Ullman's classic 1977 computer science textbook. " -"Features a cover drawing of a knight wielding an LALR parser generation and " -"syntax directed translation against the metaphorical green dragon, The " -"Complexity of Compiler Design." -msgstr "" - #: lang/json/COMESTIBLE_from_json.py lang/json/ammunition_type_from_json.py msgid "water" msgid_plural "water" @@ -30858,12 +31041,7 @@ msgstr[0] "突變體肉塊" #. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py -msgid "" -"Meat from a heavily mutated animal. It has an unsettling loose and spongy " -"texture, but smells… mostly normal. There are strange tangles and " -"formations in it that don't appear natural at all: bits of bone and hair " -"crusted up inside the muscle, as if trying to form another organism. Still," -" seems digestible at least, if you cook it and remove the worst parts." +msgid "Meat from a heavily mutated animal." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -30875,10 +31053,8 @@ msgstr[0] "突變體肉碎片" #. mutant meat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"A tiny scrap of meat from a heavily mutated animal. It smells a bit odd, " -"and has bits of hair and bone mixed in that seem like they grew inside the " -"muscle itself. Still, seems digestible at least, if you cook it and remove " -"the worst parts." +"A tiny scrap of meat from a heavily mutated animal. It smells unappealing, " +"to say the least." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -30946,10 +31122,7 @@ msgstr[0] "" #. ~ Description for cooked mutant meat #: lang/json/COMESTIBLE_from_json.py -msgid "" -"This is a cooked chunk of meat from a mutated animal. It has an unsettling," -" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" -" the bits of hair and bone out…" +msgid "This is a cooked chunk of meat from a mutated animal." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -30957,6 +31130,14 @@ msgid "cooked scrap of mutant meat" msgid_plural "cooked scraps of mutant meat" msgstr[0] "煮熟的突變體肉碎片" +#. ~ Description for {'str': 'cooked scrap of mutant meat', 'str_pl': 'cooked +#. scraps of mutant meat'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"This is a tiny scrap of cooked mutant meat. It is small enough that it's " +"hard to tell how disgusting it is." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "raw offal" msgid_plural "raw offals" @@ -30983,6 +31164,16 @@ msgid "" "prepared." msgstr "這是經過烹煮的內部器官和腸子。 它含有必需的維生素,但大多數人認為它有點噁心,除非經過精心的調理。" +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant organs" +msgid_plural "mutant organs" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'mutant organs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "These organs came from a giant mutant bug." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "pickled offal" msgid_plural "pickled offal" @@ -31147,6 +31338,16 @@ msgid "" "all cooked out." msgstr "" +#: lang/json/COMESTIBLE_from_json.py +msgid "mutant lungs" +msgid_plural "mutant lungs" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'mutant lungs'} +#: lang/json/COMESTIBLE_from_json.py +msgid "You're pretty sure this is lung tissue." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "raw liver" msgid_plural "raw livers" @@ -31299,8 +31500,9 @@ msgstr[0] "突變體脂肪塊" #. mutant fat'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Freshly butchered fat from a heavily mutated animal. You could eat it raw, " -"but it is better used as an ingredient in other foods or projects." +"Freshly butchered fat from a heavily mutated animal. It smells, if " +"anything, even more disgusting than the rest of the mutant. There are " +"little puddles of unidentified oils dripping from it." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -32554,16 +32756,16 @@ msgid "Water with sugar or honey added. Tastes okay." msgstr "添加了糖或蜂蜜的水。味道也就還好。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea" -msgid_plural "teas" +msgid "black tea" +msgid_plural "black teas" msgstr[0] "" -#. ~ Description for tea +#. ~ Description for black tea #: lang/json/COMESTIBLE_from_json.py msgid "" -"The beverage of gentlemen everywhere, made from applying hot water to leaves" -" of the tea plant /Camellia sinensis/." -msgstr "供全球每位紳士享用的飲品,以熱水沖泡茶樹的葉子製成。" +"The beverage of gentlemen everywhere, made from applying hot water to " +"oxidized leaves of the tea plant /Camellia sinensis/." +msgstr "" #: lang/json/COMESTIBLE_from_json.py msgid "bark tea" @@ -32607,6 +32809,31 @@ msgstr[0] "礦泉水" msgid "Fancy mineral water, so fancy it makes you feel fancy just holding it." msgstr "優質的礦泉水, 太優質了讓你連拿著瓶子都覺得優質。" +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea" +msgid_plural "green teas" +msgstr[0] "" + +#. ~ Description for green tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Made from applying hot water to leaves of the tea plant /Camellia sinensis/." +" Green tea has a lighter, fresher taste than black and is traditionally " +"preferred in Asian cultures." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea" +msgid_plural "fruit teas" +msgstr[0] "" + +#. ~ Description for fruit tea +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A tasty beverage made with herbs and dried fruit from plants other than the " +"tea plant. While colloquially called 'tea', technically it's an infusion." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "sweetened coffee" msgid_plural "sweetened coffees" @@ -34224,7 +34451,7 @@ msgstr[0] "" msgid "" "A small, microwaveable steak & cheese burrito, like those found at gas " "stations." -msgstr "" +msgstr "一份可微波, 包著肉排和起司的小捲餅。就像那些在加油站找到的。" #: lang/json/COMESTIBLE_from_json.py msgid "uncooked TV dinner" @@ -35178,7 +35405,7 @@ msgstr[0] "" msgid "" "A meat pizza, for all the carnivores out there. Chock-full of minced meat " "and heavily seasoned." -msgstr "" +msgstr "一個加肉的披薩, 所有肉食者的最愛。加入了大量的肉類以及濃郁的醬料。" #: lang/json/COMESTIBLE_from_json.py msgid "supreme pizza" @@ -35188,7 +35415,7 @@ msgstr[0] "" #. ~ Description for supreme pizza #: lang/json/COMESTIBLE_from_json.py msgid "A supreme pizza with ALL the toppings." -msgstr "" +msgstr "擁有所有配料的至高無上披薩。" #: lang/json/COMESTIBLE_from_json.py msgid "deluxe scrambled eggs" @@ -37778,7 +38005,6 @@ msgid_plural "pine nuts" msgstr[0] "松子" #. ~ Description for {'str_sp': 'pine nuts'} -#. ~ Description for {'str_sp': 'TEST pine nuts'} #: lang/json/COMESTIBLE_from_json.py msgid "A handful of tasty crunchy nuts from a pinecone." msgstr "從松果剝出的香脆美味松子" @@ -38671,15 +38897,39 @@ msgid "Some nectar. Seeing this item is a bug." msgstr "一些花蜜。看到這個的話就是有 bug。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea bag" -msgid_plural "tea bags" +msgid "black tea bag" +msgid_plural "black tea bags" msgstr[0] "" -#. ~ Description for {'str': 'tea bag'} +#. ~ Description for {'str': 'black tea bag'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"Paper sachet with tea leafs inside. Put it into boiling water to get your " -"cup of tea." +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of black tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea bag" +msgid_plural "green tea bags" +msgstr[0] "" + +#. ~ Description for {'str': 'green tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with tea leaves inside. Put it into boiling water to make a " +"cup of green tea." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "fruit tea bag" +msgid_plural "fruit tea bags" +msgstr[0] "" + +#. ~ Description for {'str': 'fruit tea bag'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"A paper sachet with leaves and fruit parts inside. Put it into boiling " +"water to make a cup of fruit tea." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -38765,14 +39015,11 @@ msgstr[0] "" #. ~ Description for {'str': 'protein ration'} #: lang/json/COMESTIBLE_from_json.py msgid "" -"SoyPelusa ran a highly successful crowdfunding campaign for their signature " -"protein bar, dubbed \"DaiZoom.\" A person can live on one of these bars, " -"three times a day, presumably forever. After backers received their " -"product, a single flaw was found: most consumers found starvation preferable" -" to the flavor. Warehouses of the product went unsold as the company went " -"bankrupt, providing the perfect opportunity for FEMA to scoop them up and " -"stock the evac shelters. Now, you hold a piece of famous crowdfunding " -"history in your hands. How exciting." +"SoyPelusa ran a highly successful crowdfunding campaign for their signature protein bar, dubbed \"DaiZoom.\"\n" +"\n" +"A person can live on one of these bars, three times a day, presumably forever. After backers received their product, a single flaw was found: most consumers found starvation preferable to the flavor. Warehouses of the product went unsold as the company went bankrupt, providing the perfect opportunity for FEMA to scoop them up and stock the evac shelters.\n" +"\n" +"Now, you hold a piece of famous crowdfunding history in your hands. How exciting." msgstr "" #: lang/json/COMESTIBLE_from_json.py @@ -39527,17 +39774,29 @@ msgid "" msgstr "這塊根莖已經成熟且充滿糖分, 稍做處理就能提取出糖。" #: lang/json/COMESTIBLE_from_json.py -msgid "tea leaf" -msgid_plural "tea leaves" -msgstr[0] "茶葉" +msgid "black tea leaf" +msgid_plural "black tea leaves" +msgstr[0] "" -#. ~ Description for {'str': 'tea leaf', 'str_pl': 'tea leaves'} +#. ~ Description for {'str': 'black tea leaf', 'str_pl': 'black tea leaves'} #: lang/json/COMESTIBLE_from_json.py msgid "" "Dried leaves of a tropical plant. You can boil them into tea, or you can " "just eat them raw. They aren't too filling though." msgstr "熱帶植物的乾樹葉。您可以燒開水煮成茶, 或者生吃。他們都不太能填補你的肚子。" +#: lang/json/COMESTIBLE_from_json.py +msgid "green tea leaf" +msgid_plural "green tea leaves" +msgstr[0] "" + +#. ~ Description for {'str': 'green tea leaf', 'str_pl': 'green tea leaves'} +#: lang/json/COMESTIBLE_from_json.py +msgid "" +"Dried leaves of a tropical plant. You can boil them into green tea, or you " +"can just eat them raw. They aren't too filling though." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "tomato" msgid_plural "tomatoes" @@ -42065,6 +42324,66 @@ msgid "" "to bake bread more efficiently than with just flour." msgstr "麵粉與水混合揉成。與僅用麵粉相比,麵團可以更有效率地烘焙麵包。" +#: lang/json/COMESTIBLE_from_json.py +msgid "pineapple stem" +msgid_plural "pineapple stem" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'pineapple stem'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Roots of a pineapple plant, for growing your own." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "melon seeds" +msgid_plural "melon seeds" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'melon seeds'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some melon seeds." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "banana saplings" +msgid_plural "banana saplings" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'banana saplings'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some banana saplings." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "orange vine" +msgid_plural "orange vine" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'orange vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some orange vine. Definitely GMO." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "lemon vine" +msgid_plural "lemon vine" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'lemon vine'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Some lemon vines. Definitely GMO." +msgstr "" + +#: lang/json/COMESTIBLE_from_json.py +msgid "subterraenean coconut" +msgid_plural "subterraenean coconut" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'subterraenean coconut'} +#: lang/json/COMESTIBLE_from_json.py +msgid "Proof that man went too far before the Cataclysm." +msgstr "" + #: lang/json/COMESTIBLE_from_json.py msgid "vampire mutagen" msgid_plural "vampire mutagens" @@ -42422,6 +42741,11 @@ msgid "ankylosaurus egg" msgid_plural "ankylosaurus eggs" msgstr[0] "" +#: lang/json/COMESTIBLE_from_json.py +msgid "apatosaurus egg" +msgid_plural "apatosaurus eggs" +msgstr[0] "" + #: lang/json/COMESTIBLE_from_json.py msgid "ceratosaurus egg" msgid_plural "ceratosaurus eggs" @@ -42727,7 +43051,7 @@ msgid "scream mushroom" msgid_plural "scream mushrooms" msgstr[0] "" -#. ~ Description for scream mushroom +#. ~ Description for {'str': 'scream mushroom'} #: lang/json/COMESTIBLE_from_json.py msgid "" "The mushrooms harvested from a dead shrieker. Could be used in potions." @@ -42907,104 +43231,6 @@ msgid "" "see this? We will not permit you to join us while we are modded out." msgstr "" -#: lang/json/COMESTIBLE_from_json.py -msgid "TEST pine nuts" -msgid_plural "TEST pine nuts" -msgstr[0] "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test bitter almonds" -msgid_plural "test bitter almonds" -msgstr[0] "" - -#. ~ Description for {'str_sp': 'test bitter almonds'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A variety of almonds with traces of hydrocyanic acid, potentially toxic when" -" eaten raw." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test hallucinogenic nutmeg" -msgid_plural "test hallucinogenic nutmeg" -msgstr[0] "" - -#. ~ Description for {'str_sp': 'test hallucinogenic nutmeg'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"With high levels of the psychoactive myristicin, high doses of nutmeg can " -"cause hallucinations and euphoria, along with a lot of nasty side effects." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test apple" -msgid_plural "test apples" -msgstr[0] "" - -#. ~ Description for {'str': 'test apple'} -#: lang/json/COMESTIBLE_from_json.py -msgid "Test apple. May contain worms, but tastes delicious!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test liquid" -msgid_plural "test liquid" -msgstr[0] "" - -#. ~ Description for {'str_sp': 'test liquid'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"No clue what it's made of, but it's definitely liquid. Only for testing, do" -" not drink!" -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "tennis ball wine must" -msgid_plural "tennis ball wine musts" -msgstr[0] "" - -#. ~ Description for tennis ball wine must -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Unfermented tennis ball wine. A rubbery, boiled juice made from mashed " -"tennis balls." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test tennis ball wine" -msgid_plural "test tennis ball wine" -msgstr[0] "" - -#. ~ Description for {'str_sp': 'test tennis ball wine'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Cheap booze made from fermented tennis ball juice. Tastes just like it " -"sounds." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test chewing gum" -msgid_plural "test chewing gum" -msgstr[0] "" - -#. ~ Description for {'str_sp': 'test chewing gum'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"Curiously stimulating and thirst-quenching blueberry-flavored chewing gum." -msgstr "" - -#: lang/json/COMESTIBLE_from_json.py -msgid "test mutated thumb" -msgid_plural "test mutated thumbs" -msgstr[0] "" - -#. ~ Description for {'str': 'test mutated thumb'} -#: lang/json/COMESTIBLE_from_json.py -msgid "" -"A misshapen human thumb. Eating this would be incredibly disgusting and " -"probably cause you to mutate." -msgstr "" - #: lang/json/CONTAINER_from_json.py msgid "small metal tank" msgid_plural "small metal tanks" @@ -43799,18 +44025,6 @@ msgstr[0] "鋁罐" msgid "An aluminum can, like what soda comes in." msgstr "一個鋁製罐子, 通常裝過了可樂之類的東西。" -#: lang/json/GENERIC_from_json.py -msgid "opened aluminum can" -msgid_plural "opened aluminum cans" -msgstr[0] "打開的鋁罐" - -#. ~ Description for {'str': 'opened aluminum can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"An aluminum can, like what soda comes in. This one is opened and can't be " -"easily sealed." -msgstr "一個鋁製罐子, 通常裝過了可樂之類的東西。這罐已被開啟而且難以封密。" - #: lang/json/GENERIC_from_json.py msgid "paper carton" msgid_plural "paper cartons" @@ -43819,22 +44033,10 @@ msgstr[0] "" #. ~ Description for {'str': 'paper carton'} #: lang/json/GENERIC_from_json.py msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." +"A half gallon carton constructed of a paper, aluminum, and plastic laminate." " It has a threaded cap for easy resealing." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "opened paper carton" -msgid_plural "opened paper cartons" -msgstr[0] "" - -#. ~ Description for {'str': 'opened paper carton'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A half gallon carton constructed of a paper, aluminum and plastic laminate." -" This one is open and its contents will spoil." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "vacuum-packed bag" msgid_plural "vacuum-packed bags" @@ -43855,18 +44057,6 @@ msgstr[0] "" msgid "A small tin can, like what tuna comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "small opened tin can" -msgid_plural "small opened tin cans" -msgstr[0] "" - -#. ~ Description for {'str': 'small opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A small tin can, like what tuna comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "medium tin can" msgid_plural "medium tin cans" @@ -43877,18 +44067,6 @@ msgstr[0] "" msgid "A medium tin can, like what soup comes in." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "medium opened tin can" -msgid_plural "medium opened tin cans" -msgstr[0] "" - -#. ~ Description for {'str': 'medium opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A medium tin can, like what soup comes in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "plastic canteen" msgid_plural "plastic canteens" @@ -43957,16 +44135,6 @@ msgstr[0] "塑膠杯" msgid "A small, vacuum formed cup." msgstr "一個真空成型的小杯。" -#: lang/json/GENERIC_from_json.py -msgid "opened plastic cup" -msgid_plural "opened plastic cups" -msgstr[0] "打開的塑膠杯" - -#. ~ Description for {'str': 'opened plastic cup'} -#: lang/json/GENERIC_from_json.py -msgid "A small, vacuum formed cup, essentially trash." -msgstr "一個真空成型的小杯, 基本上是垃圾。" - #: lang/json/GENERIC_from_json.py msgid "glass flask" msgid_plural "glass flasks" @@ -44121,7 +44289,6 @@ msgid_plural "gallon jugs" msgstr[0] "加侖壺" #. ~ Description for {'str': 'gallon jug'} -#. ~ Description for TEST gallon jug #: lang/json/GENERIC_from_json.py msgid "A standard plastic jug used for milk and household cleaning chemicals." msgstr "用在裝牛奶或家用清潔化學藥品的標準塑膠罐。" @@ -44213,7 +44380,6 @@ msgid_plural "small waterskins" msgstr[0] "小水袋" #. ~ Description for {'str': 'small waterskin'} -#. ~ Description for TEST small waterskin #: lang/json/GENERIC_from_json.py msgid "" "A small watertight leather bag with a carrying strap, can hold 1.5 liters of" @@ -44332,18 +44498,6 @@ msgid "" "food." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "large opened tin can" -msgid_plural "large opened tin cans" -msgstr[0] "" - -#. ~ Description for {'str': 'large opened tin can'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A large tin can, like what beans come in. This one is opened and can't be " -"easily sealed." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "survival kit box" msgid_plural "survival kit boxes" @@ -44378,7 +44532,7 @@ msgstr[0] "" msgid "" "This electrical component is designed to produce microwaves, for use in your" " microwave." -msgstr "" +msgstr "這個電子零件是設計來產生微波的,能用在你的微波爐上。" #: lang/json/GENERIC_from_json.py msgid "explosively pumped flux compression generator" @@ -44807,6 +44961,32 @@ msgstr[0] "甲殼塊" msgid "A piece of an insect's exoskeleton. It is light and very durable." msgstr "一件昆蟲的外骨骼, 輕又耐用。" +#: lang/json/GENERIC_from_json.py +msgid "strand of endochitin" +msgid_plural "strands of endochitin" +msgstr[0] "" + +#. ~ Description for {'str': 'strand of endochitin', 'str_pl': 'strands of +#. endochitin'} +#: lang/json/GENERIC_from_json.py +msgid "A piece of an insect's endoskeleton." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "cluster of gas sacs" +msgid_plural "clusters of gas sacs" +msgstr[0] "" + +#. ~ Description for {'str': 'cluster of gas sacs', 'str_pl': 'clusters of gas +#. sacs'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This is a cluster of membranous bubbles, each about the size of a grape, " +"retrieved from inside a mutant insect. They float like tiny helium " +"balloons, and are likely full of a lighter-than-air gas helping the bug to " +"fly." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "set of 100 ceramic disk" msgid_plural "ceramic disks" @@ -45952,8 +46132,8 @@ msgid "lotus flower" msgid_plural "lotus flowers" msgstr[0] "" -#. ~ Description for lotus #. ~ Description for {'str': 'lotus flower'} +#. ~ Description for lotus #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A lovely flower that grows on the surface of bodies of freshwater. " @@ -47303,6 +47483,16 @@ msgid "" "Unusable as a weapon on its own without the necessary parts." msgstr "這個雷射砲是從 TX-5LR 地獄犬雷射砲塔拆解下來的。因為缺少其必要的元件, 無法作為武器來使用。" +#: lang/json/GENERIC_from_json.py +msgid "bone armor kit" +msgid_plural "bone armor kits" +msgstr[0] "骨製裝甲板" + +#. ~ Description for {'str': 'bone armor kit'} +#: lang/json/GENERIC_from_json.py +msgid "Bone plating made for a vehicle." +msgstr "為車輛而設計的骨板。" + #: lang/json/GENERIC_from_json.py msgid "module template" msgid_plural "module templates" @@ -49873,7 +50063,7 @@ msgstr[0] "塑膠叉子" msgid "" "A plastic disposable fork. Great for picnic lunches in the post apocalyptic" " wasteland." -msgstr "" +msgstr "一把塑膠製的一次性叉子。最適合在大災變後的廢土上野餐了。" #: lang/json/GENERIC_from_json.py msgid "spoon" @@ -49893,7 +50083,7 @@ msgstr[0] "塑膠湯匙" #. ~ Description for {'str': 'plastic spoon'} #: lang/json/GENERIC_from_json.py msgid "A plastic disposable spoon. Easier to bend than the metal variety." -msgstr "" +msgstr "一把塑膠製的一次性湯匙。比金屬做的還要好折彎。" #: lang/json/GENERIC_from_json.py msgid "kiddie spoon" @@ -49911,7 +50101,7 @@ msgstr "" #: lang/json/GENERIC_from_json.py msgid "This spoon is styled to look like a bulldozer." -msgstr "" +msgstr "這個湯匙的造型看起來像是台推土機。" #: lang/json/GENERIC_from_json.py msgid "" @@ -49940,7 +50130,7 @@ msgstr[0] "奶油刀" msgid "" "A dull knife, absolutely worthless in combat. Excellent for spreading soft " "things on bread." -msgstr "" +msgstr "除了塗奶油外, 完全沒有戰鬥價值。在把糊狀的東西塗在麵包上的功能特別突出。" #: lang/json/GENERIC_from_json.py msgid "plastic knife" @@ -50021,7 +50211,7 @@ msgstr "" msgid "" "This bottle opener is emblazoned with a logo for an HVAC contracting " "company." -msgstr "" +msgstr "這個開瓶器上面有暖通空調承包公司的商標。" #: lang/json/GENERIC_from_json.py msgid "This bottle opener reads 'Corporate Team Building Exercise 1999'." @@ -50071,7 +50261,7 @@ msgstr[0] "一雙筷子" msgid "" "One of the most popular eating utensils in the world. Does double duty as a" " way of dealing with especially fragile vampires." -msgstr "" +msgstr "世界上最有名的餐飲用具之一。還能拿來對付弱不禁風的吸血鬼。" #: lang/json/GENERIC_from_json.py msgid "ladle" @@ -51178,7 +51368,7 @@ msgstr[0] "琉森鎚" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with a spiked hammer head, a spike, and a hook " -"attached to a long stick." +"attached to a beefy wooden pole." msgstr "" #. ~ Description for {'str': 'lucerne hammer'} @@ -51520,7 +51710,6 @@ msgid_plural "pointy sticks" msgstr[0] "尖木棍" #. ~ Description for {'str': 'pointy stick'} -#. ~ Description for {'str': 'test pointy stick'} #: lang/json/GENERIC_from_json.py msgid "A simple wood pole with one end sharpened." msgstr "一隻簡單的木棍, 前端是鋒利的。" @@ -51610,15 +51799,15 @@ msgstr[0] "長戟" #: lang/json/GENERIC_from_json.py msgid "" "This is a versatile polearm with an axe blade, a spike, and other fun things" -" attached to a long stick." -msgstr "這是把多功能的長柄武器, 長棍上有著斧刃、尖刺和其他 \"有趣\" 的事物。" +" attached to a long sturdy stick." +msgstr "" #. ~ Description for {'str': 'halberd'} #: lang/json/GENERIC_from_json.py msgid "" "This is a dull, cheaply made replica of a polearm with an axe blade, a " -"spike, and other fun things attached to a long stick." -msgstr "這是把長柄武器, 長棍上有著斧刃、尖刺和其他 \"有趣\" 的事物。它是鈍的廉價複製品。" +"spike, and other fun things attached to a thick pole." +msgstr "" #: lang/json/GENERIC_from_json.py msgid "glaive" @@ -52179,18 +52368,6 @@ msgid "" "from India designed to be concealed under and against the palm." msgstr "也叫bagh nakha或鐵爪, 這是一種來自印度有著小爪狀刀刃設計的武器, 能被藏在手中。" -#: lang/json/GENERIC_from_json.py -msgid "cestus" -msgid_plural "cestuses" -msgstr[0] "金屬拳套" - -#. ~ Description for {'str': 'cestus', 'str_pl': 'cestuses'} -#: lang/json/GENERIC_from_json.py -msgid "" -"A leather hand and arm wrap incorporating metal plates over the knuckles to " -"improve punching power and defence." -msgstr "" - #: lang/json/GENERIC_from_json.py msgid "pair of brass knuckles" msgid_plural "pairs of brass knuckles" @@ -52420,7 +52597,6 @@ msgid_plural "pipes" msgstr[0] "鋼管" #. ~ Description for {'str': 'pipe'} -#. ~ Description for TEST pipe #: lang/json/GENERIC_from_json.py msgid "" "A steel pipe, makes a good melee weapon. Useful in a few crafting recipes." @@ -52611,7 +52787,12 @@ msgid "" "been used for commercial wrapping or for weather-sealing a home." msgstr "這是一大張厚重的軟塑膠,可用於商業包裝或家用防水。" -#. ~ Description for plastic sheet +#: lang/json/GENERIC_from_json.py +msgid "rigid plastic sheet" +msgid_plural "rigid plastic sheets" +msgstr[0] "" + +#. ~ Description for rigid plastic sheet #: lang/json/GENERIC_from_json.py msgid "" "A large, rigid sheet of translucent plastic, useful for all manner of " @@ -53479,9 +53660,9 @@ msgstr[0] "粗製長柄刀" #. ~ Description for {'str': 'makeshift glaive'} #: lang/json/GENERIC_from_json.py msgid "" -"This is a large blade attached to a long stick. It could do a considerable " -"amount of damage." -msgstr "將大刀刃連接在一根長棍子上。它能造成可觀的傷害。" +"This is a large blade attached to a stout section of tree branch. It could " +"do a considerable amount of damage." +msgstr "" #: lang/json/GENERIC_from_json.py msgid "mind splicer kit" @@ -53637,6 +53818,20 @@ msgstr[0] "" msgid "A stapler for fastening sheets of paper together." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "hole puncher" +msgid_plural "hole punchers" +msgstr[0] "" + +#. ~ Description for {'str': 'hole puncher'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This metal tool can help you punch a single hole in a piece of paper. I " +"mean, you could do more if you wanted, but you'd have to do them one at a " +"time. Or, if you really wanted more holes with one punch, I suppose you " +"could fold the paper… This is a one cylinder hole puncher." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "pen" msgid_plural "pens" @@ -53879,6 +54074,18 @@ msgid "" "until it floats. Then attach oars or a motor to get the boat to move." msgstr "讓船漂浮的木板。將船體安裝到載具中直到它漂浮。然後附上槳或馬達以使船移動。" +#: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py +msgid "raft boat hull" +msgid_plural "raft boat hulls" +msgstr[0] "" + +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Logs tied together to make a vehicle float. Add boat hulls to a vehicle " +"until it floats. Then attach oars or a motor to get the boat to move." +msgstr "" + #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "plastic boat hull" msgid_plural "plastic boat hulls" @@ -54737,7 +54944,6 @@ msgid_plural "sheet metal" msgstr[0] "" #. ~ Description for {'str_sp': 'sheet metal'} -#. ~ Description for TEST sheet metal #: lang/json/GENERIC_from_json.py msgid "A thin sheet of metal." msgstr "一片薄金屬板。" @@ -54846,16 +55052,6 @@ msgstr[0] "生物矽化甲殼裝甲套件" msgid "Durable silica-coated chitin plating made for a vehicle." msgstr "用於車輛的耐用二氧化矽塗層幾丁質鍍層。" -#: lang/json/GENERIC_from_json.py -msgid "bone armor kit" -msgid_plural "bone armor kits" -msgstr[0] "骨製裝甲板" - -#. ~ Description for {'str': 'bone armor kit'} -#: lang/json/GENERIC_from_json.py -msgid "Bone plating made for a vehicle." -msgstr "為車輛而設計的骨板。" - #: lang/json/GENERIC_from_json.py lang/json/vehicle_part_from_json.py msgid "shredder" msgid_plural "shredders" @@ -55111,8 +55307,8 @@ msgid "workbench" msgid_plural "workbenches" msgstr[0] "" -#. ~ Description for workbench #. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'} +#. ~ Description for workbench #: lang/json/GENERIC_from_json.py lang/json/furniture_from_json.py msgid "" "A sturdy workbench built out of metal. It is perfect for crafting large and" @@ -55848,6 +56044,17 @@ msgstr[0] "" msgid "It has given you an answer, but you are yet to ask anything." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "woven metamaterial sheet" +msgid_plural "woven metamaterial sheets" +msgstr[0] "" + +#. ~ Description for {'str': 'woven metamaterial sheet'} +#: lang/json/GENERIC_from_json.py +msgid "" +"An intricately spun and carefully engineered sheet of iridescent fibers." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "nanowire battery" msgid_plural "nanowire batteries" @@ -55934,7 +56141,19 @@ msgstr[0] "" #. ~ Description for {'str': 'super conductive electromagnet'} #: lang/json/GENERIC_from_json.py -msgid "A powerful electromagnet made from a room temperature superconductor ." +msgid "A powerful electromagnet made from a room temperature superconductor." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "ferrofluid dynamo" +msgid_plural "ferrofluid dynamos" +msgstr[0] "" + +#. ~ Description for {'str': 'ferrofluid dynamo'} +#: lang/json/GENERIC_from_json.py +msgid "" +"Black metallic fluid, harmonically flowing from one fractal shape to the " +"next." msgstr "" #: lang/json/GENERIC_from_json.py @@ -56509,6 +56728,16 @@ msgid "" "battles is bookmarked." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Stormguard Warrior" +msgid_plural "Stormguard Warrior" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Stormguard Warrior'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Iron Heart discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "The Life and Work of Tiger Sauer" msgid_plural "The Life and Work of Tiger Sauer" @@ -56521,6 +56750,61 @@ msgid "" "art." msgstr "" +#: lang/json/GENERIC_from_json.py +msgid "Pocket Monster Encyclopedia" +msgid_plural "Pocket Monster Encyclopedia" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Pocket Monster Encyclopedia'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This encyclopedia contains a detailed listing of the strengths and " +"techniques of various fictional monsters and how to apply them the in a real" +" fight." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Distant Horizon" +msgid_plural "Distant Horizon" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Distant Horizon'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Setting Sun discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Jedi Holocrons: Form I" +msgid_plural "Jedi Holocrons: Form I" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Jedi Holocrons: Form I'} +#: lang/json/GENERIC_from_json.py +msgid "" +"This device contains the teachings of the first form of Jedi lightsaber " +"combat: Shii-Cho." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Shards of Granite" +msgid_plural "Shards of Granite" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Shards of Granite'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Stone Dragon discipline." +msgstr "" + +#: lang/json/GENERIC_from_json.py +msgid "Reaping Talons" +msgid_plural "Reaping Talons" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Reaping Talons'} +#: lang/json/GENERIC_from_json.py +msgid "This book contains the teaching of the Tiger Claw discipline." +msgstr "" + #: lang/json/GENERIC_from_json.py msgid "stone shell" msgid_plural "stone shells" @@ -56541,9 +56825,9 @@ msgstr[0] "發光粉" #. ~ Description for glow dust #: lang/json/GENERIC_from_json.py msgid "" -"The powdered remains of a will-o-wisps's phsyical form. It seems to still " +"The powdered remains of a will-o-wisps's physical form. It seems to still " "possess an otherworldly glow." -msgstr "鬼火物質型態的粉狀遺骸。它依然散發出異界的光芒。" +msgstr "" #: lang/json/GENERIC_from_json.py msgid "magical reading light" @@ -56657,7 +56941,7 @@ msgstr[0] "" #. ~ Description for mana dust #: lang/json/GENERIC_from_json.py msgid "" -"Crystallized mana in powdered form. It faintly pulses with arcane energy." +"Crystalized mana in powdered form. It faintly pulses with arcane energy." msgstr "" #: lang/json/GENERIC_from_json.py @@ -57900,126 +58184,6 @@ msgid "" "much more expensive." msgstr "" -#: lang/json/GENERIC_from_json.py -msgid "TEST plank" -msgid_plural "TEST planks" -msgstr[0] "" - -#. ~ Description for TEST plank -#: lang/json/GENERIC_from_json.py -msgid "" -"A narrow, thick plank of wood, like a 2 by 4 or similar piece of dimensional" -" lumber. Makes a decent melee weapon, and can be used for all kinds of " -"construction." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST pipe" -msgid_plural "TEST pipes" -msgstr[0] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST sheet metal" -msgid_plural "TEST sheet metals" -msgstr[0] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST gallon jug" -msgid_plural "TEST gallon jugs" -msgstr[0] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST small waterskin" -msgid_plural "TEST small waterskins" -msgstr[0] "" - -#: lang/json/GENERIC_from_json.py -msgid "test balloon" -msgid_plural "test balloons" -msgstr[0] "" - -#. ~ Description for {'str': 'test balloon'} -#: lang/json/GENERIC_from_json.py -msgid "Stretchy, watertight, and airtight - the perfect trial balloon." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test pointy stick" -msgid_plural "test pointy sticks" -msgstr[0] "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST clumsy sword" -msgid_plural "TEST clumsy swords" -msgstr[0] "" - -#. ~ Description for TEST clumsy sword -#: lang/json/GENERIC_from_json.py -msgid "A poorly balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST normal sword" -msgid_plural "TEST normal swords" -msgstr[0] "" - -#. ~ Description for TEST normal sword -#: lang/json/GENERIC_from_json.py -msgid "A sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "TEST balanced sword" -msgid_plural "TEST balanced swords" -msgstr[0] "" - -#. ~ Description for TEST balanced sword -#: lang/json/GENERIC_from_json.py -msgid "A well-balanced sword for test purposes" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test box" -msgid_plural "test boxs" -msgstr[0] "" - -#. ~ Description for {'str': 'test box'} -#: lang/json/GENERIC_from_json.py -msgid "A simple 1-liter cardboard box of deliberately undefined proportions." -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 14 cm rod" -msgid_plural "test 14 cm rods" -msgstr[0] "" - -#. ~ Description for test 14 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 14 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test 15 cm rod" -msgid_plural "test 15 cm rods" -msgstr[0] "" - -#. ~ Description for test 15 cm rod -#: lang/json/GENERIC_from_json.py -msgid "A thin rod exactly 15 cm in length" -msgstr "" - -#: lang/json/GENERIC_from_json.py -msgid "test nuclear carafe" -msgid_plural "test nuclear carafes" -msgstr[0] "" - -#. ~ Description for {'str': 'test nuclear carafe'} -#: lang/json/GENERIC_from_json.py -msgid "" -"This is a test coffee carafe designed to keep atomic beverages extra " -"radioactive. It leaks radiation all the time." -msgstr "" - #: lang/json/ITEM_CATEGORY_from_json.py msgid "GUNS" msgstr "槍械" @@ -61089,28 +61253,6 @@ msgid "" "tips." msgstr "這種小型法力水晶,專門設計用於連接魔杖的尖端。" -#: lang/json/MAGAZINE_from_json.py -msgid "test disposable battery" -msgid_plural "test disposable batteries" -msgstr[0] "" - -#. ~ Description for {'str': 'test disposable battery', 'str_pl': 'test -#. disposable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test disposable battery." -msgstr "" - -#: lang/json/MAGAZINE_from_json.py -msgid "test rechargeable battery" -msgid_plural "test rechargeable batteries" -msgstr[0] "" - -#. ~ Description for {'str': 'test rechargeable battery', 'str_pl': 'test -#. rechargeable batteries'} -#: lang/json/MAGAZINE_from_json.py -msgid "This is a test battery that may be recharged." -msgstr "" - #: lang/json/MOD_INFO_from_json.py src/color.cpp src/color.cpp msgid "default" msgstr "預設" @@ -61126,7 +61268,10 @@ msgstr "餘波" #. ~ Description for Aftershock #: lang/json/MOD_INFO_from_json.py -msgid "Drifts the game away from realism and more towards sci-fi." +msgid "" +"Drifts the game away from realism and more towards sci-fi. Long term goal " +"of being a significantly different experience that remains compatible with " +"other mods." msgstr "" #: lang/json/MOD_INFO_from_json.py @@ -61168,8 +61313,9 @@ msgstr "" #. ~ Description for Dark Skies Above #: lang/json/MOD_INFO_from_json.py msgid "" -"A total conversion that shifts the Cataclysm towards an XCOM 2 style alien " -"occupation. Use other mods at your own risk!" +"A total conversion that shifts the Cataclysm towards an alien occupation " +"survival scenario. THIS MOD WILL BREAK INTENDED FUNCTIONALITY OF OTHER " +"MODS! USE OTHER MODS AT YOUR OWN RISK." msgstr "" #: lang/json/MOD_INFO_from_json.py @@ -61372,16 +61518,6 @@ msgstr "技能提高屬性" msgid "Allows stats to raise via skill progression." msgstr "屬性會隨技能發展提昇。" -#: lang/json/MOD_INFO_from_json.py -msgid "TESTING DATA" -msgstr "" - -#. ~ Description for TESTING DATA -#: lang/json/MOD_INFO_from_json.py -msgid "" -"Adds mockup items, recipes, and other content for use by automated tests." -msgstr "" - #: lang/json/MOD_INFO_from_json.py msgid "Urban Development" msgstr "城市發展" @@ -63174,6 +63310,16 @@ msgid "" "about rapidly and the mouths form a chorus of groaning screams." msgstr "許多腐爛的人類和動物融合成噁心的形體, 上面的所有頭顱會快速的眨眼而嘴巴會發出尖叫與呻吟。" +#: lang/json/MONSTER_from_json.py src/mtype.cpp +msgid "human" +msgid_plural "humans" +msgstr[0] "人類" + +#. ~ Description for {'str': 'human'} +#: lang/json/MONSTER_from_json.py +msgid "Place holder for human corpses. If you see this, it's a bug." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "bat" msgid_plural "bats" @@ -65111,6 +65257,18 @@ msgstr "" msgid "Lightning arcs from the leech stalk!" msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "signal tree" +msgid_plural "signal trees" +msgstr[0] "" + +#. ~ Description for signal tree +#: lang/json/MONSTER_from_json.py +msgid "" +"A trunk reaches tall into the sky, its topmost branches glowing with yellow " +"light. A low drum periodically shakes its vicinities." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "leech pod cluster" msgid_plural "leech pod clusters" @@ -65663,6 +65821,86 @@ msgid "" "looking for patient to assist." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "spearcat hunter" +msgid_plural "spearcat hunters" +msgstr[0] "" + +#. ~ Description for {'str': 'spearcat hunter'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This cougar's eyes ooze with dark, oily fluid, and its fur is torn, " +"revealing deep festering wounds. Its claws and teeth are unnaturally long " +"and sharpened into dangerous looking spikes" +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "skeletal zombear" +msgid_plural "skeletal zombears" +msgstr[0] "" + +#. ~ Description for {'str': 'skeletal zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A monstrous overgrowth of ossified tissue has replaced this zombear's " +"rotting skin with an organic armor of dense bone. Large clumps of black goo" +" seep from its joints as it shambles aimlessly, with sickening crackling " +"sounds filling the air around it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "shadowcat" +msgid_plural "shadowcats" +msgstr[0] "" + +#. ~ Description for {'str': 'shadowcat'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this creature, as if light itself were too " +"repulsed to touch it. All you can make out is the outline of a large, " +"shambling cat." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "acidic zombear" +msgid_plural "acidic zombears" +msgstr[0] "" + +#. ~ Description for {'str': 'acidic zombear'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A sickly-looking dead dead black bear with patchy fur. Its skin looks " +"especially thin, with a sticky, yellow fluid flowing through the clearly " +"visible veins." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "antlered hammer" +msgid_plural "antlered hammers" +msgstr[0] "" + +#. ~ Description for {'str': 'antlered hammer'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This once great moose's eyes ooze with dark, oily fluid, and its flesh is " +"torn and scarred. Its entire body bulges with distended muscles and " +"swollen, festering wounds." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "thorny bear shambler" +msgid_plural "thorny bear shamblers" +msgstr[0] "" + +#. ~ Description for {'str': 'thorny bear shambler'} +#: lang/json/MONSTER_from_json.py +msgid "" +"What once was a great moose is now covered with long, matted hair twisted " +"with thorny vines that wrap together and then twist back into the body. " +"Long interlocking thorns wrap the antlers, dripping with a mysterious " +"silvery liquid." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "jawed terror" msgid_plural "jawed terrors" @@ -68093,6 +68331,18 @@ msgid "" " emerge." msgstr "一支像是超大隻的犀牛樣貌的恐龍, 有著許多頸盾緣骨突與三隻大角。" +#: lang/json/MONSTER_from_json.py +msgid "Triceratops bio-operator" +msgid_plural "Triceratops bio-operator" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Triceratops bio-operator'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive three-horned four-legged dinosaur dotted with crackling bionics. " +"The horns glow menacingly." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Stegosaurus" msgid_plural "Stegosaurus" @@ -68116,6 +68366,18 @@ msgid "" "massive spiked club of bone." msgstr "這種恐龍看起來像一隻巨大的史前犰狳。牠有根巨型的尾巴棒槌。" +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus" +msgid_plural "Apatosaurus" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Apatosaurus'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur with a long, whip-like tail. The" +" head is upright and the neck looks like it would make a good strong club." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Ceratosaurus" msgid_plural "Ceratosaurus" @@ -68314,6 +68576,108 @@ msgid "magenta and green hatchling" msgid_plural "magenta and green hatchlings" msgstr[0] "" +#: lang/json/MONSTER_from_json.py +msgid "fungal Spinosaurus zombie" +msgid_plural "fungal Spinosaurus zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'fungal Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once an enormous crocodile-headed carnivorous dinosaur with a sail on its " +"back, fungal tendrils now sprout from its mouth, eyes, and other orifices, " +"holding together an enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Z-Rex" +msgid_plural "fungal Z-Rexes" +msgstr[0] "" + +#. ~ Description for {'str': 'fungal Z-Rex', 'str_pl': 'fungal Z-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once monarch of the dinosaurs, fungal tendrils now sprout from its mouth, " +"eyes, and other orifices, holding together an enormous shambling mass of " +"mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "fungal Deinonychus zombie" +msgid_plural "fungal Deinonychus zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'fungal Deinonychus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Once a medium-sized feathered carnivorous dinosaur, fungal tendrils now " +"sprout from its mouth, eyes, and other orifices, holding together an " +"enormous shambling mass of mold-covered flesh." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Gallimimus zombie" +msgid_plural "Gallimimus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Gallimimus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Pachy zombie" +msgid_plural "Pachy zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Pachy zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium-sized bipedal dinosaur covered with " +"tattered feathers and black putrid liquid. It looks like a reptilian " +"ostrich with a round hard-looking domed head." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Campto zombie" +msgid_plural "Campto zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Campto zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a large feathered bipedal dinosaur with strong legs," +" broad shoulders and a pointed beak. Its tattered feathers are stained with" +" black, sticky liquid." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus zombie" +msgid_plural "Spinosaurus zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'Spinosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Enormous putrid dinosaur corpse with a ferocious crocodile-like head, oozing" +" black eyes, and a tattered sail on its back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Spinosaurus shady zombie" +msgid_plural "Spinosaurus shady zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'Spinosaurus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with a tattered sail. The head is long and narrow " +"with a V-shaped snout." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "Z-Rex" msgid_plural "Z-Rexes" @@ -68325,11 +68689,123 @@ msgid "Massive piles of ragged, stinking flesh lifting enormous teeth." msgstr "" #: lang/json/MONSTER_from_json.py -msgid "Z-Deinonychus" -msgid_plural "Z-Deinonychus" +msgid "Shady Z-Rex" +msgid_plural "Shady Z-Rexs" +msgstr[0] "" + +#. ~ Description for {'str': 'Shady Z-Rex'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" huge bipedal dinosaur with feathery edges. The head looks big, lots of big" +" teeth would fit in it." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "S-Rex" +msgid_plural "S-Rexes" +msgstr[0] "" + +#. ~ Description for {'str': 'S-Rex', 'str_pl': 'S-Rexes'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Monstrous columns of dense bone lifting enormous sharp pointed teeth " +"dripping with black goo." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Albertosaurus zombie" +msgid_plural "Albertosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Albertosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive jaws drooling black liquid lifted over grasping claws by a huge " +"shuffling dinosaur corpse." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Triceraterror" +msgid_plural "Triceraterror" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Triceraterror'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A massive shambling rhino-like dinosaur corpse with a bony crest from which " +"three wicked looking horns emerge. Its black eyes ooze like tears." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Stegosaurus zombie" +msgid_plural "Stegosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Stegosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A large shambling quadruped dinosaur corpse dragging with the weight of the " +"plates on its back, waving a much livelier looking spiked tail." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Ankylosaurus zombie" +msgid_plural "Ankylosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Ankylosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of what looks like a giant armadillo with peeling " +"armored plates and black, glistening eyes. Its tail ends in a massive " +"spiked club of bone." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Apatosaurus zombie" +msgid_plural "Apatosaurus zombie" msgstr[0] "" -#. ~ Description for {'str_sp': 'Z-Deinonychus'} +#. ~ Description for {'str_sp': 'Apatosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"Massive, long-necked, four-legged dinosaur corpse with a long, whip-like " +"tail. The head is upright and the neck looks like it would still make a " +"good strong club." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Zombie dragon" +msgid_plural "Zombie dragon" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Zombie dragon'} +#: lang/json/MONSTER_from_json.py +msgid "" +"This zombie is enormous, scaly, studded with bony spikes, and it moves with " +"horrible speed. Its colorful horns are worn and wet with filth and its " +"bright scales and bone spikes have taken a beating." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Allosaurus zombie" +msgid_plural "Allosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Allosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shambling corpse of a large predatory bipedal dinosaur, with tiger-like " +"stripes on its broad, scaled back." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus zombie" +msgid_plural "Deinonychus zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'Deinonychus zombie'} #: lang/json/MONSTER_from_json.py msgid "" "The shuffling corpse of a medium-sized bipedal dinosaur covered with " @@ -68337,6 +68813,68 @@ msgid "" "sickle-like claw." msgstr "" +#: lang/json/MONSTER_from_json.py +msgid "Deinonychus shady zombie" +msgid_plural "Deinonychus shady zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'Deinonychus shady zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"An uncanny shadow envelops this dinosaur. You can make out the outline of a" +" medium-sized bipedal dinosaur with feathery edges. Both feet brandish a " +"large sickle-like claw." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Utahraptor zombie" +msgid_plural "Utahraptor zombies" +msgstr[0] "" + +#. ~ Description for {'str': 'Utahraptor zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The swaying, hopping corpse of a large bipedal dinosaur with feathered arms," +" a long tail, and long sharp scythe-like claws." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Parasaurolophus zombie" +msgid_plural "Parasaurolophus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Parasaurolophus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"A huge mottled dinosaur with a blunt head crest, dead and walking, eyes " +"vacant and swollen." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dimorphodon zombie" +msgid_plural "Dimorphodon zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Dimorphodon zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The raggedly flying corpse of a feathered reptile over three feet long, " +"with short wings and a big colorful beak." +msgstr "" + +#: lang/json/MONSTER_from_json.py +msgid "Dilophosaurus zombie" +msgid_plural "Dilophosaurus zombie" +msgstr[0] "" + +#. ~ Description for {'str_sp': 'Dilophosaurus zombie'} +#: lang/json/MONSTER_from_json.py +msgid "" +"The shuffling corpse of a medium dinosaur with sharp teeth and two prominent" +" bony crests on its head with ragged strips of ripped flesh hanging down " +"like a frill." +msgstr "" + #: lang/json/MONSTER_from_json.py msgid "improvised SMG turret" msgid_plural "improvised SMG turrets" @@ -69030,18 +69568,6 @@ msgid "" "traditional forces." msgstr "" -#: lang/json/MONSTER_from_json.py -msgid "toilet paper mummy" -msgid_plural "toilet paper mummies" -msgstr[0] "" - -#. ~ Description for {'str': 'toilet paper mummy', 'str_pl': 'toilet paper -#. mummies'} -#: lang/json/MONSTER_from_json.py -msgid "" -"Vaguely humanoid in shape, layered in something resembling toilet paper." -msgstr "" - #: lang/json/MONSTER_from_json.py msgid "giant scorpion" msgid_plural "giant scorpions" @@ -69392,18 +69918,6 @@ msgid "" "chitin fitted to a thin mesh. You could put this on a friendly horse." msgstr "" -#: lang/json/PET_ARMOR_from_json.py -msgid "meower armor" -msgid_plural "meower armors" -msgstr[0] "" - -#. ~ Description for {'str': 'meower armor'} -#: lang/json/PET_ARMOR_from_json.py -msgid "" -"Sleek and lightweight kevlar cat harness with a protective hood and " -"chestplate. Includes a very small, inconvenient velcro pocket on the back." -msgstr "" - #: lang/json/SPECIES_from_json.py msgid "a mammal" msgstr "" @@ -70148,6 +70662,22 @@ msgstr "" msgid "This fake spell occurs on cranial bomb activation. Likely fatal." msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Skullgun Snapback" +msgstr "" + +#. ~ Description for Skullgun Snapback +#: lang/json/SPELL_from_json.py +msgid "" +"This fake spell occurs on skullgun activation. May be fatal if done in " +"critical condition." +msgstr "" + +#. ~ Message for SPELL 'Skullgun Snapback' +#: lang/json/SPELL_from_json.py +msgid "Your head snaps back from the force of the shot." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "psi stun" msgstr "" @@ -70345,12 +70875,12 @@ msgstr "" #: lang/json/SPELL_from_json.py msgid "Crystallize Mana" -msgstr "" +msgstr "法力結晶化" #. ~ Description for Crystallize Mana #: lang/json/SPELL_from_json.py msgid "Crystallizes mana into solid form" -msgstr "" +msgstr "將法力凝結成固體" #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "Mana Fatigue" @@ -70550,8 +71080,8 @@ msgstr "" msgid "Debug Full Protection" msgstr "除錯完全防護" -#. ~ Description of effect 'Debug Full Protection'. #. ~ Description for Debug Full Protection +#. ~ Description of effect 'Debug Full Protection'. #: lang/json/SPELL_from_json.py lang/json/effects_from_json.py msgid "You can not be harmed by anything." msgstr "你不會受到任何傷害。" @@ -71041,10 +71571,10 @@ msgstr "召喚四隻永久性的惡魔蜘蛛。" msgid "Jolt" msgstr "猛擊術" -#. ~ Mutation class: Manatouched iv_sound_message #. ~ description for the sound of spell 'Jolt' #. ~ description for the sound of spell 'Lightning Bolt' #. ~ description for the sound of spell 'Lightning Blast' +#. ~ Mutation class: Manatouched iv_sound_message #: lang/json/SPELL_from_json.py lang/json/mutation_category_from_json.py msgid "a crackle" msgstr "劈啪聲" @@ -71113,6 +71643,31 @@ msgstr "" msgid "Wall of Fog" msgstr "" +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc Aura" +msgstr "" + +#. ~ Description for Repelling Arc Aura +#: lang/json/SPELL_from_json.py +msgid "This is a sub-spell of the Repelling Arc spell." +msgstr "" + +#. ~ description for the sound of spell 'Repelling Arc Aura' +#: lang/json/SPELL_from_json.py +msgid "arcing electricity!" +msgstr "" + +#: lang/json/SPELL_from_json.py +msgid "Repelling Arc" +msgstr "" + +#. ~ Description for Repelling Arc +#: lang/json/SPELL_from_json.py +msgid "" +"Manifests an aura of crackling electricity around you to strike attackers " +"with baleful lightning." +msgstr "" + #: lang/json/SPELL_from_json.py msgid "Bless" msgstr "祝福術" @@ -71225,65 +71780,37 @@ msgstr "" msgid "X-ray Vision" msgstr "" -#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py -msgid "Mana Siphon" -msgstr "" - -#. ~ Description for Mana Siphon -#: lang/json/SPELL_from_json.py -msgid "" -"This is the spell portion of the mana siphon series of mutations. If you " -"have this spell you probably debugged it in." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Pew, Pew" -msgstr "" - -#. ~ Description for Pew, Pew #: lang/json/SPELL_from_json.py -msgid "You aim your finger at your opponent and make 'Pew, pew' sounds." +msgid "Knock" msgstr "" -#: lang/json/SPELL_from_json.py -msgid "The Floor is Lava" -msgstr "" - -#. ~ Description for The Floor is Lava +#. ~ Description for Knock #: lang/json/SPELL_from_json.py msgid "" -"Better find a chair or countertop to climb onto, because the floor is made " -"of lava!" +"You channel magic into a force capable of opening doors. This variant can " +"only open wooden doors." msgstr "" #: lang/json/SPELL_from_json.py -msgid "Sports Training Montage" +msgid "Improved Knock" msgstr "" -#. ~ Description for Sports Training Montage +#. ~ Description for Improved Knock #: lang/json/SPELL_from_json.py msgid "" -"When something takes a really long time, and you want to just skip to the " -"end, you're gonna need a montage." +"You channel magic into a force capable of opening doors. This variant can " +"open any locked door." msgstr "" -#: lang/json/SPELL_from_json.py -msgid "Kiss the Owie" -msgstr "" - -#. ~ Description for Kiss the Owie -#: lang/json/SPELL_from_json.py -msgid "A tender kiss to make the pain go away, just like mother used to give." -msgstr "" - -#: lang/json/SPELL_from_json.py -msgid "Summon Mummy" +#: lang/json/SPELL_from_json.py lang/json/mutation_from_json.py +msgid "Mana Siphon" msgstr "" -#. ~ Description for Summon Mummy +#. ~ Description for Mana Siphon #: lang/json/SPELL_from_json.py msgid "" -"Call forth a flimsy creature of tissue from the broom closet of your soul." +"This is the spell portion of the mana siphon series of mutations. If you " +"have this spell you probably debugged it in." msgstr "" #: lang/json/TOOLMOD_from_json.py @@ -73562,26 +74089,31 @@ msgid "" msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Lesser Girdle of Pockets" -msgid_plural "Lesser Girdles of Pockets" +msgid "lesser dimensional toolbelt" +msgid_plural "lesser dimensional toolbelts" msgstr[0] "" -#. ~ Description for {'str': 'Lesser Girdle of Pockets', 'str_pl': 'Lesser -#. Girdles of Pockets'} -#. ~ Description for {'str': 'Greater Girdle of Pockets', 'str_pl': 'Greater -#. Girdles of Pockets'} +#. ~ Description for {'str': 'lesser dimensional toolbelt'} #: lang/json/TOOL_ARMOR_from_json.py msgid "" -"A wide girdle that fits around your waist, coverd in numerous small pouches " -"that hold a lot more than they should, and the weight of their contents is " -"greatly reduced." +"A sturdy workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold more than they " +"should with a fair weight reduction." msgstr "" #: lang/json/TOOL_ARMOR_from_json.py -msgid "Greater Girdle of Pockets" -msgid_plural "Greater Girdles of Pockets" +msgid "greater dimensional toolbelt" +msgid_plural "greater dimensional toolbelts" msgstr[0] "" +#. ~ Description for {'str': 'greater dimensional toolbelt'} +#: lang/json/TOOL_ARMOR_from_json.py +msgid "" +"A heavy duty workman's belt that fits around your waist, covered in easy to " +"access pouches. Like all dimensional spaces, they hold far more than they " +"should with a substantial weight reduction." +msgstr "" + #: lang/json/TOOL_ARMOR_from_json.py msgid "Belt of Weaponry" msgid_plural "Belts of Weaponry" @@ -76224,7 +76756,7 @@ msgstr[0] "削皮刀" msgid "" "This is a short-bladed knife with a sharp blade, made for fine controlled " "cuts to vegetables without using a cutting board." -msgstr "" +msgstr "這是一把刀刃短但是鋒利的刀,用來精準控制的切蔬菜而不需要砧板。" #: lang/json/TOOL_from_json.py msgid "chef knife" @@ -76277,7 +76809,7 @@ msgid "" "This is a menacing looking knife with a broad, square shaped blade, curved " "for fast vegetable chopping. Its heft and sharpness would make it a decent " "weapon as well, although not as good as a meat cleaver." -msgstr "" +msgstr "這把有著寬大方形刀身的刀子看起來很有威脅感,有著彎曲的刀刃來快速切菜。它的重量和鋒利度使它也能作為一把不錯的武器,雖然不及切肉刀。" #: lang/json/TOOL_from_json.py msgid "meat cleaver" @@ -77947,13 +78479,11 @@ msgstr[0] "智慧型手機" #. ~ Use action msg for {'str': 'smartphone'}. #. ~ Use action msg for {'str': 'atomic smartphone'}. #. ~ Use action msg for {'str': "Wraitheon executive's smartphone"}. -#. ~ Use action msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "You activate the flashlight app." msgstr "你啟動了手電筒 app。" #. ~ Use action need_charges_msg for {'str': 'smartphone'}. -#. ~ Use action need_charges_msg for {'str': 'test smartphone'}. #: lang/json/TOOL_from_json.py msgid "The smartphone's charge is too low." msgstr "這支智慧型手機的電力不足。" @@ -79267,7 +79797,6 @@ msgid_plural "fire axes" msgstr[0] "消防斧" #. ~ Description for {'str': 'fire axe'} -#. ~ Description for TEST fire axe #: lang/json/TOOL_from_json.py msgid "" "This is a large, two-handed pickhead axe normally used by firefighters. It " @@ -79280,7 +79809,6 @@ msgid_plural "Halligan bars" msgstr[0] "哈利根鐵鋌" #. ~ Description for {'str': 'Halligan bar'} -#. ~ Description for TEST Halligan bar #: lang/json/TOOL_from_json.py msgid "" "This is a heavy multiple-use tool commonly carried by firefighters, law " @@ -79503,6 +80031,28 @@ msgid "" "shovel but really can't compare to a real shovel." msgstr "一根木棍連結一石片, 功能類似鏟子, 但與真正的鏟子差太多。" +#: lang/json/TOOL_from_json.py +msgid "metal rake" +msgid_plural "metal rakes" +msgstr[0] "" + +#. ~ Description for {'str': 'metal rake'} +#: lang/json/TOOL_from_json.py +msgid "A sturdy metal rake, a must-have during autumn." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic rake" +msgid_plural "plastic rakes" +msgstr[0] "" + +#. ~ Description for {'str': 'plastic rake'} +#: lang/json/TOOL_from_json.py +msgid "" +"A cheap plastic rake. Will break quite fast if used for anything other than" +" raking leaves." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "scythe" msgid_plural "scythes" @@ -79526,6 +80076,26 @@ msgstr[0] "鏟子" msgid "This is a digging tool. Use it to dig pits adjacent to your location." msgstr "一件挖掘工具。使用這個工具能夠在你相鄰的格子挖坑。" +#: lang/json/TOOL_from_json.py +msgid "snow shovel" +msgid_plural "snow shovels" +msgstr[0] "" + +#. ~ Description for {'str': 'snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "This is a sturdy tool used for shoving snow." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "plastic snow shovel" +msgid_plural "plastic snow shovels" +msgstr[0] "" + +#. ~ Description for {'str': 'plastic snow shovel'} +#: lang/json/TOOL_from_json.py +msgid "A cheap plastic shovel used for shoving snow." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "sickle" msgid_plural "sickles" @@ -80227,6 +80797,11 @@ msgid "" "the right tools, you could use this for metalworking." msgstr "一個燒木炭能鑄鐵的攜帶式鍛造爐。只要跟正確的工具一起使用, 你就能用這個東西來進行鑄造。" +#: lang/json/TOOL_from_json.py +msgid "Rock Forge" +msgid_plural "Rock Forges" +msgstr[0] "" + #: lang/json/TOOL_from_json.py msgid "metalworking chisel" msgid_plural "metalworking chisels" @@ -80353,6 +80928,17 @@ msgid "" "metalworking fabrication recipes." msgstr "是一把長鐵鉗。它通常用於烹飪或在金屬加工配方。" +#: lang/json/TOOL_from_json.py +msgid "sandpaper" +msgid_plural "sheets of sandpaper" +msgstr[0] "" + +#. ~ Description for {'str': 'sandpaper', 'str_pl': 'sheets of sandpaper'} +#: lang/json/TOOL_from_json.py +msgid "" +"A sheet of rough paper. It is commonly used in metalworking and carpentry." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "compressed air horn" msgid_plural "compressed air horns" @@ -80502,6 +81088,18 @@ msgid "" "and place on the ground." msgstr "一張用毛皮製成能卷起攜帶的睡墊。可以讓你跟地板有所阻隔, 更容易入睡。使用它來鋪在地上。" +#: lang/json/TOOL_from_json.py +msgid "garden hose" +msgid_plural "garden hoses" +msgstr[0] "" + +#. ~ Description for {'str': 'garden hose'} +#: lang/json/TOOL_from_json.py +msgid "" +"This is a flexible garden hose. If you cut it in smaller pieces, it could " +"be used for crafting, or siphoning fuel from a vehicle." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "grip hook" msgid_plural "grip hooks" @@ -82224,7 +82822,6 @@ msgid_plural "rags" msgstr[0] "布條" #. ~ Description for {'str': 'rag'} -#. ~ Description for TEST rag #: lang/json/TOOL_from_json.py msgid "" "This is a largish piece of cloth, useful in crafting and possibly for " @@ -82576,7 +83173,7 @@ msgid "" "A lightweight handheld cordless circular saw. Spins a circular blade fast " "enough to cut wood, zombies, or in an emergency, pizza. The blade, while " "effective in combat, is hard to hit with due to its small size." -msgstr "" +msgstr "一把輕量化的手持式無繩圓鋸。快速轉動的圓形刀片足夠拿來切割木材與殭屍,緊急情況下也能切披薩。但也因刀片太小,很難有效的進行攻擊。" #: lang/json/TOOL_from_json.py msgid "circular saw (on)" @@ -82631,11 +83228,11 @@ msgid "" msgstr "這把開著的電鋸正產生大量的噪音。使用它來關閉。" #: lang/json/TOOL_from_json.py -msgid "stone hand axe" -msgid_plural "stone hand axes" -msgstr[0] "石製手斧" +msgid "stone axe head" +msgid_plural "stone axe heads" +msgstr[0] "" -#. ~ Description for {'str': 'stone hand axe'} +#. ~ Description for {'str': 'stone axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a broad piece of stone with an edge narrow enough to roughly chop " @@ -82643,11 +83240,11 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "metal hand axe" -msgid_plural "metal hand axes" -msgstr[0] "金屬手斧" +msgid "metal axe head" +msgid_plural "metal axe heads" +msgstr[0] "" -#. ~ Description for {'str': 'metal hand axe'} +#. ~ Description for {'str': 'metal axe head'} #: lang/json/TOOL_from_json.py msgid "" "This is a chunk of steel with one edge hammered down to something resembling" @@ -82761,6 +83358,11 @@ msgid "" "but you could use it to fire anything made of clay." msgstr "這是一種便攜式木炭爐。你可以用它來自製磚塊, 或是燒製黏土。" +#: lang/json/TOOL_from_json.py +msgid "Kiln" +msgid_plural "Kilns" +msgstr[0] "" + #: lang/json/TOOL_from_json.py msgid "paint chipper" msgid_plural "paint chippers" @@ -82908,7 +83510,6 @@ msgid_plural "scissor jacks" msgstr[0] "剪式千斤頂" #. ~ Description for {'str': 'scissor jack'} -#. ~ Description for TEST scissor jack #: lang/json/TOOL_from_json.py msgid "A compact scissor jack used for lifting vehicles." msgstr "一個牢固的剪式千斤頂, 用於抬起車輛。" @@ -83122,7 +83723,6 @@ msgid_plural "screwdrivers" msgstr[0] "螺絲起子" #. ~ Description for {'str': 'screwdriver'} -#. ~ Description for TEST screwdriver #: lang/json/TOOL_from_json.py msgid "" "This is a Philips-head screwdriver. It is important for almost all " @@ -83160,7 +83760,6 @@ msgid_plural "soldering irons" msgstr[0] "電焊棒" #. ~ Description for {'str': 'soldering iron'} -#. ~ Description for TEST soldering iron #: lang/json/TOOL_from_json.py msgid "" "This is a device with a metal tip that can get very hot. It is necessary " @@ -83540,13 +84139,13 @@ msgid "" msgstr "" #: lang/json/TOOL_from_json.py -msgid "precision solderers" -msgid_plural "precision solderers" +msgid "pseudo atomic butter churn" +msgid_plural "pseudo atomic butter churns" msgstr[0] "" #: lang/json/TOOL_from_json.py -msgid "pseudo atomic butter churn" -msgid_plural "pseudo atomic butter churns" +msgid "precision solderers" +msgid_plural "precision solderers" msgstr[0] "" #: lang/json/TOOL_from_json.py @@ -83732,6 +84331,20 @@ msgid "" "specialized tools." msgstr "" +#: lang/json/TOOL_from_json.py +msgid "complete bionic toolkit" +msgid_plural "complete bionic toolkits" +msgstr[0] "" + +#. ~ Description for {'str': 'complete bionic toolkit'} +#: lang/json/TOOL_from_json.py +msgid "" +"A set of very small robotic tools and encrypted digital keys originally " +"designed to disassemble and test the quality of industrially produced " +"bionics. A highly skilled and patient engineer could use them to manually " +"assemble new cybernetics." +msgstr "" + #: lang/json/TOOL_from_json.py msgid "energy saber" msgid_plural "energy sabers" @@ -84531,6 +85144,60 @@ msgid "greater wand of cone of cold" msgid_plural "greater wands of cone of cold" msgstr[0] "冷錐術高級魔杖" +#: lang/json/TOOL_from_json.py +msgid "minor wand of knock" +msgid_plural "minor wands of knock" +msgstr[0] "" + +#. ~ Description for {'str': 'minor wand of knock', 'str_pl': 'minor wands of +#. knock'} +#. ~ Description for {'str': 'lesser wand of knock', 'str_pl': 'lesser wands +#. of knock'} +#. ~ Description for {'str': 'greater wand of knock', 'str_pl': 'greater wands +#. of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of knock" +msgid_plural "lesser wands of knock" +msgstr[0] "" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of knock" +msgid_plural "greater wands of knock" +msgstr[0] "" + +#: lang/json/TOOL_from_json.py +msgid "minor wand of improved knock" +msgid_plural "minor wands of improved knock" +msgstr[0] "" + +#. ~ Description for {'str': 'minor wand of improved knock', 'str_pl': 'minor +#. wands of improved knock'} +#. ~ Description for {'str': 'lesser wand of improved knock', 'str_pl': +#. 'lesser wands of improved knock'} +#. ~ Description for {'str': 'greater wand of improved knock', 'str_pl': +#. 'greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with a mana crystal socket at the base that casts a " +"spell when activated. This wand casts improved knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "lesser wand of improved knock" +msgid_plural "lesser wands of improved knock" +msgstr[0] "" + +#: lang/json/TOOL_from_json.py +msgid "greater wand of improved knock" +msgid_plural "greater wands of improved knock" +msgstr[0] "" + #: lang/json/TOOL_from_json.py msgid "disposable minor wand of magic missile" msgid_plural "disposable minor wands of magic missile" @@ -84693,6 +85360,60 @@ msgid "disposable greater wand of cone of cold" msgid_plural "disposable greater wands of cone of cold" msgstr[0] "一次性的冷錐術高級魔杖" +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of knock" +msgid_plural "disposable minor wands of knock" +msgstr[0] "" + +#. ~ Description for {'str': 'disposable minor wand of knock', 'str_pl': +#. 'disposable minor wands of knock'} +#. ~ Description for {'str': 'disposable lesser wand of knock', 'str_pl': +#. 'disposable lesser wands of knock'} +#. ~ Description for {'str': 'disposable greater wand of knock', 'str_pl': +#. 'disposable greater wands of knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of knock" +msgid_plural "disposable lesser wands of knock" +msgstr[0] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of knock" +msgid_plural "disposable greater wands of knock" +msgstr[0] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable minor wand of improved knock" +msgid_plural "disposable minor wands of improved knock" +msgstr[0] "" + +#. ~ Description for {'str': 'disposable minor wand of improved knock', +#. 'str_pl': 'disposable minor wands of improved knock'} +#. ~ Description for {'str': 'disposable lesser wand of improved knock', +#. 'str_pl': 'disposable lesser wands of improved knock'} +#. ~ Description for {'str': 'disposable greater wand of improved knock', +#. 'str_pl': 'disposable greater wands of improved knock'} +#: lang/json/TOOL_from_json.py +msgid "" +"A slender wooden wand with an embedded mana crystal at the base that casts a" +" spell when activated. This wand casts improved knock." +msgstr "" + +#: lang/json/TOOL_from_json.py +msgid "disposable lesser wand of improved knock" +msgid_plural "disposable lesser wands of improved knock" +msgstr[0] "" + +#: lang/json/TOOL_from_json.py +msgid "disposable greater wand of improved knock" +msgid_plural "disposable greater wands of improved knock" +msgstr[0] "" + #: lang/json/TOOL_from_json.py msgid "finger firelighter" msgid_plural "finger firelighters" @@ -84820,66 +85541,6 @@ msgid "" "magical metals into their workable ingot form." msgstr "" -#: lang/json/TOOL_from_json.py -msgid "TEST rag" -msgid_plural "TEST rags" -msgstr[0] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST Halligan bar" -msgid_plural "TEST Halligan bars" -msgstr[0] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST fire axe" -msgid_plural "TEST fire axes" -msgstr[0] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST screwdriver" -msgid_plural "TEST screwdrivers" -msgstr[0] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST sonic screwdriver" -msgid_plural "TEST sonic screwdrivers" -msgstr[0] "" - -#. ~ Description for TEST sonic screwdriver -#: lang/json/TOOL_from_json.py -msgid "This is a sonic screwdriver. Like a normal screwdriver, but sonic." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "TEST soldering iron" -msgid_plural "TEST soldering irons" -msgstr[0] "" - -#: lang/json/TOOL_from_json.py -msgid "TEST scissor jack" -msgid_plural "TEST scissor jacks" -msgstr[0] "" - -#: lang/json/TOOL_from_json.py -msgid "test smartphone" -msgid_plural "test smartphones" -msgstr[0] "" - -#. ~ Description for {'str': 'test smartphone'} -#: lang/json/TOOL_from_json.py -msgid "UPS-powered smartphone with a flashlight, camera, and MP3 player." -msgstr "" - -#: lang/json/TOOL_from_json.py -msgid "test matchbook" -msgid_plural "test matchbooks" -msgstr[0] "" - -#. ~ Description for {'str': 'test matchbook'} -#: lang/json/TOOL_from_json.py -msgid "Test matches - when you must burn things, for science!" -msgstr "" - #: lang/json/WHEEL_from_json.py lang/json/vehicle_part_from_json.py msgid "yoke and harness" msgid_plural "yokes and harnesses" @@ -85236,14 +85897,42 @@ msgstr "" msgid "Freeman's favorite" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Wield a crowbar" +msgstr "" + #: lang/json/achievement_from_json.py msgid "Impenetrable" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Wear a tank suit" +msgstr "" + #: lang/json/achievement_from_json.py msgid "What are they hiding?" msgstr "" +#: lang/json/achievement_from_json.py +msgid "Enter a lab finale room" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "The Last Homely House" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Reach a refugee center" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Return to your roots" +msgstr "" + +#: lang/json/achievement_from_json.py +msgid "Return to the location you started the game" +msgstr "" + #: lang/json/achievement_from_json.py msgid "Would-be Wizard" msgstr "將來的巫師" @@ -86049,10 +86738,6 @@ msgstr "" msgid "mana energy" msgstr "" -#: lang/json/ammunition_type_from_json.py -msgid "heady vapours" -msgstr "" - #: lang/json/bionic_from_json.py msgid "Adrenaline Pump" msgstr "腎上腺素幫浦" @@ -87450,19 +88135,6 @@ msgstr "" msgid "Wind Turbines" msgstr "" -#: lang/json/bionic_from_json.py -msgid "Precision Solderers" -msgstr "" - -#. ~ Description for {'str': 'Precision Solderers'} -#: lang/json/bionic_from_json.py -msgid "" -"Your hands have been outfitted with precise soldering tools, wire cutters, " -"and cable spools. They're too small to use in most crafting, but in the " -"absence of proper machinery, they're essential for creating bionics without " -"better tools." -msgstr "" - #: lang/json/bionic_from_json.py msgid "Deployable Grenade Launcher" msgstr "" @@ -87509,6 +88181,19 @@ msgid "" "and fast." msgstr "" +#: lang/json/bionic_from_json.py +msgid "Precision Solderers" +msgstr "" + +#. ~ Description for {'str': 'Precision Solderers'} +#: lang/json/bionic_from_json.py +msgid "" +"Your hands have been outfitted with precise soldering tools, wire cutters, " +"and cable spools. They're too small to use in most crafting, but in the " +"absence of proper machinery, they're essential for creating bionics without " +"better tools." +msgstr "" + #: lang/json/bionic_from_json.py lang/json/gun_from_json.py msgid "Ionic Overload Generator" msgid_plural "Ionic Overload Generators" @@ -87856,7 +88541,7 @@ msgid "Merciful" msgstr "" #: lang/json/construction_category_from_json.py src/advanced_inv.cpp -#: src/armor_layers.cpp src/options.cpp src/scenario.cpp +#: src/armor_layers.cpp src/debug_menu.cpp src/options.cpp src/scenario.cpp msgid "All" msgstr "全部" @@ -90336,7 +91021,7 @@ msgstr "你正騎乘著動物。" msgid "You mount your steed." msgstr "你騎乘著坐騎。" -#: lang/json/effects_from_json.py +#: lang/json/effects_from_json.py lang/json/martial_art_from_json.py msgid "On Fire" msgstr "著火" @@ -92795,66 +93480,6 @@ msgstr "" msgid "The gum webs constrict your movement." msgstr "" -#: lang/json/effects_from_json.py -msgid "Debugged" -msgstr "" - -#. ~ Description of effect 'Debugged'. -#: lang/json/effects_from_json.py -msgid "" -"You have been debugged!\n" -"Everything is working perfectly now." -msgstr "" - -#. ~ Apply message for effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Diving into your source, you find a rubber duck, and talk it to death." -msgstr "" - -#. ~ Speed name of effect(s) 'Debugged'. -#: lang/json/effects_from_json.py -msgid "Optimized" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Min-Maxed" -msgstr "" - -#. ~ Description of effect 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "" -"All the benefits of being the worst with none of the drawbacks of being the " -"best!" -msgstr "" - -#. ~ Apply message for effect(s) 'Min-Maxed'. -#: lang/json/effects_from_json.py -msgid "You feel your internal metrics stretch like a fun-house mirror." -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Whoa" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wut?" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "Wow!" -msgstr "" - -#: lang/json/effects_from_json.py -msgid "" -"Everything is just way too intense, man!\n" -"You feel confused and disoriented." -msgstr "" - -#. ~ Apply message for effect(s) 'Whoa, Wut?, Wow!'. -#: lang/json/effects_from_json.py -msgid "!!Intensity intensifies!!" -msgstr "" - #: lang/json/faction_from_json.py msgid "Your Followers" msgstr "你的追隨者" @@ -93040,6 +93665,17 @@ msgid "" " the kind words used about them." msgstr "" +#: lang/json/faction_from_json.py +msgid "Swampers Religious Community and Hotels and Casinos" +msgstr "" + +#. ~ Description for Swampers Religious Community and Hotels and Casinos +#: lang/json/faction_from_json.py +msgid "" +"A prosperous but secretive group of churchgoers and entertainment moguls " +"with an affection for dinosaurs. They welcome all untainted humans." +msgstr "" + #: lang/json/faction_from_json.py msgid "The Ancient Ones" msgstr "" @@ -94660,7 +95296,7 @@ msgstr "" msgid "" "A common weed with a yellow flower. Produces seeds that get carried on the " "wind by thin, gray filaments." -msgstr "" +msgstr "常見帶有黃花的野草。會長出能夠藉由輕薄灰色細絲乘風而去的種子。" #. ~ Description for burdock #: lang/json/furniture_from_json.py @@ -95663,7 +96299,7 @@ msgstr "" #: lang/json/furniture_from_json.py msgid "bale of hay" -msgstr "" +msgstr "乾草捆" #. ~ Description for bale of hay #: lang/json/furniture_from_json.py @@ -97096,6 +97732,77 @@ msgid "" "temperature. You'll need to take it down first." msgstr "" +#: lang/json/furniture_from_json.py +msgid "sleep pod" +msgstr "" + +#. ~ Description for sleep pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a climate controlled sleep pod. An easy way to reduce energy costs " +"in dense urban environments." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "cryo pod" +msgstr "" + +#. ~ Description for cryo pod +#: lang/json/furniture_from_json.py +msgid "" +"This is a long term sleep pod. Cryo pods are mostly used by people waiting " +"a short term for organs or criminals avoiding heat right after a crime." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "CRISPR Biolab" +msgstr "" + +#. ~ Description for CRISPR Biolab +#: lang/json/furniture_from_json.py +msgid "" +"A boxy looking device of arms, droppers and pipettes. It was used pre-" +"Cataclysm to do expirements in gene editing." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "3D printer" +msgstr "" + +#. ~ Description for 3D printer +#: lang/json/furniture_from_json.py +msgid "" +"This box was used for rapid prototyping of products and for general " +"entertainment purposes in the masses." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "neural net inserter" +msgstr "" + +#. ~ Description for neural net inserter +#: lang/json/furniture_from_json.py +msgid "" +"This device looks like a cross between some kind of nightmare dentistry " +"equipment and socketing tool mounted on a slide that lets it drop precisely " +"down. Useful for those project that require putting delicate items into " +"hard to reach spaces." +msgstr "" + +#: lang/json/furniture_from_json.py +msgid "monomolecular saw" +msgstr "" + +#. ~ Description for monomolecular saw +#: lang/json/furniture_from_json.py +msgid "" +"A wire the size of a cheescutter runs in a single direction in this tool, " +"allowing atomically precise cuts at almost any angle. Even unpowered it " +"gives off a visual distortion for several inches around it to prevent you " +"from losing a hand. It is impossible to deconstruct this device without the" +" wire self destructing." +msgstr "" + #. ~ Description for dresser #: lang/json/furniture_from_json.py msgid "Dress yourself!" @@ -97461,8 +98168,7 @@ msgid "" " a double barrel shotgun." msgstr "一把土炮的三管槍械。其中一管的口徑是 .30-06, 另外兩管能裝填霰彈。它是由鋼管和拆解出來的雙管散彈槍零件組合而成。" -#: lang/json/gun_from_json.py lang/json/gun_from_json.py -#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py +#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py msgctxt "gun_type_type" msgid "shotgun" msgstr "霰彈槍" @@ -97607,7 +98313,8 @@ msgid "" "standard UPS." msgstr "這把雷射手槍是以 21 世紀中葉的 V29 雷射手槍為基礎而設計的,又加了一些大力膠帶跟電子零件的構造,使用標準 UPS 供電。" -#: lang/json/gun_from_json.py lang/json/gunmod_from_json.py src/item.cpp +#: lang/json/gun_from_json.py lang/json/gun_from_json.py +#: lang/json/gunmod_from_json.py lang/json/gunmod_from_json.py src/item.cpp msgctxt "gun_type_type" msgid "pistol" msgstr "手槍" @@ -100840,6 +101547,17 @@ msgid "" "will have to suffice." msgstr "" +#: lang/json/gun_from_json.py +msgid "makeshift shotgun" +msgid_plural "makeshift shotguns" +msgstr[0] "" + +#: lang/json/gun_from_json.py +msgid "" +"A crude shotgun, composed of two thick steel pipes, an end cap and a nail. " +"The lack of sights make this weapon only useful at point-blank range." +msgstr "" + #: lang/json/gun_from_json.py msgid "flaregun" msgid_plural "flareguns" @@ -101463,6 +102181,15 @@ msgstr "" msgid "trilaser" msgstr "" +#: lang/json/gun_from_json.py +msgid "bionic skullgun" +msgid_plural "bionic skullguns" +msgstr[0] "" + +#: lang/json/gun_from_json.py +msgid "Bionic one-shot subdermal .40 pistol integrated with your head." +msgstr "" + #: lang/json/gun_from_json.py msgid "CRIT .5 LP" msgid_plural "CRIT .5 LPs" @@ -102197,6 +102924,11 @@ msgid "" "reliability." msgstr "" +#: lang/json/gun_from_json.py +msgid "slam-fire shotgun" +msgid_plural "slam-fire shotguns" +msgstr[0] "" + #: lang/json/gun_from_json.py msgid "Ichaival" msgid_plural "Ichaivals" @@ -102271,20 +103003,6 @@ msgstr "" msgid "Fake gun that fires barbed javelins." msgstr "" -#: lang/json/gun_from_json.py -msgid "TEST compound bow" -msgid_plural "TEST compound bows" -msgstr[0] "" - -#: lang/json/gun_from_json.py -msgid "Test Glock" -msgid_plural "Test Glocks" -msgstr[0] "" - -#: lang/json/gun_from_json.py -msgid "A handgun for testing, based on the Glock 9mm." -msgstr "" - #: lang/json/gunmod_from_json.py msgid "pipe combination gun shotgun" msgid_plural "pipe combination gun shotguns" @@ -104033,15 +104751,6 @@ msgid "" "replacing the iron sights. Increases accuracy and weight." msgstr "" -#: lang/json/gunmod_from_json.py -msgid "test suppressor" -msgid_plural "test suppressors" -msgstr[0] "" - -#: lang/json/gunmod_from_json.py -msgid "Gun suppressor mod for testing." -msgstr "" - #: lang/json/harvest_from_json.py msgid "You gut and fillet the fish" msgstr "你取出這條魚的內臟並將肉切成片" @@ -104069,8 +104778,32 @@ msgid "" msgstr "" #: lang/json/harvest_from_json.py -msgid "You laboriously dissect the colossal insect." -msgstr "你費力地解剖了龐大昆蟲。" +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "You laboriously dissect the colossal insect. " +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"What appeared to be insect hairs on the chitin of this creature look more " +"like tiny feathers as you pare them back. Inside is a bundle of bubble-like" +" tissue sacs that appear to be floating, which doesn't fit with what you " +"know about real bees." +msgstr "" + +#: lang/json/harvest_from_json.py +msgid "" +"There's a faintly hairy, skin-like membrane, covered in blood vessels, " +"beneath the chitin of this creature. Inside it is a bundle of bubble-like " +"tissue sacs that appear to be floating, which doesn't fit with what you know" +" about real wasps." +msgstr "" #: lang/json/harvest_from_json.py msgid "You laboriously hack and dig through the remains of the fungal mass." @@ -104871,6 +105604,8 @@ msgid "" " for example load 9x19mm JHP and 9x19mm FMJ ammo into the same magazine, " "since a magazine always requires identical rounds to be loaded in it." msgstr "" +"請注意,雖然同一口徑及種類的子彈有多種變體,但玩家並不能將不同類型的子彈混合裝填到一個彈匣中。例如,你不能將 9x19mm JHP 和 9x19 FMJ" +" 彈藥裝到同一個彈匣中,因為一個彈匣中只能裝填一款彈藥。" #: lang/json/help_from_json.py msgid "" @@ -106375,6 +107110,13 @@ msgstr "這裝備使用時須注意平衡。穿著它被擊中時會讓你 msgid "This item can be used to communicate with radio waves." msgstr "" +#. ~ Please leave anything in unchanged. +#: lang/json/json_flag_from_json.py +msgid "" +"This item can be used to pick locks with zero " +"effort." +msgstr "" + #. ~ Please leave anything in unchanged. #: lang/json/json_flag_from_json.py msgid "This clothing is designed to keep you dry in the rain." @@ -108657,6 +109399,15 @@ msgstr "" msgid "Zombie trap." msgstr "" +#: lang/json/map_extra_from_json.py +msgid "Reed" +msgstr "" + +#. ~ Description for {'str': 'Reed'} +#: lang/json/map_extra_from_json.py +msgid "Water vegetation." +msgstr "" + #. ~ Computer name #: lang/json/mapgen_from_json.py msgid "Consolidated Computerized Bank of the Treasury" @@ -109961,6 +110712,11 @@ msgid "" "years.'" msgstr "" +#. ~ Computer name +#: lang/json/mapgen_from_json.py +msgid "DinoLab Operating Theater Controls" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "No style" msgstr "沒有招式" @@ -110216,6 +110972,21 @@ msgid "" "Lasts 3 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Capoeira Tempo" +msgstr "戰舞節奏" + +#. ~ Description of buff 'Capoeira Tempo' for martial art '{'str': +#. 'Capoeira'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You didn't miss, it's just part of the dance and the best part is about to start!\n" +"\n" +"+15% Bash damage.\n" +"Lasts 2 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Crane Kung Fu" msgstr "鶴形拳" @@ -110372,6 +111143,22 @@ msgid "" "+2 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Eskrima Combination" +msgstr "菲律賓劍棍術組合" + +#. ~ Description of buff 'Eskrima Combination' for martial art '{'str': +#. 'Eskrima'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You can follow up a critical hit with a stronger attack if the opportunity presents itself.\n" +"\n" +"+15% bonus to all damage.\n" +"Enables \"Combination Strike\" technique.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Fencing" msgstr "擊劍" @@ -110409,6 +111196,33 @@ msgid "" "Blocked damage reduced by 50% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py lang/json/technique_from_json.py +msgid "Parry" +msgstr "格擋" + +#. ~ Description of buff 'Parry' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your next strike will find its mark much easier from your parry.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Remise" +msgstr "" + +#. ~ Description of buff 'Remise' for martial art '{'str': 'Fencing'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your feint is the perfect setup for a devastating followup attack!\n" +"\n" +"+1 Accuracy.\n" +"Enables \"Compound Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + #. ~ Description for martial art '{'str': 'Fior Di Battaglia'}' #: lang/json/martial_art_from_json.py msgid "" @@ -110457,6 +111271,34 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Defense Break" +msgstr "" + +#. ~ Description of buff 'Defense Break' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Each successful block reveals an opening in your opponent's guard.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tactical Feinting" +msgstr "" + +#. ~ Description of buff 'Tactical Feinting' for martial art '{'str': 'Fior Di +#. Battaglia'}' +#: lang/json/martial_art_from_json.py +msgid "" +"They fell for your feint!\n" +"\n" +"Enables \"Hook and Drag\" technique.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Judo" msgstr "柔道" @@ -110698,6 +111540,32 @@ msgid "" "+1 Dodge attempts, blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Deflection" +msgstr "" + +#. ~ Description of buff 'Deflection' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You deflected your enemy's attack and now they are open to a counterattack!\n" +"Enables \"Sweeping Strike\" and \"Deathblow\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Manslayer" +msgstr "" + +#. ~ Description of buff 'Manslayer' for martial art '{'str': 'Medieval +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your powerful attack has given you the chance to end this fight right now!\n" +"Enables \"Vicious Strike\" techniques.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Muay Thai" msgstr "泰拳" @@ -110736,6 +111604,21 @@ msgid "" "Blocked damage decreased by 50% of Strength." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Determination" +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Muay +#. Thai'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Taking a hit will not slow you down. You will outlast your opponent and win this fight.\n" +"\n" +"+Bash damage increased by 25% of Strength, blocked damage decreased by 50% of Strength.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Ninjutsu" msgstr "忍術" @@ -110804,6 +111687,34 @@ msgid "" "Last 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Loss of Surprise" +msgstr "" + +#. ~ Description of buff 'Loss of Surprise' for martial art '{'str': +#. 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentions are known! It will take you a few moments to sneak attack again.\n" +"\n" +"-50% all damage.\n" +"Last 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Escape Plan" +msgstr "" + +#. ~ Description of buff 'Escape Plan' for martial art '{'str': 'Ninjutsu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your target has perished. It is time to leave and plan your next attack.\n" +"\n" +"+2 Dodge attempts, +10 movement speed.\n" +"Last 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Niten Ichi-Ryu" msgstr "二天一流" @@ -110877,6 +111788,39 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Falling Leaf" +msgstr "" + +#. ~ Description of buff 'Falling Leaf' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"A sharp sword cuts true.\n" +"Although, all things fade with time.\n" +"Restraint hones your skills.\n" +"\n" +"-1.0 Dodge skill, -1 bash damage, -1 cut damage.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stillness" +msgstr "" + +#. ~ Description of buff 'Stillness' for martial art '{'str': 'Niten Ichi- +#. Ryu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The eye of the storm,\n" +"a fleeting moment of peace,\n" +"gone without a trace.\n" +"\n" +"+2 Accuracy, Dodge skill increased by 50% of Perception.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Pankration" msgstr "古希臘式搏擊" @@ -111025,6 +111969,21 @@ msgid "" "Perception increases Accuracy instead of Dexterity. Accuracy increased by 25% of Perception but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Snake's Coil" +msgstr "" + +#. ~ Description of buff 'Snake's Coil' for martial art '{'str': 'Snake Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Every snake wait for the perfect moment to strike. Aim as your opponents approve and attack their weakness without mercy!\n" +"\n" +"+1 Accuracy, gain armor penetration equal to 50% of Perceptions.\n" +"Lasts 1 turn. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Sōjutsu" msgstr "日本槍術" @@ -111179,6 +112138,21 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Cross Hands" +msgstr "" + +#. ~ Description of buff 'Cross Hands' for martial art '{'str': 'Tai Chi'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare yourself, you are able to use your entire body fully for attacking and defending.\n" +"\n" +"+1.0 Dodge skill, blocked damage reduced by 50% of Perception.\n" +"Enables \"Palm Strike\" and \"Double Palm Strike\" techniques.\n" +"Lasts 3 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Tiger Kung Fu" msgstr "虎形拳" @@ -111232,6 +112206,21 @@ msgid "" "Accuracy increased by 25% of Strength but decreased by 25% of Dexterity." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Tiger Rampage" +msgstr "" + +#. ~ Description of buff 'Tiger Rampage' for martial art '{'str': 'Tiger Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Your opponent's lose is your gain. Your next attack will break through your opponent's guard.\n" +"\n" +"Gain Armor Penetration equal to 50% of Strength.\n" +"Lasts 1 turns. Stacks 2 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Wing Chun" msgstr "詠春拳" @@ -111286,6 +112275,20 @@ msgid "" " Dodging Skill increased by 15% of Perception. Blocked damage reduced by 50% of Perception." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Biu Ji" +msgstr "" + +#. ~ Description of buff 'Biu Ji' for martial art '{'str': 'Wing Chun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Through the perfect application of the Thrusting Fingers form, you can strike your opponents' weak points, force them away, and follow!\n" +"\n" +"Accuracy increased by 20% of Perception, Enables \"Straight Punch (Knockback)\" and \"L-Hook (Knockback)\" techniques.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Zui Quan" msgstr "醉拳" @@ -111400,6 +112403,34 @@ msgid "" "armor, +Perception fire armor." msgstr "+力量 鈍擊防護, +敏捷 酸液防護, +智力 電擊防護, +感知 火焰防護。" +#: lang/json/martial_art_from_json.py +msgid "Getting Angry" +msgstr "" + +#. ~ Description of buff 'Getting Angry' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When I get my hands on you… +2 bash damage for 2 turns. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Lightning Strike" +msgstr "" + +#. ~ Description of buff 'Lightning Strike' for martial art '{'str': 'Debug +#. Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Lightning strikes twice. +Perception electric damage for 3 turns. Stacks 2" +" times." +msgstr "" + +#. ~ Description of buff 'On Fire' for martial art '{'str': 'Debug Mastery'}' +#: lang/json/martial_art_from_json.py +msgid "YOU ARE ON FIRE! +5 fire damage for 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Bionic Combatives" msgstr "生化格鬥術" @@ -111439,6 +112470,22 @@ msgid "" "+2 Blocks attempts, +1 Accuracy." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Optimization" +msgstr "" + +#. ~ Description of buff 'Optimization' for martial art '{'str': 'Bionic +#. Combatives'}' +#: lang/json/martial_art_from_json.py +msgid "" +">10 LOCATE TARGET\n" +">20 EXECUTE TARGET\n" +">30 GOTO 10\n" +"\n" +"+1 Accuracy, +2 all damage.\n" +"Lasts 3 turns. Stacks 3 times." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Centipede Kung Fu" msgstr "蜈蚣毒" @@ -111476,6 +112523,20 @@ msgid "" "Lasts 3 turns. Stacks 4 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Centipede's Venom" +msgstr "" + +#. ~ Description of buff 'Centipede's Venom' for martial art '{'str': +#. 'Centipede Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom burns your opponents at the worst of times.\n" +"\n" +"+2 bashing damage.\n" +"Lasts 2 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Lizard Kung Fu" msgstr "蜥蜴功" @@ -111595,6 +112656,20 @@ msgid "" "Stacks 2 times. Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Scorpion's Intimidation" +msgstr "" + +#. ~ Description of buff 'Scorpion's Intimidation' for martial art '{'str': +#. 'Scorpion Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Nothing is scarier than an angry scorpion. Your attacks can keep others at bay.\n" +"\n" +"+1 Dodge attempts.\n" +"Lasts 1 turn." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Toad Kung Fu" msgstr "蛤蟆功" @@ -111646,6 +112721,34 @@ msgid "" "Lasts 6 turns. Stacks 6 times." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Toad's Meditation" +msgstr "" + +#. ~ Description of buff 'Toad's Meditation' for martial art '{'str': 'Toad +#. Kung Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By concentrating for a moment, you can bolster the strength of your iron skin.\n" +"\n" +"+3 bash, cut, and stab armor.\n" +"Lasts 2 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Toad's Venom" +msgstr "" + +#. ~ Description of buff 'Toad's Venom' for martial art '{'str': 'Toad Kung +#. Fu'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your venom is just another lesson about the strength of your iron body.\n" +"\n" +"+2 bash damage.\n" +"Lasts 5 turns." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Viper Kung Fu" msgstr "虺蛇功" @@ -111987,6 +113090,34 @@ msgid "" "Lasts 1 turn. Stacks 2 times" msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Quicksilver Motion" +msgstr "" + +#. ~ Description of buff 'Quicksilver Motion' for martial art '{'str': +#. 'Diamond Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"In the blink of an eye, you make your move. Your speed, reflexes, and boundless confidence combine to allow you to make a fast, bold move that catches your foes off guard.\n" +"\n" +"+50 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Mind over Body" +msgstr "" + +#. ~ Description of buff 'Mind over Body' for martial art '{'str': 'Diamond +#. Mind'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training and mental toughness allow you to use your focus to overcome physical threats.\n" +"\n" +"+1 Accuracy.\n" +"Lasts 1 turn. Stacks 2 times" +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Hylian Swordsmanship" msgstr "" @@ -112080,6 +113211,46 @@ msgid "" "Lasts 1 turn." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Charge Up" +msgstr "" + +#. ~ Description of buff 'Charge Up' for martial art '{'str': 'Hylian +#. Swordsmanship'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"By taking a moment to prepare, you can unleash a strong, spinning slash!\n" +"\n" +"+20% damage, enables \"Spin Attack\" technique.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Heart" +msgstr "" + +#. ~ Description for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Absolute mastery of the sword is the goal of the Iron Heart discipline. " +"Through unending practice and study, the Iron Heart adept achieves " +"superhuman skill with her weapons. Iron Heart maneuvers are demonstrations " +"of uncanny martial skill—weaving patterns of steel that dizzy, confuse, and " +"ultimately kill with no recourse." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +msgid "You push away your fear and stand tall." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Iron Heart'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s takes a bold and fearless stance." +msgstr "" + #: lang/json/martial_art_from_json.py msgid "Panzer Kunst" msgstr "" @@ -112131,6 +113302,393 @@ msgid "" "Lasts 2 turns." msgstr "" +#: lang/json/martial_art_from_json.py +msgid "Pokken" +msgstr "" + +#. ~ Description for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Pokken or \"Pocket Fist\" is a strange martial art developed from the famous" +" Pokemon video game series. Somehow, a group of dedicated fans managed to " +"combine the moves used by various pokemon with multiple existing martial " +"arts such as boxing and karate. Amazingly, it actually works. Some might " +"even say it's a super effective way to fight." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +msgid "You get ready to battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s is about to challenge someone to a battle." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stamina" +msgstr "" + +#. ~ Description of buff 'Stamina' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your defense after you get hit.\n" +"\n" +"Gain bash, cut, stab armor equal to 50% of Strength.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Sniper" +msgstr "" + +#. ~ Description of buff 'Sniper' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Powers up your techniques after you score a critical hit.\n" +"\n" +"+50% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Moxie" +msgstr "" + +#. ~ Description of buff 'Moxie' for martial art '{'str': 'Pokken'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Boosts your damage after defeating an opponent.\n" +"\n" +"+50% damage.\n" +"Lasts 3 turns." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Setting Sun" +msgstr "" + +#. ~ Description for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Setting Sun discipline teaches its initiates to turn their opponents' " +"strength against them. With a quick shift in stance and carefully aimed " +"attack, a Setting Sun warrior sends a charging enemy tumbling in a new " +"direction." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +msgid "You shift your weight and prepare to defend yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Setting Sun'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s shifts their weight and assumes a new stance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Baffling Defense" +msgstr "" + +#. ~ Description of buff 'Baffling Defense' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You intentionally move and position yourself awkwardly to confuse and throw off your opponents.\n" +"\n" +"Dodging Skill increased by 20% of Intelligence, enables \"Mighty Throw\" and \"Ballista Throw\" techniques.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Feigned Opening" +msgstr "" + +#. ~ Description of buff 'Feigned Opening' for martial art '{'str': 'Setting +#. Sun'}' +#: lang/json/martial_art_from_json.py +msgid "" +"By intentionally openning your guard, you force your opponent to overextend and are able to take full advantage of your next attack!\n" +"\n" +"+20 Speed.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Shii-Cho" +msgstr "" + +#. ~ Description for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Shii-Cho, \"The way of the Sarlacc\" was the first form lightsaber combat " +"developed by the Jedi during their transition from metal weaponry to " +"lightsabers. Shii-Cho is regarded as a training form that all Jedi learn to" +" understand the basics of armed combat. Shii-Cho excels at fighting against" +" groups but lacks the offensive power of the other lightsaber forms." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You place one foot back and hold your weapon vertically on your dominant " +"side." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s places one foot back and hold their weapon vertically." +msgstr "" + +#. ~ Description of buff 'Determination' for martial art '{'str': 'Shii-Cho'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are a determined warrior. Your inner calm aids you in landing your strikes and protecting yourself.\n" +"\n" +"Blocked damage reduced by 100% of Strength, +1 Accuracy." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Apprentice Training" +msgstr "" + +#. ~ Description of buff 'Apprentice Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Your training in Shii-Cho teaches you how to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Knight Training" +msgstr "" + +#. ~ Description of buff 'Knight Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Further training in Shii-Cho improves your ability to combat multiple opponents.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Master Training" +msgstr "" + +#. ~ Description of buff 'Master Training' for martial art '{'str': 'Shii- +#. Cho'}' +#: lang/json/martial_art_from_json.py +msgid "" +"As a master of Shii-Cho, your ability to fight against groups is second to none.\n" +"\n" +"+1 block attempts, +1 block effectiveness." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Dragon" +msgstr "" + +#. ~ Description for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Stone Dragon discipline for focuses on strength, power, and toughness. " +"Its teachings grant a martial adept the ability to splinter steel with a " +"single, focused blow. Stone Dragon's defensive abilities focus on tapping " +"into the enduring power of stone to turn aside attacks." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "You dig your heels into the ground and steady yourself." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Stone Dragon'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s digs their heels into the ground." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stone Bones" +msgstr "" + +#. ~ Description of buff 'Stone Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You focus your energy to enhance your defenses, drawing on the power of your weapon's impact with a foe to toughen yourself against a counterattack.\n" +"\n" +"+1 bash, cut, and stab armor.\n" +"Lasts 1 turn. Stacks 5 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stonefoot Stance" +msgstr "" + +#. ~ Description of buff 'Stonefoot Stance' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You crouch and set your feet flat on the ground, drawing the resilience of the earth into your body. However, moving too much will break your stance.\n" +"\n" +"+10% damage, +2 bash, cut, and stab armor." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cracked Stone" +msgstr "" + +#. ~ Description of buff 'Cracked Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"Moving too much will negate the effects of Surefoot Stance. Stay still to avoid shattering your stance!\n" +"\n" +"Enables \"Shattered Stone\" buff.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Stattered Stone" +msgstr "" + +#. ~ Description of buff 'Stattered Stone' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"You are unable to maintain your Surefoot Stance and must stop moving for a short time to regain its benefits.\n" +"\n" +"-10% damage, -2 bash, cut, and stab armor.\n" +"Lasts 4 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Iron Bones" +msgstr "" + +#. ~ Description of buff 'Iron Bones' for martial art '{'str': 'Stone +#. Dragon'}' +#: lang/json/martial_art_from_json.py +msgid "" +"When you make a successful attack, you enter a meditative state that leaves you almost invulnerable to harm.\n" +"\n" +"+5 bash, cut, and stab armor.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Tiger Claw" +msgstr "" + +#. ~ Description for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"The Tiger Claw discipline embraces a feral rage that lurks within the heart " +"of its initiates. In battle, such warriors growl like wild animals, attack " +"with a furry similar to that of a barbarian, and rely on overwhelming, " +"vicious assaults to defeat their enemies." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +msgid "You emit a low growl as you prepare for battle." +msgstr "" + +#. ~ initiate message for martial art '{'str': 'Tiger Claw'}' +#: lang/json/martial_art_from_json.py +#, python-format +msgid "%s hunkers down like a wild animal." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Improved Critical" +msgstr "" + +#. ~ Description of buff 'Improved Critical' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"Always strike with full force. Never hold back anything unless you want to die.\n" +"\n" +"+5% critical hit chance." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Pounching Charge" +msgstr "" + +#. ~ Description of buff 'Pounching Charge' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"With the roar of a wild beast, you throw yourself into the fray. Strike first and strike hard.\n" +"\n" +"+2 Accuracy, +10% damage.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Cornered Predator" +msgstr "" + +#. ~ Description of buff 'Cornered Predator' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"A cornered animal is a terrifying and dangerous creature. You are no different.\n" +"\n" +"-20% move cost.\n" +"Lasts 1 turn." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Blood In The Water" +msgstr "" + +#. ~ Description of buff 'Blood In The Water' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +#, no-python-format +msgid "" +"The smell of blood drives you into a fury. You want more. NOW!\n" +"\n" +"+1 Accuracy, +15% damage.\n" +"Lasts 1 turn. Stacks 2 times." +msgstr "" + +#: lang/json/martial_art_from_json.py +msgid "Prey on the Weak" +msgstr "" + +#. ~ Description of buff 'Prey on the Weak' for martial art '{'str': 'Tiger +#. Claw'}' +#: lang/json/martial_art_from_json.py +msgid "" +"You scythe through weaker foes like a mighty predator turned loose among a herd of prey.\n" +"\n" +"+30 Speed.\n" +"Lasts 2 turns. Stacks 2 times" +msgstr "" + #: lang/json/material_from_json.py src/bionics.cpp msgid "Alcohol" msgstr "酒類" @@ -112614,7 +114172,7 @@ msgid "Emulsified Hydrogel" msgstr "" #: lang/json/material_from_json.py -msgid "pupled" +msgid "pulped" msgstr "" #: lang/json/material_from_json.py @@ -114320,7 +115878,7 @@ msgid "Can you go find my son and tell him to check in with us." msgstr "" #: lang/json/mission_def_from_json.py lang/json/mission_def_from_json.py -#: lang/json/talk_topic_from_json.py +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py msgid "Thank you." msgstr "謝謝你。" @@ -114612,7 +116170,7 @@ msgstr "" #: lang/json/mission_def_from_json.py msgid "" -"We could use some 3 liter jars to preserve our produce. Can you bring me 20" +"We could use some 3 liter jars to preserve our produce. Can you bring me 10" " large three liter jars? I'll give you some preserves in exchange." msgstr "" @@ -116363,6 +117921,87 @@ msgstr "耶,當然。" msgid "Well I'll have to scavenge the gold myself, thanks for nothing." msgstr "好吧,我必須自己搜刮黃金,不勞您費神。" +#: lang/json/mission_def_from_json.py +msgid "Active Noise Control" +msgstr "" + +#. ~ Description for mission 'Active Noise Control' +#: lang/json/mission_def_from_json.py +msgid "" +"Investigate Hub 01's radio tower, discover the source of the interference, " +"and fix the problem." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"A few days ago, I installed a radio transmitter in the nearby tower, but it " +"stopped working recently. If you are willing to be my back up while I check" +" it out, I'll owe you a favor." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Alright, lets be off. You don't mind taking point, right?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well thanks for offering, I guess." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I'm sure we'll figure it out once there. In any case, make sure to shoot " +"first." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You think we killed the culprit?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure seems like it. Lets go back to the hub." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Sure, thanks for nothing." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01" +msgstr "" + +#. ~ Description for mission 'Return to Hub 01' +#: lang/json/mission_def_from_json.py +msgid "Return to Hub 01." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Lets go back to the Hub" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Well…" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "You keep a map around don't you? I do, and you probably should too." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "We there yet?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Thanks for having my back. As I said, I owe you one." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Are you lost or something?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Can't believe we got lost…" +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Make 2 Stills" msgstr "製作 2 個蒸餾器" @@ -116500,6 +118139,8 @@ msgid "" "half and construction. If you don't have a truck, I'd make finding one your" " first priority. " msgstr "" +"我們的首要目標是把穀倉圍起來, 讓難民們有一個安全的地方睡覺。在開始工程之前, 我們需要大量的木材作準備。封閉穀倉的四個入口需要接近 400 塊角材… " +"如果你能提供一半的木材, 我們有辦法搞定另外一半還有完成建造。如果你沒有卡車的話, 我想你要先找一台。" #: lang/json/mission_def_from_json.py msgid "" @@ -116586,6 +118227,9 @@ msgid "" "is salt. I negotiated them down from 500 units to 300… we were hoping you " "might have access to a source." msgstr "" +"我想你也注意到新的工人開始流入這裡。由於資源有限, 自由商人議會要求我們要開始項目以達到自給自足。為免在毫無支援和準備的情況下面臨冬天和飢荒, " +"我們需要迅速建立一個農業產業。我們會通過以物易物的方式獲得半打鏟子和兩大包種子。交易已經談好了, 但他們唯一願意接受的貨物就是鹽。我已經通過談判將數量從" +" 500 份降到 300 份了… 我們希望你能夠取得這些資源。" #: lang/json/mission_def_from_json.py msgid "" @@ -116627,7 +118271,7 @@ msgstr "" msgid "" "I don't know the exact recipe but I'm sure you could make it from a " "commercial fertilizer or produce it from bonemeal." -msgstr "" +msgstr "我不知道確切的配方,不過我很確定你可以用商用肥料或是骨粉來製造它。" #: lang/json/mission_def_from_json.py msgid "I'd look through a few basic chemistry books to find a simple recipe." @@ -117654,6 +119298,54 @@ msgstr "" msgid "I can't be Dr Frankenstein unless you get me these." msgstr "" +#: lang/json/mission_def_from_json.py +msgid "Gather meat for Bo Baronyx. About 8 should do it." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters are hungry. They need meat" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"If you wish to feed the eaters, your work will be rewarded. Go out, butcher" +" a pure animal. Not a false eater, the meat must be good to eat. Then " +"bring me the meat and I will see to the eaters." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Excellent. The eaters must feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Understood. The great eaters will feed either way." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"Some of the animals have become touched by the pretenders in recent days, " +"larger and more dangerous, producing tainted mutant meat. This will not " +"work for the great eaters, it must be the true meat." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "Have you brought meat?" +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "The eaters will feed I am sure." +msgstr "" + +#: lang/json/mission_def_from_json.py +msgid "" +"I see no meat. There is meat in the forests and swamps waiting for the " +"eaters." +msgstr "" + #: lang/json/mission_def_from_json.py msgid "Retrieve Magic Book" msgstr "" @@ -119970,6 +121662,23 @@ msgid "" "footing." msgstr "你移動得比一般人快, 站穩時得到 15% 的速度加成。" +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore" +msgstr "" + +#. ~ Description for {'str': 'Reflex Photophore'} +#. ~ Description for {'str': 'Reflex Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "" +"A photophore has grown from your head. You can't consciously control it, " +"and it might start to shine in response to your emotions or your " +"physiological state." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Reflex Photophore (on)" +msgstr "" + #: lang/json/mutation_from_json.py msgid "Weak Photophore" msgstr "" @@ -119982,13 +121691,50 @@ msgid "" "mating season." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Weak Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Weak Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "Your photophore is glowing softly." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Photophore" msgstr "" #. ~ Description for {'str': 'Photophore'} #: lang/json/mutation_from_json.py -msgid "Your can make your photophore glow brightly." +msgid "You can make your photophore glow brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Photophore (on)" +msgstr "" + +#. ~ Description for {'str': 'Photophore (on)'} +#: lang/json/mutation_from_json.py +msgid "You photophore is glowing brightly." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Normal Human" +msgstr "" + +#. ~ Description for {'str': 'Normal Human'} +#: lang/json/mutation_from_json.py +msgid "" +"You're a normal human, there's nothing wrong with you. No need to worry." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Violent Monster" +msgstr "" + +#. ~ Description for {'str': 'Violent Monster'} +#: lang/json/mutation_from_json.py +msgid "Anger clouds your mind, you can't think straight but you feel strong." msgstr "" #: lang/json/mutation_from_json.py @@ -120083,10 +121829,12 @@ msgstr "快速痊癒" #. ~ Description for {'str': 'Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You heal faster when sleeping and will even recover a small amount of HP " -"when not sleeping." -msgstr "你在睡眠時會痊癒得比平時快, 甚至在醒著時也能恢復少量的 HP。" +"Your wounds heal themselves quicker than usual. You heal 50% faster whilst " +"asleep and 20% faster whilst awake. Your broken limbs also heal twice as " +"fast." +msgstr "" #: lang/json/mutation_from_json.py msgid "Light Eater" @@ -120712,8 +122460,11 @@ msgstr "復原慢" #. ~ Description for {'str': 'Slow Healer'} #: lang/json/mutation_from_json.py -msgid "You heal a little slower than most; sleeping will heal less HP." -msgstr "你的復原能力比一般人差了點;睡眠時回復的生命值比較少。" +#, no-python-format +msgid "" +"Your wounds heal a little slower than most. Your HP whilst asleep as well " +"as your broken limbs heal at 75% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Poor Healer" @@ -120721,10 +122472,11 @@ msgstr "復原差劣" #. ~ Description for {'str': 'Poor Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your health recovery through sleeping is severely impaired and causes you to" -" recover only a third of usual HP." -msgstr "你透過睡眠的健康復原力被嚴重減弱,使你只能恢復平常三分之一的HP。" +"Your health recovery is severely impaired. Your HP whilst asleep as well as" +" your broken limbs heal at 33% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Imperceptive Healer" @@ -120732,10 +122484,11 @@ msgstr "復原無感" #. ~ Description for {'str': 'Imperceptive Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"You recover barely any health through sleeping - it will heal only one tenth" -" of usual HP." -msgstr "你在睡眠時只能僅僅恢復健康 - 它只會恢復平常十分之一的HP" +"Wounds are incredibly dangerous to you, as they barely heal at all. Your HP" +" whilst asleep as well as your broken limbs heal at 10% the regular rate." +msgstr "" #: lang/json/mutation_from_json.py msgid "Far-Sighted" @@ -120788,7 +122541,7 @@ msgstr "背痛" msgid "" "You simply cannot carry as much as people with a similar strength could. " "Your maximum weight carried is reduced by 35%." -msgstr "" +msgstr "你就是沒法像一般人一樣搬運這麼多東西。你的最大負重量減少 35% 。" #: lang/json/mutation_from_json.py msgid "Bad Temper" @@ -121444,10 +123197,11 @@ msgstr "高速痊癒" #. ~ Description for {'str': 'Very Fast Healer'} #: lang/json/mutation_from_json.py +#, no-python-format msgid "" -"Your flesh regenerates slowly, and you will regain HP even when not " -"sleeping." -msgstr "你的血肉能夠緩慢的再生, 不論你是否在睡覺, HP都會慢慢回復。" +"Your wounds heal very quickly. You heal 50% faster whilst asleep and 66% " +"faster whilst awake. Your broken limbs also heal 4 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Regeneration" @@ -121455,8 +123209,12 @@ msgstr "再生" #. ~ Description for {'str': 'Regeneration'} #: lang/json/mutation_from_json.py -msgid "Your flesh regenerates from wounds incredibly quickly." -msgstr "你的血肉能夠以不可思議的速度再生。" +#, no-python-format +msgid "" +"Your flesh regenerates from wounds incredibly quickly. You heal 150% faster" +" whilst asleep and 200% faster whilst awake. Your broken limbs also heal 16" +" times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Reptilian Healing" @@ -121464,8 +123222,10 @@ msgstr "爬蟲類癒合" #. ~ Description for {'str': 'Reptilian Healing'} #: lang/json/mutation_from_json.py -msgid "Your broken limbs mend themselves without significant difficulty." -msgstr "你的斷肢開始自行復原了, 沒有大礙。" +msgid "" +"Your broken limbs mend themselves without significant difficulty. You do " +"not require splints and broken limbs heal 20 times faster than usual." +msgstr "" #: lang/json/mutation_from_json.py msgid "Very Little Sleep" @@ -125554,7 +127314,8 @@ msgstr "" #. ~ Description for {'str': 'Fast Reflexes'} #: lang/json/mutation_from_json.py -msgid "You have fast reflexes, allowing you to dodge attacks more easily." +msgid "" +"You have fast reflexes, allowing you to dodge attacks and grabs more easily." msgstr "" #: lang/json/mutation_from_json.py @@ -126779,6 +128540,28 @@ msgid "" "improves as your unarmed skill increases." msgstr "" +#: lang/json/mutation_from_json.py +msgid "Jedi Training" +msgstr "" + +#. ~ Description for {'str': 'Jedi Training'} +#: lang/json/mutation_from_json.py +msgid "" +"You are trained in the ways of the Jedi. Your knowledge allows you to " +"utilize a form of lightsaber combat." +msgstr "" + +#: lang/json/mutation_from_json.py +msgid "Pokken Master" +msgstr "" + +#. ~ Description for {'str': 'Pokken Master'} +#: lang/json/mutation_from_json.py +msgid "" +"You are well versed in the monsterous Pocket Fist martial art. Train well, " +"because it is your destiny to be a master." +msgstr "" + #: lang/json/mutation_from_json.py msgid "Martial Adept" msgstr "" @@ -126787,7 +128570,8 @@ msgstr "" #: lang/json/mutation_from_json.py msgid "" "You are a martial adept and learned one of the martial disciplines of the " -"Sublime Way." +"Sublime Way. You start with your choice of Desert Wind, Diamond Mind, Iron " +"Heart, Setting Sun, Stone Dragon, or Tiger Claw." msgstr "" #: lang/json/mutation_from_json.py @@ -127771,6 +129555,14 @@ msgstr "" msgid "Humans created me. Let's see what I can be on my own." msgstr "" +#: lang/json/npc_class_from_json.py +msgid "Swamper" +msgstr "" + +#: lang/json/npc_class_from_json.py +msgid "The great eaters have returned and they must be fed" +msgstr "" + #: lang/json/npc_class_from_json.py msgid "Operator" msgstr "特種部隊" @@ -128056,6 +129848,14 @@ msgstr "" msgid "Millyficen Whately" msgstr "" +#: lang/json/npc_from_json.py +msgid "CEO" +msgstr "" + +#: lang/json/npc_from_json.py +msgid "Bo Baronyx" +msgstr "" + #: lang/json/npc_from_json.py msgid "magus" msgstr "" @@ -135415,6 +137215,118 @@ msgid "" "time before the horrors patrolling the skies shot you down." msgstr "" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "EMT" +msgstr "" + +#. ~ Profession (male EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "EMT" +msgstr "" + +#. ~ Profession (female EMT) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were responding to a call with your partner before you got separated. " +"Now all you have is your trusty ambulance, ready to transport patients " +"through the apocalypse." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (male Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Paramedic" +msgstr "" + +#. ~ Profession (female Paramedic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were separated from your partner while out on a call. You managed to " +"hang onto some medical supplies, but it's looking like the only life that " +"needs saving now is yours." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (male Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Combat Medic" +msgstr "" + +#. ~ Profession (female Combat Medic) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were on the front-lines when everything happened, patching up the " +"wounded and providing support. But they wouldn't stop coming. Now you're " +"on your own." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (male Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Heroin Addict" +msgstr "" + +#. ~ Profession (female Heroin Addict) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"The last thing you remember was meeting God behind the local Foodplace. " +"Then people started eating each other. This doesn't feel like a fever " +"dream." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Radio Tower Technician" @@ -135583,8 +137495,9 @@ msgstr "" msgctxt "prof_desc_male" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -135597,8 +137510,9 @@ msgstr "" msgctxt "prof_desc_female" msgid "" "You worked as a technician in a sterile, high-security facility concerned " -"with the fabrication of bionic implants. Armed with the solderers in your " -"hands, and aided by precise machines, you earned great pay." +"with the fabrication of bionic implants. The final evacuation order caught " +"you in the middle of your 16 hour extended shift, and you barely managed to " +"escape the building, tools in hand." msgstr "" #: lang/json/professions_from_json.py @@ -136843,6 +138757,226 @@ msgid "" "find some other use." msgstr "在最近的大災變中,你發現的在測試中作弊的方式可能需要找到其他用途。" +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (male Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Introspectionist" +msgstr "" + +#. ~ Profession (female Introspectionist) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You segregated yourself from society because you wanted to concentrate on " +"improving yourself. It was you and your best friend, but now the apocalypse" +" won't leave you alone. " +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (male Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Vengeful Preacher" +msgstr "" + +#. ~ Profession (female Vengeful Preacher) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You lost your faith when your spouse died of illness. You've been drinking " +"yourself to death ever since. God is punishing everyone with this " +"apocalypse, you are going to show them your brand of mercy." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (male Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Techno-Prepper" +msgstr "" + +#. ~ Profession (female Techno-Prepper) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long suspected the world might suddenly turn over. With your " +"training, spells, and revolver, your chances are far better than most." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (male Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Bionic Pseudovamp" +msgstr "" + +#. ~ Profession (female Bionic Pseudovamp) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've long had an obsession with horror novels, and used your wealth to " +"augment yourself with spells and bionics into a denizen of the night. Your " +"neglect to your health in your pursuit has left you pale and unlively." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (male Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Academy Wizard" +msgstr "" + +#. ~ Profession (female Academy Wizard) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"A year of enrollment in a wizard's academy has taught you patience, wisdom, " +"and a handful of useful spells. With the teachers converted into the undead " +"and classes cancelled, the final lesson has begun." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (male Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Corrosive Rocker" +msgstr "" + +#. ~ Profession (female Corrosive Rocker) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"Your metal career soared to new heights when you swapped special effects for" +" acrid gore and spiked whips. It seems the Cataclysm is now your final tour." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (male Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Shock Officer" +msgstr "" + +#. ~ Profession (female Shock Officer) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You were enrolled in a experimental law enforcement program designed to " +"decrease suspect casualties and equipment costs by substituting tasers and " +"bullets for less-lethal Stormshaping." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_male" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (male Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_male" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + +#: lang/json/professions_from_json.py +msgctxt "profession_female" +msgid "Earthquake Brawler" +msgstr "" + +#. ~ Profession (female Earthquake Brawler) description +#: lang/json/professions_from_json.py +msgctxt "prof_desc_female" +msgid "" +"You've made a name for yourself in underground magic boxing rings as an " +"unstoppable punching machine. Now that all your opponents are undead, " +"there's no need to hold back." +msgstr "" + #: lang/json/professions_from_json.py msgctxt "profession_male" msgid "Sugar Boy" @@ -138515,8 +140649,8 @@ msgid "build a metalworking forge" msgstr "建造金屬加工鍛造爐" #: lang/json/recipe_from_json.py -msgid "Let's an an anvil and crucible to increase our crafting options." -msgstr "讓我們用鐵砧和坩堝來增加我們製作的選項吧。" +msgid "Let's build an anvil and crucible to increase our crafting options." +msgstr "" #: lang/json/recipe_from_json.py msgid "add an anvil and crucible" @@ -142757,6 +144891,40 @@ msgctxt "start_name" msgid "Wizard's Retreat Vacation" msgstr "" +#. ~ Name for scenario 'Exile' for a male character +#: lang/json/scenario_from_json.py +msgctxt "scenario_male" +msgid "Exile" +msgstr "" + +#. ~ Name for scenario 'Exile' for a female character +#: lang/json/scenario_from_json.py +msgctxt "scenario_female" +msgid "Exile" +msgstr "" + +#. ~ Description for scenario 'Exile' for a male character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_male" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Description for scenario 'Exile' for a female character. +#: lang/json/scenario_from_json.py +msgctxt "scen_desc_female" +msgid "" +"You are an exile, whether because of people shunning you because of who you " +"are or from a personal choice. The dead aren't willing to leave you be." +msgstr "" + +#. ~ Starting location for scenario 'Exile'. +#: lang/json/scenario_from_json.py +msgctxt "start_name" +msgid "Exiled" +msgstr "" + #. ~ Name for scenario 'The Sweet Life' for a male character #: lang/json/scenario_from_json.py msgctxt "scenario_male" @@ -144040,7 +146208,7 @@ msgid "" "First aid 101 for you. Always bandage your wounds, they will heal faster " "that way. Bandages are plenty and you can make makeshift ones easily, so " "there is no reason not to." -msgstr "" +msgstr "告訴你一個急救入門守則。一定要包紮你的傷口,這樣才會好得快。繃帶到處都有再說粗製繃帶很容易就能自己做,所以沒有理由不包紮。" #: lang/json/snippet_from_json.py msgid "" @@ -144337,7 +146505,7 @@ msgstr "" msgid "" "Some days are full of sadness. Reading can help, if you have the right " "book." -msgstr "" +msgstr "有時日子太苦了。閱讀能讓你好過點,如果有合適的書。" #: lang/json/snippet_from_json.py msgid "" @@ -147241,7 +149409,7 @@ msgstr "" #: lang/json/snippet_from_json.py msgid "I hope these bandages work." -msgstr "" +msgstr "希望這些繃帶會有用。" #: lang/json/snippet_from_json.py msgid "I think I need to see a doctor. They're all dead, I hope these work." @@ -152427,6 +154595,326 @@ msgstr "-風格" msgid "-chant" msgstr "-唱腔" +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. It has an unsettling loose and spongy " +"texture, but smells… mostly normal. There are strange tangles and " +"formations in it that don't appear natural at all: bits of bone and hair " +"crusted up inside the muscle, as if trying to form another organism. Still," +" seems digestible at least, if you cook it and remove the worst parts." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although it came from muscle tissue, it" +" has a curious swirling grain pattern, and at the center of each grain is a " +"knot of hard, cartilaginous tissue. It smells offputting." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. This is from muscle, but in the fascial" +" tissue between the muscles, thick spiny hairs have grown. Foul smelling, " +"cream-colored fluid gushes out whenever a hair pulls loose." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Meat from a heavily mutated animal. Although this came from muscle, it has " +"a thick cordlike texture and smells like leather and bread mold." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. It has an unsettling," +" spongy texture, but otherwise tastes… mostly normal. Hopefully you got all" +" the bits of hair and bone out…" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. You thought you'd " +"cleared out all the gross parts, but while cooking, a fluid-filled sac " +"inside burst and covered it in some kind of thick grease." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. The surface is " +"peppered with divets from the pieces you had to dig out to make it seem " +"edible." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a cooked chunk of meat from a mutated animal. Heat caused the " +"muscles to twist and move as if they were alive, and now it has writhed " +"itself into a dense knot." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug, and you really aren't sure what " +"to make of them. There are things you've never seen in any anatomy book, " +"with spines and hair and other unidentified parts protruding off seemingly " +"at random." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"These organs came from a giant mutant bug. They have a sickly green color, " +"and one of them ripped when you were removing it, revealing an inner surface" +" that looks like row upon row of human fingers, nails and all." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a huge, thick, fleshy sac you removed from a giant mutant bug. The " +"surface is covered in smooth, soft skin, and beneath it is a coiled, twisted" +" mess of cordlike tissue." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a long, corded organ you removed from a giant mutant bug. It ran " +"from the head to the abdomen and has long tendrils coming off it, not unlike" +" a spinal cord." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This is a meaty grey organ you removed from a mutant. It has a chalky " +"yellow coating that burns your skin, and several unidentifiable fleshy tubes" +" sticking out of it. The smell it gives off stings your nostrils. You're " +"pretty confident no natural creature has one of these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"This organ meat, retrieved from a mutated creature, looks like a series of " +"small mammalian hearts arranged in series on a long fleshy tube. At the end" +" of the chain is a large fleshy sac resembling a stomach." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It looks like a lung from a larger " +"mammal, like a dog, but instead of a few distinct lobes, it has dozens of " +"lobes arranged in sheets. Strange spindles and gnarled tumescences dot the " +"surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You're pretty sure this is lung tissue. It has a vaguely wing-like shape, " +"with a series of nodules around what would be the trailing edge of the " +"'wing'. A cluster of quills in each corner of the organ held it to the " +"bug's carapace like clasps." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton, but mutated. The inner side is lined with " +"veins and strange hooked protuberances." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of a bug's exoskeleton. Stringy lines of nervous tissue and blood " +"vessels still cling to the inner surface." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A piece of rigid, tube-shaped chitin from the inside of a giant bug. It " +"seemed to be performing some kind of support role. You're quite sure normal" +" insects don't have these." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"A long, flexible rod of chitin from inside a giant mutant bug. It is laced " +"with blood vessels and chitinous nodules." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"As you peel away the outer shell, you find veins lining the chitin plates" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "With the creature dead, its carapace comes away surprisingly easily" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"There's a thin membrane, much like skin, spread over the chitin of this " +"creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Under the carapace of this mutant is a bristly, velcro-like material" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The anatomy concealed beneath seems almost like a small mammal given a shell" +" and twisted into the shape of an arthropod" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "You crack the beast open like a horrific lobster" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The chitin holds tight to the creature, and you need to snap and tear it " +"away, sawing at tough fibers beneath" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside, half-formed organs press against spongy meat that doesn't look " +"anything like raw arthropod meat from normal creatures" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You find a collection of hooked spines beneath that seem to have been " +"clasping it on somehow" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a complex, still-squirming mess of strange appendages and organs " +"that bear only a passing resemblance to any natural creature" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Beneath the chitin, the meat is covered in thick, bristly hair hiding a " +"chaotic bramble of half-formed, mutated organs" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside is a tangled mess of organs and tissues that do not appear to " +"entirely natural" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Inside the creature you find lungs, hearts, and intestines more like a " +"mammal than a giant bug" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The meat inside gives off a horrifying stench, and seems to be covered in " +"thin damp hair, like a newborn animal gone horribly wrong" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Small bundles of fiber break loose as you work, splitting open to reveal " +"twisted, half-formed copies of the creature itself" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"It is difficult to work, as the spongey tissue tears apart under your tools" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Steaming puddles of acid spill from its outer shell as you pull it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "Steaming acid burbles from the creature's chitin as you peel it back" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several acid glands rupture as you peel back the carapace, sending streams " +"of steaming caustic fluids spraying around" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The organs themselves have an acrid odour, but don't seem as caustically " +"acidic as the outer shell" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"You carefully avoid breaking through pockets of what you think may be acid-" +"secreting glands" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Thick, ropey cords of tissue beneath its chitin protect an inner layer of " +"strange organs, resembling those of a bird more than anything" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The powerfully acidic vapors coming from the carcass make it hard to work" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"The tissues of the creature are full of half-formed organs, their purpose " +"unclear" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +"Several times, you nearly burn yourself piercing a concealed gland full of " +"acid" +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid ". ." +msgstr "" + +#: lang/json/snippet_from_json.py +msgid "" +". . " +"." +msgstr "" + #: lang/json/snippet_from_json.py msgid "" "ATOMIC DEREGULATION! President Toffer announced to a mixed crowd today that" @@ -160360,6 +162848,10 @@ msgstr "" msgid "Middle of Nowhere" msgstr "中途" +#: lang/json/start_location_from_json.py +msgid "Desert Island" +msgstr "" + #: lang/json/start_location_from_json.py msgid "Experiment Cell" msgstr "實驗品牢房" @@ -160656,6 +163148,12 @@ msgstr "" msgid "Yeah, alright." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"The song is… quiet for now. Perhaps with time, more notes will be etched in" +" the bones of this world." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "An acolyte should not take on too many songs at once." msgstr "" @@ -160665,9 +163163,7 @@ msgid "That is all for now." msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" -"The song is… quiet for now. Perhaps with time, more notes will be etched in" -" the bones of this world." +msgid "There are bones to etch, songs to sing. Wish to join me?" msgstr "" #: lang/json/talk_topic_from_json.py @@ -160679,7 +163175,7 @@ msgid "Do you believe you can take on the burden of additional bones?" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "There are bones to etch, songs to sing. Wish to join me?" +msgid "A song may yet be sung by you, should you wish to." msgstr "" #: lang/json/talk_topic_from_json.py @@ -160691,10 +163187,6 @@ msgid "" "I know of certain bones that could be of use, if you'd like to know more." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "A song may yet be sung by you, should you wish to." -msgstr "" - #: lang/json/talk_topic_from_json.py msgid "I see." msgstr "我懂了。" @@ -161292,14 +163784,14 @@ msgstr "" msgid "no, go back to sleep." msgstr "" -#: lang/json/talk_topic_from_json.py -msgid "What is it, friend?" -msgstr "什麼事,朋友?" - #: lang/json/talk_topic_from_json.py msgid " *pshhhttt* I'm reading you boss, over." msgstr "\"滋滋扑滋\" 我正聽著呢,老大,完畢。" +#: lang/json/talk_topic_from_json.py +msgid "What is it, friend?" +msgstr "什麼事,朋友?" + #: lang/json/talk_topic_from_json.py msgid "I want to give you some commands for combat." msgstr "我想給你一些戰鬥命令。" @@ -161536,15 +164028,15 @@ msgstr "自由移動到與敵人交戰的地方。" msgid "Hold the line: don't move onto obstacles adjacent to me." msgstr "保持戰線:不要移動到與我相鄰的障礙物上。" -#: lang/json/talk_topic_from_json.py src/action.cpp src/activity_handlers.cpp -#: src/avatar.cpp src/avatar.cpp src/avatar_action.cpp src/avatar_action.cpp -#: src/avatar_action.cpp src/crafting.cpp src/game.cpp src/handle_action.cpp -#: src/handle_action.cpp src/handle_liquid.cpp src/handle_liquid.cpp -#: src/iexamine.cpp src/iexamine.cpp src/iexamine.cpp src/iuse.cpp -#: src/iuse.cpp src/iuse.cpp src/iuse_actor.cpp src/iuse_actor.cpp -#: src/iuse_actor.cpp src/monexamine.cpp src/monexamine.cpp src/npc.cpp -#: src/pickup.cpp src/player.cpp src/player.cpp src/player.cpp -#: src/veh_interact.cpp src/vehicle_use.cpp +#: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py +#: src/action.cpp src/activity_handlers.cpp src/avatar.cpp src/avatar.cpp +#: src/avatar_action.cpp src/avatar_action.cpp src/crafting.cpp +#: src/crafting.cpp src/game.cpp src/handle_action.cpp src/handle_action.cpp +#: src/handle_liquid.cpp src/handle_liquid.cpp src/iexamine.cpp +#: src/iexamine.cpp src/iexamine.cpp src/iuse.cpp src/iuse.cpp src/iuse.cpp +#: src/iuse_actor.cpp src/iuse_actor.cpp src/iuse_actor.cpp src/monexamine.cpp +#: src/monexamine.cpp src/npc.cpp src/pickup.cpp src/player.cpp src/player.cpp +#: src/player.cpp src/veh_interact.cpp src/vehicle_use.cpp msgid "Never mind." msgstr "沒事。" @@ -161749,11 +164241,11 @@ msgid "OVERRIDE: " msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" +msgid "" msgstr "" #: lang/json/talk_topic_from_json.py -msgid "" +msgid "" msgstr "" #: lang/json/talk_topic_from_json.py @@ -162111,14 +164603,14 @@ msgstr "很好, 別突然亂動…" msgid "Keep your distance!" msgstr "保持你的距離!" -#: lang/json/talk_topic_from_json.py -msgid "This is my territory, ." -msgstr "這是我的地盤,。" - #: lang/json/talk_topic_from_json.py msgid "" msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "This is my territory, ." +msgstr "這是我的地盤,。" + #: lang/json/talk_topic_from_json.py msgid "Calm down. I'm not going to hurt you." msgstr "冷靜點。我不會傷害你。" @@ -162171,30 +164663,30 @@ msgstr "怎麼了?" msgid "I don't care." msgstr "我不在乎。" -#: lang/json/talk_topic_from_json.py -msgid "I don't have any more jobs for you." -msgstr "我已經沒有可以給你辦的工作了。" - #: lang/json/talk_topic_from_json.py msgid "I don't have any jobs for you." msgstr "我沒有可以給你的工作。" #: lang/json/talk_topic_from_json.py -msgid "I have more jobs for you. Want to hear about them?" -msgstr "我有更多的工作給你。想要聽看看嗎?" +msgid "I don't have any more jobs for you." +msgstr "我已經沒有可以給你辦的工作了。" #: lang/json/talk_topic_from_json.py msgid "I have other jobs for you. Want to hear about them?" msgstr "我有其他的工作給你。想要聽看看嗎?" #: lang/json/talk_topic_from_json.py -msgid "I just have one job for you. Want to hear about it?" -msgstr "我只有一件工作給你。想要聽看看嗎?" +msgid "I have more jobs for you. Want to hear about them?" +msgstr "我有更多的工作給你。想要聽看看嗎?" #: lang/json/talk_topic_from_json.py msgid "I have another job for you. Want to hear about it?" msgstr "我有另一件工作給你。想要聽看看嗎?" +#: lang/json/talk_topic_from_json.py +msgid "I just have one job for you. Want to hear about it?" +msgstr "我只有一件工作給你。想要聽看看嗎?" + #: lang/json/talk_topic_from_json.py lang/json/talk_topic_from_json.py #: src/npctalk.cpp msgid "Oh, okay." @@ -162204,6 +164696,10 @@ msgstr "喔, 好吧。" msgid "Never mind, I'm not interested." msgstr "別在意, 我沒興趣。" +#: lang/json/talk_topic_from_json.py +msgid "You're not working on anything for me now." +msgstr "你現在並沒有幫我做任何工作。" + #: lang/json/talk_topic_from_json.py msgid "Which job?" msgstr "哪件工作?" @@ -162212,10 +164708,6 @@ msgstr "哪件工作?" msgid "What about it?" msgstr "這樣如何?" -#: lang/json/talk_topic_from_json.py -msgid "You're not working on anything for me now." -msgstr "你現在並沒有幫我做任何工作。" - #: lang/json/talk_topic_from_json.py msgid "I'll do it!" msgstr "我會做的!" @@ -162424,6 +164916,10 @@ msgstr "嗯, 好吧。" msgid "Thanks!" msgstr "謝謝!" +#: lang/json/talk_topic_from_json.py +msgid "Focus on the road, mate!" +msgstr "專心路況,夥伴!" + #: lang/json/talk_topic_from_json.py msgid "I must focus on the road!" msgstr "我必須專心路況!" @@ -162448,10 +164944,6 @@ msgstr "" msgid "I have some reason for not telling you." msgstr "我有些苦衷,不能告訴你。" -#: lang/json/talk_topic_from_json.py -msgid "Focus on the road, mate!" -msgstr "專心路況,夥伴!" - #: lang/json/talk_topic_from_json.py msgid "Ah, okay." msgstr "啊,好的。" @@ -162556,6 +165048,10 @@ msgstr "不, 我待在這就好了。" msgid "On second thought, never mind." msgstr "我再想想, 抱歉。" +#: lang/json/talk_topic_from_json.py +msgid "I can't train you properly while you're operating a vehicle!" +msgstr "你在駕駛車輛時我無法訓練你。" + #: lang/json/talk_topic_from_json.py msgid "I can't train you properly while I'm operating a vehicle!" msgstr "我在駕駛車輛時無法訓練你。" @@ -162568,10 +165064,6 @@ msgstr "給我點時間, 我會讓你看些新玩意…" msgid "I have some reason for denying you training." msgstr "我有些苦衷,不能接受你的訓練。" -#: lang/json/talk_topic_from_json.py -msgid "I can't train you properly while you're operating a vehicle!" -msgstr "你在駕駛車輛時我無法訓練你。" - #: lang/json/talk_topic_from_json.py msgid "Not a bloody chance, I'm going to get left behind!" msgstr "我才不要, 我會被丟在後面沒人理!" @@ -168399,15 +170891,15 @@ msgstr "好的,我也會和他們談談。" msgid "All right! Let's get going." msgstr "好! 我們走吧。" +#: lang/json/talk_topic_from_json.py +msgid "We've done it! We've solved the list!" +msgstr "我們做到了!我們已經完成這個清單!" + #: lang/json/talk_topic_from_json.py msgid "" "How's things with you? My cardboard collection is getting quite impressive." msgstr "你好嗎?我的紙板收藏已經相當可觀了。" -#: lang/json/talk_topic_from_json.py -msgid "We've done it! We've solved the list!" -msgstr "我們做到了!我們已經完成這個清單!" - #: lang/json/talk_topic_from_json.py msgid "Have I told you about cardboard, friend? Do you have any?" msgstr "朋友,我告訴過你關於硬紙板的事嗎?你有硬紙板嗎?" @@ -172826,6 +175318,18 @@ msgstr "" msgid "Got it." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "Better keep our eyes on the road." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Better be careful around here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes?" +msgstr "嗯?" + #: lang/json/talk_topic_from_json.py msgid "Something to say?" msgstr "有話要說嗎?" @@ -172838,14 +175342,14 @@ msgstr "" msgid "Hey." msgstr "嗨!" -#: lang/json/talk_topic_from_json.py -msgid "Yes?" -msgstr "嗯?" - #: lang/json/talk_topic_from_json.py msgid "Good to see you." msgstr "很高興見到你。" +#: lang/json/talk_topic_from_json.py +msgid "About those jobs…" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Good to see you around." msgstr "很高興有機會再見到你。" @@ -172855,8 +175359,8 @@ msgid "Want help with something else?" msgstr "需要其他幫助嗎?" #: lang/json/talk_topic_from_json.py -msgid "Never mind, I was about to leave." -msgstr "沒關係,我正要離開。" +msgid "Lets set a combat strategy" +msgstr "" #: lang/json/talk_topic_from_json.py msgid "" @@ -172909,6 +175413,10 @@ msgstr "有什麼有趣的事嗎?" msgid "Anything on your mind?" msgstr "你有什麼想法嗎?" +#: lang/json/talk_topic_from_json.py +msgid "Want help with something?" +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "What do you know about our employers?" msgstr "你對我們的雇主了解多少?" @@ -173917,6 +176425,263 @@ msgstr "" msgid "Now I choose the cause I'll die for." msgstr "" +#: lang/json/talk_topic_from_json.py +msgid "" +"Yes. I ask because I noticed there are dinosaurs around. Do you know " +"anything about that?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"I know all kinds of weird useless stuff. I've seen things at churches, I've" +" seen things on farms, I've seen whole exhibits way out. Those Swampers, " +"they know what's happening. They're creatures of light come back to save us" +" all. Or eat us, I forget." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters will be fed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Welcome. Are you hungry friend?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You look hungry friend. So much hunger in this world. This is the time of " +"the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Hello. Who are the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So about the eaters…" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You mentioned some pretenders before. What does that mean?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Is there a way I can help feed the eaters?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I have to get going. Take care, CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters have returned, along with the false ones. We must feed the" +" eaters and destroy the pretenders child." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are you talking about?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No thank you, I'd like to leave now." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"This Cataclysm has woken the great eaters, lost in time, returned them to " +"the world to do their great work, to multiply and fill the land with their " +"song. The time of man is over, but we few who remain can do our part to " +"protect this new world from the pretenders, who would steal the meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "So what do you do with the meat?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Who are the great eaters and the pretenders?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Are there any others left?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are the ones that were lost, what we call dinosaurs whose " +"meat we took and who are taking it back. The pretenders are those others " +"that have come to steal the meat of this world. It does not belong to them " +"and we will take it from their mouths." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Okay, so you worship dinosaurs. Understood." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The Swampers knew these times would return and we prepared for them. When " +"others wasted their time and meat, we fed and grew strong, and we filled our" +" stores with meat for this day." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes, very good." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You keep talking about meat. Why is meat so important?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The meat makes the great eaters strong. We gather the meat and feed them, " +"and in the end we too will serve the eaters in death as we do in life. This" +" was always our purpose and we lucky few have lived to see it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Our purpose? How do you know?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The return of the great eaters was fortold by a prophet. We faithful have " +"been waiting and preparing since the revelation." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I guess it must be nice to be proven right." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This is crazy." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You understand our purpose. I welcome you to this work, all are needed to " +"feed the eaters." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"You deny what you see right in front of you. This world is what was " +"fortold." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters have fed. They will be hungry again in time" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "You know what to do." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The great eaters must be fed. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is still more work to do. Are you ready?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is meat ready for the feeding. Are you ready to gather it?" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "The eaters are hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "There is more meat needed." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "I know of eaters ready for meat." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Maybe another time CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"If you are ready to be of service to the great eaters, go and find meat and " +"bring it back. There is always need for more." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Happy to be of service to the great eaters. I'm in." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Excellent. Make it happen." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"The great eaters are not picky, any pure meat will do, but mutant and " +"tainted meat are not good enough." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"So, meat from a creature that isn't a zombie, or a giant monster. Got it." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course, you should find everything you need here." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "That explains the knives then." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Oh, you know my friend Brigitte. Well in that case, let's go!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "No, I must remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Of course CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Sweet!" +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Not just now. You should remain here to oversee the company." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"Of course, the company will be ready when you are and the great eaters will " +"feed either way." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "" +"It was fortold that as the great eaters returned, so too would the " +"pretenders, who would come to steal the meat. Very little is asked of us, " +"except that we do all we can to ensure that the true great eaters received " +"as much meat as possible and the pretenders go hungry." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "Yes CEO Baronyx, very good CEO Baronyx." +msgstr "" + +#: lang/json/talk_topic_from_json.py +msgid "This makes no sense and I'm done talking about it." +msgstr "" + #: lang/json/talk_topic_from_json.py msgid "Heya, scav." msgstr "嘿,拾荒仔。" @@ -174448,10 +177213,6 @@ msgstr "你格擋了 %s" msgid " blocks %s" msgstr " 格擋了 %s" -#: lang/json/technique_from_json.py -msgid "Parry" -msgstr "格擋" - #. ~ Description for Parry #: lang/json/technique_from_json.py msgid "High blocking ability" @@ -176886,6 +179647,90 @@ msgstr "" msgid " unleashes a spin attack against %s and those nearby" msgstr "" +#: lang/json/technique_from_json.py +msgid "Disarming Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You skillfully disarm %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " skillfully disarms %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Lightning Recovery" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You miss %s but recover in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " misses %s but recovers in the blink of an eye" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Finishing Move" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You finish off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " finishes off %s with a powerful slash" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Dazing Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You harshly stun %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " harshly stuns %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Steel Wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleave through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleaves through %s and those nearby like a steel wind" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Scything Blade" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You cleanly reap through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " cleanly reap throug %s and those nearby" +msgstr "" + #: lang/json/technique_from_json.py msgid "Ausstoß" msgstr "" @@ -176942,6 +179787,216 @@ msgstr "" msgid " launches a supersonic punch at %s" msgstr "" +#: lang/json/technique_from_json.py +msgid "Mega Kick" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Mega Kick on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Darkest Lariat" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Darkest Lariat on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Smart Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Smart Strike on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Low Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You use Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " uses Low Sweep on %s" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Fool's Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely fool %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely fools %s and strike back" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Hydra Slaying Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " interrupt %s with a perfectly aimed strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You toss %s aside with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " tosses %s with a Mighty Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You spin and hurl %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " spins and hurls %s away with a Ballista Throw" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Flowing Water" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You deflect %s's attack and counter in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " deflects %s's attack and counters in one fluid motion" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Disarming Slash" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You disarm %s with a quick flick of your weapon" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " disarms %s with a quick flick of their weapon" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Sarlacc Sweep" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You quickly sweep through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " quickly sweeps through %s and those nearby" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You crush %s with the weight of your Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " crushes %s with the weight of their Mountain Hammer" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Irrestistible Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You smash down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " smashes down on %s with a Mountain Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "You completely shatter %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid " completely shatters %s with a Colossus Strike" +msgstr "" + +#: lang/json/technique_from_json.py +msgid "Wolverine Stance" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab you, but you thrash your way to freedom!" +msgstr "" + +#: lang/json/technique_from_json.py +#, python-format +msgid "The %s tries to grab , but they thrash their way to freedom!" +msgstr "" + #: lang/json/ter_furn_transform_messages_from_json.py msgid "The earth here does not listen to your command to move." msgstr "" @@ -176987,6 +180042,10 @@ msgstr "" msgid "Life springs anew from the dead grass." msgstr "" +#: lang/json/ter_furn_transform_messages_from_json.py +msgid "The door opens forcefully!" +msgstr "" + #: lang/json/terrain_from_json.py msgid "scorched earth" msgstr "焦土" @@ -184511,6 +187570,11 @@ msgstr "木製船體" msgid "A wooden board that keeps the water out of your boat." msgstr "將水擋在船外的木板。" +#. ~ Description for {'str': 'raft boat hull'} +#: lang/json/vehicle_part_from_json.py +msgid "Logs tied together that will keep your boat out of the water." +msgstr "" + #. ~ Description for {'str': 'plastic boat hull'} #: lang/json/vehicle_part_from_json.py msgid "A rigid plastic sheet that keeps water out of your boat." @@ -184950,14 +188014,19 @@ msgid "" msgstr "" #: lang/json/vehicle_part_from_json.py -msgid "wooden seat" -msgstr "木座椅" +msgid "flimsy wooden seat" +msgstr "" +#. ~ Description for {'str': 'flimsy wooden seat'} #. ~ Description for {'str': 'wooden seat'} #: lang/json/vehicle_part_from_json.py msgid "A place to sit." msgstr "可以坐下的地方。" +#: lang/json/vehicle_part_from_json.py +msgid "wooden seat" +msgstr "木座椅" + #: lang/json/vehicle_part_from_json.py msgid "wooden spike" msgstr "木尖刺" @@ -185762,6 +188831,11 @@ msgstr "" msgid "At least %s from %s (%s remaining)" msgstr "" +#: src/achievement.cpp +#, c-format +msgid "Exactly %s from %s" +msgstr "" + #: src/achievement.cpp #, c-format msgid "Within %s of %s (%s remaining)" @@ -185778,12 +188852,13 @@ msgid "Within %s of %s (passed)" msgstr "" #: src/achievement.cpp -msgid "Triggered by " +#, c-format +msgid "Triggered by %s" msgstr "" #: src/achievement.cpp #, c-format -msgid "%s/%s " +msgid "%s/%s %s" msgstr "" #: src/achievement.cpp @@ -187698,7 +190773,7 @@ msgstr "[<] 頁面 %1$d/%2$d [>]" msgid "< [%s] Sort: %s >" msgstr "" -#: src/advanced_inv.cpp src/inventory_ui.cpp +#: src/advanced_inv.cpp src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter" msgstr "" @@ -190813,10 +193888,18 @@ msgstr "" msgid "Accuracy" msgstr "命中率" +#: src/bonuses.cpp +msgid "Critical Hit Chance" +msgstr "" + #: src/bonuses.cpp src/martialarts.cpp msgid "Dodge" msgstr "閃避" +#: src/bonuses.cpp +msgid "Block effectiveness" +msgstr "" + #: src/bonuses.cpp src/panels.cpp msgid "Speed" msgstr "速度" @@ -191295,20 +194378,25 @@ msgstr " 站起來了。" #: src/character.cpp src/monster.cpp #, c-format -msgid "The %s breaks free of the webs!" -msgstr "%s 掙脫了網子!" +msgid "The %s escapes the bear trap!" +msgstr "%s 逃出捕獸陷阱!" #: src/character.cpp -msgid "You free yourself from the webs!" -msgstr "你從網子中掙脫了!" +#, c-format +msgid "Your %s tries to free itself from the bear trap, but can't get loose!" +msgstr "" #: src/character.cpp -msgid " frees themselves from the webs!" -msgstr " 從網子中掙脫了!" +msgid "You free yourself from the bear trap!" +msgstr "你從捕熊陷阱中掙脫!" #: src/character.cpp -msgid "You try to free yourself from the webs, but can't get loose!" -msgstr "你嘗試從網子中掙脫, 但失敗了!" +msgid " frees themselves from the bear trap!" +msgstr " 從捕熊陷阱中掙脫!" + +#: src/character.cpp +msgid "You try to free yourself from the bear trap, but can't get loose!" +msgstr "你嘗試從捕熊陷阱中掙脫, 但失敗了!" #: src/character.cpp src/monster.cpp #, c-format @@ -191344,28 +194432,6 @@ msgstr " 從重型圈套中掙脫了!" msgid "You try to free yourself from the heavy snare, but can't get loose!" msgstr "你嘗試從重型圈套中掙脫, 但失敗了!" -#: src/character.cpp src/monster.cpp -#, c-format -msgid "The %s escapes the bear trap!" -msgstr "%s 逃出捕獸陷阱!" - -#: src/character.cpp -#, c-format -msgid "Your %s tries to free itself from the bear trap, but can't get loose!" -msgstr "" - -#: src/character.cpp -msgid "You free yourself from the bear trap!" -msgstr "你從捕熊陷阱中掙脫!" - -#: src/character.cpp -msgid " frees themselves from the bear trap!" -msgstr " 從捕熊陷阱中掙脫!" - -#: src/character.cpp -msgid "You try to free yourself from the bear trap, but can't get loose!" -msgstr "你嘗試從捕熊陷阱中掙脫, 但失敗了!" - #: src/character.cpp msgid "You free yourself from the rubble!" msgstr "你從瓦礫中掙脫了!" @@ -191378,18 +194444,6 @@ msgstr " 從瓦礫中掙脫了!" msgid "You try to free yourself from the rubble, but can't get loose!" msgstr "你嘗試從瓦礫中掙脫, 但失敗了!" -#: src/character.cpp -msgid "You try to escape the pit, but slip back in." -msgstr "你試著逃出坑, 但是又滑回去了。" - -#: src/character.cpp -msgid "You escape the pit!" -msgstr "你逃出坑了!" - -#: src/character.cpp -msgid " escapes the pit!" -msgstr " 逃出坑了!" - #: src/character.cpp #, c-format msgid "Your %s tries to break free, but fails!" @@ -191429,6 +194483,35 @@ msgstr "你掙脫束縛!" msgid " breaks out of the grab!" msgstr " 掙脫束縛!" +#: src/character.cpp src/monster.cpp +#, c-format +msgid "The %s breaks free of the webs!" +msgstr "%s 掙脫了網子!" + +#: src/character.cpp +msgid "You free yourself from the webs!" +msgstr "你從網子中掙脫了!" + +#: src/character.cpp +msgid " frees themselves from the webs!" +msgstr " 從網子中掙脫了!" + +#: src/character.cpp +msgid "You try to free yourself from the webs, but can't get loose!" +msgstr "你嘗試從網子中掙脫, 但失敗了!" + +#: src/character.cpp +msgid "You try to escape the pit, but slip back in." +msgstr "你試著逃出坑, 但是又滑回去了。" + +#: src/character.cpp +msgid "You escape the pit!" +msgstr "你逃出坑了!" + +#: src/character.cpp +msgid " escapes the pit!" +msgstr " 逃出坑了!" + #: src/character.cpp #, c-format msgid "Your %s bionic comes back online." @@ -195221,14 +198304,6 @@ msgstr "繪圖基準測試(5 秒)" msgid "Test trait group" msgstr "測試特質群組" -#: src/debug_menu.cpp -msgid "Show debug message" -msgstr "顯示除錯消息" - -#: src/debug_menu.cpp -msgid "Crash game (test crash handling)" -msgstr "崩潰遊戲(測試崩潰處理)" - #: src/debug_menu.cpp msgid "Toggle NPC pathfinding on map" msgstr "切換NPC在地圖上的尋徑" @@ -195257,6 +198332,18 @@ msgstr "資訊 ... " msgid "Enable achievements" msgstr "" +#: src/debug_menu.cpp +msgid "Show debug message" +msgstr "顯示除錯消息" + +#: src/debug_menu.cpp +msgid "Crash game (test crash handling)" +msgstr "崩潰遊戲(測試崩潰處理)" + +#: src/debug_menu.cpp +msgid "Quit to main menu" +msgstr "返回主選單" + #: src/debug_menu.cpp msgid "Game…" msgstr "" @@ -195353,10 +198440,6 @@ msgstr "" msgid "Map…" msgstr "地圖 ..." -#: src/debug_menu.cpp -msgid "Quit to main menu" -msgstr "返回主選單" - #: src/debug_menu.cpp msgid "" "Debug Functions - Using these will cheat not only the game, but yourself.\n" @@ -195880,6 +198963,10 @@ msgstr "標記為完成" msgid "Remove mission without proper cleanup" msgstr "刪除任務 (缺乏適當的清理)" +#: src/debug_menu.cpp +msgid "Benchmark in progress…" +msgstr "" + #: src/debug_menu.cpp #, c-format msgid "Drew %d times in %.3f seconds. (%.3f fps average)" @@ -197102,138 +200189,182 @@ msgid "Liked" msgstr "受人喜歡" #: src/faction.cpp +msgctxt "Faction respect" msgid "Legendary" msgstr "有如傳奇" #: src/faction.cpp +msgctxt "Faction respect" msgid "Unchallenged" msgstr "舉世聞名" #: src/faction.cpp +msgctxt "Faction respect" msgid "Mighty" -msgstr "聲名遠播" +msgstr "偉大" #: src/faction.cpp +msgctxt "Faction respect" msgid "Famous" -msgstr "眾所周知" +msgstr "有名" #: src/faction.cpp +msgctxt "Faction respect" msgid "Well-Known" msgstr "小有名氣" #: src/faction.cpp +msgctxt "Faction respect" msgid "Spoken Of" msgstr "略有所聞" #: src/faction.cpp +msgctxt "Faction respect" msgid "Worthless Scum" msgstr "不值一提" #: src/faction.cpp +msgctxt "Faction respect" msgid "Vermin" msgstr "小人" #: src/faction.cpp +msgctxt "Faction respect" msgid "Despicable" msgstr "害蟲" #: src/faction.cpp +msgctxt "Faction respect" msgid "Parasite" msgstr "寄生蟲" #: src/faction.cpp +msgctxt "Faction respect" msgid "Leech" msgstr "吸血鬼" #: src/faction.cpp +msgctxt "Faction respect" msgid "Laughingstock" msgstr "笑柄" #: src/faction.cpp +msgctxt "Faction respect" +msgid "Neutral" +msgstr "中立" + +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Filthy rich" msgstr "富豪" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Affluent" msgstr "富裕" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Prosperous" msgstr "富足" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Well-Off" msgstr "小康" -#: src/faction.cpp src/panels.cpp +#: src/faction.cpp +msgctxt "Faction wealth" msgid "Comfortable" msgstr "舒適" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Wanting" msgstr "拮据" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Failing" msgstr "貧窮" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Impoverished" msgstr "貧困" #: src/faction.cpp +msgctxt "Faction wealth" msgid "Destitute" msgstr "赤貧" #: src/faction.cpp +msgctxt "Faction food" msgid "Overflowing" msgstr "資源充溢" #: src/faction.cpp +msgctxt "Faction food" msgid "Well-Stocked" msgstr "資源充足" #: src/faction.cpp +msgctxt "Faction food" msgid "Scrapping By" msgstr "僅可糊口" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Malnourished" msgstr "營養不良" -#: src/faction.cpp src/player_display.cpp +#: src/faction.cpp +msgctxt "Faction food" msgid "Starving" msgstr "瀕臨飢荒" -#: src/faction.cpp src/iuse_software_minesweeper.cpp +#: src/faction.cpp +msgctxt "Faction combat lvl" +msgid "Legendary" +msgstr "有如傳奇" + +#: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Expert" msgstr "專家" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Veteran" msgstr "老兵" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Skilled" msgstr "熟練" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Competent" msgstr "合格" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Untrained" msgstr "生澀" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Crippled" msgstr "殘缺" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Feeble" msgstr "薄弱" #: src/faction.cpp +msgctxt "Faction combat lvl" msgid "Worthless" msgstr "無用" @@ -197844,12 +200975,12 @@ msgstr "" #, c-format msgid "" "Notes:\n" -"Send a companion to gather light brush and heavy sticks.\n" +"Send a companion to gather light brush and stout branches.\n" "\n" "Skill used: survival\n" "Difficulty: N/A\n" "Gathering Possibilities:\n" -"> heavy sticks\n" +"> stout branches\n" "> withered plants\n" "> splintered wood\n" "\n" @@ -197857,19 +200988,6 @@ msgid "" "Time: 3 Hours, Repeated\n" "Positions: %d/3\n" msgstr "" -"註記:\n" -"派遣同伴去收集灌木和木棍。\n" -"\n" -"使用的技能:生存\n" -"難度:N/A\n" -"可能收集的物品:\n" -"> 木棍\n" -"> 枯萎的植物\n" -"> 碎裂的木頭\n" -"\n" -"風險:非常低\n" -"時間:3 小時,重複執行\n" -"職缺:%d / 3\n" #: src/faction_camp.cpp #, c-format @@ -199105,8 +202223,8 @@ msgid "You do not have a camp food zone. Aborting…" msgstr "你沒有 [營寨:儲糧] 區。中止..." #: src/faction_camp.cpp -msgid "No items are located at the drop point…" -msgstr "該區域內沒有物品..." +msgid "No suitable items are located at the drop points…" +msgstr "" #: src/faction_camp.cpp #, c-format @@ -199313,6 +202431,13 @@ msgstr "%s很靠近,很危險!" msgid "Wait till you wake up…" msgstr "等你醒來..." +#: src/game.cpp +#, c-format +msgid "" +"\n" +"%s to interrupt" +msgstr "" + #: src/game.cpp #, c-format msgid "%s, cancel Auto-move?" @@ -199423,6 +202548,11 @@ msgctxt "action" msgid "open" msgstr "" +#: src/game.cpp +msgctxt "action" +msgid "pocket autopickup settings" +msgstr "" + #: src/game.cpp msgctxt "action" msgid "unfavorite" @@ -200933,11 +204063,25 @@ msgstr "" msgid "You cannot haul items here." msgstr "你不能在這裡搬運。" +#. ~ %s is the name of hostile NPC +#: src/game.cpp src/gates.cpp +#, c-format +msgid "%s is in the way!" +msgstr "有 %s 擋在那!" + +#. ~ %s is some monster #: src/game.cpp #, c-format msgid "There's a %s in the way!" msgstr "有 %s 擋在那!" +#. ~ %s is a warning about monster/hostile NPC in the way, e.g. "There's a +#. zombie in the way!" +#: src/game.cpp +#, c-format +msgid "%s Attempt to push past? You may have to fight your way back up." +msgstr "" + #: src/game.cpp msgid "" "There is a LOT of heat coming out of there, even the stairs have melted " @@ -202311,11 +205455,6 @@ msgstr "有屁孩擋在路中間!" msgid "The %s is in the way!" msgstr "有 %s 擋在那!" -#: src/gates.cpp -#, c-format -msgid "%s is in the way!" -msgstr "有 %s 擋在那!" - #: src/gates.cpp #, c-format msgid "That %s can only be closed from the inside." @@ -203574,6 +206713,11 @@ msgstr "你開始破解保險箱。" msgid "Attempt to hack this safe?" msgstr "" +#: src/iexamine.cpp +#, c-format +msgid "The %s is locked. You could pry it open with the right tool…" +msgstr "" + #: src/iexamine.cpp #, c-format msgid "The %s is locked. If only you had something to pry it with…" @@ -203593,7 +206737,7 @@ msgstr "" #: src/iexamine.cpp #, c-format msgid "You attempt to pick lock of %1$s using your %2$s…" -msgstr "" +msgstr "你試圖將%1$s用你的%2$s開鎖…" #: src/iexamine.cpp msgid "This bulletin board is not inside a camp" @@ -204769,6 +207913,10 @@ msgstr "選取要移除的已安裝生化插件" msgid "Splint broken limbs" msgstr "為斷肢上夾板" +#: src/iexamine.cpp +msgid "Treat wounds" +msgstr "" + #: src/iexamine.cpp msgid "You don't have any bionics installed." msgstr "你並未有安裝任何生化插件。" @@ -204796,17 +207944,79 @@ msgid " doesn't have limbs that require splinting." msgstr " 沒有需要夾板的肢體。" #: src/iexamine.cpp -msgid "This mill already contains flour." -msgstr "這個磨中已經裝有麵粉。" +msgid "You don't have any wounds that need treatment." +msgstr "" #: src/iexamine.cpp -msgid "Remove it before starting the mill again." -msgstr "再次轉動磨子前請先把它取出。" +msgid " doesn't have any wounds that need treatment." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body, but as it also " +"detected you've already taken antibiotics, it decided not to apply another " +"dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body, but as it " +"also detected you've already taken antibiotics, it decided not to apply " +"another dose right now." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in your body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp +msgid "" +"The autodoc detected a bacterial infection in 's body and injected " +"antibiotics to treat it." +msgstr "" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The muscle spasms start to go away." +msgstr "肌肉痙攣開始消失了。" + +#: src/iexamine.cpp src/iuse.cpp +msgid "The medication does nothing to help the spasms." +msgstr "藥物無法改善痙攣的狀況。" #: src/iexamine.cpp #, c-format -msgid "This rack contains %s, which can't be milled!" -msgstr "這個架子裡裝有 %s,它無法被磨粉!" +msgid "" +"The autodoc detected a bleeding on your %s and applied a hemostatic drug to " +"stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected a bleeding on 's %s and applied a hemostatic " +"drug to stop it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on your %s and applied a disinfectant to " +"clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "" +"The autodoc detected an open wound on 's %s and applied a " +"disinfectant to clean it." +msgstr "" + +#: src/iexamine.cpp +#, c-format +msgid "This mill contains %s, which can't be milled!" +msgstr "" #: src/iexamine.cpp #, c-format @@ -204979,8 +208189,9 @@ msgid "Remove brake and start milling" msgstr "移除制動器並開始磨粉" #: src/iexamine.cpp -msgid "Remove brake and start milling, milling will take about 6 hours." -msgstr "移除制動器並開始磨粉。作業時間大約 6 小時。" +#, c-format +msgid "Remove brake and start milling, milling will take about %s." +msgstr "" #: src/iexamine.cpp msgid "Insert products for milling… mill is full" @@ -205013,18 +208224,8 @@ msgstr "這裡有個磨。它正在轉動並磨粉中。" #: src/iexamine.cpp #, c-format -msgid "It will finish milling in about %d hour." -msgid_plural "It will finish milling in about %d hours." -msgstr[0] "磨粉作業大約在 %d 小時後完成。" - -#: src/iexamine.cpp -msgid "It will finish milling in less than an hour." -msgstr "磨粉作業將在一小時內完成。" - -#: src/iexamine.cpp -#, c-format -msgid "It should take about %d minutes to finish milling." -msgstr "大約還需要 %d 分鐘才能完成磨粉。" +msgid "It should take about %s to finish milling." +msgstr "" #: src/iexamine.cpp msgid "There's a mill here." @@ -205784,7 +208985,7 @@ msgstr "體積 (%s): " msgid "There are no available choices" msgstr "沒有可用的選擇" -#: src/inventory_ui.cpp +#: src/inventory_ui.cpp src/worldfactory.cpp #, c-format msgid "[%s] Filter: " msgstr "" @@ -206652,10 +209853,6 @@ msgstr "" msgid "Weight capacity bonus: " msgstr "" -#: src/item.cpp -msgid "Storage: " -msgstr "儲物空間: " - #: src/item.cpp msgid "* This item can be worn with a helmet." msgstr "* 這件物品能 與頭盔一起穿戴。" @@ -206920,6 +210117,34 @@ msgstr "" msgid "* This tool runs on bionic power." msgstr "* 這件工具 使用生化能量。" +#: src/item.cpp +msgid "It's new, and ready to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost new, with much material to burn." +msgstr "" + +#: src/item.cpp +msgid "More than a quarter has burned away." +msgstr "" + +#: src/item.cpp +msgid "More than half has burned away." +msgstr "" + +#: src/item.cpp +msgid "Less than a quarter left to burn." +msgstr "" + +#: src/item.cpp +msgid "Almost completely burned out." +msgstr "" + +#: src/item.cpp +msgid "Fuel: " +msgstr "" + #: src/item.cpp #, c-format msgid "Using: %s" @@ -206943,9 +210168,21 @@ msgstr "* 此物品可被強化。" msgid "* This item is not repairable." msgstr "* 這件物品無法修理。" +#. ~ 1 is approx. time (e.g. 'about 5 minutes'), 2 is a list of items +#: src/item.cpp +#, c-format +msgid "Disassembly takes %1$s and might yield: %2$s." +msgstr "" + +#. ~ 1 is approx. time, 2 is a list of items and tools with qualities, 3 is a +#. list of items. +#. ~ Bold text in the middle makes it easier to see where the second list +#. starts. #: src/item.cpp #, c-format -msgid "Disassembly takes %s and might yield: %s." +msgid "" +"Disassembly takes %1$s, requires %2$s and might " +"yield: %3$s." msgstr "" #: src/item.cpp @@ -206989,7 +210226,7 @@ msgstr "" #: src/item.cpp msgid "Environmental Protection: " -msgstr "" +msgstr "環境傷害防護:" #: src/item.cpp msgid "Bash Protection: " @@ -207057,26 +210294,27 @@ msgid "Critical hit chance %d%% - %d%%" msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d bashing (%d on a critical hit)" +msgid "Bashing: " msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d cutting (%d on a critical hit)" +msgid "Critical bash: " msgstr "" #: src/item.cpp -#, c-format -msgid "" -"%d piercing (%d on a critical hit)" +msgid "Cutting: " msgstr "" #: src/item.cpp -#, c-format -msgid "%d moves per attack" +msgid "Critical cut: " +msgstr "" + +#: src/item.cpp +msgid "Piercing: " +msgstr "" + +#: src/item.cpp +msgid "Critical pierce: " msgstr "" #: src/item.cpp @@ -207656,8 +210894,9 @@ msgstr "你的 %1$s 無法再容納更多的 %2$s。" msgid "That %s doesn't have room to expand." msgstr "沒有足夠的位置供 %s 打開。" -#: src/item.cpp src/item_factory.cpp src/trait_group.cpp +#: src/item.cpp #, c-format +msgctxt "components count" msgid "%d x %s" msgstr "%d x %s" @@ -207779,6 +211018,56 @@ msgstr "你沒有可以使用動作選單的物品。" msgid "Execute which action?" msgstr "執行什麼動作?" +#: src/item_contents.cpp +#, c-format +msgid "Press a key to add to %s" +msgstr "" + +#: src/item_contents.cpp +msgid "blacklist" +msgstr "" + +#: src/item_contents.cpp +msgid "whitelist" +msgstr "" + +#: src/item_contents.cpp +msgid " priority, " +msgstr "" + +#: src/item_contents.cpp +msgid " item, " +msgstr "" + +#: src/item_contents.cpp +msgid " category, " +msgstr "" + +#: src/item_contents.cpp +msgid " whitelist, " +msgstr "" + +#: src/item_contents.cpp +msgid " blacklist" +msgstr "" + +#: src/item_contents.cpp +#, c-format +msgid "Enter Priority (current priority %d)" +msgstr "" + +#: src/item_contents.cpp +msgid "item id" +msgstr "" + +#: src/item_contents.cpp +msgid "item category" +msgstr "" + +#: src/item_contents.cpp +msgid "Select an item from nearby" +msgstr "" + #: src/item_contents.cpp msgid "is not a container" msgstr "" @@ -207819,6 +211108,11 @@ msgstr "測試哪一組?" msgid "Result of 100 spawns:" msgstr "100個產生的結果:" +#: src/item_factory.cpp src/trait_group.cpp +#, c-format +msgid "%d x %s" +msgstr "%d x %s" + #: src/item_location.cpp msgid "inventory" msgstr "物品欄" @@ -208001,6 +211295,34 @@ msgstr "" msgid "not enough space" msgstr "" +#: src/item_pocket.cpp +msgid "Priority:" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +msgid "(empty)" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Item Blacklist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Whitelist: %s" +msgstr "" + +#: src/item_pocket.cpp +#, c-format +msgid "Category Blacklist: %s" +msgstr "" + #: src/itype.h msgid "click." msgstr "喀哩。" @@ -208068,14 +211390,6 @@ msgstr "你服用了一些抗生素。" msgid " takes some antibiotics." msgstr "服用了一些抗生素。" -#: src/iuse.cpp -msgid "The muscle spasms start to go away." -msgstr "肌肉痙攣開始消失了。" - -#: src/iuse.cpp -msgid "The medication does nothing to help the spasms." -msgstr "藥物無法改善痙攣的狀況。" - #: src/iuse.cpp msgid "" "Maybe just placebo effect, but you feel a little better as the dose settles " @@ -213653,6 +216967,10 @@ msgstr "新手" msgid "Intermediate" msgstr "中級" +#: src/iuse_software_minesweeper.cpp +msgid "Expert" +msgstr "專家" + #: src/iuse_software_minesweeper.cpp msgid "Level width:" msgstr "關卡寬度: " @@ -214522,25 +217840,25 @@ msgstr "容許你完全自定義點數、劇本、以及角色的職業、屬性 #: src/main_menu.cpp msgid "Select from one of previously created character templates." -msgstr "" +msgstr "從先前創好的角色模板中選擇。" #: src/main_menu.cpp msgid "" "Creates random character, but lets you preview the generated character and " "the scenario and change character and/or scenario if needed." -msgstr "" +msgstr "創建隨機角色,但是讓你預覽生成的角色和劇情,如果需要的話可以修改角色或劇情。" #: src/main_menu.cpp msgid "" "Puts you right in the game, randomly choosing character's traits, " "profession, skills and other parameters. Scenario is fixed to Evacuee." -msgstr "" +msgstr "把你直接丟入遊戲中,隨機選擇角色的特性、職業、技能和其他參數。劇情固定為撤離者。" #: src/main_menu.cpp msgid "" "Puts you right in the game, randomly choosing scenario and character's " "traits, profession, skills and other parameters." -msgstr "" +msgstr "把你直接丟入遊戲中,隨機選擇劇情和角色的特性、職業、技能和其他參數。" #: src/main_menu.cpp msgid "No templates found!" @@ -217287,6 +220605,18 @@ msgctxt "memorial_female" msgid "Set off an alarm." msgstr "引發警報。" +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_male" +msgid "Used the debug menu (%s)." +msgstr "" + +#: src/memorial_logger.cpp +#, c-format +msgctxt "memorial_female" +msgid "Used the debug menu (%s)." +msgstr "" + #. ~ Message %s on the message log was repeated %d times, e.g. "You hear a #. whack! x 12" #: src/messages.cpp @@ -221113,11 +224443,6 @@ msgstr "專注力趨向:" msgid "You feel bugs crawl over your skin." msgstr "" -#: src/mtype.cpp -msgid "human" -msgid_plural "humans" -msgstr[0] "人類" - #: src/mutation.cpp #, c-format msgid "Your %s is destroyed!" @@ -222077,17 +225402,6 @@ msgstr "" msgid "Blood type:" msgstr "" -#: src/newcharacter.cpp -#, c-format -msgid "" -"* Random location * (%d variants)" -msgstr "" - -#: src/newcharacter.cpp -#, c-format -msgid "%s (%d variants)" -msgstr "" - #: src/newcharacter.cpp msgid "Name:" msgstr "名字:" @@ -222100,6 +225414,20 @@ msgstr "性別:" msgid "Select a starting location." msgstr "選擇一個起始地點。" +#: src/newcharacter.cpp +#, c-format +msgid "" +"* Random location * (%d variant)" +msgid_plural "" +"* Random location * (%d variants)" +msgstr[0] "" + +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" + #: src/newcharacter.cpp msgid "Stats:" msgstr "屬性:" @@ -222169,6 +225497,12 @@ msgstr "" msgid "Starting location:" msgstr "起始地點:" +#: src/newcharacter.cpp +#, c-format +msgid "%s (%d variant)" +msgid_plural "%s (%d variants)" +msgstr[0] "" + #: src/newcharacter.cpp msgid "Starting Vehicle: " msgstr "" @@ -223838,6 +227172,14 @@ msgstr "打爛" msgid "Pulp Adjacent" msgstr "打爛鄰接" +#: src/options.cpp +msgid "Pulp Adjacent Zombie Only" +msgstr "" + +#: src/options.cpp +msgid "Pulp Zombies Only" +msgstr "" + #: src/options.cpp msgid "Auto mining" msgstr "自動採礦" @@ -226163,6 +229505,16 @@ msgstr "區域:" msgid "# Unexplored" msgstr "# 尚未探索" +#: src/overmap_ui.cpp +#, c-format +msgid "oter: %s" +msgstr "" + +#: src/overmap_ui.cpp +#, c-format +msgid "oter_type: %s" +msgstr "" + #: src/overmap_ui.cpp msgid "Distance to active mission:" msgstr "距離任務地點:" @@ -226492,6 +229844,10 @@ msgstr "酷熱!" msgid "Very hot!" msgstr "很熱!" +#: src/panels.cpp +msgid "Comfortable" +msgstr "舒適" + #: src/panels.cpp msgid "Very cold!" msgstr "很冷!" @@ -227939,6 +231295,10 @@ msgctxt "speed penalty" msgid "Thirst -%2d%%" msgstr "口渴 -%2d%%" +#: src/player_display.cpp +msgid "Starving" +msgstr "瀕臨飢荒" + #: src/player_display.cpp msgid "Underfed" msgstr "營養不良" @@ -228033,6 +231393,10 @@ msgstr "" "你的身體因為營養不良而變得嚴重虛弱。如果再不開始定期進食,你可能會死!\n" "\n" +#: src/player_display.cpp +msgid "Malnourished" +msgstr "營養不良" + #: src/player_display.cpp msgid "" "Your body is weakened by starvation. Only time and regular meals will help you recover.\n" @@ -229157,6 +232521,14 @@ msgid "%1$d tool with %2$s of %3$d or more." msgid_plural "%1$d tools with %2$s of %3$d or more." msgstr[0] "%1$d 個 %2$s %3$d 級 以上的工具" +#. ~ %1$d: tool count, %2$s: quality requirement name, %3$d: quality level +#. requirement +#: src/requirements.cpp +#, c-format +msgid "%1$d tool with %2$s of %3$d or more" +msgid_plural "%1$d tools with %2$s of %3$d or more" +msgstr[0] "" + #. ~ %1$s: tool name, %2$d: charge requirement #: src/requirements.cpp #, c-format @@ -233189,6 +236561,10 @@ msgstr "… 按 %s 檢視完整模組描述 " msgid "--NO AVAILABLE MODS--" msgstr "--沒有可用的模組--" +#: src/worldfactory.cpp +msgid "--NO RESULTS FOUND--" +msgstr "" + #: src/worldfactory.cpp msgid "Saved list of active mods as default" msgstr "已將啟動中的模組列表儲存為預設值" From 7a1c416035ce65eb7b7d326585e5223a65ca76fb Mon Sep 17 00:00:00 2001 From: raithwind <44484397+raithwind@users.noreply.github.com> Date: Fri, 26 Jun 2020 06:42:59 +0100 Subject: [PATCH 107/206] Addition of Vegetarian Nachos (#41579) --- data/json/items/comestibles/junkfood.json | 43 +++++++++++++++++++++++ data/json/recipes/recipe_food.json | 30 ++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/data/json/items/comestibles/junkfood.json b/data/json/items/comestibles/junkfood.json index 4b3289ff5ddc1..66c977aa4a166 100644 --- a/data/json/items/comestibles/junkfood.json +++ b/data/json/items/comestibles/junkfood.json @@ -743,6 +743,49 @@ "fun": 20, "vitamins": [ [ "vitA", 10 ], [ "calcium", 10 ], [ "iron", 12 ], [ "vitB", 29 ] ] }, + { + "type": "COMESTIBLE", + "id": "nachosv", + "copy-from": "nachos", + "name": "vegetarian nachos", + "symbol": "%", + "color": "yellow", + "calories": 228, + "description": "Salted chips made from corn tortillas, now with beans. Could probably use some cheese, though.", + "price": 250, + "weight": "125 g", + "spoils_in": "1 day", + "price_postapoc": 600, + "container": "bag_plastic", + "material": [ "junk", "veggy" ], + "volume": "750 ml", + "charges": 3, + "flags": [ "EATEN_HOT" ], + "fun": 16, + "vitamins": [ [ "calcium", 8 ], [ "iron", 17 ] ] + }, + { + "type": "COMESTIBLE", + "id": "nachosvc", + "copy-from": "nachos", + "name": "vegetarian nachos with cheese", + "weight": "22 g", + "color": "yellow", + "spoils_in": "20 hours", + "container": "bag_plastic", + "symbol": "%", + "charges": 3, + "calories": 402, + "description": "Salted chips made from corn tortillas with beans and smothered in cheese. Delicious, even if you're not a vegetarian.", + "price": 300, + "price_postapoc": 500, + "material": [ "veggy", "milk", "junk" ], + "primary_material": "processed_food", + "volume": "500 ml", + "flags": [ "EATEN_HOT" ], + "fun": 20, + "vitamins": [ [ "vitA", 2 ], [ "calcium", 13 ], [ "iron", 17 ] ] + }, { "type": "COMESTIBLE", "id": "porkstick", diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index 38dda2bf038ea..5ca27e103297e 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -1247,6 +1247,36 @@ [ [ "nachos", 3 ] ] ] }, + { + "type": "recipe", + "result": "nachosv", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_SNACK", + "skill_used": "cooking", + "time": "20 m", + "charges": 5, + "autolearn": true, + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 2 } ], + "tools": [ [ [ "surface_heat", 3, "LIST" ] ] ], + "components": [ [ [ "can_beans", 2 ], [ "beans_cooked", 2 ] ], [ [ "nachos", 3 ] ] ] + }, + { + "type": "recipe", + "result": "nachosvc", + "category": "CC_FOOD", + "subcategory": "CSC_FOOD_SNACK", + "skill_used": "cooking", + "time": "20 m", + "charges": 3, + "autolearn": true, + "qualities": [ { "id": "CUT", "level": 1 }, { "id": "COOK", "level": 2 } ], + "tools": [ [ [ "surface_heat", 3, "LIST" ] ] ], + "components": [ + [ [ "can_beans", 2 ], [ "beans_cooked", 2 ] ], + [ [ "cheese", 1 ], [ "cheese_hard", 1 ], [ "can_cheese", 1 ] ], + [ [ "nachos", 3 ] ] + ] + }, { "type": "recipe", "result": "fresh_fries", From de1a6ccc325e0682983f3f19446822e4c8e5a514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jianxiang=20Wang=20=28=E7=8E=8B=E5=81=A5=E7=BF=94=29?= Date: Fri, 26 Jun 2020 13:43:16 +0800 Subject: [PATCH 108/206] Two misc fixes (#41586) * Remove debug message about pseudo item not having magazine pocket type It's possible for valid pseudo items to not have magazine pocket type, for example boulder anvils. * Fix cmake not generating game version correctly --- CMakeLists.txt | 2 +- src/inventory.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c861a2084ca0b..8f3dfebb451e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,7 +31,7 @@ set(PREFIX "" CACHE STRING "Location of Data & GFX directories") include(CTest) include(GetGitRevisionDescription) -git_describe(GIT_VERSION) +git_describe(GIT_VERSION --tags --always --match "[0-9A-Z]*.[0-9A-Z]*") MESSAGE("\n * Cataclysm: Dark Days Ahead is a turn-based survival game set in a post-apocalyptic world.") MESSAGE(" _________ __ .__ ") diff --git a/src/inventory.cpp b/src/inventory.cpp index 6955f0e8ba87d..8baac97a3e809 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -457,8 +457,6 @@ void inventory::form_from_map( map &m, std::vector pts, const Characte // NOTE: This only works if the pseudo item has a MAGAZINE pocket, not a MAGAZINE_WELL! item furn_ammo( ammo, calendar::turn, count_charges_in_list( ammo, m.i_at( p ) ) ); furn_item.put_in( furn_ammo, item_pocket::pocket_type::MAGAZINE ); - } else { - debugmsg( "ERROR: Furniture crafting pseudo item does not have magazine for ammo" ); } furn_item.item_tags.insert( "PSEUDO" ); add_item( furn_item ); From 4ad6757eb3856188991df9ea96d340c433504cf1 Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Thu, 25 Jun 2020 23:45:53 -0600 Subject: [PATCH 109/206] Show ammo_restriction info for non-MAGAZINE items (#41532) * Show ammo_restriction info for non-MAGAZINE items Non-magazine items with non-magazine pockets (including quivers), yet having an ammo_restriction defined, were not indicating their capacity in the item info panel. This commit allows non-MAGAZINE item contents/pockets to indicate their ammo_restriction-based capacity in the pocket section, labeled "Holds:" Existing MAGAZINE-type containers (as well as GUN and TOOL items with MAGAZINE pockets) continue to indicat their magazine capacity info in the magazine section of the item info. Add a test case covering this behavior using existing test items. * Fix descriptions of ammo pouch and quivers * Allow quivers to have ammo_remaining() * Add display name tests for unloaded/loaded quiver * Do not show capacity for ammo_restriction pockets --- data/json/items/armor/ammo_pouch.json | 10 +++--- src/item.cpp | 9 ++++++ src/item_contents.cpp | 6 ++-- src/item_pocket.cpp | 37 +++++++++++++++------ tests/iteminfo_test.cpp | 46 +++++++++++++++++++++++++++ tests/itemname_test.cpp | 32 +++++++++++++++++++ 6 files changed, 122 insertions(+), 18 deletions(-) diff --git a/data/json/items/armor/ammo_pouch.json b/data/json/items/armor/ammo_pouch.json index beb0ff2c00298..f1be0e17c975d 100644 --- a/data/json/items/armor/ammo_pouch.json +++ b/data/json/items/armor/ammo_pouch.json @@ -3,7 +3,7 @@ "id": "ammo_pouch", "type": "ARMOR", "name": { "str": "ammo pouch", "str_pl": "ammo pouches" }, - "description": "A small pouch that can be used to store most types of small ammunition, rockets will not fit. Activate to store ammunition.", + "description": "A small pouch that can be used to store most types of small ammunition, rockets will not fit. Use insert to store ammunition.", "weight": "490 g", "volume": "500 ml", "price": 1000, @@ -307,7 +307,7 @@ "id": "quiver", "type": "ARMOR", "name": { "str": "quiver" }, - "description": "A leather quiver worn at the waist that can hold 20 arrows. Activate to store arrows.", + "description": "A leather quiver worn at the waist that can hold 20 arrows or bolts. Use insert to store arrows or bolts.", "weight": "260 g", "volume": "500 ml", "price": 6500, @@ -328,7 +328,7 @@ "id": "quiver_birchbark", "type": "ARMOR", "name": { "str": "birchbark quiver" }, - "description": "A quiver woven from strips of birch bark, worn at the waist, that can hold 20 arrows. Activate to store arrows.", + "description": "A quiver woven from strips of birch bark, worn at the waist, that can hold 20 arrows or bolts. Use insert to store arrows or bolts.", "weight": "490 g", "volume": "500 ml", "price": 6500, @@ -349,7 +349,7 @@ "id": "quiver_large", "type": "ARMOR", "name": { "str": "large quiver" }, - "description": "A large leather quiver trimmed with metal, worn on the back, that can hold 60 arrows. Historically used by horse archers, rather than foot archers, but neither of THEM had to fight zombies. Activate to store arrows.", + "description": "A large leather quiver trimmed with metal, worn on the back, that can hold 60 arrows or bolts. Historically used by horse archers, rather than foot archers, but neither of THEM had to fight zombies. Use insert to store arrows or bolts.", "weight": "920 g", "volume": "1500 ml", "price": 8800, @@ -370,7 +370,7 @@ "id": "quiver_large_birchbark", "type": "ARMOR", "name": { "str": "large birchbark quiver" }, - "description": "A large quiver woven from strips of birchbark, worn on the back, that can hold 60 arrows. Activate to store arrows.", + "description": "A large quiver woven from strips of birchbark, worn on the back, that can hold 60 arrows or bolts. Use insert to store arrows or bolts.", "weight": "1380 g", "volume": "1500 ml", "price": 8800, diff --git a/src/item.cpp b/src/item.cpp index c4c6526cefe76..b46e143e8aa9d 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -7102,6 +7102,15 @@ int item::ammo_remaining() const return res; } + // Handle non-magazines with ammo_restriction in a CONTAINER type pocket (like quivers) + if( !ammo_types().empty() ) { + int res = 0; + for( const item *e : contents.all_items_top( item_pocket::pocket_type::CONTAINER ) ) { + res += e->charges; + } + return res; + } + return 0; } diff --git a/src/item_contents.cpp b/src/item_contents.cpp index f0b3fab3538f6..0bf3f1270c670 100644 --- a/src/item_contents.cpp +++ b/src/item_contents.cpp @@ -619,10 +619,8 @@ std::set item_contents::ammo_types() const { std::set ret; for( const item_pocket &pocket : contents ) { - if( pocket.is_type( item_pocket::pocket_type::MAGAZINE ) ) { - for( const ammotype &ammo : pocket.ammo_types() ) { - ret.emplace( ammo ); - } + for( const ammotype &ammo : pocket.ammo_types() ) { + ret.emplace( ammo ); } } return ret; diff --git a/src/item_pocket.cpp b/src/item_pocket.cpp index 126387176e3ed..233312432ce32 100644 --- a/src/item_pocket.cpp +++ b/src/item_pocket.cpp @@ -1,5 +1,6 @@ #include "item_pocket.h" +#include "ammo.h" #include "assign.h" #include "cata_utility.h" #include "crafting.h" @@ -706,9 +707,20 @@ void item_pocket::general_info( std::vector &info, int pocket_number, info.emplace_back( "DESCRIPTION", pocket_num ); } - info.push_back( vol_to_info( "CONTAINER", _( "Volume: " ), volume_capacity() ) ); - info.push_back( weight_to_info( "CONTAINER", _( " Weight: " ), weight_capacity() ) ); - info.back().bNewLine = true; + // Show volume/weight for normal containers, or ammo capacity if ammo_restriction is defined + if( data->ammo_restriction.empty() ) { + info.push_back( vol_to_info( "CONTAINER", _( "Volume: " ), volume_capacity() ) ); + info.push_back( weight_to_info( "CONTAINER", _( " Weight: " ), weight_capacity() ) ); + info.back().bNewLine = true; + } else { + for( const ammotype &at : ammo_types() ) { + const std::string fmt = string_format( ngettext( " round of %s", + " rounds of %s", ammo_capacity( at ) ), + at->name() ); + info.emplace_back( "MAGAZINE", _( "Holds: " ), fmt, iteminfo::no_flags, + ammo_capacity( at ) ); + } + } if( data->max_item_length != 0_mm ) { info.back().bNewLine = true; @@ -800,12 +812,19 @@ void item_pocket::contents_info( std::vector &info, int pocket_number, info.emplace_back( "DESCRIPTION", _( "This pocket is sealed." ) ); } - info.emplace_back( vol_to_info( "CONTAINER", _( "Volume: " ), contains_volume() ) ); - info.emplace_back( vol_to_info( "CONTAINER", _( " of " ), volume_capacity() ) ); - - info.back().bNewLine = true; - info.emplace_back( weight_to_info( "CONTAINER", _( "Weight: " ), contains_weight() ) ); - info.emplace_back( weight_to_info( "CONTAINER", _( " of " ), weight_capacity() ) ); + if( data->ammo_restriction.empty() ) { + // With no ammo_restriction defined, show current volume/weight, and total capacity + info.emplace_back( vol_to_info( "CONTAINER", _( "Volume: " ), contains_volume() ) ); + info.emplace_back( vol_to_info( "CONTAINER", _( " of " ), volume_capacity() ) ); + info.back().bNewLine = true; + info.emplace_back( weight_to_info( "CONTAINER", _( "Weight: " ), contains_weight() ) ); + info.emplace_back( weight_to_info( "CONTAINER", _( " of " ), weight_capacity() ) ); + } else { + // With ammo_restriction, total capacity does not matter, but show current volume/weight + info.emplace_back( vol_to_info( "CONTAINER", _( "Volume: " ), contains_volume() ) ); + info.back().bNewLine = true; + info.emplace_back( weight_to_info( "CONTAINER", _( "Weight: " ), contains_weight() ) ); + } bool contents_header = false; for( const item &contents_item : contents ) { diff --git a/tests/iteminfo_test.cpp b/tests/iteminfo_test.cpp index be76a50d31030..0d2ea0397f26f 100644 --- a/tests/iteminfo_test.cpp +++ b/tests/iteminfo_test.cpp @@ -2122,6 +2122,52 @@ TEST_CASE( "pocket info for a multi-pocket item", "[iteminfo][pocket][multiple]" "Base moves to remove item: 50\n" ); } +TEST_CASE( "ammo restriction info", "[iteminfo][ammo_restriction]" ) +{ + SECTION( "container pocket with ammo restriction" ) { + // For non-MAGAZINE pockets with ammo_restriction, pocket info shows what it can hold + std::vector pockets = { iteminfo_parts::DESCRIPTION_POCKETS }; + + // Quiver is a CONTAINER with ammo_restriction "arrow" or "bolt" + item quiver( "test_quiver" ); + // Not a magazine, but it should have ammo_types + REQUIRE_FALSE( quiver.is_magazine() ); + REQUIRE_FALSE( quiver.ammo_types().empty() ); + + CHECK( item_info_str( quiver, pockets ) == + "--\n" + "Total capacity:\n" + "Holds: 20 rounds of arrows\n" + "Holds: 20 rounds of bolts\n" + "Base moves to remove item: 20\n" ); + } + + SECTION( "magazine pocket with ammo restriction" ) { + // For MAGAZINE pockets, ammo_restriction is shown in magazine info + std::vector mag_cap = { iteminfo_parts::MAGAZINE_CAPACITY }; + + // Matches are TOOL with MAGAZINE pocket, and ammo_restriction "match" + item matches( "test_matches" ); + REQUIRE( matches.is_magazine() ); + REQUIRE_FALSE( matches.ammo_types().empty() ); + // But they have the NO_RELOAD flag, so their capacity should not be displayed + REQUIRE( matches.has_flag( "NO_RELOAD" ) ); + CHECK( item_info_str( matches, mag_cap ).empty() ); + + // Compound bow is a GUN with integral MAGAZINE pocket, ammo_restriction "arrow" + item compbow( "test_compbow" ); + REQUIRE( compbow.is_magazine() ); + REQUIRE_FALSE( compbow.ammo_types().empty() ); + // It can be reloaded, so its magazine capacity should be displayed + REQUIRE_FALSE( compbow.has_flag( "NO_RELOAD" ) ); + CHECK( item_info_str( compbow, mag_cap ) == + "--\n" + "Capacity: 1 round of arrows\n" ); + + } +} + + // Functions: // vol_to_info from item.cpp TEST_CASE( "vol_to_info", "[iteminfo][volume]" ) diff --git a/tests/itemname_test.cpp b/tests/itemname_test.cpp index f588e7740c049..f5c79dbe8540d 100644 --- a/tests/itemname_test.cpp +++ b/tests/itemname_test.cpp @@ -3,6 +3,7 @@ #include "avatar.h" #include "catch/catch.hpp" +#include "player_helpers.h" #include "flat_set.h" #include "game.h" #include "item.h" @@ -117,3 +118,34 @@ TEST_CASE( "item sizing display", "[item][iteminfo][display_name][sizing]" ) } } +TEST_CASE( "display name includes item contents", "[item][display_name][contents]" ) +{ + clear_avatar(); + + item arrow( "test_arrow_wood", 0, item::default_charges_tag{} ); + // Arrows are ammo with a default count of 10 + REQUIRE( arrow.is_ammo() ); + REQUIRE( arrow.count() == 10 ); + + item quiver( "test_quiver" ); + // Quivers are not magazines, nor do they have magazines + REQUIRE_FALSE( quiver.is_magazine() ); + REQUIRE_FALSE( quiver.magazine_current() ); + // But they do have ammo types and can contain ammo + REQUIRE_FALSE( quiver.ammo_types().empty() ); + REQUIRE( quiver.can_contain( arrow ) ); + + // Check empty quiver display + CHECK( quiver.display_name() == + "||\u00A0" + "test quiver (0)" ); + + // Insert one arrow + quiver.put_in( arrow, item_pocket::pocket_type::CONTAINER ); + // Expect 1 arrow remaining and displayed + CHECK( quiver.ammo_remaining() == 10 ); + CHECK( quiver.display_name() == + "||\u00A0" + "test quiver with test wooden broadhead arrow (10)" ); +} + From 71151cf1c49ceae132d5df47cc7ff9458c651928 Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Thu, 25 Jun 2020 23:46:15 -0600 Subject: [PATCH 110/206] Add dry cat and dog foods (#41594) * Add dry cat/dog food; rename current foods to wet These dry versions of the cat food and dog food come in a 6L plastic bag (24 servings), and have a long shelf life (90 days), and a different vitamin profile. * Add dry cat and dog food to itemgroups In most places where cat and dog food spawned, also spawn dry versions of each, at a lesser chance (since they have 12-24 servings per bag). --- data/json/itemgroups/Food/food.json | 6 +- .../locations_commercial.json | 16 ++++-- .../json/itemgroups/collections_domestic.json | 12 ++-- data/json/items/comestibles/other.json | 56 +++++++++++++++++-- data/json/mapgen/animalshelter.json | 6 +- 5 files changed, 78 insertions(+), 18 deletions(-) diff --git a/data/json/itemgroups/Food/food.json b/data/json/itemgroups/Food/food.json index 619ad523ac49a..1fa80744b6da6 100644 --- a/data/json/itemgroups/Food/food.json +++ b/data/json/itemgroups/Food/food.json @@ -52,8 +52,10 @@ "subtype": "distribution", "entries": [ { "item": "birdfood", "prob": 10 }, - { "item": "dogfood", "prob": 45, "container-item": "can_medium" }, - { "item": "catfood", "prob": 45, "container-item": "can_food" } + { "item": "dogfood", "prob": 30, "container-item": "can_medium" }, + { "item": "catfood", "prob": 30, "container-item": "can_food" }, + { "item": "dogfood_dry", "prob": 10, "charges": 12, "container-item": "bag_plastic" }, + { "item": "catfood_dry", "prob": 10, "charges": 12, "container-item": "bag_plastic" } ] }, { diff --git a/data/json/itemgroups/Locations_MapExtras/locations_commercial.json b/data/json/itemgroups/Locations_MapExtras/locations_commercial.json index 634fc8280163a..72f83068e3fac 100644 --- a/data/json/itemgroups/Locations_MapExtras/locations_commercial.json +++ b/data/json/itemgroups/Locations_MapExtras/locations_commercial.json @@ -1197,8 +1197,10 @@ "id": "petstore_misc", "type": "item_group", "items": [ - { "item": "dogfood", "prob": 35, "container-item": "can_medium" }, - { "item": "catfood", "prob": 35, "container-item": "can_food" }, + { "item": "dogfood", "prob": 20, "container-item": "can_medium" }, + { "item": "catfood", "prob": 20, "container-item": "can_food" }, + { "item": "dogfood_dry", "prob": 5, "charges": 24, "container-item": "bag_plastic" }, + { "item": "catfood_dry", "prob": 5, "charges": 24, "container-item": "bag_plastic" }, [ "birdfood", 15 ], [ "dog_whistle", 15 ], [ "flashlight", 5 ] @@ -1208,8 +1210,10 @@ "id": "petstore_shelves", "type": "item_group", "items": [ - { "item": "dogfood", "prob": 30, "container-item": "can_medium" }, - { "item": "catfood", "prob": 30, "container-item": "can_food" }, + { "item": "dogfood", "prob": 10, "container-item": "can_medium" }, + { "item": "catfood", "prob": 10, "container-item": "can_food" }, + { "item": "dogfood_dry", "prob": 10, "charges": 24, "container-item": "bag_plastic" }, + { "item": "catfood_dry", "prob": 10, "charges": 24, "container-item": "bag_plastic" }, [ "birdfood", 15 ], [ "can_tuna", 15 ], [ "can_chicken", 15 ], @@ -1748,8 +1752,8 @@ [ "dog_whistle", 10 ], [ "pet_carrier", 30 ], [ "petpack", 3 ], - { "item": "dogfood", "prob": 30, "container-item": "can_medium" }, - { "item": "catfood", "prob": 30, "container-item": "can_food" }, + { "item": "dogfood", "prob": 20, "container-item": "can_medium" }, + { "item": "catfood", "prob": 20, "container-item": "can_food" }, [ "birdfood", 10 ], [ "towel", 20 ], [ "soap", 10 ], diff --git a/data/json/itemgroups/collections_domestic.json b/data/json/itemgroups/collections_domestic.json index 8909d0d2636b1..2427251a264ee 100644 --- a/data/json/itemgroups/collections_domestic.json +++ b/data/json/itemgroups/collections_domestic.json @@ -421,8 +421,10 @@ { "item": "atomic_lamp", "prob": 1 }, { "item": "dog_whistle", "prob": 5 }, { "item": "pet_carrier", "prob": 2 }, - { "item": "dogfood", "prob": 10, "container-item": "can_medium" }, - { "item": "catfood", "prob": 10, "container-item": "can_food" }, + { "item": "dogfood", "prob": 5, "container-item": "can_medium" }, + { "item": "catfood", "prob": 5, "container-item": "can_food" }, + { "item": "dogfood_dry", "prob": 2, "charges": 8, "container-item": "bag_plastic" }, + { "item": "catfood_dry", "prob": 2, "charges": 8, "container-item": "bag_plastic" }, { "item": "nic_gum", "prob": 2 }, { "item": "oxygen_tank", "prob": 2 }, { "item": "smoxygen_tank", "prob": 1 }, @@ -587,8 +589,10 @@ { "item": "atomic_lamp", "prob": 1 }, { "item": "smart_lamp", "prob": 2 }, { "item": "dog_whistle", "prob": 5 }, - { "item": "dogfood", "prob": 20, "container-item": "can_medium" }, - { "item": "catfood", "prob": 20, "container-item": "can_food" }, + { "item": "dogfood", "prob": 10, "container-item": "can_medium" }, + { "item": "catfood", "prob": 10, "container-item": "can_food" }, + { "item": "dogfood_dry", "prob": 5, "charges": 12, "container-item": "bag_plastic" }, + { "item": "catfood_dry", "prob": 5, "charges": 12, "container-item": "bag_plastic" }, { "item": "charcoal", "prob": 5 }, { "item": "soap", "prob": 70 }, { "item": "detergent", "prob": 50 }, diff --git a/data/json/items/comestibles/other.json b/data/json/items/comestibles/other.json index 2bbdfbf5befa5..9fca8a82ad007 100644 --- a/data/json/items/comestibles/other.json +++ b/data/json/items/comestibles/other.json @@ -647,8 +647,8 @@ "id": "dogfood", "type": "COMESTIBLE", "comestible_type": "FOOD", - "name": { "str_sp": "dog food" }, - "description": "This is food for dogs. It smells strange, but dogs seem to love it.", + "name": { "str_sp": "wet dog food" }, + "description": "This is wet food for dogs, made from canned fresh meats. It smells strange, but dogs seem to love it.", "weight": "554 g", "spoils_in": "1 day", "container": "can_medium", @@ -667,12 +667,36 @@ "flags": [ "LUPINE" ], "use_action": [ "DOGFOOD" ] }, + { + "id": "dogfood_dry", + "type": "COMESTIBLE", + "comestible_type": "FOOD", + "name": { "str_sp": "dry dog food" }, + "description": "Dry morsels of dog food with a long shelf life. Made from dried processed meats and grains, and enriched with vitamins and minerals.", + "weight": "100 g", + "spoils_in": "90 days", + "container": "bag_plastic", + "volume": "250 ml", + "price": 300, + "price_postapoc": 400, + "to_hit": -5, + "material": [ "flesh" ], + "symbol": ";", + "healthy": 1, + "quench": -1, + "calories": 380, + "vitamins": [ [ "vitA", 25 ], [ "iron", 25 ], [ "vitB", 20 ], [ "calcium", 30 ] ], + "fun": -15, + "color": "brown", + "flags": [ "LUPINE" ], + "use_action": [ "DOGFOOD" ] + }, { "id": "catfood", "type": "COMESTIBLE", "comestible_type": "FOOD", - "name": { "str_sp": "cat food" }, - "description": "This is food for cats. It smells strange, but cats seem to love it.", + "name": { "str_sp": "wet cat food" }, + "description": "This is wet food for cats, made from canned fresh meats. It has a pungent aroma that cats seem to love.", "weight": "223 g", "spoils_in": "1 day", "container": "can_food", @@ -691,6 +715,30 @@ "flags": [ "FELINE" ], "use_action": [ "CATFOOD" ] }, + { + "id": "catfood_dry", + "type": "COMESTIBLE", + "comestible_type": "FOOD", + "name": { "str_sp": "dry cat food" }, + "description": "Dry kibbles of cat food with a long shelf life. Made from dried processed meats and grains, and enriched with vitamins and minerals.", + "weight": "100 g", + "spoils_in": "90 days", + "container": "bag_plastic", + "volume": "250 ml", + "price": 300, + "price_postapoc": 400, + "to_hit": -5, + "material": [ "flesh" ], + "symbol": ";", + "healthy": 1, + "quench": -1, + "calories": 380, + "vitamins": [ [ "vitA", 25 ], [ "iron", 25 ], [ "vitB", 20 ], [ "calcium", 30 ] ], + "fun": -15, + "color": "brown", + "flags": [ "FELINE" ], + "use_action": [ "CATFOOD" ] + }, { "type": "COMESTIBLE", "id": "grass", diff --git a/data/json/mapgen/animalshelter.json b/data/json/mapgen/animalshelter.json index 290c6db1d310b..b687d960f15a6 100644 --- a/data/json/mapgen/animalshelter.json +++ b/data/json/mapgen/animalshelter.json @@ -38,8 +38,10 @@ "entries": [ { "item": "dog_whistle", "prob": 10 }, { "item": "pet_carrier", "prob": 30 }, - { "item": "dogfood", "prob": 50, "container-item": "can_medium" }, - { "item": "catfood", "prob": 50, "container-item": "can_food" }, + { "item": "dogfood", "prob": 30, "container-item": "can_medium" }, + { "item": "catfood", "prob": 30, "container-item": "can_food" }, + { "item": "dogfood_dry", "prob": 10, "charges": 18, "container-item": "bag_plastic" }, + { "item": "catfood_dry", "prob": 10, "charges": 18, "container-item": "bag_plastic" }, { "item": "towel", "prob": 20 }, { "item": "soap", "prob": 10 }, { "item": "gloves_medical", "prob": 20 }, From d0cdbe48b3918365131271f573ac8cb599a9acca Mon Sep 17 00:00:00 2001 From: Xenomorph-III Date: Fri, 26 Jun 2020 17:49:37 +1200 Subject: [PATCH 111/206] Adds pipe fittings to the game (#41434) --- .../furniture-appliances.json | 14 ++++- data/json/itemgroups/collections_trades.json | 3 +- data/json/items/generic/spares.json | 12 +++++ data/json/recipes/recipe_others.json | 51 ++++++++++++++----- 4 files changed, 64 insertions(+), 16 deletions(-) diff --git a/data/json/furniture_and_terrain/furniture-appliances.json b/data/json/furniture_and_terrain/furniture-appliances.json index 11c38f3a32099..ec76bf4111e23 100644 --- a/data/json/furniture_and_terrain/furniture-appliances.json +++ b/data/json/furniture_and_terrain/furniture-appliances.json @@ -21,7 +21,8 @@ { "item": "hose", "count": [ 0, 2 ] }, { "item": "thermostat", "count": 1 }, { "item": "refrigerant_tank", "count": 1 }, - { "item": "motor_small", "count": 1 } + { "item": "motor_small", "count": 1 }, + { "item": "pipe_fittings", "count": [ 2, 6 ] } ] }, "bash": { @@ -36,6 +37,7 @@ { "item": "cable", "charges": [ 1, 15 ] }, { "item": "hose", "count": [ 0, 2 ] }, { "item": "cu_pipe", "count": [ 1, 4 ] }, + { "item": "pipe_fittings", "count": [ 1, 3 ] }, { "item": "scrap_copper", "count": [ 0, 2 ] } ] } @@ -104,6 +106,7 @@ { "item": "cable", "charges": [ 1, 15 ] }, { "item": "hose", "count": [ 1, 2 ] }, { "item": "motor_small", "count": 1 }, + { "item": "pipe_fittings", "count": [ 2, 6 ] }, { "item": "cu_pipe", "count": [ 2, 5 ] } ] }, @@ -118,6 +121,7 @@ { "item": "sheet_metal_small", "count": [ 8, 12 ] }, { "item": "sheet_metal", "count": [ 1, 2 ] }, { "item": "rag", "count": [ 5, 10 ] }, + { "item": "pipe_fittings", "count": [ 1, 3 ] }, { "item": "cable", "charges": [ 1, 15 ] }, { "item": "hose", "count": [ 0, 1 ] }, { "item": "cu_pipe", "count": [ 1, 4 ] }, @@ -146,6 +150,7 @@ { "item": "element", "count": [ 2, 3 ] }, { "item": "wire_mesh", "count": 1 }, { "item": "cable", "charges": [ 1, 15 ] }, + { "item": "pipe_fittings", "count": [ 2, 6 ] }, { "item": "motor_small", "charges": 1 }, { "item": "cu_pipe", "count": [ 1, 3 ] } ] @@ -160,6 +165,7 @@ { "item": "steel_chunk", "count": [ 0, 3 ] }, { "item": "sheet_metal_small", "count": [ 8, 12 ] }, { "item": "sheet_metal", "count": [ 1, 4 ] }, + { "item": "pipe_fittings", "count": [ 1, 3 ] }, { "item": "element", "count": [ 1, 3 ] }, { "item": "cable", "charges": [ 1, 15 ] } ] @@ -187,6 +193,7 @@ { "item": "condensor_coil", "count": 1 }, { "item": "evaporator_coil", "count": 1 }, { "item": "refrigerant_tank", "count": 1 }, + { "item": "pipe_fittings", "count": [ 2, 6 ] }, { "item": "thermostat", "count": 1 }, { "item": "motor_tiny", "count": 1 } ] @@ -203,6 +210,7 @@ { "item": "steel_chunk", "count": [ 0, 3 ] }, { "item": "scrap", "count": [ 2, 8 ] }, { "item": "cable", "charges": [ 1, 2 ] }, + { "item": "pipe_fittings", "count": [ 1, 3 ] }, { "item": "hose", "count": 1 }, { "item": "cu_pipe", "count": [ 2, 4 ] }, { "item": "scrap_copper", "count": [ 1, 2 ] }, @@ -231,6 +239,7 @@ { "item": "hose", "count": 1 }, { "item": "glass_sheet", "count": 1 }, { "item": "cu_pipe", "count": [ 3, 6 ] }, + { "item": "pipe_fittings", "count": [ 2, 6 ] }, { "item": "refrigerant_tank", "count": 1 }, { "item": "motor_tiny", "count": 1 } ] @@ -246,6 +255,7 @@ { "item": "sheet_metal_small", "count": [ 6, 9 ] }, { "item": "steel_chunk", "count": [ 0, 3 ] }, { "item": "scrap", "count": [ 2, 8 ] }, + { "item": "pipe_fittings", "count": [ 1, 3 ] }, { "item": "cable", "charges": [ 1, 3 ] }, { "item": "hose", "count": 1 }, { "item": "cu_pipe", "count": [ 1, 4 ] }, @@ -317,6 +327,7 @@ { "item": "sheet_metal", "count": [ 2, 6 ] }, { "item": "cable", "charges": [ 1, 15 ] }, { "item": "hose", "count": [ 1, 2 ] }, + { "item": "pipe_fittings", "count": [ 2, 6 ] }, { "item": "motor_small", "count": 1 }, { "item": "cu_pipe", "count": [ 2, 5 ] } ] @@ -333,6 +344,7 @@ { "item": "sheet_metal", "count": [ 1, 4 ] }, { "item": "cable", "charges": [ 1, 15 ] }, { "item": "hose", "count": [ 0, 2 ] }, + { "item": "pipe_fittings", "count": [ 1, 3 ] }, { "item": "cu_pipe", "count": [ 1, 4 ] }, { "item": "scrap_copper", "count": [ 0, 2 ] } ] diff --git a/data/json/itemgroups/collections_trades.json b/data/json/itemgroups/collections_trades.json index 21177d5ca82ea..7d22a84ea5575 100644 --- a/data/json/itemgroups/collections_trades.json +++ b/data/json/itemgroups/collections_trades.json @@ -53,7 +53,8 @@ { "group": "plumbing_clothing", "prob": 100 }, { "group": "tools_plumbing", "prob": 100 }, { "group": "supplies_plumbing", "prob": 50 }, - [ "survnote", 1 ] + [ "survnote", 1 ], + [ "pipe_fittings", 70 ] ] }, { diff --git a/data/json/items/generic/spares.json b/data/json/items/generic/spares.json index 15f72e4a04e07..0d99822a1a7c3 100644 --- a/data/json/items/generic/spares.json +++ b/data/json/items/generic/spares.json @@ -116,5 +116,17 @@ "volume": "1 L", "price": 1800, "price_postapoc": 500 + }, + { + "id": "pipe_fittings", + "copy-from": "spare_part", + "type": "GENERIC", + "name": { "str": "set of pipe fittings", "str_pl": "sets of pipe fittings" }, + "description": "A loose assortment of metal pipe fittings - end caps, pipe junctions, and similar items. They can be used in a variety of projects.", + "material": [ "iron" ], + "weight": "500 g", + "volume": "1 L", + "price": 1800, + "price_postapoc": 500 } ] diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index 1804daf373e29..a91bade313322 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -984,7 +984,7 @@ "time": "7 m", "autolearn": true, "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_M", "level": 1 } ], - "components": [ [ [ "pipe", 1 ] ], [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 1 ] ] ] + "components": [ [ [ "pipe", 1 ] ], [ [ "scrap", 1 ] ], [ [ "plastic_chunk", 1 ] ], [ [ "pipe_fittings", 1 ] ] ] }, { "type": "recipe", @@ -1026,7 +1026,7 @@ "decomp_learn": 1, "autolearn": true, "using": [ [ "welding_standard", 5 ] ], - "components": [ [ [ "pipe", 8 ] ], [ [ "sheet_metal", 2 ] ], [ [ "sheet_metal_small", 4 ] ] ] + "components": [ [ [ "pipe", 8 ] ], [ [ "sheet_metal", 2 ] ], [ [ "sheet_metal_small", 4 ] ], [ [ "pipe_fittings", 4 ] ] ] }, { "type": "recipe", @@ -1039,7 +1039,7 @@ "reversible": true, "autolearn": true, "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "WRENCH", "level": 1 } ], - "components": [ [ [ "pipe", 1 ] ], [ [ "steel_chunk", 2 ], [ "scrap", 6 ] ], [ [ "chain", 1 ] ] ] + "components": [ [ [ "pipe", 1 ] ], [ [ "steel_chunk", 2 ], [ "scrap", 6 ] ], [ [ "chain", 1 ] ], [ [ "pipe_fittings", 2 ] ] ] }, { "type": "recipe", @@ -1053,7 +1053,7 @@ "autolearn": true, "using": [ [ "welding_standard", 5 ] ], "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_M", "level": 1 } ], - "components": [ [ [ "pipe", 2 ] ], [ [ "sheet_metal_small", 5 ] ] ] + "components": [ [ [ "pipe", 2 ] ], [ [ "sheet_metal_small", 5 ] ], [ [ "pipe_fittings", 1 ] ] ] }, { "type": "recipe", @@ -1066,7 +1066,7 @@ "reversible": true, "autolearn": true, "using": [ [ "sewing_standard", 50 ], [ "welding_standard", 5 ] ], - "components": [ [ [ "pipe", 4 ] ], [ [ "spring", 2 ] ], [ [ "rag", 20 ], [ "sheet", 1 ] ] ] + "components": [ [ [ "pipe", 4 ] ], [ [ "spring", 2 ] ], [ [ "rag", 20 ], [ "sheet", 1 ] ], [ [ "pipe_fittings", 4 ] ] ] }, { "type": "recipe", @@ -1083,6 +1083,7 @@ [ [ "pipe", 4 ] ], [ [ "spring", 2 ] ], [ [ "leather", 12 ], [ "fur", 12 ], [ "tanned_hide", 3 ], [ "tanned_pelt", 3 ] ], + [ [ "pipe_fittings", 4 ] ], [ [ "rag", 8 ] ] ] }, @@ -1192,7 +1193,13 @@ "book_learn": [ [ "textbook_fabrication", 5 ], [ "textbook_mechanics", 3 ], [ "manual_mechanics", 3 ] ], "using": [ [ "welding_standard", 5 ] ], "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_M", "level": 1 }, { "id": "WRENCH", "level": 1 } ], - "components": [ [ [ "pipe", 6 ] ], [ [ "steel_chunk", 4 ], [ "scrap", 12 ] ], [ [ "wire", 3 ] ], [ [ "cable", 10 ] ] ] + "components": [ + [ [ "pipe", 6 ] ], + [ [ "steel_chunk", 4 ], [ "scrap", 12 ] ], + [ [ "wire", 3 ] ], + [ [ "cable", 10 ] ], + [ [ "pipe_fittings", 4 ] ] + ] }, { "type": "recipe", @@ -2135,7 +2142,7 @@ "autolearn": true, "qualities": [ { "id": "ANVIL", "level": 3 }, { "id": "HAMMER", "level": 2 } ], "tools": [ [ [ "forge", 150 ], [ "oxy_torch", 30 ] ] ], - "components": [ [ [ "steel_lump", 1 ], [ "steel_chunk", 4 ], [ "scrap", 12 ], [ "pipe", 3 ] ] ] + "components": [ [ [ "steel_lump", 1 ], [ "steel_chunk", 4 ], [ "scrap", 12 ], [ "pipe", 3 ], [ "pipe_fittings", 1 ] ] ] }, { "type": "recipe", @@ -2660,7 +2667,8 @@ [ [ "pilot_light", 1 ] ], [ [ "steel_lump", 3 ], [ "steel_chunk", 12 ], [ "scrap", 36 ] ], [ [ "metal_tank_little", 1 ] ], - [ [ "pipe", 3 ] ] + [ [ "pipe", 3 ] ], + [ [ "pipe_fittings", 2 ] ] ] }, { @@ -2753,7 +2761,8 @@ [ [ "cable", 4 ] ], [ [ "power_supply", 1 ] ], [ [ "metal_tank_little", 1 ] ], - [ [ "pipe", 8 ] ] + [ [ "pipe", 8 ] ], + [ [ "pipe_fittings", 4 ] ] ] }, { @@ -2814,7 +2823,12 @@ { "id": "WRENCH", "level": 1 } ], "tools": [ [ [ "welder", 150 ], [ "welder_crude", 225 ], [ "toolset", 225 ], [ "soldering_iron", 225 ], [ "oxy_torch", 30 ] ] ], - "components": [ [ [ "steel_lump", 5 ], [ "steel_chunk", 20 ], [ "scrap", 60 ] ], [ [ "metal_tank_little", 1 ] ], [ [ "pipe", 6 ] ] ] + "components": [ + [ [ "steel_lump", 5 ], [ "steel_chunk", 20 ], [ "scrap", 60 ] ], + [ [ "metal_tank_little", 1 ] ], + [ [ "pipe", 6 ] ], + [ [ "pipe_fittings", 4 ] ] + ] }, { "type": "recipe", @@ -4153,7 +4167,14 @@ "reversible": true, "using": [ [ "welding_standard", 5 ] ], "qualities": [ { "id": "HAMMER", "level": 2 }, { "id": "SAW_M", "level": 1 } ], - "components": [ [ [ "pipe", 2 ] ], [ [ "steel_plate", 2 ] ], [ [ "frame", 1 ] ], [ [ "wheel", 1 ] ], [ [ "motor", 1 ] ] ] + "components": [ + [ [ "pipe", 2 ] ], + [ [ "steel_plate", 2 ] ], + [ [ "frame", 1 ] ], + [ [ "wheel", 1 ] ], + [ [ "motor", 1 ] ], + [ [ "pipe_fittings", 2 ] ] + ] }, { "type": "recipe", @@ -4343,7 +4364,8 @@ [ [ "nail", 12 ] ], [ [ "wire", 6 ], [ "rope_6", 6 ], [ "vine_6", 6 ], [ "rope_makeshift_6", 6 ] ], [ [ "chain", 1 ], [ "rope_natural", 1, "LIST" ] ], - [ [ "spike", 2 ] ] + [ [ "spike", 2 ] ], + [ [ "pipe_fittings", 24 ] ] ] }, { @@ -4368,7 +4390,8 @@ [ [ "pipe", 15 ], [ "cu_pipe", 15 ], [ "frame", 2 ] ], [ [ "nail", 12 ] ], [ [ "wire", 6 ], [ "rope_natural_short", 6, "LIST" ] ], - [ [ "spike", 4 ] ] + [ [ "spike", 4 ] ], + [ [ "pipe_fittings", 30 ] ] ] }, { @@ -4382,7 +4405,7 @@ "autolearn": true, "book_learn": [ [ "textbook_fabrication", 2 ], [ "textbook_mechanics", 3 ] ], "qualities": [ { "id": "SAW_M", "level": 1 }, { "id": "DRILL", "level": 1 }, { "id": "SCREW", "level": 1 } ], - "components": [ [ [ "scrap", 6 ] ], [ [ "pipe", 6 ] ], [ [ "nail", 12 ] ], [ [ "sheet_metal", 1 ] ] ] + "components": [ [ [ "scrap", 6 ] ], [ [ "pipe", 6 ] ], [ [ "nail", 12 ] ], [ [ "sheet_metal", 1 ] ], [ [ "pipe_fittings", 6 ] ] ] }, { "type": "recipe", From 0e5613a59aec0ea305f52b82183f9322da6c5e01 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Fri, 26 Jun 2020 07:50:39 +0200 Subject: [PATCH 112/206] Move hp to bodypart object (#41194) --- data/json/anatomy.json | 2 +- data/json/body_parts.json | 13 ++ doc/JSON_INFO.md | 36 +++-- src/activity_handlers.cpp | 22 ++- src/bionics.cpp | 38 +++-- src/bodypart.cpp | 130 ++++++++++++++++ src/bodypart.h | 66 +++++++- src/character.cpp | 249 +++++++++---------------------- src/character.h | 14 +- src/creature.cpp | 173 +++++++++++++++++++-- src/creature.h | 37 ++++- src/debug_menu.cpp | 69 +++++---- src/gamemode_tutorial.cpp | 4 +- src/handle_action.cpp | 2 +- src/iexamine.cpp | 5 +- src/item.cpp | 4 +- src/iuse.cpp | 16 +- src/iuse_actor.cpp | 79 +++++----- src/magic.cpp | 8 +- src/magic_spell_effect.cpp | 17 +-- src/martialarts.cpp | 3 +- src/melee.cpp | 4 +- src/memorial_logger.cpp | 16 +- src/mission_companion.cpp | 19 +-- src/mondeath.cpp | 2 +- src/monster.cpp | 8 +- src/monster.h | 4 +- src/newcharacter.cpp | 13 +- src/npc.cpp | 31 ++-- src/npcmove.cpp | 34 ++--- src/npctalk_funcs.cpp | 4 +- src/panels.cpp | 18 ++- src/player.cpp | 19 +-- src/player_display.cpp | 3 +- src/player_hardcoded_effects.cpp | 10 +- src/savegame_json.cpp | 26 +++- src/start_location.cpp | 13 +- src/suffer.cpp | 46 +++--- tests/effective_dps_test.cpp | 4 +- tests/encumbrance_test.cpp | 1 + tests/iuse_test.cpp | 1 + tests/new_character_test.cpp | 5 +- tests/player_helpers.cpp | 3 +- tests/reload_option_test.cpp | 1 + 44 files changed, 785 insertions(+), 487 deletions(-) diff --git a/data/json/anatomy.json b/data/json/anatomy.json index 980cbf0cc0d01..4109d3fddc2a9 100644 --- a/data/json/anatomy.json +++ b/data/json/anatomy.json @@ -7,6 +7,6 @@ { "id": "default_anatomy", "type": "anatomy", - "parts": [ "torso" ] + "parts": [ "torso", "head" ] } ] diff --git a/data/json/body_parts.json b/data/json/body_parts.json index 9c7ceeb2bc38d..21a845e65be0c 100644 --- a/data/json/body_parts.json +++ b/data/json/body_parts.json @@ -19,6 +19,7 @@ "hot_morale_mod": 2, "cold_morale_mod": 2, "squeamish_penalty": 6, + "base_hp": 60, "bionic_slots": 80 }, { @@ -41,6 +42,7 @@ "hot_morale_mod": 2, "cold_morale_mod": 2, "squeamish_penalty": 7, + "base_hp": 60, "bionic_slots": 18 }, { @@ -60,6 +62,7 @@ "legacy_id": "EYES", "stylish_bonus": 2, "squeamish_penalty": 8, + "base_hp": 60, "bionic_slots": 4 }, { @@ -81,6 +84,7 @@ "hot_morale_mod": 2, "cold_morale_mod": 2, "squeamish_penalty": 9, + "base_hp": 60, "bionic_slots": 4 }, { @@ -105,6 +109,7 @@ "hot_morale_mod": 0.5, "cold_morale_mod": 0.5, "squeamish_penalty": 5, + "base_hp": 60, "bionic_slots": 20 }, { @@ -128,6 +133,7 @@ "hot_morale_mod": 0.5, "cold_morale_mod": 0.5, "squeamish_penalty": 5, + "base_hp": 60, "bionic_slots": 20 }, { @@ -151,6 +157,7 @@ "hot_morale_mod": 0.5, "cold_morale_mod": 0.5, "squeamish_penalty": 3, + "base_hp": 60, "bionic_slots": 5 }, { @@ -174,6 +181,7 @@ "hot_morale_mod": 0.5, "cold_morale_mod": 0.5, "squeamish_penalty": 3, + "base_hp": 60, "bionic_slots": 5 }, { @@ -198,6 +206,7 @@ "hot_morale_mod": 0.5, "cold_morale_mod": 0.5, "squeamish_penalty": 5, + "base_hp": 60, "bionic_slots": 30 }, { @@ -222,6 +231,7 @@ "hot_morale_mod": 0.5, "cold_morale_mod": 0.5, "squeamish_penalty": 5, + "base_hp": 60, "bionic_slots": 30 }, { @@ -245,6 +255,7 @@ "hot_morale_mod": 0.5, "cold_morale_mod": 0.5, "squeamish_penalty": 3, + "base_hp": 60, "bionic_slots": 7 }, { @@ -268,6 +279,7 @@ "hot_morale_mod": 0.5, "cold_morale_mod": 0.5, "squeamish_penalty": 3, + "base_hp": 60, "bionic_slots": 7 }, { @@ -284,6 +296,7 @@ "hit_size_relative": [ 0, 0, 0 ], "hit_difficulty": 0, "side": "both", + "base_hp": 60, "legacy_id": "NUM_BP" } ] diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index c46686f10646f..0848d94c2c5d6 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -424,22 +424,24 @@ This section describes each json file and their contents. Each json has their ow | Identifier | Description |--- |--- -| id | Unique ID. Must be one continuous word, use underscores if necessary. -| name | In-game name displayed. -| accusative | Accusative form for this bodypart. -| heading | How it's displayed in headings. -| heading_multiple | Plural form of heading. -| hp_bar_ui_text | How it's displayed next to the hp bar in the panel. -| main_part | What is the main part this one is attached to. (If this is a main part it's attached to itself) -| opposite_part | What is the opposite part ot this one in case of a pair. -| hit_size | Size of the body part when doing an unweighted selection. -| hit_size_relative | Hit sizes for attackers who are smaller, equal in size, and bigger. -| hit_difficulty | How hard is it to hit a given body part, assuming "owner" is hit. Higher number means good hits will veer towards this part, lower means this part is unlikely to be hit by inaccurate attacks. Formula is `chance *= pow(hit_roll, hit_difficulty)` -| stylish_bonus | Mood bonus associated with wearing fancy clothing on this part. (default: `0`) -| hot_morale_mod | Mood effect of being too hot on this part. (default: `0`) -| cold_morale_mod | Mood effect of being too cold on this part. (default: `0`) -| squeamish_penalty | Mood effect of wearing filthy clothing on this part. (default: `0`) -| bionic_slots | How many bionic slots does this part have. +| id | (_mandatory_) Unique ID. Must be one continuous word, use underscores if necessary. +| name | (_mandatory_) In-game name displayed. +| accusative | (_mandatory_) Accusative form for this bodypart. +| heading | (_mandatory_) How it's displayed in headings. +| heading_multiple | (_mandatory_) Plural form of heading. +| hp_bar_ui_text | (_mandatory_) How it's displayed next to the hp bar in the panel. +| main_part | (_mandatory_) What is the main part this one is attached to. (If this is a main part it's attached to itself) +| base_hp | (_mandatory_) The amount of hp this part has before any modification. +| opposite_part | (_mandatory_) What is the opposite part ot this one in case of a pair. +| hit_size | (_mandatory_) Size of the body part when doing an unweighted selection. +| hit_size_relative | (_mandatory_) Hit sizes for attackers who are smaller, equal in size, and bigger. +| hit_difficulty | (_mandatory_) How hard is it to hit a given body part, assuming "owner" is hit. Higher number means good hits will veer towards this part, lower means this part is unlikely to be hit by inaccurate attacks. Formula is `chance *= pow(hit_roll, hit_difficulty)` +| stylish_bonus | (_optional_) Mood bonus associated with wearing fancy clothing on this part. (default: `0`) +| hot_morale_mod | (_optional_) Mood effect of being too hot on this part. (default: `0`) +| cold_morale_mod | (_optional_) Mood effect of being too cold on this part. (default: `0`) +| squeamish_penalty | (_optional_) Mood effect of wearing filthy clothing on this part. (default: `0`) +| stat_hp_mods | (_optional_) Values modifiying hp_max of this part following this formula: `hp_max += int_mod*int_max + dex_mod*dex_max + str_mod*str_max + per_mod*per_max + health_mod*get_healthy()` with X_max being the unmodifed value of the X stat and get_healthy() being the hidden health stat of the character. +| bionic_slots | (_optional_) How many bionic slots does this part have. ```C++ { @@ -462,6 +464,8 @@ This section describes each json file and their contents. Each json has their ow "hot_morale_mod": 2, "cold_morale_mod": 2, "squeamish_penalty": 6, + "base_hp": 60, + "stat_hp_mods": { "int_mod": 4.0, "dex_mod": 1.0, "str_mod": 1.0, "per_mod": 1.0, "health_mod": 1.0 }, "bionic_slots": 80 } ``` diff --git a/src/activity_handlers.cpp b/src/activity_handlers.cpp index bac976525e9cb..b78ed5e47724e 100644 --- a/src/activity_handlers.cpp +++ b/src/activity_handlers.cpp @@ -4392,26 +4392,24 @@ void activity_handlers::tree_communion_do_turn( player_activity *act, player *p static void blood_magic( player *p, int cost ) { - static std::array part = { { - bodypart_id( "head" ), bodypart_id( "torso" ), bodypart_id( "arm_l" ), bodypart_id( "arm_r" ), bodypart_id( "leg_l" ), bodypart_id( "leg_r" ) - } - }; - int max_hp_part = 0; std::vector uile; - for( int i = 0; i < num_hp_parts; i++ ) { - uilist_entry entry( i, p->hp_cur[i] > cost, i + 49, body_part_hp_bar_ui_text( part[i] ) ); - if( p->hp_cur[max_hp_part] < p->hp_cur[i] ) { - max_hp_part = i; - } - const std::pair &hp = get_hp_bar( p->hp_cur[i], p->hp_max[i] ); + std::vector parts; + int i = 0; + for( const std::pair &part : p->get_body() ) { + const int hp_cur = part.second.get_hp_cur(); + uilist_entry entry( i, hp_cur > cost, i + 49, body_part_hp_bar_ui_text( part.first.id() ) ); + + const std::pair &hp = get_hp_bar( hp_cur, part.second.get_hp_max() ); entry.ctxt = colorize( hp.first, hp.second ); uile.emplace_back( entry ); + parts.push_back( part.first.id() ); + i++; } int action = -1; while( action < 0 ) { action = uilist( _( "Choose part\nto draw blood from." ), uile ); } - p->hp_cur[action] -= cost; + p->mod_part_hp_cur( parts[action], - cost ); p->mod_pain( std::max( 1, cost / 3 ) ); } diff --git a/src/bionics.cpp b/src/bionics.cpp index 88a7c58780ad7..1f8bdd8a35aea 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -1669,38 +1669,38 @@ void Character::process_bionic( int b ) static_cast( bio_hydraulics ) ); } else if( bio.id == bio_nanobots ) { if( get_power_level() >= 40_J ) { - std::forward_list bleeding_bp_parts; - for( const body_part bp : all_body_parts ) { - if( has_effect( effect_bleed, bp ) ) { - bleeding_bp_parts.push_front( static_cast( bp ) ); + std::forward_list bleeding_bp_parts; + for( const bodypart_id bp : get_all_body_parts() ) { + if( has_effect( effect_bleed, bp->token ) ) { + bleeding_bp_parts.push_front( bp ); } } - std::vector damaged_hp_parts; - for( int i = 0; i < num_hp_parts; i++ ) { - if( hp_cur[i] > 0 && hp_cur[i] < hp_max[i] ) { - damaged_hp_parts.push_back( i ); + std::vector damaged_hp_parts; + for( const std::pair &part : get_body() ) { + const int hp_cur = part.second.get_hp_cur(); + if( hp_cur > 0 && hp_cur < part.second.get_hp_max() ) { + damaged_hp_parts.push_back( part.first.id() ); // only healed and non-hp parts will have a chance of bleeding removal - bleeding_bp_parts.remove( static_cast( hp_to_bp( static_cast( i ) ) ) ); + bleeding_bp_parts.remove( part.first.id() ); } } if( calendar::once_every( 60_turns ) ) { bool try_to_heal_bleeding = true; if( get_stored_kcal() >= 5 && !damaged_hp_parts.empty() ) { - const hp_part part_to_heal = static_cast( damaged_hp_parts[ rng( 0, - damaged_hp_parts.size() - 1 ) ] ); + const bodypart_id part_to_heal = damaged_hp_parts[ rng( 0, damaged_hp_parts.size() - 1 ) ]; heal( part_to_heal, 1 ); mod_stored_kcal( -5 ); - const body_part bp_healed = hp_to_bp( part_to_heal ); - int hp_percent = static_cast( hp_cur[part_to_heal] ) / hp_max[part_to_heal] * 100; - if( has_effect( effect_bleed, bp_healed ) && rng( 0, 100 ) < hp_percent ) { - remove_effect( effect_bleed, bp_healed ); + int hp_percent = static_cast( get_part_hp_cur( part_to_heal ) ) / get_part_hp_max( + part_to_heal ) * 100; + if( has_effect( effect_bleed, part_to_heal->token ) && rng( 0, 100 ) < hp_percent ) { + remove_effect( effect_bleed, part_to_heal->token ); try_to_heal_bleeding = false; } } // if no bleed was removed, try to remove it on some other part if( try_to_heal_bleeding && !bleeding_bp_parts.empty() && rng( 0, 1 ) == 1 ) { - remove_effect( effect_bleed, static_cast( bleeding_bp_parts.front() ) ); + remove_effect( effect_bleed, bleeding_bp_parts.front()->token ); } } @@ -1769,10 +1769,8 @@ void Character::process_bionic( int b ) void Character::roll_critical_bionics_failure( body_part bp ) { - const hp_part limb = bp_to_hp( bp ); - - if( one_in( hp_cur[limb] / 4 ) ) { - hp_cur[limb] -= hp_cur[limb]; + if( one_in( get_part_hp_cur( convert_bp( bp ).id() ) / 4 ) ) { + set_part_hp_cur( convert_bp( bp ).id(), 0 ); } } diff --git a/src/bodypart.cpp b/src/bodypart.cpp index 110bf6d1ec3fd..cda9a32201a7b 100644 --- a/src/bodypart.cpp +++ b/src/bodypart.cpp @@ -217,6 +217,9 @@ void body_part_type::load( const JsonObject &jo, const std::string & ) mandatory( jo, was_loaded, "hit_difficulty", hit_difficulty ); mandatory( jo, was_loaded, "hit_size_relative", hit_size_relative ); + mandatory( jo, was_loaded, "base_hp", base_hp ); + optional( jo, was_loaded, "stat_hp_mods", hp_mods ); + mandatory( jo, was_loaded, "legacy_id", legacy_id ); token = legacy_id_to_enum( legacy_id ); @@ -381,3 +384,130 @@ void body_part_set::fill( const std::vector &bps ) parts.insert( bp.id() ); } } + +bodypart_id bodypart::get_id() const +{ + return id; +} + +void bodypart::set_hp_to_max() +{ + hp_cur = hp_max; +} + +bool bodypart::is_at_max_hp() const +{ + return hp_cur == hp_max; +} + +int bodypart::get_hp_cur() const +{ + return hp_cur; +} + +int bodypart::get_hp_max() const +{ + return hp_max; +} + +int bodypart::get_healed_total() const +{ + return healed_total; +} + +int bodypart::get_damage_bandaged() const +{ + return damage_bandaged; +} + +int bodypart::get_damage_disinfected() const +{ + return damage_disinfected; +} + +void bodypart::set_hp_cur( int set ) +{ + hp_cur = set; +} + +void bodypart::set_hp_max( int set ) +{ + hp_max = set; +} + +void bodypart::set_healed_total( int set ) +{ + healed_total = set; +} + +void bodypart::set_damage_bandaged( int set ) +{ + damage_bandaged = set; +} + +void bodypart::set_damage_disinfected( int set ) +{ + damage_disinfected = set; +} + +void bodypart::mod_hp_cur( int mod ) +{ + hp_cur += mod; +} + +void bodypart::mod_hp_max( int mod ) +{ + hp_max += mod; +} + +void bodypart::mod_healed_total( int mod ) +{ + healed_total += mod; +} + +void bodypart::mod_damage_bandaged( int mod ) +{ + damage_bandaged += mod; +} + +void bodypart::mod_damage_disinfected( int mod ) +{ + damage_disinfected += mod; +} + +void bodypart::serialize( JsonOut &json ) const +{ + json.start_object(); + json.member( "id", id ); + json.member( "hp_cur", hp_cur ); + json.member( "hp_max", hp_max ); + json.member( "damage_bandaged", damage_bandaged ); + json.member( "damage_disinfected", damage_disinfected ); + json.end_object(); +} + +void bodypart::deserialize( JsonIn &jsin ) +{ + JsonObject jo = jsin.get_object(); + jo.read( "id", id, true ); + jo.read( "hp_cur", hp_cur, true ); + jo.read( "hp_max", hp_max, true ); + jo.read( "damage_bandaged", damage_bandaged, true ); + jo.read( "damage_disinfected", damage_disinfected, true ); +} + +void stat_hp_mods::load( const JsonObject &jsobj ) +{ + optional( jsobj, was_loaded, "str_mod", str_mod, 3.0f ); + optional( jsobj, was_loaded, "dex_mod", dex_mod, 0.0f ); + optional( jsobj, was_loaded, "int_mod", int_mod, 0.0f ); + optional( jsobj, was_loaded, "per_mod", str_mod, 0.0f ); + + optional( jsobj, was_loaded, "health_mod", health_mod, 0.0f ); +} + +void stat_hp_mods::deserialize( JsonIn &jsin ) +{ + const JsonObject &jo = jsin.get_object(); + load( jo ); +} diff --git a/src/bodypart.h b/src/bodypart.h index 1d1449cdec3f1..500d733bc8e5d 100644 --- a/src/bodypart.h +++ b/src/bodypart.h @@ -14,6 +14,9 @@ #include "translations.h" class JsonObject; +class JsonIn; +class JsonOut; + template struct enum_traits; // The order is important ; pldata.h has to be in the same order @@ -66,6 +69,20 @@ struct body_part_type; using bodypart_str_id = string_id; using bodypart_id = int_id; +struct stat_hp_mods { + + float str_mod = 3.0f; + float dex_mod = 0.0f; + float int_mod = 0.0f; + float per_mod = 0.0f; + + float health_mod = 0.0f; + + bool was_loaded = false; + void load( const JsonObject &jsobj ); + void deserialize( JsonIn &jsin ); +}; + struct body_part_type { public: bodypart_str_id id; @@ -106,11 +123,12 @@ struct body_part_type { //Morale parameters float hot_morale_mod = 0; float cold_morale_mod = 0; - float stylish_bonus = 0; - int squeamish_penalty = 0; + int base_hp = 60; + stat_hp_mods hp_mods; + void load( const JsonObject &jo, const std::string &src ); void finalize(); void check() const; @@ -131,6 +149,50 @@ struct body_part_type { int bionic_slots_ = 0; }; +class bodypart +{ + private: + bodypart_str_id id; + + int hp_cur; + int hp_max; + + int healed_total = 0; + /** Not used yet*/ + int damage_bandaged = 0; + int damage_disinfected = 0; + + public: + bodypart(): id( bodypart_str_id( "num_bp" ) ), hp_cur( 0 ), hp_max( 0 ) {} + bodypart( bodypart_str_id id ): id( id ), hp_cur( id->base_hp ), hp_max( id->base_hp ) {} + + bodypart_id get_id() const; + + void set_hp_to_max(); + bool is_at_max_hp() const; + + int get_hp_cur() const; + int get_hp_max() const; + int get_healed_total() const; + int get_damage_bandaged() const; + int get_damage_disinfected() const; + + void set_hp_cur( int set ); + void set_hp_max( int set ); + void set_healed_total( int set ); + void set_damage_bandaged( int set ); + void set_damage_disinfected( int set ); + + void mod_hp_cur( int mod ); + void mod_hp_max( int mod ); + void mod_healed_total( int mod ); + void mod_damage_bandaged( int mod ); + void mod_damage_disinfected( int mod ); + + void serialize( JsonOut &json ) const; + void deserialize( JsonIn &jsin ); +}; + class body_part_set { private: diff --git a/src/character.cpp b/src/character.cpp index ba929106fe9bd..80955b7c4fb0c 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -407,8 +407,6 @@ Character::Character() : next_climate_control_check( calendar::before_time_starts ), last_climate_control_ret( false ) { - hp_cur.fill( 0 ); - hp_max.fill( 1 ); randomize_blood(); str_max = 0; dex_max = 0; @@ -1311,10 +1309,10 @@ int Character::get_working_arm_count() const } int limb_count = 0; - if( !is_limb_disabled( hp_arm_l ) ) { + if( !is_limb_disabled( bodypart_id( "arm_l" ) ) ) { limb_count++; } - if( !is_limb_disabled( hp_arm_r ) ) { + if( !is_limb_disabled( bodypart_id( "arm_r" ) ) ) { limb_count++; } if( has_bionic( bio_blaster ) && limb_count > 0 ) { @@ -1328,25 +1326,25 @@ int Character::get_working_arm_count() const int Character::get_working_leg_count() const { int limb_count = 0; - if( !is_limb_broken( hp_leg_l ) ) { + if( !is_limb_broken( bodypart_id( "leg_l" ) ) ) { limb_count++; } - if( !is_limb_broken( hp_leg_r ) ) { + if( !is_limb_broken( bodypart_id( "leg_r" ) ) ) { limb_count++; } return limb_count; } -bool Character::is_limb_disabled( hp_part limb ) const +bool Character::is_limb_disabled( const bodypart_id &limb ) const { - return hp_cur[limb] <= hp_max[limb] * .125; + return get_part_hp_cur( limb ) <= get_part_hp_max( limb ) * .125; } // this is the source of truth on if a limb is broken so all code to determine // if a limb is broken should point here to make any future changes to breaking easier -bool Character::is_limb_broken( hp_part limb ) const +bool Character::is_limb_broken( const bodypart_id &limb ) const { - return hp_cur[limb] == 0; + return get_part_hp_cur( limb ) == 0; } bool Character::can_run() const @@ -1714,7 +1712,6 @@ void Character::process_turn() void Character::recalc_hp() { - int new_max_hp[num_hp_parts]; int str_boost_val = 0; cata::optional str_boost = skill_boost::get( "str" ); if( str_boost ) { @@ -1727,28 +1724,8 @@ void Character::recalc_hp() // Mutated toughness stacks with starting, by design. float hp_mod = 1.0f + mutation_value( "hp_modifier" ) + mutation_value( "hp_modifier_secondary" ); float hp_adjustment = mutation_value( "hp_adjustment" ) + ( str_boost_val * 3 ); - for( auto &elem : new_max_hp ) { - /** @EFFECT_STR_MAX increases base hp */ - elem = 60 + str_max * 3 + hp_adjustment + get_fat_to_hp(); - elem *= hp_mod; - } - if( has_trait( trait_GLASSJAW ) ) { - new_max_hp[hp_head] *= 0.8; - } - for( int i = 0; i < num_hp_parts; i++ ) { - // Only recalculate when max changes, - // otherwise we end up walking all over due to rounding errors. - if( new_max_hp[i] == hp_max[i] ) { - continue; - } - // hp_max must be positive to avoiud undefined behavior. - hp_max[i] = std::max( hp_max[i], 1 ); - float max_hp_ratio = static_cast( new_max_hp[i] ) / - static_cast( hp_max[i] ); - hp_cur[i] = std::ceil( static_cast( hp_cur[i] ) * max_hp_ratio ); - hp_cur[i] = std::max( std::min( hp_cur[i], new_max_hp[i] ), 1 ); - hp_max[i] = new_max_hp[i]; - } + calc_all_parts_hp( hp_mod, hp_adjustment, str_max, dex_max, per_max, int_max, get_healthy(), + get_fat_to_hp() ); } // This must be called when any of the following change: @@ -3064,7 +3041,7 @@ ret_val Character::can_wear( const item &it, bool with_equip_change ) cons if( !it.covers( bp ) ) { continue; } - if( is_limb_broken( bp_to_hp( bp->token ) ) && !worn_with_flag( flag_SPLINT, bp ) ) { + if( is_limb_broken( bp ) && !worn_with_flag( flag_SPLINT, bp ) ) { need_splint = true; break; } @@ -3464,6 +3441,7 @@ void Character::normalize() martial_arts_data.reset_style(); weapon = item( "null", 0 ); + set_body(); recalc_hp(); } @@ -4536,7 +4514,7 @@ void Character::on_damage_of_type( int adjusted_damage, damage_type type, const } const std::map &bodyparts = info.occupied_bodyparts; if( bodyparts.find( bp.id() ) != bodyparts.end() ) { - const int bp_hp = hp_cur[bp_to_hp( bp->token )]; + const int bp_hp = get_part_hp_cur( bp ); // The chance to incapacitate is as high as 50% if the attack deals damage equal to one third of the body part's current health. if( x_in_y( adjusted_damage * 3, bp_hp ) && one_in( 2 ) ) { if( i.incapacitated_time == 0_turns ) { @@ -4593,7 +4571,7 @@ void Character::regen( int rate_multiplier ) int healing_apply = roll_remainder( healing ); healed_bp( i, healing_apply ); - heal( bp->token, healing_apply ); + heal( bp, healing_apply ); if( damage_bandaged[i] > 0 ) { damage_bandaged[i] -= healing_apply; if( damage_bandaged[i] <= 0 ) { @@ -4612,12 +4590,12 @@ void Character::regen( int rate_multiplier ) } // remove effects if the limb was healed by other way - if( has_effect( effect_bandaged, bp->token ) && ( hp_cur[i] == hp_max[i] ) ) { + if( has_effect( effect_bandaged, bp->token ) && ( get_part( bp )->is_at_max_hp() ) ) { damage_bandaged[i] = 0; remove_effect( effect_bandaged, bp->token ); add_msg_if_player( _( "Bandaged wounds on your %s healed." ), body_part_name( bp ) ); } - if( has_effect( effect_disinfected, bp->token ) && ( hp_cur[i] == hp_max[i] ) ) { + if( has_effect( effect_disinfected, bp->token ) && ( get_part( bp )->is_at_max_hp() ) ) { damage_disinfected[i] = 0; remove_effect( effect_disinfected, bp->token ); add_msg_if_player( _( "Disinfected wounds on your %s healed." ), body_part_name( bp ) ); @@ -4631,11 +4609,11 @@ void Character::regen( int rate_multiplier ) void Character::enforce_minimum_healing() { - for( int i = 0; i < num_hp_parts; i++ ) { - if( healed_total[i] <= 0 ) { - heal( static_cast( i ), 1 ); + for( const bodypart_id &bp : get_all_body_parts() ) { + if( get_part_healed_total( bp ) <= 0 ) { + heal( bp, 1 ); } - healed_total[i] = 0; + set_part_healed_total( bp, 0 ); } } @@ -5112,13 +5090,13 @@ void Character::check_needs_extremes() _( "You have a sudden heart attack!" ), _( " has a sudden heart attack!" ) ); g->events().send( getID(), efftype_id() ); - hp_cur[hp_torso] = 0; + set_part_hp_cur( bodypart_id( "torso" ), 0 ); } else if( get_stim() < -200 || get_painkiller() > 240 ) { add_msg_player_or_npc( m_bad, _( "Your breathing stops completely." ), _( "'s breathing stops completely." ) ); g->events().send( getID(), efftype_id() ); - hp_cur[hp_torso] = 0; + set_part_hp_cur( bodypart_id( "torso" ), 0 ); } else if( has_effect( effect_jetinjector ) && get_effect_dur( effect_jetinjector ) > 40_minutes ) { if( !( has_trait( trait_NOPAIN ) ) ) { add_msg_player_or_npc( m_bad, @@ -5129,19 +5107,19 @@ void Character::check_needs_extremes() _( "'s heart spasms and stops." ) ); } g->events().send( getID(), effect_jetinjector ); - hp_cur[hp_torso] = 0; + set_part_hp_cur( bodypart_id( "torso" ), 0 ); } else if( get_effect_dur( effect_adrenaline ) > 50_minutes ) { add_msg_player_or_npc( m_bad, _( "Your heart spasms and stops." ), _( "'s heart spasms and stops." ) ); g->events().send( getID(), effect_adrenaline ); - hp_cur[hp_torso] = 0; + set_part_hp_cur( bodypart_id( "torso" ), 0 ); } else if( get_effect_int( effect_drunk ) > 4 ) { add_msg_player_or_npc( m_bad, _( "Your breathing slows down to a stop." ), _( "'s breathing slows down to a stop." ) ); g->events().send( getID(), effect_drunk ); - hp_cur[hp_torso] = 0; + set_part_hp_cur( bodypart_id( "torso" ), 0 ); } // check if we've starved @@ -5149,7 +5127,7 @@ void Character::check_needs_extremes() if( get_stored_kcal() <= 0 ) { add_msg_if_player( m_bad, _( "You have starved to death." ) ); g->events().send( getID() ); - hp_cur[hp_torso] = 0; + set_part_hp_cur( bodypart_id( "torso" ), 0 ); } else { if( calendar::once_every( 12_hours ) ) { std::string category; @@ -5189,7 +5167,7 @@ void Character::check_needs_extremes() if( get_thirst() >= 1200 ) { add_msg_if_player( m_bad, _( "You have died of dehydration." ) ); g->events().send( getID() ); - hp_cur[hp_torso] = 0; + set_part_hp_cur( bodypart_id( "torso" ), 0 ); } else if( get_thirst() >= 1000 && calendar::once_every( 30_minutes ) ) { add_msg_if_player( m_warning, _( "Even your eyes feel dry…" ) ); } else if( get_thirst() >= 800 && calendar::once_every( 30_minutes ) ) { @@ -6048,21 +6026,15 @@ Character::comfort_response_t Character::base_comfort_value( const tripoint &p ) int Character::blood_loss( const bodypart_id &bp ) const { - int hp_cur_sum = 1; - int hp_max_sum = 1; + int hp_cur_sum = get_part_hp_cur( bp ); + int hp_max_sum = get_part_hp_max( bp ); if( bp == bodypart_id( "leg_l" ) || bp == bodypart_id( "leg_r" ) ) { - hp_cur_sum = hp_cur[hp_leg_l] + hp_cur[hp_leg_r]; - hp_max_sum = hp_max[hp_leg_l] + hp_max[hp_leg_r]; + hp_cur_sum = get_part_hp_cur( bodypart_id( "leg_l" ) ) + get_part_hp_cur( bodypart_id( "leg_r" ) ); + hp_max_sum = get_part_hp_max( bodypart_id( "leg_l" ) ) + get_part_hp_max( bodypart_id( "leg_r" ) ); } else if( bp == bodypart_id( "arm_l" ) || bp == bodypart_id( "arm_r" ) ) { - hp_cur_sum = hp_cur[hp_arm_l] + hp_cur[hp_arm_r]; - hp_max_sum = hp_max[hp_arm_l] + hp_max[hp_arm_r]; - } else if( bp == bodypart_id( "torso" ) ) { - hp_cur_sum = hp_cur[hp_torso]; - hp_max_sum = hp_max[hp_torso]; - } else if( bp == bodypart_id( "head" ) ) { - hp_cur_sum = hp_cur[hp_head]; - hp_max_sum = hp_max[hp_head]; + hp_cur_sum = get_part_hp_cur( bodypart_id( "arm_l" ) ) + get_part_hp_cur( bodypart_id( "arm_r" ) ); + hp_max_sum = get_part_hp_max( bodypart_id( "arm_l" ) ) + get_part_hp_max( bodypart_id( "arm_r" ) ); } hp_cur_sum = std::min( hp_max_sum, std::max( 0, hp_cur_sum ) ); @@ -6125,9 +6097,8 @@ hp_part Character::body_window( const std::string &menu_header, const auto &e = parts[i]; const bodypart_id &bp = e.bp; const body_part bp_token = bp->token; - const hp_part hp = e.hp; - const int maximal_hp = hp_max[hp]; - const int current_hp = hp_cur[hp]; + const int maximal_hp = get_part_hp_max( bp ); + const int current_hp = get_part_hp_cur( bp ); // This will c_light_gray if the part does not have any effects cured by the item/effect // (e.g. it cures only bites, but the part does not have a bite effect) const nc_color state_col = limb_color( bp, bleed > 0.0f, bite > 0.0f, infect > 0.0f ); @@ -6135,7 +6106,7 @@ hp_part Character::body_window( const std::string &menu_header, // The same as in the main UI sidebar. Independent of the capability of the healing item/effect! const nc_color all_state_col = limb_color( bp, true, true, true ); // Broken means no HP can be restored, it requires surgical attention. - const bool limb_is_broken = is_limb_broken( hp ); + const bool limb_is_broken = is_limb_broken( bp ); const bool limb_is_mending = worn_with_flag( flag_SPLINT, bp ); if( show_all ) { @@ -6952,15 +6923,13 @@ std::string Character::extended_description() const // This is a stripped-down version of the body_window function // This should be extracted into a separate function later on - for( const bodypart_id bp : bps ) { + for( const bodypart_id &bp : bps ) { const std::string &bp_heading = body_part_name_as_heading( bp, 1 ); - hp_part hp = bp_to_hp( bp->token ); - const int maximal_hp = hp_max[hp]; - const int current_hp = hp_cur[hp]; const nc_color state_col = limb_color( bp, true, true, true ); nc_color name_color = state_col; - auto hp_bar = get_hp_bar( current_hp, maximal_hp, false ); + std::pair hp_bar = get_hp_bar( get_part_hp_cur( bp ), get_part_hp_max( bp ), + false ); ss += colorize( left_justify( bp_heading, longest ), name_color ); ss += colorize( hp_bar.first, hp_bar.second ); @@ -8700,18 +8669,17 @@ void Character::apply_damage( Creature *source, bodypart_id hurt, int dam, const // Or if we're debugging and don't want to die return; } - body_part enum_bp = hurt->token; - hp_part hurtpart = bp_to_hp( enum_bp ); - if( hurtpart == num_hp_parts ) { + + if( hurt == bodypart_id( "num_bp" ) ) { debugmsg( "Wacky body part hurt!" ); - hurtpart = hp_torso; + hurt = bodypart_id( "torso" ); } mod_pain( dam / 2 ); - const int dam_to_bodypart = std::min( dam, hp_cur[hurtpart] ); + const int dam_to_bodypart = std::min( dam, get_part_hp_cur( hurt ) ); - hp_cur[hurtpart] -= dam_to_bodypart; + mod_part_hp_cur( hurt, - dam_to_bodypart ); g->events().send( getID(), dam_to_bodypart ); if( !weapon.is_null() && !as_player()->can_wield( weapon ).success() && @@ -8721,9 +8689,9 @@ void Character::apply_damage( Creature *source, bodypart_id hurt, int dam, const put_into_vehicle_or_drop( *this, item_drop_reason::tumbling, { weapon } ); i_rem( &weapon ); } - if( has_effect( effect_mending, enum_bp ) && ( source == nullptr || + if( has_effect( effect_mending, hurt->token ) && ( source == nullptr || !source->is_hallucination() ) ) { - effect &e = get_effect( effect_mending, enum_bp ); + effect &e = get_effect( effect_mending, hurt->token ); float remove_mend = dam / 20.0f; e.mod_duration( -e.get_max_duration() * remove_mend ); } @@ -8735,10 +8703,10 @@ void Character::apply_damage( Creature *source, bodypart_id hurt, int dam, const if( !bypass_med ) { // remove healing effects if damaged int remove_med = roll_remainder( dam / 5.0f ); - if( remove_med > 0 && has_effect( effect_bandaged, enum_bp ) ) { + if( remove_med > 0 && has_effect( effect_bandaged, hurt->token ) ) { remove_med -= reduce_healing_effect( effect_bandaged, remove_med, hurt ); } - if( remove_med > 0 && has_effect( effect_disinfected, enum_bp ) ) { + if( remove_med > 0 && has_effect( effect_disinfected, hurt->token ) ) { reduce_healing_effect( effect_disinfected, remove_med, hurt ); } } @@ -8764,8 +8732,7 @@ dealt_damage_instance Character::deal_damage( Creature *source, bodypart_id bp, //monster hits player melee SCT.add( point( posx(), posy() ), direction_from( point_zero, point( posx() - source->posx(), posy() - source->posy() ) ), - get_hp_bar( dam, get_hp_max( player::bp_to_hp( bp->token ) ) ).first, m_bad, - body_part_name( bp ), m_neutral ); + get_hp_bar( dam, get_hp_max( bp ) ).first, m_bad, body_part_name( bp ), m_neutral ); } } @@ -8921,72 +8888,23 @@ int Character::reduce_healing_effect( const efftype_id &eff_id, int remove_med, void Character::heal_bp( bodypart_id bp, int dam ) { - heal( bp->token, dam ); + heal( bp, dam ); } -void Character::heal( body_part healed, int dam ) -{ - hp_part healpart; - switch( healed ) { - case bp_eyes: - // Fall through to head damage - case bp_mouth: - // Fall through to head damage - case bp_head: - healpart = hp_head; - break; - case bp_torso: - healpart = hp_torso; - break; - case bp_hand_l: - // Shouldn't happen, but fall through to arms - debugmsg( "Heal against hands!" ); - /* fallthrough */ - case bp_arm_l: - healpart = hp_arm_l; - break; - case bp_hand_r: - // Shouldn't happen, but fall through to arms - debugmsg( "Heal against hands!" ); - /* fallthrough */ - case bp_arm_r: - healpart = hp_arm_r; - break; - case bp_foot_l: - // Shouldn't happen, but fall through to legs - debugmsg( "Heal against feet!" ); - /* fallthrough */ - case bp_leg_l: - healpart = hp_leg_l; - break; - case bp_foot_r: - // Shouldn't happen, but fall through to legs - debugmsg( "Heal against feet!" ); - /* fallthrough */ - case bp_leg_r: - healpart = hp_leg_r; - break; - default: - debugmsg( "Wacky body part healed!" ); - healpart = hp_torso; - } - heal( healpart, dam ); -} - -void Character::heal( hp_part healed, int dam ) +void Character::heal( const bodypart_id &healed, int dam ) { if( !is_limb_broken( healed ) ) { - int effective_heal = std::min( dam, hp_max[healed] - hp_cur[healed] ); - hp_cur[healed] += effective_heal; + int effective_heal = std::min( dam, get_part_hp_max( healed ) - get_part_hp_cur( healed ) ); + mod_part_hp_cur( healed, effective_heal ); g->events().send( getID(), effective_heal ); } } void Character::healall( int dam ) { - for( int healed_part = 0; healed_part < num_hp_parts; healed_part++ ) { - heal( static_cast( healed_part ), dam ); - healed_bp( healed_part, dam ); + for( const bodypart_id &bp : get_all_body_parts() ) { + heal( bp, dam ); + mod_part_healed_total( bp, dam ); } } @@ -8996,11 +8914,10 @@ void Character::hurtall( int dam, Creature *source, bool disturb /*= true*/ ) return; } - for( int i = 0; i < num_hp_parts; i++ ) { - const hp_part bp = static_cast( i ); + for( const bodypart_id &bp : get_all_body_parts() ) { // Don't use apply_damage here or it will annoy the player with 6 queries - const int dam_to_bodypart = std::min( dam, hp_cur[bp] ); - hp_cur[bp] -= dam_to_bodypart; + const int dam_to_bodypart = std::min( dam, get_part_hp_cur( bp ) ); + mod_part_hp_cur( bp, - dam_to_bodypart ); g->events().send( getID(), dam_to_bodypart ); } @@ -9025,7 +8942,8 @@ int Character::hitall( int dam, int vary, Creature *source ) void Character::on_hurt( Creature *source, bool disturb /*= true*/ ) { if( has_trait( trait_ADRENALINE ) && !has_effect( effect_adrenaline ) && - ( hp_cur[hp_head] < 25 || hp_cur[hp_torso] < 15 ) ) { + ( get_part_hp_cur( bodypart_id( "head" ) ) < 25 || + get_part_hp_cur( bodypart_id( "torso" ) ) < 15 ) ) { add_effect( effect_adrenaline, 20_minutes ); } @@ -10463,10 +10381,10 @@ int Character::run_cost( int base_cost, bool diag ) const } // Linearly increase move cost relative to individual leg hp. - movecost += 50 * ( 1 - std::sqrt( static_cast( hp_cur[hp_leg_l] ) / - static_cast( hp_max[hp_leg_l] ) ) ); - movecost += 50 * ( 1 - std::sqrt( static_cast( hp_cur[hp_leg_r] ) / - static_cast( hp_max[hp_leg_r] ) ) ); + movecost += 50 * ( 1 - std::sqrt( static_cast( get_part_hp_cur( bodypart_id( "leg_l" ) ) ) / + static_cast( get_part_hp_max( bodypart_id( "leg_l" ) ) ) ) ); + movecost += 50 * ( 1 - std::sqrt( static_cast( get_part_hp_cur( bodypart_id( "leg_r" ) ) ) / + static_cast( get_part_hp_max( bodypart_id( "leg_r" ) ) ) ) ); movecost *= mutation_value( "movecost_modifier" ); if( flatground ) { @@ -10797,16 +10715,12 @@ bool Character::has_weapon() const return !unarmed_attack(); } -int Character::get_hp() const -{ - return get_hp( num_hp_parts ); -} - int Character::get_lowest_hp() const { // Set lowest_hp to an arbitrarily large number. int lowest_hp = 999; - for( int cur_hp : this->hp_cur ) { + for( const std::pair &elem : get_body() ) { + const int cur_hp = elem.second.get_hp_cur(); if( cur_hp < lowest_hp ) { lowest_hp = cur_hp; } @@ -10814,35 +10728,6 @@ int Character::get_lowest_hp() const return lowest_hp; } -int Character::get_hp( hp_part bp ) const -{ - if( bp < num_hp_parts ) { - return hp_cur[bp]; - } - int hp_total = 0; - for( int i = 0; i < num_hp_parts; ++i ) { - hp_total += hp_cur[i]; - } - return hp_total; -} - -int Character::get_hp_max() const -{ - return get_hp_max( num_hp_parts ); -} - -int Character::get_hp_max( hp_part bp ) const -{ - if( bp < num_hp_parts ) { - return hp_max[bp]; - } - int hp_total = 0; - for( int i = 0; i < num_hp_parts; ++i ) { - hp_total += hp_max[i]; - } - return hp_total; -} - Creature::Attitude Character::attitude_to( const Creature &other ) const { const auto m = dynamic_cast( &other ); diff --git a/src/character.h b/src/character.h index c7fa82c3c7c72..d58d31a355c25 100644 --- a/src/character.h +++ b/src/character.h @@ -870,9 +870,9 @@ class Character : public Creature, public visitable /** Returns the number of functioning legs */ int get_working_leg_count() const; /** Returns true if the limb is disabled(12.5% or less hp)*/ - bool is_limb_disabled( hp_part limb ) const; + bool is_limb_disabled( const bodypart_id &limb ) const; /** Returns true if the limb is broken */ - bool is_limb_broken( hp_part limb ) const; + bool is_limb_broken( const bodypart_id &limb ) const; /** source of truth of whether a Character can run */ bool can_run() const; /** Hurts all body parts for dam, no armor reduction */ @@ -883,9 +883,8 @@ class Character : public Creature, public visitable void on_hurt( Creature *source, bool disturb = true ); /** Heals a body_part for dam */ void heal_bp( bodypart_id bp, int dam ) override; - void heal( body_part healed, int dam ); /** Heals an hp_part for dam */ - void heal( hp_part healed, int dam ); + void heal( const bodypart_id &healed, int dam ); /** Heals all body parts for dam */ void healall( int dam ); @@ -1708,7 +1707,7 @@ class Character : public Creature, public visitable bool male = false; std::list worn; - std::array hp_cur, hp_max, damage_bandaged, damage_disinfected; + std::array damage_bandaged, damage_disinfected; bool nv_cached = false; // Means player sit inside vehicle on the tile he is now bool in_vehicle = false; @@ -2228,11 +2227,6 @@ class Character : public Creature, public visitable // used in debugging all health int get_lowest_hp() const; - - int get_hp( hp_part bp ) const override; - int get_hp() const override; - int get_hp_max( hp_part bp ) const override; - int get_hp_max() const override; bool has_weapon() const override; void shift_destination( const point &shift ); // Auto move methods diff --git a/src/creature.cpp b/src/creature.cpp index 430af8795292a..25c59fc1655d9 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -656,13 +656,15 @@ void Creature::deal_projectile_attack( Creature *source, dealt_projectile_attack game_message_type gmtSCTcolor = m_neutral; if( magic ) { damage_mult *= rng_float( 0.9, 1.1 ); - } else if( goodhit < accuracy_headshot && max_damage * crit_multiplier > get_hp_max( hp_head ) ) { + } else if( goodhit < accuracy_headshot && + max_damage * crit_multiplier > get_hp_max( bodypart_id( "head" ) ) ) { message = _( "Headshot!" ); gmtSCTcolor = m_headshot; damage_mult *= rng_float( 0.95, 1.05 ); damage_mult *= crit_multiplier; bp_hit = bodypart_id( "head" ); // headshot hits the head, of course - } else if( goodhit < accuracy_critical && max_damage * crit_multiplier > get_hp_max( hp_torso ) ) { + } else if( goodhit < accuracy_critical && + max_damage * crit_multiplier > get_hp_max( bodypart_id( "torso" ) ) ) { message = _( "Critical!" ); gmtSCTcolor = m_critical; damage_mult *= rng_float( 0.75, 1.0 ); @@ -696,8 +698,7 @@ void Creature::deal_projectile_attack( Creature *source, dealt_projectile_attack impact.mult_damage( damage_mult ); if( proj_effects.count( "NOGIB" ) > 0 ) { - float dmg_ratio = static_cast( impact.total_damage() ) / get_hp_max( player::bp_to_hp( - bp_hit->token ) ); + float dmg_ratio = static_cast( impact.total_damage() ) / get_hp_max( bp_hit ); if( dmg_ratio > 1.25f ) { impact.mult_damage( 1.0f / dmg_ratio ); } @@ -1434,6 +1435,122 @@ void Creature::set_anatomy( const anatomy_id &anat ) creature_anatomy = anat; } +std::map Creature::get_body() const +{ + return body; +} + +void Creature::set_body() +{ + for( const bodypart_id &bp : get_anatomy()->get_bodyparts() ) { + body.emplace( bp.id(), bodypart( bp.id() ) ); + } +} + +void Creature::calc_all_parts_hp( float hp_mod, float hp_adjustment, int str_max, int dex_max, + int per_max, int int_max, int healthy_mod, int fat_to_max_hp ) +{ + for( std::pair &part : body ) { + int new_max = ( part.first->base_hp + str_max * part.first->hp_mods.str_mod + dex_max * + part.first->hp_mods.dex_mod + int_max * part.first->hp_mods.int_mod + per_max * + part.first->hp_mods.per_mod + part.first->hp_mods.health_mod * healthy_mod + fat_to_max_hp + + hp_adjustment ) * hp_mod; + + if( has_trait( trait_id( "GLASSJAW" ) ) && part.first == bodypart_str_id( "head" ) ) { + new_max *= 0.8; + } + + float max_hp_ratio = static_cast( new_max ) / + static_cast( part.second.get_hp_max() ); + + int new_cur = std::ceil( static_cast( part.second.get_hp_cur() ) * max_hp_ratio ); + + part.second.set_hp_max( std::max( new_max, 1 ) ); + part.second.set_hp_cur( std::max( std::min( new_cur, new_max ), 1 ) ); + } +} + + +bodypart *Creature::get_part( const bodypart_id &id ) +{ + auto found = body.find( id.id() ); + if( found == body.end() ) { + debugmsg( "Could not find bodypart %s in %s's body", id.id().c_str(), get_name() ); + return nullptr; + } + return &found->second; +} + +bodypart Creature::get_part( const bodypart_id &id ) const +{ + auto found = body.find( id.id() ); + if( found == body.end() ) { + debugmsg( "Could not find bodypart %s in %s's body", id.id().c_str(), get_name() ); + return bodypart(); + } + return found->second; +} + +int Creature::get_part_hp_cur( const bodypart_id &id ) const +{ + return get_part( id ).get_hp_cur(); +} + +int Creature::get_part_hp_max( const bodypart_id &id ) const +{ + return get_part( id ).get_hp_max(); +} + +int Creature::get_part_healed_total( const bodypart_id &id ) const +{ + return get_part( id ).get_healed_total(); +} + +void Creature::set_part_hp_cur( const bodypart_id &id, int set ) +{ + get_part( id )->set_hp_cur( set ); +} + +void Creature::set_part_hp_max( const bodypart_id &id, int set ) +{ + get_part( id )->set_hp_max( set ); +} + +void Creature::set_part_healed_total( const bodypart_id &id, int set ) +{ + get_part( id )->set_healed_total( set ); +} + +void Creature::mod_part_hp_cur( const bodypart_id &id, int mod ) +{ + get_part( id )->mod_hp_cur( mod ); +} + +void Creature::mod_part_hp_max( const bodypart_id &id, int mod ) +{ + get_part( id )->mod_hp_max( mod ); +} + +void Creature::mod_part_healed_total( const bodypart_id &id, int mod ) +{ + get_part( id )->mod_healed_total( mod ); +} + +void Creature::set_all_parts_hp_cur( const int set ) +{ + for( std::pair &elem : body ) { + elem.second.set_hp_cur( set ); + } +} + +void Creature::set_all_parts_hp_to_max() +{ + for( std::pair &elem : body ) { + elem.second.set_hp_to_max(); + } +} + + bodypart_id Creature::get_random_body_part( bool main ) const { // TODO: Refuse broken limbs, adjust for mutations @@ -1443,17 +1560,49 @@ bodypart_id Creature::get_random_body_part( bool main ) const std::vector Creature::get_all_body_parts( bool only_main ) const { - // TODO: Remove broken parts, parts removed by mutations etc. + std::vector all_bps; + for( const std::pair &elem : body ) { + if( only_main && elem.first->main_part != elem.first ) { + continue; + } + all_bps.push_back( elem.first ); + } - const std::vector all_bps = get_anatomy()->get_bodyparts(); - std::vector main_bps; + return all_bps; +} - for( const bodypart_id bp : all_bps ) { - if( bp->main_part.id() == bp ) { - main_bps.emplace_back( bp ); - } +int Creature::get_hp( const bodypart_id &bp ) const +{ + if( bp != bodypart_id( "num_bp" ) ) { + return get_part_hp_cur( bp ); + } + int hp_total = 0; + for( const std::pair &elem : get_body() ) { + hp_total += elem.second.get_hp_cur(); } - return only_main ? main_bps : all_bps; + return hp_total; +} + +int Creature::get_hp() const +{ + return get_hp( bodypart_id( "num_bp" ) ); +} + +int Creature::get_hp_max( const bodypart_id &bp ) const +{ + if( bp != bodypart_id( "num_bp" ) ) { + return get_part_hp_max( bp ); + } + int hp_total = 0; + for( const std::pair &elem : get_body() ) { + hp_total += elem.second.get_hp_max(); + } + return hp_total; +} + +int Creature::get_hp_max() const +{ + return get_hp_max( bodypart_id( "num_bp" ) ); } int Creature::get_speed_base() const diff --git a/src/creature.h b/src/creature.h index ce419182ace38..e6d22a3a57fc0 100644 --- a/src/creature.h +++ b/src/creature.h @@ -561,10 +561,10 @@ class Creature virtual int get_speed() const; virtual creature_size get_size() const = 0; - virtual int get_hp( hp_part bp ) const = 0; - virtual int get_hp() const = 0; - virtual int get_hp_max( hp_part bp ) const = 0; - virtual int get_hp_max() const = 0; + virtual int get_hp( const bodypart_id &bp ) const; + virtual int get_hp() const; + virtual int get_hp_max( const bodypart_id &bp ) const; + virtual int get_hp_max() const; virtual int hp_percentage() const = 0; virtual bool made_of( const material_id &m ) const = 0; virtual bool made_of_any( const std::set &ms ) const = 0; @@ -583,7 +583,12 @@ class Creature return false; } + private: + /**anatomy is the plan of the creature's body*/ anatomy_id creature_anatomy = anatomy_id( "default_anatomy" ); + /**this is the actual body of the creature*/ + std::map body; + public: anatomy_id get_anatomy() const; void set_anatomy( const anatomy_id &anat ); @@ -594,6 +599,30 @@ class Creature */ std::vector get_all_body_parts( bool only_main = false ) const; + std::map get_body() const; + void set_body(); + void calc_all_parts_hp( float hp_mod = 0.0, float hp_adjust = 0.0, int str_max = 0, + int dex_max = 0, int per_max = 0, int int_max = 0, int healthy_mod = 0, + int fat_to_max_hp = 0 ); + bodypart *get_part( const bodypart_id &id ); + bodypart get_part( const bodypart_id &id ) const; + + int get_part_hp_cur( const bodypart_id &id ) const; + int get_part_hp_max( const bodypart_id &id ) const; + + int get_part_healed_total( const bodypart_id &id ) const; + + void set_part_hp_cur( const bodypart_id &id, int set ); + void set_part_hp_max( const bodypart_id &id, int set ); + void set_part_healed_total( const bodypart_id &id, int set ); + void mod_part_hp_cur( const bodypart_id &id, int mod ); + void mod_part_hp_max( const bodypart_id &id, int mod ); + void mod_part_healed_total( const bodypart_id &id, int mod ); + + + void set_all_parts_hp_cur( int set ); + void set_all_parts_hp_to_max(); + virtual int get_speed_base() const; virtual int get_speed_bonus() const; virtual int get_block_bonus() const; diff --git a/src/debug_menu.cpp b/src/debug_menu.cpp index 0cb117f2c76fb..48e78acf531f8 100644 --- a/src/debug_menu.cpp +++ b/src/debug_menu.cpp @@ -623,36 +623,49 @@ void character_edit_menu() } break; case D_HP: { + const int torso_hp = p.get_part_hp_cur( bodypart_id( "torso" ) ); + const int head_hp = p.get_part_hp_cur( bodypart_id( "head" ) ); + const int arm_l_hp = p.get_part_hp_cur( bodypart_id( "arm_l" ) ); + const int arm_r_hp = p.get_part_hp_cur( bodypart_id( "arm_r" ) ); + const int leg_l_hp = p.get_part_hp_cur( bodypart_id( "leg_l" ) ); + const int leg_r_hp = p.get_part_hp_cur( bodypart_id( "leg_r" ) ); uilist smenu; - smenu.addentry( 0, true, 'q', "%s: %d", _( "Torso" ), p.hp_cur[hp_torso] ); - smenu.addentry( 1, true, 'w', "%s: %d", _( "Head" ), p.hp_cur[hp_head] ); - smenu.addentry( 2, true, 'a', "%s: %d", _( "Left arm" ), p.hp_cur[hp_arm_l] ); - smenu.addentry( 3, true, 's', "%s: %d", _( "Right arm" ), p.hp_cur[hp_arm_r] ); - smenu.addentry( 4, true, 'z', "%s: %d", _( "Left leg" ), p.hp_cur[hp_leg_l] ); - smenu.addentry( 5, true, 'x', "%s: %d", _( "Right leg" ), p.hp_cur[hp_leg_r] ); + smenu.addentry( 0, true, 'q', "%s: %d", _( "Torso" ), torso_hp ); + smenu.addentry( 1, true, 'w', "%s: %d", _( "Head" ), head_hp ); + smenu.addentry( 2, true, 'a', "%s: %d", _( "Left arm" ), arm_l_hp ); + smenu.addentry( 3, true, 's', "%s: %d", _( "Right arm" ), arm_r_hp ); + smenu.addentry( 4, true, 'z', "%s: %d", _( "Left leg" ), leg_l_hp ); + smenu.addentry( 5, true, 'x', "%s: %d", _( "Right leg" ), leg_r_hp ); smenu.addentry( 6, true, 'e', "%s: %d", _( "All" ), p.get_lowest_hp() ); smenu.query(); - int *bp_ptr = nullptr; + bodypart_str_id bp = bodypart_str_id( "no_a_real_part" ); + int bp_ptr = -1; bool all_select = false; switch( smenu.ret ) { case 0: - bp_ptr = &p.hp_cur[hp_torso]; + bp = bodypart_str_id( "torso" ); + bp_ptr = torso_hp; break; case 1: - bp_ptr = &p.hp_cur[hp_head]; + bp = bodypart_str_id( "head" ); + bp_ptr = head_hp; break; case 2: - bp_ptr = &p.hp_cur[hp_arm_l]; + bp = bodypart_str_id( "arm_l" ); + bp_ptr = arm_l_hp; break; case 3: - bp_ptr = &p.hp_cur[hp_arm_r]; + bp = bodypart_str_id( "arm_r" ); + bp_ptr = arm_r_hp; break; case 4: - bp_ptr = &p.hp_cur[hp_leg_l]; + bp = bodypart_str_id( "leg_l" ); + bp_ptr = leg_l_hp; break; case 5: - bp_ptr = &p.hp_cur[hp_leg_r]; + bp = bodypart_str_id( "leg_r" ); + bp_ptr = leg_r_hp; break; case 6: all_select = true; @@ -661,19 +674,17 @@ void character_edit_menu() break; } - if( bp_ptr != nullptr ) { + if( bp.is_valid() ) { int value; - if( query_int( value, _( "Set the hitpoints to? Currently: %d" ), *bp_ptr ) && value >= 0 ) { - *bp_ptr = value; + if( query_int( value, _( "Set the hitpoints to? Currently: %d" ), bp_ptr ) && value >= 0 ) { + p.set_part_hp_cur( bp.id(), value ); p.reset_stats(); } } else if( all_select ) { int value; if( query_int( value, _( "Set the hitpoints to? Currently: %d" ), p.get_lowest_hp() ) && value >= 0 ) { - for( int &cur_hp : p.hp_cur ) { - cur_hp = value; - } + p.set_all_parts_hp_cur( value ); p.reset_stats(); } } @@ -1295,7 +1306,7 @@ void debug() case debug_menu_index::KILL_NPCS: for( npc &guy : g->all_npcs() ) { add_msg( _( "%s's head implodes!" ), guy.name ); - guy.hp_cur[bp_head] = 0; + guy.set_part_hp_cur( bodypart_id( "head" ), 0 ); } break; @@ -1470,13 +1481,19 @@ void debug() // Damage Self case debug_menu_index::DAMAGE_SELF: { + const int torso_hp = u.get_part_hp_cur( bodypart_id( "torso" ) ); + const int head_hp = u.get_part_hp_cur( bodypart_id( "head" ) ); + const int arm_l_hp = u.get_part_hp_cur( bodypart_id( "arm_l" ) ); + const int arm_r_hp = u.get_part_hp_cur( bodypart_id( "arm_r" ) ); + const int leg_l_hp = u.get_part_hp_cur( bodypart_id( "leg_l" ) ); + const int leg_r_hp = u.get_part_hp_cur( bodypart_id( "leg_r" ) ); uilist smenu; - smenu.addentry( 0, true, 'q', "%s: %d", _( "Torso" ), u.hp_cur[hp_torso] ); - smenu.addentry( 1, true, 'w', "%s: %d", _( "Head" ), u.hp_cur[hp_head] ); - smenu.addentry( 2, true, 'a', "%s: %d", _( "Left arm" ), u.hp_cur[hp_arm_l] ); - smenu.addentry( 3, true, 's', "%s: %d", _( "Right arm" ), u.hp_cur[hp_arm_r] ); - smenu.addentry( 4, true, 'z', "%s: %d", _( "Left leg" ), u.hp_cur[hp_leg_l] ); - smenu.addentry( 5, true, 'x', "%s: %d", _( "Right leg" ), u.hp_cur[hp_leg_r] ); + smenu.addentry( 0, true, 'q', "%s: %d", _( "Torso" ), torso_hp ); + smenu.addentry( 1, true, 'w', "%s: %d", _( "Head" ), head_hp ); + smenu.addentry( 2, true, 'a', "%s: %d", _( "Left arm" ), arm_l_hp ); + smenu.addentry( 3, true, 's', "%s: %d", _( "Right arm" ), arm_r_hp ); + smenu.addentry( 4, true, 'z', "%s: %d", _( "Left leg" ), leg_l_hp ); + smenu.addentry( 5, true, 'x', "%s: %d", _( "Right leg" ), leg_r_hp ); smenu.query(); bodypart_id part; int dbg_damage; diff --git a/src/gamemode_tutorial.cpp b/src/gamemode_tutorial.cpp index 044a618fd437d..20ee208fdd855 100644 --- a/src/gamemode_tutorial.cpp +++ b/src/gamemode_tutorial.cpp @@ -121,9 +121,7 @@ bool tutorial_game::init() g->u.int_cur = g->u.int_max; g->u.dex_cur = g->u.dex_max; - for( int i = 0; i < num_hp_parts; i++ ) { - g->u.hp_cur[i] = g->u.hp_max[i]; - } + g->u.set_all_parts_hp_to_max(); const oter_id rock( "rock" ); //~ default name for the tutorial diff --git a/src/handle_action.cpp b/src/handle_action.cpp index 6c4f0f534d61d..14bf87009ea8d 100644 --- a/src/handle_action.cpp +++ b/src/handle_action.cpp @@ -792,7 +792,7 @@ static void smash() if( !u.has_weapon() && hard_target ) { int dam = roll_remainder( 5.0 * ( 1 - glove_coverage / 100.0 ) ); - if( u.hp_cur[hp_arm_r] > u.hp_cur[hp_arm_l] ) { + if( u.get_part_hp_cur( bodypart_id( "arm_r" ) ) > u.get_part_hp_cur( bodypart_id( "arm_l" ) ) ) { u.deal_damage( nullptr, bodypart_id( "hand_r" ), damage_instance( DT_BASH, dam ) ); } else { u.deal_damage( nullptr, bodypart_id( "hand_l" ), damage_instance( DT_BASH, dam ) ); diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 1ffff71c88e6c..7476f9e8eae9f 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -4805,8 +4805,8 @@ void iexamine::autodoc( player &p, const tripoint &examp ) case BONESETTING: { int broken_limbs_count = 0; for( int i = 0; i < num_hp_parts; i++ ) { - const bool broken = patient.is_limb_broken( static_cast( i ) ); const bodypart_id &part = convert_bp( player::hp_to_bp( static_cast( i ) ) ).id(); + const bool broken = patient.is_limb_broken( part ); effect &existing_effect = patient.get_effect( effect_mending, part->token ); // Skip part if not broken or already healed 50% if( !broken || ( !existing_effect.is_null() && @@ -4898,7 +4898,8 @@ void iexamine::autodoc( player &p, const tripoint &examp ) effect &e = patient.get_effect( effect_disinfected, bp_healed->token ); e.set_duration( e.get_int_dur_factor() * disinfectant_intensity ); hp_part target_part = player::bp_to_hp( bp_healed->token ); - patient.damage_disinfected[target_part] = patient.hp_max[target_part] - patient.hp_cur[target_part]; + patient.damage_disinfected[target_part] = patient.get_part_hp_max( bp_healed ) - + patient.get_part_hp_cur( bp_healed ); } } patient.moves -= 500; diff --git a/src/item.cpp b/src/item.cpp index b46e143e8aa9d..46ea238109597 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -4120,9 +4120,9 @@ void item::on_wear( Character &p ) if( is_sided() && get_side() == side::BOTH ) { if( has_flag( flag_SPLINT ) ) { set_side( side::LEFT ); - if( ( covers( bodypart_id( "leg_l" ) ) && p.is_limb_broken( hp_leg_r ) && + if( ( covers( bodypart_id( "leg_l" ) ) && p.is_limb_broken( bodypart_id( "leg_r" ) ) && !p.worn_with_flag( flag_SPLINT, bodypart_id( "leg_r" ) ) ) || - ( covers( bodypart_id( "arm_l" ) ) && p.is_limb_broken( hp_arm_r ) && + ( covers( bodypart_id( "arm_l" ) ) && p.is_limb_broken( bodypart_id( "arm_r" ) ) && !p.worn_with_flag( flag_SPLINT, bodypart_id( "arm_r" ) ) ) ) { set_side( side::RIGHT ); } diff --git a/src/iuse.cpp b/src/iuse.cpp index 900a37a409afd..0dc3d385717b3 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -3760,10 +3760,11 @@ int iuse::granade_act( player *p, item *it, bool t, const tripoint &pos ) /** @EFFECT_PER_MAX increases possible granade per buff */ buff_stat( g->u.per_max, rng( 0, g->u.per_max / 2 ) ); g->u.recalc_hp(); - for( int part = 0; part < num_hp_parts; part++ ) { - g->u.hp_cur[part] *= 1 + rng( 0, 20 ) * .1; - if( g->u.hp_cur[part] > g->u.hp_max[part] ) { - g->u.hp_cur[part] = g->u.hp_max[part]; + for( const bodypart_id &bp : g->u.get_all_body_parts() ) { + g->u.set_part_hp_cur( bp, g->u.get_part_hp_cur( bp ) * rng_float( 1, 1.2 ) ); + const int hp_max = g->u.get_part_hp_max( bp ); + if( g->u.get_part_hp_cur( bp ) > hp_max ) { + g->u.set_part_hp_cur( bp, hp_max ); } } } @@ -3799,9 +3800,10 @@ int iuse::granade_act( player *p, item *it, bool t, const tripoint &pos ) /** @EFFECT_PER_MAX increases possible granade per debuff (NEGATIVE) */ g->u.per_max -= rng( 0, g->u.per_max / 2 ); g->u.recalc_hp(); - for( int part = 0; part < num_hp_parts; part++ ) { - if( g->u.hp_cur[part] > 0 ) { - g->u.hp_cur[part] = rng( 1, g->u.hp_cur[part] ); + for( const bodypart_id &bp : g->u.get_all_body_parts() ) { + const int hp_cur = g->u.get_part_hp_cur( bp ); + if( hp_cur > 0 ) { + g->u.set_part_hp_cur( bp, rng( 1, hp_cur ) ); } } } diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index 39ee0105dd193..31226576497d7 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -3205,10 +3205,12 @@ int heal_actor::finish_using( player &healer, player &patient, item &it, hp_part float practice_amount = limb_power * 3.0f; const int dam = get_heal_value( healer, healed ); - if( ( patient.hp_cur[healed] >= 1 ) && ( dam > 0 ) ) { // Prevent first-aid from mending limbs - patient.heal( healed, dam ); - } else if( ( patient.hp_cur[healed] >= 1 ) && ( dam < 0 ) ) { - const bodypart_id bp = convert_bp( player::hp_to_bp( healed ) ).id(); + const bodypart_id bp = convert_bp( Character::hp_to_bp( healed ) ).id(); + const int cur_hp = patient.get_part_hp_cur( bp ); + + if( ( cur_hp >= 1 ) && ( dam > 0 ) ) { // Prevent first-aid from mending limbs + patient.heal( bp, dam ); + } else if( ( cur_hp >= 1 ) && ( dam < 0 ) ) { patient.apply_damage( nullptr, bp, -dam ); //hurt takes + damage } @@ -3297,7 +3299,7 @@ int heal_actor::finish_using( player &healer, player &patient, item &it, hp_part patient.add_effect( effect_bandaged, 1_turns, bp_healed ); effect &e = patient.get_effect( effect_bandaged, bp_healed ); e.set_duration( e.get_int_dur_factor() * bandages_intensity ); - patient.damage_bandaged[healed] = patient.hp_max[healed] - patient.hp_cur[healed]; + patient.damage_bandaged[healed] = patient.get_part_hp_max( bp ) - patient.get_part_hp_cur( bp ); practice_amount += 2 * bandages_intensity; } if( disinfectant_power > 0 ) { @@ -3305,7 +3307,7 @@ int heal_actor::finish_using( player &healer, player &patient, item &it, hp_part patient.add_effect( effect_disinfected, 1_turns, bp_healed ); effect &e = patient.get_effect( effect_disinfected, bp_healed ); e.set_duration( e.get_int_dur_factor() * disinfectant_intensity ); - patient.damage_disinfected[healed] = patient.hp_max[healed] - patient.hp_cur[healed]; + patient.damage_disinfected[healed] = patient.get_part_hp_max( bp ) - patient.get_part_hp_cur( bp ); practice_amount += 2 * disinfectant_intensity; } practice_amount = std::max( 9.0f, practice_amount ); @@ -3338,14 +3340,14 @@ static hp_part pick_part_to_heal( return num_hp_parts; } - body_part bp = player::hp_to_bp( healed_part ); - if( ( infect && patient.has_effect( effect_infected, bp ) ) || - ( bite && patient.has_effect( effect_bite, bp ) ) || - ( bleed && patient.has_effect( effect_bleed, bp ) ) ) { + const bodypart_id &bp = convert_bp( player::hp_to_bp( healed_part ) ).id(); + if( ( infect && patient.has_effect( effect_infected, bp->token ) ) || + ( bite && patient.has_effect( effect_bite, bp->token ) ) || + ( bleed && patient.has_effect( effect_bleed, bp->token ) ) ) { return healed_part; } - if( patient.is_limb_broken( healed_part ) ) { + if( patient.is_limb_broken( bp ) ) { if( healed_part == hp_arm_l || healed_part == hp_arm_r ) { add_msg( m_info, _( "That arm is broken. It needs surgical attention or a splint." ) ); } else if( healed_part == hp_leg_l || healed_part == hp_leg_r ) { @@ -3357,7 +3359,7 @@ static hp_part pick_part_to_heal( continue; } - if( force || patient.hp_cur[healed_part] < patient.hp_max[healed_part] ) { + if( force || patient.get_part_hp_cur( bp ) < patient.get_part_hp_max( bp ) ) { return healed_part; } } @@ -3365,7 +3367,7 @@ static hp_part pick_part_to_heal( hp_part heal_actor::use_healing_item( player &healer, player &patient, item &it, bool force ) const { - hp_part healed = num_hp_parts; + bodypart_id healed = bodypart_id( "num_bp" ); const int head_bonus = get_heal_value( healer, hp_head ); const int limb_power = get_heal_value( healer, hp_arm_l ); const int torso_bonus = get_heal_value( healer, hp_torso ); @@ -3381,31 +3383,31 @@ hp_part heal_actor::use_healing_item( player &healer, player &patient, item &it, // NPCs heal whatever has sustained the most damaged that they can heal but never // rebandage parts int highest_damage = 0; - for( int i = 0; i < num_hp_parts; i++ ) { + for( const std::pair &elem : patient.get_body() ) { + const bodypart &part = elem.second; int damage = 0; - const body_part i_bp = player::hp_to_bp( static_cast( i ) ); - if( ( !patient.has_effect( effect_bandaged, i_bp ) && bandages_power > 0 ) || - ( !patient.has_effect( effect_disinfected, i_bp ) && disinfectant_power > 0 ) ) { - damage += patient.hp_max[i] - patient.hp_cur[i]; - damage += bleed * patient.get_effect_dur( effect_bleed, i_bp ) / 5_minutes; - damage += bite * patient.get_effect_dur( effect_bite, i_bp ) / 10_minutes; - damage += infect * patient.get_effect_dur( effect_infected, i_bp ) / 10_minutes; + if( ( !patient.has_effect( effect_bandaged, elem.first->token ) && bandages_power > 0 ) || + ( !patient.has_effect( effect_disinfected, elem.first->token ) && disinfectant_power > 0 ) ) { + damage += part.get_hp_max() - part.get_hp_cur(); + damage += bleed * patient.get_effect_dur( effect_bleed, elem.first->token ) / 5_minutes; + damage += bite * patient.get_effect_dur( effect_bite, elem.first->token ) / 10_minutes; + damage += infect * patient.get_effect_dur( effect_infected, elem.first->token ) / 10_minutes; } if( damage > highest_damage ) { highest_damage = damage; - healed = static_cast( i ); + healed = elem.first.id(); } } } else if( patient.is_player() ) { // Player healing self - let player select if( healer.activity.id() != ACT_FIRSTAID ) { const std::string menu_header = _( "Select a body part for: " ) + it.tname(); - healed = pick_part_to_heal( healer, patient, menu_header, - limb_power, head_bonus, torso_bonus, - bleed, bite, infect, force, - get_bandaged_level( healer ), - get_disinfected_level( healer ) ); - if( healed == num_hp_parts ) { + healed = convert_bp( Character::hp_to_bp( pick_part_to_heal( healer, patient, menu_header, + limb_power, head_bonus, torso_bonus, + bleed, bite, infect, force, + get_bandaged_level( healer ), + get_disinfected_level( healer ) ) ) ).id(); + if( healed == bodypart_id( "num_bp" ) ) { add_msg( m_info, _( "Never mind." ) ); return num_hp_parts; // canceled } @@ -3413,10 +3415,11 @@ hp_part heal_actor::use_healing_item( player &healer, player &patient, item &it, // Brick healing if using a first aid kit for the first time. if( long_action && healer.activity.id() != ACT_FIRSTAID ) { // Cancel and wait for activity completion. - return healed; + return Character::bp_to_hp( healed->token ); } else if( healer.activity.id() == ACT_FIRSTAID ) { // Completed activity, extract body part from it. - healed = static_cast( healer.activity.values[0] ); + healed = convert_bp( Character::hp_to_bp( static_cast + ( healer.activity.values[0] ) ) ).id(); } } else { // Player healing NPC @@ -3425,18 +3428,18 @@ hp_part heal_actor::use_healing_item( player &healer, player &patient, item &it, //~ %1$s: patient name, %2$s: healing item name "Select a body part of %1$s for %2$s:" ), patient.disp_name(), it.tname() ); - healed = pick_part_to_heal( healer, patient, menu_header, - limb_power, head_bonus, torso_bonus, - bleed, bite, infect, force, - get_bandaged_level( healer ), - get_disinfected_level( healer ) ); + healed = convert_bp( Character::hp_to_bp( pick_part_to_heal( healer, patient, menu_header, + limb_power, head_bonus, torso_bonus, + bleed, bite, infect, force, + get_bandaged_level( healer ), + get_disinfected_level( healer ) ) ) ).id(); } - if( healed != num_hp_parts ) { - finish_using( healer, patient, it, healed ); + if( healed != bodypart_id( "num_bp" ) ) { + finish_using( healer, patient, it, Character::bp_to_hp( healed->token ) ); } - return healed; + return Character::bp_to_hp( healed->token ); } void heal_actor::info( const item &, std::vector &dump ) const diff --git a/src/magic.cpp b/src/magic.cpp index d359521969071..c4a81e6892421 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -706,8 +706,8 @@ bool spell::can_cast( const Character &guy ) const case magic_energy_type::stamina: return guy.get_stamina() >= energy_cost( guy ); case magic_energy_type::hp: { - for( int i = 0; i < num_hp_parts; i++ ) { - if( energy_cost( guy ) < guy.hp_cur[i] ) { + for( const std::pair &elem : guy.get_body() ) { + if( energy_cost( guy ) < elem.second.get_hp_cur() ) { return true; } } @@ -1499,8 +1499,8 @@ bool known_magic::has_enough_energy( const Character &guy, spell &sp ) const case magic_energy_type::stamina: return guy.get_stamina() >= cost; case magic_energy_type::hp: - for( int i = 0; i < num_hp_parts; i++ ) { - if( guy.hp_cur[i] > cost ) { + for( const std::pair &elem : guy.get_body() ) { + if( elem.second.get_hp_cur() > cost ) { return true; } } diff --git a/src/magic_spell_effect.cpp b/src/magic_spell_effect.cpp index 53ba12e59539e..aa6739370a8f2 100644 --- a/src/magic_spell_effect.cpp +++ b/src/magic_spell_effect.cpp @@ -139,18 +139,15 @@ void spell_effect::pain_split( const spell &sp, Creature &caster, const tripoint int num_limbs = 0; // number of limbs effected (broken don't count) int total_hp = 0; // total hp among limbs - for( const int &part : p->hp_cur ) { - if( part != 0 ) { - num_limbs++; - total_hp += part; - } - } - for( int &part : p->hp_cur ) { - const int hp_each = total_hp / num_limbs; - if( part != 0 ) { - part = hp_each; + for( const std::pair &elem : p->get_body() ) { + if( elem.first == bodypart_str_id( "num_bp" ) ) { + continue; } + num_limbs++; + total_hp += elem.second.get_hp_cur(); } + const int hp_each = total_hp / num_limbs; + p->set_all_parts_hp_cur( hp_each ); } static bool in_spell_aoe( const tripoint &start, const tripoint &end, const int &radius, diff --git a/src/martialarts.cpp b/src/martialarts.cpp index cff81925eb711..1e5222c0b15cf 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -981,7 +981,8 @@ bool character_martial_arts::can_arm_block( const Character &owner ) const skill_unarmed ); // Success conditions. - if( !owner.is_limb_broken( hp_arm_l ) || !owner.is_limb_broken( hp_arm_r ) ) { + if( !owner.is_limb_broken( bodypart_id( "arm_l" ) ) || + !owner.is_limb_broken( bodypart_id( "arm_r" ) ) ) { if( unarmed_skill >= ma.arm_block ) { return true; } else if( ma.arm_block_with_bio_armor_arms && owner.has_bionic( bio_armor_arms ) ) { diff --git a/src/melee.cpp b/src/melee.cpp index 3368e8be0ec77..63ac92469fb80 100644 --- a/src/melee.cpp +++ b/src/melee.cpp @@ -1695,11 +1695,11 @@ bool Character::block_hit( Creature *source, bodypart_id &bp_hit, damage_instanc // Check if we should actually use the right side to block if( bp_hit == bodypart_id( "leg_l" ) ) { - if( hp_cur[hp_leg_r] > hp_cur[hp_leg_l] ) { + if( get_part_hp_cur( bodypart_id( "leg_r" ) ) > get_part_hp_cur( bodypart_id( "leg_l" ) ) ) { bp_hit = bodypart_id( "leg_r" ); } } else { - if( hp_cur[hp_arm_r] > hp_cur[hp_arm_l] ) { + if( get_part_hp_cur( bodypart_id( "arm_r" ) ) > get_part_hp_cur( bodypart_id( "arm_l" ) ) ) { bp_hit = bodypart_id( "arm_r" ); } } diff --git a/src/memorial_logger.cpp b/src/memorial_logger.cpp index fd85c8ae4bb2b..9154788e9c6d5 100644 --- a/src/memorial_logger.cpp +++ b/src/memorial_logger.cpp @@ -203,18 +203,18 @@ void memorial_logger::write( std::ostream &file, const std::string &epitaph ) co //HP const auto limb_hp = - [&file, &indent, &u]( const std::string & desc, const hp_part bp ) { + [&file, &indent, &u]( const std::string & desc, const bodypart_id bp ) { file << indent << - string_format( desc, u.get_hp( bp ), u.get_hp_max( bp ) ) << eol; + string_format( desc, u.get_part_hp_cur( bp ), u.get_part_hp_max( bp ) ) << eol; }; file << _( "Final HP:" ) << eol; - limb_hp( _( " Head: %d/%d" ), hp_head ); - limb_hp( _( "Torso: %d/%d" ), hp_torso ); - limb_hp( _( "L Arm: %d/%d" ), hp_arm_l ); - limb_hp( _( "R Arm: %d/%d" ), hp_arm_r ); - limb_hp( _( "L Leg: %d/%d" ), hp_leg_l ); - limb_hp( _( "R Leg: %d/%d" ), hp_leg_r ); + limb_hp( _( " Head: %d/%d" ), bodypart_id( "head" ) ); + limb_hp( _( "Torso: %d/%d" ), bodypart_id( "torso" ) ); + limb_hp( _( "L Arm: %d/%d" ), bodypart_id( "arm_l" ) ); + limb_hp( _( "R Arm: %d/%d" ), bodypart_id( "arm_r" ) ); + limb_hp( _( "L Leg: %d/%d" ), bodypart_id( "leg_l" ) ); + limb_hp( _( "R Leg: %d/%d" ), bodypart_id( "leg_r" ) ); file << eol; //Stats diff --git a/src/mission_companion.cpp b/src/mission_companion.cpp index abbe8b5f495b7..2a9c018310f06 100644 --- a/src/mission_companion.cpp +++ b/src/mission_companion.cpp @@ -800,7 +800,7 @@ void talk_function::caravan_return( npc &p, const std::string &dest, const std:: int money = 0; for( const auto &elem : caravan_party ) { //Scrub temporary party members and the dead - if( elem->hp_cur[hp_torso] == 0 && elem->has_companion_mission() ) { + if( elem->get_part_hp_cur( bodypart_id( "torso" ) ) == 0 && elem->has_companion_mission() ) { overmap_buffer.remove_npc( comp->getID() ); money += ( time / 600 ) * 9; } else if( elem->has_companion_mission() ) { @@ -844,7 +844,7 @@ void talk_function::attack_random( const std::vector< monster * > &group, const auto def = random_entry( defender ); att->melee_attack( *def ); //monster mon; - if( def->hp_cur[hp_torso] <= 0 || def->is_dead() ) { + if( def->get_part_hp_cur( bodypart_id( "torso" ) ) <= 0 || def->is_dead() ) { popup( _( "%s is wasted by %s!" ), def->name, att->type->nname() ); } } @@ -865,7 +865,7 @@ void talk_function::attack_random( const std::vector &attacker, } ///\EFFECT_DODGE_NPC increases avoidance of random attacks if( rng( -1, best_score ) >= rng( 0, def->get_skill_level( skill_dodge ) ) ) { - def->hp_cur[hp_torso] = 0; + def->set_part_hp_cur( bodypart_id( "torso" ), 0 ); popup( _( "%s is wasted by %s!" ), def->name, att->name ); } else { popup( _( "%s dodges %s's attack!" ), def->name, att->name ); @@ -878,7 +878,7 @@ int talk_function::combat_score( const std::vector &group ) { int score = 0; for( const auto &elem : group ) { - if( elem->hp_cur[hp_torso] != 0 ) { + if( elem->get_part_hp_cur( bodypart_id( "torso" ) ) != 0 ) { const skill_id best = elem->best_skill(); if( best ) { score += elem->get_skill_level( best ); @@ -1584,7 +1584,8 @@ bool talk_function::force_on_force( const std::vector &defender, } std::vector remaining_def; for( const auto &elem : defender ) { - if( !elem->is_dead() && elem->hp_cur[hp_torso] >= 0 && elem->hp_cur[hp_head] >= 0 ) { + if( !elem->is_dead() && elem->get_part_hp_cur( bodypart_id( "torso" ) ) >= 0 && + elem->get_part_hp_cur( bodypart_id( "head" ) ) >= 0 ) { remaining_def.push_back( elem ); } } @@ -1643,13 +1644,13 @@ void talk_function::force_on_force( const std::vector &defender, while( true ) { std::vector remaining_att; for( const auto &elem : attacker ) { - if( elem->hp_cur[hp_torso] != 0 ) { + if( elem->get_part_hp_cur( bodypart_id( "torso" ) ) != 0 ) { remaining_att.push_back( elem ); } } std::vector remaining_def; for( const auto &elem : defender ) { - if( elem->hp_cur[hp_torso] != 0 ) { + if( elem->get_part_hp_cur( bodypart_id( "torso" ) ) != 0 ) { remaining_def.push_back( elem ); } } @@ -1659,7 +1660,7 @@ void talk_function::force_on_force( const std::vector &defender, if( attack > defense * 3 ) { attack_random( remaining_att, remaining_def ); if( defense == 0 || ( remaining_def.size() == 1 && - remaining_def[0]->hp_cur[hp_torso] == 0 ) ) { + remaining_def[0]->get_part_hp_cur( bodypart_id( "torso" ) ) == 0 ) ) { popup( _( "%s forces are destroyed!" ), defender[0]->get_faction()->name ); } else { popup( _( "%s forces retreat from combat!" ), defender[0]->get_faction()->name ); @@ -1668,7 +1669,7 @@ void talk_function::force_on_force( const std::vector &defender, } else if( attack * 3 < defense ) { attack_random( remaining_def, remaining_att ); if( attack == 0 || ( remaining_att.size() == 1 && - remaining_att[0]->hp_cur[hp_torso] == 0 ) ) { + remaining_att[0]->get_part_hp_cur( bodypart_id( "torso" ) ) == 0 ) ) { popup( _( "%s forces are destroyed!" ), attacker[0]->get_faction()->name ); } else { popup( _( "%s forces retreat from combat!" ), attacker[0]->get_faction()->name ); diff --git a/src/mondeath.cpp b/src/mondeath.cpp index a045c5b8bfbb5..fb77eaee2811d 100644 --- a/src/mondeath.cpp +++ b/src/mondeath.cpp @@ -756,7 +756,7 @@ void mdeath::jabberwock( monster &z ) void mdeath::gameover( monster &z ) { add_msg( m_bad, _( "The %s was destroyed! GAME OVER!" ), z.name() ); - g->u.hp_cur[hp_torso] = 0; + g->u.set_part_hp_cur( bodypart_id( "torso" ), 0 ); } void mdeath::kill_breathers( monster &/*z*/ ) diff --git a/src/monster.cpp b/src/monster.cpp index 06d497609c220..c1bdc725fb615 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -216,6 +216,8 @@ monster::monster() biosig_timer = -1; udder_timer = calendar::turn; horde_attraction = MHA_NULL; + set_anatomy( anatomy_id( "default_anatomy" ) ); + set_body(); } monster::monster( const mtype_id &id ) : monster() @@ -1157,7 +1159,7 @@ monster_attitude monster::attitude( const Character *u ) const int monster::hp_percentage() const { - return get_hp( hp_torso ) * 100 / get_hp_max(); + return get_hp( bodypart_id( "torso" ) ) * 100 / get_hp_max(); } void monster::process_triggers() @@ -2830,7 +2832,7 @@ void monster::on_hit( Creature *source, bodypart_id, // TODO: Faction relations } -int monster::get_hp_max( hp_part ) const +int monster::get_hp_max( const bodypart_id & ) const { return type->hp; } @@ -2840,7 +2842,7 @@ int monster::get_hp_max() const return type->hp; } -int monster::get_hp( hp_part ) const +int monster::get_hp( const bodypart_id & ) const { return hp; } diff --git a/src/monster.h b/src/monster.h index 2ff3ea14af18c..8bb35fbb54f3c 100644 --- a/src/monster.h +++ b/src/monster.h @@ -110,9 +110,9 @@ class monster : public Creature units::mass get_weight() const override; units::mass weight_capacity() const override; units::volume get_volume() const; - int get_hp( hp_part ) const override; + int get_hp( const bodypart_id & ) const override; int get_hp() const override; - int get_hp_max( hp_part ) const override; + int get_hp_max( const bodypart_id & ) const override; int get_hp_max() const override; int hp_percentage() const override; diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index ea0f8821c4a14..6a907d3888a83 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -367,6 +367,7 @@ void avatar::randomize( const bool random_scenario, points_left &points, bool pl } loops++; } + set_body(); } void avatar::add_profession_items() @@ -450,7 +451,7 @@ bool avatar::create( character_type type, const std::string &tempname ) "Saving will override the already existing character.\n\n" "Continue anyways?" ), name ); }; - + set_body(); const bool allow_reroll = type == character_type::RANDOM; tab_direction result = tab_direction::QUIT; do { @@ -526,9 +527,6 @@ bool avatar::create( character_type type, const std::string &tempname ) save_template( _( "Last Character" ), points ); recalc_hp(); - for( int i = 0; i < num_hp_parts; i++ ) { - hp_cur[i] = hp_max[i]; - } if( has_trait( trait_SMELLY ) ) { scent = 800; @@ -541,7 +539,7 @@ bool avatar::create( character_type type, const std::string &tempname ) // Grab the skills from the profession, if there are any // We want to do this before the recipes - for( auto &e : prof->skills() ) { + for( const profession::StartingSkill &e : prof->skills() ) { mod_skill_level( e.first, e.second ); } @@ -584,7 +582,7 @@ bool avatar::create( character_type type, const std::string &tempname ) addictions.push_back( iter ); } - for( auto &bio : prof->CBMs() ) { + for( const bionic_id &bio : prof->CBMs() ) { add_bionic( bio ); } // Adjust current energy level to maximum @@ -850,7 +848,8 @@ tab_direction set_stats( avatar &u, points_left &points ) _( "Increasing Str further costs 2 points." ) ); } u.recalc_hp(); - mvwprintz( w_description, point_zero, COL_STAT_NEUTRAL, _( "Base HP: %d" ), u.hp_max[0] ); + mvwprintz( w_description, point_zero, COL_STAT_NEUTRAL, _( "Base HP: %d" ), + u.get_part_hp_max( bodypart_id( "head" ) ) ); // NOLINTNEXTLINE(cata-use-named-point-constants) mvwprintz( w_description, point( 0, 1 ), COL_STAT_NEUTRAL, _( "Carry weight: %.1f %s" ), convert_weight( u.weight_capacity() ), weight_units() ); diff --git a/src/npc.cpp b/src/npc.cpp index 24a314a15704a..27758bf59d125 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -185,15 +185,14 @@ standard_npc::standard_npc( const std::string &name, const tripoint &pos, int_cur = std::max( s_int, 0 ); int_max = std::max( s_int, 0 ); + set_body(); recalc_hp(); - for( int i = 0; i < num_hp_parts; i++ ) { - hp_cur[i] = hp_max[i]; - } - for( auto &e : Skill::skills ) { + + for( const Skill &e : Skill::skills ) { set_skill_level( e.ident(), std::max( sk_lvl, 0 ) ); } - for( const auto &e : clothing ) { + for( const std::string &e : clothing ) { wear_item( item( e ), false ); } @@ -417,10 +416,9 @@ void npc::randomize( const npc_class_id &type ) //players will vastly outclass npcs in trade without a little help. mod_skill_level( skill_barter, rng( 2, 4 ) ); + set_body(); recalc_hp(); - for( int i = 0; i < num_hp_parts; i++ ) { - hp_cur[i] = hp_max[i]; - } + starting_weapon( myclass ); starting_clothes( *this, myclass, male ); starting_inv( *this, myclass ); @@ -1059,7 +1057,7 @@ bool npc::wear_if_wanted( const item &it, std::string &reason ) for( int i = 0; i < num_hp_parts; i++ ) { hp_part hpp = static_cast( i ); body_part bp = player::hp_to_bp( hpp ); - if( is_limb_broken( hpp ) && !has_effect( effect_mending, bp ) && + if( is_limb_broken( convert_bp( bp ) ) && !has_effect( effect_mending, bp ) && it.covers( convert_bp( bp ).id() ) ) { reason = _( "Thanks, I'll wear that now." ); return !!wear_item( it, false ); @@ -1092,8 +1090,7 @@ bool npc::wear_if_wanted( const item &it, std::string &reason ) auto iter = std::find_if( worn.begin(), worn.end(), [bp]( const item & armor ) { return armor.covers( bp ); } ); - if( iter != worn.end() && !( is_limb_broken( bp_to_hp( bp->token ) ) && - iter->has_flag( "SPLINT" ) ) ) { + if( iter != worn.end() && !( is_limb_broken( bp ) && iter->has_flag( "SPLINT" ) ) ) { took_off = takeoff( *iter ); break; } @@ -1241,11 +1238,13 @@ void npc::form_opinion( const player &u ) op_of_u.fear -= 1; } - for( int i = 0; i < num_hp_parts; i++ ) { - if( u.hp_cur[i] <= u.hp_max[i] / 2 ) { + for( const std::pair &elem : get_body() ) { + const int hp_max = elem.second.get_hp_max(); + const int hp_cur = elem.second.get_hp_cur(); + if( hp_cur <= hp_max / 2 ) { op_of_u.fear--; } - if( hp_cur[i] <= hp_max[i] / 2 ) { + if( hp_cur <= hp_max / 2 ) { op_of_u.fear++; } } @@ -1306,8 +1305,8 @@ void npc::form_opinion( const player &u ) // VALUE op_of_u.value = 0; - for( int i = 0; i < num_hp_parts; i++ ) { - if( hp_cur[i] < hp_max[i] * 0.8f ) { + for( const std::pair &elem : get_body() ) { + if( elem.second.get_hp_cur() < elem.second.get_hp_max() * 0.8f ) { op_of_u.value++; } } diff --git a/src/npcmove.cpp b/src/npcmove.cpp index 3346bb31ff2e2..8c5aaa03396f6 100644 --- a/src/npcmove.cpp +++ b/src/npcmove.cpp @@ -614,7 +614,7 @@ float npc::character_danger( const Character &uc ) const } ret += u_weap_val; - ret += hp_percentage() * get_hp_max( hp_torso ) / 100.0 / my_weap_val; + ret += hp_percentage() * get_hp_max( bodypart_id( "torso" ) ) / 100.0 / my_weap_val; ret += my_gun ? u.get_dodge() / 2 : u.get_dodge(); @@ -1723,35 +1723,33 @@ healing_options npc::patient_assessment( const Character &c ) healing_options try_to_fix; try_to_fix.clear_all(); - for( int i = 0; i < num_hp_parts; i++ ) { - const hp_part part = static_cast( i ); - const body_part bp_wounded = hp_to_bp( part ); + for( const std::pair &elem : c.get_body() ) { - if( c.has_effect( effect_bleed, bp_wounded ) ) { + if( c.has_effect( effect_bleed, elem.first->token ) ) { try_to_fix.bleed = true; } - if( c.has_effect( effect_bite, bp_wounded ) ) { + if( c.has_effect( effect_bite, elem.first->token ) ) { try_to_fix.bite = true; } - if( c.has_effect( effect_infected, bp_wounded ) ) { + if( c.has_effect( effect_infected, elem.first->token ) ) { try_to_fix.infect = true; } int part_threshold = 75; - if( part == hp_head ) { + if( elem.first == bodypart_str_id( "head" ) ) { part_threshold += 20; - } else if( part == hp_torso ) { + } else if( elem.first == bodypart_str_id( "torso" ) ) { part_threshold += 10; } part_threshold = std::min( 80, part_threshold ); - part_threshold = part_threshold * c.hp_max[i] / 100; + part_threshold = part_threshold * elem.second.get_hp_max() / 100; - if( c.hp_cur[i] <= part_threshold ) { - if( !c.has_effect( effect_bandaged, bp_wounded ) ) { + if( elem.second.get_hp_cur() <= part_threshold ) { + if( !c.has_effect( effect_bandaged, elem.first->token ) ) { try_to_fix.bandage = true; } - if( !c.has_effect( effect_disinfected, bp_wounded ) ) { + if( !c.has_effect( effect_disinfected, elem.first->token ) ) { try_to_fix.disinfect = true; } } @@ -4539,8 +4537,8 @@ void npc::do_reload( const item &it ) bool npc::adjust_worn() { bool any_broken = false; - for( int i = 0; i < num_hp_parts; i++ ) { - if( is_limb_broken( static_cast( i ) ) ) { + for( const bodypart_id &bp : get_all_body_parts() ) { + if( is_limb_broken( bp ) ) { any_broken = true; break; } @@ -4550,9 +4548,9 @@ bool npc::adjust_worn() return false; } const auto covers_broken = [this]( const item & it, side s ) { - const auto covered = it.get_covered_body_parts( s ); - for( size_t i = 0; i < num_hp_parts; i++ ) { - if( hp_cur[ i ] <= 0 && covered.test( convert_bp( hp_to_bp( static_cast( i ) ) ) ) ) { + const body_part_set covered = it.get_covered_body_parts( s ); + for( const std::pair &elem : get_body() ) { + if( elem.second.get_hp_cur() <= 0 && covered.test( elem.first ) ) { return true; } } diff --git a/src/npctalk_funcs.cpp b/src/npctalk_funcs.cpp index 781d9aba5cc0c..7a18b273e5543 100644 --- a/src/npctalk_funcs.cpp +++ b/src/npctalk_funcs.cpp @@ -556,7 +556,7 @@ void talk_function::give_aid( npc &p ) p.add_effect( effect_currently_busy, 30_minutes ); for( int i = 0; i < num_hp_parts; i++ ) { const body_part bp_healed = player::hp_to_bp( static_cast( i ) ); - g->u.heal( static_cast( i ), 5 * rng( 2, 5 ) ); + g->u.heal( convert_bp( bp_healed ), 5 * rng( 2, 5 ) ); if( g->u.has_effect( effect_bite, bp_healed ) ) { g->u.remove_effect( effect_bite, bp_healed ); } @@ -580,7 +580,7 @@ void talk_function::give_all_aid( npc &p ) if( guy.is_walking_with() && rl_dist( guy.pos(), g->u.pos() ) < PICKUP_RANGE ) { for( int i = 0; i < num_hp_parts; i++ ) { const body_part bp_healed = player::hp_to_bp( static_cast( i ) ); - guy.heal( static_cast( i ), 5 * rng( 2, 5 ) ); + guy.heal( convert_bp( bp_healed ), 5 * rng( 2, 5 ) ); if( guy.has_effect( effect_bite, bp_healed ) ) { guy.remove_effect( effect_bite, bp_healed ); } diff --git a/src/panels.cpp b/src/panels.cpp index 048ae28268113..a981de8c666b2 100644 --- a/src/panels.cpp +++ b/src/panels.cpp @@ -872,16 +872,16 @@ static void draw_limb_health( avatar &u, const catacurses::window &w, int limb_i wprintz( w, color, sym ); } }; - if( u.is_limb_broken( static_cast( limb_index ) ) && ( limb_index >= hp_arm_l && - limb_index <= hp_leg_r ) ) { + const bodypart_id bp = convert_bp( avatar::hp_to_bp( static_cast( limb_index ) ) ).id(); + if( u.is_limb_broken( bp.id() ) && ( limb_index >= hp_arm_l && + limb_index <= hp_leg_r ) ) { //Limb is broken std::string limb = "~~%~~"; nc_color color = c_light_red; - const auto bp = avatar::hp_to_bp( static_cast( limb_index ) ); - if( u.worn_with_flag( "SPLINT", convert_bp( bp ).id() ) ) { + if( u.worn_with_flag( "SPLINT", bp ) ) { static const efftype_id effect_mending( "mending" ); - const auto &eff = u.get_effect( effect_mending, bp ); + const auto &eff = u.get_effect( effect_mending, bp->token ); const int mend_perc = eff.is_null() ? 0.0 : 100 * eff.get_duration() / eff.get_max_duration(); if( is_self_aware || u.has_effect( effect_got_checked ) ) { @@ -901,12 +901,14 @@ static void draw_limb_health( avatar &u, const catacurses::window &w, int limb_i return; } - std::pair hp = get_hp_bar( u.hp_cur[limb_index], u.hp_max[limb_index] ); + const int hp_cur = u.get_part_hp_cur( bp ); + const int hp_max = u.get_part_hp_max( bp ); + std::pair hp = get_hp_bar( hp_cur, hp_max ); if( is_self_aware || u.has_effect( effect_got_checked ) ) { - wprintz( w, hp.second, "%3d ", u.hp_cur[limb_index] ); + wprintz( w, hp.second, "%3d ", hp_cur ); } else if( no_feeling ) { - if( u.hp_cur[limb_index] < u.hp_max[limb_index] / 2 ) { + if( hp_cur < hp_max / 2 ) { hp = std::make_pair( string_format( " %s", _( "Bad" ) ), c_red ); } else { hp = std::make_pair( string_format( " %s", _( "Good" ) ), c_green ); diff --git a/src/player.cpp b/src/player.cpp index 855941bbad767..1b5f20a8ce0d7 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -883,7 +883,8 @@ void player::search_surroundings() bool player::is_dead_state() const { - return hp_cur[hp_head] <= 0 || hp_cur[hp_torso] <= 0; + return get_part_hp_cur( bodypart_id( "head" ) ) <= 0 || + get_part_hp_cur( bodypart_id( "torso" ) ) <= 0; } void player::on_dodge( Creature *source, float difficulty ) @@ -1336,14 +1337,16 @@ void player::knock_back_to( const tripoint &to ) int player::hp_percentage() const { + const bodypart_id head_id = bodypart_id( "head" ); + const bodypart_id torso_id = bodypart_id( "torso" ); int total_cur = 0; int total_max = 0; // Head and torso HP are weighted 3x and 2x, respectively - total_cur = hp_cur[hp_head] * 3 + hp_cur[hp_torso] * 2; - total_max = hp_max[hp_head] * 3 + hp_max[hp_torso] * 2; - for( int i = hp_arm_l; i < num_hp_parts; i++ ) { - total_cur += hp_cur[i]; - total_max += hp_max[i]; + total_cur = get_part_hp_cur( head_id ) * 3 + get_part_hp_cur( torso_id ) * 2; + total_max = get_part_hp_max( head_id ) * 3 + get_part_hp_max( torso_id ) * 2; + for( const std::pair< const bodypart_str_id, bodypart> &elem : get_body() ) { + total_cur += elem.second.get_hp_cur(); + total_max += elem.second.get_hp_max(); } return ( 100 * total_cur ) / total_max; @@ -3989,9 +3992,7 @@ void player::environmental_revert_effect() addictions.clear(); morale->clear(); - for( int part = 0; part < num_hp_parts; part++ ) { - hp_cur[part] = hp_max[part]; - } + set_all_parts_hp_to_max(); set_hunger( 0 ); set_thirst( 0 ); set_fatigue( 0 ); diff --git a/src/player_display.cpp b/src/player_display.cpp index 0454355ddac6a..e3557d751c564 100644 --- a/src/player_display.cpp +++ b/src/player_display.cpp @@ -384,7 +384,8 @@ static void draw_stats_info( const catacurses::window &w_info, _( "Strength affects your melee damage, the amount of weight you can carry, your total HP, " "your resistance to many diseases, and the effectiveness of actions which require brute force." ) ); print_colored_text( w_info, point( 1, 3 ), col_temp, c_light_gray, - string_format( _( "Base HP: %d" ), you.hp_max[1] ) ); + string_format( _( "Base HP: %d" ), + you.get_part_hp_max( bodypart_id( "torso" ) ) ) ); print_colored_text( w_info, point( 1, 4 ), col_temp, c_light_gray, string_format( _( "Carry weight (%s): %.1f" ), weight_units(), convert_weight( you.weight_capacity() ) ) ); diff --git a/src/player_hardcoded_effects.cpp b/src/player_hardcoded_effects.cpp index e76a6d80a4729..f3bb49fccfbb7 100644 --- a/src/player_hardcoded_effects.cpp +++ b/src/player_hardcoded_effects.cpp @@ -191,8 +191,8 @@ static void eff_fun_fungus( player &u, effect &it ) } // We're fucked } else if( one_in( 36000 + bonus * 120 ) ) { - if( u.is_limb_broken( hp_arm_l ) || u.is_limb_broken( hp_arm_r ) ) { - if( u.is_limb_broken( hp_arm_l ) && u.is_limb_broken( hp_arm_r ) ) { + if( u.is_limb_broken( bodypart_id( "arm_l" ) ) || u.is_limb_broken( bodypart_id( "arm_r" ) ) ) { + if( u.is_limb_broken( bodypart_id( "arm_l" ) ) && u.is_limb_broken( bodypart_id( "arm_r" ) ) ) { u.add_msg_player_or_npc( m_bad, _( "The flesh on your broken arms bulges. Fungus stalks burst through!" ), _( "'s broken arms bulge. Fungus stalks burst out of the bulges!" ) ); @@ -883,7 +883,7 @@ void player::hardcoded_effects( effect &it ) _( "You dissolve into beautiful paroxysms of energy. Life fades from your nebulae and you are no more." ) ); } g->events().send( getID(), id ); - hp_cur[hp_torso] = 0; + set_part_hp_cur( bodypart_id( "torso" ), 0 ); } } else if( id == effect_grabbed ) { set_num_blocks_bonus( get_num_blocks_bonus() - 1 ); @@ -1305,11 +1305,11 @@ void player::hardcoded_effects( effect &it ) } } } else if( id == effect_mending ) { - if( !is_limb_broken( bp_to_hp( bp->token ) ) ) { + if( !is_limb_broken( bp ) ) { it.set_duration( 0_turns ); } } else if( id == effect_disabled ) { - if( !is_limb_broken( bp_to_hp( bp->token ) ) ) { + if( !is_limb_broken( bp ) ) { // Just unpause, in case someone added it as a temporary effect (numbing poison etc.) it.unpause_effect(); } diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index f745337811cf3..b0c6889357674 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -624,13 +624,22 @@ void Character::load( const JsonObject &data ) on_item_wear( w ); } - if( !data.read( "hp_cur", hp_cur ) ) { - debugmsg( "Error, incompatible hp_cur in save file '%s'", parray.str() ); + // TEMPORARY until 0.F + if( data.has_object( "hp_cur" ) ) { + std::array hp_cur; + data.read( "hp_cur", hp_cur ); + std::array hp_max; + data.read( "hp_max", hp_max ); + set_part_hp_cur( bodypart_id( "head" ), hp_cur[0] ); + set_part_hp_max( bodypart_id( "head" ), hp_max[0] ); + set_part_hp_cur( bodypart_id( "torso" ), hp_cur[1] ); + set_part_hp_max( bodypart_id( "torso" ), hp_max[1] ); + set_part_hp_cur( bodypart_id( "arm_l" ), hp_cur[2] ); + set_part_hp_max( bodypart_id( "arm_r" ), hp_max[3] ); + set_part_hp_cur( bodypart_id( "leg_l" ), hp_cur[4] ); + set_part_hp_max( bodypart_id( "leg_r" ), hp_max[5] ); } - if( !data.read( "hp_max", hp_max ) ) { - debugmsg( "Error, incompatible hp_max in save file '%s'", parray.str() ); - } inv.clear(); if( data.has_member( "inv" ) ) { @@ -887,9 +896,6 @@ void player::store( JsonOut &json ) const json.member( "id", getID() ); // potential incompatibility with future expansion - // TODO: consider ["parts"]["head"]["hp_cur"] instead of ["hp_cur"][head_enum_value] - json.member( "hp_cur", hp_cur ); - json.member( "hp_max", hp_max ); json.member( "damage_bandaged", damage_bandaged ); json.member( "damage_disinfected", damage_disinfected ); // "Looks like I picked the wrong week to quit smoking." - Steve McCroskey @@ -3070,6 +3076,8 @@ void Creature::store( JsonOut &jsout ) const jsout.member( "grab_resist", grab_resist ); jsout.member( "throw_resist", throw_resist ); + jsout.member( "body", body ); + // fake is not stored, it's temporary anyway, only used to fire with a gun. } @@ -3138,6 +3146,8 @@ void Creature::load( const JsonObject &jsin ) jsin.read( "underwater", underwater ); + jsin.read( "body", body ); + fake = false; // see Creature::load on_stat_change( "pain", pain ); diff --git a/src/start_location.cpp b/src/start_location.cpp index 4b511fb9a594a..f4d7060f2c1be 100644 --- a/src/start_location.cpp +++ b/src/start_location.cpp @@ -387,24 +387,25 @@ void start_location::add_map_extra( const tripoint &omtstart, const std::string void start_location::handle_heli_crash( player &u ) const { - for( int i = 2; i < num_hp_parts; i++ ) { // Skip head + torso for balance reasons. - const auto part = static_cast( i ); - const auto bp_part = player::hp_to_bp( part ); + for( const bodypart_id &bp : u.get_all_body_parts() ) { + if( bp == bodypart_id( "head" ) || bp == bodypart_id( "torso" ) ) { + continue;// Skip head + torso for balance reasons. + } const int roll = static_cast( rng( 1, 8 ) ); switch( roll ) { // Damage + Bleed case 1: case 2: - u.make_bleed( convert_bp( bp_part ).id(), 6_minutes ); + u.make_bleed( bp, 6_minutes ); /* fallthrough */ case 3: case 4: // Just damage case 5: { - const auto maxHp = u.get_hp_max( part ); + const int maxHp = u.get_hp_max( bp ); // Body part health will range from 33% to 66% with occasional bleed const int dmg = static_cast( rng( maxHp / 3, maxHp * 2 / 3 ) ); - u.apply_damage( nullptr, convert_bp( bp_part ).id(), dmg ); + u.apply_damage( nullptr, bp, dmg ); break; } // No damage diff --git a/src/suffer.cpp b/src/suffer.cpp index 762ea1d9d2779..021679ff4cf51 100644 --- a/src/suffer.cpp +++ b/src/suffer.cpp @@ -179,20 +179,20 @@ static float addiction_scaling( float at_min, float at_max, float add_lvl ) void Character::suffer_water_damage( const mutation_branch &mdata ) { - for( const bodypart_id &bp : get_all_body_parts() ) { - const float wetness_percentage = static_cast( body_wetness[bp->token] ) / - drench_capacity[bp->token]; + for( const std::pair &elem : get_body() ) { + const float wetness_percentage = static_cast( body_wetness[elem.first->token] ) / + drench_capacity[elem.first->token]; const int dmg = mdata.weakness_to_water * wetness_percentage; if( dmg > 0 ) { - apply_damage( nullptr, bp, dmg ); + apply_damage( nullptr, elem.first, dmg ); add_msg_player_or_npc( m_bad, _( "Your %s is damaged by the water." ), _( "'s %s is damaged by the water." ), - body_part_name( bp ) ); - } else if( dmg < 0 && hp_cur[bp_to_hp( bp->token )] != hp_max[bp_to_hp( bp->token )] ) { - heal( bp->token, std::abs( dmg ) ); + body_part_name( elem.first ) ); + } else if( dmg < 0 && elem.second.is_at_max_hp() ) { + heal( elem.first, std::abs( dmg ) ); add_msg_player_or_npc( m_good, _( "Your %s is healed by the water." ), _( "'s %s is healed by the water." ), - body_part_name( bp ) ); + body_part_name( elem.first ) ); } } } @@ -1429,10 +1429,9 @@ void Character::suffer() { const int current_stim = get_stim(); // TODO: Remove this section and encapsulate hp_cur - for( int i = 0; i < num_hp_parts; i++ ) { - body_part bp = hp_to_bp( static_cast( i ) ); - if( hp_cur[i] <= 0 ) { - add_effect( effect_disabled, 1_turns, bp, true ); + for( const std::pair &elem : get_body() ) { + if( elem.second.get_hp_cur() <= 0 ) { + add_effect( effect_disabled, 1_turns, elem.first->token, true ); } } @@ -1560,8 +1559,8 @@ void Character::mend( int rate_multiplier ) { // Wearing splints can slowly mend a broken limb back to 1 hp. bool any_broken = false; - for( int i = 0; i < num_hp_parts; i++ ) { - if( is_limb_broken( static_cast( i ) ) ) { + for( const bodypart_id &bp : get_all_body_parts() ) { + if( is_limb_broken( bp ) ) { any_broken = true; break; } @@ -1628,33 +1627,32 @@ void Character::mend( int rate_multiplier ) return; } - for( int i = 0; i < num_hp_parts; i++ ) { - const bool broken = is_limb_broken( static_cast( i ) ); + for( const bodypart_id &bp : get_all_body_parts() ) { + const bool broken = is_limb_broken( bp ); if( !broken ) { continue; } - const bodypart_id &part = convert_bp( hp_to_bp( static_cast( i ) ) ).id(); - if( needs_splint && !worn_with_flag( "SPLINT", part ) ) { + if( needs_splint && !worn_with_flag( "SPLINT", bp ) ) { continue; } const time_duration dur_inc = 1_turns * roll_remainder( rate_multiplier * healing_factor ); - auto &eff = get_effect( effect_mending, part->token ); + auto &eff = get_effect( effect_mending, bp->token ); if( eff.is_null() ) { - add_effect( effect_mending, dur_inc, part->token, true ); + add_effect( effect_mending, dur_inc, bp->token, true ); continue; } eff.set_duration( eff.get_duration() + dur_inc ); if( eff.get_duration() >= eff.get_max_duration() ) { - hp_cur[i] = 1; - remove_effect( effect_mending, part->token ); - g->events().send( getID(), part->token ); + set_part_hp_cur( bp, 1 ); + remove_effect( effect_mending, bp->token ); + g->events().send( getID(), bp->token ); //~ %s is bodypart add_msg_if_player( m_good, _( "Your %s has started to mend!" ), - body_part_name( part ) ); + body_part_name( bp ) ); } } } diff --git a/tests/effective_dps_test.cpp b/tests/effective_dps_test.cpp index 762dc1cd3ede2..00761c3e18c1f 100644 --- a/tests/effective_dps_test.cpp +++ b/tests/effective_dps_test.cpp @@ -229,7 +229,9 @@ static void make_experienced_tester( avatar &test_guy ) test_guy.reset_bonuses(); test_guy.set_speed_base( 100 ); test_guy.set_speed_bonus( 0 ); - test_guy.hp_cur.fill( test_guy.get_hp_max() ); + test_guy.set_body(); + test_guy.set_all_parts_hp_to_max(); + test_guy.set_skill_level( skill_id( "bashing" ), 4 ); test_guy.set_skill_level( skill_id( "cutting" ), 4 ); test_guy.set_skill_level( skill_id( "stabbing" ), 4 ); diff --git a/tests/encumbrance_test.cpp b/tests/encumbrance_test.cpp index b0a64e37cae1e..27ae8fe12a3ff 100644 --- a/tests/encumbrance_test.cpp +++ b/tests/encumbrance_test.cpp @@ -25,6 +25,7 @@ static void test_encumbrance_on( ) { CAPTURE( body_part ); + p.set_body(); p.clear_mutations(); p.worn.clear(); if( tweak_player ) { diff --git a/tests/iuse_test.cpp b/tests/iuse_test.cpp index f9f70635edde7..19134bd4f9f7a 100644 --- a/tests/iuse_test.cpp +++ b/tests/iuse_test.cpp @@ -319,6 +319,7 @@ TEST_CASE( "caffeine and atomic caffeine", "[iuse][caff][atomic_caff]" ) TEST_CASE( "towel", "[iuse][towel]" ) { avatar dummy; + dummy.set_body(); item towel( "towel", 0, item::default_charges_tag{} ); GIVEN( "avatar is wet" ) { diff --git a/tests/new_character_test.cpp b/tests/new_character_test.cpp index 38c9a90c1a600..9184eb3a9afe3 100644 --- a/tests/new_character_test.cpp +++ b/tests/new_character_test.cpp @@ -67,10 +67,9 @@ static avatar get_sanitized_player() { // You'd think that this hp stuff would be in the c'tor... avatar ret = avatar(); + ret.set_body(); ret.recalc_hp(); - for( int i = 0; i < num_hp_parts; i++ ) { - ret.hp_cur[i] = ret.hp_max[i]; - } + // Set these insanely high so can_eat doesn't return TOO_FULL ret.set_hunger( 10000 ); ret.set_thirst( 10000 ); diff --git a/tests/player_helpers.cpp b/tests/player_helpers.cpp index 2ee69b55e0955..df42e38bedb94 100644 --- a/tests/player_helpers.cpp +++ b/tests/player_helpers.cpp @@ -50,6 +50,7 @@ bool player_has_item_of_type( const std::string &type ) void clear_character( player &dummy, bool debug_storage ) { + dummy.set_body(); dummy.normalize(); // In particular this clears martial arts style // delete all worn items. @@ -102,7 +103,7 @@ void clear_character( player &dummy, bool debug_storage ) dummy.reset_bonuses(); dummy.set_speed_base( 100 ); dummy.set_speed_bonus( 0 ); - dummy.hp_cur.fill( dummy.get_hp_max() ); + dummy.set_all_parts_hp_to_max(); dummy.cash = 0; diff --git a/tests/reload_option_test.cpp b/tests/reload_option_test.cpp index d427c00432e60..01dafed6d5aec 100644 --- a/tests/reload_option_test.cpp +++ b/tests/reload_option_test.cpp @@ -58,6 +58,7 @@ TEST_CASE( "magazine_reload_option", "[reload],[reload_option],[gun]" ) TEST_CASE( "belt_reload_option", "[reload],[reload_option],[gun]" ) { avatar dummy; + dummy.set_body(); dummy.worn.push_back( item( "backpack" ) ); item &belt = dummy.i_add( item( "belt308", 0, 0 ) ); From ceb08a0f33aaf7b3aa2efddd9384dfb8d983501e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jianxiang=20Wang=20=28=E7=8E=8B=E5=81=A5=E7=BF=94=29?= Date: Fri, 26 Jun 2020 13:50:51 +0800 Subject: [PATCH 113/206] Add minimal support for calling debugmsg in ui_manager callbacks (#41584) * Add minimal support for calling debugmsg in ui_manager callbacks * Fix debug message input event firing again after debug message is closed --- src/sdltiles.cpp | 5 ++++- src/ui_manager.cpp | 19 ++++++++++--------- src/ui_manager.h | 8 ++++++-- src/wincurse.cpp | 1 + 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index 46f12a16f2717..1d804bfeb9266 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -2892,9 +2892,11 @@ static void CheckMessages() } #endif break; - case SDL_WINDOWEVENT_RESIZED: + case SDL_WINDOWEVENT_RESIZED: { + restore_on_out_of_scope prev_last_input( last_input ); needupdate = handle_resize( ev.window.data1, ev.window.data2 ); break; + } default: break; } @@ -3228,6 +3230,7 @@ static void CheckMessages() } } if( need_redraw ) { + restore_on_out_of_scope prev_last_input( last_input ); // FIXME: SDL_RENDER_TARGETS_RESET only seems to be fired after the first redraw // when restoring the window after system sleep, rather than immediately // on focus gain. This seems to mess up the first redraw and diff --git a/src/ui_manager.cpp b/src/ui_manager.cpp index 77118393d86ed..457af246a5046 100644 --- a/src/ui_manager.cpp +++ b/src/ui_manager.cpp @@ -187,15 +187,16 @@ void ui_adaptor::redraw() void ui_adaptor::redraw_invalidated() { + ui_stack_t ui_stack_copy = ui_stack; // apply deferred resizing - auto first = ui_stack.rbegin(); - for( ; first != ui_stack.rend(); ++first ) { + auto first = ui_stack_copy.rbegin(); + for( ; first != ui_stack_copy.rend(); ++first ) { if( first->get().disabling_uis_below ) { break; } } - for( auto it = first == ui_stack.rend() ? ui_stack.begin() : std::prev( first.base() ); - it != ui_stack.end(); ++it ) { + for( auto it = first == ui_stack_copy.rend() ? ui_stack_copy.begin() : std::prev( first.base() ); + it != ui_stack_copy.end(); ++it ) { ui_adaptor &ui = *it; if( ui.deferred_resize ) { if( ui.screen_resized_cb ) { @@ -208,15 +209,15 @@ void ui_adaptor::redraw_invalidated() // redraw invalidated uis // TODO refresh only when all stacked UIs are drawn - if( !ui_stack.empty() ) { - auto first = ui_stack.crbegin(); - for( ; first != ui_stack.crend(); ++first ) { + if( !ui_stack_copy.empty() ) { + auto first = ui_stack_copy.crbegin(); + for( ; first != ui_stack_copy.crend(); ++first ) { if( first->get().disabling_uis_below ) { break; } } - for( auto it = first == ui_stack.crend() ? ui_stack.cbegin() : std::prev( first.base() ); - it != ui_stack.cend(); ++it ) { + for( auto it = first == ui_stack_copy.crend() ? ui_stack_copy.cbegin() : std::prev( first.base() ); + it != ui_stack_copy.cend(); ++it ) { const ui_adaptor &ui = *it; if( ui.invalidated ) { if( ui.redraw_cb ) { diff --git a/src/ui_manager.h b/src/ui_manager.h index c2f4a2cf6c623..966d9eacf84f5 100644 --- a/src/ui_manager.h +++ b/src/ui_manager.h @@ -38,10 +38,14 @@ class ui_adaptor // Note that `topleft` and `size` are in console cells on both tiles // and curses build. void position( const point &topleft, const point &size ); - // Set redraw and resizing callbacks. These callbacks should NOT call - // `debugmsg`, construct new `ui_adaptor` instances, deconstruct old + // Set redraw and resizing callbacks. These callbacks should NOT + // construct new `ui_adaptor` instances, deconstruct old // `ui_adaptor` instances, call `redraw`, or call `screen_resized`. // + // As a special case, calling `debugmsg` inside the callbacks is (semi-) + // supported, but may cause display glitches after the debug message is + // closed. + // // The redraw callback should also not call `position_from_window`, // otherwise it may cause UI glitch if the window position changes. void on_redraw( const redraw_callback_t &fun ); diff --git a/src/wincurse.cpp b/src/wincurse.cpp index 784eb1348d3bf..ec4dad4ced5f8 100644 --- a/src/wincurse.cpp +++ b/src/wincurse.cpp @@ -558,6 +558,7 @@ static void CheckMessages() DispatchMessage( &msg ); } if( needs_resize ) { + restore_on_out_of_scope prev_lastchar( lastchar ); handle_resize( 0, 0 ); refresh_display(); } From d6685691278e355fc2d2330db190bf1fcba061ff Mon Sep 17 00:00:00 2001 From: anonchan <65480736+anonchan@users.noreply.github.com> Date: Thu, 25 Jun 2020 22:51:55 -0700 Subject: [PATCH 114/206] fix 40mm disassembly - add casings & swap 38 to 32 cal (#41432) * fix disassembly recipes - add casings & swap 38 to 32 cal swaps 38 for 32 caliber to mirror actual m1006 adds corresponding casings to uncraft recipes [according to this, it should have a 32 caliber casing in it](https://bulletpicker.com/pdf/TM%2043-0001-28,%20Artillery%20Ammunition.pdf#page=632) --- data/json/uncraft/ammo/40x46mm.json | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/data/json/uncraft/ammo/40x46mm.json b/data/json/uncraft/ammo/40x46mm.json index 2230dd0716ab2..27b8a4471ede1 100644 --- a/data/json/uncraft/ammo/40x46mm.json +++ b/data/json/uncraft/ammo/40x46mm.json @@ -6,7 +6,12 @@ "difficulty": 4, "time": "3 m", "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 }, { "id": "PULL", "level": 1 } ], - "components": [ [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_shotgun", 35 ] ], [ [ "38_casing", 1 ] ] ], + "components": [ + [ [ "smpistol_primer", 1 ] ], + [ [ "gunpowder_shotgun", 35 ] ], + [ [ "32_casing", 1 ] ], + [ [ "40x46mm_m212_casing", 1 ] ] + ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -16,7 +21,13 @@ "difficulty": 4, "time": "3 m", "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 }, { "id": "PULL", "level": 1 } ], - "components": [ [ [ "smpistol_primer", 1 ] ], [ [ "combatnail", 70 ] ], [ [ "gunpowder_shotgun", 35 ] ], [ [ "impact_fuze", 1 ] ] ], + "components": [ + [ [ "smpistol_primer", 1 ] ], + [ [ "combatnail", 70 ] ], + [ [ "gunpowder_shotgun", 35 ] ], + [ [ "impact_fuze", 1 ] ], + [ [ "40x46mm_m118_casing", 1 ] ] + ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, { @@ -30,7 +41,8 @@ [ [ "lgpistol_primer", 1 ] ], [ [ "chem_compositionb", 32 ] ], [ [ "gunpowder_shotgun", 35 ] ], - [ [ "impact_fuze", 1 ] ] + [ [ "impact_fuze", 1 ] ], + [ [ "40x46mm_m199_casing", 1 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] }, @@ -41,7 +53,7 @@ "difficulty": 4, "time": "3 m", "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 }, { "id": "PULL", "level": 1 } ], - "components": [ [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_shotgun", 35 ] ] ], + "components": [ [ [ "smpistol_primer", 1 ] ], [ [ "gunpowder_shotgun", 35 ] ], [ [ "40x46mm_m195_casing", 1 ] ] ], "flags": [ "UNCRAFT_SINGLE_CHARGE" ] } ] From 55df0e422b6d87b1f25d60185907ebe382e0a104 Mon Sep 17 00:00:00 2001 From: Medecube Date: Fri, 26 Jun 2020 09:07:54 +0300 Subject: [PATCH 115/206] Made carpets deconstructable, added different carpet terrains for different floor types (#41496) * Carpet variants for different flooring Added carpet variants for metal flooring and concrete flooring * Added ter_set for specific types * Added deconstruct * Added deconstruction option in construction menu * Fixed typos * New carpet terrains to mapgen and palletes * Made use of copy_from * Update construction.json * Big fix to line encoding * Fixed typo T-T * Found how carpets can be deconstructed. fixed everything to work * Linted * Fixed not setting proper floor after bashing * Made carpets easy deconstructs and removed flammabel from carpets on metal * Lint * Type; "count" -> "charges" --- data/json/construction.json | 11 - ...indoor.json => terrain-floors-indoor.json} | 244 ++++++++++++------ .../urban_13_dense_house_apt_house.json | 6 +- .../urban_14_dense_house_mart_food.json | 20 +- data/json/mapgen/homeless_shelter.json | 2 +- .../mapgen/house/house_garage_prepper.json | 4 +- .../lab/lab_surface/lab_surface_nested.json | 27 +- data/json/mapgen/lmoe.json | 2 +- data/json/mapgen/mall/mall_basement.json | 2 +- data/json/mapgen/mall/mall_ground.json | 138 +++++----- data/json/mapgen/mall/mall_second_floor.json | 72 +++--- data/json/mapgen/mansion.json | 2 +- .../mapgen/microlab/microlab_firebreak.json | 8 +- .../mapgen/microlab/microlab_hallway.json | 10 +- .../microlab/microlab_hallway_start.json | 8 +- .../microlab/microlab_isolated_stairs.json | 18 +- data/json/mapgen/musicstore.json | 8 +- .../robofaq_locs/robofac_hq_chunks.json | 2 +- data/json/mapgen/sewage_treatment.json | 2 +- .../json/mapgen/steel_mill/steel_mill_z2.json | 2 +- .../json/mapgen_palettes/collapsed_tower.json | 2 +- .../mapgen_palettes/junkyard_palette.json | 4 +- data/json/mapgen_palettes/lmoe.json | 2 +- data/json/mapgen_palettes/mansion.json | 30 +-- 24 files changed, 361 insertions(+), 265 deletions(-) rename data/json/furniture_and_terrain/{terrain-floors_indoor.json => terrain-floors-indoor.json} (75%) diff --git a/data/json/construction.json b/data/json/construction.json index e1004bb1146bd..87b51e6bfc103 100644 --- a/data/json/construction.json +++ b/data/json/construction.json @@ -2435,17 +2435,6 @@ "pre_flags": "CHIP", "post_terrain": "t_wall" }, - { - "type": "construction", - "id": "constr_revert_carpet", - "description": "Remove Carpet", - "category": "DECORATE", - "required_skills": [ [ "fabrication", 0 ] ], - "time": "10 m", - "qualities": [ [ { "id": "HAMMER", "level": 2 } ] ], - "pre_flags": "RUG", - "post_terrain": "t_floor" - }, { "type": "construction", "id": "constr_carpet_red", diff --git a/data/json/furniture_and_terrain/terrain-floors_indoor.json b/data/json/furniture_and_terrain/terrain-floors-indoor.json similarity index 75% rename from data/json/furniture_and_terrain/terrain-floors_indoor.json rename to data/json/furniture_and_terrain/terrain-floors-indoor.json index 8fcc59d36da1f..cf0510527912a 100644 --- a/data/json/furniture_and_terrain/terrain-floors_indoor.json +++ b/data/json/furniture_and_terrain/terrain-floors-indoor.json @@ -386,125 +386,215 @@ }, { "type": "terrain", - "id": "t_carpet_concrete", - "name": "industrial carpet", - "description": "Firm, low-pile, high-durability carpet in a neutral gray color, for laying down on bare concrete.", + "id": "t_carpet_base", + "name": "carpet", + "description": "Base carpet!", "symbol": ".", - "color": "light_gray", - "looks_like": "t_carpet_red", + "color": "red", "move_cost": 2, - "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG" ], + "roof": "t_flat_roof", + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], "bash": { "sound": "SMASH!", - "ter_set": "t_null", - "str_min": 100, - "str_max": 400, - "str_min_supported": 150, - "items": [ - { "item": "rock", "count": [ 5, 10 ] }, - { "item": "scrap", "count": [ 5, 8 ] }, - { "item": "rebar", "count": [ 0, 2 ] } - ] - } - }, - { - "type": "terrain", - "id": "t_carpet_metal", - "name": "bunker carpet", - "description": "Firm, low-pile, totally non-flammable carpet in a neutral cream color, with an insulation layer beneath.", - "symbol": ".", - "color": "white", - "looks_like": "t_carpet_yellow", - "move_cost": 2, - "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG" ], - "bash": { - "sound": "thump", - "ter_set": "t_null", - "str_min": 200, - "str_max": 500, - "str_min_supported": 200, - "items": [ - { "item": "steel_lump", "count": [ 1, 4 ] }, - { "item": "steel_chunk", "count": [ 3, 12 ] }, - { "item": "scrap", "count": [ 9, 36 ] } - ] - } + "ter_set": "t_floor", + "str_min": 5, + "str_max": 15, + "str_min_supported": 100, + "items": [ { "item": "rag", "count": [ 10, 20 ] }, { "item": "nail", "charges": [ 1, 3 ] } ] + }, + "deconstruct": { "items": [ { "item": "r_carpet", "count": 1 }, { "item": "nail", "count": [ 2, 5 ] } ], "ter_set": "t_floor" } }, { "type": "terrain", "id": "t_carpet_red", - "name": "red carpet", - "description": "Soft red carpet.", + "copy-from": "t_carpet_base", + "name": "carpet", "symbol": ".", "color": "red", "move_cost": 2, "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG" ], - "bash": { - "sound": "SMASH!", - "ter_set": "t_null", - "str_min": 50, - "str_max": 400, - "str_min_supported": 100, - "items": [ { "item": "splinter", "count": [ 2, 8 ] }, { "item": "nail", "charges": [ 6, 13 ] } ] - } + "description": "Soft red carpet.", + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "ter_set": "t_floor", "items": [ { "item": "r_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ] } }, { "type": "terrain", "id": "t_carpet_yellow", + "copy-from": "t_carpet_base", "name": "yellow carpet", "description": "Soft yellow carpet.", "symbol": ".", "color": "yellow", "move_cost": 2, - "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG" ], - "bash": { - "sound": "SMASH!", - "ter_set": "t_null", - "str_min": 50, - "str_max": 400, - "str_min_supported": 100, - "items": [ { "item": "splinter", "count": [ 2, 8 ] }, { "item": "nail", "charges": [ 6, 13 ] } ] - } + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "y_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_floor" } }, { "type": "terrain", "id": "t_carpet_green", + "copy-from": "t_carpet_base", "name": "green carpet", "description": "Soft green carpet.", "symbol": ".", "color": "green", "move_cost": 2, - "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG" ], - "bash": { - "sound": "SMASH!", - "ter_set": "t_null", - "str_min": 50, - "str_max": 400, - "str_min_supported": 100, - "items": [ { "item": "splinter", "count": [ 2, 8 ] }, { "item": "nail", "charges": [ 6, 13 ] } ] - } + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "g_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_floor" } }, { "type": "terrain", "id": "t_carpet_purple", + "copy-from": "t_carpet_base", "name": "purple carpet", "description": "Soft purple carpet.", "symbol": ".", "color": "magenta", "move_cost": 2, - "roof": "t_flat_roof", - "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG" ], + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "p_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_base_concrete", + "name": "Carpet", + "symbol": ".", + "color": "red", + "move_cost": 2, + "copy-from": "t_carpet_base", + "description": "Base concrete carpet!", + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], "bash": { "sound": "SMASH!", - "ter_set": "t_null", - "str_min": 50, - "str_max": 400, + "ter_set": "t_thconc_floor", + "str_min": 5, + "str_max": 15, "str_min_supported": 100, - "items": [ { "item": "splinter", "count": [ 2, 8 ] }, { "item": "nail", "charges": [ 6, 13 ] } ] - } + "items": [ { "item": "rag", "count": [ 10, 20 ] }, { "item": "nail", "charges": [ 1, 3 ] } ] + }, + "deconstruct": { "items": [ { "item": "r_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_thconc_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_concrete_red", + "copy-from": "t_carpet_base_concrete", + "name": "industrial red carpet", + "alias": "t_carpet_concrete", + "symbol": ".", + "color": "red", + "move_cost": 2, + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "description": "Firm, low-pile, high-durability carpet in a red color, for laying down on bare concrete." + }, + { + "type": "terrain", + "id": "t_carpet_concrete_yellow", + "copy-from": "t_carpet_base_concrete", + "name": "industrial yellow carpet", + "description": "Firm, low-pile, high-durability carpet in a yellow color, for laying down on bare concrete.", + "symbol": ".", + "color": "yellow", + "move_cost": 2, + "looks_like": "t_carpet_yellow", + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "y_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_thconc_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_concrete_green", + "copy-from": "t_carpet_base_concrete", + "name": "industrial green carpet", + "description": "Firm, low-pile, high-durability carpet in a green color, for laying down on bare concrete.", + "symbol": ".", + "color": "green", + "move_cost": 2, + "looks_like": "t_carpet_green", + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "g_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_thconc_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_concrete_purple", + "copy-from": "t_carpet_base_concrete", + "name": "industrial purple carpet", + "description": "Firm, low-pile, high-durability carpet in a purple color, for laying down on bare concrete.", + "symbol": ".", + "color": "magenta", + "move_cost": 2, + "looks_like": "t_carpet_purple", + "flags": [ "TRANSPARENT", "FLAMMABLE_HARD", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "p_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_thconc_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_base_metal", + "name": "carpet", + "copy-from": "t_carpet_base", + "description": "Base metal carpet!", + "symbol": ".", + "color": "red", + "move_cost": 2, + "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "bash": { + "sound": "SMASH!", + "ter_set": "t_metal_floor", + "str_min": 5, + "str_max": 15, + "str_min_supported": 100, + "items": [ { "item": "rag", "count": [ 10, 20 ] }, { "item": "nail", "charges": [ 1, 3 ] } ] + }, + "deconstruct": { "items": [ { "item": "r_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_metal_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_metal_red", + "copy-from": "t_carpet_base_metal", + "name": "bunker red carpet", + "symbol": ".", + "color": "red", + "move_cost": 2, + "description": "Firm, low-pile, totally non-flammable carpet in a red color, with an insulation layer beneath.", + "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "r_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_metal_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_metal_yellow", + "copy-from": "t_carpet_base_metal", + "name": "bunker yellow carpet", + "alias": "t_carpet_metal", + "description": "Firm, low-pile, totally non-flammable carpet in a yellow color, with an insulation layer beneath.", + "symbol": ".", + "color": "yellow", + "move_cost": 2, + "looks_like": "t_carpet_yellow", + "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "y_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_metal_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_metal_green", + "copy-from": "t_carpet_base_metal", + "name": "bunker green carpet", + "description": "Firm, low-pile, totally non-flammable carpet in a green color, with an insulation layer beneath.", + "symbol": ".", + "color": "green", + "move_cost": 2, + "looks_like": "t_carpet_green", + "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "g_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_metal_floor" } + }, + { + "type": "terrain", + "id": "t_carpet_metal_purple", + "copy-from": "t_carpet_base_metal", + "name": "bunker carpet purple", + "description": "Firm, low-pile, totally non-flammable carpet in a purple color, with an insulation layer beneath.", + "symbol": ".", + "color": "magenta", + "move_cost": 2, + "looks_like": "t_carpet_purple", + "flags": [ "TRANSPARENT", "SUPPORTS_ROOF", "COLLAPSES", "INDOORS", "FLAT", "RUG", "EASY_DECONSTRUCT" ], + "deconstruct": { "items": [ { "item": "p_carpet", "charges": 1 }, { "item": "nail", "charges": 5 } ], "ter_set": "t_metal_floor" } }, { "type": "terrain", diff --git a/data/json/mapgen/city_blocks/urban_13_dense_house_apt_house.json b/data/json/mapgen/city_blocks/urban_13_dense_house_apt_house.json index 52d99601c1ee2..0b2dfb5e0b47a 100644 --- a/data/json/mapgen/city_blocks/urban_13_dense_house_apt_house.json +++ b/data/json/mapgen/city_blocks/urban_13_dense_house_apt_house.json @@ -308,7 +308,7 @@ "type": "mapgen", "weight": 250, "object": { - "fill_ter": "t_carpet_green", + "fill_ter": "t_carpet_concrete_green", "rows": [ "________________________________________________", "________________________________________________", @@ -338,8 +338,8 @@ "palettes": [ "standard_domestic_palette" ], "liquids": { ")": { "liquid": "water", "amount": [ 0, 1000 ] } }, "terrain": { - "=": "t_carpet_green", - " ": "t_carpet_green", + "=": "t_carpet_concrete_green", + " ": "t_carpet_concrete_green", "_": "t_open_air", "`": "t_gutter_north", "/": "t_gutter_drop", diff --git a/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json b/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json index 8db281364fe67..236f7a1fcc508 100644 --- a/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json +++ b/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json @@ -35,15 +35,15 @@ "palettes": [ "standard_domestic_palette" ], "terrain": { "%": "t_rock", - "=": "t_carpet_yellow", - "I": "t_carpet_yellow", - "h": "t_carpet_yellow", - "s": "t_carpet_yellow", - "y": "t_carpet_yellow", - "E": "t_carpet_yellow", - "T": "t_carpet_yellow", - "d": "t_carpet_yellow", - "@": "t_carpet_yellow", + "=": "t_carpet_concrete_yellow", + "I": "t_carpet_concrete_yellow", + "h": "t_carpet_concrete_yellow", + "s": "t_carpet_concrete_yellow", + "y": "t_carpet_concrete_yellow", + "E": "t_carpet_concrete_yellow", + "T": "t_carpet_concrete_yellow", + "d": "t_carpet_concrete_yellow", + "@": "t_carpet_concrete_yellow", "~": "t_dirtfloor", "$": "t_sai_box", ":": "t_wall_glass", @@ -103,7 +103,7 @@ "F": "t_concrete", "a": "t_window_bars_domestic", "b": "t_door_metal_pickable", - "=": "t_carpet_yellow", + "=": "t_carpet_concrete_yellow", "_": "t_pavement", "[": "t_pavement", "(": "t_pavement", diff --git a/data/json/mapgen/homeless_shelter.json b/data/json/mapgen/homeless_shelter.json index 4eab711ea2ed6..339384bafe6bf 100644 --- a/data/json/mapgen/homeless_shelter.json +++ b/data/json/mapgen/homeless_shelter.json @@ -34,7 +34,7 @@ "i": "t_ladder_up", "!": "t_ladder_down", "z": "t_flat_roof", - "_": "t_carpet_red", + "_": "t_carpet_concrete_red", "3": "t_concrete", "L": "t_thconc_floor", "R": "t_thconc_floor", diff --git a/data/json/mapgen/house/house_garage_prepper.json b/data/json/mapgen/house/house_garage_prepper.json index bed34f5a3a221..df3d8db13d2a7 100644 --- a/data/json/mapgen/house/house_garage_prepper.json +++ b/data/json/mapgen/house/house_garage_prepper.json @@ -5,7 +5,7 @@ "om_terrain": [ "house_prepper2" ], "weight": 100, "object": { - "fill_ter": "t_carpet_red", + "fill_ter": "t_carpet_concrete_red", "rows": [ "..%%%%```%%%%p```````...", ".##$$##*##$$##=======##.", @@ -41,7 +41,7 @@ "=": "t_door_metal_locked", "&": "t_gates_control_brick", "~": "t_thconc_floor", - " ": "t_carpet_red", + " ": "t_carpet_concrete_red", "`": "t_concrete", "q": "t_thconc_floor", "W": "t_thconc_floor", diff --git a/data/json/mapgen/lab/lab_surface/lab_surface_nested.json b/data/json/mapgen/lab/lab_surface/lab_surface_nested.json index 1f2433394a685..375238fd34f78 100644 --- a/data/json/mapgen/lab/lab_surface/lab_surface_nested.json +++ b/data/json/mapgen/lab/lab_surface/lab_surface_nested.json @@ -543,13 +543,13 @@ "dHH " ], "terrain": { - " ": "t_carpet_red", - "f": "t_carpet_red", - "r": "t_carpet_red", - "H": "t_carpet_red", - "d": "t_carpet_red", - "c": "t_carpet_red", - "B": "t_carpet_red" + " ": "t_carpet_concrete_red", + "f": "t_carpet_concrete_red", + "r": "t_carpet_concrete_red", + "H": "t_carpet_concrete_red", + "d": "t_carpet_concrete_red", + "c": "t_carpet_concrete_red", + "B": "t_carpet_concrete_red" }, "items": { "d": [ { "item": "office", "chance": 25, "repeat": [ 1, 3 ] }, { "item": "electronics", "chance": 15 } ], @@ -1072,7 +1072,7 @@ " dc dc dc ", " " ], - "terrain": { "%": "t_carpet_yellow" }, + "terrain": { "%": "t_carpet_concrete_yellow" }, "items": { "d": { "item": "office", "chance": 8 } }, "palettes": [ "lab_surface_palette" ] } @@ -1098,7 +1098,7 @@ " cxxc cxxc ", " " ], - "terrain": { "%": "t_carpet_yellow" }, + "terrain": { "%": "t_carpet_concrete_yellow" }, "palettes": [ "lab_surface_palette" ] } }, @@ -1123,7 +1123,14 @@ " cccc cccc ", " " ], - "terrain": { " ": "t_carpet_red", "c": "t_carpet_red", "%": "t_floor", "r": "t_floor", "s": "t_floor", "C": "t_floor" }, + "terrain": { + " ": "t_carpet_concrete_red", + "c": "t_carpet_concrete_red", + "%": "t_floor", + "r": "t_floor", + "s": "t_floor", + "C": "t_floor" + }, "items": { "c": { "item": "office", "chance": 10 }, "C": { "item": "office", "chance": 45 } }, "palettes": [ "lab_surface_palette" ] } diff --git a/data/json/mapgen/lmoe.json b/data/json/mapgen/lmoe.json index dec22389704b9..6eb5181a128ce 100644 --- a/data/json/mapgen/lmoe.json +++ b/data/json/mapgen/lmoe.json @@ -156,7 +156,7 @@ "//3": "There are extensive secret rooms which might contain a lot of treasure in the non-looted version.", "weight": 100, "object": { - "fill_ter": "t_carpet_metal", + "fill_ter": "t_carpet_metal_purple", "rows": [ "##|||||#################", "##|,,<|||||||###########", diff --git a/data/json/mapgen/mall/mall_basement.json b/data/json/mapgen/mall/mall_basement.json index 3fa32164343a8..dc34e012da0d2 100644 --- a/data/json/mapgen/mall/mall_basement.json +++ b/data/json/mapgen/mall/mall_basement.json @@ -46,7 +46,7 @@ "#": "t_brick_wall", "*": "t_linoleum_gray", ",": "t_linoleum_white", - "6": "t_carpet_red", + "6": "t_carpet_concrete_red", ".": "t_rock", "{": "t_linoleum_gray", "Y": "t_linoleum_gray", diff --git a/data/json/mapgen/mall/mall_ground.json b/data/json/mapgen/mall/mall_ground.json index a4edc5fab150b..f544d9eda316e 100644 --- a/data/json/mapgen/mall/mall_ground.json +++ b/data/json/mapgen/mall/mall_ground.json @@ -90,7 +90,7 @@ [ "mall_a_10", "mall_a_11", "mall_a_12", "mall_a_13", "mall_a_14", "mall_a_15", "mall_a_16", "mall_a_17", "mall_a_18" ] ], "object": { - "fill_ter": "t_carpet_red", + "fill_ter": "t_carpet_concrete_red", "rows": [ "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽1___________________________|PPPPP|________|....|j__=_t|__|ւււГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", "ւГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽|___________________________|||||||QQQQQQQQ|.,,.|j__||||__|||ւГГ˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽ГГ˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽˽Гւ", @@ -131,7 +131,7 @@ "t": "t_thconc_floor", "M": "t_thconc_floor", "1": "t_door_metal_locked", - "K": "t_carpet_yellow", + "K": "t_carpet_concrete_yellow", "%": "t_linoleum_gray", "u": "t_linoleum_gray", "*": "t_linoleum_gray", @@ -238,10 +238,10 @@ ], "palettes": [ "mall_palette_2" ], "terrain": { - "@": "t_carpet_red", - "d": "t_carpet_red", - "B": "t_carpet_red", - "Y": "t_carpet_red", + "@": "t_carpet_concrete_red", + "d": "t_carpet_concrete_red", + "B": "t_carpet_concrete_red", + "Y": "t_carpet_concrete_red", "Q": "t_thconc_floor", "J": "t_thconc_floor", "z": "t_thconc_floor", @@ -350,17 +350,17 @@ ], "palettes": [ "mall_palette_2" ], "terrain": { - "K": "t_carpet_green", - "M": "t_carpet_green", - "B": "t_carpet_green", - "!": "t_carpet_green", - "@": "t_carpet_green", - "y": "t_carpet_green", - "[": "t_carpet_yellow", - "Z": "t_carpet_yellow", - "S": "t_carpet_yellow", - "b": "t_carpet_yellow", - "a": "t_carpet_yellow", + "K": "t_carpet_concrete_green", + "M": "t_carpet_concrete_green", + "B": "t_carpet_concrete_green", + "!": "t_carpet_concrete_green", + "@": "t_carpet_concrete_green", + "y": "t_carpet_concrete_green", + "[": "t_carpet_concrete_yellow", + "Z": "t_carpet_concrete_yellow", + "S": "t_carpet_concrete_yellow", + "b": "t_carpet_concrete_yellow", + "a": "t_carpet_concrete_yellow", "Q": "t_thconc_floor", "J": "t_thconc_floor", "z": "t_thconc_floor", @@ -681,8 +681,8 @@ { "item": "mountable_cooler", "x": 33, "y": 20, "chance": 35 } ], "terrain": { - "(": "t_carpet_yellow", - ";": "t_carpet_purple", + "(": "t_carpet_concrete_yellow", + ";": "t_carpet_concrete_purple", "Q": "t_thconc_floor", "z": "t_thconc_floor", "t": "t_thconc_floor", @@ -841,9 +841,9 @@ ], "palettes": [ "mall_palette_2" ], "terrain": { - "±": "t_carpet_red", - "Ŧ": "t_carpet_red", - "3": "t_carpet_red", + "±": "t_carpet_concrete_red", + "Ŧ": "t_carpet_concrete_red", + "3": "t_carpet_concrete_red", "Q": "t_thconc_floor", "z": "t_thconc_floor", "u": "t_thconc_floor", @@ -1026,8 +1026,8 @@ { "item": "craftrig", "x": 5, "y": 4, "chance": 35 } ], "terrain": { - "(": "t_carpet_yellow", - "3": "t_carpet_yellow", + "(": "t_carpet_concrete_yellow", + "3": "t_carpet_concrete_yellow", "Q": "t_thconc_floor", "z": "t_thconc_floor", "t": "t_thconc_floor", @@ -1164,13 +1164,13 @@ ], "palettes": [ "mall_palette_2" ], "terrain": { - "w": "t_carpet_red", - ":": "t_carpet_red", - "R": "t_carpet_red", - "I": "t_carpet_red", - "C": "t_carpet_red", - "[": "t_carpet_red", - "Ʌ": "t_carpet_red", + "w": "t_carpet_concrete_red", + ":": "t_carpet_concrete_red", + "R": "t_carpet_concrete_red", + "I": "t_carpet_concrete_red", + "C": "t_carpet_concrete_red", + "[": "t_carpet_concrete_red", + "Ʌ": "t_carpet_concrete_red", "Q": "t_thconc_floor", "z": "t_thconc_floor", "A": "t_thconc_floor", @@ -1298,11 +1298,11 @@ ], "palettes": [ "mall_palette_2" ], "terrain": { - "`": "t_carpet_red", - "I": "t_carpet_red", - "C": "t_carpet_red", - "[": "t_carpet_red", - "R": "t_carpet_yellow", + "`": "t_carpet_concrete_red", + "I": "t_carpet_concrete_red", + "C": "t_carpet_concrete_red", + "[": "t_carpet_concrete_red", + "R": "t_carpet_concrete_yellow", "Ħ": "t_linoleum_gray", "%": "t_linoleum_gray", "0": "t_linoleum_gray", @@ -1323,9 +1323,9 @@ "S": "t_thconc_floor", "V": "t_thconc_floor", "Q": "t_thconc_floor", - "Ʌ": "t_carpet_green", - "Ʉ": "t_carpet_green", - ":": "t_carpet_green" + "Ʌ": "t_carpet_concrete_green", + "Ʉ": "t_carpet_concrete_green", + ":": "t_carpet_concrete_green" }, "sealed_item": { "1": { "item": { "item": "seed_rose" }, "furniture": "f_planter_harvest" }, @@ -1456,13 +1456,13 @@ "*": "t_linoleum_gray", "%": "t_linoleum_gray", "u": "t_linoleum_gray", - "@": "t_carpet_yellow", - "ǝ": "t_carpet_yellow", - "Ʌ": "t_carpet_yellow", - "(": "t_carpet_green", - ")": "t_carpet_green", + "@": "t_carpet_concrete_yellow", + "ǝ": "t_carpet_concrete_yellow", + "Ʌ": "t_carpet_concrete_yellow", + "(": "t_carpet_concrete_green", + ")": "t_carpet_concrete_green", "1": "t_linoleum_white_no_roof", - "4": "t_carpet_red" + "4": "t_carpet_concrete_red" }, "sealed_item": { "1": { "item": { "item": "seed_rose" }, "furniture": "f_planter_harvest" } }, "furniture": { @@ -1581,14 +1581,14 @@ "terrain": { "3": "t_slot_machine", "Δ": "t_atm", - "R": "t_carpet_yellow", - "(": "t_carpet_yellow", - ")": "t_carpet_yellow", - "@": "t_carpet_red", - "V": "t_carpet_red", - "±": "t_carpet_red", - ";": "t_carpet_red", - "[": "t_carpet_red", + "R": "t_carpet_concrete_yellow", + "(": "t_carpet_concrete_yellow", + ")": "t_carpet_concrete_yellow", + "@": "t_carpet_concrete_red", + "V": "t_carpet_concrete_red", + "±": "t_carpet_concrete_red", + ";": "t_carpet_concrete_red", + "[": "t_carpet_concrete_red", "%": "t_linoleum_gray", "F": "t_linoleum_gray", "Q": "t_linoleum_gray", @@ -1617,9 +1617,9 @@ "P": "t_thconc_floor", "$": "t_thconc_floor", "t": "t_thconc_floor", - "Ʌ": "t_carpet_green", - "Ʉ": "t_carpet_green", - ":": "t_carpet_green" + "Ʌ": "t_carpet_concrete_green", + "Ʉ": "t_carpet_concrete_green", + ":": "t_carpet_concrete_green" }, "sealed_item": { "1": { "item": { "item": "seed_rose" }, "furniture": "f_planter_harvest" }, @@ -1767,10 +1767,10 @@ "*": "t_linoleum_gray", "%": "t_linoleum_gray", "u": "t_linoleum_gray", - "@": "t_carpet_yellow", - "ǝ": "t_carpet_yellow", - "Ʌ": "t_carpet_yellow", - ")": "t_carpet_green", + "@": "t_carpet_concrete_yellow", + "ǝ": "t_carpet_concrete_yellow", + "Ʌ": "t_carpet_concrete_yellow", + ")": "t_carpet_concrete_green", "Δ": "t_atm", "1": "t_linoleum_white_no_roof" }, @@ -1888,15 +1888,15 @@ ], "palettes": [ "mall_palette_2" ], "terrain": { - "@": "t_carpet_yellow", - "ǝ": "t_carpet_yellow", - "C": "t_carpet_yellow", - "y": "t_carpet_red", - "V": "t_carpet_red", - "±": "t_carpet_red", - "♥": "t_carpet_red", - ";": "t_carpet_red", - "[": "t_carpet_red", + "@": "t_carpet_concrete_yellow", + "ǝ": "t_carpet_concrete_yellow", + "C": "t_carpet_concrete_yellow", + "y": "t_carpet_concrete_red", + "V": "t_carpet_concrete_red", + "±": "t_carpet_concrete_red", + "♥": "t_carpet_concrete_red", + ";": "t_carpet_concrete_red", + "[": "t_carpet_concrete_red", "%": "t_linoleum_gray", "&": "t_linoleum_gray" }, diff --git a/data/json/mapgen/mall/mall_second_floor.json b/data/json/mapgen/mall/mall_second_floor.json index 1bb2a89bcfacf..6681f69e49b1a 100644 --- a/data/json/mapgen/mall/mall_second_floor.json +++ b/data/json/mapgen/mall/mall_second_floor.json @@ -285,9 +285,9 @@ "I": "t_thconc_floor", "B": "t_thconc_floor", "w": "t_thconc_floor", - "0": "t_carpet_red", - "%": "t_carpet_purple", - "d": "t_carpet_purple" + "0": "t_carpet_concrete_red", + "%": "t_carpet_concrete_purple", + "d": "t_carpet_concrete_purple" }, "furniture": { "0": "f_piano", "%": [ "f_indoor_plant_y", "f_indoor_plant" ] }, "items": { @@ -339,11 +339,11 @@ "palettes": [ "mall_palette_2" ], "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 3, 23 ], "y": [ 1, 13 ], "density": 0.4 } ], "terrain": { - "%": "t_carpet_purple", - "T": "t_carpet_purple", - "K": "t_carpet_purple", - "!": "t_carpet_purple", - "A": "t_carpet_purple", + "%": "t_carpet_concrete_purple", + "T": "t_carpet_concrete_purple", + "K": "t_carpet_concrete_purple", + "!": "t_carpet_concrete_purple", + "A": "t_carpet_concrete_purple", "z": "t_thconc_floor", "^": "t_thconc_floor", "t": "t_thconc_floor", @@ -511,15 +511,15 @@ "palettes": [ "mall_palette_2" ], "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 3, 23 ], "y": [ 1, 23 ], "density": 0.4 } ], "terrain": { - "A": "t_carpet_yellow", - "B": "t_carpet_yellow", - "K": "t_carpet_yellow", - "J": "t_carpet_yellow", - "i": "t_carpet_green", - "j": "t_carpet_green", - "m": "t_carpet_green", - "~": "t_carpet_green", - "7": "t_carpet_green", + "A": "t_carpet_concrete_yellow", + "B": "t_carpet_concrete_yellow", + "K": "t_carpet_concrete_yellow", + "J": "t_carpet_concrete_yellow", + "i": "t_carpet_concrete_green", + "j": "t_carpet_concrete_green", + "m": "t_carpet_concrete_green", + "~": "t_carpet_concrete_green", + "7": "t_carpet_concrete_green", "^": "t_linoleum_gray", "U": "t_thconc_floor", "z": "t_thconc_floor", @@ -1048,7 +1048,7 @@ ], "palettes": [ "mall_palette_2" ], "terrain": { - "V": "t_carpet_red", + "V": "t_carpet_concrete_red", "!": "t_floor", "T": "t_floor", "d": "t_floor", @@ -1395,14 +1395,14 @@ ], "palettes": [ "mall_palette_2" ], "terrain": { - "b": "t_carpet_yellow", - "M": "t_carpet_yellow", - "@": "t_carpet_yellow", - "!": "t_carpet_yellow", - "d": "t_carpet_yellow", - "K": "t_carpet_purple", - "%": "t_carpet_purple", - "A": "t_carpet_purple", + "b": "t_carpet_concrete_yellow", + "M": "t_carpet_concrete_yellow", + "@": "t_carpet_concrete_yellow", + "!": "t_carpet_concrete_yellow", + "d": "t_carpet_concrete_yellow", + "K": "t_carpet_concrete_purple", + "%": "t_carpet_concrete_purple", + "A": "t_carpet_concrete_purple", "F": "t_linoleum_white", "*": "t_linoleum_white", "Ŧ": "t_linoleum_white", @@ -1671,7 +1671,7 @@ "t": "t_thconc_floor", "j": "t_thconc_floor", ")": "t_floor", - "*": "t_carpet_yellow", + "*": "t_carpet_concrete_yellow", "A": "t_linoleum_white", "%": "t_linoleum_white", ":": "t_linoleum_white", @@ -1731,7 +1731,7 @@ ], "palettes": [ "mall_palette_2" ], "place_monsters": [ { "monster": "GROUP_MALL", "x": [ 3, 8 ], "y": [ 1, 23 ], "density": 0.4 } ], - "terrain": { "d": "t_floor", "K": "t_carpet_yellow", "V": "t_linoleum_gray" }, + "terrain": { "d": "t_floor", "K": "t_carpet_concrete_yellow", "V": "t_linoleum_gray" }, "items": { "Y": { "item": "trash", "chance": 30, "repeat": [ 2, 4 ] }, "d": [ @@ -1988,13 +1988,13 @@ ">": "t_stairs_down", "E": "t_elevator", "<": "t_stairs_up", - "B": "t_carpet_red", + "B": "t_carpet_concrete_red", ":": "t_linoleum_white", "&": "t_linoleum_white", - "I": "t_carpet_red", - "S": "t_carpet_red", - "C": "t_carpet_red", - "@": "t_carpet_red" + "I": "t_carpet_concrete_red", + "S": "t_carpet_concrete_red", + "C": "t_carpet_concrete_red", + "@": "t_carpet_concrete_red" }, "furniture": { "&": "f_table", ":": "f_bench" }, "items": { @@ -2039,9 +2039,9 @@ "palettes": [ "mall_palette_2" ], "terrain": { "<": "t_stairs_up", - "S": "t_carpet_red", - "B": "t_carpet_red", - "I": "t_carpet_red", + "S": "t_carpet_concrete_red", + "B": "t_carpet_concrete_red", + "I": "t_carpet_concrete_red", "z": "t_thconc_floor", ":": "t_linoleum_white", "*": "t_linoleum_white", diff --git a/data/json/mapgen/mansion.json b/data/json/mapgen/mansion.json index 3ffd26c58f182..4d5951c6db036 100644 --- a/data/json/mapgen/mansion.json +++ b/data/json/mapgen/mansion.json @@ -420,7 +420,7 @@ "########################" ], "palettes": [ "mansion_palette_common", "mansion_palette_basement" ], - "terrain": { "@": "t_carpet_red", "R": "t_carpet_red" }, + "terrain": { "@": "t_carpet_concrete_red", "R": "t_carpet_concrete_red" }, "furniture": { "$": [ "f_shackle", "f_null" ], "@": "f_mannequin" }, "items": { ".": { "item": "clutter_basement" }, diff --git a/data/json/mapgen/microlab/microlab_firebreak.json b/data/json/mapgen/microlab/microlab_firebreak.json index a9d2b5c74c7bf..197b232f9d0e1 100644 --- a/data/json/mapgen/microlab/microlab_firebreak.json +++ b/data/json/mapgen/microlab/microlab_firebreak.json @@ -33,7 +33,7 @@ "|||||| PP PP PP ||||||" ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" }, + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" }, "computers": { "6": { "name": "Security Terminal", @@ -78,7 +78,7 @@ "|||||| PP PP PP ||||||" ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" }, + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" }, "computers": { "6": { "name": "Security Terminal", @@ -124,7 +124,7 @@ ], "set": [ { "point": "bash", "x": [ 6, 18 ], "y": [ 6, 18 ], "repeat": [ 30, 100 ] } ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" }, + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" }, "monster": { "M": { "monster": "mon_mutant_experimental" }, "ü": { "monster": "mon_mutant_evolved" } }, "computers": { "6": { @@ -171,7 +171,7 @@ ], "set": [ { "point": "bash", "x": [ 6, 18 ], "y": [ 6, 18 ], "repeat": [ 30, 100 ] } ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" }, + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" }, "monster": { "M": { "monster": "mon_hunting_horror" }, "ü": { "monster": "mon_breather_hub" } }, "computers": { "6": { diff --git a/data/json/mapgen/microlab/microlab_hallway.json b/data/json/mapgen/microlab/microlab_hallway.json index 198528f756d77..12bb1d220293e 100644 --- a/data/json/mapgen/microlab/microlab_hallway.json +++ b/data/json/mapgen/microlab/microlab_hallway.json @@ -32,7 +32,7 @@ " | PP PP PP | " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { @@ -68,7 +68,7 @@ " F| PP PP PP | " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { @@ -104,7 +104,7 @@ " F| PP PP PP | " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { @@ -140,7 +140,7 @@ " | PP PP PP | " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { @@ -176,7 +176,7 @@ " | PP PP PP | " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } } ] diff --git a/data/json/mapgen/microlab/microlab_hallway_start.json b/data/json/mapgen/microlab/microlab_hallway_start.json index c7fc354ba001c..c06185287253e 100644 --- a/data/json/mapgen/microlab/microlab_hallway_start.json +++ b/data/json/mapgen/microlab/microlab_hallway_start.json @@ -32,7 +32,7 @@ " |FFFF| |FFFF| " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { @@ -68,7 +68,7 @@ " |FFFF| |FFFF| " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { @@ -104,7 +104,7 @@ " |FFFF| |FFFF| " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { @@ -140,7 +140,7 @@ " | | |FFFF| " ], "palettes": [ "microlab" ], - "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } } ] diff --git a/data/json/mapgen/microlab/microlab_isolated_stairs.json b/data/json/mapgen/microlab/microlab_isolated_stairs.json index 0083ca4ce8ec4..2b9b755088589 100644 --- a/data/json/mapgen/microlab/microlab_isolated_stairs.json +++ b/data/json/mapgen/microlab/microlab_isolated_stairs.json @@ -32,7 +32,7 @@ "########################" ], "palettes": [ "microlab" ], - "terrain": { "`": "t_open_air", "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "`": "t_open_air", "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { @@ -68,7 +68,12 @@ "########################" ], "palettes": [ "microlab" ], - "terrain": { "`": "t_open_air", "=": "t_metal_ventilation_shutter", "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { + "`": "t_open_air", + "=": "t_metal_ventilation_shutter", + "X": "t_region_shrub_decorative", + "P": "t_carpet_concrete_red" + } } }, { @@ -104,7 +109,12 @@ "########################" ], "palettes": [ "microlab" ], - "terrain": { "`": "t_open_air", "=": "t_metal_ventilation_shutter", "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { + "`": "t_open_air", + "=": "t_metal_ventilation_shutter", + "X": "t_region_shrub_decorative", + "P": "t_carpet_concrete_red" + } } }, { @@ -140,7 +150,7 @@ "########################" ], "palettes": [ "microlab" ], - "terrain": { "ó": "t_concrete", "`": "t_open_air", "X": "t_region_shrub_decorative", "P": "t_carpet_red" } + "terrain": { "ó": "t_concrete", "`": "t_open_air", "X": "t_region_shrub_decorative", "P": "t_carpet_concrete_red" } } }, { diff --git a/data/json/mapgen/musicstore.json b/data/json/mapgen/musicstore.json index 1ffebf2a6edaf..059c4dbf07f6c 100644 --- a/data/json/mapgen/musicstore.json +++ b/data/json/mapgen/musicstore.json @@ -82,10 +82,10 @@ "d": "t_pavement", "s": "t_sidewalk", "z": "t_shrub", - "g": "t_carpet_green", - "h": "t_carpet_green", - "K": "t_carpet_green", - "7": "t_carpet_green", + "g": "t_carpet_concrete_green", + "h": "t_carpet_concrete_green", + "K": "t_carpet_concrete_green", + "7": "t_carpet_concrete_green", "<": "t_gutter_downspout", "|": "t_wall_b" }, diff --git a/data/json/mapgen/robofaq_locs/robofac_hq_chunks.json b/data/json/mapgen/robofaq_locs/robofac_hq_chunks.json index 16ffd2dcfca51..89fe1dae07a0b 100644 --- a/data/json/mapgen/robofaq_locs/robofac_hq_chunks.json +++ b/data/json/mapgen/robofaq_locs/robofac_hq_chunks.json @@ -25,7 +25,7 @@ ], "terrain": { ".": "t_dirt", - "r": "t_carpet_yellow", + "r": "t_carpet_concrete_yellow", "M": "t_pavement", "#": "t_dirt", "x": "t_dirt", diff --git a/data/json/mapgen/sewage_treatment.json b/data/json/mapgen/sewage_treatment.json index 17022bd13a800..f52478065c5da 100644 --- a/data/json/mapgen/sewage_treatment.json +++ b/data/json/mapgen/sewage_treatment.json @@ -539,7 +539,7 @@ "%%%%%%%%%%%%%%%%%%%%%%%%" ], "palettes": [ "sewage_treatment_sewer_palette" ], - "terrain": { "O": "t_mdoor_lab_frame", ":": "t_carpet_yellow", "Q": "t_privacy_fence" }, + "terrain": { "O": "t_mdoor_lab_frame", ":": "t_carpet_metal_yellow", "Q": "t_privacy_fence" }, "furniture": { "{": "f_utility_shelf", "w": "f_workbench", diff --git a/data/json/mapgen/steel_mill/steel_mill_z2.json b/data/json/mapgen/steel_mill/steel_mill_z2.json index ee62fd82b35b0..b31f4942555f5 100644 --- a/data/json/mapgen/steel_mill/steel_mill_z2.json +++ b/data/json/mapgen/steel_mill/steel_mill_z2.json @@ -10,7 +10,7 @@ [ "steel_mill_4_1_2", "steel_mill_4_2_2", "steel_mill_4_3_2", "steel_mill_rail_2_2" ] ], "object": { - "fill_ter": "t_carpet_concrete", + "fill_ter": "t_carpet_concrete_yellow", "rows": [ ":::::::::::::::::::::::::::::::1::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::", diff --git a/data/json/mapgen_palettes/collapsed_tower.json b/data/json/mapgen_palettes/collapsed_tower.json index 572aa037bbbca..00c7b558f2c69 100644 --- a/data/json/mapgen_palettes/collapsed_tower.json +++ b/data/json/mapgen_palettes/collapsed_tower.json @@ -21,7 +21,7 @@ "c": "t_door_locked", "e": "t_elevator", "l": "t_floor", - "r": "t_carpet_red", + "r": "t_carpet_concrete_red", "s": "t_sidewalk", "w": "t_door_c", "y": "t_pavement_y", diff --git a/data/json/mapgen_palettes/junkyard_palette.json b/data/json/mapgen_palettes/junkyard_palette.json index ad48193f802e8..42d2d3ea8d659 100644 --- a/data/json/mapgen_palettes/junkyard_palette.json +++ b/data/json/mapgen_palettes/junkyard_palette.json @@ -14,8 +14,8 @@ "S": "t_sidewalk", "q": "t_door_metal_locked", "f": "t_floor", - "c": "t_carpet_red", - "n": "t_carpet_red", + "c": "t_carpet_concrete_red", + "n": "t_carpet_concrete_red", "r": "t_reinforced_door_glass_c", "%": "t_brick_wall", "C": "t_thconc_floor", diff --git a/data/json/mapgen_palettes/lmoe.json b/data/json/mapgen_palettes/lmoe.json index 6f0a0e5ed5380..28bc0f7a493ad 100644 --- a/data/json/mapgen_palettes/lmoe.json +++ b/data/json/mapgen_palettes/lmoe.json @@ -8,7 +8,7 @@ "+": "t_door_metal_c", "-": "t_scrap_wall", "_": "t_metal_floor", - ",": "t_carpet_metal", + ",": "t_carpet_metal_purple", "1": "t_column", "<": "t_stairs_up", "=": "t_chainfence", diff --git a/data/json/mapgen_palettes/mansion.json b/data/json/mapgen_palettes/mansion.json index 4cfd9008396d7..38d71fed78598 100644 --- a/data/json/mapgen_palettes/mansion.json +++ b/data/json/mapgen_palettes/mansion.json @@ -67,26 +67,26 @@ "%": "t_door_locked_interior", "&": "t_console_broken", "!": "t_region_groundcover_urban", - ")": "t_carpet_red", + ")": "t_carpet_concrete_red", "+": "t_door_c", ",": "t_sidewalk", - "-": "t_carpet_red", + "-": "t_carpet_concrete_red", "/": "t_linoleum_gray", - "2": "t_carpet_red", + "2": "t_carpet_concrete_red", "3": "t_linoleum_gray", "4": "t_concrete", - "6": "t_carpet_red", + "6": "t_carpet_concrete_red", "7": "t_concrete", "9": "t_linoleum_gray", "<": "t_stairs_up", "=": "t_linoleum_gray", ">": "t_stairs_down", - "A": "t_carpet_red", - "B": "t_carpet_red", + "A": "t_carpet_concrete_red", + "B": "t_carpet_concrete_red", "C": "t_linoleum_gray", - "D": "t_carpet_red", - "E": "t_carpet_red", - "F": "t_carpet_red", + "D": "t_carpet_concrete_red", + "E": "t_carpet_concrete_red", + "F": "t_carpet_concrete_red", "G": "t_linoleum_gray", "H": "t_linoleum_gray", "I": "t_linoleum_gray", @@ -97,17 +97,17 @@ "P": "t_linoleum_gray", "Q": "t_linoleum_gray", "R": "t_linoleum_gray", - "S": "t_carpet_red", - "T": "t_carpet_red", - "U": "t_carpet_red", - "V": "t_carpet_red", + "S": "t_carpet_concrete_red", + "T": "t_carpet_concrete_red", + "U": "t_carpet_concrete_red", + "V": "t_carpet_concrete_red", "W": "t_linoleum_gray", "X": "t_wall", "Y": "t_linoleum_gray", - "Z": "t_carpet_red", + "Z": "t_carpet_concrete_red", "[": "t_chaingate_c", "_": "t_thconc_floor", - "d": "t_carpet_red", + "d": "t_carpet_concrete_red", "j": "t_linoleum_gray", "o": "t_door_frame", "x": "t_wall_glass", From ff1ff7ea9f4e347f4c3061f8d7ea0c9adf80ac26 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Fri, 26 Jun 2020 11:19:17 +0300 Subject: [PATCH 116/206] Fix loading of legacy characters without bodies Fallback to human anatomy when there is no anatomy defined in savefile. --- src/savegame_json.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index b0c6889357674..508546774ca79 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -625,7 +625,9 @@ void Character::load( const JsonObject &data ) } // TEMPORARY until 0.F - if( data.has_object( "hp_cur" ) ) { + if( data.has_array( "hp_cur" ) ) { + set_anatomy( anatomy_id( "human_anatomy" ) ); + set_body(); std::array hp_cur; data.read( "hp_cur", hp_cur ); std::array hp_max; From d6deeb5f3b68345e07ea3b44692ef88c2f8c62e2 Mon Sep 17 00:00:00 2001 From: "U-N\\N" Date: Fri, 26 Jun 2020 23:01:14 +0200 Subject: [PATCH 117/206] use base_volume instead of volume --- src/iuse_actor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index 31226576497d7..73069a4020575 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -2595,8 +2595,8 @@ bool repair_item_actor::handle_components( player &pl, const item &fix, // Round up if checking, but roll if actually consuming // TODO: should 250_ml be part of the cost_scaling? const int items_needed = std::max( 1, just_check ? - std::ceil( fix.volume() / 250_ml * cost_scaling ) : - roll_remainder( fix.volume() / 250_ml * cost_scaling ) ); + std::ceil( fix.base_volume() / 250_ml * cost_scaling ) : + roll_remainder( fix.base_volume() / 250_ml * cost_scaling ) ); std::function filter; if( fix.is_filthy() ) { From 2b4fb8f824594ebf0716cfe0203e1376d048b5d5 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Fri, 26 Jun 2020 17:33:52 -0400 Subject: [PATCH 118/206] Add mass of zombie spiders (#41027) --- data/json/monstergroups/wilderness.json | 8 +++++ data/json/monsters/zed-animal.json | 46 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/data/json/monstergroups/wilderness.json b/data/json/monstergroups/wilderness.json index 3941cc89289c4..11f4dcfd889a1 100644 --- a/data/json/monstergroups/wilderness.json +++ b/data/json/monstergroups/wilderness.json @@ -1620,6 +1620,10 @@ "starts": 792, "conditions": [ "DUSK", "NIGHT", "DAWN", "SPRING", "SUMMER", "AUTUMN" ] }, + { "monster": "mon_zpider_mass", "freq": 1, "cost_multiplier": 10, "starts": 72 }, + { "monster": "mon_zpider_mass", "freq": 1, "cost_multiplier": 10, "starts": 168 }, + { "monster": "mon_zpider_mass", "freq": 1, "cost_multiplier": 10, "starts": 672 }, + { "monster": "mon_zpider_mass", "freq": 1, "cost_multiplier": 10, "starts": 2160 }, { "monster": "mon_wasp", "freq": 3, @@ -3155,6 +3159,10 @@ "starts": 792, "conditions": [ "DUSK", "NIGHT", "DAWN", "SPRING", "SUMMER", "AUTUMN" ] }, + { "monster": "mon_zpider_mass", "freq": 3, "cost_multiplier": 2, "starts": 72 }, + { "monster": "mon_zpider_mass", "freq": 3, "cost_multiplier": 2, "starts": 168 }, + { "monster": "mon_zpider_mass", "freq": 3, "cost_multiplier": 2, "starts": 672 }, + { "monster": "mon_zpider_mass", "freq": 3, "cost_multiplier": 2, "starts": 2160 }, { "monster": "mon_wasp", "freq": 1, "cost_multiplier": 0, "conditions": [ "SPRING", "SUMMER", "AUTUMN" ] }, { "monster": "mon_wasp", diff --git a/data/json/monsters/zed-animal.json b/data/json/monsters/zed-animal.json index 879c4139480b5..d8d8510b57d81 100644 --- a/data/json/monsters/zed-animal.json +++ b/data/json/monsters/zed-animal.json @@ -379,5 +379,51 @@ "REVIVES", "FILTHY" ] + }, + { + "id": "mon_zpider_mass", + "type": "MONSTER", + "name": { "str": "mass of zombie spiders" }, + "description": "Thousands, maybe millions of spiders piling up high, each slowly oozing sticky green pus, struggling to keep the fetid mass together and moving.", + "default_faction": "zombie", + "bodytype": "blob", + "categories": [ "CLASSIC" ], + "species": [ "ZOMBIE", "SPIDER" ], + "volume": "18 L", + "weight": "23 kg", + "hp": 40, + "speed": 70, + "material": [ "iflesh" ], + "symbol": "s", + "color": "light_green", + "aggression": 100, + "morale": 100, + "melee_skill": 4, + "melee_dice": 2, + "melee_dice_sides": 3, + "melee_cut": 2, + "dodge": 1, + "armor_cut": 3, + "armor_stab": 3, + "armor_bullet": 2, + "vision_day": 5, + "vision_night": 5, + "harvest": "arachnid_tainted", + "death_function": [ "NORMAL" ], + "flags": [ + "SEES", + "HEARS", + "SMELLS", + "STUMBLES", + "WARM", + "NOHEAD", + "VENOM", + "CLIMBS", + "WEBWALK", + "POISON", + "NO_BREATHE", + "REVIVES", + "FILTHY" + ] } ] From 8730abdbb44d3b16a63e5adab78ba08763cfea77 Mon Sep 17 00:00:00 2001 From: nexusmrsep <39925111+nexusmrsep@users.noreply.github.com> Date: Fri, 26 Jun 2020 23:48:46 +0200 Subject: [PATCH 119/206] New achievements etc. (#41438) --- data/json/achievements.json | 105 +++++++++++++++++++ data/json/conducts.json | 61 +++++++++++ data/json/scores.json | 65 ++++++++++++ data/json/statistics.json | 199 ++++++++++++++++++++++++++++++++++++ src/activity_handlers.cpp | 1 + src/avatar.cpp | 4 +- src/event.cpp | 6 +- src/event.h | 20 +++- src/memorial_logger.cpp | 13 +++ src/suffer.cpp | 1 + tests/memorial_test.cpp | 7 ++ 11 files changed, 479 insertions(+), 3 deletions(-) diff --git a/data/json/achievements.json b/data/json/achievements.json index e1b584009534c..551a136df06a3 100644 --- a/data/json/achievements.json +++ b/data/json/achievements.json @@ -181,5 +181,110 @@ "description": "Return to the location you started the game" } ] + }, + { + "id": "achievement_cut_1_tree", + "type": "achievement", + "name": "Timber", + "description": "If a tree falls in a forest and no one is around to hear it, does it make a sound?", + "requirements": [ { "event_statistic": "num_cuts_tree", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_cut_1_tree" ] + }, + { + "id": "achievement_cut_100_trees", + "type": "achievement", + "name": "Lumberjack", + "description": "What is a forest for a man with an axe?", + "requirements": [ { "event_statistic": "num_cuts_tree", "is": ">=", "target": 100 } ], + "hidden_by": [ "achievement_cut_1_tree" ] + }, + { + "id": "achievement_cut_1000_trees", + "type": "achievement", + "name": "Deforestation", + "description": "If you cut down the trees you will find the wolf.", + "requirements": [ { "event_statistic": "num_cuts_tree", "is": ">=", "target": 1000 } ], + "hidden_by": [ "achievement_cut_100_trees" ] + }, + { + "id": "achievement_exhume_1_grave", + "type": "achievement", + "name": "Grave Digger", + "description": "That's exactly what we need: more dead bodies.", + "requirements": [ { "event_statistic": "num_exhumed_graves", "is": ">=", "target": 1, "visible": "when_achievement_completed" } ], + "hidden_by": [ "achievement_exhume_1_grave" ] + }, + { + "id": "achievement_exhume_10_graves", + "type": "achievement", + "name": "Grave Robber", + "description": "Hey, what if they turned down there? You've gotta check.", + "requirements": [ { "event_statistic": "num_exhumed_graves", "is": ">=", "target": 10 } ], + "hidden_by": [ "achievement_exhume_1_grave" ] + }, + { + "id": "achievement_bury_1_corpse", + "type": "achievement", + "name": "Funeral", + "description": "It's a privilege to be buried when billions will not be.", + "requirements": [ { "event_statistic": "num_buried_corpses", "is": ">=", "target": 1, "visible": "when_achievement_completed" } ], + "hidden_by": [ "achievement_bury_1_corpse" ] + }, + { + "id": "achievement_bury_10_corpses", + "type": "achievement", + "name": "Undertaker", + "description": "Leave no one to rot among the living dead.", + "requirements": [ { "event_statistic": "num_buried_corpses", "is": ">=", "target": 10 } ], + "hidden_by": [ "achievement_bury_1_corpse" ] + }, + { + "id": "achievement_bury_100_corpses", + "type": "achievement", + "name": "Funeral House", + "description": "You cannot bury the whole world, can you?", + "requirements": [ { "event_statistic": "num_buried_corpses", "is": ">=", "target": 100 } ], + "hidden_by": [ "achievement_bury_10_corpses" ] + }, + { + "id": "achievement_install_1_cbm", + "type": "achievement", + "name": "Cyberpunk", + "description": "Spiritus quidem promptus; caro vero infirma.", + "requirements": [ { "event_statistic": "num_installs_cbm", "is": ">=", "target": 1, "visible": "when_achievement_completed" } ] + }, + { + "id": "achievement_install_10_cbms", + "type": "achievement", + "name": "Clockwork Man", + "description": "By most mechanical and dirty hand. I shall have such revenges on you… both. The things I will do, what they are, yet I know not. But they will be the terrors of the earth.", + "requirements": [ { "event_statistic": "num_installs_cbm", "is": ">=", "target": 10 } ], + "hidden_by": [ "achievement_install_1_cbm" ] + }, + { + "id": "achievement_crosses_mutation_threshold", + "type": "achievement", + "name": "Homo Evolutis", + "description": "World of man has ended. Long live the world of transhumanism.", + "requirements": [ + { + "event_statistic": "num_crosses_mutation_threshold", + "is": ">=", + "target": 1, + "visible": "when_achievement_completed" + } + ] + }, + { + "id": "achievement_break_major_limbs", + "type": "achievement", + "name": "Broken But Not Defeated", + "description": "Does your medical insurance cover that?", + "requirements": [ + { "event_statistic": "num_broken_right_leg", "is": ">=", "target": 1, "visible": "when_requirement_completed" }, + { "event_statistic": "num_broken_left_leg", "is": ">=", "target": 1, "visible": "when_requirement_completed" }, + { "event_statistic": "num_broken_right_arm", "is": ">=", "target": 1, "visible": "when_requirement_completed" }, + { "event_statistic": "num_broken_left_arm", "is": ">=", "target": 1, "visible": "when_requirement_completed" } + ] } ] diff --git a/data/json/conducts.json b/data/json/conducts.json index 3b5eabcfefd2b..73ee21818e1be 100644 --- a/data/json/conducts.json +++ b/data/json/conducts.json @@ -19,5 +19,66 @@ "name": "Merciful", "hidden_by": [ "conduct_zero_kills" ], "requirements": [ { "event_statistic": "num_avatar_character_kills", "is": "<=", "target": 0, "description": "Kill no characters" } ] + }, + { + "id": "conduct_zero_cut_trees", + "type": "conduct", + "name": "The Elven Path", + "requirements": [ { "event_statistic": "num_cuts_tree", "is": "<=", "target": 0, "description": "Cut no trees" } ] + }, + { + "id": "conduct_pure_human", + "type": "conduct", + "name": "Homo Sapiens", + "requirements": [ + { "event_statistic": "num_installs_cbm", "is": "<=", "target": 0, "description": "Install no bionic implants" }, + { + "event_statistic": "num_installs_faulty_cbm", + "is": "<=", + "target": 0, + "description": "Install no faulty bionic implants" + }, + { "event_statistic": "num_gains_mutation", "is": "<=", "target": 0, "description": "No mutations" } + ] + }, + { + "id": "conduct_no_cbm", + "type": "conduct", + "name": "Clean on X-ray", + "requirements": [ + { "event_statistic": "num_installs_cbm", "is": "<=", "target": 0, "description": "Install no bionic implants" }, + { + "event_statistic": "num_installs_faulty_cbm", + "is": "<=", + "target": 0, + "description": "Install no faulty bionic implants" + } + ], + "hidden_by": [ "conduct_pure_human" ] + }, + { + "id": "conduct_no_mutations", + "type": "conduct", + "name": "Pure Blood", + "requirements": [ { "event_statistic": "num_gains_mutation", "is": "<=", "target": 0, "description": "No mutations" } ], + "hidden_by": [ "conduct_pure_human" ] + }, + { + "id": "conduct_no_broken_bones", + "type": "conduct", + "name": "Structural Integrity", + "requirements": [ { "event_statistic": "num_broken_bone", "is": "<=", "target": 0, "description": "Break no bones" } ] + }, + { + "id": "conduct_no_skill_levels_gained", + "type": "conduct", + "name": "Teacher, Leave Them Kids Alone", + "requirements": [ { "event_statistic": "num_gains_skill_level", "is": "<=", "target": 0, "description": "Gain no skill levels" } ] + }, + { + "id": "conduct_no_books_read", + "type": "conduct", + "name": "Self-Imposed Illiteracy", + "requirements": [ { "event_statistic": "num_reads_book", "is": "<=", "target": 0, "description": "Read no books" } ] } ] diff --git a/data/json/scores.json b/data/json/scores.json index e7ea7f4adffca..641d0ed4e60f7 100644 --- a/data/json/scores.json +++ b/data/json/scores.json @@ -63,5 +63,70 @@ "id": "score_max_move_z", "type": "score", "statistic": "max_move_z" + }, + { + "id": "score_cut_trees", + "type": "score", + "statistic": "num_cuts_tree" + }, + { + "id": "score_buried_corpses", + "type": "score", + "statistic": "num_buried_corpses" + }, + { + "id": "score_exhumed_graves", + "type": "score", + "statistic": "num_exhumed_graves" + }, + { + "id": "score_installs_cbm", + "type": "score", + "statistic": "num_installs_cbm" + }, + { + "id": "score_installs_faulty_cbm", + "type": "score", + "statistic": "num_installs_faulty_cbm" + }, + { + "id": "score_gains_mutation", + "type": "score", + "statistic": "num_gains_mutation" + }, + { + "id": "score_crosses_mutation_threshold", + "type": "score", + "statistic": "num_crosses_mutation_threshold" + }, + { + "id": "score_broken_bones", + "type": "score", + "statistic": "num_broken_bone" + }, + { + "id": "score_broken_right_leg", + "type": "score", + "statistic": "num_broken_right_leg" + }, + { + "id": "score_broken_left_leg", + "type": "score", + "statistic": "num_broken_left_leg" + }, + { + "id": "score_broken_right_arm", + "type": "score", + "statistic": "num_broken_right_arm" + }, + { + "id": "score_broken_left_arm", + "type": "score", + "statistic": "num_broken_left_arm" + }, + { + "id": "score_skill_levels_gained", + "type": "score", + "statistic": "num_gains_skill_level" } ] diff --git a/data/json/statistics.json b/data/json/statistics.json index cdfad956e91c1..3ef7f023f5441 100644 --- a/data/json/statistics.json +++ b/data/json/statistics.json @@ -337,5 +337,204 @@ "stat_type": "last_value", "event_transformation": "avatar_enters_oter_type", "field": "oter_type_id" + }, + { + "id": "avatar_cuts_tree", + "type": "event_transformation", + "event_type": "cuts_tree", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character" ] + }, + { + "id": "num_cuts_tree", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_cuts_tree", + "description": { "str": "tree cut down", "str_pl": "trees cut down" } + }, + { + "id": "avatar_exhumes_grave", + "type": "event_transformation", + "event_type": "exhumes_grave", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character" ] + }, + { + "id": "num_exhumed_graves", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_exhumes_grave", + "description": { "str": "grave exhumed", "str_pl": "graves exhumed" } + }, + { + "id": "avatar_buries_corpse", + "type": "event_transformation", + "event_type": "buries_corpse", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character", "corpse_type", "corpse_name" ] + }, + { + "id": "num_buried_corpses", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_buries_corpse", + "description": { "str": "corpse buried", "str_pl": "corpses buried" } + }, + { + "id": "avatar_installs_cbm", + "type": "event_transformation", + "event_type": "installs_cbm", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character", "bionic" ] + }, + { + "id": "avatar_installs_faulty_cbm", + "type": "event_transformation", + "event_type": "installs_faulty_cbm", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character", "bionic" ] + }, + { + "id": "num_installs_cbm", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_installs_cbm", + "description": { "str": "bionic implant installed", "str_pl": "bionic implants installed" } + }, + { + "id": "num_installs_faulty_cbm", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_installs_faulty_cbm", + "description": { "str": "faulty bionic implant installed", "str_pl": "faulty bionic implants installed" } + }, + { + "id": "avatar_gains_mutation", + "type": "event_transformation", + "event_type": "gains_mutation", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character", "trait" ] + }, + { + "id": "num_gains_mutation", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_mutation", + "description": { "str": "mutation gained", "str_pl": "mutations gained" } + }, + { + "id": "avatar_crosses_mutation_threshold", + "type": "event_transformation", + "event_type": "crosses_mutation_threshold", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character", "category" ] + }, + { + "id": "num_crosses_mutation_threshold", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_crosses_mutation_threshold", + "description": { "str": "mutation threshold crossed", "str_pl": "mutation thresholds crossed" } + }, + { + "id": "avatar_broken_bone", + "type": "event_transformation", + "event_type": "broken_bone", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character", "part" ] + }, + { + "id": "num_broken_bone", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_broken_bone", + "description": { "str": "bone broken", "str_pl": "bones broken" } + }, + { + "id": "avatar_broken_right_leg", + "type": "event_transformation", + "event_type": "broken_bone", + "value_constraints": { "part": { "equals": [ "body_part", "bp_leg_r" ] } } + }, + { + "id": "avatar_broken_left_leg", + "type": "event_transformation", + "event_type": "broken_bone", + "value_constraints": { "part": { "equals": [ "body_part", "bp_leg_l" ] } } + }, + { + "id": "avatar_broken_right_arm", + "type": "event_transformation", + "event_type": "broken_bone", + "value_constraints": { "part": { "equals": [ "body_part", "bp_arm_r" ] } } + }, + { + "id": "avatar_broken_left_arm", + "type": "event_transformation", + "event_type": "broken_bone", + "value_constraints": { "part": { "equals": [ "body_part", "bp_arm_l" ] } } + }, + { + "id": "num_broken_bone", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_broken_bone", + "description": { "str": "bone broken", "str_pl": "bones broken" } + }, + { + "id": "num_broken_right_leg", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_broken_right_leg", + "description": { "str_sp": "broken right leg" } + }, + { + "id": "num_broken_left_leg", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_broken_left_leg", + "description": { "str_sp": "broken left leg" } + }, + { + "id": "num_broken_right_arm", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_broken_right_arm", + "description": { "str_sp": "broken right arm" } + }, + { + "id": "num_broken_left_arm", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_broken_left_arm", + "description": { "str_sp": "broken left arm" } + }, + { + "id": "avatar_gains_skill_level", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_skill_level", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_skill_level", + "description": { "str": "skill level gained", "str_pl": "skill levels gained" } + }, + { + "id": "avatar_reads_book", + "type": "event_transformation", + "event_type": "reads_book", + "value_constraints": { "character": { "equals_statistic": "avatar_id" } }, + "drop_fields": [ "character", "itype" ] + }, + { + "id": "num_reads_book", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_reads_book", + "description": { "str_sp": "read a book" } } ] diff --git a/src/activity_handlers.cpp b/src/activity_handlers.cpp index b78ed5e47724e..09886602274db 100644 --- a/src/activity_handlers.cpp +++ b/src/activity_handlers.cpp @@ -3930,6 +3930,7 @@ void activity_handlers::chop_tree_finish( player_activity *act, player *p ) // sound of falling tree sfx::play_variant_sound( "misc", "timber", sfx::get_heard_volume( here.getlocal( act->placement ) ) ); + g->events().send( p->getID() ); act->set_to_null(); resume_for_multi_activities( *p ); } diff --git a/src/avatar.cpp b/src/avatar.cpp index ca499dc994a2b..22ebcce09c737 100644 --- a/src/avatar.cpp +++ b/src/avatar.cpp @@ -428,6 +428,7 @@ bool avatar::read( item &it, const bool continuous ) add_msg( m_info, _( "%s reads aloud…" ), reader->disp_name() ); } assign_activity( act ); + g->events().send( getID(), it.typeId() ); return true; } @@ -439,6 +440,7 @@ bool avatar::read( item &it, const bool continuous ) } else { add_msg( m_info, get_hint() ); } + g->events().send( getID(), it.typeId() ); mod_moves( -100 ); return false; } @@ -671,7 +673,7 @@ bool avatar::read( item &it, const bool continuous ) elem->add_morale( MORALE_BOOK, 0, book_fun_for( it, *elem ) * 15, decay_start + 30_minutes, decay_start, false, it.type ); } - + g->events().send( getID(), it.typeId() ); return true; } diff --git a/src/event.cpp b/src/event.cpp index 77e2b3a2e720a..28af426937a7e 100644 --- a/src/event.cpp +++ b/src/event.cpp @@ -16,6 +16,7 @@ std::string enum_to_string( event_type data ) case event_type::avatar_moves: return "avatar_moves"; case event_type::awakes_dark_wyrms: return "awakes_dark_wyrms"; case event_type::becomes_wanted: return "becomes_wanted"; + case event_type::broken_bone: return "broken_bone"; case event_type::broken_bone_mends: return "broken_bone_mends"; case event_type::buries_corpse: return "buries_corpse"; case event_type::causes_resonance_cascade: return "causes_resonance_cascade"; @@ -36,6 +37,7 @@ std::string enum_to_string( event_type data ) case event_type::crosses_marloss_threshold: return "crosses_marloss_threshold"; case event_type::crosses_mutation_threshold: return "crosses_mutation_threshold"; case event_type::crosses_mycus_threshold: return "crosses_mycus_threshold"; + case event_type::cuts_tree: return "cuts_tree"; case event_type::dermatik_eggs_hatch: return "dermatik_eggs_hatch"; case event_type::dermatik_eggs_injected: return "dermatik_eggs_injected"; case event_type::destroys_triffid_grove: return "destroys_triffid_grove"; @@ -70,6 +72,7 @@ std::string enum_to_string( event_type data ) case event_type::player_fails_conduct: return "player_fails_conduct"; case event_type::player_gets_achievement: return "player_gets_achievement"; case event_type::player_levels_spell: return "player_levels_spell"; + case event_type::reads_book: return "reads_book"; case event_type::releases_subspace_specimens: return "releases_subspace_specimens"; case event_type::removes_cbm: return "removes_cbm"; case event_type::seals_hazardous_material_sarcophagus: return "seals_hazardous_material_sarcophagus"; @@ -104,7 +107,7 @@ DEFINE_EVENT_HELPER_FIELDS( event_spec_empty ) DEFINE_EVENT_HELPER_FIELDS( event_spec_character ) DEFINE_EVENT_HELPER_FIELDS( event_spec_character_item ) -static_assert( static_cast( event_type::num_event_types ) == 72, +static_assert( static_cast( event_type::num_event_types ) == 75, "This static_assert is a reminder to add a definition below when you add a new " "event_type. If your event_spec specialization inherits from another struct for " "its fields definition then you probably don't need a definition here." ); @@ -118,6 +121,7 @@ DEFINE_EVENT_FIELDS( activates_artifact ) DEFINE_EVENT_FIELDS( administers_mutagen ) DEFINE_EVENT_FIELDS( avatar_enters_omt ) DEFINE_EVENT_FIELDS( avatar_moves ) +DEFINE_EVENT_FIELDS( broken_bone ) DEFINE_EVENT_FIELDS( broken_bone_mends ) DEFINE_EVENT_FIELDS( buries_corpse ) DEFINE_EVENT_FIELDS( character_forgets_spell ) diff --git a/src/event.h b/src/event.h index 21054e1e86626..f61ce0a215db2 100644 --- a/src/event.h +++ b/src/event.h @@ -31,6 +31,7 @@ enum class event_type : int { avatar_moves, awakes_dark_wyrms, becomes_wanted, + broken_bone, broken_bone_mends, buries_corpse, causes_resonance_cascade, @@ -51,6 +52,7 @@ enum class event_type : int { crosses_marloss_threshold, crosses_mutation_threshold, crosses_mycus_threshold, + cuts_tree, dermatik_eggs_hatch, dermatik_eggs_injected, destroys_triffid_grove, @@ -85,6 +87,7 @@ enum class event_type : int { player_fails_conduct, player_gets_achievement, player_levels_spell, + reads_book, releases_subspace_specimens, removes_cbm, seals_hazardous_material_sarcophagus, @@ -155,7 +158,7 @@ struct event_spec_character_item { }; }; -static_assert( static_cast( event_type::num_event_types ) == 72, +static_assert( static_cast( event_type::num_event_types ) == 75, "This static_assert is to remind you to add a specialization for your new " "event_type below" ); @@ -210,6 +213,15 @@ struct event_spec : event_spec_empty {}; template<> struct event_spec : event_spec_character {}; +template<> +struct event_spec { + static constexpr std::array, 2> fields = {{ + { "character", cata_variant_type::character_id }, + { "part", cata_variant_type::body_part }, + } + }; +}; + template<> struct event_spec { static constexpr std::array, 2> fields = {{ @@ -349,6 +361,9 @@ struct event_spec { template<> struct event_spec : event_spec_character {}; +template<> +struct event_spec : event_spec_character {}; + template<> struct event_spec : event_spec_character {}; @@ -580,6 +595,9 @@ struct event_spec { }; }; +template<> +struct event_spec : event_spec_character_item {}; + template<> struct event_spec { static constexpr std::array, 2> fields = {{ diff --git a/src/memorial_logger.cpp b/src/memorial_logger.cpp index 9154788e9c6d5..0c87b416bcb7b 100644 --- a/src/memorial_logger.cpp +++ b/src/memorial_logger.cpp @@ -433,6 +433,17 @@ void memorial_logger::notify( const cata::event &e ) } break; } + case event_type::broken_bone: { + character_id ch = e.get( "character" ); + if( ch == g->u.getID() ) { + body_part part = e.get( "part" ); + //~ %s is bodypart + add( pgettext( "memorial_male", "Broke his %s." ), + pgettext( "memorial_female", "Broke her %s." ), + body_part_name( convert_bp( part ).id() ) ); + } + break; + } case event_type::broken_bone_mends: { character_id ch = e.get( "character" ); if( ch == g->u.getID() ) { @@ -1067,6 +1078,8 @@ void memorial_logger::notify( const cata::event &e ) case event_type::character_wakes_up: case event_type::character_wears_item: case event_type::character_wields_item: + case event_type::cuts_tree: + case event_type::reads_book: case event_type::game_load: case event_type::game_save: break; diff --git a/src/suffer.cpp b/src/suffer.cpp index 021679ff4cf51..481490761e772 100644 --- a/src/suffer.cpp +++ b/src/suffer.cpp @@ -1432,6 +1432,7 @@ void Character::suffer() for( const std::pair &elem : get_body() ) { if( elem.second.get_hp_cur() <= 0 ) { add_effect( effect_disabled, 1_turns, elem.first->token, true ); + g->events().send( getID(), elem.first->token ); } } diff --git a/tests/memorial_test.cpp b/tests/memorial_test.cpp index 5f9852e35dd23..105451d3eb82d 100644 --- a/tests/memorial_test.cpp +++ b/tests/memorial_test.cpp @@ -58,6 +58,7 @@ TEST_CASE( "memorials" ) event_bus &b = g->events(); + g->u.male = false; character_id ch = g->u.getID(); std::string u_name = g->u.name; character_id ch2 = character_id( ch.get_value() + 1 ); @@ -87,6 +88,9 @@ TEST_CASE( "memorials" ) check_memorial( m, b, "Became wanted by the police!", ch ); + check_memorial( + m, b, "Broke her right arm.", ch, bp_arm_r ); + check_memorial( m, b, "Broken right arm began to mend.", ch, bp_arm_r ); @@ -192,6 +196,9 @@ TEST_CASE( "memorials" ) m, b, u_name + " began their journey into the Cataclysm.", ch, u_name, g->u.male, g->u.prof->ident(), g->u.custom_profession, "VERSION_STRING" ); + // Invokes achievement, so send another to clear the log for the test + b.send( ch, cbm ); + check_memorial( m, b, "Installed bionic: Alarm System.", ch, cbm ); From a58a5448e6d5170388b989f300637d69346dc6ff Mon Sep 17 00:00:00 2001 From: meladath Date: Fri, 26 Jun 2020 22:55:37 +0100 Subject: [PATCH 120/206] Make most MAGAZINE rigid, also add quite a few magazine_well values (#41476) * Make all all MAGAZINE rigid, also add quite a few (but not all) magazine_well values Any magazine_well that wasn't a pistol/a "fully enclosed magazine" I didn't fill in, as I do not know all of the internal measurements. This commit simply makes magazines and most pistols not gain volume when loaded. * Make L-Stick rigid, fix L-stick max_contains_volume and max_contains_weight values 525ml and 1KG is the size of biggest medium batteries. --- data/json/items/gun/12mm.json | 1 + data/json/items/gun/20x66mm.json | 4 +- data/json/items/gun/22.json | 11 +++- data/json/items/gun/270win.json | 2 +- data/json/items/gun/300.json | 4 +- data/json/items/gun/3006.json | 2 +- data/json/items/gun/308.json | 4 +- data/json/items/gun/32.json | 3 + data/json/items/gun/357sig.json | 3 + data/json/items/gun/36paper.json | 2 +- data/json/items/gun/38.json | 12 ++-- data/json/items/gun/380.json | 5 ++ data/json/items/gun/38super.json | 2 + data/json/items/gun/40.json | 13 +++- data/json/items/gun/40x46mm.json | 14 ++--- data/json/items/gun/44.json | 9 +-- data/json/items/gun/44paper.json | 4 +- data/json/items/gun/45.json | 8 ++- data/json/items/gun/4570.json | 6 +- data/json/items/gun/45colt.json | 6 +- data/json/items/gun/460.json | 1 + data/json/items/gun/50.json | 4 +- data/json/items/gun/500.json | 2 +- data/json/items/gun/57.json | 2 + data/json/items/gun/66mm.json | 1 + data/json/items/gun/700nx.json | 2 +- data/json/items/gun/762x25.json | 1 + data/json/items/gun/84x246mm.json | 2 +- data/json/items/gun/9mm.json | 18 +++++- data/json/items/gun/9x18.json | 1 + data/json/items/gun/atgm.json | 2 +- data/json/items/gun/bio.json | 2 +- data/json/items/gun/blunderbuss.json | 2 +- data/json/items/gun/chemical_spray.json | 1 + data/json/items/gun/combination.json | 2 +- data/json/items/gun/flintlock.json | 8 +-- data/json/items/gun/monster_gun.json | 2 +- data/json/items/gun/nail.json | 2 +- data/json/items/gun/paintball.json | 2 +- data/json/items/gun/shot.json | 48 +++++++-------- data/json/items/gun/signal_flare.json | 2 +- data/json/items/magazine/12mm.json | 2 +- data/json/items/magazine/20x60mm.json | 6 +- data/json/items/magazine/22.json | 18 +++--- data/json/items/magazine/223.json | 36 +++++------ data/json/items/magazine/300.json | 2 +- data/json/items/magazine/3006.json | 10 +-- data/json/items/magazine/308.json | 26 ++++---- data/json/items/magazine/32.json | 8 +-- data/json/items/magazine/357sig.json | 4 +- data/json/items/magazine/38.json | 6 +- data/json/items/magazine/380.json | 14 ++--- data/json/items/magazine/38super.json | 4 +- data/json/items/magazine/40.json | 24 ++++---- data/json/items/magazine/40mm.json | 2 +- data/json/items/magazine/410shot.json | 4 +- data/json/items/magazine/44.json | 4 +- data/json/items/magazine/45.json | 20 +++--- data/json/items/magazine/454.json | 4 +- data/json/items/magazine/46.json | 4 +- data/json/items/magazine/460.json | 4 +- data/json/items/magazine/50.json | 8 +-- data/json/items/magazine/500.json | 2 +- data/json/items/magazine/545x39.json | 4 +- data/json/items/magazine/57.json | 4 +- data/json/items/magazine/5x50.json | 4 +- data/json/items/magazine/66mm.json | 2 +- data/json/items/magazine/762.json | 12 ++-- data/json/items/magazine/762R.json | 2 +- data/json/items/magazine/762x25.json | 6 +- data/json/items/magazine/8x40mm.json | 10 +-- data/json/items/magazine/9mm.json | 64 ++++++++++---------- data/json/items/magazine/9x18.json | 4 +- data/json/items/magazine/chemical_spray.json | 2 +- data/json/items/magazine/liquid.json | 8 +-- data/json/items/magazine/shot.json | 14 ++--- data/json/items/magazine/weldgas.json | 4 +- data/json/items/melee/bludgeons.json | 5 +- 78 files changed, 318 insertions(+), 261 deletions(-) diff --git a/data/json/items/gun/12mm.json b/data/json/items/gun/12mm.json index 25caf76f50563..770acf10d4b01 100644 --- a/data/json/items/gun/12mm.json +++ b/data/json/items/gun/12mm.json @@ -34,6 +34,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "250 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "hk_g80mag" ] diff --git a/data/json/items/gun/20x66mm.json b/data/json/items/gun/20x66mm.json index cb67a0ce7b954..06227545f14d0 100644 --- a/data/json/items/gun/20x66mm.json +++ b/data/json/items/gun/20x66mm.json @@ -36,7 +36,7 @@ [ "underbarrel", 1 ] ], "flags": [ "RELOAD_ONE", "WATERPROOF_GUN", "NEVER_JAMS", "PUMP_ACTION" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "20x66mm": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "20x66mm": 5 } } ] }, { "id": "rm20", @@ -73,6 +73,7 @@ "flags": [ "WATERPROOF_GUN", "NEVER_JAMS" ], "pocket_data": [ { + "magazine_well": "500 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -114,6 +115,7 @@ "flags": [ "WATERPROOF_GUN", "NEVER_JAMS" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/22.json b/data/json/items/gun/22.json index 5850e8f86ef93..57f61e61c8a72 100644 --- a/data/json/items/gun/22.json +++ b/data/json/items/gun/22.json @@ -130,7 +130,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 4 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 4 } } ] }, { "id": "rifle_22", @@ -170,7 +170,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 1 } } ] }, { "id": "ruger_1022", @@ -212,6 +212,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -229,7 +230,7 @@ "weight": "420 g", "ammo": [ "22" ], "clip_size": 8, - "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "ammo_restriction": { "22": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "22": 8 } } ] }, { "id": "sig_mosquito", @@ -269,6 +270,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -298,6 +300,7 @@ "min_cycle_recoil": 39, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -328,6 +331,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "27 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -357,6 +361,7 @@ "min_cycle_recoil": 39, "pocket_data": [ { + "magazine_well": "126 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/270win.json b/data/json/items/gun/270win.json index 75ef7ab216db8..ed30c99112066 100644 --- a/data/json/items/gun/270win.json +++ b/data/json/items/gun/270win.json @@ -22,6 +22,6 @@ "clip_size": 4, "barrel_length": "750 ml", "flags": [ "RELOAD_ONE", "NEVER_JAMS" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "270win": 4 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "270win": 4 } } ] } ] diff --git a/data/json/items/gun/300.json b/data/json/items/gun/300.json index ab775480c573b..166900ca6ed38 100644 --- a/data/json/items/gun/300.json +++ b/data/json/items/gun/300.json @@ -53,7 +53,7 @@ "clip_size": 3, "barrel_length": "750 ml", "flags": [ "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "300": 3 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "300": 3 } } ] }, { "id": "win70", @@ -77,6 +77,6 @@ "clip_size": 3, "barrel_length": "750 ml", "flags": [ "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "300": 3 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "300": 3 } } ] } ] diff --git a/data/json/items/gun/3006.json b/data/json/items/gun/3006.json index 10cb19ae73476..5ed0ebb3026d8 100644 --- a/data/json/items/gun/3006.json +++ b/data/json/items/gun/3006.json @@ -209,6 +209,6 @@ "clip_size": 4, "barrel_length": "750 ml", "flags": [ "RELOAD_ONE", "NEVER_JAMS" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "3006": 4 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "3006": 4 } } ] } ] diff --git a/data/json/items/gun/308.json b/data/json/items/gun/308.json index 4a01da007fe25..6f04272046c33 100644 --- a/data/json/items/gun/308.json +++ b/data/json/items/gun/308.json @@ -298,7 +298,7 @@ "clip_size": 3, "barrel_length": "750 ml", "flags": [ "RELOAD_ONE", "NEVER_JAMS" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 3 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 3 } } ] }, { "id": "scar_h", @@ -360,7 +360,7 @@ [ "underbarrel", 1 ] ], "flags": [ "RELOAD_ONE", "NEVER_JAMS" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 5 } } ] }, { "id": "hk417_13", diff --git a/data/json/items/gun/32.json b/data/json/items/gun/32.json index 035a2f33ac6f2..dd15d6d308949 100644 --- a/data/json/items/gun/32.json +++ b/data/json/items/gun/32.json @@ -37,6 +37,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -133,6 +134,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -163,6 +165,7 @@ "min_cycle_recoil": 135, "pocket_data": [ { + "magazine_well": "41 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/357sig.json b/data/json/items/gun/357sig.json index d39e30d1b9212..b28146027caeb 100644 --- a/data/json/items/gun/357sig.json +++ b/data/json/items/gun/357sig.json @@ -21,6 +21,7 @@ "durability": 7, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -42,6 +43,7 @@ "ammo": [ "357sig" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -71,6 +73,7 @@ "durability": 6, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/36paper.json b/data/json/items/gun/36paper.json index c12181f0541e8..355b2f28acda1 100644 --- a/data/json/items/gun/36paper.json +++ b/data/json/items/gun/36paper.json @@ -20,6 +20,6 @@ "blackpowder_tolerance": 96, "clip_size": 6, "proportional": { "reload": 2.0 }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "36paper": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "36paper": 6 } } ] } ] diff --git a/data/json/items/gun/38.json b/data/json/items/gun/38.json index ab8a8f9eae681..7194df6a79bf1 100644 --- a/data/json/items/gun/38.json +++ b/data/json/items/gun/38.json @@ -34,7 +34,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_ONE", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "38": 2 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "38": 2 } } ] }, { "id": "cop_38", @@ -69,7 +69,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "357mag": 4, "38": 4 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "357mag": 4, "38": 4 } } ] }, { "id": "model_10_revolver", @@ -92,7 +92,7 @@ "durability": 8, "blackpowder_tolerance": 56, "clip_size": 6, - "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "ammo_restriction": { "38": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "38": 6 } } ] }, { "id": "rifle_38", @@ -131,7 +131,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "38": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "38": 1 } } ] }, { "id": "ruger_lcr_38", @@ -167,7 +167,7 @@ [ "stock", 1 ], [ "underbarrel", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "ammo_restriction": { "38": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "38": 5 } } ] }, { "id": "sw_619", @@ -202,6 +202,6 @@ [ "stock", 1 ], [ "underbarrel", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "ammo_restriction": { "357mag": 7, "38": 7 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "357mag": 7, "38": 7 } } ] } ] diff --git a/data/json/items/gun/380.json b/data/json/items/gun/380.json index 2c59117880504..26bdddf2ee362 100644 --- a/data/json/items/gun/380.json +++ b/data/json/items/gun/380.json @@ -39,6 +39,7 @@ "min_cycle_recoil": 270, "pocket_data": [ { + "magazine_well": "44 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -68,6 +69,7 @@ "min_cycle_recoil": 270, "pocket_data": [ { + "magazine_well": "60 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -98,6 +100,7 @@ "min_cycle_recoil": 270, "pocket_data": [ { + "magazine_well": "60 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -126,6 +129,7 @@ "durability": 7, "pocket_data": [ { + "magazine_well": "236 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -156,6 +160,7 @@ "min_cycle_recoil": 225, "pocket_data": [ { + "magazine_well": "74 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/38super.json b/data/json/items/gun/38super.json index 40a6c72ca4b52..99c737ea79be5 100644 --- a/data/json/items/gun/38super.json +++ b/data/json/items/gun/38super.json @@ -37,6 +37,7 @@ ], "pocket_data": [ { + "magazine_well": "500 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -67,6 +68,7 @@ "durability": 7, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/40.json b/data/json/items/gun/40.json index 56c7b5fa5bed3..12e93ab4aa522 100644 --- a/data/json/items/gun/40.json +++ b/data/json/items/gun/40.json @@ -21,6 +21,7 @@ "min_cycle_recoil": 450, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -70,6 +71,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "250 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "glock40mag", "glock40bigmag" ] @@ -100,6 +102,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "250 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "px4_40mag" ] @@ -143,7 +146,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 1 } } ] }, { "id": "sig_40", @@ -185,6 +188,7 @@ "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", + "magazine_well": "250 ml", "max_contains_weight": "20 kg", "item_restriction": [ "sig40mag" ] } @@ -275,7 +279,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 6 } } ] }, { "id": "sw_610", @@ -309,7 +313,7 @@ [ "stock", 1 ], [ "underbarrel", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "ammo_restriction": { "10mm": 6, "40": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "10mm": 6, "40": 6 } } ] }, { "id": "hi_power_40", @@ -331,6 +335,7 @@ "durability": 8, "pocket_data": [ { + "magazine_well": "185 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -358,6 +363,7 @@ "durability": 9, "pocket_data": [ { + "magazine_well": "200 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -386,6 +392,7 @@ "durability": 7, "pocket_data": [ { + "magazine_well": "312 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/40x46mm.json b/data/json/items/gun/40x46mm.json index 6c5ce28dd4683..8bd960446ab64 100644 --- a/data/json/items/gun/40x46mm.json +++ b/data/json/items/gun/40x46mm.json @@ -28,7 +28,7 @@ [ "stock mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40x46mm": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40x46mm": 1 } } ] }, { "id": "m320", @@ -50,7 +50,7 @@ "durability": 9, "clip_size": 1, "reload": 150, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40x46mm": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40x46mm": 1 } } ] }, { "id": "m79", @@ -82,7 +82,7 @@ [ "stock mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40x46mm": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40x46mm": 1 } } ] }, { "id": "mgl", @@ -113,7 +113,7 @@ [ "stock mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40x46mm": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40x46mm": 6 } } ] }, { "id": "rm802", @@ -146,7 +146,7 @@ [ "underbarrel", 1 ] ], "flags": [ "RELOAD_ONE", "WATERPROOF_GUN", "NEVER_JAMS" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40x46mm": 4 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40x46mm": 4 } } ] }, { "id": "triple_launcher_simple", @@ -158,7 +158,7 @@ "price_postapoc": 1750, "modes": [ [ "DEFAULT", "single", 1, "NPC_AVOID" ], [ "MULTI", "multi", 3, [ "NPC_AVOID", "SIMULTANEOUS" ] ] ], "proportional": { "weight": 1.5, "volume": 1.8, "price": 2 }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40x46mm": 3 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40x46mm": 3 } } ] }, { "id": "pseudo_m203", @@ -183,6 +183,6 @@ "modes": [ [ "DEFAULT", "semi-auto", 1, "NPC_AVOID" ] ], "clip_size": 6, "flags": [ "MOUNTED_GUN" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40x46mm": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40x46mm": 6 } } ] } ] diff --git a/data/json/items/gun/44.json b/data/json/items/gun/44.json index b030986c2f892..44873ec8b9058 100644 --- a/data/json/items/gun/44.json +++ b/data/json/items/gun/44.json @@ -38,6 +38,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -82,7 +83,7 @@ [ "rail mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "44": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "44": 10 } } ] }, { "id": "rifle_44", @@ -121,7 +122,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "44": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "44": 1 } } ] }, { "id": "ruger_redhawk", @@ -156,7 +157,7 @@ [ "stock", 1 ], [ "underbarrel", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "ammo_restriction": { "44": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "44": 6 } } ] }, { "id": "sw629", @@ -191,6 +192,6 @@ [ "stock", 1 ], [ "underbarrel", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "ammo_restriction": { "44": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "44": 6 } } ] } ] diff --git a/data/json/items/gun/44paper.json b/data/json/items/gun/44paper.json index a723fda4616f3..9a6a5f2fd9845 100644 --- a/data/json/items/gun/44paper.json +++ b/data/json/items/gun/44paper.json @@ -19,7 +19,7 @@ "durability": 7, "blackpowder_tolerance": 96, "clip_size": 6, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "44paper": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "44paper": 6 } } ] }, { "id": "lemat_revolver", @@ -54,6 +54,6 @@ ], "built_in_mods": [ "lemat_revolver_shotgun" ], "extend": { "flags": [ "NO_UNLOAD" ] }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "44paper": 9 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "44paper": 9 } } ] } ] diff --git a/data/json/items/gun/45.json b/data/json/items/gun/45.json index e30135077d1d9..cb3c0764ec544 100644 --- a/data/json/items/gun/45.json +++ b/data/json/items/gun/45.json @@ -122,6 +122,7 @@ "blackpowder_tolerance": 48, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -231,7 +232,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 1 } } ] }, { "id": "smg_45", @@ -305,7 +306,7 @@ "blackpowder_tolerance": 60, "loudness": 25, "clip_size": 5, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 5 } } ] }, { "id": "tommygun", @@ -371,6 +372,7 @@ "built_in_mods": [ "match_trigger" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -412,6 +414,7 @@ "durability": 9, "pocket_data": [ { + "magazine_well": "240 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -441,6 +444,7 @@ "durability": 7, "pocket_data": [ { + "magazine_well": "353 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/4570.json b/data/json/items/gun/4570.json index 761561d13ebbd..b946d8018974d 100644 --- a/data/json/items/gun/4570.json +++ b/data/json/items/gun/4570.json @@ -33,7 +33,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "4570": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "4570": 6 } } ] }, { "id": "bfr", @@ -68,7 +68,7 @@ [ "stock mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "4570": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "4570": 5 } } ] }, { "id": "sharps", @@ -108,6 +108,6 @@ [ "underbarrel mount", 1 ] ], "flags": [ "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "4570": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "4570": 1 } } ] } ] diff --git a/data/json/items/gun/45colt.json b/data/json/items/gun/45colt.json index c31f3ae5c2d06..e41fef281547f 100644 --- a/data/json/items/gun/45colt.json +++ b/data/json/items/gun/45colt.json @@ -34,7 +34,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45colt": 2, "410shot": 2 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45colt": 2, "410shot": 2 } } ] }, { "id": "colt_lightning", @@ -60,7 +60,7 @@ "blackpowder_tolerance": 56, "reload_noise": "chik chik.", "flags": [ "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45colt": 14 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45colt": 14 } } ] }, { "id": "colt_saa", @@ -82,6 +82,6 @@ "durability": 8, "clip_size": 6, "proportional": { "reload": 1.5 }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45colt": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45colt": 6 } } ] } ] diff --git a/data/json/items/gun/460.json b/data/json/items/gun/460.json index 1e95df83773bc..d3954498777c3 100644 --- a/data/json/items/gun/460.json +++ b/data/json/items/gun/460.json @@ -13,6 +13,7 @@ "built_in_mods": [ "barrel_ported" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/50.json b/data/json/items/gun/50.json index 20fb476c66dd4..9b285d99f595e 100644 --- a/data/json/items/gun/50.json +++ b/data/json/items/gun/50.json @@ -109,7 +109,7 @@ "barrel_length": -1 }, "flags": [ "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "ammo_restriction": { "50": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "50": 1 } } ] }, { "id": "as50", @@ -200,6 +200,6 @@ "default_mods": [ "bipod", "rifle_scope", "muzzle_brake" ], "clip_size": 1, "flags": [ "NEVER_JAMS", "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "50": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "50": 1 } } ] } ] diff --git a/data/json/items/gun/500.json b/data/json/items/gun/500.json index 5cfd9aa940961..e47a5954d989d 100644 --- a/data/json/items/gun/500.json +++ b/data/json/items/gun/500.json @@ -34,7 +34,7 @@ [ "rail mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "500": 7 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "500": 7 } } ] }, { "id": "sw_500", diff --git a/data/json/items/gun/57.json b/data/json/items/gun/57.json index 07577623f26a2..5c6bef149af7f 100644 --- a/data/json/items/gun/57.json +++ b/data/json/items/gun/57.json @@ -37,6 +37,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -84,6 +85,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "500 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/66mm.json b/data/json/items/gun/66mm.json index 3d0e7016333e4..ac58f9844ba5d 100644 --- a/data/json/items/gun/66mm.json +++ b/data/json/items/gun/66mm.json @@ -26,6 +26,7 @@ "flags": [ "BACKBLAST", "NEVER_JAMS" ], "pocket_data": [ { + "magazine_well": "500 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/700nx.json b/data/json/items/gun/700nx.json index 9272a5ffa7a13..162df5e7d97ee 100644 --- a/data/json/items/gun/700nx.json +++ b/data/json/items/gun/700nx.json @@ -34,6 +34,6 @@ [ "underbarrel", 1 ] ], "flags": [ "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "700nx": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "700nx": 1 } } ] } ] diff --git a/data/json/items/gun/762x25.json b/data/json/items/gun/762x25.json index 77e278bfc069a..ad54b53cb58dc 100644 --- a/data/json/items/gun/762x25.json +++ b/data/json/items/gun/762x25.json @@ -71,6 +71,7 @@ "min_cycle_recoil": 270, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/84x246mm.json b/data/json/items/gun/84x246mm.json index 399a4607ef012..9c7e5d0ccb169 100644 --- a/data/json/items/gun/84x246mm.json +++ b/data/json/items/gun/84x246mm.json @@ -31,7 +31,7 @@ [ "rail mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "84x246mm": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "84x246mm": 1 } } ] }, { "id": "AT4", diff --git a/data/json/items/gun/9mm.json b/data/json/items/gun/9mm.json index 5a06f074d1d58..c874e1e8b3417 100644 --- a/data/json/items/gun/9mm.json +++ b/data/json/items/gun/9mm.json @@ -21,6 +21,7 @@ "min_cycle_recoil": 450, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -151,6 +152,7 @@ "min_cycle_recoil": 380, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -307,6 +309,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -354,6 +357,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -385,6 +389,7 @@ "min_cycle_recoil": 450, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -415,6 +420,7 @@ "min_cycle_recoil": 450, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -462,7 +468,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 1 } } ] }, { "id": "smg_9mm", @@ -627,6 +633,7 @@ "min_cycle_recoil": 450, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -706,6 +713,7 @@ "//2": "Glock 17s cannot load magazines shorter than the standard 17rd magazine.", "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -742,6 +750,7 @@ "min_cycle_recoil": 450, "pocket_data": [ { + "magazine_well": "65 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -771,6 +780,7 @@ "min_cycle_recoil": 450, "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -799,6 +809,7 @@ "durability": 8, "pocket_data": [ { + "magazine_well": "191 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -827,6 +838,7 @@ "durability": 8, "pocket_data": [ { + "magazine_well": "228 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -854,6 +866,7 @@ "durability": 9, "pocket_data": [ { + "magazine_well": "207 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -882,6 +895,7 @@ "durability": 7, "pocket_data": [ { + "magazine_well": "284 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -910,6 +924,7 @@ "durability": 8, "pocket_data": [ { + "magazine_well": "230 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", @@ -938,6 +953,7 @@ "durability": 8, "pocket_data": [ { + "magazine_well": "176 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/9x18.json b/data/json/items/gun/9x18.json index 96adc8253495d..35c763dc217be 100644 --- a/data/json/items/gun/9x18.json +++ b/data/json/items/gun/9x18.json @@ -35,6 +35,7 @@ ], "pocket_data": [ { + "magazine_well": "250 ml", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/atgm.json b/data/json/items/gun/atgm.json index 33bd8e8484c54..7db3239f25017 100644 --- a/data/json/items/gun/atgm.json +++ b/data/json/items/gun/atgm.json @@ -24,6 +24,6 @@ "loudness": 200, "valid_mod_locations": [ [ "sling", 1 ], [ "rail mount", 1 ], [ "sights mount", 1 ], [ "underbarrel mount", 1 ] ], "flags": [ "MOUNTED_GUN", "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "atgm": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "atgm": 1 } } ] } ] diff --git a/data/json/items/gun/bio.json b/data/json/items/gun/bio.json index df62252c72bfa..fd4409a01e1b5 100644 --- a/data/json/items/gun/bio.json +++ b/data/json/items/gun/bio.json @@ -21,7 +21,7 @@ "clip_size": 1, "reload": 200, "flags": [ "NEVER_JAMS", "RELOAD_EJECT", "NO_UNWIELD", "TRADER_AVOID" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 1 } } ] }, { "id": "bio_emp_gun", diff --git a/data/json/items/gun/blunderbuss.json b/data/json/items/gun/blunderbuss.json index 4bc6d6b11ff06..c46dc7f323712 100644 --- a/data/json/items/gun/blunderbuss.json +++ b/data/json/items/gun/blunderbuss.json @@ -30,6 +30,6 @@ [ "sights mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "blunderbuss": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "blunderbuss": 1 } } ] } ] diff --git a/data/json/items/gun/chemical_spray.json b/data/json/items/gun/chemical_spray.json index 8fa4df29ef16e..cc5a60f747259 100644 --- a/data/json/items/gun/chemical_spray.json +++ b/data/json/items/gun/chemical_spray.json @@ -30,6 +30,7 @@ ], "pocket_data": [ { + "magazine_well": "2 L", "pocket_type": "MAGAZINE_WELL", "holster": true, "max_contains_volume": "20 L", diff --git a/data/json/items/gun/combination.json b/data/json/items/gun/combination.json index 399539152a8ac..8d2cf9b286f88 100644 --- a/data/json/items/gun/combination.json +++ b/data/json/items/gun/combination.json @@ -38,6 +38,6 @@ [ "underbarrel", 1 ], [ "rail mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "3006": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "3006": 1 } } ] } ] diff --git a/data/json/items/gun/flintlock.json b/data/json/items/gun/flintlock.json index 9f6fd1ac3fd77..76e33b4aaf25b 100644 --- a/data/json/items/gun/flintlock.json +++ b/data/json/items/gun/flintlock.json @@ -21,7 +21,7 @@ "longest_side": "1202 mm", "relative": { "range": -2, "ranged_damage": { "damage_type": "bullet", "amount": -4 } }, "proportional": { "bashing": 0.6, "dispersion": 1.35, "reload": 0.6 }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "flintlock": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flintlock": 1 } } ] }, { "id": "carbine_flintlock_double", @@ -34,7 +34,7 @@ "proportional": { "dispersion": 1.3, "weight": 1.25, "volume": 1.25 }, "relative": { "weight": 400, "range": -1, "ranged_damage": { "damage_type": "bullet", "amount": -2 } }, "extend": { "flags": [ "RELOAD_ONE" ] }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "flintlock": 2 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flintlock": 2 } } ] }, { "id": "pistol_flintlock", @@ -71,7 +71,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "NEVER_JAMS" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "flintlock": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flintlock": 1 } } ] }, { "id": "rifle_flintlock", @@ -109,7 +109,7 @@ [ "stock mount", 1 ] ], "flags": [ "NEVER_JAMS", "DURABLE_MELEE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "flintlock": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flintlock": 1 } } ] }, { "id": "longrifle_flintlock", diff --git a/data/json/items/gun/monster_gun.json b/data/json/items/gun/monster_gun.json index cae8386bd919f..8e0b7e9200b59 100644 --- a/data/json/items/gun/monster_gun.json +++ b/data/json/items/gun/monster_gun.json @@ -29,7 +29,7 @@ "range": 12, "dispersion": 100, "durability": 8, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "barb": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "barb": 1 } } ] }, { "id": "emp_frond", diff --git a/data/json/items/gun/nail.json b/data/json/items/gun/nail.json index 78d6131d31fb3..6b0b9c1eaf650 100644 --- a/data/json/items/gun/nail.json +++ b/data/json/items/gun/nail.json @@ -23,6 +23,6 @@ "clip_size": 20, "reload": 50, "valid_mod_locations": [ [ "grip mount", 1 ], [ "rail mount", 1 ], [ "sights mount", 1 ], [ "stock mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "nail": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nail": 20 } } ] } ] diff --git a/data/json/items/gun/paintball.json b/data/json/items/gun/paintball.json index c404bee48c09d..af6a192a89fce 100644 --- a/data/json/items/gun/paintball.json +++ b/data/json/items/gun/paintball.json @@ -32,6 +32,6 @@ [ "stock mount", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "paintball": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "paintball": 50 } } ] } ] diff --git a/data/json/items/gun/shot.json b/data/json/items/gun/shot.json index 96c792eea6d41..9d5c1cf07b268 100644 --- a/data/json/items/gun/shot.json +++ b/data/json/items/gun/shot.json @@ -32,7 +32,7 @@ ], "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 1 } } ] }, { "id": "bigun", @@ -99,7 +99,7 @@ ], "clip_size": 6, "extend": { "flags": [ "RELOAD_ONE" ] }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 6 } } ] }, { "id": "browning_a5", @@ -120,7 +120,7 @@ "durability": 6, "clip_size": 5, "extend": { "flags": [ "RELOAD_ONE" ] }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 5 } } ] }, { "id": "ksg", @@ -155,7 +155,7 @@ [ "sling", 1 ], [ "underbarrel", 2 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 7 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 7 } } ] }, { "id": "ksg-25", @@ -189,7 +189,7 @@ [ "sling", 1 ], [ "underbarrel", 2 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 12 } } ] }, { "id": "m1014", @@ -221,7 +221,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "RELOAD_ONE", "NEEDS_UNFOLD" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 8 } } ] }, { "id": "mossberg_500", @@ -242,7 +242,7 @@ "ranged_damage": { "damage_type": "bullet", "amount": 4 }, "durability": 9, "clip_size": 6, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 6 } } ] }, { "id": "mossberg_500_security", @@ -273,7 +273,7 @@ "price": 70000, "barrel_length": "0 ml", "clip_size": 9, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 9 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 9 } } ] }, { "id": "mossberg_930", @@ -307,7 +307,7 @@ [ "underbarrel mount", 1 ] ], "extend": { "flags": [ "RELOAD_ONE" ] }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 8 } } ] }, { "id": "pipe_double_shotgun", @@ -331,7 +331,7 @@ [ "underbarrel mount", 1 ] ], "extend": { "flags": [ "RELOAD_ONE" ] }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 2 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 2 } } ] }, { "id": "pipe_shotgun", @@ -365,7 +365,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 1 } } ] }, { "id": "remington_870", @@ -386,7 +386,7 @@ "durability": 8, "clip_size": 5, "barrel_length": "229 ml", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 5 } } ] }, { "id": "remington_870_breacher", @@ -421,7 +421,7 @@ [ "stock", 1 ], [ "underbarrel mount", 1 ] ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 4 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 4 } } ] }, { "id": "remington_870_express", @@ -437,7 +437,7 @@ "clip_size": 7, "barrel_length": "20 ml", "price": 33800, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 7 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 7 } } ] }, { "id": "remington_1100", @@ -473,7 +473,7 @@ [ "underbarrel mount", 1 ] ], "extend": { "flags": [ "RELOAD_ONE" ] }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 10 } } ] }, { "id": "revolver_shotgun", @@ -505,7 +505,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "RELOAD_ONE", "RELOAD_EJECT", "NEVER_JAMS" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 6 } } ] }, { "id": "saiga_12", @@ -572,7 +572,7 @@ [ "underbarrel mount", 1 ] ], "extend": { "flags": [ "RELOAD_ONE" ] }, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 2 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 2 } } ] }, { "id": "shotgun_s", @@ -606,7 +606,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 1 } } ] }, { "id": "streetsweeper", @@ -644,7 +644,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "RELOAD_ONE", "RELOAD_EJECT", "NEVER_JAMS" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 12 } } ] }, { "id": "SPAS_12", @@ -679,7 +679,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 9 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 9 } } ] }, { "id": "tavor_12", @@ -714,7 +714,7 @@ [ "sling", 1 ] ], "flags": [ "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 5 } } ] }, { "id": "USAS_12", @@ -789,7 +789,7 @@ [ "underbarrel mount", 1 ] ], "flags": [ "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 6 } } ] }, { "id": "winchester_1897", @@ -824,7 +824,7 @@ ], "default_mods": [ "sword_bayonet" ], "flags": [ "RELOAD_ONE" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 6 } } ] }, { "id": "slam_shotgun", @@ -847,6 +847,6 @@ "modes": [ [ "DEFAULT", "single", 1 ] ], "valid_mod_locations": [ [ "sling", 1 ], [ "sights mount", 1 ], [ "underbarrel mount", 1 ] ], "flags": [ "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 1 } } ] } ] diff --git a/data/json/items/gun/signal_flare.json b/data/json/items/gun/signal_flare.json index 334233c7e20ad..cd5eb2ce45ea4 100644 --- a/data/json/items/gun/signal_flare.json +++ b/data/json/items/gun/signal_flare.json @@ -28,6 +28,6 @@ [ "underbarrel mount", 1 ] ], "flags": [ "WATERPROOF_GUN", "NEVER_JAMS", "RELOAD_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "signal_flare": 1 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "signal_flare": 1 } } ] } ] diff --git a/data/json/items/magazine/12mm.json b/data/json/items/magazine/12mm.json index 274a6943ea229..a6c21981df87f 100644 --- a/data/json/items/magazine/12mm.json +++ b/data/json/items/magazine/12mm.json @@ -15,6 +15,6 @@ "ammo_type": [ "12mm" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "12mm": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "12mm": 20 } } ] } ] diff --git a/data/json/items/magazine/20x60mm.json b/data/json/items/magazine/20x60mm.json index 278f160e58882..8193d5011f0af 100644 --- a/data/json/items/magazine/20x60mm.json +++ b/data/json/items/magazine/20x60mm.json @@ -16,7 +16,7 @@ "capacity": 10, "reload_time": 60, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "20x66mm": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "20x66mm": 10 } } ] }, { "id": "20x66_20_mag", @@ -35,7 +35,7 @@ "capacity": 20, "reload_time": 60, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "20x66mm": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "20x66mm": 20 } } ] }, { "id": "20x66_40_mag", @@ -54,6 +54,6 @@ "capacity": 40, "reload_time": 70, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "20x66mm": 40 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "20x66mm": 40 } } ] } ] diff --git a/data/json/items/magazine/22.json b/data/json/items/magazine/22.json index 5463874a124b3..d301316fa134f 100644 --- a/data/json/items/magazine/22.json +++ b/data/json/items/magazine/22.json @@ -15,7 +15,7 @@ "ammo_type": [ "22" ], "capacity": 8, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 8 } } ] }, { "id": "a180mag", @@ -34,7 +34,7 @@ "capacity": 165, "reload_time": 150, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 165 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 165 } } ] }, { "id": "marlin_tubeloader", @@ -52,7 +52,7 @@ "ammo_type": [ "22" ], "capacity": 19, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 19 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 19 } } ] }, { "id": "mosquitomag", @@ -70,7 +70,7 @@ "ammo_type": [ "22" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 10 } } ] }, { "id": "ruger1022bigmag", @@ -88,7 +88,7 @@ "ammo_type": [ "22" ], "capacity": 25, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 25 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 25 } } ] }, { "id": "ruger1022mag", @@ -107,7 +107,7 @@ "capacity": 10, "reload_time": 160, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 10 } } ] }, { "id": "sw22mag", @@ -125,7 +125,7 @@ "ammo_type": [ "22" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 10 } } ] }, { "id": "j22mag", @@ -143,7 +143,7 @@ "ammo_type": [ "22" ], "capacity": 6, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 6 } } ] }, { "id": "wp22mag", @@ -161,6 +161,6 @@ "ammo_type": [ "22" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "22": 10 } } ] } ] diff --git a/data/json/items/magazine/223.json b/data/json/items/magazine/223.json index 36e92b83da9ac..22c0a891b1d01 100644 --- a/data/json/items/magazine/223.json +++ b/data/json/items/magazine/223.json @@ -10,7 +10,7 @@ "count": 100, "default_ammo": "556", "linkage": "ammolink223", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 500 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 500 } } ] }, { "id": "famasmag", @@ -28,7 +28,7 @@ "ammo_type": [ "223" ], "capacity": 25, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 25 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 25 } } ] }, { "id": "ruger5", @@ -46,7 +46,7 @@ "ammo_type": [ "223" ], "capacity": 5, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 5 } } ] }, { "looks_like": "stanag30", @@ -64,7 +64,7 @@ "ammo_type": [ "223", "300blk" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 10, "300blk": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 10, "300blk": 10 } } ] }, { "id": "ruger10", @@ -100,7 +100,7 @@ "ammo_type": [ "223" ], "capacity": 30, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 30 } } ] }, { "id": "ruger90", @@ -135,7 +135,7 @@ "ammo_type": [ "223", "300blk" ], "capacity": 5, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 5, "300blk": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 5, "300blk": 5 } } ] }, { "id": "stanag20", @@ -152,7 +152,7 @@ "ammo_type": [ "223", "300blk" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 20, "300blk": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 20, "300blk": 20 } } ] }, { "id": "stanag30", @@ -170,7 +170,7 @@ "ammo_type": [ "223", "300blk" ], "capacity": 30, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 30, "300blk": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 30, "300blk": 30 } } ] }, { "id": "stanag40", @@ -187,7 +187,7 @@ "ammo_type": [ "223", "300blk" ], "capacity": 40, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 40, "300blk": 40 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 40, "300blk": 40 } } ] }, { "id": "stanag50", @@ -208,7 +208,7 @@ "capacity": 50, "reload_time": 200, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 50, "300blk": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 50, "300blk": 50 } } ] }, { "id": "stanag60", @@ -225,7 +225,7 @@ "ammo_type": [ "223", "300blk" ], "capacity": 60, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 60, "300blk": 60 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 60, "300blk": 60 } } ] }, { "id": "stanag60drum", @@ -245,7 +245,7 @@ "capacity": 60, "reload_time": 200, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 60, "300blk": 60 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 60, "300blk": 60 } } ] }, { "id": "stanag90", @@ -265,7 +265,7 @@ "capacity": 90, "reload_time": 200, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 90, "300blk": 90 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 90, "300blk": 90 } } ] }, { "id": "stanag100", @@ -282,7 +282,7 @@ "ammo_type": [ "223", "300blk" ], "capacity": 100, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 100, "300blk": 100 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 100, "300blk": 100 } } ] }, { "id": "stanag100drum", @@ -300,7 +300,7 @@ "capacity": 100, "reload_time": 200, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 100, "300blk": 100 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 100, "300blk": 100 } } ] }, { "id": "stanag150", @@ -318,7 +318,7 @@ "capacity": 150, "reload_time": 200, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 150, "300blk": 150 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 150, "300blk": 150 } } ] }, { "id": "g36mag_30rd", @@ -373,7 +373,7 @@ "ammo_type": [ "223" ], "capacity": 42, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 42 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 42 } } ] }, { "id": "augmag_100rd", @@ -402,7 +402,7 @@ "capacity": 5, "reload_time": 150, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "223": 5, "300blk": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "223": 5, "300blk": 5 } } ] }, { "id": "ruger_makeshiftmag", diff --git a/data/json/items/magazine/300.json b/data/json/items/magazine/300.json index 9bf224a16104c..d4b85c301b474 100644 --- a/data/json/items/magazine/300.json +++ b/data/json/items/magazine/300.json @@ -15,6 +15,6 @@ "ammo_type": [ "300" ], "capacity": 5, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "300": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "300": 5 } } ] } ] diff --git a/data/json/items/magazine/3006.json b/data/json/items/magazine/3006.json index 9b0e818ef9601..a6e41bad189a5 100644 --- a/data/json/items/magazine/3006.json +++ b/data/json/items/magazine/3006.json @@ -16,7 +16,7 @@ "ammo_type": [ "3006" ], "capacity": 5, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "3006": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "3006": 5 } } ] }, { "id": "blrmag", @@ -34,7 +34,7 @@ "ammo_type": [ "3006" ], "capacity": 4, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "3006": 4 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "3006": 4 } } ] }, { "id": "garandclip", @@ -53,7 +53,7 @@ "capacity": 8, "reload_time": 150, "flags": [ "MAG_COMPACT", "MAG_EJECT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "3006": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "3006": 8 } } ] }, { "id": "m1918bigmag", @@ -72,7 +72,7 @@ "capacity": 30, "reload_time": 120, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "3006": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "3006": 30 } } ] }, { "id": "m1918mag", @@ -91,6 +91,6 @@ "ammo_type": [ "3006" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "3006": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "3006": 20 } } ] } ] diff --git a/data/json/items/magazine/308.json b/data/json/items/magazine/308.json index c49e2446238b4..3367e10bfafcd 100644 --- a/data/json/items/magazine/308.json +++ b/data/json/items/magazine/308.json @@ -9,7 +9,7 @@ "count": 100, "default_ammo": "762_51", "linkage": "ammolink308", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 500 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 500 } } ] }, { "id": "falbigmag", @@ -27,7 +27,7 @@ "ammo_type": [ "308" ], "capacity": 30, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 30 } } ] }, { "id": "falmag", @@ -45,7 +45,7 @@ "ammo_type": [ "308" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 20 } } ] }, { "id": "fal_makeshiftmag", @@ -64,7 +64,7 @@ "capacity": 5, "reload_time": 150, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 5 } } ] }, { "id": "g3bigmag", @@ -83,7 +83,7 @@ "capacity": 50, "reload_time": 160, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 50 } } ] }, { "id": "g3mag", @@ -101,7 +101,7 @@ "ammo_type": [ "308" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 20 } } ] }, { "id": "g3_makeshiftmag", @@ -126,7 +126,7 @@ "ammo_type": [ "308" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 20 } } ] }, { "id": "m14smallmag", @@ -145,7 +145,7 @@ "capacity": 5, "reload_time": 50, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 5 } } ] }, { "id": "m14_makeshiftmag", @@ -172,7 +172,7 @@ "capacity": 50, "reload_time": 160, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 50 } } ] }, { "id": "scarhmag_30rd", @@ -198,7 +198,7 @@ "ammo_type": [ "308" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 20 } } ] }, { "id": "scarh_makeshiftmag", @@ -224,7 +224,7 @@ "ammo_type": [ "308" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 20 } } ] }, { "id": "hk417mag_10rd", @@ -242,7 +242,7 @@ "ammo_type": [ "308" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 10 } } ] }, { "id": "hk417_makeshiftmag", @@ -268,7 +268,7 @@ "ammo_type": [ "308" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "308": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "308": 20 } } ] }, { "id": "ar10_makeshiftmag", diff --git a/data/json/items/magazine/32.json b/data/json/items/magazine/32.json index 089f5d07296d3..5ce5f64bbcfc3 100644 --- a/data/json/items/magazine/32.json +++ b/data/json/items/magazine/32.json @@ -15,7 +15,7 @@ "ammo_type": [ "32" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "32": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "32": 8 } } ] }, { "id": "sigp230mag", @@ -33,7 +33,7 @@ "ammo_type": [ "32" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "32": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "32": 8 } } ] }, { "id": "skorpion61mag", @@ -51,7 +51,7 @@ "ammo_type": [ "32" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "32": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "32": 20 } } ] }, { "id": "kp32mag", @@ -69,6 +69,6 @@ "ammo_type": [ "32" ], "capacity": 7, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "32": 7 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "32": 7 } } ] } ] diff --git a/data/json/items/magazine/357sig.json b/data/json/items/magazine/357sig.json index f5ab91bfe52f2..ca08c6818ebe8 100644 --- a/data/json/items/magazine/357sig.json +++ b/data/json/items/magazine/357sig.json @@ -15,7 +15,7 @@ "ammo_type": [ "357sig" ], "capacity": 12, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "357sig": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "357sig": 12 } } ] }, { "id": "p320mag_13rd_357sig", @@ -34,6 +34,6 @@ "capacity": 13, "reload_time": 140, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "357sig": 13 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "357sig": 13 } } ] } ] diff --git a/data/json/items/magazine/38.json b/data/json/items/magazine/38.json index f96d07f28dd74..6d33482ba2e2e 100644 --- a/data/json/items/magazine/38.json +++ b/data/json/items/magazine/38.json @@ -15,7 +15,7 @@ "ammo_type": [ "357mag", "38" ], "capacity": 7, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "357mag": 7, "38": 7 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "357mag": 7, "38": 7 } } ] }, { "id": "38_speedloader5", @@ -33,7 +33,7 @@ "ammo_type": [ "357mag", "38" ], "capacity": 5, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "357mag": 5, "38": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "357mag": 5, "38": 5 } } ] }, { "id": "38_speedloader6", @@ -51,6 +51,6 @@ "ammo_type": [ "357mag", "38" ], "capacity": 6, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "357mag": 6, "38": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "357mag": 6, "38": 6 } } ] } ] diff --git a/data/json/items/magazine/380.json b/data/json/items/magazine/380.json index 029b0fc8c8e94..da5f135b89b09 100644 --- a/data/json/items/magazine/380.json +++ b/data/json/items/magazine/380.json @@ -15,7 +15,7 @@ "ammo_type": [ "380" ], "capacity": 6, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "380": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "380": 6 } } ] }, { "id": "fn1910mag", @@ -33,7 +33,7 @@ "ammo_type": [ "380" ], "capacity": 6, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "380": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "380": 6 } } ] }, { "id": "rugerlcpmag", @@ -51,7 +51,7 @@ "ammo_type": [ "380" ], "capacity": 6, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "380": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "380": 6 } } ] }, { "id": "mac11mag", @@ -69,7 +69,7 @@ "ammo_type": [ "380" ], "capacity": 32, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "380": 32 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "380": 32 } } ] }, { "id": "hptcf380mag_8rd", @@ -87,7 +87,7 @@ "ammo_type": [ "380" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "380": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "380": 8 } } ] }, { "id": "hptcf380mag_10rd", @@ -105,7 +105,7 @@ "ammo_type": [ "380" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "380": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "380": 10 } } ] }, { "id": "taurus_spectrum_mag", @@ -123,6 +123,6 @@ "ammo_type": [ "380" ], "capacity": 6, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "380": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "380": 6 } } ] } ] diff --git a/data/json/items/magazine/38super.json b/data/json/items/magazine/38super.json index 19d2e913b7486..cad819d79d449 100644 --- a/data/json/items/magazine/38super.json +++ b/data/json/items/magazine/38super.json @@ -15,7 +15,7 @@ "ammo_type": [ "38super" ], "capacity": 16, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "38super": 16 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "38super": 16 } } ] }, { "id": "m1911mag_10rd_38super", @@ -33,6 +33,6 @@ "ammo_type": [ "38super" ], "capacity": 9, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "38super": 9 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "38super": 9 } } ] } ] diff --git a/data/json/items/magazine/40.json b/data/json/items/magazine/40.json index b0265d540ad9b..7b0f9fdea649e 100644 --- a/data/json/items/magazine/40.json +++ b/data/json/items/magazine/40.json @@ -15,7 +15,7 @@ "ammo_type": [ "40", "10mm" ], "capacity": 6, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 6, "10mm": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 6, "10mm": 6 } } ] }, { "id": "90two40mag", @@ -34,7 +34,7 @@ "capacity": 12, "reload_time": 140, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 12, "357sig": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 12, "357sig": 12 } } ] }, { "id": "glock40bigmag", @@ -53,7 +53,7 @@ "capacity": 22, "reload_time": 140, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 22, "357sig": 22 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 22, "357sig": 22 } } ] }, { "id": "glock40mag", @@ -71,7 +71,7 @@ "ammo_type": [ "40", "357sig" ], "capacity": 15, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 15, "357sig": 15 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 15, "357sig": 15 } } ] }, { "id": "px4_40mag", @@ -90,7 +90,7 @@ "capacity": 14, "reload_time": 140, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 14, "357sig": 14 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 14, "357sig": 14 } } ] }, { "id": "sig40mag", @@ -108,7 +108,7 @@ "ammo_type": [ "40" ], "capacity": 12, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 12 } } ] }, { "id": "smg_40_mag", @@ -127,7 +127,7 @@ "capacity": 20, "reload_time": 160, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 20 } } ] }, { "id": "bhp40mag", @@ -145,7 +145,7 @@ "ammo_type": [ "40" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 10 } } ] }, { "id": "ppq40mag_10rd", @@ -163,7 +163,7 @@ "ammo_type": [ "40" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 10 } } ] }, { "id": "ppq40mag_12rd", @@ -181,7 +181,7 @@ "ammo_type": [ "40" ], "capacity": 12, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 12 } } ] }, { "id": "ppq40mag_14rd", @@ -199,7 +199,7 @@ "ammo_type": [ "40" ], "capacity": 14, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 14 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 14 } } ] }, { "id": "hptjcpmag", @@ -217,6 +217,6 @@ "ammo_type": [ "40" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40": 10 } } ] } ] diff --git a/data/json/items/magazine/40mm.json b/data/json/items/magazine/40mm.json index 22b748150001c..0ae3214233239 100644 --- a/data/json/items/magazine/40mm.json +++ b/data/json/items/magazine/40mm.json @@ -16,6 +16,6 @@ "count": 25, "linkage": "ammolink40mm", "flags": [ "MAG_BELT", "MAG_DESTROY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "40x53mm": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "40x53mm": 50 } } ] } ] diff --git a/data/json/items/magazine/410shot.json b/data/json/items/magazine/410shot.json index 3736cd6cb0e19..35476848025af 100644 --- a/data/json/items/magazine/410shot.json +++ b/data/json/items/magazine/410shot.json @@ -15,7 +15,7 @@ "ammo_type": [ "410shot" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "410shot": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "410shot": 10 } } ] }, { "id": "saiga410mag_30rd", @@ -34,6 +34,6 @@ "capacity": 30, "reload_time": 130, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "410shot": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "410shot": 30 } } ] } ] diff --git a/data/json/items/magazine/44.json b/data/json/items/magazine/44.json index a61f5cc2b5c08..d313e095e94e3 100644 --- a/data/json/items/magazine/44.json +++ b/data/json/items/magazine/44.json @@ -15,7 +15,7 @@ "ammo_type": [ "44" ], "capacity": 6, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "44": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "44": 6 } } ] }, { "id": "deaglemag", @@ -33,6 +33,6 @@ "ammo_type": [ "44" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "44": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "44": 8 } } ] } ] diff --git a/data/json/items/magazine/45.json b/data/json/items/magazine/45.json index 63e309e955599..775763cfd7f93 100644 --- a/data/json/items/magazine/45.json +++ b/data/json/items/magazine/45.json @@ -15,7 +15,7 @@ "ammo_type": [ "45" ], "capacity": 30, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 30 } } ] }, { "id": "smg_45_mag", @@ -34,7 +34,7 @@ "capacity": 20, "reload_time": 160, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 20 } } ] }, { "id": "tdi_mag", @@ -52,7 +52,7 @@ "ammo_type": [ "45" ], "capacity": 30, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 30 } } ] }, { "id": "thompson_bigmag", @@ -71,7 +71,7 @@ "capacity": 30, "reload_time": 120, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 30 } } ] }, { "id": "thompson_drum", @@ -90,7 +90,7 @@ "capacity": 50, "reload_time": 150, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 50 } } ] }, { "id": "thompson_mag", @@ -108,7 +108,7 @@ "ammo_type": [ "45" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 20 } } ] }, { "id": "thompson_makeshiftmag", @@ -134,7 +134,7 @@ "ammo_type": [ "45" ], "capacity": 25, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 25 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 25 } } ] }, { "id": "ump45_makeshiftmag", @@ -160,7 +160,7 @@ "ammo_type": [ "45" ], "capacity": 12, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 12 } } ] }, { "id": "ppq45mag", @@ -178,7 +178,7 @@ "ammo_type": [ "45" ], "capacity": 12, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 12 } } ] }, { "id": "hptjhpmag", @@ -196,6 +196,6 @@ "ammo_type": [ "45" ], "capacity": 9, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 9 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 9 } } ] } ] diff --git a/data/json/items/magazine/454.json b/data/json/items/magazine/454.json index 28fadcd0ac073..56f28b2ab8169 100644 --- a/data/json/items/magazine/454.json +++ b/data/json/items/magazine/454.json @@ -15,7 +15,7 @@ "ammo_type": [ "454", "45colt", "410shot" ], "capacity": 5, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "454": 5, "45colt": 5, "410shot": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "454": 5, "45colt": 5, "410shot": 5 } } ] }, { "id": "454_speedloader6", @@ -24,6 +24,6 @@ "name": { "str": ".454 6-round speedloader" }, "description": "This speedloader can hold 5 rounds of .454, .45 Colt or .410 bore and quickly reload a compatible revolver.", "capacity": 6, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "454": 6, "45colt": 6, "410shot": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "454": 6, "45colt": 6, "410shot": 6 } } ] } ] diff --git a/data/json/items/magazine/46.json b/data/json/items/magazine/46.json index 2fdf2d2710986..9fe50b3f59b8c 100644 --- a/data/json/items/magazine/46.json +++ b/data/json/items/magazine/46.json @@ -15,7 +15,7 @@ "ammo_type": [ "46" ], "capacity": 40, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "46": 40 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "46": 40 } } ] }, { "id": "hk46mag", @@ -33,6 +33,6 @@ "ammo_type": [ "46" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "46": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "46": 20 } } ] } ] diff --git a/data/json/items/magazine/460.json b/data/json/items/magazine/460.json index 18a7158e01782..492e010489167 100644 --- a/data/json/items/magazine/460.json +++ b/data/json/items/magazine/460.json @@ -14,7 +14,7 @@ "ammo_type": [ "45", "460" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 10, "460": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 10, "460": 10 } } ] }, { "id": "m1911mag", @@ -31,6 +31,6 @@ "ammo_type": [ "45", "460" ], "capacity": 7, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "45": 7, "460": 7 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "45": 7, "460": 7 } } ] } ] diff --git a/data/json/items/magazine/50.json b/data/json/items/magazine/50.json index be0ab4509eba4..38e2d57cf7322 100644 --- a/data/json/items/magazine/50.json +++ b/data/json/items/magazine/50.json @@ -9,7 +9,7 @@ "capacity": 100, "count": 100, "linkage": "ammolink50", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "50": 100 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "50": 100 } } ] }, { "id": "m107a1mag", @@ -29,7 +29,7 @@ "capacity": 10, "reload_time": 130, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "50": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "50": 10 } } ] }, { "id": "as50mag", @@ -48,7 +48,7 @@ "capacity": 10, "reload_time": 110, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "50": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "50": 10 } } ] }, { "id": "tac50mag", @@ -67,6 +67,6 @@ "capacity": 5, "reload_time": 200, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "50": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "50": 5 } } ] } ] diff --git a/data/json/items/magazine/500.json b/data/json/items/magazine/500.json index aabf260c73084..9d8c72c435723 100644 --- a/data/json/items/magazine/500.json +++ b/data/json/items/magazine/500.json @@ -15,6 +15,6 @@ "ammo_type": [ "500" ], "capacity": 5, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "500": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "500": 5 } } ] } ] diff --git a/data/json/items/magazine/545x39.json b/data/json/items/magazine/545x39.json index 10b9fef51d1f7..e8c04f54b396f 100644 --- a/data/json/items/magazine/545x39.json +++ b/data/json/items/magazine/545x39.json @@ -15,7 +15,7 @@ "ammo_type": [ "545x39" ], "capacity": 30, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "545x39": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "545x39": 30 } } ] }, { "id": "rpk74mag", @@ -35,6 +35,6 @@ "capacity": 45, "reload_time": 130, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "545x39": 45 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "545x39": 45 } } ] } ] diff --git a/data/json/items/magazine/57.json b/data/json/items/magazine/57.json index a0760393bbfcd..915bd58477776 100644 --- a/data/json/items/magazine/57.json +++ b/data/json/items/magazine/57.json @@ -15,7 +15,7 @@ "ammo_type": [ "57" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "57": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "57": 20 } } ] }, { "id": "fnp90mag", @@ -33,6 +33,6 @@ "ammo_type": [ "57" ], "capacity": 50, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "57": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "57": 50 } } ] } ] diff --git a/data/json/items/magazine/5x50.json b/data/json/items/magazine/5x50.json index 0c99640652135..f0a65ba114e8d 100644 --- a/data/json/items/magazine/5x50.json +++ b/data/json/items/magazine/5x50.json @@ -16,7 +16,7 @@ "capacity": 100, "reload_time": 60, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "5x50": 100 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "5x50": 100 } } ] }, { "id": "5x50_50_mag", @@ -35,6 +35,6 @@ "capacity": 50, "reload_time": 50, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "5x50": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "5x50": 50 } } ] } ] diff --git a/data/json/items/magazine/66mm.json b/data/json/items/magazine/66mm.json index 127430c364e31..511a84f2a2e7e 100644 --- a/data/json/items/magazine/66mm.json +++ b/data/json/items/magazine/66mm.json @@ -14,6 +14,6 @@ "color": "light_gray", "ammo_type": [ "m235" ], "capacity": 4, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "m235": 4 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "m235": 4 } } ] } ] diff --git a/data/json/items/magazine/762.json b/data/json/items/magazine/762.json index d9361bf97f7ef..4b7985c3d5f9e 100644 --- a/data/json/items/magazine/762.json +++ b/data/json/items/magazine/762.json @@ -16,7 +16,7 @@ "ammo_type": [ "762" ], "capacity": 10, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762": 10 } } ] }, { "id": "akmag10", @@ -34,7 +34,7 @@ "ammo_type": [ "762" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762": 10 } } ] }, { "id": "akmag20", @@ -52,7 +52,7 @@ "ammo_type": [ "762" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762": 20 } } ] }, { "id": "akmag30", @@ -70,7 +70,7 @@ "ammo_type": [ "762" ], "capacity": 30, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762": 30 } } ] }, { "id": "akmag40", @@ -88,7 +88,7 @@ "ammo_type": [ "762" ], "capacity": 40, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762": 40 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762": 40 } } ] }, { "id": "akdrum75", @@ -106,6 +106,6 @@ "ammo_type": [ "762" ], "capacity": 75, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762": 75 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762": 75 } } ] } ] diff --git a/data/json/items/magazine/762R.json b/data/json/items/magazine/762R.json index 10db9b1fc292f..754c907147c0e 100644 --- a/data/json/items/magazine/762R.json +++ b/data/json/items/magazine/762R.json @@ -16,6 +16,6 @@ "ammo_type": [ "762R" ], "capacity": 5, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762R": 5 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762R": 5 } } ] } ] diff --git a/data/json/items/magazine/762x25.json b/data/json/items/magazine/762x25.json index 73241061a93e8..1dc4fb2d6c167 100644 --- a/data/json/items/magazine/762x25.json +++ b/data/json/items/magazine/762x25.json @@ -17,7 +17,7 @@ "capacity": 71, "reload_time": 190, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762x25": 71 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762x25": 71 } } ] }, { "id": "ppshmag", @@ -35,7 +35,7 @@ "ammo_type": [ "762x25" ], "capacity": 35, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762x25": 35 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762x25": 35 } } ] }, { "id": "tokarevmag", @@ -53,6 +53,6 @@ "ammo_type": [ "762x25" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "762x25": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "762x25": 8 } } ] } ] diff --git a/data/json/items/magazine/8x40mm.json b/data/json/items/magazine/8x40mm.json index 4aeff63438203..900b0f8feab89 100644 --- a/data/json/items/magazine/8x40mm.json +++ b/data/json/items/magazine/8x40mm.json @@ -16,7 +16,7 @@ "capacity": 100, "reload_time": 50, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "8x40mm": 100 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "8x40mm": 100 } } ] }, { "id": "8x40_10_mag", @@ -35,7 +35,7 @@ "capacity": 10, "reload_time": 40, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "8x40mm": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "8x40mm": 10 } } ] }, { "id": "8x40_250_mag", @@ -53,7 +53,7 @@ "ammo_type": [ "8x40mm" ], "capacity": 250, "reload_time": 60, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "8x40mm": 250 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "8x40mm": 250 } } ] }, { "id": "8x40_25_mag", @@ -72,7 +72,7 @@ "capacity": 25, "reload_time": 50, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "8x40mm": 25 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "8x40mm": 25 } } ] }, { "id": "8x40_500_mag", @@ -89,7 +89,7 @@ "color": "dark_gray", "ammo_type": [ "8x40mm" ], "capacity": 500, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "8x40mm": 500 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "8x40mm": 500 } } ] }, { "id": "8x40_50_mag", diff --git a/data/json/items/magazine/9mm.json b/data/json/items/magazine/9mm.json index a594b16e7a39c..4f91666cc55ac 100644 --- a/data/json/items/magazine/9mm.json +++ b/data/json/items/magazine/9mm.json @@ -16,7 +16,7 @@ "capacity": 50, "reload_time": 160, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 50 } } ] }, { "id": "glockbigmag", @@ -35,7 +35,7 @@ "capacity": 30, "reload_time": 140, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 30 } } ] }, { "id": "glockmag", @@ -53,7 +53,7 @@ "ammo_type": [ "9mm" ], "capacity": 15, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 15 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 15 } } ] }, { "id": "glock17_17", @@ -72,7 +72,7 @@ "capacity": 17, "reload_time": 140, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 17 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 17 } } ] }, { "id": "glock17_22", @@ -90,7 +90,7 @@ "ammo_type": [ "9mm" ], "capacity": 22, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 22 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 22 } } ] }, { "id": "glock_drum_50rd", @@ -108,7 +108,7 @@ "ammo_type": [ "9mm" ], "capacity": 50, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 50 } } ] }, { "id": "glock_drum_100rd", @@ -126,7 +126,7 @@ "ammo_type": [ "9mm" ], "capacity": 100, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 100 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 100 } } ] }, { "id": "m9bigmag", @@ -145,7 +145,7 @@ "capacity": 30, "reload_time": 140, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 30 } } ] }, { "id": "m9mag", @@ -163,7 +163,7 @@ "ammo_type": [ "9mm" ], "capacity": 15, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 15 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 15 } } ] }, { "id": "mp5bigmag", @@ -182,7 +182,7 @@ "capacity": 50, "reload_time": 160, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 50 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 50 } } ] }, { "id": "mp5mag", @@ -197,7 +197,7 @@ "material": [ "steel" ], "symbol": "#", "color": "light_gray", - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 30 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 30 } } ], "ammo_type": [ "9mm" ], "capacity": 30, "flags": [ "MAG_COMPACT" ] @@ -218,7 +218,7 @@ "ammo_type": [ "9mm" ], "capacity": 17, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 17 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 17 } } ] }, { "id": "stenmag", @@ -236,7 +236,7 @@ "ammo_type": [ "9mm" ], "capacity": 32, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 32 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 32 } } ] }, { "id": "survivor9mm_mag", @@ -255,7 +255,7 @@ "capacity": 20, "reload_time": 160, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 20 } } ] }, { "id": "tec9mag", @@ -273,7 +273,7 @@ "ammo_type": [ "9mm" ], "capacity": 32, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 32 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 32 } } ] }, { "id": "usp9mag", @@ -291,7 +291,7 @@ "ammo_type": [ "9mm" ], "capacity": 15, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 15 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 15 } } ] }, { "id": "uzimag", @@ -309,7 +309,7 @@ "ammo_type": [ "9mm" ], "capacity": 32, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 32 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 32 } } ] }, { "id": "kpf9mag", @@ -327,7 +327,7 @@ "ammo_type": [ "9mm" ], "capacity": 7, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 7 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 7 } } ] }, { "id": "p320mag_17rd_9x19mm", @@ -346,7 +346,7 @@ "capacity": 17, "reload_time": 140, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 17 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 17 } } ] }, { "id": "bhp9mag_13rd", @@ -364,7 +364,7 @@ "ammo_type": [ "9mm" ], "capacity": 13, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 13 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 13 } } ] }, { "id": "bhp9mag_15rd", @@ -382,7 +382,7 @@ "ammo_type": [ "9mm" ], "capacity": 15, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 15 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 15 } } ] }, { "id": "p38mag", @@ -400,7 +400,7 @@ "ammo_type": [ "9mm" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 8 } } ] }, { "id": "ppq9mag_10rd", @@ -418,7 +418,7 @@ "ammo_type": [ "9mm" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 10 } } ] }, { "id": "ppq9mag_15rd", @@ -436,7 +436,7 @@ "ammo_type": [ "9mm" ], "capacity": 15, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 15 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 15 } } ] }, { "id": "ppq9mag_17rd", @@ -454,7 +454,7 @@ "ammo_type": [ "9mm" ], "capacity": 17, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 17 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 17 } } ] }, { "id": "hptc9mag_8rd", @@ -472,7 +472,7 @@ "ammo_type": [ "9mm" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 8 } } ] }, { "id": "hptc9mag_10rd", @@ -490,7 +490,7 @@ "ammo_type": [ "9mm" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 10 } } ] }, { "id": "hptc9mag_15rd", @@ -508,7 +508,7 @@ "ammo_type": [ "9mm" ], "capacity": 15, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 15 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 15 } } ] }, { "id": "cz75mag_12rd", @@ -526,7 +526,7 @@ "ammo_type": [ "9mm" ], "capacity": 12, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 12 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 12 } } ] }, { "id": "cz75mag_20rd", @@ -544,7 +544,7 @@ "ammo_type": [ "9mm" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 20 } } ] }, { "id": "cz75mag_26rd", @@ -562,7 +562,7 @@ "ammo_type": [ "9mm" ], "capacity": 26, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 26 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 26 } } ] }, { "id": "ccpmag", @@ -580,6 +580,6 @@ "ammo_type": [ "9mm" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9mm": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9mm": 8 } } ] } ] diff --git a/data/json/items/magazine/9x18.json b/data/json/items/magazine/9x18.json index 332687a029b3a..58f4b1f1043aa 100644 --- a/data/json/items/magazine/9x18.json +++ b/data/json/items/magazine/9x18.json @@ -15,7 +15,7 @@ "ammo_type": [ "9x18" ], "capacity": 8, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9x18": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9x18": 8 } } ] }, { "id": "skorpion82mag", @@ -33,6 +33,6 @@ "ammo_type": [ "9x18" ], "capacity": 20, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "9x18": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "9x18": 20 } } ] } ] diff --git a/data/json/items/magazine/chemical_spray.json b/data/json/items/magazine/chemical_spray.json index 85a366c4edc33..1eac39d02c258 100644 --- a/data/json/items/magazine/chemical_spray.json +++ b/data/json/items/magazine/chemical_spray.json @@ -15,6 +15,6 @@ "ammo_type": [ "chemical_spray" ], "capacity": 800, "reload_time": 3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "chemical_spray": 800 }, "watertight": true } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "chemical_spray": 800 }, "watertight": true } ] } ] diff --git a/data/json/items/magazine/liquid.json b/data/json/items/magazine/liquid.json index 012d400e3b440..2ab44e64ef315 100644 --- a/data/json/items/magazine/liquid.json +++ b/data/json/items/magazine/liquid.json @@ -15,7 +15,7 @@ "ammo_type": [ "flammable" ], "capacity": 3000, "reload_time": 3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "flammable": 3000 }, "watertight": true } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flammable": 3000 }, "watertight": true } ] }, { "id": "aux_pressurized_tank", @@ -34,7 +34,7 @@ "capacity": 500, "reload_time": 3, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "flammable": 500 }, "watertight": true } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flammable": 500 }, "watertight": true } ] }, { "id": "rm4502", @@ -52,7 +52,7 @@ "ammo_type": [ "flammable" ], "capacity": 2000, "reload_time": 3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "flammable": 2000 }, "watertight": true } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flammable": 2000 }, "watertight": true } ] }, { "id": "rm4504", @@ -70,6 +70,6 @@ "ammo_type": [ "flammable" ], "capacity": 4000, "reload_time": 3, - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "flammable": 4000 }, "watertight": true } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flammable": 4000 }, "watertight": true } ] } ] diff --git a/data/json/items/magazine/shot.json b/data/json/items/magazine/shot.json index 492af450e75a1..62ac2206d7718 100644 --- a/data/json/items/magazine/shot.json +++ b/data/json/items/magazine/shot.json @@ -15,7 +15,7 @@ "ammo_type": [ "shot" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 10 } } ] }, { "id": "saiga30mag", @@ -34,7 +34,7 @@ "capacity": 30, "reload_time": 130, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 30 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 30 } } ] }, { "id": "USAS10mag", @@ -52,7 +52,7 @@ "ammo_type": [ "shot" ], "capacity": 10, "flags": [ "MAG_COMPACT" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 10 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 10 } } ] }, { "id": "USAS20mag", @@ -71,7 +71,7 @@ "capacity": 20, "reload_time": 110, "flags": [ "MAG_BULKY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 20 } } ] }, { "id": "shotbelt_20", @@ -90,7 +90,7 @@ "capacity": 20, "armor_data": { "covers": [ "TORSO" ], "coverage": 5, "material_thickness": 1, "encumbrance": 2 }, "flags": [ "MAG_EJECT", "BELTED", "OVERSIZE", "WATER_FRIENDLY" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 20 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 20 } } ] }, { "id": "shot_speedloader6", @@ -108,7 +108,7 @@ "ammo_type": [ "shot" ], "capacity": 6, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 6 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 6 } } ] }, { "id": "shot_speedloader8", @@ -126,6 +126,6 @@ "ammo_type": [ "shot" ], "capacity": 8, "flags": [ "SPEEDLOADER" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "shot": 8 } } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 8 } } ] } ] diff --git a/data/json/items/magazine/weldgas.json b/data/json/items/magazine/weldgas.json index 53392f2a300d9..850c78ffdbdcb 100644 --- a/data/json/items/magazine/weldgas.json +++ b/data/json/items/magazine/weldgas.json @@ -16,7 +16,7 @@ "capacity": 60, "count": 60, "flags": [ "NO_UNLOAD", "NO_RELOAD" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "weldgas": 60 }, "watertight": true } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "weldgas": 60 }, "watertight": true } ] }, { "id": "weldtank", @@ -35,6 +35,6 @@ "capacity": 240, "count": 240, "flags": [ "NO_UNLOAD", "NO_RELOAD" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "weldgas": 240 }, "watertight": true } ] + "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "weldgas": 240 }, "watertight": true } ] } ] diff --git a/data/json/items/melee/bludgeons.json b/data/json/items/melee/bludgeons.json index 33fbe8f06d5c5..af6379b698de3 100644 --- a/data/json/items/melee/bludgeons.json +++ b/data/json/items/melee/bludgeons.json @@ -577,9 +577,10 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, - "max_contains_volume": "20 L", - "max_contains_weight": "20 kg", + "max_contains_volume": "525 ml", + "max_contains_weight": "1 kg", "item_restriction": [ "medium_plus_battery_cell", "medium_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] } ] From 342156bff948a884f5d4d007be7a5ed934845e88 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Fri, 26 Jun 2020 16:58:18 -0500 Subject: [PATCH 121/206] Furniture Charcoal smoker pseudo item (#41521) --- .../furniture_and_terrain/furniture-tools.json | 4 ++-- data/json/items/fake.json | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/data/json/furniture_and_terrain/furniture-tools.json b/data/json/furniture_and_terrain/furniture-tools.json index 8d010dc55b4ba..52208dbed4da3 100644 --- a/data/json/furniture_and_terrain/furniture-tools.json +++ b/data/json/furniture_and_terrain/furniture-tools.json @@ -214,7 +214,7 @@ "move_cost_mod": 2, "required_str": -1, "flags": [ "TRANSPARENT", "SEALED", "ALLOW_FIELD_EFFECT", "CONTAINER", "NOITEM", "EASY_DECONSTRUCT", "MINEABLE" ], - "crafting_pseudo_item": "char_smoker", + "crafting_pseudo_item": "pseudo_char_smoker", "examine_action": "smoker_options", "deconstruct": { "items": [ { "item": "rock", "count": 8 }, { "item": "stick", "count": [ 16, 16 ] } ] }, "bash": { @@ -236,7 +236,7 @@ "move_cost_mod": 2, "required_str": -1, "flags": [ "TRANSPARENT", "SEALED", "ALLOW_FIELD_EFFECT", "CONTAINER", "NOITEM", "EASY_DECONSTRUCT", "MINEABLE" ], - "crafting_pseudo_item": "char_smoker", + "crafting_pseudo_item": "pseudo_char_smoker", "examine_action": "smoker_options", "bash": { "str_min": 18, diff --git a/data/json/items/fake.json b/data/json/items/fake.json index ab5b795f3bc23..68b4ae1427ee9 100644 --- a/data/json/items/fake.json +++ b/data/json/items/fake.json @@ -169,5 +169,19 @@ "range": 100, "dispersion": 1000, "ranged_damage": { "damage_type": "stab", "amount": 30 } + }, + { + "id": "pseudo_char_smoker", + "type": "TOOL", + "name": { "str": "smoking rack" }, + "description": "This is a crafting_pseudo_item if you have it something is wrong.", + "material": [ "steel" ], + "symbol": ";", + "color": "light_gray", + "ammo": [ "charcoal" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "charcoal": 2000 } } ], + "sub": "char_smoker", + "max_charges": 2000, + "flags": [ "ALLOWS_REMOTE_USE", "PSEUDO" ] } ] From 8153d6b233c284046395e973efaca74b601233aa Mon Sep 17 00:00:00 2001 From: Andrey Bienkowski Date: Wed, 24 Jun 2020 10:14:44 +0300 Subject: [PATCH 122/206] Modernize weight: toileteries.json --- data/json/items/tool/toileteries.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/tool/toileteries.json b/data/json/items/tool/toileteries.json index d9f55dcddecce..b341a20fc03cb 100644 --- a/data/json/items/tool/toileteries.json +++ b/data/json/items/tool/toileteries.json @@ -13,7 +13,7 @@ "to_hit": -2, "bashing": 6, "material": [ "steel" ], - "use_action": { "type": "weigh_self", "max_weight": 150000 }, + "use_action": { "type": "weigh_self", "max_weight": "150 kg" }, "flags": [ "ALLOWS_REMOTE_USE" ] }, { From 7ab2e0408c16996bc0e389485482971df79a1819 Mon Sep 17 00:00:00 2001 From: Hirmuolio Date: Sat, 27 Jun 2020 01:07:37 +0300 Subject: [PATCH 123/206] Move handling of item left behind by attack out of process_internal (#41569) --- src/ballistics.cpp | 2 +- src/item.cpp | 16 +++++++++------- src/item.h | 12 ++++++++++-- src/item_contents.cpp | 4 ++-- src/item_contents.h | 2 +- src/item_pocket.cpp | 8 ++++---- src/item_pocket.h | 4 ++-- src/map.cpp | 2 +- src/vehicle_part.cpp | 2 +- tests/rot_test.cpp | 18 +++++++++--------- 10 files changed, 40 insertions(+), 30 deletions(-) diff --git a/src/ballistics.cpp b/src/ballistics.cpp index ea14c5aa3ff26..5a8e7793a6216 100644 --- a/src/ballistics.cpp +++ b/src/ballistics.cpp @@ -122,7 +122,7 @@ static void drop_or_embed_projectile( const dealt_projectile_attack &attack ) } if( effects.count( "ACT_ON_RANGED_HIT" ) ) { // Don't drop if it exploded - do_drop = !dropped_item.process( nullptr, attack.end_point, true ); + do_drop = !dropped_item.activate_thrown( attack.end_point ); } map &here = get_map(); diff --git a/src/item.cpp b/src/item.cpp index 46ea238109597..d4c3be4e1deb0 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -560,6 +560,11 @@ item &item::activate() return *this; } +bool item::activate_thrown( const tripoint &pos ) +{ + return type->invoke( g->u, *this, pos ); +} + units::energy item::set_energy( const units::energy &qty ) { if( !is_battery() ) { @@ -9471,12 +9476,12 @@ bool item::process_blackpowder_fouling( player *carrier ) return false; } -bool item::process( player *carrier, const tripoint &pos, bool activate, float insulation, +bool item::process( player *carrier, const tripoint &pos, float insulation, temperature_flag flag, float spoil_multiplier_parent ) { - contents.process( carrier, pos, activate, type->insulation_factor * insulation, flag, + contents.process( carrier, pos, type->insulation_factor * insulation, flag, spoil_multiplier_parent ); - return process_internal( carrier, pos, activate, insulation, flag, spoil_multiplier_parent ); + return process_internal( carrier, pos, insulation, flag, spoil_multiplier_parent ); } void item::set_last_rot_check( const time_point &pt ) @@ -9484,7 +9489,7 @@ void item::set_last_rot_check( const time_point &pt ) last_rot_check = pt; } -bool item::process_internal( player *carrier, const tripoint &pos, bool activate, +bool item::process_internal( player *carrier, const tripoint &pos, float insulation, const temperature_flag flag, float spoil_modifier ) { if( has_flag( flag_ETHEREAL_ITEM ) ) { @@ -9503,9 +9508,6 @@ bool item::process_internal( player *carrier, const tripoint &pos, bool activate return process_blackpowder_fouling( carrier ); } - if( activate ) { - return type->invoke( carrier != nullptr ? *carrier : g->u, *this, pos ); - } // How this works: it checks what kind of processing has to be done // (e.g. for food, for drying towels, lit cigars), and if that matches, // call the processing function. If that function returns true, the item diff --git a/src/item.h b/src/item.h index 773cd3dfd4424..4d25475c675c9 100644 --- a/src/item.h +++ b/src/item.h @@ -231,6 +231,14 @@ class item : public visitable /** Filter converting instance to active state */ item &activate(); + /** + * Invoke use function on a thrown item that had "ACT_ON_RANGED_HIT" flag. + * The function is called on the spot where the item landed. + * @param pos position + * @return true if the item was destroyed (exploded) + */ + bool activate_thrown( const tripoint &pos ); + /** * Add or remove energy from a battery. * If adding the specified energy quantity would go over the battery's capacity fill @@ -1111,7 +1119,7 @@ class item : public visitable * should than delete the item wherever it was stored. * Returns false if the item is not destroyed. */ - bool process( player *carrier, const tripoint &pos, bool activate, float insulation = 1, + bool process( player *carrier, const tripoint &pos, float insulation = 1, temperature_flag flag = temperature_flag::NORMAL, float spoil_multiplier_parent = 1.0f ); /** @@ -2110,7 +2118,7 @@ class item : public visitable bool use_amount_internal( const itype_id &it, int &quantity, std::list &used, const std::function &filter = return_true ); const use_function *get_use_internal( const std::string &use_name ) const; - bool process_internal( player *carrier, const tripoint &pos, bool activate, float insulation = 1, + bool process_internal( player *carrier, const tripoint &pos, float insulation = 1, temperature_flag flag = temperature_flag::NORMAL, float spoil_modifier = 1.0f ); /** * Calculate the thermal energy and temperature change of the item diff --git a/src/item_contents.cpp b/src/item_contents.cpp index 0bf3f1270c670..04165d4e253bc 100644 --- a/src/item_contents.cpp +++ b/src/item_contents.cpp @@ -1097,13 +1097,13 @@ void item_contents::remove_internal( const std::function &filter } } -void item_contents::process( player *carrier, const tripoint &pos, bool activate, float insulation, +void item_contents::process( player *carrier, const tripoint &pos, float insulation, temperature_flag flag, float spoil_multiplier_parent ) { for( item_pocket &pocket : contents ) { // no reason to check mods, they won't rot if( !pocket.is_type( item_pocket::pocket_type::MOD ) ) { - pocket.process( carrier, pos, activate, insulation, flag, spoil_multiplier_parent ); + pocket.process( carrier, pos, insulation, flag, spoil_multiplier_parent ); } } } diff --git a/src/item_contents.h b/src/item_contents.h index 6e69350f1c42b..cc5f3024fe67b 100644 --- a/src/item_contents.h +++ b/src/item_contents.h @@ -208,7 +208,7 @@ class item_contents * Is part of the recursive call of item::process. see that function for additional comments * NOTE: this destroys the items that get processed */ - void process( player *carrier, const tripoint &pos, bool activate, float insulation = 1, + void process( player *carrier, const tripoint &pos, float insulation = 1, temperature_flag flag = temperature_flag::NORMAL, float spoil_multiplier_parent = 1.0f ); void migrate_item( item &obj, const std::set &migrations ); diff --git a/src/item_pocket.cpp b/src/item_pocket.cpp index 233312432ce32..75578c82052f5 100644 --- a/src/item_pocket.cpp +++ b/src/item_pocket.cpp @@ -629,7 +629,7 @@ bool item_pocket::detonate( const tripoint &pos, std::vector &drops ) return false; } -bool item_pocket::process( const itype &type, player *carrier, const tripoint &pos, bool activate, +bool item_pocket::process( const itype &type, player *carrier, const tripoint &pos, float insulation, const temperature_flag flag ) { bool processed = false; @@ -639,7 +639,7 @@ bool item_pocket::process( const itype &type, player *carrier, const tripoint &p // is not changed, the item is still fresh. it->set_last_rot_check( calendar::turn ); } - if( it->process( carrier, pos, activate, type.insulation_factor * insulation, flag ) ) { + if( it->process( carrier, pos, type.insulation_factor * insulation, flag ) ) { it = contents.erase( it ); processed = true; } else { @@ -1191,11 +1191,11 @@ void item_pocket::remove_rotten( const tripoint &pnt ) } } -void item_pocket::process( player *carrier, const tripoint &pos, bool activate, float insulation, +void item_pocket::process( player *carrier, const tripoint &pos, float insulation, temperature_flag flag, float spoil_multiplier_parent ) { for( auto iter = contents.begin(); iter != contents.end(); ) { - if( iter->process( carrier, pos, activate, insulation, flag, + if( iter->process( carrier, pos, insulation, flag, // spoil multipliers on pockets are not additive or multiplicative, they choose the best std::min( spoil_multiplier_parent, spoil_multiplier() ) ) ) { iter = contents.erase( iter ); diff --git a/src/item_pocket.h b/src/item_pocket.h index c752ba72e11a4..7a11a02dd68c4 100644 --- a/src/item_pocket.h +++ b/src/item_pocket.h @@ -196,7 +196,7 @@ class item_pocket bool sealed() const; std::string translated_sealed_prefix() const; bool detonate( const tripoint &p, std::vector &drops ); - bool process( const itype &type, player *carrier, const tripoint &pos, bool activate, + bool process( const itype &type, player *carrier, const tripoint &pos, float insulation, temperature_flag flag ); void remove_all_ammo( Character &guy ); void remove_all_mods( Character &guy ); @@ -222,7 +222,7 @@ class item_pocket * Is part of the recursive call of item::process. see that function for additional comments * NOTE: this destroys the items that get processed */ - void process( player *carrier, const tripoint &pos, bool activate, float insulation = 1, + void process( player *carrier, const tripoint &pos, float insulation = 1, temperature_flag flag = temperature_flag::NORMAL, float spoil_multiplier_parent = 1.0f ); pocket_type saved_type() const { return _saved_type; diff --git a/src/map.cpp b/src/map.cpp index b7a23dacc749d..ce6bb11e60669 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -4329,7 +4329,7 @@ void map::update_lum( item_location &loc, bool add ) static bool process_map_items( item_stack &items, safe_reference &item_ref, const tripoint &location, const float insulation, const temperature_flag flag ) { - if( item_ref->process( nullptr, location, false, insulation, flag ) ) { + if( item_ref->process( nullptr, location, insulation, flag ) ) { // Item is to be destroyed so erase it from the map stack // unless it was already destroyed by processing. if( item_ref ) { diff --git a/src/vehicle_part.cpp b/src/vehicle_part.cpp index a1a6816942911..b680e819fe085 100644 --- a/src/vehicle_part.cpp +++ b/src/vehicle_part.cpp @@ -388,7 +388,7 @@ void vehicle_part::process_contents( const tripoint &pos, const bool e_heater ) if( e_heater ) { flag = temperature_flag::HEATER; } - base.process( nullptr, pos, false, 1, flag ); + base.process( nullptr, pos, 1, flag ); } } diff --git a/tests/rot_test.cpp b/tests/rot_test.cpp index f7adda96cdb56..8e9438ed128c7 100644 --- a/tests/rot_test.cpp +++ b/tests/rot_test.cpp @@ -37,9 +37,9 @@ TEST_CASE( "Rate of rotting" ) set_map_temperature( 65 ); // 18,3 C - normal_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::NORMAL ); - sealed_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::NORMAL ); - freeze_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::NORMAL ); + normal_item.process( nullptr, tripoint_zero, 1, temperature_flag::NORMAL ); + sealed_item.process( nullptr, tripoint_zero, 1, temperature_flag::NORMAL ); + freeze_item.process( nullptr, tripoint_zero, 1, temperature_flag::NORMAL ); // Item should exist with no rot when it is brand new CHECK( normal_item.get_rot() == 0_turns ); @@ -49,9 +49,9 @@ TEST_CASE( "Rate of rotting" ) INFO( "Initial turn: " << to_turn( calendar::turn ) ); calendar::turn += 20_minutes; - normal_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::NORMAL ); - sealed_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::NORMAL ); - freeze_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::FREEZER ); + normal_item.process( nullptr, tripoint_zero, 1, temperature_flag::NORMAL ); + sealed_item.process( nullptr, tripoint_zero, 1, temperature_flag::NORMAL ); + freeze_item.process( nullptr, tripoint_zero, 1, temperature_flag::FREEZER ); // After 20 minutes the normal item should have 20 minutes of rot CHECK( to_turns( normal_item.get_rot() ) @@ -62,8 +62,8 @@ TEST_CASE( "Rate of rotting" ) // Move time 110 minutes calendar::turn += 110_minutes; - sealed_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::NORMAL ); - freeze_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::FREEZER ); + sealed_item.process( nullptr, tripoint_zero, 1, temperature_flag::NORMAL ); + freeze_item.process( nullptr, tripoint_zero, 1, temperature_flag::FREEZER ); // In freezer and in preserving container still should be no rot CHECK( sealed_item.get_rot() == 0_turns ); CHECK( freeze_item.get_rot() == 0_turns ); @@ -85,7 +85,7 @@ TEST_CASE( "Items rot away" ) item test_item( "meat_cooked" ); // Process item once to set all of its values. - test_item.process( nullptr, tripoint_zero, false, 1, temperature_flag::HEATER ); + test_item.process( nullptr, tripoint_zero, 1, temperature_flag::HEATER ); // Set rot to >2 days and process again. process_temperature_rot should return true. calendar::turn += 20_minutes; From 790eb840f25927a409da709fcf26181d25fe844c Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Fri, 26 Jun 2020 10:09:49 +0300 Subject: [PATCH 124/206] Bash tiles that were not bashed yet --- src/explosion.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/explosion.cpp b/src/explosion.cpp index 1c86a4a5173b8..440c5ed6a29ea 100644 --- a/src/explosion.cpp +++ b/src/explosion.cpp @@ -220,7 +220,7 @@ static void do_blast( const tripoint &p, const float power, continue; } - if( bashed.count( dest ) != 0 ) { + if( bashed.count( dest ) == 0 ) { bashed.insert( dest ); // Up to 200% bonus for shaped charge // But not if the explosion is fiery, then only half the force and no bonus From fd6516ae64a78732c0f66b14bf2db87fd09a8947 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Fri, 26 Jun 2020 11:57:21 +0300 Subject: [PATCH 125/206] Remove halberd from wield time tests It is not longer possible to put halberd to backpack --- tests/wield_times_test.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/wield_times_test.cpp b/tests/wield_times_test.cpp index c0bcb357550ff..0d6c790a49cad 100644 --- a/tests/wield_times_test.cpp +++ b/tests/wield_times_test.cpp @@ -86,8 +86,6 @@ TEST_CASE( "Wield time test", "[wield]" ) avatar guy; clear_character( guy ); - wield_check_from_inv( guy, itype_id( "halberd" ), 612 ); - clear_character( guy ); wield_check_from_inv( guy, itype_id( "aspirin" ), 375 ); clear_character( guy ); wield_check_from_inv( guy, itype_id( "knife_combat" ), 412 ); From 6db117c5feed724aa38689f652b696082d0f5c45 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Fri, 26 Jun 2020 13:20:42 +0300 Subject: [PATCH 126/206] Show item type ids in fill_with failures --- src/item.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/item.cpp b/src/item.cpp index d4c3be4e1deb0..ea1169e61133b 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -8289,7 +8289,8 @@ int item::fill_with( const itype &contained, const int amount ) item_pocket *pocket = best_pocket( contained_item ); if( pocket == nullptr ) { - debugmsg( "tried to put an item in a container that cannot contain it" ); + debugmsg( "tried to put an item (%s) in a container (%s) that cannot contain it", + contained_item.typeId().str(), typeId().str() ); return 0; } From 5b7954c7b29ae45971e9d7364d800f530de4d1f6 Mon Sep 17 00:00:00 2001 From: Andrey Bienkowski Date: Fri, 26 Jun 2020 12:58:11 +0300 Subject: [PATCH 127/206] Modernize weight: BOOKs --- data/json/items/book/misc.json | 6 +++--- data/json/items/book/young.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/json/items/book/misc.json b/data/json/items/book/misc.json index 773a1622778fa..5d0424d26f173 100644 --- a/data/json/items/book/misc.json +++ b/data/json/items/book/misc.json @@ -346,7 +346,7 @@ "name": "Love and Circuses", "description": "The passionate saga of two Boston politicians fiercely battling each other for the mayor's office, and for Lydia's hand in marriage.", "copy-from": "paperback_romance_spb", - "relative": { "chapters": 2, "weight": 111 } + "relative": { "chapters": 2, "weight": "111 g" } }, { "id": "paperback_romance_cloven", @@ -538,7 +538,7 @@ "description": "This lengthy paperback novel describes the ocean exploits of Captain Gosgold. The British consider him an outlaw, but in America he is a patriot.", "copy-from": "book_fict_soft_tpl", "time": "12 m", - "relative": { "weight": 186, "price": 250, "chapters": 8 } + "relative": { "weight": "186 g", "price": 250, "chapters": 8 } }, { "id": "book_fict_soft_swash_buccaneer", @@ -1084,6 +1084,6 @@ "name": { "str": "Glimpses of Solomon in Yellow", "str_pl": "copies of Solomon in Yellow" }, "description": "This paperback is titled \"Glimpses of Solomon in Yellow; The Initiation Rites of the Starry Wisdom Covenant, by Dr. Enoch Craven.\" It describes not just the investiture of new adherents, but the history and beliefs of the Church of Starry Wisdom. Someone has defaced the sparse citations section by scrawling \"PUPPETS OF ROME!\" over its few pages. The book does not provide any biography for Dr. Craven, let alone academic credentials.", "copy-from": "paperback_occult", - "relative": { "weight": 186, "price": 250, "chapters": 10 } + "relative": { "weight": "186 g", "price": 250, "chapters": 10 } } ] diff --git a/data/json/items/book/young.json b/data/json/items/book/young.json index a37af1c47962a..c64c08f194da2 100644 --- a/data/json/items/book/young.json +++ b/data/json/items/book/young.json @@ -132,7 +132,7 @@ "name": { "str": "The Adorkable Girl", "str_pl": "copies of Adorkable" }, "description": "When a therapist's daughter transfers to a new school, she decides to change her personality type. As her social life begins to blossom, can she maintain a healthy boundary between her home life and her public persona?", "copy-from": "book_fict_soft_ya_quiddity", - "relative": { "weight": -75, "chapters": -6 } + "relative": { "weight": "-75 g", "chapters": -6 } }, { "id": "book_fict_soft_ya_bjak", From 9a720f3232795d82cafd43acdcf1b00e706298e9 Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Fri, 26 Jun 2020 08:58:14 -0700 Subject: [PATCH 128/206] Destroying helicopter parts prevents flying Any helicopter part which cannot be trivially installed or removed without potential harm to the operation of the aircraft should not be allowed to be bashed off. --- src/veh_type.cpp | 1 + src/veh_type.h | 1 + src/vehicle.cpp | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/src/veh_type.cpp b/src/veh_type.cpp index 346bd4fc25dc6..121b5c51cab1a 100644 --- a/src/veh_type.cpp +++ b/src/veh_type.cpp @@ -71,6 +71,7 @@ static const std::unordered_map vpart_bitflag_map = { "OPAQUE", VPFLAG_OPAQUE }, { "OPENABLE", VPFLAG_OPENABLE }, { "SEATBELT", VPFLAG_SEATBELT }, + { "SIMPLE_PART", VPFLAG_SIMPLE_PART }, { "WHEEL", VPFLAG_WHEEL }, { "ROTOR", VPFLAG_ROTOR }, { "ROTOR_SIMPLE", VPFLAG_ROTOR_SIMPLE }, diff --git a/src/veh_type.h b/src/veh_type.h index 36727e6fac291..57c748d6e2d34 100644 --- a/src/veh_type.h +++ b/src/veh_type.h @@ -42,6 +42,7 @@ enum vpart_bitflags : int { VPFLAG_OPAQUE, VPFLAG_OPENABLE, VPFLAG_SEATBELT, + VPFLAG_SIMPLE_PART, VPFLAG_SPACE_HEATER, VPFLAG_COOLER, VPFLAG_WHEEL, diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 4082df2262519..f4954245dc703 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -6419,6 +6419,11 @@ int vehicle::damage_direct( int p, int dmg, damage_type type ) dmg -= std::min( dmg, part_info( p ).damage_reduction[ type ] ); int dres = dmg - parts[p].hp(); if( mod_hp( parts[ p ], 0 - dmg, type ) ) { + if( is_flyable() && has_part( "ROTOR" ) && !parts[p].has_flag( VPFLAG_SIMPLE_PART ) ) { + // If we break a part, we can no longer fly the vehicle. + set_flyable( false ); + } + insides_dirty = true; pivot_dirty = true; From b32804f1494a860d52ba9888a21588ba5db8fa4c Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Fri, 26 Jun 2020 09:21:08 -0700 Subject: [PATCH 129/206] Use sqrt( 3 * ratio ) if ratio > 3 for stomach vol Further tweaking to this ratio - should prevent some items from being too large - though it likely removes the penalties from gorging on fat. --- src/consumption.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/consumption.cpp b/src/consumption.cpp index 08a2c91a6775b..2e313ed0d7406 100644 --- a/src/consumption.cpp +++ b/src/consumption.cpp @@ -1341,6 +1341,9 @@ bool Character::consume_effects( item &food ) double ratio = 1.0f; if( units::to_gram( food_weight ) != 0 ) { ratio = std::max( static_cast( food_nutrients.kcal ) / units::to_gram( food_weight ), 1.0 ); + if( ratio > 3.0f ) { + ratio = std::sqrt( 3 * ratio ); + } } food_summary ingested{ @@ -1348,7 +1351,8 @@ bool Character::consume_effects( item &food ) food_vol * ratio, food_nutrients }; - add_msg( m_debug, "Effective volume: %d (solid) %d (liquid)\n multiplier: %g calculated: %d / %d", + add_msg( m_debug, + "Effective volume: %d (solid) %d (liquid)\n multiplier: %g calories: %d, weight: %d", units::to_milliliter( ingested.solids ), units::to_milliliter( ingested.water ), ratio, food_nutrients.kcal, units::to_gram( food_weight ) ); // Maybe move tapeworm to digestion From fc61c75b4384db73eb9b14899de3e7fb07ce5176 Mon Sep 17 00:00:00 2001 From: akirashirosawa <38557723+akirashirosawa@users.noreply.github.com> Date: Sat, 27 Jun 2020 01:54:00 +0300 Subject: [PATCH 130/206] Fix container with none (#41608) * is_frozen_liquid avoid size limit When the liquid freezes inside the container, the game breaks. Avoid size limit for frozen liquid fix it. * add powder soft true Fix game crash when checking item_pocket::can_contain for items made of powder in containers. --- data/json/materials.json | 3 +++ src/item_pocket.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/data/json/materials.json b/data/json/materials.json index de89a0e441c49..ecefca41f053f 100644 --- a/data/json/materials.json +++ b/data/json/materials.json @@ -1111,6 +1111,7 @@ "specific_heat_liquid": 1.5, "specific_heat_solid": 1.2, "latent_heat": 10, + "soft": true, "bash_resist": 1, "cut_resist": 1, "bullet_resist": 1, @@ -1135,6 +1136,7 @@ "specific_heat_liquid": 1.5, "specific_heat_solid": 1.2, "latent_heat": 10, + "soft": true, "bash_resist": 1, "cut_resist": 1, "bullet_resist": 1, @@ -1154,6 +1156,7 @@ "specific_heat_liquid": 1.5, "specific_heat_solid": 1.2, "latent_heat": 10, + "soft": true, "bash_resist": 1, "cut_resist": 1, "bullet_resist": 1, diff --git a/src/item_pocket.cpp b/src/item_pocket.cpp index 75578c82052f5..743197e547eaf 100644 --- a/src/item_pocket.cpp +++ b/src/item_pocket.cpp @@ -958,6 +958,7 @@ ret_val item_pocket::can_contain( const item &it ) co // liquids and gases avoid the size limit altogether // soft items also avoid the size limit if( !it.made_of( phase_id::LIQUID ) && !it.made_of( phase_id::GAS ) && + !it.is_frozen_liquid() && !it.is_soft() && data->max_item_volume && it.volume() > *data->max_item_volume ) { return ret_val::make_failure( From 7d8b01612f9e39fa080cc085adea0a6c821ac5e1 Mon Sep 17 00:00:00 2001 From: Brian-Otten <47374323+Brian-Otten@users.noreply.github.com> Date: Sat, 27 Jun 2020 01:11:30 +0200 Subject: [PATCH 131/206] Adds jp8 barrels to helipad and avgas barrels to the regional airport (#41611) --- data/json/itemgroups/supplies.json | 14 ++++++++++++++ data/json/mapgen/airport/s_airport_private.json | 2 ++ data/json/mapgen/helipad.json | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/data/json/itemgroups/supplies.json b/data/json/itemgroups/supplies.json index 83d80333665f1..dfe3f5507caed 100644 --- a/data/json/itemgroups/supplies.json +++ b/data/json/itemgroups/supplies.json @@ -529,5 +529,19 @@ { "item": "diesel", "charges": [ 0, 50000 ], "container-item": "30gal_drum", "prob": 10 }, { "item": "motor_oil", "charges": [ 0, 10000 ], "container-item": "jerrycan", "prob": 5 } ] + }, + { + "id": "avgas_barrel", + "type": "item_group", + "//": "barrel with aviation gas like you would find at a fuel depot for planes or helicopters", + "subtype": "distribution", + "entries": [ { "item": "avgas", "charges": [ 0, 50000 ], "container-item": "30gal_drum", "prob": 30 } ] + }, + { + "id": "jp8_barrel", + "type": "item_group", + "//": "barrel with aviation gas like you would find at a fuel depot for planes or helicopters", + "subtype": "distribution", + "entries": [ { "item": "jp8", "charges": [ 0, 50000 ], "container-item": "30gal_drum", "prob": 30 } ] } ] diff --git a/data/json/mapgen/airport/s_airport_private.json b/data/json/mapgen/airport/s_airport_private.json index cbd8a1a5a74ca..0a06dc150c0a9 100644 --- a/data/json/mapgen/airport/s_airport_private.json +++ b/data/json/mapgen/airport/s_airport_private.json @@ -110,6 +110,8 @@ { "group": "vending_drink", "chance": 80, "repeat": 1, "x": 40, "y": 6 }, { "group": "road", "chance": 50, "repeat": 10, "x": [ 75, 80 ], "y": [ 7, 20 ] }, { "group": "road", "chance": 50, "repeat": 10, "x": [ 87, 92 ], "y": [ 7, 20 ] }, + { "group": "avgas_barrel", "chance": 50, "repeat": 5, "x": [ 75, 80 ], "y": [ 7, 20 ] }, + { "group": "avgas_barrel", "chance": 50, "repeat": 5, "x": [ 87, 92 ], "y": [ 7, 20 ] }, { "group": "clothing_work_mask", "chance": 50, "repeat": 2, "x": 81, "y": 7 }, { "group": "clothing_work_mask", "chance": 50, "repeat": 2, "x": 87, "y": 21 }, { "group": "tools_mechanic", "chance": 50, "repeat": 4, "x": 88, "y": 21 }, diff --git a/data/json/mapgen/helipad.json b/data/json/mapgen/helipad.json index ffceb547cb79e..63b39140c1d29 100644 --- a/data/json/mapgen/helipad.json +++ b/data/json/mapgen/helipad.json @@ -63,7 +63,7 @@ "B": { "item": { "subtype": "distribution", - "entries": [ { "group": "fuel_barrel", "prob": 30 }, { "item": "30gal_drum", "prob": 70 } ] + "entries": [ { "group": "fuel_barrel", "prob": 20 }, { "group": "jp8_barrel", "prob": 40 }, { "item": "30gal_drum", "prob": 40 } ] }, "chance": 75 }, From b9710b0436927bcfa468ea316b8a678cdc715ad6 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Sat, 27 Jun 2020 10:35:05 +0200 Subject: [PATCH 132/206] Fix loading character template --- src/newcharacter.cpp | 3 +++ src/savegame_json.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index 6a907d3888a83..1ad16e7d335c2 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -435,6 +435,9 @@ bool avatar::create( character_type type, const std::string &tempname ) if( !load_template( tempname, points ) ) { return false; } + // TEMPORARY until 0.F + set_all_parts_hp_to_max(); + // We want to prevent recipes known by the template from being applied to the // new character. The recipe list will be rebuilt when entering the game. // Except if it is a character transfer template diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 508546774ca79..67c4aa268a39d 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -637,8 +637,12 @@ void Character::load( const JsonObject &data ) set_part_hp_cur( bodypart_id( "torso" ), hp_cur[1] ); set_part_hp_max( bodypart_id( "torso" ), hp_max[1] ); set_part_hp_cur( bodypart_id( "arm_l" ), hp_cur[2] ); + set_part_hp_max( bodypart_id( "arm_l" ), hp_max[2] ); + set_part_hp_cur( bodypart_id( "arm_r" ), hp_cur[3] ); set_part_hp_max( bodypart_id( "arm_r" ), hp_max[3] ); set_part_hp_cur( bodypart_id( "leg_l" ), hp_cur[4] ); + set_part_hp_max( bodypart_id( "leg_l" ), hp_max[4] ); + set_part_hp_cur( bodypart_id( "leg_r" ), hp_cur[5] ); set_part_hp_max( bodypart_id( "leg_r" ), hp_max[5] ); } From 6ccd790fd25b1c0a78e7d826b0dca84adb7d4514 Mon Sep 17 00:00:00 2001 From: Hirmuolio Date: Sat, 27 Jun 2020 14:02:43 +0300 Subject: [PATCH 133/206] molotov --- data/json/items/tool/explosives.json | 2 +- .../Cataclysm-lib-vcpkg-static.vcxproj | 822 +++++++++++++++--- .../Cataclysm-test-vcpkg-static.vcxproj | 126 ++- msvc-full-features/Cataclysm-vcpkg-static.sln | 2 - .../Cataclysm-vcpkg-static.vcxproj | 3 + msvc-full-features/JsonFormatter.vcxproj | 9 +- src/iuse.cpp | 20 +- 7 files changed, 847 insertions(+), 137 deletions(-) diff --git a/data/json/items/tool/explosives.json b/data/json/items/tool/explosives.json index 476a2192988f7..d2db890e53673 100644 --- a/data/json/items/tool/explosives.json +++ b/data/json/items/tool/explosives.json @@ -1104,7 +1104,7 @@ "max_charges": 1, "turns_per_charge": 1, "use_action": [ "MOLOTOV_LIT" ], - "flags": [ "LIGHT_15", "TRADER_AVOID", "NPC_THROW_NOW", "NO_REPAIR", "WATER_EXTINGUISH" ] + "flags": [ "LIGHT_15", "TRADER_AVOID", "NPC_THROW_NOW", "NO_REPAIR", "WATER_EXTINGUISH", "ACT_ON_RANGED_HIT" ] }, { "id": "bootleg_pipebomb", diff --git a/msvc-full-features/Cataclysm-lib-vcpkg-static.vcxproj b/msvc-full-features/Cataclysm-lib-vcpkg-static.vcxproj index 66cf377f1163a..d452936caa658 100644 --- a/msvc-full-features/Cataclysm-lib-vcpkg-static.vcxproj +++ b/msvc-full-features/Cataclysm-lib-vcpkg-static.vcxproj @@ -1,137 +1,717 @@ - - - Debug - x64 - - - Debug - Win32 - - - Release - x64 - - - Release - Win32 - - + + + Debug + x64 + + + Debug + Win32 + + + Release + x64 + + + Release + Win32 + + 16.0 {0009BB11-11AD-4C14-A5FC-D882A942C00B} Win32Proj CataclysmLib 10.0 - x86-windows-static - x64-windows-static + x86-windows-static + x64-windows-static - - StaticLibrary - v142 - MultiByte + StaticLibrary + v142 + MultiByte - true + true - false - false + false + false - - - - - - - - - - $(ProjectName)-$(Configuration)-$(Platform) - .lib - $(SolutionDir)..\ - $(SolutionDir)$(ProjectName)\$(Configuration)\$(Platform)\ - - - true - - - false - - - - Level1 - Use - true - false - true - false - ProgramDatabase - 4819;4146;26495;26444;26451;4068;6319;6237 - stdafx.h - /bigobj /utf-8 %(AdditionalOptions) - _SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_CONSOLE;SDL_SOUND;TILES;SDL_BUILDING_LIBRARY;LOCALIZE;USE_VCPKG;%(PreprocessorDefinitions) - stdcpp14 - ..\src;%(AdditionalIncludeDirectories) - - - Windows - true - Default - true - /LTCG:OFF %(AdditionalOptions) - winmm.lib;imm32.lib;version.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;setupapi.lib;%(AdditionalDependencies) - - - prebuild.cmd - Get version string - - - true - - - - - Disabled - false - false - _DEBUG;%(PreprocessorDefinitions) - MultiThreadedDebug - - - - - MaxSpeed - true - true - NDEBUG;%(PreprocessorDefinitions) - DebugFastLink - MultiThreaded - - - true - true - - - - - WIN32;%(PreprocessorDefinitions) - - - - - - - - - - Create - - - - - - + + + + + + + + + $(ProjectName)-$(Configuration)-$(Platform) + .lib + $(SolutionDir)..\ + $(SolutionDir)$(ProjectName)\$(Configuration)\$(Platform)\ + + + true + + + false + + + true + + + + Level1 + Use + true + false + true + false + ProgramDatabase + 4819;4146;26495;26444;26451;4068;6319;6237 + stdafx.h + /bigobj /utf-8 %(AdditionalOptions) + _SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_CONSOLE;SDL_SOUND;TILES;SDL_BUILDING_LIBRARY;LOCALIZE;USE_VCPKG;%(PreprocessorDefinitions) + stdcpp14 + ..\src;%(AdditionalIncludeDirectories) + + + Windows + true + Default + true + /LTCG:OFF %(AdditionalOptions) + winmm.lib;imm32.lib;version.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;setupapi.lib;%(AdditionalDependencies) + + + prebuild.cmd + Get version string + + + true + + + + + Disabled + false + false + _DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebug + + + + + MaxSpeed + true + true + NDEBUG;%(PreprocessorDefinitions) + DebugFastLink + MultiThreaded + + + true + true + + + + + WIN32;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create + + + + + + \ No newline at end of file diff --git a/msvc-full-features/Cataclysm-test-vcpkg-static.vcxproj b/msvc-full-features/Cataclysm-test-vcpkg-static.vcxproj index e1bfccb6bdd0c..801762197fce9 100644 --- a/msvc-full-features/Cataclysm-test-vcpkg-static.vcxproj +++ b/msvc-full-features/Cataclysm-test-vcpkg-static.vcxproj @@ -59,6 +59,9 @@ false + + true + Level1 @@ -120,12 +123,131 @@ - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Create diff --git a/msvc-full-features/Cataclysm-vcpkg-static.sln b/msvc-full-features/Cataclysm-vcpkg-static.sln index ce23375f05220..0449aebd41c46 100644 --- a/msvc-full-features/Cataclysm-vcpkg-static.sln +++ b/msvc-full-features/Cataclysm-vcpkg-static.sln @@ -38,7 +38,6 @@ Global {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Debug|x86.ActiveCfg = Debug|Win32 {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Debug|x86.Build.0 = Debug|Win32 {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Release|x64.ActiveCfg = Release|x64 - {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Release|x64.Build.0 = Release|x64 {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Release|x86.ActiveCfg = Release|Win32 {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Release|x86.Build.0 = Release|Win32 {0009BB11-11AD-4C14-A5FC-D882A942C00B}.Debug|x64.ActiveCfg = Debug|x64 @@ -54,7 +53,6 @@ Global {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Debug|x86.ActiveCfg = Debug|Win32 {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Debug|x86.Build.0 = Debug|Win32 {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Release|x64.ActiveCfg = Release|x64 - {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Release|x64.Build.0 = Release|x64 {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Release|x86.ActiveCfg = Release|Win32 {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Release|x86.Build.0 = Release|Win32 EndGlobalSection diff --git a/msvc-full-features/Cataclysm-vcpkg-static.vcxproj b/msvc-full-features/Cataclysm-vcpkg-static.vcxproj index b8021c0e3d405..51ebb1a536e64 100644 --- a/msvc-full-features/Cataclysm-vcpkg-static.vcxproj +++ b/msvc-full-features/Cataclysm-vcpkg-static.vcxproj @@ -59,6 +59,9 @@ false + + true + Level1 diff --git a/msvc-full-features/JsonFormatter.vcxproj b/msvc-full-features/JsonFormatter.vcxproj index bf31ec6133545..7a24cc17584c6 100644 --- a/msvc-full-features/JsonFormatter.vcxproj +++ b/msvc-full-features/JsonFormatter.vcxproj @@ -59,6 +59,9 @@ false + + true + Level1 @@ -121,12 +124,12 @@ - + - + Create @@ -139,4 +142,4 @@ - + \ No newline at end of file diff --git a/src/iuse.cpp b/src/iuse.cpp index 900a37a409afd..d48f00321e221 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -3923,25 +3923,29 @@ int iuse::arrow_flammable( player *p, item *it, bool, const tripoint & ) int iuse::molotov_lit( player *p, item *it, bool t, const tripoint &pos ) { if( pos.x == -999 || pos.y == -999 ) { + debugmsg(_("pos")); return 0; + } else if( !t ) { + debugmsg(_("bool t")); + for( auto &pt : g->m.points_in_radius( pos, 1, 0 ) ) { + const int intensity = 1 + one_in( 3 ) + one_in( 5 ); + g->m.add_field( pt, fd_fire, intensity ); + } + return 1; } else if( it->charges > 0 ) { p->add_msg_if_player( m_info, _( "You've already lit the %s, try throwing it instead." ), it->tname() ); + debugmsg(_("charges")); return 0; } else if( p->has_item( *it ) && it->charges == 0 ) { + debugmsg(_("go out")); it->charges += 1; if( one_in( 5 ) ) { p->add_msg_if_player( _( "Your lit Molotov goes out." ) ); it->convert( itype_molotov ).active = false; } - } else { - if( !t ) { - for( auto &pt : g->m.points_in_radius( pos, 1, 0 ) ) { - const int intensity = 1 + one_in( 3 ) + one_in( 5 ); - g->m.add_field( pt, fd_fire, intensity ); - } - } - } + } + debugmsg(_("nothing happen")); return 0; } From 1309f9f2332c396b8513717fe2e35cf0a2caf1de Mon Sep 17 00:00:00 2001 From: Hirmuolio Date: Sat, 27 Jun 2020 14:51:18 +0300 Subject: [PATCH 134/206] molotov --- src/iuse.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index 3528dd428cf5a..b228d27d639ab 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -3925,10 +3925,8 @@ int iuse::arrow_flammable( player *p, item *it, bool, const tripoint & ) int iuse::molotov_lit( player *p, item *it, bool t, const tripoint &pos ) { if( pos.x == -999 || pos.y == -999 ) { - debugmsg(_("pos")); return 0; } else if( !t ) { - debugmsg(_("bool t")); for( auto &pt : g->m.points_in_radius( pos, 1, 0 ) ) { const int intensity = 1 + one_in( 3 ) + one_in( 5 ); g->m.add_field( pt, fd_fire, intensity ); @@ -3937,17 +3935,15 @@ int iuse::molotov_lit( player *p, item *it, bool t, const tripoint &pos ) } else if( it->charges > 0 ) { p->add_msg_if_player( m_info, _( "You've already lit the %s, try throwing it instead." ), it->tname() ); - debugmsg(_("charges")); return 0; } else if( p->has_item( *it ) && it->charges == 0 ) { - debugmsg(_("go out")); it->charges += 1; if( one_in( 5 ) ) { p->add_msg_if_player( _( "Your lit Molotov goes out." ) ); it->convert( itype_molotov ).active = false; } + return 0; } - debugmsg(_("nothing happen")); return 0; } From 14a41edb000f0364e0637fd931da0f1ba8eec248 Mon Sep 17 00:00:00 2001 From: Hirmuolio Date: Sat, 27 Jun 2020 14:52:37 +0300 Subject: [PATCH 135/206] astyle --- src/iuse.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index b228d27d639ab..b13ded24123a5 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -3926,12 +3926,12 @@ int iuse::molotov_lit( player *p, item *it, bool t, const tripoint &pos ) { if( pos.x == -999 || pos.y == -999 ) { return 0; - } else if( !t ) { + } else if( !t ) { for( auto &pt : g->m.points_in_radius( pos, 1, 0 ) ) { const int intensity = 1 + one_in( 3 ) + one_in( 5 ); g->m.add_field( pt, fd_fire, intensity ); } - return 1; + return 1; } else if( it->charges > 0 ) { p->add_msg_if_player( m_info, _( "You've already lit the %s, try throwing it instead." ), it->tname() ); @@ -3943,7 +3943,7 @@ int iuse::molotov_lit( player *p, item *it, bool t, const tripoint &pos ) it->convert( itype_molotov ).active = false; } return 0; - } + } return 0; } From d368a9e68ea12457ab5ebb016b30eb59d3f59ac0 Mon Sep 17 00:00:00 2001 From: Hirmuolio Date: Sat, 27 Jun 2020 14:54:04 +0300 Subject: [PATCH 136/206] VS mess --- .../Cataclysm-lib-vcpkg-static.vcxproj | 822 +++--------------- .../Cataclysm-test-vcpkg-static.vcxproj | 126 +-- msvc-full-features/Cataclysm-vcpkg-static.sln | 2 + .../Cataclysm-vcpkg-static.vcxproj | 3 - msvc-full-features/JsonFormatter.vcxproj | 9 +- 5 files changed, 128 insertions(+), 834 deletions(-) diff --git a/msvc-full-features/Cataclysm-lib-vcpkg-static.vcxproj b/msvc-full-features/Cataclysm-lib-vcpkg-static.vcxproj index d452936caa658..66cf377f1163a 100644 --- a/msvc-full-features/Cataclysm-lib-vcpkg-static.vcxproj +++ b/msvc-full-features/Cataclysm-lib-vcpkg-static.vcxproj @@ -1,717 +1,137 @@ - - - Debug - x64 - - - Debug - Win32 - - - Release - x64 - - - Release - Win32 - - + + + Debug + x64 + + + Debug + Win32 + + + Release + x64 + + + Release + Win32 + + 16.0 {0009BB11-11AD-4C14-A5FC-D882A942C00B} Win32Proj CataclysmLib 10.0 - x86-windows-static - x64-windows-static + x86-windows-static + x64-windows-static + - StaticLibrary - v142 - MultiByte + StaticLibrary + v142 + MultiByte - true + true - false - false + false + false - - - - - - - - - $(ProjectName)-$(Configuration)-$(Platform) - .lib - $(SolutionDir)..\ - $(SolutionDir)$(ProjectName)\$(Configuration)\$(Platform)\ - - - true - - - false - - - true - - - - Level1 - Use - true - false - true - false - ProgramDatabase - 4819;4146;26495;26444;26451;4068;6319;6237 - stdafx.h - /bigobj /utf-8 %(AdditionalOptions) - _SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_CONSOLE;SDL_SOUND;TILES;SDL_BUILDING_LIBRARY;LOCALIZE;USE_VCPKG;%(PreprocessorDefinitions) - stdcpp14 - ..\src;%(AdditionalIncludeDirectories) - - - Windows - true - Default - true - /LTCG:OFF %(AdditionalOptions) - winmm.lib;imm32.lib;version.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;setupapi.lib;%(AdditionalDependencies) - - - prebuild.cmd - Get version string - - - true - - - - - Disabled - false - false - _DEBUG;%(PreprocessorDefinitions) - MultiThreadedDebug - - - - - MaxSpeed - true - true - NDEBUG;%(PreprocessorDefinitions) - DebugFastLink - MultiThreaded - - - true - true - - - - - WIN32;%(PreprocessorDefinitions) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Create - - - - - - \ No newline at end of file + + + + + + + + + + $(ProjectName)-$(Configuration)-$(Platform) + .lib + $(SolutionDir)..\ + $(SolutionDir)$(ProjectName)\$(Configuration)\$(Platform)\ + + + true + + + false + + + + Level1 + Use + true + false + true + false + ProgramDatabase + 4819;4146;26495;26444;26451;4068;6319;6237 + stdafx.h + /bigobj /utf-8 %(AdditionalOptions) + _SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32_LEAN_AND_MEAN;_CONSOLE;SDL_SOUND;TILES;SDL_BUILDING_LIBRARY;LOCALIZE;USE_VCPKG;%(PreprocessorDefinitions) + stdcpp14 + ..\src;%(AdditionalIncludeDirectories) + + + Windows + true + Default + true + /LTCG:OFF %(AdditionalOptions) + winmm.lib;imm32.lib;version.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;setupapi.lib;%(AdditionalDependencies) + + + prebuild.cmd + Get version string + + + true + + + + + Disabled + false + false + _DEBUG;%(PreprocessorDefinitions) + MultiThreadedDebug + + + + + MaxSpeed + true + true + NDEBUG;%(PreprocessorDefinitions) + DebugFastLink + MultiThreaded + + + true + true + + + + + WIN32;%(PreprocessorDefinitions) + + + + + + + + + + Create + + + + + + diff --git a/msvc-full-features/Cataclysm-test-vcpkg-static.vcxproj b/msvc-full-features/Cataclysm-test-vcpkg-static.vcxproj index 801762197fce9..e1bfccb6bdd0c 100644 --- a/msvc-full-features/Cataclysm-test-vcpkg-static.vcxproj +++ b/msvc-full-features/Cataclysm-test-vcpkg-static.vcxproj @@ -59,9 +59,6 @@ false - - true - Level1 @@ -123,131 +120,12 @@ + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Create diff --git a/msvc-full-features/Cataclysm-vcpkg-static.sln b/msvc-full-features/Cataclysm-vcpkg-static.sln index 0449aebd41c46..ce23375f05220 100644 --- a/msvc-full-features/Cataclysm-vcpkg-static.sln +++ b/msvc-full-features/Cataclysm-vcpkg-static.sln @@ -38,6 +38,7 @@ Global {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Debug|x86.ActiveCfg = Debug|Win32 {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Debug|x86.Build.0 = Debug|Win32 {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Release|x64.ActiveCfg = Release|x64 + {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Release|x64.Build.0 = Release|x64 {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Release|x86.ActiveCfg = Release|Win32 {2C1ECEE1-9686-4C3C-8DE1-88996EE43378}.Release|x86.Build.0 = Release|Win32 {0009BB11-11AD-4C14-A5FC-D882A942C00B}.Debug|x64.ActiveCfg = Debug|x64 @@ -53,6 +54,7 @@ Global {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Debug|x86.ActiveCfg = Debug|Win32 {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Debug|x86.Build.0 = Debug|Win32 {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Release|x64.ActiveCfg = Release|x64 + {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Release|x64.Build.0 = Release|x64 {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Release|x86.ActiveCfg = Release|Win32 {35D74C75-FC4A-442F-AF44-43BC9D845BAF}.Release|x86.Build.0 = Release|Win32 EndGlobalSection diff --git a/msvc-full-features/Cataclysm-vcpkg-static.vcxproj b/msvc-full-features/Cataclysm-vcpkg-static.vcxproj index 51ebb1a536e64..b8021c0e3d405 100644 --- a/msvc-full-features/Cataclysm-vcpkg-static.vcxproj +++ b/msvc-full-features/Cataclysm-vcpkg-static.vcxproj @@ -59,9 +59,6 @@ false - - true - Level1 diff --git a/msvc-full-features/JsonFormatter.vcxproj b/msvc-full-features/JsonFormatter.vcxproj index 7a24cc17584c6..bf31ec6133545 100644 --- a/msvc-full-features/JsonFormatter.vcxproj +++ b/msvc-full-features/JsonFormatter.vcxproj @@ -59,9 +59,6 @@ false - - true - Level1 @@ -124,12 +121,12 @@ - + + - Create @@ -142,4 +139,4 @@ - \ No newline at end of file + From b35831a1f0314783fb7d4a274bbd9c66bb8b9996 Mon Sep 17 00:00:00 2001 From: Hirmuolio Date: Sat, 27 Jun 2020 15:08:10 +0300 Subject: [PATCH 137/206] do not process weapon twice --- src/character.cpp | 5 ----- src/character.h | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/character.cpp b/src/character.cpp index 80955b7c4fb0c..0adc59c35cfd4 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -2431,11 +2431,6 @@ std::vector Character::all_items_loc() std::vector Character::top_items_loc() { - std::vector ret; - if( has_weapon() ) { - item_location weap_loc( *this, &weapon ); - ret.push_back( weap_loc ); - } for( item &worn_it : worn ) { item_location worn_loc( *this, &worn_it ); ret.push_back( worn_loc ); diff --git a/src/character.h b/src/character.h index d58d31a355c25..468d1bdf32ced 100644 --- a/src/character.h +++ b/src/character.h @@ -1318,7 +1318,7 @@ class Character : public Creature, public visitable // returns a list of all item_location the character has, including items contained in other items. // only for CONTAINER pocket type; does not look for magazines std::vector all_items_loc(); - // Returns list of all the top level item_lodation the character has. Includes worn and held items. + // Returns list of all the top level item_lodation the character has. Includes worn items but excludes items held on hand. std::vector top_items_loc(); /** Return the item pointer of the item with given invlet, return nullptr if * the player does not have such an item with that invlet. Don't use this on npcs. From 098acc9059093ddd8d63bf2acfa904b29ad62c7e Mon Sep 17 00:00:00 2001 From: Hirmuolio Date: Sat, 27 Jun 2020 15:36:22 +0300 Subject: [PATCH 138/206] missing vector --- src/character.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/character.cpp b/src/character.cpp index 0adc59c35cfd4..5b4c2f2d635fe 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -2431,6 +2431,7 @@ std::vector Character::all_items_loc() std::vector Character::top_items_loc() { + std::vector ret; for( item &worn_it : worn ) { item_location worn_loc( *this, &worn_it ); ret.push_back( worn_loc ); From 41217d0630d76337269de08d0f022a1b0db15add Mon Sep 17 00:00:00 2001 From: John Candlebury Date: Sat, 27 Jun 2020 10:20:55 -0600 Subject: [PATCH 139/206] Item group organization --- .../Aftershock/itemgroups/bionics_groups.json | 44 +++ .../{items => itemgroups}/item_groups.json | 285 +++++++++++------- .../itemgroups/nuclear_reactor_groups.json | 31 ++ .../Aftershock/itemgroups/scrap_groups.json | 30 ++ .../itemgroups/titanium_groups.json | 89 ++++++ data/mods/Aftershock/items/monster_drops.json | 8 - data/mods/Aftershock/maps/item_groups.json | 243 --------------- .../{items => monsterdrops}/monsterdrops.json | 6 + 8 files changed, 370 insertions(+), 366 deletions(-) create mode 100644 data/mods/Aftershock/itemgroups/bionics_groups.json rename data/mods/Aftershock/{items => itemgroups}/item_groups.json (63%) create mode 100644 data/mods/Aftershock/itemgroups/nuclear_reactor_groups.json create mode 100644 data/mods/Aftershock/itemgroups/scrap_groups.json create mode 100644 data/mods/Aftershock/itemgroups/titanium_groups.json delete mode 100644 data/mods/Aftershock/items/monster_drops.json delete mode 100644 data/mods/Aftershock/maps/item_groups.json rename data/mods/Aftershock/{items => monsterdrops}/monsterdrops.json (93%) diff --git a/data/mods/Aftershock/itemgroups/bionics_groups.json b/data/mods/Aftershock/itemgroups/bionics_groups.json new file mode 100644 index 0000000000000..2fee362616910 --- /dev/null +++ b/data/mods/Aftershock/itemgroups/bionics_groups.json @@ -0,0 +1,44 @@ +[ + { + "id": "bionics", + "type": "item_group", + "items": [ + [ "bn_bio_solar", 10 ], + [ "afs_bio_wind_turbine", 5 ], + [ "afs_bio_missiles", 10 ], + [ "afs_bio_linguistic_coprocessor", 10 ], + [ "afs_bio_dopamine_stimulators", 10 ], + [ "bio_blaster", 5 ] + ] + }, + { + "id": "bionics_common", + "type": "item_group", + "items": [ [ "bn_bio_solar", 10 ], [ "afs_bio_wind_turbine", 5 ], [ "afs_bio_linguistic_coprocessor", 8 ] ] + }, + { + "id": "bionics_mil", + "type": "item_group", + "items": [ [ "bio_blaster", 5 ] ] + }, + { + "id": "bionics_sci", + "type": "item_group", + "items": [ [ "bn_bio_solar", 5 ], [ "afs_bio_wind_turbine", 2 ] ] + }, + { + "id": "bionics_op", + "type": "item_group", + "items": [ + [ "bn_bio_solar", 15 ], + [ "afs_bio_wind_turbine", 10 ], + [ "afs_bio_missiles", 10 ], + [ "afs_bio_dopamine_stimulators", 10 ] + ] + }, + { + "id": "bionics_subs", + "type": "item_group", + "items": [ [ "afs_bio_missiles", 10 ], [ "afs_bio_dopamine_stimulators", 15 ] ] + } +] diff --git a/data/mods/Aftershock/items/item_groups.json b/data/mods/Aftershock/itemgroups/item_groups.json similarity index 63% rename from data/mods/Aftershock/items/item_groups.json rename to data/mods/Aftershock/itemgroups/item_groups.json index e8b118bc87a82..5c4387a424d0b 100644 --- a/data/mods/Aftershock/items/item_groups.json +++ b/data/mods/Aftershock/itemgroups/item_groups.json @@ -1,4 +1,174 @@ [ + { + "id": "afs_weapons_rare", + "type": "item_group", + "items": [ + [ "emp_gun", 3 ], + [ "laser_rifle", 5 ], + [ "v29", 7 ], + [ "afs_hydraulic_gauntlet", 3 ], + [ "afs_energy_saber_off", 3 ], + [ "ftk93", 5 ], + [ "afs_hardlight_longbow", 2 ] + ] + }, + { + "id": "afs_lab_mechanics_books", + "type": "item_group", + "items": [ + [ "manual_mechanics", 6 ], + [ "textbook_mechanics", 3 ], + [ "textbook_biodiesel", 3 ], + [ "mag_fieldrepair", 4 ], + [ "book_icef", 4 ] + ] + }, + { + "id": "chem_lab", + "type": "item_group", + "items": [ [ "panacea", 1 ], [ "afs_calorie_pill", 5 ], [ "afs_sundew", 8 ] ] + }, + { + "id": "rare", + "type": "item_group", + "items": [ + [ "afs_calorie_pill", 10 ], + [ "afs_sundew", 10 ], + [ "afs_bag_of_holding", 1 ], + [ "afs_atomic_smartphone", 5 ], + [ "laser_pack", 10 ], + [ "ftk93", 5 ], + [ "atomic_butterchurn", 5 ] + ] + }, + { + "id": "spider", + "type": "item_group", + "items": [ [ "afs_energy_saber_off", 1 ], [ "afs_bag_of_holding", 2 ], [ "afs_hydraulic_gauntlet", 1 ] ] + }, + { + "id": "survivorzed_extra", + "type": "item_group", + "items": [ [ "afs_rolling_pin_barbed_wire", 5 ], [ "afs_chain_wrench", 8 ] ] + }, + { + "id": "camping", + "type": "item_group", + "items": [ [ "afs_rope_lighter", 10 ], [ "atomic_light", 1 ] ] + }, + { + "id": "allsporting", + "type": "item_group", + "items": [ [ "afs_rope_lighter", 10 ] ] + }, + { + "id": "traveler", + "type": "item_group", + "items": [ [ "afs_rope_lighter", 10 ] ] + }, + { + "id": "drugdealer", + "type": "item_group", + "items": [ [ "afs_atomic_smartphone", 3 ], [ "afs_bio_missiles", 8 ] ] + }, + { + "id": "kitchen", + "type": "item_group", + "items": [ [ "afs_atompot", 1 ], [ "atomic_butterchurn", 1 ] ] + }, + { + "id": "oven", + "type": "item_group", + "items": [ [ "afs_atompot", 3 ] ] + }, + { + "id": "bed", + "type": "item_group", + "items": [ [ "afs_quilt", 10 ], [ "afs_quilt_patchwork", 8 ] ] + }, + { + "id": "livingroom", + "type": "item_group", + "items": [ [ "afs_atomic_smartphone", 1 ], [ "atomic_light", 2 ] ] + }, + { + "id": "bedroom", + "type": "item_group", + "items": [ [ "afs_atomic_smartphone", 1 ], [ "atomic_light", 2 ] ] + }, + { + "id": "consumer_electronics", + "type": "item_group", + "items": [ [ "afs_atomic_smartphone", 2 ], [ "atomic_light", 4 ] ] + }, + { + "id": "electronics", + "type": "item_group", + "items": [ [ "afs_atomic_smartphone", 1 ], [ "atomic_light", 2 ] ] + }, + { + "id": "lab_dorm", + "type": "item_group", + "items": [ [ "afs_atomic_smartphone", 5 ], [ "atomic_light", 3 ] ] + }, + { + "id": "subway", + "type": "item_group", + "items": [ [ "afs_atomic_smartphone", 1 ] ] + }, + { + "id": "hardware", + "type": "item_group", + "items": [ [ "afs_power_cutter", 5 ], [ "atomic_butterchurn", 1 ] ] + }, + { + "id": "hardware_bulk", + "type": "item_group", + "//": "Not something you get in bulk, but it makes sense to be out in the back area", + "items": [ [ "afs_power_cutter", 1 ] ] + }, + { + "id": "mischw", + "type": "item_group", + "subtype": "collection", + "items": [ [ "afs_power_cutter", 5 ] ] + }, + { + "id": "book_gunref", + "type": "item_group", + "items": [ + [ "afs_textbook_shotguns", 3 ], + [ "afs_textbook_handguns", 3 ], + [ "afs_textbook_rifles", 3 ], + [ "afs_textbook_launchers", 3 ] + ] + }, + { + "id": "book_military", + "type": "item_group", + "items": [ + [ "afs_textbook_shotguns", 20 ], + [ "afs_textbook_handguns", 20 ], + [ "afs_textbook_rifles", 20 ], + [ "afs_textbook_launchers", 10 ] + ] + }, + { + "id": "textbooks", + "type": "item_group", + "items": [ + [ "afs_textbook_shotguns", 3 ], + [ "afs_textbook_handguns", 3 ], + [ "afs_textbook_rifles", 3 ], + [ "afs_textbook_launchers", 3 ], + [ "textbook_atomic", 8 ] + ] + }, + { + "id": "guns_pistol_improvised", + "type": "item_group", + "items": [ [ "v29_cheap", 10 ] ] + }, { "type": "item_group", "id": "afs_gardener_worn", @@ -104,98 +274,6 @@ [ "afs_neural_io_2", 15 ] ] }, - { - "id": "surgery", - "//": "extension of vanilla itemgroup", - "type": "item_group", - "items": [ [ "bionic_maintenance_toolkit", 20 ], [ "afs_biomaterial_4", 10 ], [ "afs_neural_io_3", 5 ] ] - }, - { - "id": "jewelry_accessories", - "type": "item_group", - "items": [ [ "afs_titanium_watch", 35 ], [ "afs_titanium_tooth", 35 ], [ "afs_titanium_ring", 35 ] ] - }, - { - "id": "rings_and_things", - "type": "item_group", - "items": [ [ "afs_titanium_watch", 35 ], [ "afs_titanium_ring", 35 ] ] - }, - { - "id": "jewelry_back", - "type": "item_group", - "items": [ [ "afs_titanium_watch", 35 ], [ "afs_titanium_ring", 35 ] ] - }, - { - "id": "jewelry_front", - "type": "item_group", - "items": [ [ "afs_titanium_watch", 35 ], [ "afs_titanium_ring", 35 ] ] - }, - { - "id": "weapons", - "type": "item_group", - "items": [ [ "afs_titanium_bat", 40 ] ] - }, - { - "id": "allsporting", - "type": "item_group", - "items": [ [ "afs_titanium_bat", 40 ] ] - }, - { - "id": "sports", - "type": "item_group", - "items": [ [ "afs_titanium_bat", 40 ] ] - }, - { - "id": "college_sports", - "type": "item_group", - "items": [ [ "afs_titanium_bat", 60 ] ] - }, - { - "id": "supplies_mechanics", - "type": "item_group", - "items": [ [ "afs_titanium_frame", 5 ] ] - }, - { - "id": "bikeshop_tools", - "type": "item_group", - "items": [ [ "afs_titanium_frame", 5 ] ] - }, - { - "type": "item_group", - "id": "steel_mill_foundry", - "items": [ [ "afs_titanium_small", 5 ], { "item": "afs_scrap_titanium", "prob": 5, "count": [ 1, 4 ] } ] - }, - { - "id": "oa_ig_rd_metal_trash", - "type": "item_group", - "items": [ [ "afs_titanium_frame", 5 ], { "item": "afs_scrap_titanium", "prob": 10, "count": [ 2, 8 ] } ] - }, - { - "id": "supplies_metal", - "type": "item_group", - "items": [ - { "item": "afs_titanium_frame", "prob": 5 }, - { "item": "afs_scrap_titanium", "prob": 5, "count": [ 2, 8 ] }, - [ "afs_titanium_small", 5 ] - ] - }, - { - "id": "clothing_watch", - "type": "item_group", - "items": [ { "item": "afs_titanium_watch", "prob": 50 } ] - }, - { - "id": "accessory_ring", - "type": "item_group", - "subtype": "distribution", - "items": [ { "item": "afs_titanium_ring", "prob": 50 } ] - }, - { - "id": "accessory_teeth", - "type": "item_group", - "subtype": "distribution", - "items": [ [ "afs_titanium_tooth", 25 ] ] - }, { "id": "swat_gear", "type": "item_group", @@ -254,29 +332,6 @@ "subtype": "collection", "items": [ [ "q_solarpack", 1 ] ] }, - { - "type": "item_group", - "id": "afs_scrapgroup", - "items": [ - [ "afs_biomaterial_1", 40 ], - [ "afs_biomaterial_2", 20 ], - [ "afs_biomaterial_3", 10 ], - [ "afs_biomaterial_4", 3 ], - [ "afs_circuitry_1", 25 ], - [ "afs_circuitry_2", 14 ], - [ "afs_circuitry_3", 6 ], - [ "afs_energy_storage_1", 30 ], - [ "afs_energy_storage_2", 19 ], - [ "afs_energy_storage_3", 2 ], - [ "afs_magnet_1", 18 ], - [ "afs_material_1", 100 ], - [ "afs_material_2", 40 ], - [ "afs_material_3", 20 ], - [ "afs_neural_io_1", 65 ], - [ "afs_neural_io_2", 10 ], - [ "plut_cell", 20 ] - ] - }, { "type": "item_group", "id": "exoticplants", diff --git a/data/mods/Aftershock/itemgroups/nuclear_reactor_groups.json b/data/mods/Aftershock/itemgroups/nuclear_reactor_groups.json new file mode 100644 index 0000000000000..f7d6375203b55 --- /dev/null +++ b/data/mods/Aftershock/itemgroups/nuclear_reactor_groups.json @@ -0,0 +1,31 @@ +[ + { + "id": "nuclear_waste", + "type": "item_group", + "subtype": "collection", + "entries": [ { "item": "nuclear_waste", "container-item": "hazardous_waste_drum", "charges": 10 } ] + }, + { + "id": "nuclear_reactor", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "nuclear_waste", "count-min": 5, "count-max": 10 }, + { "item": "nuclear_fuel", "count-min": 1, "count-max": 10 } + ] + }, + { + "id": "reactor_gear", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "hazmat_suit", "prob": 33 }, + { "item": "prussian_blue", "prob": 33 }, + { "item": "rad_monitor", "prob": 33 }, + { "item": "iodine", "prob": 33 }, + { "item": "flashlight", "prob": 33 }, + { "item": "1st_aid", "prob": 15 }, + { "item": "geiger_off", "prob": 15 } + ] + } +] diff --git a/data/mods/Aftershock/itemgroups/scrap_groups.json b/data/mods/Aftershock/itemgroups/scrap_groups.json new file mode 100644 index 0000000000000..293f81b734a66 --- /dev/null +++ b/data/mods/Aftershock/itemgroups/scrap_groups.json @@ -0,0 +1,30 @@ +[ + { + "id": "surgery", + "type": "item_group", + "items": [ [ "bionic_maintenance_toolkit", 20 ], [ "afs_biomaterial_4", 10 ], [ "afs_neural_io_3", 5 ] ] + }, + { + "type": "item_group", + "id": "afs_scrapgroup", + "items": [ + [ "afs_biomaterial_1", 40 ], + [ "afs_biomaterial_2", 20 ], + [ "afs_biomaterial_3", 10 ], + [ "afs_biomaterial_4", 3 ], + [ "afs_circuitry_1", 25 ], + [ "afs_circuitry_2", 14 ], + [ "afs_circuitry_3", 6 ], + [ "afs_energy_storage_1", 30 ], + [ "afs_energy_storage_2", 19 ], + [ "afs_energy_storage_3", 2 ], + [ "afs_magnet_1", 18 ], + [ "afs_material_1", 100 ], + [ "afs_material_2", 40 ], + [ "afs_material_3", 20 ], + [ "afs_neural_io_1", 65 ], + [ "afs_neural_io_2", 10 ], + [ "plut_cell", 20 ] + ] + } +] diff --git a/data/mods/Aftershock/itemgroups/titanium_groups.json b/data/mods/Aftershock/itemgroups/titanium_groups.json new file mode 100644 index 0000000000000..2fdbdb5687126 --- /dev/null +++ b/data/mods/Aftershock/itemgroups/titanium_groups.json @@ -0,0 +1,89 @@ +[ + { + "//": "extension of vanilla itemgroups, all adding titanium", + "id": "jewelry_accessories", + "type": "item_group", + "items": [ [ "afs_titanium_watch", 35 ], [ "afs_titanium_tooth", 35 ], [ "afs_titanium_ring", 35 ] ] + }, + { + "id": "rings_and_things", + "type": "item_group", + "items": [ [ "afs_titanium_watch", 35 ], [ "afs_titanium_ring", 35 ] ] + }, + { + "id": "jewelry_back", + "type": "item_group", + "items": [ [ "afs_titanium_watch", 35 ], [ "afs_titanium_ring", 35 ] ] + }, + { + "id": "jewelry_front", + "type": "item_group", + "items": [ [ "afs_titanium_watch", 35 ], [ "afs_titanium_ring", 35 ] ] + }, + { + "id": "weapons", + "type": "item_group", + "items": [ [ "afs_titanium_bat", 40 ] ] + }, + { + "id": "allsporting", + "type": "item_group", + "items": [ [ "afs_titanium_bat", 40 ] ] + }, + { + "id": "sports", + "type": "item_group", + "items": [ [ "afs_titanium_bat", 40 ] ] + }, + { + "id": "college_sports", + "type": "item_group", + "items": [ [ "afs_titanium_bat", 60 ] ] + }, + { + "id": "supplies_mechanics", + "type": "item_group", + "items": [ [ "afs_titanium_frame", 5 ] ] + }, + { + "id": "bikeshop_tools", + "type": "item_group", + "items": [ [ "afs_titanium_frame", 5 ] ] + }, + { + "type": "item_group", + "id": "steel_mill_foundry", + "items": [ [ "afs_titanium_small", 5 ], { "item": "afs_scrap_titanium", "prob": 5, "count": [ 1, 4 ] } ] + }, + { + "id": "oa_ig_rd_metal_trash", + "type": "item_group", + "items": [ [ "afs_titanium_frame", 5 ], { "item": "afs_scrap_titanium", "prob": 10, "count": [ 2, 8 ] } ] + }, + { + "id": "supplies_metal", + "type": "item_group", + "items": [ + { "item": "afs_titanium_frame", "prob": 5 }, + { "item": "afs_scrap_titanium", "prob": 5, "count": [ 2, 8 ] }, + [ "afs_titanium_small", 5 ] + ] + }, + { + "id": "clothing_watch", + "type": "item_group", + "items": [ { "item": "afs_titanium_watch", "prob": 50 } ] + }, + { + "id": "accessory_ring", + "type": "item_group", + "subtype": "distribution", + "items": [ { "item": "afs_titanium_ring", "prob": 50 } ] + }, + { + "id": "accessory_teeth", + "type": "item_group", + "subtype": "distribution", + "items": [ [ "afs_titanium_tooth", 25 ] ] + } +] diff --git a/data/mods/Aftershock/items/monster_drops.json b/data/mods/Aftershock/items/monster_drops.json deleted file mode 100644 index 23b6f3084a857..0000000000000 --- a/data/mods/Aftershock/items/monster_drops.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "item_group", - "subtype": "collection", - "id": "mon_afs_sentinel_lx_drops", - "entries": [ - { "item": "afs_sentinel_cloak" } - ] -} diff --git a/data/mods/Aftershock/maps/item_groups.json b/data/mods/Aftershock/maps/item_groups.json deleted file mode 100644 index e1ac01ca46cdc..0000000000000 --- a/data/mods/Aftershock/maps/item_groups.json +++ /dev/null @@ -1,243 +0,0 @@ -[ - { - "id": "afs_weapons_rare", - "type": "item_group", - "items": [ - [ "emp_gun", 3 ], - [ "laser_rifle", 5 ], - [ "v29", 7 ], - [ "afs_hydraulic_gauntlet", 3 ], - [ "afs_energy_saber_off", 3 ], - [ "ftk93", 5 ], - [ "afs_hardlight_longbow", 2 ] - ] - }, - { - "id": "afs_lab_mechanics_books", - "type": "item_group", - "items": [ - [ "manual_mechanics", 6 ], - [ "textbook_mechanics", 3 ], - [ "textbook_biodiesel", 3 ], - [ "mag_fieldrepair", 4 ], - [ "book_icef", 4 ] - ] - }, - { - "id": "bionics", - "type": "item_group", - "items": [ - [ "bn_bio_solar", 10 ], - [ "afs_bio_wind_turbine", 5 ], - [ "afs_bio_missiles", 10 ], - [ "afs_bio_linguistic_coprocessor", 10 ], - [ "afs_bio_dopamine_stimulators", 10 ], - [ "bio_blaster", 5 ] - ] - }, - { - "id": "bionics_common", - "type": "item_group", - "items": [ [ "bn_bio_solar", 10 ], [ "afs_bio_wind_turbine", 5 ], [ "afs_bio_linguistic_coprocessor", 8 ] ] - }, - { - "id": "bionics_mil", - "type": "item_group", - "items": [ [ "bio_blaster", 5 ] ] - }, - { - "id": "bionics_sci", - "type": "item_group", - "items": [ [ "bn_bio_solar", 5 ], [ "afs_bio_wind_turbine", 2 ] ] - }, - { - "id": "bionics_op", - "type": "item_group", - "items": [ - [ "bn_bio_solar", 15 ], - [ "afs_bio_wind_turbine", 10 ], - [ "afs_bio_missiles", 10 ], - [ "afs_bio_dopamine_stimulators", 10 ] - ] - }, - { - "id": "bionics_subs", - "type": "item_group", - "items": [ [ "afs_bio_missiles", 10 ], [ "afs_bio_dopamine_stimulators", 15 ] ] - }, - { - "id": "chem_lab", - "type": "item_group", - "items": [ [ "panacea", 1 ], [ "afs_calorie_pill", 5 ], [ "afs_sundew", 8 ] ] - }, - { - "id": "rare", - "type": "item_group", - "items": [ - [ "afs_calorie_pill", 10 ], - [ "afs_sundew", 10 ], - [ "afs_bag_of_holding", 1 ], - [ "afs_atomic_smartphone", 5 ], - [ "laser_pack", 10 ], - [ "ftk93", 5 ], - [ "atomic_butterchurn", 5 ] - ] - }, - { - "id": "spider", - "type": "item_group", - "items": [ [ "afs_energy_saber_off", 1 ], [ "afs_bag_of_holding", 2 ], [ "afs_hydraulic_gauntlet", 1 ] ] - }, - { - "id": "survivorzed_extra", - "type": "item_group", - "items": [ [ "afs_rolling_pin_barbed_wire", 5 ], [ "afs_chain_wrench", 8 ] ] - }, - { - "id": "camping", - "type": "item_group", - "items": [ [ "afs_rope_lighter", 10 ], [ "atomic_light", 1 ] ] - }, - { - "id": "allsporting", - "type": "item_group", - "items": [ [ "afs_rope_lighter", 10 ] ] - }, - { - "id": "traveler", - "type": "item_group", - "items": [ [ "afs_rope_lighter", 10 ] ] - }, - { - "id": "drugdealer", - "type": "item_group", - "items": [ [ "afs_atomic_smartphone", 3 ], [ "afs_bio_missiles", 8 ] ] - }, - { - "id": "kitchen", - "type": "item_group", - "items": [ [ "afs_atompot", 1 ], [ "atomic_butterchurn", 1 ] ] - }, - { - "id": "oven", - "type": "item_group", - "items": [ [ "afs_atompot", 3 ] ] - }, - { - "id": "bed", - "type": "item_group", - "items": [ [ "afs_quilt", 10 ], [ "afs_quilt_patchwork", 8 ] ] - }, - { - "id": "livingroom", - "type": "item_group", - "items": [ [ "afs_atomic_smartphone", 1 ], [ "atomic_light", 2 ] ] - }, - { - "id": "bedroom", - "type": "item_group", - "items": [ [ "afs_atomic_smartphone", 1 ], [ "atomic_light", 2 ] ] - }, - { - "id": "consumer_electronics", - "type": "item_group", - "items": [ [ "afs_atomic_smartphone", 2 ], [ "atomic_light", 4 ] ] - }, - { - "id": "electronics", - "type": "item_group", - "items": [ [ "afs_atomic_smartphone", 1 ], [ "atomic_light", 2 ] ] - }, - { - "id": "lab_dorm", - "type": "item_group", - "items": [ [ "afs_atomic_smartphone", 5 ], [ "atomic_light", 3 ] ] - }, - { - "id": "subway", - "type": "item_group", - "items": [ [ "afs_atomic_smartphone", 1 ] ] - }, - { - "id": "hardware", - "type": "item_group", - "items": [ [ "afs_power_cutter", 5 ], [ "atomic_butterchurn", 1 ] ] - }, - { - "id": "hardware_bulk", - "type": "item_group", - "//": "Not something you get in bulk, but it makes sense to be out in the back area", - "items": [ [ "afs_power_cutter", 1 ] ] - }, - { - "id": "mischw", - "type": "item_group", - "subtype": "collection", - "items": [ [ "afs_power_cutter", 5 ] ] - }, - { - "id": "book_gunref", - "type": "item_group", - "items": [ - [ "afs_textbook_shotguns", 3 ], - [ "afs_textbook_handguns", 3 ], - [ "afs_textbook_rifles", 3 ], - [ "afs_textbook_launchers", 3 ] - ] - }, - { - "id": "book_military", - "type": "item_group", - "items": [ - [ "afs_textbook_shotguns", 20 ], - [ "afs_textbook_handguns", 20 ], - [ "afs_textbook_rifles", 20 ], - [ "afs_textbook_launchers", 10 ] - ] - }, - { - "id": "textbooks", - "type": "item_group", - "items": [ - [ "afs_textbook_shotguns", 3 ], - [ "afs_textbook_handguns", 3 ], - [ "afs_textbook_rifles", 3 ], - [ "afs_textbook_launchers", 3 ], - [ "textbook_atomic", 8 ] - ] - }, - { - "id": "guns_pistol_improvised", - "type": "item_group", - "items": [ [ "v29_cheap", 10 ] ] - }, - { - "id": "nuclear_waste", - "type": "item_group", - "subtype": "collection", - "entries": [ { "item": "nuclear_waste", "container-item": "hazardous_waste_drum", "charges": 10 } ] - }, - { - "id": "nuclear_reactor", - "type": "item_group", - "subtype": "collection", - "entries": [ - { "item": "nuclear_waste", "count-min": 5, "count-max": 10 }, - { "item": "nuclear_fuel", "count-min": 1, "count-max": 10 } - ] - }, - { - "id": "reactor_gear", - "type": "item_group", - "subtype": "collection", - "entries": [ - { "item": "hazmat_suit", "prob": 33 }, - { "item": "prussian_blue", "prob": 33 }, - { "item": "rad_monitor", "prob": 33 }, - { "item": "iodine", "prob": 33 }, - { "item": "flashlight", "prob": 33 }, - { "item": "1st_aid", "prob": 15 }, - { "item": "geiger_off", "prob": 15 } - ] - } -] diff --git a/data/mods/Aftershock/items/monsterdrops.json b/data/mods/Aftershock/monsterdrops/monsterdrops.json similarity index 93% rename from data/mods/Aftershock/items/monsterdrops.json rename to data/mods/Aftershock/monsterdrops/monsterdrops.json index ac52557be4859..29c72ce088d0a 100644 --- a/data/mods/Aftershock/items/monsterdrops.json +++ b/data/mods/Aftershock/monsterdrops/monsterdrops.json @@ -1,4 +1,10 @@ [ + { + "type": "item_group", + "subtype": "collection", + "id": "mon_afs_sentinel_lx_drops", + "entries": [ { "item": "afs_sentinel_cloak" } ] + }, { "type": "item_group", "id": "tripod", From dc8519d40a1a40a2d543cf501c678cec3798ad61 Mon Sep 17 00:00:00 2001 From: martinrhan <53336429+martinrhan@users.noreply.github.com> Date: Sun, 28 Jun 2020 03:34:00 +0800 Subject: [PATCH 140/206] Fire spell ignite things (#41108) * Update magic_spell_effect.cpp * Update magic_spell_effect.cpp * Update magic.h * Update kelvinist.json * Update monsterspells.json * Update kelvinist.json * Update magic_spell_effect.cpp * Update monsterspells.json * Update monsterspells.json * edit as reqiured * Update magic_spell_effect.cpp * Update src/magic_spell_effect.cpp Co-authored-by: BevapDin Co-authored-by: BevapDin --- data/mods/Magiclysm/Spells/kelvinist.json | 4 ++-- data/mods/Magiclysm/Spells/monsterspells.json | 1 + src/magic.cpp | 1 + src/magic.h | 1 + src/magic_spell_effect.cpp | 3 +++ 5 files changed, 8 insertions(+), 2 deletions(-) diff --git a/data/mods/Magiclysm/Spells/kelvinist.json b/data/mods/Magiclysm/Spells/kelvinist.json index 9d6accf1b4be4..db7d093729da0 100644 --- a/data/mods/Magiclysm/Spells/kelvinist.json +++ b/data/mods/Magiclysm/Spells/kelvinist.json @@ -73,7 +73,7 @@ "description": "You hurl a pea-sized glowing orb that when reaches its target or an obstacle produces a pressure-less blast of searing heat.", "effect": "projectile_attack", "valid_targets": [ "self", "ally", "hostile", "ground" ], - "flags": [ "SOMATIC", "VERBAL", "NO_LEGS" ], + "flags": [ "SOMATIC", "VERBAL", "NO_LEGS", "IGNITE_FLAMMABLE" ], "max_level": 20, "min_damage": 24, "max_damage": 68, @@ -127,7 +127,7 @@ "description": "You're pretty sure you saw this in a game somewhere. You fire a short-range cone of fire.", "effect": "cone_attack", "valid_targets": [ "ally", "hostile", "ground" ], - "flags": [ "SOMATIC", "VERBAL" ], + "flags": [ "SOMATIC", "VERBAL", "IGNITE_FLAMMABLE" ], "max_level": 20, "min_damage": 8, "max_damage": 65, diff --git a/data/mods/Magiclysm/Spells/monsterspells.json b/data/mods/Magiclysm/Spells/monsterspells.json index f9e5eab85b216..f38aef607981e 100644 --- a/data/mods/Magiclysm/Spells/monsterspells.json +++ b/data/mods/Magiclysm/Spells/monsterspells.json @@ -83,6 +83,7 @@ "id": "mon_demon_fireball", "name": "Demon Fireball", "description": "This is a monster only spell.", + "flags": [ "IGNITE_FLAMMABLE" ], "valid_targets": [ "hostile", "ground", "ally", "self" ], "min_damage": 15, "max_damage": 15, diff --git a/src/magic.cpp b/src/magic.cpp index c4a81e6892421..d2ce42e5530f1 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -118,6 +118,7 @@ std::string enum_to_string( spell_flag data ) case spell_flag::PAIN_NORESIST: return "PAIN_NORESIST"; case spell_flag::WITH_CONTAINER: return "WITH_CONTAINER"; case spell_flag::SPAWN_GROUP: return "SPAWN_GROUP"; + case spell_flag::IGNITE_FLAMMABLE: return "IGNITE_FLAMMABLE"; case spell_flag::NO_FAIL: return "NO_FAIL"; case spell_flag::WONDER: return "WONDER"; case spell_flag::LAST: break; diff --git a/src/magic.h b/src/magic.h index 2f658c002889e..69a6fabf55c43 100644 --- a/src/magic.h +++ b/src/magic.h @@ -59,6 +59,7 @@ enum class spell_flag : int { NO_FAIL, // this spell cannot fail when you cast it WITH_CONTAINER, // items spawned with container SPAWN_GROUP, // spawn or summon from an item or monster group, instead of individual item/monster ID + IGNITE_FLAMMABLE, // if spell effect area has any thing flamable, a fire will be produced LAST }; diff --git a/src/magic_spell_effect.cpp b/src/magic_spell_effect.cpp index aa6739370a8f2..8b2fb636c9301 100644 --- a/src/magic_spell_effect.cpp +++ b/src/magic_spell_effect.cpp @@ -422,6 +422,9 @@ static void damage_targets( const spell &sp, Creature &caster, } sp.make_sound( target ); sp.create_field( target ); + if( sp.has_flag( spell_flag::IGNITE_FLAMMABLE ) && g->m.is_flammable( target ) ) { + g->m.add_field( target, fd_fire, 1, 10_minutes ); + } Creature *const cr = g->critter_at( target ); if( !cr ) { continue; From 2ac73d3755f6298e82ad85d8b40e8c219517cfd2 Mon Sep 17 00:00:00 2001 From: nexusmrsep Date: Sat, 27 Jun 2020 21:46:24 +0200 Subject: [PATCH 141/206] fix gas tanks spawning without charges --- data/json/items/tool/med.json | 7 ++++++- data/json/items/tool_armor.json | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/data/json/items/tool/med.json b/data/json/items/tool/med.json index c0db5ebb543c8..400eab10eaac0 100644 --- a/data/json/items/tool/med.json +++ b/data/json/items/tool/med.json @@ -126,6 +126,9 @@ "symbol": ";", "color": "light_gray", "initial_charges": 12, + "pocket_data": [ + { "pocket_type": "MAGAZINE", "airtight": true, "watertight": true, "rigid": true, "ammo_restriction": { "oxygen": 12 } } + ], "max_charges": 12, "charges_per_use": 1, "use_action": [ "OXYGEN_BOTTLE" ] @@ -175,7 +178,9 @@ "symbol": ";", "color": "light_gray", "initial_charges": 24, - "pocket_data": [ { "pocket_type": "MAGAZINE", "airtight": true, "watertight": true, "ammo_restriction": { "oxygen": 24 } } ], + "pocket_data": [ + { "pocket_type": "MAGAZINE", "airtight": true, "watertight": true, "rigid": true, "ammo_restriction": { "oxygen": 24 } } + ], "max_charges": 24, "charges_per_use": 1, "use_action": [ "OXYGEN_BOTTLE" ] diff --git a/data/json/items/tool_armor.json b/data/json/items/tool_armor.json index b5c89e26b1e6a..a0a718705bb39 100644 --- a/data/json/items/tool_armor.json +++ b/data/json/items/tool_armor.json @@ -2981,7 +2981,9 @@ "color": "light_gray", "initial_charges": 60, "ammo": "nitrox", - "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nitrox": 60 } } ], + "pocket_data": [ + { "pocket_type": "MAGAZINE", "airtight": true, "rigid": true, "watertight": true, "ammo_restriction": { "nitrox": 60 } } + ], "covers": [ "TORSO" ], "flags": [ "WATER_FRIENDLY", "BELTED", "ONLY_ONE", "STURDY", "NO_UNLOAD" ], "environmental_protection": 1, @@ -3009,7 +3011,9 @@ "symbol": ";", "color": "light_gray", "ammo": "nitrox", - "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nitrox": 60 } } ], + "pocket_data": [ + { "pocket_type": "MAGAZINE", "airtight": true, "rigid": true, "watertight": true, "ammo_restriction": { "nitrox": 60 } } + ], "charges_per_use": 1, "turns_per_charge": 60, "covers": [ "TORSO", "MOUTH" ], @@ -3038,7 +3042,9 @@ "symbol": ";", "color": "light_gray", "ammo": "nitrox", - "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nitrox": 20 } } ], + "pocket_data": [ + { "pocket_type": "MAGAZINE", "airtight": true, "rigid": true, "watertight": true, "ammo_restriction": { "nitrox": 20 } } + ], "max_charges": 20, "covers": [ "TORSO" ], "flags": [ "WATER_FRIENDLY", "BELTED", "ONLY_ONE", "STURDY", "NO_UNLOAD" ], @@ -3067,7 +3073,9 @@ "symbol": ";", "color": "light_gray", "ammo": "nitrox", - "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "nitrox": 20 } } ], + "pocket_data": [ + { "pocket_type": "MAGAZINE", "airtight": true, "rigid": true, "watertight": true, "ammo_restriction": { "nitrox": 20 } } + ], "charges_per_use": 1, "turns_per_charge": 60, "covers": [ "TORSO", "MOUTH" ], From e061dbb2c1a0c35bcb1eae2f3a8a07f62e26370e Mon Sep 17 00:00:00 2001 From: John Candlebury Date: Sat, 27 Jun 2020 21:27:18 -0600 Subject: [PATCH 142/206] Add Polymorph Spells (#41466) * c++ support for polymorph spells * Debug random polymorph spell * Magus Baleful Polymorph * Animist Soul Rend * Remove duplicated declaration How did that ever happen? * Better description for Runic Tablet * Remove unused variables * Update src/magic.cpp Co-authored-by: BevapDin * Apply suggestions from code review Co-authored-by: BevapDin * Code correction based on reviews * Fix typo on frog's description * Style code * Update data/mods/Magiclysm/Spells/debug.json * Cant polymorph into halucinations/generators. * Use Static Variable to check for "mon_generator" Co-authored-by: BevapDin Co-authored-by: Curtis Merrill --- data/mods/Magiclysm/Spells/animist.json | 24 +++++++ data/mods/Magiclysm/Spells/debug.json | 19 +++++ data/mods/Magiclysm/Spells/magus.json | 23 +++++++ .../mods/Magiclysm/itemgroups/spellbooks.json | 2 + data/mods/Magiclysm/items/spell_scrolls.json | 9 +++ data/mods/Magiclysm/items/spellbooks.json | 13 ++++ data/mods/Magiclysm/monstergroups.json | 10 +++ data/mods/Magiclysm/monsters/monsters.json | 22 ++++++ src/creature.h | 6 ++ src/magic.cpp | 21 ++++++ src/magic.h | 4 ++ src/magic_spell_effect.cpp | 69 +++++++++++++++++++ src/monster.h | 7 ++ 13 files changed, 229 insertions(+) diff --git a/data/mods/Magiclysm/Spells/animist.json b/data/mods/Magiclysm/Spells/animist.json index d437e715b6483..2433112624798 100644 --- a/data/mods/Magiclysm/Spells/animist.json +++ b/data/mods/Magiclysm/Spells/animist.json @@ -187,6 +187,30 @@ "energy_source": "MANA", "flags": [ "PERMANENT", "NO_LEGS", "CONCENTRATE" ] }, + { + "id": "soulrend", + "type": "SPELL", + "name": "Soulrend", + "description": "Violently tears the spirit from the body, and bounds the resulting shade to your will.", + "valid_targets": [ "hostile", "ally" ], + "flags": [ "NO_LEGS", "LOUD", "SOMATIC", "POLYMORPH_GROUP", "FRIENDLY_POLY" ], + "effect": "targeted_polymorph", + "effect_str": "GROUP_POLYMORPH_SHADOW", + "spell_class": "ANIMIST", + "energy_source": "MANA", + "difficulty": 15, + "min_damage": 40, + "max_damage": 140, + "damage_increment": 2.5, + "max_level": 40, + "base_casting_time": 200, + "casting_time_increment": -2.0, + "final_casting_time": 120, + "base_energy_cost": 200, + "min_range": 5, + "max_range": 30, + "range_increment": 1.0 + }, { "id": "summon_wisps", "type": "SPELL", diff --git a/data/mods/Magiclysm/Spells/debug.json b/data/mods/Magiclysm/Spells/debug.json index 00ae21011c60e..f8bb3733743a9 100644 --- a/data/mods/Magiclysm/Spells/debug.json +++ b/data/mods/Magiclysm/Spells/debug.json @@ -89,6 +89,25 @@ "base_energy_cost": 100, "energy_source": "FATIGUE" }, + { + "id": "debug_polymorph", + "type": "SPELL", + "name": "Debug polymorph", + "description": "Well you wanted to lose weight, right?", + "valid_targets": [ "hostile", "ally" ], + "flags": [ "NO_LEGS", "LOUD", "SOMATIC" ], + "effect": "targeted_polymorph", + "energy_source": "MANA", + "difficulty": 1, + "min_damage": 9999, + "max_damage": 9999, + "max_level": 1, + "base_casting_time": 10, + "base_energy_cost": 1, + "final_energy_cost": 1, + "min_range": 30, + "max_range": 30 + }, { "id": "debug_hp", "type": "SPELL", diff --git a/data/mods/Magiclysm/Spells/magus.json b/data/mods/Magiclysm/Spells/magus.json index f6d54d304ffb7..70d3f2d7e95a3 100644 --- a/data/mods/Magiclysm/Spells/magus.json +++ b/data/mods/Magiclysm/Spells/magus.json @@ -133,6 +133,29 @@ "max_duration": 12000, "duration_increment": 600 }, + { + "id": "magus_baleful_polymorph", + "type": "SPELL", + "name": "Baleful Polymorph", + "description": "Transform your enemies into frogs.", + "valid_targets": [ "hostile" ], + "flags": [ "VERBAL", "SOMATIC", "NO_LEGS" ], + "effect": "targeted_polymorph", + "effect_str": "mon_baleful_polymorph_frog", + "spell_class": "MAGUS", + "energy_source": "MANA", + "base_casting_time": 150, + "base_energy_cost": 150, + "difficulty": 8, + "max_level": 20, + "min_damage": 20, + "max_damage": 40, + "damage_increment": 2, + "damage_type": "none", + "min_range": 5, + "max_range": 30, + "range_increment": 1.5 + }, { "id": "magus_mana_beam", "type": "SPELL", diff --git a/data/mods/Magiclysm/itemgroups/spellbooks.json b/data/mods/Magiclysm/itemgroups/spellbooks.json index d4bc49915a91d..3806b2c6bef61 100644 --- a/data/mods/Magiclysm/itemgroups/spellbooks.json +++ b/data/mods/Magiclysm/itemgroups/spellbooks.json @@ -87,6 +87,7 @@ [ "spell_scroll_vicious_tentacle", 40 ], [ "spell_scroll_bio_bonespear", 20 ], [ "spell_scroll_megablast", 10 ], + [ "spell_scroll_baleful_polymorph", 20 ], [ "spell_scroll_eshaper_shardstorm", 50 ], [ "spell_scroll_fireball", 50 ], [ "spell_scroll_cone_cold", 50 ], @@ -153,6 +154,7 @@ "id": "spellbook_tier_3", "type": "item_group", "items": [ + [ "animist_shadows", 5 ], [ "magus_spellbook", 15 ], [ "magus_spellbook_move", 30 ], [ "translocate_spellbook", 20 ], diff --git a/data/mods/Magiclysm/items/spell_scrolls.json b/data/mods/Magiclysm/items/spell_scrolls.json index b929312195135..a688d765d5743 100644 --- a/data/mods/Magiclysm/items/spell_scrolls.json +++ b/data/mods/Magiclysm/items/spell_scrolls.json @@ -82,6 +82,15 @@ "description": "With an intense ritual that resembles crossfit, you manage to put some of your pain at bay.", "use_action": { "type": "learn_spell", "spells": [ "recover_pain" ] } }, + { + "type": "BOOK", + "copy-from": "spell_scroll", + "id": "spell_scroll_baleful_polymorph", + "//": "Technomancer spell", + "name": { "str": "Scroll of Baleful Polymorph", "str_pl": "Scrolls of Baleful Polymorph" }, + "description": "Transform your enemies into frogs.", + "use_action": { "type": "learn_spell", "spells": [ "magus_baleful_polymorph" ] } + }, { "type": "BOOK", "copy-from": "spell_scroll", diff --git a/data/mods/Magiclysm/items/spellbooks.json b/data/mods/Magiclysm/items/spellbooks.json index 248c3de9a628b..121c4a3fa3cbd 100644 --- a/data/mods/Magiclysm/items/spellbooks.json +++ b/data/mods/Magiclysm/items/spellbooks.json @@ -338,6 +338,19 @@ "color": "light_gray", "use_action": { "type": "learn_spell", "spells": [ "taze", "laze" ] } }, + { + "id": "animist_shadows", + "type": "BOOK", + "name": { "str": "Runic Tablet shard" }, + "//": "1 classless spell", + "description": "A small tablet of blackened stone, apparently cut from a much larger slab. Golden runes glow over its surface, and slowly shift into intelligible sentences when you stare at them.", + "weight": "4000 g", + "volume": "2500 ml", + "material": [ "stone" ], + "symbol": "?", + "color": "light_gray", + "use_action": { "type": "learn_spell", "spells": [ "soulrend" ] } + }, { "id": "translocate_spellbook", "type": "BOOK", diff --git a/data/mods/Magiclysm/monstergroups.json b/data/mods/Magiclysm/monstergroups.json index c9636e361e5af..9fcfdc9297c13 100644 --- a/data/mods/Magiclysm/monstergroups.json +++ b/data/mods/Magiclysm/monstergroups.json @@ -45,6 +45,16 @@ { "monster": "mon_lemure", "freq": 5, "cost_multiplier": 2, "pack_size": [ 1, 4 ] } ] }, + { + "type": "monstergroup", + "name": "GROUP_POLYMORPH_SHADOW", + "default": "mon_shadow", + "is_animal": true, + "monsters": [ + { "monster": "mon_shadow", "freq": 100, "cost_multiplier": 1 }, + { "monster": "mon_shadow_snake", "freq": 10, "cost_multiplier": 1 } + ] + }, { "type": "monstergroup", "name": "GROUP_WORM", diff --git a/data/mods/Magiclysm/monsters/monsters.json b/data/mods/Magiclysm/monsters/monsters.json index de043cea2e404..cb98c88e4abd0 100644 --- a/data/mods/Magiclysm/monsters/monsters.json +++ b/data/mods/Magiclysm/monsters/monsters.json @@ -307,6 +307,28 @@ "death_function": [ "NORMAL" ], "flags": [ "SEES", "NOHEAD", "POISON", "IMMOBILE", "NO_BREATHE", "PACIFIST" ] }, + { + "id": "mon_baleful_polymorph_frog", + "type": "MONSTER", + "name": { "str": "frog" }, + "description": "A conspicuously average american bullfrog. You better keep prince charming away from it.", + "default_faction": "magical_beast", + "species": [ "AMPHIBIAN" ], + "volume": "750 ml", + "weight": "1 kg", + "hp": 3, + "speed": 80, + "material": [ "flesh" ], + "symbol": "b", + "color": "green", + "melee_cut": 0, + "dodge": 6, + "harvest": "mammal_tiny", + "special_attacks": [ { "type": "leap", "cooldown": 10, "max_range": 5 } ], + "fear_triggers": [ "PLAYER_CLOSE" ], + "death_function": [ "NORMAL" ], + "flags": [ "SEES", "SMELLS", "HEARS", "SWIMS" ] + }, { "id": "mon_lemure", "type": "MONSTER", diff --git a/src/creature.h b/src/creature.h index e6d22a3a57fc0..be16c662cfc7a 100644 --- a/src/creature.h +++ b/src/creature.h @@ -242,6 +242,12 @@ class Creature virtual const avatar *as_avatar() const { return nullptr; } + virtual monster *as_monster() { + return nullptr; + } + virtual const monster *as_monster() const { + return nullptr; + } /** return the direction the creature is facing, for sdl horizontal flip **/ FacingDirection facing = FacingDirection::RIGHT; /** Returns true for non-real Creatures used temporarily; i.e. fake NPC's used for turret fire. */ diff --git a/src/magic.cpp b/src/magic.cpp index d2ce42e5530f1..116f265e473ee 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -101,6 +101,8 @@ std::string enum_to_string( spell_flag data ) case spell_flag::IGNORE_WALLS: return "IGNORE_WALLS"; case spell_flag::HOSTILE_SUMMON: return "HOSTILE_SUMMON"; case spell_flag::HOSTILE_50: return "HOSTILE_50"; + case spell_flag::FRIENDLY_POLY: return "FRIENDLY_POLY"; + case spell_flag::POLYMORPH_GROUP: return "POLYMORPH_GROUP"; case spell_flag::SILENT: return "SILENT"; case spell_flag::LOUD: return "LOUD"; case spell_flag::VERBAL: return "VERBAL"; @@ -219,6 +221,7 @@ void spell_type::load( const JsonObject &jo, const std::string & ) effect_map{ { "pain_split", spell_effect::pain_split }, { "target_attack", spell_effect::target_attack }, + { "targeted_polymorph", spell_effect::targeted_polymorph }, { "projectile_attack", spell_effect::projectile_attack }, { "cone_attack", spell_effect::cone_attack }, { "line_attack", spell_effect::line_attack }, @@ -1790,6 +1793,22 @@ void spellcasting_callback::draw_spell_info( const spell &sp, const uilist *menu } damage_string = string_format( "%s %d %s", _( "Summon" ), sp.damage(), _( monster_name ) ); aoe_string = string_format( "%s: %d", _( "Spell Radius" ), sp.aoe() ); + } else if( fx == "targeted_polymorph" ) { + std::string monster_name = sp.effect_data(); + if( sp.has_flag( spell_flag::POLYMORPH_GROUP ) ) { + // TODO: Get a more user-friendly group name + if( MonsterGroupManager::isValidMonsterGroup( mongroup_id( sp.effect_data() ) ) ) { + monster_name = _( "random creature" ); + } else { + debugmsg( "Unknown monster group: %s", sp.effect_data() ); + } + } else if( monster_name.empty() ) { + monster_name = _( "random creature" ); + } else { + monster_name = mtype_id( sp.effect_data() )->nname(); + } + damage_string = string_format( _( "Targets under: %dhp become a %s" ), sp.damage(), + monster_name ); } else if( fx == "ter_transform" ) { aoe_string = string_format( "%s: %s", _( "Spell Radius" ), sp.aoe_string() ); } @@ -1982,6 +2001,8 @@ static void draw_spellbook_info( const spell_type &sp, uilist *menu ) has_damage_type = sp.min_damage > 0 && sp.max_damage > 0; } else if( fx == "spawn_item" || fx == "summon_monster" ) { damage_string = _( "Spawned" ); + } else if( fx == "targeted_polymorph" ) { + damage_string = _( "Threshold" ); } else if( fx == "recover_energy" ) { damage_string = _( "Recover" ); } else if( fx == "teleport_random" ) { diff --git a/src/magic.h b/src/magic.h index 69a6fabf55c43..a46ad99c80cce 100644 --- a/src/magic.h +++ b/src/magic.h @@ -41,6 +41,8 @@ enum class spell_flag : int { SWAP_POS, // a projectile spell swaps the positions of the caster and target HOSTILE_SUMMON, // summon spell always spawns a hostile monster HOSTILE_50, // summoned monster spawns friendly 50% of the time + POLYMORPH_GROUP, // polymorph spell chooses a monster from a group + FRIENDLY_POLY, // polymorph spell makes the monster friendly SILENT, // spell makes no noise at target LOUD, // spell makes extra noise at target VERBAL, // spell makes noise at caster location, mouth encumbrance affects fail % @@ -518,6 +520,8 @@ void teleport_random( const spell &sp, Creature &caster, const tripoint & ); void pain_split( const spell &, Creature &, const tripoint & ); void target_attack( const spell &sp, Creature &caster, const tripoint &epicenter ); +void targeted_polymorph( const spell &sp, Creature &caster, const tripoint &target ); + void projectile_attack( const spell &sp, Creature &caster, const tripoint &target ); void cone_attack( const spell &sp, Creature &caster, diff --git a/src/magic_spell_effect.cpp b/src/magic_spell_effect.cpp index 8b2fb636c9301..f3aed9077037f 100644 --- a/src/magic_spell_effect.cpp +++ b/src/magic_spell_effect.cpp @@ -32,6 +32,7 @@ #include "magic_spell_effect_helpers.h" #include "magic_teleporter_list.h" #include "magic_ter_furn_transform.h" +#include "monstergenerator.h" #include "map.h" #include "map_iterator.h" #include "messages.h" @@ -52,6 +53,8 @@ #include "vehicle.h" #include "vpart_position.h" +static const mtype_id mon_generator( "mon_generator" ); + namespace spell_detail { struct line_iterable { @@ -481,6 +484,72 @@ void spell_effect::target_attack( const spell &sp, Creature &caster, } } +static void magical_polymorph( monster &victim, Creature &caster, const spell &sp ) +{ + mtype_id new_id = mtype_id( sp.effect_data() ); + + if( sp.has_flag( spell_flag::POLYMORPH_GROUP ) ) { + const mongroup_id group_id( sp.effect_data() ); + new_id = MonsterGroupManager::GetRandomMonsterFromGroup( group_id ); + } + + // if effect_str is empty, we become a random monster of close difficulty + if( new_id.is_empty() ) { + int victim_diff = victim.type->difficulty; + const std::vector &mtypes = MonsterGenerator::generator().get_all_mtypes(); + for( int difficulty_variance = 1; difficulty_variance < 2048; difficulty_variance *= 2 ) { + unsigned int random_entry = rng( 0, mtypes.size() ); + unsigned int iter = random_entry + 1; + while( iter != random_entry && new_id.is_empty() ) { + if( iter >= mtypes.size() ) { + iter = 0; + } + if( ( mtypes[iter].id != victim.type->id ) && ( std::abs( mtypes[iter].difficulty - victim_diff ) + <= difficulty_variance ) ) { + if( !mtypes[iter].in_species( species_id( "HALLUCINATION" ) ) && + mtypes[iter].id != mon_generator ) { + new_id = mtypes[iter].id; + break; + } + } + iter++; + } + } + } + + if( !new_id.is_valid() ) { + debugmsg( "magical_polymorph called with an invalid monster id" ); + return; + } + + if( g->u.sees( victim ) ) { + add_msg( _( "The %s transforms into a %s." ), victim.type->nname(), + new_id->nname() ); + } + victim.poly( new_id ); + + if( sp.has_flag( spell_flag::FRIENDLY_POLY ) ) { + if( caster.as_player() ) { + victim.friendly = -1; + } else { + victim.make_ally( *caster.as_monster() ); + } + } +} + +void spell_effect::targeted_polymorph( const spell &sp, Creature &caster, const tripoint &target ) +{ + //we only target monsters for now. + if( monster *const victim = g->critter_at( target ) ) { + if( victim->get_hp() < sp.damage() ) { + magical_polymorph( *victim, caster, sp ); + return; + } + } + //victim had high hp, or isn't a monster. + caster.add_msg_if_player( m_bad, _( "Your target resists transformation." ) ); +} + void spell_effect::cone_attack( const spell &sp, Creature &caster, const tripoint &target ) { diff --git a/src/monster.h b/src/monster.h index 8bb35fbb54f3c..d4e71015b717f 100644 --- a/src/monster.h +++ b/src/monster.h @@ -95,6 +95,13 @@ class monster : public Creature bool is_monster() const override { return true; } + monster *as_monster() override { + return this; + } + const monster *as_monster() const override { + return this; + } + void poly( const mtype_id &id ); bool can_upgrade(); From f7d8d2d95feacd5960b100460a0745bfab120ddf Mon Sep 17 00:00:00 2001 From: anothersimulacrum <42699974+anothersimulacrum@users.noreply.github.com> Date: Sat, 27 Jun 2020 21:01:51 -0700 Subject: [PATCH 143/206] Fix crash on reviving zombie before game starts When corpses were placed during mapgen for advanced starts, it could lead to a crash when the game attempted to revive them, and queried the map, which didn't exist yet, for furniture at a point. --- src/game.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/game.cpp b/src/game.cpp index 9abc56945f598..6f7f853c8e19b 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -5254,6 +5254,11 @@ bool game::revive_corpse( const tripoint &p, item &it ) debugmsg( "Tried to revive a non-corpse." ); return false; } + // If this is not here, the game may attempt to spawn a monster before the map exists, + // leading to it querying for furniture, and crashing. + if( g->new_game ) { + return false; + } shared_ptr_fast newmon_ptr = make_shared_fast ( it.get_mtype()->id ); if( it.has_var( "zombie_form" ) ) { // if the monster can reanimate has a zombie From 20c6554aa80e135bfea93f07cc38f93ba87cfa5b Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Sat, 27 Jun 2020 23:03:06 -0700 Subject: [PATCH 144/206] add longest_side to entry_tools.json --- data/json/items/tool/entry_tools.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/data/json/items/tool/entry_tools.json b/data/json/items/tool/entry_tools.json index 4a2cf6dea0626..a07baa6ad5ae0 100644 --- a/data/json/items/tool/entry_tools.json +++ b/data/json/items/tool/entry_tools.json @@ -6,6 +6,7 @@ "description": "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.", "weight": "500 g", "volume": "1 L", + "longest_side": "60 cm", "price": 1300, "price_postapoc": 500, "to_hit": -1, @@ -39,8 +40,9 @@ "type": "TOOL", "name": { "str": "ice axe" }, "description": "This is an ice axe with hammer on its head, a multi-purpose hiking and climbing tool used by mountaineers. It is sturdy enough to pry open closed doors or lift manhole covers.", - "weight": "500 g", + "weight": "239 g", "volume": "750 ml", + "longest_side": "45 cm", "price": 5000, "price_postapoc": 500, "to_hit": -2, @@ -59,8 +61,9 @@ "type": "TOOL", "name": { "str": "makeshift crowbar" }, "description": "This is a pipe whose ends have been bent and hammered flat to resemble a crowbar. Use it to open locked crates without destroying them, or to lift manhole covers. You could also wield it to fight with, in a pinch.", - "weight": "1250 g", + "weight": "1000 g", "volume": "1 L", + "longest_side": "60 cm", "price": 0, "price_postapoc": 10, "to_hit": -1, From f642c5b830b760cce3f1d83eed45b7486a0661a5 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Sun, 28 Jun 2020 01:26:20 -0700 Subject: [PATCH 145/206] Prevent items from being the same volume as they can contain (#41647) * Warn on items having pockets exactly the same size No item should be able to perfectly contain a copy of itself. New volume values are 105% previous ones. * Fix containers with same volume as capacity Values used are 1.05x the previous volume --- data/json/items/armor/storage.json | 40 ++++++++++----------- data/json/items/containers.json | 22 ++++++------ data/json/items/generic/dining_kitchen.json | 36 ++++++++++--------- data/json/items/tool/container.json | 2 +- data/json/items/tool/cooking.json | 6 ++-- data/json/items/tool/med.json | 2 +- data/json/items/tool/misc.json | 2 +- data/mods/Aftershock/items/items.json | 2 +- data/mods/TEST_DATA/items.json | 6 ++-- src/item_contents.cpp | 2 +- 10 files changed, 61 insertions(+), 59 deletions(-) diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index 33ed9b9068752..9065d3482c926 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -35,7 +35,7 @@ "name": { "str": "hiking backpack" }, "description": "A large sized hiking backpack with plenty of storage space.", "weight": "2291 g", - "volume": "14 L", + "volume": "14700 ml", "price": 10000, "price_postapoc": 1000, "material": [ "leather" ], @@ -108,7 +108,7 @@ "name": { "str": "giant novelty backpack" }, "description": "A huge fabric backpack made mostly as a joke before the Cataclysm. Now, it's still rather silly, but it can store a lot of stuff.", "weight": "1200 g", - "volume": "8750 ml", + "volume": "9186 ml", "price": 4500, "price_postapoc": 750, "material": [ "cotton" ], @@ -224,7 +224,7 @@ "name": { "str": "laundry basket" }, "description": "A plastic basket meant for storing and hauling clothing.", "weight": "680 g", - "volume": "50 L", + "volume": "52500 ml", "price": 75, "price_postapoc": 10, "to_hit": -2, @@ -338,7 +338,7 @@ "symbol": "]", "looks_like": "jerrypack", "material": [ "wood", "cotton" ], - "volume": "15 L", + "volume": "15750 ml", "price_postapoc": 50, "pocket_data": [ { @@ -366,7 +366,7 @@ "name": { "str": "briefcase" }, "description": "Useful for carrying money, documents, or smuggled goods.", "weight": "1700 g", - "volume": "15 L", + "volume": "15750 ml", "price": 24000, "price_postapoc": 50, "to_hit": -2, @@ -398,7 +398,7 @@ "name": { "str": "violin case" }, "description": "Useful to carry your precious musical instrument around protected from any harm.", "weight": "2800 g", - "volume": "10 L", + "volume": "10500 ml", "price": 24000, "price_postapoc": 50, "to_hit": -4, @@ -433,7 +433,7 @@ "looks_like": "backpack", "color": "red", "weight": "411 g", - "volume": "2 L", + "volume": "2100 ml", "//": "REI Co-op 22-liter daypack costs $54.95, so ballpark to $55", "price": 5500, "price_postapoc": 500, @@ -523,7 +523,7 @@ "name": { "str": "tactical dump pouch", "str_pl": "tactical dump pouches" }, "description": "An expandable pouch secured with straps. Provides a bit of extra storage with minimal encumbrance.", "weight": "288 g", - "volume": "500 ml", + "volume": "525 ml", "price": 4500, "price_postapoc": 250, "to_hit": 2, @@ -556,7 +556,7 @@ "name": { "str": "fanny pack" }, "description": "Provides a bit of extra storage, with minimal encumbrance.", "weight": "272 g", - "volume": "1000 ml", + "volume": "1050 ml", "price": 3500, "to_hit": 2, "bashing": 1, @@ -708,7 +708,7 @@ "name": { "str": "jerrypack" }, "description": "A jerrycan modified to be worn in a similar manner to a backpack.", "weight": "1763 g", - "volume": "10 L", + "volume": "10500 ml", "price": 1450, "price_postapoc": 250, "to_hit": -1, @@ -769,7 +769,7 @@ "name": { "str": "pair of drop leg pouches", "str_pl": "pairs of drop leg pouches" }, "description": "A set of pouches that can be worn on the thighs using buckled straps. This variety is favored by the military.", "weight": "205 g", - "volume": "1 L", + "volume": "1050 ml", "price": 3000, "price_postapoc": 250, "material": [ "cotton" ], @@ -870,7 +870,7 @@ "//": "KA101's ran about $90 but is ballistic nylon. Bit tougher than the DDA model.", "description": "Light and easy to wear, but doesn't offer much storage.", "weight": "690 g", - "volume": "2500 ml", + "volume": "2625 ml", "price": 7900, "price_postapoc": 250, "to_hit": 1, @@ -958,7 +958,7 @@ "name": { "str": "petpack" }, "description": "Before the Cataclysm this would allow your four-legged friend to see the world, now it's used to shield them from the world.", "weight": "900 g", - "volume": "35 L", + "volume": "36750 ml", "price": 7900, "price_postapoc": 250, "material": [ "cotton", "plastic" ], @@ -1164,7 +1164,7 @@ "//": "Depends on if you're getting a cheap school version or something more like a range bag.", "description": "A simple single-sling backpack. Easier to access than a normal backpack, but can't comfortably hold as much.", "weight": "566 g", - "volume": "2 L", + "volume": "2100 ml", "price": 2900, "price_postapoc": 750, "bashing": 1, @@ -1196,7 +1196,7 @@ "name": { "str": "straw basket" }, "description": "Hand made straw basket. Carry it with you for extra storage.", "weight": "100 g", - "volume": "10 L", + "volume": "10500 ml", "price": 200, "price_postapoc": 50, "to_hit": -1, @@ -1228,7 +1228,7 @@ "//": "You drag it along with you, so it taking a hit is Rare.", "description": "A huge wheeled suitcase used mainly for transporting clothes and other possessions during trips, provides a decent amount of storage but hauling it around is neither fast nor comfortable.", "weight": "5000 g", - "volume": "110 L", + "volume": "115500 ml", "price": 21000, "price_postapoc": 500, "material": [ "plastic" ], @@ -1258,7 +1258,7 @@ "name": { "str": "suitcase" }, "description": "A mid-sized wheeled suitcase used mainly for transporting clothes and other possessions during trips, provides a decent amount of storage but hauling it around is not exactly comfortable.", "weight": "3000 g", - "volume": "45 L", + "volume": "47250 ml", "price": 21000, "price_postapoc": 250, "material": [ "cotton" ], @@ -1287,7 +1287,7 @@ "name": { "str": "survivor duffel bag" }, "description": "A custom-built heavy duffel bag. Durable and carefully crafted to hold as much stuff as possible.", "weight": "1000 g", - "volume": "7500 ml", + "volume": "7875 ml", "price": 24000, "price_postapoc": 3250, "material": [ "leather", "cotton" ], @@ -1317,7 +1317,7 @@ "name": { "str": "survivor backpack" }, "description": "A custom-built backpack. Durable and carefully crafted to hold as much stuff as possible.", "weight": "600 g", - "volume": "5000 ml", + "volume": "5250 ml", "price": 24000, "price_postapoc": 2250, "material": [ "leather", "cotton" ], @@ -1377,7 +1377,7 @@ "name": { "str": "survivor runner pack" }, "description": "A custom-built lightweight runner pack. Durable and carefully crafted to hold as much stuff as possible.", "weight": "440 g", - "volume": "4 L", + "volume": "4200 ml", "price": 24000, "price_postapoc": 2500, "material": [ "leather", "cotton" ], diff --git a/data/json/items/containers.json b/data/json/items/containers.json index 9046b973bad10..f088a75b17cfc 100644 --- a/data/json/items/containers.json +++ b/data/json/items/containers.json @@ -6,7 +6,7 @@ "name": { "str": "2.5L canteen" }, "description": "A large plastic water canteen, with a 2.5 liter capacity and carrying strap.", "weight": "155 g", - "volume": "2500 ml", + "volume": "2625 ml", "price": 1000, "price_postapoc": 50, "to_hit": -1, @@ -34,7 +34,7 @@ "name": { "str": "30 gallon barrel" }, "description": "A huge plastic barrel with a resealable lid.", "weight": "6800 g", - "volume": "112500 ml", + "volume": "118125 ml", "price": 5000, "price_postapoc": 250, "to_hit": -5, @@ -60,7 +60,7 @@ "name": { "str": "steel drum (100L)", "str_pl": "steel drums (100L)" }, "description": "A huge steel barrel with a resealable lid.", "weight": "12000 g", - "volume": "100 L", + "volume": "105 L", "price": 8000, "price_postapoc": 250, "to_hit": -5, @@ -86,7 +86,7 @@ "name": { "str": "steel drum (200L)", "str_pl": "steel drums (200L)" }, "description": "A massive steel barrel with a resealable lid.", "weight": "20000 g", - "volume": "200 L", + "volume": "210 L", "price": 10000, "price_postapoc": 250, "to_hit": -5, @@ -246,7 +246,7 @@ "name": { "str": "glass bottle" }, "description": "A resealable glass bottle, holds 750 ml of liquid.", "weight": "200 g", - "volume": "750 ml", + "volume": "787 ml", "price": 0, "price_postapoc": 10, "to_hit": 1, @@ -302,7 +302,7 @@ "name": { "str": "condiment bottle" }, "description": "An inverted plastic bottle for condiments. Still sealed from factory, preserves content from rot until opened.", "weight": "19 g", - "volume": "500 ml", + "volume": "525 ml", "pocket_data": [ { "pocket_type": "CONTAINER", @@ -330,7 +330,7 @@ "name": { "str": "condiment bottle" }, "description": "An inverted plastic bottle for condiments.", "weight": "19 g", - "volume": "500 ml", + "volume": "525 ml", "pocket_data": [ { "pocket_type": "CONTAINER", @@ -463,7 +463,7 @@ "name": { "str": "cardboard box", "str_pl": "cardboard boxes" }, "description": "A sturdy cardboard box, about the size of a banana box. Great for packing.", "weight": "850 g", - "volume": "2 L", + "volume": "2100 ml", "//": "Volume is much lower than the actual volume of a box this size because presumably if it's in your pack, it isn't empty and full of air; and if it's in your hands, it's irrelevant what the volume is.", "price": 0, "price_postapoc": 0, @@ -487,7 +487,7 @@ "name": { "str": "large cardboard box", "str_pl": "large cardboard boxes" }, "description": "A very large cardboard box, the sort children would have loved to hide in, when there were still children.", "weight": "1250 g", - "volume": "3 L", + "volume": "3150 ml", "//": "Volume is much lower than the actual volume of a box this size because presumably if it's in your pack, it isn't empty and full of air; and if it's in your hands, it's irrelevant what the volume is.", "price": 0, "price_postapoc": 10, @@ -816,7 +816,7 @@ "name": { "str": "plastic cup" }, "description": "A small, vacuum formed cup.", "weight": "6 g", - "volume": "250 ml", + "volume": "262 ml", "price": 0, "price_postapoc": 0, "to_hit": 1, @@ -1620,7 +1620,7 @@ "name": { "str": "small cardboard box of tea bags", "str_pl": "small cardboard boxes of tea bags" }, "description": "A very small cardboard box with tea brand written on it.", "weight": "10 g", - "volume": "100 ml", + "volume": "105 ml", "price": 0, "price_postapoc": 0, "material": [ "cardboard" ], diff --git a/data/json/items/generic/dining_kitchen.json b/data/json/items/generic/dining_kitchen.json index d8e161dce906b..2b542c6a0738d 100644 --- a/data/json/items/generic/dining_kitchen.json +++ b/data/json/items/generic/dining_kitchen.json @@ -58,7 +58,7 @@ "price_postapoc": 0, "material": [ "ceramic" ], "weight": "322 g", - "volume": "250 ml", + "volume": "262 ml", "bashing": 3, "to_hit": -1 }, @@ -73,7 +73,7 @@ "price_postapoc": 0, "material": [ "glass" ], "weight": "322 g", - "volume": "250 ml", + "volume": "262 ml", "bashing": 3, "to_hit": -1 }, @@ -88,7 +88,7 @@ "price_postapoc": 0, "material": [ "tin" ], "weight": "262 g", - "volume": "250 ml", + "volume": "262 ml", "bashing": 2, "to_hit": -1 }, @@ -103,7 +103,7 @@ "price_postapoc": 0, "material": [ "plastic" ], "weight": "130 g", - "volume": "250 ml", + "volume": "262 ml", "bashing": 1, "to_hit": -1 }, @@ -138,7 +138,7 @@ "symbol": ")", "description": "A perfectly ordinary ceramic soup bowl.", "copy-from": "base_ceramic_dish", - "volume": "500 ml", + "volume": "525 ml", "pocket_data": [ { "max_contains_volume": "500 ml", @@ -154,6 +154,7 @@ "type": "GENERIC", "category": "other", "id": "ceramic_cup", + "volume": "262 ml", "name": { "str": "ceramic cup" }, "symbol": "u", "description": "A light ceramic teacup. Quite classy.", @@ -300,6 +301,7 @@ "type": "GENERIC", "category": "other", "id": "wine_glass", + "volume": "262 ml", "name": { "str": "wine glass", "str_pl": "wine glasses" }, "proportional": { "weight": 0.5 }, "symbol": "Y", @@ -324,7 +326,7 @@ "symbol": "u", "description": "A glass bowl for soup or dessert.", "copy-from": "base_glass_dish", - "volume": "500 ml", + "volume": "525 ml", "pocket_data": [ { "max_contains_volume": "500 ml", @@ -373,7 +375,7 @@ "symbol": "u", "description": "A plastic bowl with a convenient sealing lid. Holds 750 ml of liquid.", "copy-from": "base_plastic_dish", - "volume": "750 ml", + "volume": "787 ml", "pocket_data": [ { "pocket_type": "CONTAINER", @@ -703,7 +705,7 @@ "material": [ "steel" ], "color": "light_gray", "weight": "550 g", - "volume": "2 L", + "volume": "2100 ml", "bashing": 6, "pocket_data": [ { @@ -725,7 +727,7 @@ "material": [ "iron" ], "color": "dark_gray", "weight": "3000 g", - "volume": "2 L", + "volume": "2100 ml", "bashing": 10, "pocket_data": [ { @@ -747,7 +749,7 @@ "material": [ "copper" ], "color": "light_red", "weight": "750 g", - "volume": "2 L", + "volume": "2100 ml", "bashing": 6, "to_hit": -2, "pocket_data": [ @@ -770,7 +772,7 @@ "material": [ "ceramic" ], "color": "white", "weight": "650 g", - "volume": "2 L", + "volume": "2100 ml", "bashing": 4, "pocket_data": [ { @@ -811,7 +813,7 @@ "name": { "str": "canning pot" }, "description": "A very large 25 liter pot, primarily meant for canning food in glass jars via the water bath method, though it can cook normal foods just as well. Canning foods with it will require a lot of water. If you're only canning a couple of jars at a time, you'd fill it up with rocks or something to displace the water above the lids.", "weight": "5625 g", - "volume": "25 L", + "volume": "26250 ml", "price": 20000, "to_hit": -2, "bashing": 10, @@ -841,7 +843,7 @@ "material": [ "iron" ], "color": "dark_gray", "weight": "2628 g", - "volume": "1 L", + "volume": "1050 ml", "bashing": 12, "to_hit": -3, "pocket_data": [ @@ -893,7 +895,7 @@ "color": "light_red", "looks_like": "pan", "weight": "628 g", - "volume": "1 L", + "volume": "1050 ml", "bashing": 7, "to_hit": -2, "pocket_data": [ @@ -915,7 +917,7 @@ "name": { "str": "makeshift pot" }, "description": "A sheet of metal crudely hammered into a cooking pot. Good enough to cook food and boil water, but not as useful as proper cookware.", "weight": "6000 g", - "volume": "1 L", + "volume": "1050 ml", "price": 200, "price_postapoc": 5, "to_hit": 1, @@ -942,7 +944,7 @@ "name": { "str": "makeshift copper pot" }, "description": "A cooking pot crudely hammered out of copper. Good enough to cook food and boil water, but not as useful as proper cookware.", "weight": "884 g", - "volume": "1 L", + "volume": "1050 ml", "price": 200, "price_postapoc": 5, "to_hit": 1, @@ -972,7 +974,7 @@ "material": [ "steel" ], "color": "light_gray", "weight": "728 g", - "volume": "1500 ml", + "volume": "1575 ml", "bashing": 5, "pocket_data": [ { "max_contains_volume": "1500 ml", "max_contains_weight": "2 kg", "watertight": true, "rigid": true } ], "delete": { "qualities": [ [ "COOK", 3 ] ] } diff --git a/data/json/items/tool/container.json b/data/json/items/tool/container.json index 0daed8a9d5915..e643ff47cf46d 100644 --- a/data/json/items/tool/container.json +++ b/data/json/items/tool/container.json @@ -6,7 +6,7 @@ "name": { "str": "steel bottle" }, "description": "A stainless steel water bottle, holds 750ml of liquid.", "weight": "200 g", - "volume": "750 ml", + "volume": "787 ml", "price": 0, "price_postapoc": 10, "to_hit": 1, diff --git a/data/json/items/tool/cooking.json b/data/json/items/tool/cooking.json index f0a9298c97859..8e627371380a3 100644 --- a/data/json/items/tool/cooking.json +++ b/data/json/items/tool/cooking.json @@ -177,7 +177,7 @@ "name": { "str": "clay pot" }, "description": "A crude clay pot with lid used for cooking.", "weight": "480 g", - "volume": "2 L", + "volume": "2100 ml", "price": 2500, "price_postapoc": 10, "bashing": 1, @@ -210,7 +210,7 @@ "name": { "str": "clay teapot" }, "description": "A clay teapot. Now all you need is tea and water.", "weight": "429 g", - "volume": "750 ml", + "volume": "787 ml", "price": 2000, "price_postapoc": 10, "to_hit": 1, @@ -958,7 +958,7 @@ "name": { "str": "teapot" }, "description": "A small metal teapot. Teatime wouldn't be complete without one.", "weight": "229 g", - "volume": "500 ml", + "volume": "525 ml", "price": 1000, "price_postapoc": 10, "to_hit": 2, diff --git a/data/json/items/tool/med.json b/data/json/items/tool/med.json index c0db5ebb543c8..2c846b64cfe19 100644 --- a/data/json/items/tool/med.json +++ b/data/json/items/tool/med.json @@ -187,7 +187,7 @@ "name": { "str": "blood draw kit" }, "description": "This is a kit for drawing blood, including a test tube for holding the sample. Use this tool to draw blood, either from yourself or from a corpse you are standing on.", "weight": "13 g", - "volume": "250 ml", + "volume": "262 ml", "price": 3000, "price_postapoc": 100, "to_hit": -3, diff --git a/data/json/items/tool/misc.json b/data/json/items/tool/misc.json index 2d1a06abe02ba..6a6e614a7bdbe 100644 --- a/data/json/items/tool/misc.json +++ b/data/json/items/tool/misc.json @@ -833,7 +833,7 @@ "name": { "str": "sandbox kit" }, "description": "A plastic bucket holding a small spade and rake, perfect to build sand castles!", "weight": "250 g", - "volume": "1 L", + "volume": "1050 ml", "price": 300, "price_postapoc": 3, "material": [ "plastic" ], diff --git a/data/mods/Aftershock/items/items.json b/data/mods/Aftershock/items/items.json index 9673c7f78054e..7251757f304da 100644 --- a/data/mods/Aftershock/items/items.json +++ b/data/mods/Aftershock/items/items.json @@ -20,7 +20,7 @@ "description": "A wide, shallow basin used to hold liquid, hammered from a piece of sheet metal. Ideal for collecting water.", "weight": "5 kg", "looks_like": "ceramic_bowl", - "volume": "2500 ml", + "volume": "2625 ml", "price": 1000, "to_hit": -1, "bashing": 1, diff --git a/data/mods/TEST_DATA/items.json b/data/mods/TEST_DATA/items.json index ee58dd44714f8..0da4fd0a1ea26 100644 --- a/data/mods/TEST_DATA/items.json +++ b/data/mods/TEST_DATA/items.json @@ -559,7 +559,7 @@ "name": "TEST gallon jug", "description": "A standard plastic jug used for milk and household cleaning chemicals.", "weight": "190 g", - "volume": "3750 ml", + "volume": "3938 ml", "price": 0, "to_hit": 1, "material": [ "plastic" ], @@ -662,7 +662,7 @@ "name": "TEST briefcase", "description": "Useful for carrying money, documents, or smuggled goods.", "weight": "1700 g", - "volume": "15 L", + "volume": "15750 ml", "price": 24000, "to_hit": -2, "bashing": 5, @@ -919,7 +919,7 @@ "name": { "str": "test box" }, "description": "A simple 1-liter cardboard box of deliberately undefined proportions.", "weight": "100 g", - "volume": "1 L", + "volume": "1050 ml", "price": 0, "price_postapoc": 25, "material": [ "cardboard" ], diff --git a/src/item_contents.cpp b/src/item_contents.cpp index 04165d4e253bc..cea650f10942b 100644 --- a/src/item_contents.cpp +++ b/src/item_contents.cpp @@ -251,7 +251,7 @@ bool item_contents::bigger_on_the_inside( const units::volume &container_volume } } } - return container_volume < min_logical_volume; + return container_volume <= min_logical_volume; } size_t item_contents::size() const From 3e75c4be4d6a83fecd5f8ad0a168602cc3beaf58 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Sun, 28 Jun 2020 11:40:26 +0200 Subject: [PATCH 146/206] Fix connector drawing in bionic menu (#41625) --- src/bionics_ui.cpp | 13 +++++++++---- src/creature.h | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/bionics_ui.cpp b/src/bionics_ui.cpp index db94ec0b93062..25f2f09cb55ec 100644 --- a/src/bionics_ui.cpp +++ b/src/bionics_ui.cpp @@ -267,13 +267,16 @@ static void draw_description( const catacurses::window &win, const bionic &bio ) } static void draw_connectors( const catacurses::window &win, const point &start, - int last_x, const bionic_id &bio_id ) + int last_x, const bionic_id &bio_id, const std::map &bp_to_pos ) { const int LIST_START_Y = 7; // first: pos_y, second: occupied slots std::vector> pos_and_num; for( const std::pair, size_t> &elem : bio_id->occupied_bodyparts ) { - pos_and_num.emplace_back( static_cast( elem.first->token ) + LIST_START_Y, elem.second ); + auto pos = bp_to_pos.find( elem.first ); + if( pos != bp_to_pos.end() ) { + pos_and_num.emplace_back( pos->second + LIST_START_Y, elem.second ); + } } if( pos_and_num.empty() || !get_option < bool >( "CBM_SLOTS_ENABLED" ) ) { return; @@ -525,12 +528,14 @@ void player::power_bionics() int max_width = 0; std::vector bps; + std::map bp_to_pos; for( const bodypart_id &bp : get_all_body_parts() ) { const int total = get_total_bionics_slots( bp ); const std::string s = string_format( "%s: %d/%d", body_part_name_as_heading( bp, 1 ), total - get_free_bionics_slots( bp ), total ); bps.push_back( s ); + bp_to_pos.emplace( bp.id(), bps.size() - 1 ); max_width = std::max( max_width, utf8_width( s ) ); } const int pos_x = WIDTH - 2 - max_width; @@ -567,11 +572,11 @@ void player::power_bionics() if( is_highlighted && menu_mode != EXAMINING && get_option < bool >( "CBM_SLOTS_ENABLED" ) ) { const bionic_id bio_id = ( *current_bionic_list )[i]->id; draw_connectors( wBio, point( utf8_width( desc ) + 3, list_start_y + i - scroll_position ), - pos_x - 2, bio_id ); + pos_x - 2, bio_id, bp_to_pos ); // redraw highlighted (occupied) body parts for( const std::pair, size_t> &elem : bio_id->occupied_bodyparts ) { - const int i = static_cast( elem.first->token ); + const int i = bp_to_pos[elem.first]; mvwprintz( wBio, point( pos_x, i + list_start_y ), c_yellow, bps[i] ); } } diff --git a/src/creature.h b/src/creature.h index be16c662cfc7a..f17b3a727eafd 100644 --- a/src/creature.h +++ b/src/creature.h @@ -600,7 +600,7 @@ class Creature bodypart_id get_random_body_part( bool main = false ) const; /** - * Returns body parts in order in which they should be displayed. + * Returns body parts this creature have. * @param only_main If true, only displays parts that can have hit points */ std::vector get_all_body_parts( bool only_main = false ) const; From 5e97a26c628eeefaf88a7f0727cb79128e1d3395 Mon Sep 17 00:00:00 2001 From: Andrey Bienkowski Date: Sun, 28 Jun 2020 15:38:47 +0300 Subject: [PATCH 147/206] Wrap all lone top level json objects in arrays Convert ``` { "type": "foo", ... } ``` into ``` [ { "type": "foo", ... } ] ``` More uniform json structure makes using jq and writing tooling easier. --- data/mods/DinoMod/hints.json | 30 +- data/mods/DinoMod/lab_notes.json | 24 +- data/mods/DinoMod/mapgen/DinoLabFinale.json | 170 +- .../gunmods/gg_gunmods_blacklist.json | 48 +- .../magazines/gg_magazines_blacklist.json | 14 +- .../My_Sweet_Cataclysm/sweet_snippets.json | 22 +- data/mods/default.json | 19 +- .../Examples/office_template.json | 147 +- .../Examples/office_terrain_template.json | 32 +- .../Examples/output_office_template.json | 2980 ++++++++--------- .../output_office_terrain_template.json | 322 +- 11 files changed, 1900 insertions(+), 1908 deletions(-) diff --git a/data/mods/DinoMod/hints.json b/data/mods/DinoMod/hints.json index aa9a0929281f8..ba04cc89fbe86 100644 --- a/data/mods/DinoMod/hints.json +++ b/data/mods/DinoMod/hints.json @@ -1,14 +1,16 @@ -{ - "type": "snippet", - "category": "hint", - "text": [ - "I've seen some big dinosaurs out there. I know that should be scary, but all I felt was hungry.", - "I think those little dinosaurs are kind of cute, like a cat kind of. Do you think they eat cat food?", - "Dinosaurs are a bow hunter's best friend. Feathers forever!", - "A buddy of mine wandered close to the swamps and was eaten by a T-Rex, a big lizard. I'd be careful unless you have a gun and plenty of ammo.", - "I hear the zombies have been in the swamps. Bad news if they bite a dinosaur before it bites them.", - "I know there aren't alligators in the sewer, but I heard there was some kind of big lizard down there. Probably not a good idea to check.", - "Some of those big dinosaurs seem halfway all right. I bet if you fed them something nice and gave them a pet you could ride them like a pony. Or maybe they'd eat you instead.", - "One time I found a strange egg out in the woods. It was probably a dinosaur, but I cooked it and it was pretty good!" - ] -} +[ + { + "type": "snippet", + "category": "hint", + "text": [ + "I've seen some big dinosaurs out there. I know that should be scary, but all I felt was hungry.", + "I think those little dinosaurs are kind of cute, like a cat kind of. Do you think they eat cat food?", + "Dinosaurs are a bow hunter's best friend. Feathers forever!", + "A buddy of mine wandered close to the swamps and was eaten by a T-Rex, a big lizard. I'd be careful unless you have a gun and plenty of ammo.", + "I hear the zombies have been in the swamps. Bad news if they bite a dinosaur before it bites them.", + "I know there aren't alligators in the sewer, but I heard there was some kind of big lizard down there. Probably not a good idea to check.", + "Some of those big dinosaurs seem halfway all right. I bet if you fed them something nice and gave them a pet you could ride them like a pony. Or maybe they'd eat you instead.", + "One time I found a strange egg out in the woods. It was probably a dinosaur, but I cooked it and it was pretty good!" + ] + } +] diff --git a/data/mods/DinoMod/lab_notes.json b/data/mods/DinoMod/lab_notes.json index b1a4ed17a7c93..1c510ded13218 100644 --- a/data/mods/DinoMod/lab_notes.json +++ b/data/mods/DinoMod/lab_notes.json @@ -1,11 +1,13 @@ -{ - "type": "snippet", - "category": "lab_notes", - "text": [ - "Research on our visitors is proceeding nicely. The raptor DNA is of special interest, with some novel protein chains that may lead to medical breakthroughs.", - "Research proceeds apace on our visitors. While Operation Major Laser did not receive enough funding as hoped, our more humble bio-operator protocols were already prepared and are proceeding ahead of schedule. The hosts are most receptive to improvement.", - "Dr. Yoshimi has been reprimanded for unauthorized contact with the procompsignathids. Disgusting behavior, and a terrible example to the junior researchers.", - "Dr. Yoshimi has escaped, along with an unknown number of dinosaurs. Unfortunately, we have bigger problems with XE037.", - "Strange sounds have been reported from the swamp nearby. An enhanced security team was dispatched, but has not returned in 48 hours. The facility is on lockdown. We can’t let them get back in." - ] -} +[ + { + "type": "snippet", + "category": "lab_notes", + "text": [ + "Research on our visitors is proceeding nicely. The raptor DNA is of special interest, with some novel protein chains that may lead to medical breakthroughs.", + "Research proceeds apace on our visitors. While Operation Major Laser did not receive enough funding as hoped, our more humble bio-operator protocols were already prepared and are proceeding ahead of schedule. The hosts are most receptive to improvement.", + "Dr. Yoshimi has been reprimanded for unauthorized contact with the procompsignathids. Disgusting behavior, and a terrible example to the junior researchers.", + "Dr. Yoshimi has escaped, along with an unknown number of dinosaurs. Unfortunately, we have bigger problems with XE037.", + "Strange sounds have been reported from the swamp nearby. An enhanced security team was dispatched, but has not returned in 48 hours. The facility is on lockdown. We can’t let them get back in." + ] + } +] diff --git a/data/mods/DinoMod/mapgen/DinoLabFinale.json b/data/mods/DinoMod/mapgen/DinoLabFinale.json index 79b63086be8de..5a49179a2fd33 100644 --- a/data/mods/DinoMod/mapgen/DinoLabFinale.json +++ b/data/mods/DinoMod/mapgen/DinoLabFinale.json @@ -1,87 +1,87 @@ -{ - "//": "dino operating theater", - "type": "mapgen", - "method": "json", - "om_terrain": [ - "lab_finale_1level" - ], - "weight": 75, - "object": { - "rotation": [ 0, 3 ], - "fill_ter": "t_thconc_floor", - "rows": [ - "..cccccc.|...|,,,|..|,,,", - "c........|...|,,,|.6|,,,", - "c..Ccxc..|...|,,,g..g,,,", - "c........g...|,,,g..g,,,", - "c........g...|,,,L..L,,,", - "......llS|...|---|..|---", - "--gg-G---|...|,,,|..|,,,", - ".............|,,,g..g,,,", - ".............|,,,g..g,,,", - ".............|,,,L..L,,,", - "........|-ggg----|..|---", - "........|r,,,r|t--G-|...", - "........g,,/,,L.....G...", - "........g,,?,,|-ggg-|...", - "........|r,,,r|.........", - "........|-ggg-|.........", - "........................", - "........................", - "..........dd7dd.........", - "..........d.h.d.........", - "...ddxdd.........ddxdd..", - "...d.h.d.........d.h.d..", - "........................", - "........................" - ], - "palettes": [ "lab_palette", "lab_loot_research" ], - "furniture": { "?": "f_autodoc", "/": "f_autodoc_couch" }, - "terrain": { - ",": "t_floor_blue", - "C": "t_centrifuge", - "?": "t_floor_blue", - "/": "t_floor_blue", - "7": "t_console", - "r": "t_floor_blue" - }, - "place_loot": [ - { "item": "anesthetic_kit", "x": 15, "y": 11, "repeat": [ 4, 9 ], "ammo": 100 }, - { "item": "id_science", "x": 7, "y": 11, "chance": 100 }, - { "item": "cattlefodder", "x": 7, "y": 11, "chance": 100 } - ], - "mapping": { - "r": { - "items": [ - { "item": "bionics_common", "chance": 40 }, - { "item": "bionics", "chance": 20 }, - { "item": "hospital_medical_items", "chance": 80 }, - { "item": "dissection", "chance": 60 } - ] - } - }, - "computers": { - "6": { - "name": "DinoLab Operating Theater Controls", - "security": 0, - "options": [ { "name": "EMERGENCY EVAC - OPEN ALL DOORS", "action": "open", "security": 0 } ], - "failures": [ { "action": "damage" }, { "action": "shutdown" } ] +[ + { + "//": "dino operating theater", + "type": "mapgen", + "method": "json", + "om_terrain": [ "lab_finale_1level" ], + "weight": 75, + "object": { + "rotation": [ 0, 3 ], + "fill_ter": "t_thconc_floor", + "rows": [ + "..cccccc.|...|,,,|..|,,,", + "c........|...|,,,|.6|,,,", + "c..Ccxc..|...|,,,g..g,,,", + "c........g...|,,,g..g,,,", + "c........g...|,,,L..L,,,", + "......llS|...|---|..|---", + "--gg-G---|...|,,,|..|,,,", + ".............|,,,g..g,,,", + ".............|,,,g..g,,,", + ".............|,,,L..L,,,", + "........|-ggg----|..|---", + "........|r,,,r|t--G-|...", + "........g,,/,,L.....G...", + "........g,,?,,|-ggg-|...", + "........|r,,,r|.........", + "........|-ggg-|.........", + "........................", + "........................", + "..........dd7dd.........", + "..........d.h.d.........", + "...ddxdd.........ddxdd..", + "...d.h.d.........d.h.d..", + "........................", + "........................" + ], + "palettes": [ "lab_palette", "lab_loot_research" ], + "furniture": { "?": "f_autodoc", "/": "f_autodoc_couch" }, + "terrain": { + ",": "t_floor_blue", + "C": "t_centrifuge", + "?": "t_floor_blue", + "/": "t_floor_blue", + "7": "t_console", + "r": "t_floor_blue" }, - "7": { - "name": "DinoLab Operating Theater Controls", - "security": 2, - "options": [ { "name": "UNLOCK AUTODOC DOOR", "action": "unlock", "security": 6 } ], - "failures": [ { "action": "damage" }, { "action": "shutdown" } ] - } - }, - "place_monster": [ - { "monster": [ "mon_deino_bio_op" ], "x": [ 14, 16 ], "y": [ 1, 4 ], "chance": 90 }, - { "monster": [ "mon_deino_bio_op" ], "x": [ 14, 16 ], "y": [ 6, 9 ], "chance": 90 }, - { "monster": [ "mon_deino_bio_op" ], "x": [ 21, 22 ], "y": [ 1, 4 ], "chance": 90 }, - { "monster": [ "mon_deino_bio_op" ], "x": [ 21, 22 ], "y": [ 6, 9 ], "chance": 90 }, - { "monster": [ "mon_trice_bio_op" ], "x": [ 11, 13 ], "y": [ 13, 14 ], "chance": 100 }, - { "monster": "mon_zeinonychus", "x": [ 15, 19 ], "y": 12, "chance": 90, "repeat": [ 1, 2 ] }, - { "monster": "mon_zeinonychus", "x": [ 9, 10 ], "y": [ 12, 13 ] } - ] + "place_loot": [ + { "item": "anesthetic_kit", "x": 15, "y": 11, "repeat": [ 4, 9 ], "ammo": 100 }, + { "item": "id_science", "x": 7, "y": 11, "chance": 100 }, + { "item": "cattlefodder", "x": 7, "y": 11, "chance": 100 } + ], + "mapping": { + "r": { + "items": [ + { "item": "bionics_common", "chance": 40 }, + { "item": "bionics", "chance": 20 }, + { "item": "hospital_medical_items", "chance": 80 }, + { "item": "dissection", "chance": 60 } + ] + } + }, + "computers": { + "6": { + "name": "DinoLab Operating Theater Controls", + "security": 0, + "options": [ { "name": "EMERGENCY EVAC - OPEN ALL DOORS", "action": "open", "security": 0 } ], + "failures": [ { "action": "damage" }, { "action": "shutdown" } ] + }, + "7": { + "name": "DinoLab Operating Theater Controls", + "security": 2, + "options": [ { "name": "UNLOCK AUTODOC DOOR", "action": "unlock", "security": 6 } ], + "failures": [ { "action": "damage" }, { "action": "shutdown" } ] + } + }, + "place_monster": [ + { "monster": [ "mon_deino_bio_op" ], "x": [ 14, 16 ], "y": [ 1, 4 ], "chance": 90 }, + { "monster": [ "mon_deino_bio_op" ], "x": [ 14, 16 ], "y": [ 6, 9 ], "chance": 90 }, + { "monster": [ "mon_deino_bio_op" ], "x": [ 21, 22 ], "y": [ 1, 4 ], "chance": 90 }, + { "monster": [ "mon_deino_bio_op" ], "x": [ 21, 22 ], "y": [ 6, 9 ], "chance": 90 }, + { "monster": [ "mon_trice_bio_op" ], "x": [ 11, 13 ], "y": [ 13, 14 ], "chance": 100 }, + { "monster": "mon_zeinonychus", "x": [ 15, 19 ], "y": 12, "chance": 90, "repeat": [ 1, 2 ] }, + { "monster": "mon_zeinonychus", "x": [ 9, 10 ], "y": [ 12, 13 ] } + ] + } } -} +] diff --git a/data/mods/Generic_Guns/gunmods/gg_gunmods_blacklist.json b/data/mods/Generic_Guns/gunmods/gg_gunmods_blacklist.json index 338c6338da274..dcdc92531250c 100644 --- a/data/mods/Generic_Guns/gunmods/gg_gunmods_blacklist.json +++ b/data/mods/Generic_Guns/gunmods/gg_gunmods_blacklist.json @@ -1,23 +1,25 @@ -{ - "type": "ITEM_BLACKLIST", - "whitelist": false, - "items": [ - "lemat_revolver_shotgun", - "llink", - "dias", - "M6_shotgun", - "ksg_aux_shotgun", - "ksg25_aux_shotgun", - "combination_gun_shotgun", - "combination_gun_shotgun_pipe", - "belt_clip", - "retool_ar15_300blk", - "ts12_aux_shotgun", - "ts12_aux_shotgun2", - "lwfeed", - "lead_barrel_big", - "lead_barrel_heavy_duty", - "inter_bayonet", - "factory_handguard" - ] -} +[ + { + "type": "ITEM_BLACKLIST", + "whitelist": false, + "items": [ + "lemat_revolver_shotgun", + "llink", + "dias", + "M6_shotgun", + "ksg_aux_shotgun", + "ksg25_aux_shotgun", + "combination_gun_shotgun", + "combination_gun_shotgun_pipe", + "belt_clip", + "retool_ar15_300blk", + "ts12_aux_shotgun", + "ts12_aux_shotgun2", + "lwfeed", + "lead_barrel_big", + "lead_barrel_heavy_duty", + "inter_bayonet", + "factory_handguard" + ] + } +] diff --git a/data/mods/Generic_Guns/magazines/gg_magazines_blacklist.json b/data/mods/Generic_Guns/magazines/gg_magazines_blacklist.json index 5c231166b1920..3283ee853d85c 100644 --- a/data/mods/Generic_Guns/magazines/gg_magazines_blacklist.json +++ b/data/mods/Generic_Guns/magazines/gg_magazines_blacklist.json @@ -1,7 +1,7 @@ -{ - "type": "ITEM_BLACKLIST", - "whitelist": false, - "items": [ - "m74_clip" - ] -} +[ + { + "type": "ITEM_BLACKLIST", + "whitelist": false, + "items": [ "m74_clip" ] + } +] diff --git a/data/mods/My_Sweet_Cataclysm/sweet_snippets.json b/data/mods/My_Sweet_Cataclysm/sweet_snippets.json index 4a0690dd0d4f3..01424e780f204 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_snippets.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_snippets.json @@ -1,10 +1,12 @@ -{ - "type": "snippet", - "category": "flier", - "text": [ - { - "id": "flier_my_sweet_cataclysm_1", - "text": "A flyer for some kind of candy. It shows a picture of a gleaming human made of smooth candy looking at you in terror. \"SugarKin the first life-size human candy! Are you a real monster? Will you be able to devour it all?\"" - } - ] -} +[ + { + "type": "snippet", + "category": "flier", + "text": [ + { + "id": "flier_my_sweet_cataclysm_1", + "text": "A flyer for some kind of candy. It shows a picture of a gleaming human made of smooth candy looking at you in terror. \"SugarKin the first life-size human candy! Are you a real monster? Will you be able to devour it all?\"" + } + ] + } +] diff --git a/data/mods/default.json b/data/mods/default.json index 0b73848d036ac..75f02b0fd2ec8 100644 --- a/data/mods/default.json +++ b/data/mods/default.json @@ -1,10 +1,9 @@ -{ - "type": "MOD_INFO", - "ident": "dev:default", - "name": "default", - "description": "contains all the mods recommended by the developers", - "dependencies": [ - "dda", - "no_npc_food" - ] -} +[ + { + "type": "MOD_INFO", + "ident": "dev:default", + "name": "default", + "description": "contains all the mods recommended by the developers", + "dependencies": [ "dda", "no_npc_food" ] + } +] diff --git a/utilities/building-utility/Examples/office_template.json b/utilities/building-utility/Examples/office_template.json index e51049741c8bf..3a43af797385c 100644 --- a/utilities/building-utility/Examples/office_template.json +++ b/utilities/building-utility/Examples/office_template.json @@ -1,84 +1,75 @@ -{ - "type" : "mapgen", - "om_terrain" : ["office_tower_"], +[ + { + "type": "mapgen", + "om_terrain": [ "office_tower_" ], "method": "json", "weight": 250, "_Building_Utility": { - "cell_map": { - "object_replace": [ - "object", - "rows" - ] - }, - "cell_num": { - "string_format": { - "office_tower_%s": [ - "om_terrain" - ] - } - } + "cell_map": { "object_replace": [ "object", "rows" ] }, + "cell_num": { "string_format": { "office_tower_%s": [ "om_terrain" ] } } }, "object": { - "fill_ter": "t_floor", - "rows": [], - "terrain": { - "/": "t_sky", - "~": "t_rock", - ">": "t_stairs_down", - "<": "t_stairs_up", - ".": "t_floor", - " ": "t_dirt", - "x": "t_console_broken", - ",": "t_pavement_y", - "_": "t_pavement", - "%": "t_shrub", - "+": "t_door_c", - "{": "t_rubble", - ")": "t_wreckage", - "}": "t_manhole_cover", - "@": "t_floor", - "2": "t_utility_light", - "b": "t_dirt", - "c": "t_floor", - "D": "t_door_metal_c", - "d": "t_floor", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "h": "t_floor", - "I": "t_column", - "k": "t_floor", - "L": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "^": "t_floor", - "p": "t_floor", - "R": "t_railing_v", - "r": "t_floor", - "S": "t_floor", - "s": "t_sidewalk", - "T": "t_floor", - "u": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "z": "t_floor" - }, - "furniture": { - "@": "f_bed", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "^": "f_indoor_plant", - "r": "f_rack", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "z": "f_crate_c" - } + "fill_ter": "t_floor", + "rows": [ ], + "terrain": { + "/": "t_sky", + "~": "t_rock", + ">": "t_stairs_down", + "<": "t_stairs_up", + ".": "t_floor", + " ": "t_dirt", + "x": "t_console_broken", + ",": "t_pavement_y", + "_": "t_pavement", + "%": "t_shrub", + "+": "t_door_c", + "{": "t_rubble", + ")": "t_wreckage", + "}": "t_manhole_cover", + "@": "t_floor", + "2": "t_utility_light", + "b": "t_dirt", + "c": "t_floor", + "D": "t_door_metal_c", + "d": "t_floor", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "h": "t_floor", + "I": "t_column", + "k": "t_floor", + "L": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "^": "t_floor", + "p": "t_floor", + "R": "t_railing_v", + "r": "t_floor", + "S": "t_floor", + "s": "t_sidewalk", + "T": "t_floor", + "u": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "z": "t_floor" + }, + "furniture": { + "@": "f_bed", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "^": "f_indoor_plant", + "r": "f_rack", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "z": "f_crate_c" + } } -} + } +] diff --git a/utilities/building-utility/Examples/office_terrain_template.json b/utilities/building-utility/Examples/office_terrain_template.json index 42a483c55d15b..19c342d1488fc 100644 --- a/utilities/building-utility/Examples/office_terrain_template.json +++ b/utilities/building-utility/Examples/office_terrain_template.json @@ -1,19 +1,13 @@ -{ - "type" : "overmap_terrain", - "id" : "office_tower_", - "name" : "Office Tower", - "sym" : 84, - "color" : "white", - "see_cost" : 5, - "mondensity" : 2, - "sidewalk" : true, - "_Building_Utility" : { - "cell_num" : { - "string_format" : { - "office_tower_%d" : [ - "id" - ] - } - } - } -} +[ + { + "type": "overmap_terrain", + "id": "office_tower_", + "name": "Office Tower", + "sym": 84, + "color": "white", + "see_cost": 5, + "mondensity": 2, + "sidewalk": true, + "_Building_Utility": { "cell_num": { "string_format": { "office_tower_%d": [ "id" ] } } } + } +] diff --git a/utilities/building-utility/Examples/output_office_template.json b/utilities/building-utility/Examples/output_office_template.json index afd655c0584f9..74632d67ac7a5 100644 --- a/utilities/building-utility/Examples/output_office_template.json +++ b/utilities/building-utility/Examples/output_office_template.json @@ -1,1506 +1,1506 @@ [ - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~|--------------------", - "~~~|,_____,_____,_____,s", - "~~~|,_____,_____,_____,s", - "~~~|,_____,_____,_____,s", - "~~~|,_____,_____,_____,s", - "~~~|,_____,_____,_____,s", - "~~~|,_____,_____,_____,s", - "~~~|____________________", - "~~~|____________________", - "~~~|____________________", - "~~~|____________________", - "~~~|____________________", - "~~~|____________________", - "~~~|___,,___,____,____,s", - "~~~|__,,,,__,____,____,s", - "~~~|___,,___,____,____,s", - "~~~|___,,___,____,____,s", - "~~~|________,____,____,s", - "~~~|________,____,____,s", - "~~~|________|---|---|HHG", - "~~~|________|.R<|EEE|...", - "~~~|________|.R.|EEED..." - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_1", - "type": "mapgen", - "weight": 250 + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~|--------------------", + "~~~|,_____,_____,_____,s", + "~~~|,_____,_____,_____,s", + "~~~|,_____,_____,_____,s", + "~~~|,_____,_____,_____,s", + "~~~|,_____,_____,_____,s", + "~~~|,_____,_____,_____,s", + "~~~|____________________", + "~~~|____________________", + "~~~|____________________", + "~~~|____________________", + "~~~|____________________", + "~~~|____________________", + "~~~|___,,___,____,____,s", + "~~~|__,,,,__,____,____,s", + "~~~|___,,___,____,____,s", + "~~~|___,,___,____,____,s", + "~~~|________,____,____,s", + "~~~|________,____,____,s", + "~~~|________|---|---|HHG", + "~~~|________|.R<|EEE|...", + "~~~|________|.R.|EEED..." + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~", - "--------------------|~~~", - "s,_____,_____,_____,|~~~", - "s,_____,_____,_____,|~~~", - "s,_____,_____,_____,|~~~", - "s,_____,_____,_____,|~~~", - "s,_____,_____,_____,|~~~", - "s,_____,_____,_____,|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "s,____,____,________|~~~", - "s,____,____,________|~~~", - "s,____,____,________|~~~", - "s,____,____,________|~~~", - "s,____,____,________|~~~", - "s,____,____,________|~~~", - "GHH|---|---|________|~~~", - "...|xEE|.R<|________|~~~", - "...DEEE|.R.|___,,___|~~~" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_2", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_1", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~", + "--------------------|~~~", + "s,_____,_____,_____,|~~~", + "s,_____,_____,_____,|~~~", + "s,_____,_____,_____,|~~~", + "s,_____,_____,_____,|~~~", + "s,_____,_____,_____,|~~~", + "s,_____,_____,_____,|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "s,____,____,________|~~~", + "s,____,____,________|~~~", + "s,____,____,________|~~~", + "s,____,____,________|~~~", + "s,____,____,________|~~~", + "s,____,____,________|~~~", + "GHH|---|---|________|~~~", + "...|xEE|.R<|________|~~~", + "...DEEE|.R.|___,,___|~~~" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "~~~|________|...|EEED...", - "~~~|________|...|EEx|...", - "~~~|________|-+-|---|HHG", - "~~~|____________________", - "~~~|____________________", - "~~~|____________________", - "~~~|____________________", - "~~~|____,,______,,______", - "~~~|___,,,,_____,,______", - "~~~|____,,_____,,,,__xs_", - "~~~|____,,______,,___ss_", - "~~~|-|XXXXXX||XXXXXX|---", - "~~~|~|EEEEEE||EEEEEE|~~~", - "~~~|||EEEEEE||EEEEEE|~~~", - "~~~||xEEEEEE||EEEEEE||~~", - "~~~|||EEEEEE||EEEEEEx|~~", - "~~~|~|EEEEEE||EEEEEE||~~", - "~~~|~|EEEEEE||EEEEEE|~~~", - "~~~|~|------||------|~~~", - "~~~|--------------------", - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_3", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_2", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "~~~|________|...|EEED...", + "~~~|________|...|EEx|...", + "~~~|________|-+-|---|HHG", + "~~~|____________________", + "~~~|____________________", + "~~~|____________________", + "~~~|____________________", + "~~~|____,,______,,______", + "~~~|___,,,,_____,,______", + "~~~|____,,_____,,,,__xs_", + "~~~|____,,______,,___ss_", + "~~~|-|XXXXXX||XXXXXX|---", + "~~~|~|EEEEEE||EEEEEE|~~~", + "~~~|||EEEEEE||EEEEEE|~~~", + "~~~||xEEEEEE||EEEEEE||~~", + "~~~|||EEEEEE||EEEEEEx|~~", + "~~~|~|EEEEEE||EEEEEE||~~", + "~~~|~|EEEEEE||EEEEEE|~~~", + "~~~|~|------||------|~~~", + "~~~|--------------------", + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "...DEEE|...|___,,___|~~~", - "...|EEE|...|__,,,,__|~~~", - "GHH|---|-+-|___,,___|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "____________________|~~~", - "|___________________|~~~", - "|___________________|~~~", - "|,_____,_____,_____,|~~~", - "|,_____,_____,_____,|~~~", - "|,_____,_____,_____,|~~~", - "|,_____,_____,_____,|~~~", - "|,_____,_____,_____,|~~~", - "|,_____,_____,_____,|~~~", - "|-------------------|~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~", - "~~~~~~~~~~~~~~~~~~~~~~~~" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_4", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_3", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "...DEEE|...|___,,___|~~~", + "...|EEE|...|__,,,,__|~~~", + "GHH|---|-+-|___,,___|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "____________________|~~~", + "|___________________|~~~", + "|___________________|~~~", + "|,_____,_____,_____,|~~~", + "|,_____,_____,_____,|~~~", + "|,_____,_____,_____,|~~~", + "|,_____,_____,_____,|~~~", + "|,_____,_____,_____,|~~~", + "|,_____,_____,_____,|~~~", + "|-------------------|~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~", + "~~~~~~~~~~~~~~~~~~~~~~~~" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "ssssssssssssssssssssssss", - "ssssssssssssssssssssssss", - "ss ", - "ss%%%%%%%%%%%%%%%%%%%%%%", - "ss%|-HH-|-HH-|-HH-|HH|--", - "ss%Vdcxl|dxdl|lddx|..|.S", - "ss%Vdh..|dh..|..hd|..+..", - "ss%|-..-|-..-|-..-|..|--", - "ss%V.................|.T", - "ss%V.................|..", - "ss%|-..-|-..-|-..-|..|--", - "ss%V.h..|..hd|..hd|..|..", - "ss%Vdxdl|^dxd|.xdd|..G..", - "ss%|----|----|----|..G..", - "ss%|llll|..hnnh......|..", - "ss%V.................|..", - "ss%V.ddd..........|+-|..", - "ss%|..hd|.hh.ceocc|.l|..", - "ss%|----|---------|--|..", - "ss%Vcdcl|...............", - "ss%V.h..+...............", - "ss%V...^|...|---|---|...", - "ss%|----|...||EEE|...", - "ss%|rrrr|...|.R.|EEED..." - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_5", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_4", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "ssssssssssssssssssssssss", + "ssssssssssssssssssssssss", + "ss ", + "ss%%%%%%%%%%%%%%%%%%%%%%", + "ss%|-HH-|-HH-|-HH-|HH|--", + "ss%Vdcxl|dxdl|lddx|..|.S", + "ss%Vdh..|dh..|..hd|..+..", + "ss%|-..-|-..-|-..-|..|--", + "ss%V.................|.T", + "ss%V.................|..", + "ss%|-..-|-..-|-..-|..|--", + "ss%V.h..|..hd|..hd|..|..", + "ss%Vdxdl|^dxd|.xdd|..G..", + "ss%|----|----|----|..G..", + "ss%|llll|..hnnh......|..", + "ss%V.................|..", + "ss%V.ddd..........|+-|..", + "ss%|..hd|.hh.ceocc|.l|..", + "ss%|----|---------|--|..", + "ss%Vcdcl|...............", + "ss%V.h..+...............", + "ss%V...^|...|---|---|...", + "ss%|----|...||EEE|...", + "ss%|rrrr|...|.R.|EEED..." + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "ssssssssssssssssssssssss", - "ssssssssssssssssssssssss", - " ss", - "%%%%%%%%%%%%%%%%%%%%%%ss", - "--|---|--HHHH-HHHH--|%ss", - ".T|..l|............^|%ss", - "..|-+-|...hhhhhhh...V%ss", - "--|...G...nnnnnnn...V%ss", - ".S|...G...nnnnnnn...V%ss", - "..+...|...hhhhhhh...V%ss", - "--|...|.............|%ss", - "..|...|-------------|%ss", - "..G....|l.......dxd^|%ss", - "..G....G...h....dh..V%ss", - "..|....|............V%ss", - "..|....|------|llccc|%ss", - "..|...........|-----|%ss", - "..|...........|...ddV%ss", - "..|----|---|......hdV%ss", - ".......+...|..|l...dV%ss", - ".......|rrr|..|-----|%ss", - "...|---|---|..|l.dddV%ss", - "...|xEE||......hdV%ss", - "...DEEE|.R.|..|.....V%ss" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_6", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_5", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "ssssssssssssssssssssssss", + "ssssssssssssssssssssssss", + " ss", + "%%%%%%%%%%%%%%%%%%%%%%ss", + "--|---|--HHHH-HHHH--|%ss", + ".T|..l|............^|%ss", + "..|-+-|...hhhhhhh...V%ss", + "--|...G...nnnnnnn...V%ss", + ".S|...G...nnnnnnn...V%ss", + "..+...|...hhhhhhh...V%ss", + "--|...|.............|%ss", + "..|...|-------------|%ss", + "..G....|l.......dxd^|%ss", + "..G....G...h....dh..V%ss", + "..|....|............V%ss", + "..|....|------|llccc|%ss", + "..|...........|-----|%ss", + "..|...........|...ddV%ss", + "..|----|---|......hdV%ss", + ".......+...|..|l...dV%ss", + ".......|rrr|..|-----|%ss", + "...|---|---|..|l.dddV%ss", + "...|xEE||......hdV%ss", + "...DEEE|.R.|..|.....V%ss" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "ss%|....+...|...|EEED...", - "ss%|----|...|...|EEx|...", - "ss%Vcdc^|...|-+-|---|...", - "ss%Vch..+...............", - "ss%V....|...............", - "ss%|----|-|-+--ccc--|...", - "ss%|..C..C|.....h..r|-+-", - "sss=......+..h.....r|...", - "ss%|r..CC.|.ddd....r|T.S", - "ss%|------|---------|---", - "ss%|~~~~~~~~~~~~~~~~~~~~", - "ss%|~|------||------|~~~", - "ss%|~|EEEEEE||EEEEEE|~~~", - "ss%|||EEEEEE||EEEEEE|~~~", - "ss%||xEEEEEE||EEEEEE||~~", - "ss%|||EEEEEE||EEEEEEx|~~", - "ss%|~|EEEEEE||EEEEEE||~~", - "ss%|~|EEEEEE||EEEEEE|~~~", - "ss%|~|XXXXXX||XXXXXX|~~~", - "ss%|-|__,,__||__,,__|---", - "ss%% x_,,,,_ __,,__ %%", - "ss __,,__ _,,,,_ ", - "ssssss__,,__ss__,,__ssss", - "ssssss______ss______ssss" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_7", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_6", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "ss%|....+...|...|EEED...", + "ss%|----|...|...|EEx|...", + "ss%Vcdc^|...|-+-|---|...", + "ss%Vch..+...............", + "ss%V....|...............", + "ss%|----|-|-+--ccc--|...", + "ss%|..C..C|.....h..r|-+-", + "sss=......+..h.....r|...", + "ss%|r..CC.|.ddd....r|T.S", + "ss%|------|---------|---", + "ss%|~~~~~~~~~~~~~~~~~~~~", + "ss%|~|------||------|~~~", + "ss%|~|EEEEEE||EEEEEE|~~~", + "ss%|||EEEEEE||EEEEEE|~~~", + "ss%||xEEEEEE||EEEEEE||~~", + "ss%|||EEEEEE||EEEEEEx|~~", + "ss%|~|EEEEEE||EEEEEE||~~", + "ss%|~|EEEEEE||EEEEEE|~~~", + "ss%|~|XXXXXX||XXXXXX|~~~", + "ss%|-|__,,__||__,,__|---", + "ss%% x_,,,,_ __,,__ %%", + "ss __,,__ _,,,,_ ", + "ssssss__,,__ss__,,__ssss", + "ssssss______ss______ssss" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "...DEEE|...|..|-----|%ss", - "...|EEE|...|..|^...lV%ss", - "...|---|-+-|......hdV%ss", - "...........G..|..dddV%ss", - "...........G..|-----|%ss", - ".......|---|..|...ddV%ss", - "|+-|...|...+......hdV%ss", - "|.l|...|rr.|.^|l...dV%ss", - "|--|...|---|--|-----|%ss", - "|...........c.......V%ss", - "|.......cxh.c.bbbbb.Vsss", - "|.......ccccc.......Gsss", - "|...................Gsss", - "|...................Vsss", - "|b..................Gsss", - "|b..................Gsss", - "|b..................Vsss", - "|b............bbbbb.V%ss", - "|...................|%ss", - "--HHHHHGGHHGGHHHHH--|%ss", - "%%%%% ssssssss %%%%%%%ss", - " ssssssss ss", - "ssssssssssssssssssssssss", - "ssssssssssssssssssssssss" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_8", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_7", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "...DEEE|...|..|-----|%ss", + "...|EEE|...|..|^...lV%ss", + "...|---|-+-|......hdV%ss", + "...........G..|..dddV%ss", + "...........G..|-----|%ss", + ".......|---|..|...ddV%ss", + "|+-|...|...+......hdV%ss", + "|.l|...|rr.|.^|l...dV%ss", + "|--|...|---|--|-----|%ss", + "|...........c.......V%ss", + "|.......cxh.c.bbbbb.Vsss", + "|.......ccccc.......Gsss", + "|...................Gsss", + "|...................Vsss", + "|b..................Gsss", + "|b..................Gsss", + "|b..................Vsss", + "|b............bbbbb.V%ss", + "|...................|%ss", + "--HHHHHGGHHGGHHHHH--|%ss", + "%%%%% ssssssss %%%%%%%ss", + " ssssssss ss", + "ssssssssssssssssssssssss", + "ssssssssssssssssssssssss" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "////////////////////////", - "////////////////////////", - "////////////////////////", - "////////////////////////", - "///|-HHH-HHH-HHH--|HHHH|", - "///|^.........^ll^V....|", - "///V...x.hx..x....V..hd|", - "///V..hd..d.hd....V.ddx|", - "///V...d..d..d....G....|", - "///|..............V....|", - "///V..............Vllll|", - "///V...x..x..x....|----|", - "///V...d..d.hd....|.....", - "///|..hd..d..d....|...ch", - "///V..............|^..cc", - "///V....................", - "///V...x................", - "///|..hd....|--|--|-HH-G", - "///|l..d....|ST|..|.....", - "///|----|...+..|..+.....", - "///|rrCC|...|..|..|.....", - "///|....+...|--||-|-|...", - "///|rr..|...|>R<|EEE|...", - "///|----|...|.R.|EEED..." - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_9", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_8", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "////////////////////////", + "////////////////////////", + "////////////////////////", + "////////////////////////", + "///|-HHH-HHH-HHH--|HHHH|", + "///|^.........^ll^V....|", + "///V...x.hx..x....V..hd|", + "///V..hd..d.hd....V.ddx|", + "///V...d..d..d....G....|", + "///|..............V....|", + "///V..............Vllll|", + "///V...x..x..x....|----|", + "///V...d..d.hd....|.....", + "///|..hd..d..d....|...ch", + "///V..............|^..cc", + "///V....................", + "///V...x................", + "///|..hd....|--|--|-HH-G", + "///|l..d....|ST|..|.....", + "///|----|...+..|..+.....", + "///|rrCC|...|..|..|.....", + "///|....+...|--||-|-|...", + "///|rr..|...|>R<|EEE|...", + "///|----|...|.R.|EEED..." + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "////////////////////////", - "////////////////////////", - "////////////////////////", - "////////////////////////", - "HHHHH|--HHH-HHH-HHH-|///", - ".....Vll........h..^|///", - ".h.c.V.....h........V///", - "xccc.V....ddx..ddx..V///", - ".....G..............V///", - "..h..V.....h...h....|///", - "^...^V....ddx..ddx..V///", - "-----|.....h........V///", - ".....|..........h...V///", - ".c...|....ddx..ddx..|///", - "xc..^|..............V///", - "................h...V///", - "...............ddx..V///", - "G-HH-|--|--|........|///", - ".....|..|TS|.......^|///", - ".....+..|..+...|----|///", - ".....|..|..|...|..CC|///", - "...|-|-||--|...+....|///", - "...|xEE|>R.|...|rrrr|///", - "...DEEE|.R.|...|----|///" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_10", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_9", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "////////////////////////", + "////////////////////////", + "////////////////////////", + "////////////////////////", + "HHHHH|--HHH-HHH-HHH-|///", + ".....Vll........h..^|///", + ".h.c.V.....h........V///", + "xccc.V....ddx..ddx..V///", + ".....G..............V///", + "..h..V.....h...h....|///", + "^...^V....ddx..ddx..V///", + "-----|.....h........V///", + ".....|..........h...V///", + ".c...|....ddx..ddx..|///", + "xc..^|..............V///", + "................h...V///", + "...............ddx..V///", + "G-HH-|--|--|........|///", + ".....|..|TS|.......^|///", + ".....+..|..+...|----|///", + ".....|..|..|...|..CC|///", + "...|-|-||--|...+....|///", + "...|xEE|>R.|...|rrrr|///", + "...DEEE|.R.|...|----|///" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "///|....+...|...|EEED...", - "///|T.S.|...+...|EEx|...", - "///|----|...|---|-|-|...", - "///|lll.....Vdd..l|.....", - "///V....c...Vdh..r|.....", - "///V..h.c...Vx....|^....", - "///|ccc6c...|-HGH-|-HHHH", - "///V....................", - "///V....................", - "///V....................", - "///|.ddx..ddx..ddx|-HHHG", - "///V..h....h....h.|.....", - "///V..............|.....", - "///V.ddx..ddx..ddx|.hnn.", - "///|........h..h..|.hnn.", - "///V..h...........|.hnnn", - "///V.ddx..ddx..ddx|.hnnn", - "///V..h....h......|...hh", - "///|............h.|.....", - "///|-HHH-HHHH-HHH-|-HHHH", - "////////////////////////", - "////////////////////////", - "////////////////////////", - "////////////////////////" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_11", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_10", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "///|....+...|...|EEED...", + "///|T.S.|...+...|EEx|...", + "///|----|...|---|-|-|...", + "///|lll.....Vdd..l|.....", + "///V....c...Vdh..r|.....", + "///V..h.c...Vx....|^....", + "///|ccc6c...|-HGH-|-HHHH", + "///V....................", + "///V....................", + "///V....................", + "///|.ddx..ddx..ddx|-HHHG", + "///V..h....h....h.|.....", + "///V..............|.....", + "///V.ddx..ddx..ddx|.hnn.", + "///|........h..h..|.hnn.", + "///V..h...........|.hnnn", + "///V.ddx..ddx..ddx|.hnnn", + "///V..h....h......|...hh", + "///|............h.|.....", + "///|-HHH-HHHH-HHH-|-HHHH", + "////////////////////////", + "////////////////////////", + "////////////////////////", + "////////////////////////" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "...DEEE|...|...+....|///", - "...|EEE|...+...|.S.T|///", - "...|-|-|---|...|----|///", - ".....|c..rrV......ll|///", - ".....|ch...+...c....V///", - "....^|ddd..V...6h...V///", - "HHHH-|-HHH-|...ccccc|///", - "....................V///", - "....................V///", - "....................V///", - "GHHH-|----|GG|--++--|///", - ".....|ccSe|..|^....^V///", - ".....|....|..|......V///", - ".nnh.|.......|..ddxdV///", - ".nnh.|.......|....hdV///", - "nnnh.|hh...hh|l.....V///", - "nnnh.|nn...nn|-+----|///", - "hh...|nn...nn|r..H.l|///", - ".....|hh...hh|r....l|///", - "HHHH-|-HHHHH-|--HHH-|///", - "////////////////////////", - "////////////////////////", - "////////////////////////", - "////////////////////////" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_12", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_11", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "...DEEE|...|...+....|///", + "...|EEE|...+...|.S.T|///", + "...|-|-|---|...|----|///", + ".....|c..rrV......ll|///", + ".....|ch...+...c....V///", + "....^|ddd..V...6h...V///", + "HHHH-|-HHH-|...ccccc|///", + "....................V///", + "....................V///", + "....................V///", + "GHHH-|----|GG|--++--|///", + ".....|ccSe|..|^....^V///", + ".....|....|..|......V///", + ".nnh.|.......|..ddxdV///", + ".nnh.|.......|....hdV///", + "nnnh.|hh...hh|l.....V///", + "nnnh.|nn...nn|-+----|///", + "hh...|nn...nn|r..H.l|///", + ".....|hh...hh|r....l|///", + "HHHH-|-HHHHH-|--HHH-|///", + "////////////////////////", + "////////////////////////", + "////////////////////////", + "////////////////////////" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "////////////////////////", - "////////////////////////", - "////////////////////////", - "////////////////////////", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssss|---|sssssss", - "///sssssssss|.R>|sssssss", - "///sssssssss|.R.|sssssss" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_13", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_12", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "////////////////////////", + "////////////////////////", + "////////////////////////", + "////////////////////////", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssss|---|sssssss", + "///sssssssss|.R>|sssssss", + "///sssssssss|.R.|sssssss" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "////////////////////////", - "////////////////////////", - "////////////////////////", - "////////////////////////", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_14", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_13", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "////////////////////////", + "////////////////////////", + "////////////////////////", + "////////////////////////", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "///sssssssss|...|sssssss", - "///sssssssss|...|sssssss", - "///sssssssss|-+-|sssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "///sssssssssssssssssssss", - "////////////////////////", - "////////////////////////", - "////////////////////////", - "////////////////////////" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_15", - "type": "mapgen", - "weight": 250 + "om_terrain": "office_tower_14", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "///sssssssss|...|sssssss", + "///sssssssss|...|sssssss", + "///sssssssss|-+-|sssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "///sssssssssssssssssssss", + "////////////////////////", + "////////////////////////", + "////////////////////////", + "////////////////////////" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } }, - { - "method": "json", - "object": { - "fill_ter": "t_floor", - "furniture": { - "@": "f_bed", - "S": "f_sink", - "T": "f_toilet", - "U": "f_statue", - "^": "f_indoor_plant", - "b": "f_bench", - "c": "f_counter", - "d": "f_desk", - "h": "f_chair", - "l": "f_locker", - "n": "f_table", - "o": "f_bookcase", - "r": "f_rack", - "z": "f_crate_c" - }, - "rows": [ - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "sssssssssssssssssssss///", - "////////////////////////", - "////////////////////////", - "////////////////////////", - "////////////////////////" - ], - "terrain": { - " ": "t_dirt", - "%": "t_shrub", - ")": "t_wreckage", - "+": "t_door_c", - ",": "t_pavement_y", - ".": "t_floor", - "/": "t_sky", - "2": "t_utility_light", - "<": "t_stairs_up", - ">": "t_stairs_down", - "@": "t_floor", - "D": "t_door_metal_c", - "E": "t_elevator", - "G": "t_door_glass_c", - "H": "t_wall_glass_h", - "I": "t_column", - "L": "t_floor", - "R": "t_railing_v", - "S": "t_floor", - "T": "t_floor", - "V": "t_wall_glass_v", - "X": "t_door_metal_locked", - "^": "t_floor", - "_": "t_pavement", - "b": "t_dirt", - "c": "t_floor", - "d": "t_floor", - "h": "t_floor", - "k": "t_floor", - "l": "t_floor", - "n": "t_floor", - "o": "t_floor", - "p": "t_floor", - "r": "t_floor", - "s": "t_sidewalk", - "u": "t_floor", - "x": "t_console_broken", - "z": "t_floor", - "{": "t_rubble", - "}": "t_manhole_cover", - "~": "t_rock" - } - }, - "om_terrain": "office_tower_16", - "type": "mapgen", - "weight": 250 - } -] \ No newline at end of file + "om_terrain": "office_tower_15", + "type": "mapgen", + "weight": 250 + }, + { + "method": "json", + "object": { + "fill_ter": "t_floor", + "furniture": { + "@": "f_bed", + "S": "f_sink", + "T": "f_toilet", + "U": "f_statue", + "^": "f_indoor_plant", + "b": "f_bench", + "c": "f_counter", + "d": "f_desk", + "h": "f_chair", + "l": "f_locker", + "n": "f_table", + "o": "f_bookcase", + "r": "f_rack", + "z": "f_crate_c" + }, + "rows": [ + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "sssssssssssssssssssss///", + "////////////////////////", + "////////////////////////", + "////////////////////////", + "////////////////////////" + ], + "terrain": { + " ": "t_dirt", + "%": "t_shrub", + ")": "t_wreckage", + "+": "t_door_c", + ",": "t_pavement_y", + ".": "t_floor", + "/": "t_sky", + "2": "t_utility_light", + "<": "t_stairs_up", + ">": "t_stairs_down", + "@": "t_floor", + "D": "t_door_metal_c", + "E": "t_elevator", + "G": "t_door_glass_c", + "H": "t_wall_glass_h", + "I": "t_column", + "L": "t_floor", + "R": "t_railing_v", + "S": "t_floor", + "T": "t_floor", + "V": "t_wall_glass_v", + "X": "t_door_metal_locked", + "^": "t_floor", + "_": "t_pavement", + "b": "t_dirt", + "c": "t_floor", + "d": "t_floor", + "h": "t_floor", + "k": "t_floor", + "l": "t_floor", + "n": "t_floor", + "o": "t_floor", + "p": "t_floor", + "r": "t_floor", + "s": "t_sidewalk", + "u": "t_floor", + "x": "t_console_broken", + "z": "t_floor", + "{": "t_rubble", + "}": "t_manhole_cover", + "~": "t_rock" + } + }, + "om_terrain": "office_tower_16", + "type": "mapgen", + "weight": 250 + } +] diff --git a/utilities/building-utility/Examples/output_office_terrain_template.json b/utilities/building-utility/Examples/output_office_terrain_template.json index 14c03c09f799d..2926461dfd25e 100644 --- a/utilities/building-utility/Examples/output_office_terrain_template.json +++ b/utilities/building-utility/Examples/output_office_terrain_template.json @@ -1,162 +1,162 @@ [ - { - "color": "white", - "id": "office_tower_1", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_2", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_3", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_4", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_5", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_6", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_7", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_8", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_9", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_10", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_11", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_12", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_13", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_14", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_15", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - }, - { - "color": "white", - "id": "office_tower_16", - "mondensity": 2, - "name": "Office Tower", - "see_cost": 5, - "sidewalk": true, - "sym": 84, - "type": "overmap_terrain" - } -] \ No newline at end of file + { + "color": "white", + "id": "office_tower_1", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_2", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_3", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_4", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_5", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_6", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_7", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_8", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_9", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_10", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_11", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_12", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_13", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_14", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_15", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + }, + { + "color": "white", + "id": "office_tower_16", + "mondensity": 2, + "name": "Office Tower", + "see_cost": 5, + "sidewalk": true, + "sym": 84, + "type": "overmap_terrain" + } +] From 7f95644e84d9d4033b4015c6486121602fd4dca5 Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Sun, 28 Jun 2020 09:34:49 -0700 Subject: [PATCH 148/206] add longest_side to landscaping.json tools --- data/json/items/tool/landscaping.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/data/json/items/tool/landscaping.json b/data/json/items/tool/landscaping.json index c665b19df71b9..670c8503c9137 100644 --- a/data/json/items/tool/landscaping.json +++ b/data/json/items/tool/landscaping.json @@ -7,6 +7,7 @@ "description": "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.", "weight": "1133 g", "volume": "1500 ml", + "longest_side": "90 cm", "price": 0, "price_postapoc": 0, "bashing": 8, @@ -24,6 +25,7 @@ "description": "A small, sharp gardening shovel, perfect for digging up grubs and worms.", "weight": "280 g", "volume": "500 ml", + "longest_side": "25 cm", "price": 20, "price_postapoc": 50, "to_hit": 1, @@ -41,6 +43,7 @@ "description": "This is a farming implement. You can use it to turn tillable land into a slow-to-cross pile of dirt, or dig a shallow pit.", "weight": "1088 g", "volume": "3500 ml", + "longest_side": "140 cm", "price": 2000, "price_postapoc": 250, "to_hit": 1, @@ -60,6 +63,7 @@ "description": "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.", "weight": "1581 g", "volume": "4 L", + "longest_side": "90 cm", "price": 0, "price_postapoc": 0, "bashing": 15, @@ -108,8 +112,9 @@ "type": "TOOL", "name": { "str": "scythe" }, "description": "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.", - "weight": "3013 g", + "weight": "2140 g", "volume": "3250 ml", + "longest_side": "140 cm", "price": 8000, "price_postapoc": 250, "to_hit": -6, @@ -127,8 +132,9 @@ "type": "TOOL", "name": { "str": "shovel" }, "description": "This is a digging tool. Use it to dig pits adjacent to your location.", - "weight": "1315 g", + "weight": "2032 g", "volume": "3500 ml", + "longest_side": "140 cm", "price": 2000, "price_postapoc": 250, "to_hit": 3, @@ -187,8 +193,9 @@ "type": "TOOL", "name": { "str": "sickle" }, "description": "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.", - "weight": "1432 g", + "weight": "907 g", "volume": "1250 ml", + "longest_side": "50 cm", "price": 3800, "price_postapoc": 250, "to_hit": -2, @@ -208,6 +215,7 @@ "description": "A cordless, double-sided, gasoline-powered hedge trimmer. A long line of sharp-edged teeth extends from the engine; turning the trimmer on will make them rapidly vibrate. The poor man's chainsaw as far as the zombies are concerned.", "weight": "4500 g", "volume": "2500 ml", + "longest_side": "100 cm", "price": 4000, "price_postapoc": 250, "to_hit": -1, From a01746c422e15eeeaca490636acd28d32494273b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A4r=20Karlsson?= Date: Sun, 28 Jun 2020 19:19:15 +0200 Subject: [PATCH 149/206] Fix content list for sealed stomach --- data/json/recipes/other/containers.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/recipes/other/containers.json b/data/json/recipes/other/containers.json index 6e3e135ef5672..309bd51aa766e 100644 --- a/data/json/recipes/other/containers.json +++ b/data/json/recipes/other/containers.json @@ -92,7 +92,7 @@ "components": [ [ [ "water", 5 ], [ "water_clean", 5 ] ], [ [ "stomach", 1 ], [ "hstomach", 1 ], [ "demihuman_stomach", 1 ] ], - [ [ "cordage_short", 2, "LIST" ], [ "filament", 50, "LIST" ] ] + [ [ "cordage_short", 2, "LIST" ], [ "filament", 100, "LIST" ] ] ] }, { From 1a6769da4e8eebe88e7d7b98fd519db805f72390 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Sun, 28 Jun 2020 20:24:12 +0000 Subject: [PATCH 150/206] Map reference migration part seven --- src/item_location.cpp | 4 +- src/live_view.cpp | 4 +- src/magic.cpp | 7 +- src/map_field.cpp | 8 +- src/mapbuffer.cpp | 5 +- src/mattack_actors.cpp | 7 +- src/mission_companion.cpp | 5 +- src/npctalk_funcs.cpp | 7 +- src/overmap.cpp | 5 +- src/overmap_ui.cpp | 7 +- src/projectile.cpp | 10 +- src/sdltiles.cpp | 3 +- src/teleport.cpp | 7 +- src/vehicle_part.cpp | 5 +- src/vehicle_selector.cpp | 11 ++- tests/behavior_test.cpp | 12 +-- tests/crafting_test.cpp | 7 +- tests/creature_in_field_test.cpp | 10 +- tests/explosion_balance_test.cpp | 8 +- tests/map_test.cpp | 7 +- tests/monster_test.cpp | 6 +- tests/npc_talk_test.cpp | 154 ++++++++++++++++-------------- tests/vehicle_drag_test.cpp | 17 ++-- tests/vehicle_efficiency_test.cpp | 9 +- tests/vehicle_turrets_test.cpp | 11 ++- 25 files changed, 184 insertions(+), 152 deletions(-) diff --git a/src/item_location.cpp b/src/item_location.cpp index 313d4f0368e08..51a614767f147 100644 --- a/src/item_location.cpp +++ b/src/item_location.cpp @@ -186,7 +186,7 @@ class item_location::impl::item_on_map : public item_location::impl } std::string describe( const Character *ch ) const override { - std::string res = g->m.name( cur ); + std::string res = get_map().name( cur ); if( ch ) { res += std::string( " " ) += direction_suffix( ch->pos(), cur ); } @@ -666,7 +666,7 @@ void item_location::deserialize( JsonIn &js ) ptr.reset( new impl::item_on_map( pos, idx ) ); } else if( type == "vehicle" ) { - vehicle *const veh = veh_pointer_or_null( g->m.veh_at( pos ) ); + vehicle *const veh = veh_pointer_or_null( get_map().veh_at( pos ) ); int part = obj.get_int( "part" ); if( veh && part >= 0 && part < veh->part_count() ) { ptr.reset( new impl::item_on_vehicle( vehicle_cursor( *veh, part ), idx ) ); diff --git a/src/live_view.cpp b/src/live_view.cpp index ffa8dd666e224..b4748b0bcc0d6 100644 --- a/src/live_view.cpp +++ b/src/live_view.cpp @@ -47,7 +47,7 @@ void live_view::show( const tripoint &p ) const int max_height = TERMY / 2; const int line_limit = max_height - 2; - const visibility_variables &cache = g->m.get_visibility_variables_cache(); + const visibility_variables &cache = get_map().get_visibility_variables_cache(); int line_out = START_LINE; // HACK: using dummy window to get the window height without refreshing. win = catacurses::newwin( 1, width, point_zero ); @@ -60,7 +60,7 @@ void live_view::show( const tripoint &p ) } ); ui->on_redraw( [this]( const ui_adaptor & ) { werase( win ); - const visibility_variables &cache = g->m.get_visibility_variables_cache(); + const visibility_variables &cache = get_map().get_visibility_variables_cache(); int line_out = START_LINE; g->pre_print_all_tile_info( mouse_position, win, line_out, getmaxy( win ) - 2, cache ); draw_border( win ); diff --git a/src/magic.cpp b/src/magic.cpp index 116f265e473ee..3147ea802946d 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -939,11 +939,12 @@ void spell::create_field( const tripoint &at ) const return; } if( one_in( type->field_chance ) ) { - field_entry *field = g->m.get_field( at, *type->field ); + map &here = get_map(); + field_entry *field = here.get_field( at, *type->field ); if( field ) { field->set_field_intensity( field->get_field_intensity() + intensity ); } else { - g->m.add_field( at, *type->field, intensity, -duration_turns() ); + here.add_field( at, *type->field, intensity, -duration_turns() ); } } } @@ -1418,7 +1419,7 @@ void known_magic::forget_spell( const spell_id &sp ) } add_msg( m_bad, _( "All knowledge of %s leaves you." ), sp->name ); // TODO: add parameter for owner of known_magic for this function - g->events().send( g->u.getID(), sp->id ); + g->events().send( get_avatar().getID(), sp->id ); spellbook.erase( sp ); } diff --git a/src/map_field.cpp b/src/map_field.cpp index acbf6a2c32f0a..c0c7b22bc8085 100644 --- a/src/map_field.cpp +++ b/src/map_field.cpp @@ -254,7 +254,8 @@ void map::gas_spread_to( field_entry &cur, maptile &dst ) void map::spread_gas( field_entry &cur, const tripoint &p, int percent_spread, const time_duration &outdoor_age_speedup, scent_block &sblk ) { - const oter_id &cur_om_ter = overmap_buffer.ter( ms_to_omt_copy( g->m.getabs( p ) ) ); + map &here = get_map(); + const oter_id &cur_om_ter = overmap_buffer.ter( ms_to_omt_copy( here.getabs( p ) ) ); const bool sheltered = g->is_sheltered( p ); const int winddirection = g->weather.winddirection; const int windpower = get_local_windpower( g->weather.windspeed, cur_om_ter, p, winddirection, @@ -397,6 +398,7 @@ bool map::process_fields_in_submap( submap *const current_submap, // Just to avoid typing that long string for a temp value. field_entry *tmpfld = nullptr; + map &here = get_map(); tripoint thep; thep.z = submap.z; @@ -492,7 +494,7 @@ bool map::process_fields_in_submap( submap *const current_submap, if( curtype == fd_fire ) { cur.set_field_age( std::max( -24_hours, cur.get_field_age() ) ); // Entire objects for ter/frn for flags - const oter_id &cur_om_ter = overmap_buffer.ter( ms_to_omt_copy( g->m.getabs( p ) ) ); + const oter_id &cur_om_ter = overmap_buffer.ter( ms_to_omt_copy( here.getabs( p ) ) ); bool sheltered = g->is_sheltered( p ); int winddirection = g->weather.winddirection; int windpower = get_local_windpower( g->weather.windspeed, cur_om_ter, p, winddirection, @@ -983,7 +985,7 @@ bool map::process_fields_in_submap( submap *const current_submap, if( curtype == fd_fungal_haze ) { if( one_in( 10 - 2 * cur.get_field_intensity() ) ) { // Haze'd terrain - fungal_effects( *g, g->m ).spread_fungus( p ); + fungal_effects( *g, here ).spread_fungus( p ); } } diff --git a/src/mapbuffer.cpp b/src/mapbuffer.cpp index 1b5767266c300..68a2ce922ede6 100644 --- a/src/mapbuffer.cpp +++ b/src/mapbuffer.cpp @@ -109,8 +109,9 @@ void mapbuffer::save( bool delete_after_save ) int num_saved_submaps = 0; int num_total_submaps = submaps.size(); - const tripoint map_origin = sm_to_omt_copy( g->m.get_abs_sub() ); - const bool map_has_zlevels = g != nullptr && g->m.has_zlevels(); + map &here = get_map(); + const tripoint map_origin = sm_to_omt_copy( here.get_abs_sub() ); + const bool map_has_zlevels = g != nullptr && here.has_zlevels(); static_popup popup; diff --git a/src/mattack_actors.cpp b/src/mattack_actors.cpp index ccfade8908d19..c9c677ae2b864 100644 --- a/src/mattack_actors.cpp +++ b/src/mattack_actors.cpp @@ -83,8 +83,9 @@ bool leap_actor::call( monster &z ) const if( !allow_no_target && z.attack_target() == nullptr ) { return false; } + map &here = get_map(); std::multimap candidates; - for( const tripoint &candidate : g->m.points_in_radius( z.pos(), max_range ) ) { + for( const tripoint &candidate : here.points_in_radius( z.pos(), max_range ) ) { if( candidate == z.pos() ) { continue; } @@ -113,9 +114,9 @@ bool leap_actor::call( monster &z ) const } bool blocked_path = false; // check if monster has a clear path to the proposed point - std::vector line = g->m.find_clear_path( z.pos(), dest ); + std::vector line = here.find_clear_path( z.pos(), dest ); for( auto &i : line ) { - if( g->m.impassable( i ) ) { + if( here.impassable( i ) ) { blocked_path = true; break; } diff --git a/src/mission_companion.cpp b/src/mission_companion.cpp index 2a9c018310f06..0074e24485605 100644 --- a/src/mission_companion.cpp +++ b/src/mission_companion.cpp @@ -706,7 +706,7 @@ npc_ptr talk_function::individual_mission( const tripoint &omt_pos, } } if( comp->in_vehicle ) { - g->m.unboard_vehicle( comp->pos() ); + get_map().unboard_vehicle( comp->pos() ); } popup( "%s %s", comp->name, desc ); comp->set_companion_mission( omt_pos, role_id, miss_id ); @@ -1730,10 +1730,11 @@ void talk_function::companion_return( npc &comp ) comp.reset_companion_mission(); comp.companion_mission_time = calendar::before_time_starts; comp.companion_mission_time_ret = calendar::before_time_starts; + map &here = get_map(); for( size_t i = 0; i < comp.companion_mission_inv.size(); i++ ) { for( const auto &it : comp.companion_mission_inv.const_stack( i ) ) { if( !it.count_by_charges() || it.charges > 0 ) { - g->m.add_item_or_charges( g->u.pos(), it ); + here.add_item_or_charges( g->u.pos(), it ); } } } diff --git a/src/npctalk_funcs.cpp b/src/npctalk_funcs.cpp index 7a18b273e5543..4b4a773920587 100644 --- a/src/npctalk_funcs.cpp +++ b/src/npctalk_funcs.cpp @@ -823,12 +823,13 @@ void talk_function::stranger_neutral( npc &p ) void talk_function::drop_stolen_item( npc &p ) { + map &here = get_map(); for( auto &elem : g->u.inv_dump() ) { if( elem->is_old_owner( p ) ) { item to_drop = g->u.i_rem( elem ); to_drop.remove_old_owner(); to_drop.set_owner( p ); - g->m.add_item_or_charges( g->u.pos(), to_drop ); + here.add_item_or_charges( g->u.pos(), to_drop ); } } if( p.known_stolen_item ) { @@ -865,7 +866,7 @@ void talk_function::drop_weapon( npc &p ) if( p.is_hallucination() ) { return; } - g->m.add_item_or_charges( p.pos(), p.remove_weapon() ); + get_map().add_item_or_charges( p.pos(), p.remove_weapon() ); } void talk_function::player_weapon_away( npc &/*p*/ ) @@ -875,7 +876,7 @@ void talk_function::player_weapon_away( npc &/*p*/ ) void talk_function::player_weapon_drop( npc &/*p*/ ) { - g->m.add_item_or_charges( g->u.pos(), g->u.remove_weapon() ); + get_map().add_item_or_charges( g->u.pos(), g->u.remove_weapon() ); } void talk_function::lead_to_safety( npc &p ) diff --git a/src/overmap.cpp b/src/overmap.cpp index de10717fa1b4f..d64ef6cddd869 100644 --- a/src/overmap.cpp +++ b/src/overmap.cpp @@ -1586,7 +1586,8 @@ bool overmap::generate_sub( const int z ) // but at this point we don't know requires_sub = true; } else if( oter_above == "mine_finale" ) { - for( auto &q : g->m.points_in_radius( p, 1, 0 ) ) { + map &here = get_map(); + for( auto &q : here.points_in_radius( p, 1, 0 ) ) { ter_set( q, oter_id( "spiral" ) ); } ter_set( p, oter_id( "spiral_hub" ) ); @@ -3273,7 +3274,7 @@ bool overmap::build_slimepit( const tripoint &origin, int s ) const oter_id slimepit( "slimepit" ); bool requires_sub = false; - for( auto p : g->m.points_in_radius( origin, s + origin.z + 1, 0 ) ) { + for( auto p : get_map().points_in_radius( origin, s + origin.z + 1, 0 ) ) { int dist = square_dist( origin.xy(), p.xy() ); if( one_in( 2 * dist ) ) { chip_rock( p ); diff --git a/src/overmap_ui.cpp b/src/overmap_ui.cpp index ca4f4fce1d3de..8468e86d9a50b 100644 --- a/src/overmap_ui.cpp +++ b/src/overmap_ui.cpp @@ -1540,7 +1540,8 @@ static tripoint display( const tripoint &orig, const draw_data_t &data = draw_da ptype.only_known_by_player = true; ptype.avoid_danger = true; bool in_vehicle = g->u.in_vehicle && g->u.controlling_vehicle; - const optional_vpart_position vp = g->m.veh_at( g->u.pos() ); + map &here = get_map(); + const optional_vpart_position vp = here.veh_at( g->u.pos() ); if( vp && in_vehicle ) { vehicle &veh = vp->vehicle(); if( veh.can_float() && veh.is_watercraft() && veh.is_in_water() ) { @@ -1553,7 +1554,7 @@ static tripoint display( const tripoint &orig, const draw_data_t &data = draw_da } else { const oter_id oter = overmap_buffer.ter( curs ); // going to or coming from a water tile - if( is_river_or_lake( oter ) || g->m.has_flag( "SWIMMABLE", g->u.pos() ) ) { + if( is_river_or_lake( oter ) || here.has_flag( "SWIMMABLE", g->u.pos() ) ) { ptype.amphibious = true; } } @@ -1569,7 +1570,7 @@ static tripoint display( const tripoint &orig, const draw_data_t &data = draw_da // renew the path incase of a leftover dangling path point g->u.omt_path = overmap_buffer.get_npc_path( player_omt_pos, curs, ptype ); if( g->u.in_vehicle && g->u.controlling_vehicle ) { - vehicle *player_veh = veh_pointer_or_null( g->m.veh_at( g->u.pos() ) ); + vehicle *player_veh = veh_pointer_or_null( here.veh_at( g->u.pos() ) ); player_veh->omt_path = g->u.omt_path; player_veh->is_autodriving = true; g->u.assign_activity( ACT_AUTODRIVE ); diff --git a/src/projectile.cpp b/src/projectile.cpp index 80aa0174c62f8..339a7cd845004 100644 --- a/src/projectile.cpp +++ b/src/projectile.cpp @@ -7,7 +7,6 @@ #include "ammo_effect.h" #include "explosion.h" -#include "game.h" #include "item.h" #include "map.h" #include "map_iterator.h" @@ -95,14 +94,15 @@ void projectile::unset_custom_explosion() void apply_ammo_effects( const tripoint &p, const std::set &effects ) { + map &here = get_map(); for( const ammo_effect &ae : ammo_effects::get_all() ) { if( effects.count( ae.id.str() ) > 0 ) { - for( auto &pt : g->m.points_in_radius( p, ae.aoe_radius, ae.aoe_radius_z ) ) { + for( auto &pt : here.points_in_radius( p, ae.aoe_radius, ae.aoe_radius_z ) ) { if( x_in_y( ae.aoe_chance, 100 ) ) { - const bool check_sees = !ae.aoe_check_sees || g->m.sees( p, pt, ae.aoe_check_sees_radius ); - const bool check_passable = !ae.aoe_check_passable || g->m.passable( pt ); + const bool check_sees = !ae.aoe_check_sees || here.sees( p, pt, ae.aoe_check_sees_radius ); + const bool check_passable = !ae.aoe_check_passable || here.passable( pt ); if( check_sees && check_passable ) { - g->m.add_field( pt, ae.aoe_field_type, rng( ae.aoe_intensity_min, ae.aoe_intensity_max ) ); + here.add_field( pt, ae.aoe_field_type, rng( ae.aoe_intensity_min, ae.aoe_intensity_max ) ); } } } diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index 1d804bfeb9266..033ac1fe16bcb 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -2653,6 +2653,7 @@ static void CheckMessages() actions_remove.insert( ACTION_CYCLE_MOVE ); } + map &here = get_map(); // Check if we can perform one of our actions on nearby terrain. If so, // display that action at the top of the list. for( int dx = -1; dx <= 1; dx++ ) { @@ -2664,7 +2665,7 @@ static void CheckMessages() // Check if we're near a vehicle, if so, vehicle controls should be top. { - const optional_vpart_position vp = g->m.veh_at( pos ); + const optional_vpart_position vp = here.veh_at( pos ); vehicle *const veh = veh_pointer_or_null( vp ); if( veh ) { const int veh_part = vp ? vp->part_index() : -1; diff --git a/src/teleport.cpp b/src/teleport.cpp index 33b53823bf757..732bf41e5b8d8 100644 --- a/src/teleport.cpp +++ b/src/teleport.cpp @@ -35,6 +35,7 @@ bool teleport::teleport( Creature &critter, int min_distance, int max_distance, int tries = 0; tripoint origin = critter.pos(); tripoint new_pos = origin; + map &here = get_map(); //The teleportee is dimensionally anchored so nothing happens if( p && ( p->worn_with_flag( "DIMENSIONAL_ANCHOR" ) || p->has_effect_with_flag( "DIMENSIONAL_ANCHOR" ) ) ) { @@ -47,9 +48,9 @@ bool teleport::teleport( Creature &critter, int min_distance, int max_distance, new_pos.x = origin.x + rdistance * std::cos( rangle ); new_pos.y = origin.y + rdistance * std::sin( rangle ); tries++; - } while( g->m.impassable( new_pos ) && tries < 20 ); + } while( here.impassable( new_pos ) && tries < 20 ); //handles teleporting into solids. - if( g->m.impassable( new_pos ) ) { + if( here.impassable( new_pos ) ) { if( safe ) { if( c_is_u ) { add_msg( m_bad, _( "You cannot teleport safely." ) ); @@ -58,7 +59,7 @@ bool teleport::teleport( Creature &critter, int min_distance, int max_distance, } critter.apply_damage( nullptr, bodypart_id( "torso" ), 9999 ); if( c_is_u ) { - g->events().send( p->getID(), g->m.obstacle_name( new_pos ) ); + g->events().send( p->getID(), here.obstacle_name( new_pos ) ); add_msg( m_bad, _( "You die after teleporting into a solid." ) ); } critter.check_dead_state(); diff --git a/src/vehicle_part.cpp b/src/vehicle_part.cpp index b680e819fe085..3cf10e0e41350 100644 --- a/src/vehicle_part.cpp +++ b/src/vehicle_part.cpp @@ -72,8 +72,9 @@ item vehicle_part::properties_to_item() const // Cables get special handling: their target coordinates need to remain // stored, and if a cable actually drops, it should be half-connected. if( tmp.has_flag( "CABLE_SPOOL" ) && !tmp.has_flag( "TOW_CABLE" ) ) { - const tripoint local_pos = g->m.getlocal( target.first ); - if( !g->m.veh_at( local_pos ) ) { + map &here = get_map(); + const tripoint local_pos = here.getlocal( target.first ); + if( !here.veh_at( local_pos ) ) { // That vehicle ain't there no more. tmp.item_tags.insert( "NO_DROP" ); } diff --git a/src/vehicle_selector.cpp b/src/vehicle_selector.cpp index 5536b16b0f96e..a1dcc3b14701c 100644 --- a/src/vehicle_selector.cpp +++ b/src/vehicle_selector.cpp @@ -3,7 +3,6 @@ #include #include -#include "game.h" #include "map.h" #include "optional.h" #include "point.h" @@ -12,10 +11,11 @@ vehicle_selector::vehicle_selector( const tripoint &pos, int radius, bool accessible, bool visibility_only ) { + map &here = get_map(); for( const tripoint &e : closest_tripoints_first( pos, radius ) ) { if( !accessible || - ( visibility_only ? g->m.sees( pos, e, radius ) : g->m.clear_path( pos, e, radius, 1, 100 ) ) ) { - if( const optional_vpart_position vp = g->m.veh_at( e ) ) { + ( visibility_only ? here.sees( pos, e, radius ) : here.clear_path( pos, e, radius, 1, 100 ) ) ) { + if( const optional_vpart_position vp = here.veh_at( e ) ) { data.emplace_back( vp->vehicle(), vp->part_index() ); } } @@ -25,9 +25,10 @@ vehicle_selector::vehicle_selector( const tripoint &pos, int radius, bool access vehicle_selector::vehicle_selector( const tripoint &pos, int radius, bool accessible, const vehicle &ignore ) { + map &here = get_map(); for( const tripoint &e : closest_tripoints_first( pos, radius ) ) { - if( !accessible || g->m.clear_path( pos, e, radius, 1, 100 ) ) { - if( const optional_vpart_position vp = g->m.veh_at( e ) ) { + if( !accessible || here.clear_path( pos, e, radius, 1, 100 ) ) { + if( const optional_vpart_position vp = here.veh_at( e ) ) { if( &vp->vehicle() != &ignore ) { data.emplace_back( vp->vehicle(), vp->part_index() ); } diff --git a/tests/behavior_test.cpp b/tests/behavior_test.cpp index 129d7cfdb9bb3..6f5a061af114f 100644 --- a/tests/behavior_test.cpp +++ b/tests/behavior_test.cpp @@ -6,7 +6,6 @@ #include "behavior_strategy.h" #include "catch/catch.hpp" #include "character_oracle.h" -#include "game.h" #include "item.h" #include "item_location.h" #include "map.h" @@ -149,7 +148,7 @@ TEST_CASE( "check_npc_behavior_tree", "[npc][behavior]" ) behavior::character_oracle_t oracle( &test_npc ); CHECK( npc_needs.tick( &oracle ) == "idle" ); SECTION( "Freezing" ) { - g->weather.temperature = 0; + get_weather().temperature = 0; test_npc.update_bodytemp(); CHECK( npc_needs.tick( &oracle ) == "idle" ); test_npc.worn.push_back( item( "backpack" ) ); @@ -187,6 +186,7 @@ TEST_CASE( "check_monster_behavior_tree", "[monster][behavior]" ) { const tripoint monster_location( 5, 5, 0 ); clear_map(); + map &here = get_map(); monster &test_monster = spawn_test_monster( "mon_locust", monster_location ); behavior::monster_oracle_t oracle( &test_monster ); @@ -197,14 +197,14 @@ TEST_CASE( "check_monster_behavior_tree", "[monster][behavior]" ) test_monster.reset_special( special_name ); } CHECK( monster_goals.tick( &oracle ) == "idle" ); - for( const tripoint &near_monster : g->m.points_in_radius( monster_location, 1 ) ) { - g->m.ter_set( near_monster, ter_id( "t_grass" ) ); - g->m.furn_set( near_monster, furn_id( "f_null" ) ); + for( const tripoint &near_monster : here.points_in_radius( monster_location, 1 ) ) { + here.ter_set( near_monster, ter_id( "t_grass" ) ); + here.furn_set( near_monster, furn_id( "f_null" ) ); } SECTION( "Special Attack" ) { test_monster.set_special( "EAT_CROP", 0 ); CHECK( monster_goals.tick( &oracle ) == "idle" ); - g->m.furn_set( monster_location, furn_id( "f_plant_seedling" ) ); + here.furn_set( monster_location, furn_id( "f_plant_seedling" ) ); CHECK( monster_goals.tick( &oracle ) == "EAT_CROP" ); test_monster.set_special( "EAT_CROP", 1 ); CHECK( monster_goals.tick( &oracle ) == "idle" ); diff --git a/tests/crafting_test.cpp b/tests/crafting_test.cpp index 6ade7cef7c72c..a7037d38c13c2 100644 --- a/tests/crafting_test.cpp +++ b/tests/crafting_test.cpp @@ -327,9 +327,10 @@ static void set_time( const time_point &time ) calendar::turn = time; g->reset_light_level(); int z = g->u.posz(); - g->m.update_visibility_cache( z ); - g->m.invalidate_map_cache( z ); - g->m.build_map_cache( z ); + map &here = get_map(); + here.update_visibility_cache( z ); + here.invalidate_map_cache( z ); + here.build_map_cache( z ); } // This tries to actually run the whole craft activity, which is more thorough, diff --git a/tests/creature_in_field_test.cpp b/tests/creature_in_field_test.cpp index 5d0106c496c18..4f9dc6fa1c76d 100644 --- a/tests/creature_in_field_test.cpp +++ b/tests/creature_in_field_test.cpp @@ -1,7 +1,6 @@ #include #include "catch/catch.hpp" -#include "game.h" #include "map.h" #include "map_helpers.h" #include "monster.h" @@ -12,22 +11,23 @@ TEST_CASE( "creature_in_field", "[monster],[field]" ) { static const tripoint target_location{ 5, 5, 0 }; clear_map(); + map &here = get_map(); GIVEN( "An acid field" ) { - g->m.add_field( target_location, field_type_id( "fd_acid" ) ); + here.add_field( target_location, field_type_id( "fd_acid" ) ); WHEN( "a monster stands on it" ) { monster &test_monster = spawn_test_monster( "mon_zombie", target_location ); REQUIRE( test_monster.get_hp() == test_monster.get_hp_max() ); THEN( "the monster takes damage" ) { - g->m.creature_in_field( test_monster ); + here.creature_in_field( test_monster ); CHECK( test_monster.get_hp() < test_monster.get_hp_max() ); } } WHEN( "A monster in a vehicle stands in it" ) { - g->m.add_vehicle( vproto_id( "handjack" ), target_location, 0 ); + here.add_vehicle( vproto_id( "handjack" ), target_location, 0 ); monster &test_monster = spawn_test_monster( "mon_zombie", target_location ); REQUIRE( test_monster.get_hp() == test_monster.get_hp_max() ); THEN( "the monster doesn't take damage" ) { - g->m.creature_in_field( test_monster ); + here.creature_in_field( test_monster ); CHECK( test_monster.get_hp() == test_monster.get_hp_max() ); } diff --git a/tests/explosion_balance_test.cpp b/tests/explosion_balance_test.cpp index a43089e836e59..12aade2b89328 100644 --- a/tests/explosion_balance_test.cpp +++ b/tests/explosion_balance_test.cpp @@ -59,7 +59,7 @@ static void check_lethality( const std::string &explosive_id, const int range, f // Set off an explosion item grenade( explosive_id ); grenade.charges = 0; - grenade.type->invoke( g->u, grenade, origin ); + grenade.type->invoke( get_avatar(), grenade, origin ); // see how many monsters survive std::vector survivors = g->get_creatures_if( []( const Creature & critter ) { return critter.is_monster(); @@ -111,10 +111,10 @@ static void check_vehicle_damage( const std::string &explosive_id, const std::st clear_map_and_put_player_underground(); tripoint origin( 30, 30, 0 ); - vehicle *target_vehicle = g->m.add_vehicle( vproto_id( vehicle_id ), origin, 0, -1, 0 ); + vehicle *target_vehicle = get_map().add_vehicle( vproto_id( vehicle_id ), origin, 0, -1, 0 ); std::vector before_hp = get_part_hp( target_vehicle ); - while( g->m.veh_at( origin ) ) { + while( get_map().veh_at( origin ) ) { origin.x++; } origin.x += range; @@ -122,7 +122,7 @@ static void check_vehicle_damage( const std::string &explosive_id, const std::st // Set off an explosion item grenade( explosive_id ); grenade.charges = 0; - grenade.type->invoke( g->u, grenade, origin ); + grenade.type->invoke( get_avatar(), grenade, origin ); std::vector after_hp = get_part_hp( target_vehicle ); diff --git a/tests/map_test.cpp b/tests/map_test.cpp index a4e04e191d7e6..cb3a919d8975e 100644 --- a/tests/map_test.cpp +++ b/tests/map_test.cpp @@ -16,12 +16,13 @@ TEST_CASE( "destroy_grabbed_furniture" ) clear_map(); GIVEN( "Furniture grabbed by the player" ) { const tripoint test_origin( 60, 60, 0 ); + map &here = get_map(); g->u.setpos( test_origin ); const tripoint grab_point = test_origin + tripoint_east; - g->m.furn_set( grab_point, furn_id( "f_chair" ) ); + here.furn_set( grab_point, furn_id( "f_chair" ) ); g->u.grab( object_type::FURNITURE, grab_point ); WHEN( "The furniture grabbed by the player is destroyed" ) { - g->m.destroy( grab_point ); + here.destroy( grab_point ); THEN( "The player's grab is released" ) { CHECK( g->u.get_grab_type() == object_type::NONE ); CHECK( g->u.grab_point == tripoint_zero ); @@ -86,5 +87,5 @@ TEST_CASE( "place_player_can_safely_move_multiple_submaps" ) // map::shift if the resulting shift exceeded a single submap, leading to a // broken active item cache. g->place_player( tripoint_zero ); - CHECK( g->m.check_submap_active_item_consistency().empty() ); + CHECK( get_map().check_submap_active_item_consistency().empty() ); } diff --git a/tests/monster_test.cpp b/tests/monster_test.cpp index 346f473536c57..dddceab3914d1 100644 --- a/tests/monster_test.cpp +++ b/tests/monster_test.cpp @@ -86,7 +86,7 @@ static int can_catch_player( const std::string &monster_type, const tripoint &di { clear_map(); REQUIRE( g->num_creatures() == 1 ); // the player - player &test_player = g->u; + player &test_player = get_avatar(); // Strip off any potentially encumbering clothing. std::list temp; while( test_player.takeoff( test_player.i_at( -2 ), &temp ) ) {} @@ -121,14 +121,14 @@ static int can_catch_player( const std::string &monster_type, const tripoint &di // Verify that only the player and one monster are present. REQUIRE( g->num_creatures() == 2 ); } - const int move_cost = g->m.combined_movecost( + const int move_cost = get_map().combined_movecost( test_player.pos(), test_player.pos() + direction_of_flight, nullptr, 0 ); tracker.push_back( {'p', move_cost, rl_dist( test_monster.pos(), test_player.pos() ), test_player.pos() } ); test_player.mod_moves( -move_cost ); } - g->m.clear_traps(); + get_map().clear_traps(); test_monster.set_dest( test_player.pos() ); test_monster.mod_moves( monster_speed ); while( test_monster.moves >= 0 ) { diff --git a/tests/npc_talk_test.cpp b/tests/npc_talk_test.cpp index f32cf30306219..f05b2e4f1f9e9 100644 --- a/tests/npc_talk_test.cpp +++ b/tests/npc_talk_test.cpp @@ -42,7 +42,7 @@ static const trait_id trait_PROF_SWAT( "PROF_SWAT" ); static npc &create_test_talker() { const string_id test_talker( "test_talker" ); - const character_id model_id = g->m.place_npc( point( 25, 25 ), test_talker, true ); + const character_id model_id = get_map().place_npc( point( 25, 25 ), test_talker, true ); g->load_npcs(); npc *model_npc = g->find_npc( model_id ); @@ -85,7 +85,7 @@ static std::string gen_dynamic_line( dialogue &d ) static void change_om_type( const std::string &new_type ) { - const tripoint omt_pos = ms_to_omt_copy( g->m.getabs( g->u.pos() ) ); + const tripoint omt_pos = ms_to_omt_copy( get_map().getabs( get_avatar().pos() ) ); overmap_buffer.ter_set( omt_pos, oter_id( new_type ) ); } @@ -93,16 +93,17 @@ static npc &prep_test( dialogue &d ) { clear_avatar(); clear_vehicles(); - REQUIRE_FALSE( g->u.in_vehicle ); + avatar &player_character = get_avatar(); + REQUIRE_FALSE( player_character.in_vehicle ); const tripoint test_origin( 15, 15, 0 ); - g->u.setpos( test_origin ); + player_character.setpos( test_origin ); g->faction_manager_ptr->create_if_needed(); npc &talker_npc = create_test_talker(); - d.alpha = &g->u; + d.alpha = &player_character; d.beta = &talker_npc; return talker_npc; @@ -133,10 +134,11 @@ TEST_CASE( "npc_talk_stats", "[npc_talk]" ) dialogue d; prep_test( d ); - g->u.str_cur = 8; - g->u.dex_cur = 8; - g->u.int_cur = 8; - g->u.per_cur = 8; + avatar &player_character = get_avatar(); + player_character.str_cur = 8; + player_character.dex_cur = 8; + player_character.int_cur = 8; + player_character.per_cur = 8; d.add_topic( "TALK_TEST_SIMPLE_STATS" ); gen_response_lines( d, 5 ); @@ -145,10 +147,10 @@ TEST_CASE( "npc_talk_stats", "[npc_talk]" ) CHECK( d.responses[2].text == "This is a dexterity test response." ); CHECK( d.responses[3].text == "This is an intelligence test response." ); CHECK( d.responses[4].text == "This is a perception test response." ); - g->u.str_cur = 6; - g->u.dex_cur = 6; - g->u.int_cur = 6; - g->u.per_cur = 6; + player_character.str_cur = 6; + player_character.dex_cur = 6; + player_character.int_cur = 6; + player_character.per_cur = 6; gen_response_lines( d, 1 ); CHECK( d.responses[0].text == "This is a basic test response." ); @@ -168,14 +170,15 @@ TEST_CASE( "npc_talk_skills", "[npc_talk]" ) const skill_id skill( "driving" ); - g->u.set_skill_level( skill, 8 ); + avatar &player_character = get_avatar(); + player_character.set_skill_level( skill, 8 ); d.add_topic( "TALK_TEST_SIMPLE_SKILLS" ); gen_response_lines( d, 2 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is a driving test response." ); - g->u.set_skill_level( skill, 6 ); + player_character.set_skill_level( skill, 6 ); gen_response_lines( d, 1 ); CHECK( d.responses[0].text == "This is a basic test response." ); @@ -190,20 +193,21 @@ TEST_CASE( "npc_talk_wearing_and_trait", "[npc_talk]" ) dialogue d; npc &talker_npc = prep_test( d ); - for( const trait_id &tr : g->u.get_mutations() ) { - g->u.unset_mutation( tr ); + avatar &player_character = get_avatar(); + for( const trait_id &tr : player_character.get_mutations() ) { + player_character.unset_mutation( tr ); } d.add_topic( "TALK_TEST_WEARING_AND_TRAIT" ); gen_response_lines( d, 1 ); CHECK( d.responses[0].text == "This is a basic test response." ); - g->u.toggle_trait( trait_id( "ELFA_EARS" ) ); + player_character.toggle_trait( trait_id( "ELFA_EARS" ) ); gen_response_lines( d, 3 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is a trait test response." ); CHECK( d.responses[2].text == "This is a short trait test response." ); - g->u.wear_item( item( "badge_marshal" ) ); + player_character.wear_item( item( "badge_marshal" ) ); gen_response_lines( d, 4 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is a trait test response." ); @@ -217,16 +221,16 @@ TEST_CASE( "npc_talk_wearing_and_trait", "[npc_talk]" ) CHECK( d.responses[3].text == "This is a wearing test response." ); CHECK( d.responses[4].text == "This is a npc trait test response." ); CHECK( d.responses[5].text == "This is a npc short trait test response." ); - g->u.toggle_trait( trait_id( "ELFA_EARS" ) ); + player_character.toggle_trait( trait_id( "ELFA_EARS" ) ); talker_npc.toggle_trait( trait_id( "ELFA_EARS" ) ); - g->u.toggle_trait( trait_id( "PSYCHOPATH" ) ); + player_character.toggle_trait( trait_id( "PSYCHOPATH" ) ); talker_npc.toggle_trait( trait_id( "SAPIOVORE" ) ); gen_response_lines( d, 4 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is a wearing test response." ); CHECK( d.responses[2].text == "This is a trait flags test response." ); CHECK( d.responses[3].text == "This is a npc trait flags test response." ); - g->u.toggle_trait( trait_id( "PSYCHOPATH" ) ); + player_character.toggle_trait( trait_id( "PSYCHOPATH" ) ); talker_npc.toggle_trait( trait_id( "SAPIOVORE" ) ); } @@ -234,6 +238,7 @@ TEST_CASE( "npc_talk_effect", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); + avatar &player_character = get_avatar(); d.add_topic( "TALK_TEST_EFFECT" ); gen_response_lines( d, 1 ); @@ -242,7 +247,7 @@ TEST_CASE( "npc_talk_effect", "[npc_talk]" ) gen_response_lines( d, 2 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is an npc effect test response." ); - g->u.add_effect( effect_gave_quest_item, 9999_turns ); + player_character.add_effect( effect_gave_quest_item, 9999_turns ); d.gen_responses( d.topic_stack.back() ); gen_response_lines( d, 3 ); CHECK( d.responses[0].text == "This is a basic test response." ); @@ -254,13 +259,14 @@ TEST_CASE( "npc_talk_service", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); + avatar &player_character = get_avatar(); d.add_topic( "TALK_TEST_SERVICE" ); - g->u.cash = 0; + player_character.cash = 0; talker_npc.add_effect( effect_currently_busy, 9999_turns ); gen_response_lines( d, 1 ); CHECK( d.responses[0].text == "This is a basic test response." ); - g->u.cash = 800; + player_character.cash = 800; gen_response_lines( d, 2 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is a cash test response." ); @@ -460,25 +466,26 @@ TEST_CASE( "npc_talk_switch", "[npc_talk]" ) { dialogue d; prep_test( d ); + avatar &player_character = get_avatar(); d.add_topic( "TALK_TEST_SWITCH" ); - g->u.cash = 1000; + player_character.cash = 1000; gen_response_lines( d, 3 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is an switch 1 test response." ); CHECK( d.responses[2].text == "This is another basic test response." ); - g->u.cash = 100; + player_character.cash = 100; gen_response_lines( d, 3 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is an switch 2 test response." ); CHECK( d.responses[2].text == "This is another basic test response." ); - g->u.cash = 10; + player_character.cash = 10; gen_response_lines( d, 4 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is an switch default 1 test response." ); CHECK( d.responses[2].text == "This is an switch default 2 test response." ); CHECK( d.responses[3].text == "This is another basic test response." ); - g->u.cash = 0; + player_character.cash = 0; gen_response_lines( d, 3 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is an switch default 2 test response." ); @@ -489,13 +496,14 @@ TEST_CASE( "npc_talk_or", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); + avatar &player_character = get_avatar(); d.add_topic( "TALK_TEST_OR" ); - g->u.cash = 0; + player_character.cash = 0; talker_npc.add_effect( effect_currently_busy, 9999_turns ); gen_response_lines( d, 1 ); CHECK( d.responses[0].text == "This is a basic test response." ); - g->u.toggle_trait( trait_id( "ELFA_EARS" ) ); + player_character.toggle_trait( trait_id( "ELFA_EARS" ) ); gen_response_lines( d, 2 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is an or trait test response." ); @@ -505,12 +513,13 @@ TEST_CASE( "npc_talk_and", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); + avatar &player_character = get_avatar(); - g->u.toggle_trait( trait_id( "ELFA_EARS" ) ); + player_character.toggle_trait( trait_id( "ELFA_EARS" ) ); d.add_topic( "TALK_TEST_AND" ); gen_response_lines( d, 1 ); CHECK( d.responses[0].text == "This is a basic test response." ); - g->u.cash = 800; + player_character.cash = 800; talker_npc.remove_effect( effect_currently_busy ); gen_response_lines( d, 2 ); CHECK( d.responses[0].text == "This is a basic test response." ); @@ -521,14 +530,15 @@ TEST_CASE( "npc_talk_nested", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); + avatar &player_character = get_avatar(); d.add_topic( "TALK_TEST_NESTED" ); talker_npc.add_effect( effect_currently_busy, 9999_turns ); - g->u.cash = 0; + player_character.cash = 0; gen_response_lines( d, 1 ); CHECK( d.responses[0].text == "This is a basic test response." ); - g->u.cash = 800; - g->u.int_cur = 11; + player_character.cash = 800; + player_character.int_cur = 11; gen_response_lines( d, 2 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is a complex nested test response." ); @@ -537,8 +547,9 @@ TEST_CASE( "npc_talk_nested", "[npc_talk]" ) TEST_CASE( "npc_talk_conditionals", "[npc_talk]" ) { dialogue d; + avatar &player_character = get_avatar(); prep_test( d ); - g->u.cash = 800; + player_character.cash = 800; d.add_topic( "TALK_TEST_TRUE_FALSE_CONDITIONAL" ); gen_response_lines( d, 3 ); @@ -550,7 +561,7 @@ TEST_CASE( "npc_talk_conditionals", "[npc_talk]" ) CHECK( trial_success == true ); talk_effect_t &trial_effect = trial_success ? chosen.success : chosen.failure; CHECK( trial_effect.next_topic.id == "TALK_TEST_TRUE_CONDITION_NEXT" ); - g->u.cash = 0; + player_character.cash = 0; gen_response_lines( d, 3 ); CHECK( d.responses[0].text == "This is a basic test response." ); CHECK( d.responses[1].text == "This is a true/false false response." ); @@ -566,8 +577,9 @@ TEST_CASE( "npc_talk_items", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); + avatar &player_character = get_avatar(); - g->u.remove_items_with( []( const item & it ) { + player_character.remove_items_with( []( const item & it ) { return it.get_category().get_id() == item_category_id( "books" ) || it.get_category().get_id() == item_category_id( "food" ) || it.typeId() == itype_id( "bottle_glass" ); @@ -590,17 +602,17 @@ TEST_CASE( "npc_talk_items", "[npc_talk]" ) const auto has_beer_bottle = [&]( player & p, int count ) { return has_item( p, "bottle_glass", 1 ) && has_item( p, "beer", count ); }; - g->u.cash = 1000; - g->u.int_cur = 8; - g->u.worn.push_back( item( "backpack" ) ); + player_character.cash = 1000; + player_character.int_cur = 8; + player_character.worn.push_back( item( "backpack" ) ); d.add_topic( "TALK_TEST_EFFECTS" ); gen_response_lines( d, 19 ); // add and remove effect - REQUIRE_FALSE( g->u.has_effect( effect_infection ) ); + REQUIRE_FALSE( player_character.has_effect( effect_infection ) ); talk_effect_t &effects = d.responses[1].success; effects.apply( d ); - CHECK( g->u.has_effect( effect_infection ) ); - CHECK( g->u.get_effect_dur( effect_infection ) == time_duration::from_turns( 10 ) ); + CHECK( player_character.has_effect( effect_infection ) ); + CHECK( player_character.get_effect_dur( effect_infection ) == time_duration::from_turns( 10 ) ); REQUIRE_FALSE( talker_npc.has_effect( effect_infection ) ); effects = d.responses[2].success; effects.apply( d ); @@ -608,54 +620,54 @@ TEST_CASE( "npc_talk_items", "[npc_talk]" ) CHECK( talker_npc.get_effect( effect_infection ).is_permanent() ); effects = d.responses[3].success; effects.apply( d ); - CHECK_FALSE( g->u.has_effect( effect_infection ) ); + CHECK_FALSE( player_character.has_effect( effect_infection ) ); effects = d.responses[4].success; effects.apply( d ); CHECK_FALSE( talker_npc.has_effect( effect_infection ) ); // add and remove trait - REQUIRE_FALSE( g->u.has_trait( trait_PROF_FED ) ); + REQUIRE_FALSE( player_character.has_trait( trait_PROF_FED ) ); effects = d.responses[5].success; effects.apply( d ); - CHECK( g->u.has_trait( trait_PROF_FED ) ); + CHECK( player_character.has_trait( trait_PROF_FED ) ); REQUIRE_FALSE( talker_npc.has_trait( trait_PROF_FED ) ); effects = d.responses[6].success; effects.apply( d ); CHECK( talker_npc.has_trait( trait_PROF_FED ) ); effects = d.responses[7].success; effects.apply( d ); - CHECK_FALSE( g->u.has_trait( trait_PROF_FED ) ); + CHECK_FALSE( player_character.has_trait( trait_PROF_FED ) ); effects = d.responses[8].success; effects.apply( d ); CHECK_FALSE( talker_npc.has_trait( trait_PROF_FED ) ); // buying and spending talker_npc.op_of_u.owed = 1000; - REQUIRE_FALSE( has_beer_bottle( g->u, 2 ) ); + REQUIRE_FALSE( has_beer_bottle( player_character, 2 ) ); REQUIRE( talker_npc.op_of_u.owed == 1000 ); effects = d.responses[9].success; effects.apply( d ); CHECK( talker_npc.op_of_u.owed == 500 ); - CHECK( has_beer_bottle( g->u, 2 ) ); - REQUIRE_FALSE( has_item( g->u, "bottle_plastic", 1 ) ); + CHECK( has_beer_bottle( player_character, 2 ) ); + REQUIRE_FALSE( has_item( player_character, "bottle_plastic", 1 ) ); effects = d.responses[10].success; effects.apply( d ); - CHECK( has_item( g->u, "bottle_plastic", 1 ) ); + CHECK( has_item( player_character, "bottle_plastic", 1 ) ); CHECK( talker_npc.op_of_u.owed == 500 ); effects = d.responses[11].success; effects.apply( d ); CHECK( talker_npc.op_of_u.owed == 0 ); talker_npc.op_of_u.owed = 1000; // effect chains - REQUIRE_FALSE( g->u.has_effect( effect_infected ) ); + REQUIRE_FALSE( player_character.has_effect( effect_infected ) ); REQUIRE_FALSE( talker_npc.has_effect( effect_infected ) ); - REQUIRE_FALSE( g->u.has_trait( trait_PROF_SWAT ) ); + REQUIRE_FALSE( player_character.has_trait( trait_PROF_SWAT ) ); REQUIRE_FALSE( talker_npc.has_trait( trait_PROF_SWAT ) ); effects = d.responses[12].success; effects.apply( d ); - CHECK( g->u.has_effect( effect_infected ) ); - CHECK( g->u.get_effect_dur( effect_infected ) == time_duration::from_turns( 10 ) ); + CHECK( player_character.has_effect( effect_infected ) ); + CHECK( player_character.get_effect_dur( effect_infected ) == time_duration::from_turns( 10 ) ); CHECK( talker_npc.has_effect( effect_infected ) ); CHECK( talker_npc.get_effect( effect_infected ).is_permanent() ); - CHECK( g->u.has_trait( trait_PROF_SWAT ) ); + CHECK( player_character.has_trait( trait_PROF_SWAT ) ); CHECK( talker_npc.has_trait( trait_PROF_SWAT ) ); CHECK( talker_npc.op_of_u.owed == 0 ); CHECK( talker_npc.get_attitude() == NPCATT_KILL ); @@ -707,17 +719,17 @@ TEST_CASE( "npc_talk_items", "[npc_talk]" ) // test sell and consume d.add_topic( "TALK_TEST_EFFECTS" ); gen_response_lines( d, 19 ); - REQUIRE( has_item( g->u, "bottle_plastic", 1 ) ); - REQUIRE( has_beer_bottle( g->u, 2 ) ); - const std::vector glass_bottles = g->u.items_with( []( const item & it ) { + REQUIRE( has_item( player_character, "bottle_plastic", 1 ) ); + REQUIRE( has_beer_bottle( player_character, 2 ) ); + const std::vector glass_bottles = player_character.items_with( []( const item & it ) { return it.typeId() == itype_id( "bottle_glass" ); } ); REQUIRE( !glass_bottles.empty() ); - REQUIRE( g->u.wield( *glass_bottles.front() ) ); + REQUIRE( player_character.wield( *glass_bottles.front() ) ); effects = d.responses[14].success; effects.apply( d ); - CHECK_FALSE( has_item( g->u, "bottle_plastic", 1 ) ); - CHECK_FALSE( has_item( g->u, "beer", 1 ) ); + CHECK_FALSE( has_item( player_character, "bottle_plastic", 1 ) ); + CHECK_FALSE( has_item( player_character, "beer", 1 ) ); CHECK( has_item( talker_npc, "bottle_plastic", 1 ) ); CHECK( has_item( talker_npc, "beer", 2 ) ); effects = d.responses[15].success; @@ -726,11 +738,11 @@ TEST_CASE( "npc_talk_items", "[npc_talk]" ) CHECK( has_item( talker_npc, "beer", 1 ) ); effects = d.responses[16].success; effects.apply( d ); - CHECK( has_item( g->u, "beer", 1 ) ); + CHECK( has_item( player_character, "beer", 1 ) ); effects = d.responses[17].success; effects.apply( d ); - CHECK( has_item( g->u, "beer", 0 ) ); - CHECK_FALSE( has_item( g->u, "beer", 1 ) ); + CHECK( has_item( player_character, "beer", 0 ) ); + CHECK_FALSE( has_item( player_character, "beer", 1 ) ); } TEST_CASE( "npc_talk_combat_commands", "[npc_talk]" ) @@ -848,13 +860,14 @@ TEST_CASE( "npc_talk_bionics", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); + avatar &player_character = get_avatar(); - g->u.clear_bionics(); + player_character.clear_bionics(); talker_npc.clear_bionics(); d.add_topic( "TALK_TEST_BIONICS" ); gen_response_lines( d, 1 ); CHECK( d.responses[0].text == "This is a basic test response." ); - g->u.add_bionic( bionic_id( "bio_ads" ) ); + player_character.add_bionic( bionic_id( "bio_ads" ) ); talker_npc.add_bionic( bionic_id( "bio_power_storage" ) ); gen_response_lines( d, 3 ); CHECK( d.responses[0].text == "This is a basic test response." ); @@ -866,9 +879,10 @@ TEST_CASE( "npc_talk_effects", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); + avatar &player_character = get_avatar(); // speaker effects just use are owed because I don't want to do anything complicated - g->u.cash = 1000; + player_character.cash = 1000; talker_npc.op_of_u.owed = 2000; CHECK( talker_npc.op_of_u.owed == 2000 ); d.add_topic( "TALK_TEST_SPEAKER_EFFECT_SIMPLE" ); diff --git a/tests/vehicle_drag_test.cpp b/tests/vehicle_drag_test.cpp index d749fb75c1498..499b2eafc1ddb 100644 --- a/tests/vehicle_drag_test.cpp +++ b/tests/vehicle_drag_test.cpp @@ -7,7 +7,6 @@ #include "bodypart.h" #include "calendar.h" #include "catch/catch.hpp" -#include "game.h" #include "map.h" #include "map_helpers.h" #include "point.h" @@ -28,26 +27,28 @@ static void clear_game_drag( const ter_id &terrain ) clear_creatures(); clear_npcs(); + avatar &player_character = get_avatar(); // Move player somewhere safe - CHECK( !g->u.in_vehicle ); - g->u.setpos( tripoint_zero ); + CHECK( !player_character.in_vehicle ); + player_character.setpos( tripoint_zero ); // Blind the player to avoid needless drawing-related overhead - g->u.add_effect( effect_blind, 1_turns, num_bp, true ); + player_character.add_effect( effect_blind, 1_turns, num_bp, true ); // Make sure the ST is 8 so that muscle powered results are consistent - g->u.str_cur = 8; + player_character.str_cur = 8; build_test_map( terrain ); + map &here = get_map(); // hard force a rebuild of caches - g->m.shift( point_south ); - g->m.shift( point_north ); + here.shift( point_south ); + here.shift( point_north ); } static vehicle *setup_drag_test( const vproto_id &veh_id ) { clear_vehicles(); const tripoint map_starting_point( 60, 60, 0 ); - vehicle *veh_ptr = g->m.add_vehicle( veh_id, map_starting_point, -90, 0, 0 ); + vehicle *veh_ptr = get_map().add_vehicle( veh_id, map_starting_point, -90, 0, 0 ); REQUIRE( veh_ptr != nullptr ); if( veh_ptr == nullptr ) { diff --git a/tests/vehicle_efficiency_test.cpp b/tests/vehicle_efficiency_test.cpp index 50437ff9686d0..87ceb1d9257bd 100644 --- a/tests/vehicle_efficiency_test.cpp +++ b/tests/vehicle_efficiency_test.cpp @@ -171,7 +171,8 @@ static int test_efficiency( const vproto_id &veh_id, int &expected_mass, clear_game( terrain ); const tripoint map_starting_point( 60, 60, 0 ); - vehicle *veh_ptr = g->m.add_vehicle( veh_id, map_starting_point, -90, 0, 0 ); + map &here = get_map(); + vehicle *veh_ptr = here.add_vehicle( veh_id, map_starting_point, -90, 0, 0 ); REQUIRE( veh_ptr != nullptr ); if( veh_ptr == nullptr ) { @@ -221,18 +222,18 @@ static int test_efficiency( const vproto_id &veh_id, int &expected_mass, CHECK( veh.safe_velocity() > 0 ); while( veh.engine_on && veh.safe_velocity() > 0 && cycles_left > 0 ) { cycles_left--; - g->m.vehmove(); + here.vehmove(); veh.idle( true ); // If the vehicle starts skidding, the effects become random and test is RUINED REQUIRE( !veh.skidding ); for( const tripoint &pos : veh.get_points() ) { - REQUIRE( g->m.ter( pos ) ); + REQUIRE( here.ter( pos ) ); } // How much it moved tiles_travelled += square_dist( starting_point, veh.global_pos3() ); // Bring it back to starting point to prevent it from leaving the map const tripoint displacement = starting_point - veh.global_pos3(); - g->m.displace_vehicle( veh, displacement ); + here.displace_vehicle( veh, displacement ); if( reset_velocity_turn < 0 ) { continue; } diff --git a/tests/vehicle_turrets_test.cpp b/tests/vehicle_turrets_test.cpp index 8f8afb3d43083..6c319c9adf96d 100644 --- a/tests/vehicle_turrets_test.cpp +++ b/tests/vehicle_turrets_test.cpp @@ -7,7 +7,6 @@ #include "ammo.h" #include "avatar.h" #include "catch/catch.hpp" -#include "game.h" #include "item.h" #include "item_location.h" #include "itype.h" @@ -61,9 +60,11 @@ static const vpart_info *biggest_tank( const ammotype &ammo ) TEST_CASE( "vehicle_turret", "[vehicle] [gun] [magazine] [.]" ) { + map &here = get_map(); + avatar &player_character = get_avatar(); for( auto e : turret_types() ) { SECTION( e->name() ) { - vehicle *veh = g->m.add_vehicle( vproto_id( "none" ), point( 65, 65 ), 270, 0, 0 ); + vehicle *veh = here.add_vehicle( vproto_id( "none" ), point( 65, 65 ), 270, 0, 0 ); REQUIRE( veh ); const int idx = veh->install_part( point_zero, e->get_id(), true ); @@ -94,10 +95,10 @@ TEST_CASE( "vehicle_turret", "[vehicle] [gun] [magazine] [.]" ) REQUIRE( qry.query() == turret_data::status::ready ); REQUIRE( qry.range() > 0 ); - g->u.setpos( veh->global_part_pos3( idx ) ); - REQUIRE( qry.fire( g->u, g->u.pos() + point( qry.range(), 0 ) ) > 0 ); + player_character.setpos( veh->global_part_pos3( idx ) ); + REQUIRE( qry.fire( player_character, player_character.pos() + point( qry.range(), 0 ) ) > 0 ); - g->m.destroy_vehicle( veh ); + here.destroy_vehicle( veh ); } } } From 8185212260cc7c59086fa6fd4795f5aa0e6cb2df Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Sun, 28 Jun 2020 22:20:22 +0000 Subject: [PATCH 151/206] Map reference migration part eight --- src/item_pocket.cpp | 13 ++-- src/map.cpp | 4 +- src/panels.cpp | 32 ++++---- src/pixel_minimap.cpp | 26 +++---- src/sounds.cpp | 141 +++++++++++++++++++--------------- src/visitable.cpp | 14 ++-- tests/archery_damage_test.cpp | 12 +-- tests/modify_morale_test.cpp | 14 ++-- tests/projectile_test.cpp | 16 ++-- tests/vehicle_power_test.cpp | 22 +++--- tests/vehicle_test.cpp | 33 ++++---- 11 files changed, 177 insertions(+), 150 deletions(-) diff --git a/src/item_pocket.cpp b/src/item_pocket.cpp index 743197e547eaf..9312acb413b03 100644 --- a/src/item_pocket.cpp +++ b/src/item_pocket.cpp @@ -5,7 +5,6 @@ #include "cata_utility.h" #include "crafting.h" #include "enums.h" -#include "game.h" #include "generic_factory.h" #include "handle_liquid.h" #include "item.h" @@ -1052,6 +1051,7 @@ void item_pocket::overflow( const tripoint &pos ) // no items to overflow return; } + map &here = get_map(); // first remove items that shouldn't be in there anyway for( auto iter = contents.begin(); iter != contents.end(); ) { ret_val ret_contain = can_contain( *iter ); @@ -1059,7 +1059,7 @@ void item_pocket::overflow( const tripoint &pos ) ( !ret_contain.success() && ret_contain.value() != contain_code::ERR_NO_SPACE && ret_contain.value() != contain_code::ERR_CANNOT_SUPPORT ) ) { - g->m.add_item_or_charges( pos, *iter ); + here.add_item_or_charges( pos, *iter ); iter = contents.erase( iter ); } else { ++iter; @@ -1083,7 +1083,7 @@ void item_pocket::overflow( const tripoint &pos ) if( overflow_count > 0 ) { ammo.charges -= overflow_count; item dropped_ammo( ammo.typeId(), ammo.birthday(), overflow_count ); - g->m.add_item_or_charges( pos, contents.front() ); + here.add_item_or_charges( pos, contents.front() ); total_qty -= overflow_count; } if( ammo.count() == 0 ) { @@ -1102,7 +1102,7 @@ void item_pocket::overflow( const tripoint &pos ) return left.volume() > right.volume(); } ); while( remaining_volume() < 0_ml && !contents.empty() ) { - g->m.add_item_or_charges( pos, contents.front() ); + here.add_item_or_charges( pos, contents.front() ); contents.pop_front(); } } @@ -1111,7 +1111,7 @@ void item_pocket::overflow( const tripoint &pos ) return left.weight() > right.weight(); } ); while( remaining_weight() < 0_gram && !contents.empty() ) { - g->m.add_item_or_charges( pos, contents.front() ); + here.add_item_or_charges( pos, contents.front() ); contents.pop_front(); } } @@ -1133,8 +1133,9 @@ void item_pocket::on_contents_changed() bool item_pocket::spill_contents( const tripoint &pos ) { + map &here = get_map(); for( item &it : contents ) { - g->m.add_item_or_charges( pos, it ); + here.add_item_or_charges( pos, it ); } contents.clear(); diff --git a/src/map.cpp b/src/map.cpp index ce6bb11e60669..e9b3edbb1bad5 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -3642,7 +3642,7 @@ void map::shoot( const tripoint &p, projectile &proj, const bool hit_items ) for( const ammo_effect &ae : ammo_effects::get_all() ) { if( ammo_effects.count( ae.id.str() ) > 0 ) { if( x_in_y( ae.trail_chance, 100 ) ) { - g->m.add_field( p, ae.trail_field_type, rng( ae.trail_intensity_min, ae.trail_intensity_max ) ); + add_field( p, ae.trail_field_type, rng( ae.trail_intensity_min, ae.trail_intensity_max ) ); } } } @@ -6951,7 +6951,7 @@ void map::produce_sap( const tripoint &p, const time_duration &time_since_last_a item sap( "maple_sap", calendar::turn ); - sap.set_item_temperature( temp_to_kelvin( g->m.get_temperature( p ) ) ); + sap.set_item_temperature( temp_to_kelvin( get_temperature( p ) ) ); // Is there a proper container? map_stack items = i_at( p ); diff --git a/src/panels.cpp b/src/panels.cpp index a981de8c666b2..459f366f047ec 100644 --- a/src/panels.cpp +++ b/src/panels.cpp @@ -388,8 +388,9 @@ void overmap_ui::draw_overmap_chunk( const catacurses::window &w_minimap, const mvwputch( w_minimap, point( arrowx + start_x, arrowy + start_y ), c_red, glyph ); } } - - const int sight_points = g->u.overmap_sight_range( g->light_level( g->u.posz() ) ); + avatar &player_character = get_avatar(); + const int sight_points = player_character.overmap_sight_range( g->light_level( + player_character.posz() ) ); for( int i = -3; i <= 3; i++ ) { for( int j = -3; j <= 3; j++ ) { if( i > -3 && i < 3 && j > -3 && j < 3 ) { @@ -399,7 +400,7 @@ void overmap_ui::draw_overmap_chunk( const catacurses::window &w_minimap, const int horde_size = overmap_buffer.get_horde_size( omp ); if( horde_size >= HORDE_VISIBILITY_SIZE ) { if( overmap_buffer.seen( omp ) - && g->u.overmap_los( omp, sight_points ) ) { + && player_character.overmap_los( omp, sight_points ) ) { mvwputch( w_minimap, point( i + 3, j + 3 ), c_green, horde_size > HORDE_VISIBILITY_SIZE * 2 ? 'Z' : 'z' ); } @@ -435,7 +436,7 @@ static std::string get_temp( const avatar &u ) std::string temp; if( u.has_item_with_flag( "THERMOMETER" ) || u.has_bionic( bionic_id( "bio_meteorologist" ) ) ) { - temp = print_temperature( g->weather.get_temperature( u.pos() ) ); + temp = print_temperature( get_weather().get_temperature( u.pos() ) ); } if( temp.empty() ) { return "-"; @@ -1335,11 +1336,12 @@ static void draw_loc_labels( const avatar &u, const catacurses::window &w, bool } else { // NOLINTNEXTLINE(cata-use-named-point-constants) mvwprintz( w, point( 1, 1 ), c_light_gray, _( "Sky :" ) ); - const weather_datum wdata = weather_data( g->weather.weather ); + const weather_datum wdata = weather_data( get_weather().weather ); wprintz( w, wdata.color, " %s", wdata.name ); } // display lighting - const auto ll = get_light_level( g->u.fine_detail_vision_mod() ); + const std::pair ll = get_light_level( + get_avatar().fine_detail_vision_mod() ); mvwprintz( w, point( 1, 2 ), c_light_gray, "%s ", _( "Light:" ) ); wprintz( w, ll.second, ll.first ); @@ -1505,7 +1507,8 @@ static void draw_env_compact( avatar &u, const catacurses::window &w ) mvwprintz( w, point( 8, 3 ), wdata.color, wdata.name ); } // display lighting - const auto ll = get_light_level( g->u.fine_detail_vision_mod() ); + const std::pair ll = get_light_level( + get_avatar().fine_detail_vision_mod() ); mvwprintz( w, point( 8, 4 ), ll.second, ll.first ); // wind const oter_id &cur_om_ter = overmap_buffer.ter( u.global_omt_location() ); @@ -1555,7 +1558,7 @@ static void draw_health_classic( avatar &u, const catacurses::window &w ) vehicle *veh = g->remoteveh(); if( veh == nullptr && u.in_vehicle ) { - veh = veh_pointer_or_null( g->m.veh_at( u.pos() ) ); + veh = veh_pointer_or_null( get_map().veh_at( u.pos() ) ); } werase( w ); @@ -1760,7 +1763,7 @@ static void draw_veh_compact( const avatar &u, const catacurses::window &w ) // vehicle display vehicle *veh = g->remoteveh(); if( veh == nullptr && u.in_vehicle ) { - veh = veh_pointer_or_null( g->m.veh_at( u.pos() ) ); + veh = veh_pointer_or_null( get_map().veh_at( u.pos() ) ); } if( veh ) { veh->print_fuel_indicators( w, point_zero ); @@ -1792,7 +1795,7 @@ static void draw_veh_padding( const avatar &u, const catacurses::window &w ) // vehicle display vehicle *veh = g->remoteveh(); if( veh == nullptr && u.in_vehicle ) { - veh = veh_pointer_or_null( g->m.veh_at( u.pos() ) ); + veh = veh_pointer_or_null( get_map().veh_at( u.pos() ) ); } if( veh ) { veh->print_fuel_indicators( w, point_east ); @@ -1847,7 +1850,7 @@ static void draw_weather_classic( avatar &, const catacurses::window &w ) if( g->get_levz() < 0 ) { mvwprintz( w, point_zero, c_light_gray, _( "Underground" ) ); } else { - const weather_datum wdata = weather_data( g->weather.weather ); + const weather_datum wdata = weather_data( get_weather().weather ); mvwprintz( w, point_zero, c_light_gray, _( "Weather :" ) ); mvwprintz( w, point( 10, 0 ), wdata.color, wdata.name ); } @@ -1862,7 +1865,8 @@ static void draw_lighting_classic( const avatar &u, const catacurses::window &w { werase( w ); - const auto ll = get_light_level( g->u.fine_detail_vision_mod() ); + const std::pair ll = get_light_level( + get_avatar().fine_detail_vision_mod() ); mvwprintz( w, point_zero, c_light_gray, _( "Lighting:" ) ); mvwprintz( w, point( 10, 0 ), ll.second, ll.first ); @@ -1915,7 +1919,7 @@ static void draw_time_classic( const avatar &u, const catacurses::window &w ) } if( u.has_item_with_flag( "THERMOMETER" ) || u.has_bionic( bionic_id( "bio_meteorologist" ) ) ) { - std::string temp = print_temperature( g->weather.get_temperature( u.pos() ) ); + std::string temp = print_temperature( get_weather().get_temperature( u.pos() ) ); mvwprintz( w, point( 31, 0 ), c_light_gray, _( "Temp : " ) + temp ); } @@ -1978,7 +1982,7 @@ static void draw_mana_wide( const player &u, const catacurses::window &w ) static bool spell_panel() { - return g->u.magic.knows_spell(); + return get_avatar().magic.knows_spell(); } bool default_render() diff --git a/src/pixel_minimap.cpp b/src/pixel_minimap.cpp index a98b1d3bfe376..e48725537c7d4 100644 --- a/src/pixel_minimap.cpp +++ b/src/pixel_minimap.cpp @@ -83,17 +83,16 @@ SDL_Texture_Ptr create_cache_texture( const SDL_Renderer_Ptr &renderer, int tile SDL_Color get_map_color_at( const tripoint &p ) { - const map &m = g->m; - - if( const auto vp = m.veh_at( p ) ) { + const map &here = get_map(); + if( const auto vp = here.veh_at( p ) ) { return curses_color_to_SDL( vp->vehicle().part_color( vp->part_index() ) ); } - if( const auto furn_id = m.furn( p ) ) { + if( const auto furn_id = here.furn( p ) ) { return curses_color_to_SDL( furn_id->color() ); } - return curses_color_to_SDL( m.ter( p )->color() ); + return curses_color_to_SDL( here.ter( p )->color() ); } SDL_Color get_critter_color( Creature *critter, int flicker, int mixture ) @@ -102,7 +101,7 @@ SDL_Color get_critter_color( Creature *critter, int flicker, int mixture ) if( const monster *m = dynamic_cast( critter ) ) { //faction status (attacking or tracking) determines if red highlights get applied to creature - const monster_attitude matt = m->attitude( &g->u ); + const monster_attitude matt = m->attitude( &get_avatar() ); if( MATT_ATTACK == matt || MATT_FOLLOW == matt ) { const SDL_Color red_pixel = SDL_Color{ 0xFF, 0x0, 0x0, 0xFF }; @@ -221,7 +220,7 @@ void pixel_minimap::set_settings( const pixel_minimap_settings &settings ) void pixel_minimap::prepare_cache_for_updates( const tripoint ¢er ) { - const tripoint new_center_sm = g->m.get_abs_sub() + ms_to_sm_copy( center ); + const tripoint new_center_sm = get_map().get_abs_sub() + ms_to_sm_copy( center ); const tripoint center_sm_diff = cached_center_sm - new_center_sm; //invalidate the cache if the game shifted more than one submap in the last update, or if z-level changed. @@ -295,10 +294,11 @@ void pixel_minimap::flush_cache_updates() void pixel_minimap::update_cache_at( const tripoint &sm_pos ) { - const level_cache &access_cache = g->m.access_cache( sm_pos.z ); - const bool nv_goggle = g->u.get_vision_modes()[NV_GOGGLES]; + const map &here = get_map(); + const level_cache &access_cache = here.access_cache( sm_pos.z ); + const bool nv_goggle = get_avatar().get_vision_modes()[NV_GOGGLES]; - submap_cache &cache_item = get_cache_at( g->m.get_abs_sub() + sm_pos ); + submap_cache &cache_item = get_cache_at( here.get_abs_sub() + sm_pos ); const tripoint ms_pos = sm_to_ms_copy( sm_pos ); cache_item.touched = true; @@ -445,7 +445,7 @@ void pixel_minimap::render( const tripoint ¢er ) void pixel_minimap::render_cache( const tripoint ¢er ) { - const tripoint sm_center = g->m.get_abs_sub() + ms_to_sm_copy( center ); + const tripoint sm_center = get_map().get_abs_sub() + ms_to_sm_copy( center ); const tripoint sm_offset = tripoint{ total_tiles_count.x / SEEX / 2, total_tiles_count.y / SEEY / 2, 0 @@ -494,7 +494,7 @@ void pixel_minimap::render_critters( const tripoint ¢er ) mixture = lerp_clamped( 0, 100, std::max( s, 0.0f ) ); } - const level_cache &access_cache = g->m.access_cache( center.z ); + const level_cache &access_cache = get_map().access_cache( center.z ); const int start_x = center.x - total_tiles_count.x / 2; const int start_y = center.y - total_tiles_count.y / 2; @@ -514,7 +514,7 @@ void pixel_minimap::render_critters( const tripoint ¢er ) const auto critter = g->critter_at( p, true ); - if( critter == nullptr || !g->u.sees( *critter ) ) { + if( critter == nullptr || !get_avatar().sees( *critter ) ) { continue; } diff --git a/src/sounds.cpp b/src/sounds.cpp index 9698f5c29e81e..0d48fc898703e 100644 --- a/src/sounds.cpp +++ b/src/sounds.cpp @@ -278,7 +278,7 @@ static int get_signal_for_hordes( const centroid ¢r ) { //Volume in tiles. Signal for hordes in submaps //modify vol using weather vol.Weather can reduce monster hearing - const int vol = centr.volume - weather::sound_attn( g->weather.weather ); + const int vol = centr.volume - weather::sound_attn( get_weather().weather ); const int min_vol_cap = 60; //Hordes can't hear volume lower than this const int underground_div = 2; //Coefficient for volume reduction underground const int hordes_sig_div = SEEX; //Divider coefficient for hordes @@ -302,7 +302,7 @@ static int get_signal_for_hordes( const centroid ¢r ) void sounds::process_sounds() { std::vector sound_clusters = cluster_sounds( recent_sounds ); - const int weather_vol = weather::sound_attn( g->weather.weather ); + const int weather_vol = weather::sound_attn( get_weather().weather ); for( const auto &this_centroid : sound_clusters ) { // Since monsters don't go deaf ATM we can just use the weather modified volume // If they later get physical effects from loud noises we'll have to change this @@ -314,7 +314,7 @@ void sounds::process_sounds() int sig_power = get_signal_for_hordes( this_centroid ); if( sig_power > 0 ) { - const point abs_ms = g->m.getabs( source.xy() ); + const point abs_ms = get_map().getabs( source.xy() ); const point abs_sm = ms_to_sm_copy( abs_ms ); const tripoint target( abs_sm, source.z ); overmap_buffer.signal_hordes( target, sig_power ); @@ -384,7 +384,7 @@ void sounds::process_sound_markers( player *p ) { bool is_deaf = p->is_deaf(); const float volume_multiplier = p->hearing_ability(); - const int weather_vol = weather::sound_attn( g->weather.weather ); + const int weather_vol = weather::sound_attn( get_weather().weather ); for( const auto &sound_event_pair : sounds_since_last_turn ) { const tripoint &pos = sound_event_pair.first; const sound_event &sound = sound_event_pair.second; @@ -464,7 +464,7 @@ void sounds::process_sound_markers( player *p ) } // don't print our own noise or things without descriptions - if( !sound.ambient && ( pos != p->pos() ) && !g->m.pl_sees( pos, distance_to_sound ) ) { + if( !sound.ambient && ( pos != p->pos() ) && !get_map().pl_sees( pos, distance_to_sound ) ) { if( !p->activity.is_distraction_ignored( distraction_type::noise ) && !get_safemode().is_sound_safe( sound.description, distance_to_sound ) ) { const std::string query = string_format( _( "Heard %s!" ), description ); @@ -536,7 +536,7 @@ void sounds::process_sound_markers( player *p ) // Enumerate the valid points the player *cannot* see. // Unless the source is on a different z-level, then any point is fine std::vector unseen_points; - for( const tripoint &newp : g->m.points_in_radius( pos, err_offset ) ) { + for( const tripoint &newp : get_map().points_in_radius( pos, err_offset ) ) { if( diff_z || !p->sees( newp ) ) { unseen_points.emplace_back( newp ); } @@ -647,19 +647,20 @@ int sfx::set_channel_volume( channel channel, int volume ) void sfx::do_vehicle_engine_sfx() { static const channel ch = channel::interior_engine_sound; - if( !g->u.in_vehicle ) { + const avatar &player_character = get_avatar(); + if( !player_character.in_vehicle ) { fade_audio_channel( ch, 300 ); add_msg( m_debug, "STOP interior_engine_sound, OUT OF CAR" ); return; } - if( g->u.in_sleep_state() && !audio_muted ) { + if( player_character.in_sleep_state() && !audio_muted ) { fade_audio_channel( channel::any, 300 ); audio_muted = true; return; - } else if( g->u.in_sleep_state() && audio_muted ) { + } else if( player_character.in_sleep_state() && audio_muted ) { return; } - optional_vpart_position vpart_opt = g->m.veh_at( g->u.pos() ); + optional_vpart_position vpart_opt = get_map().veh_at( player_character.pos() ); vehicle *veh; if( vpart_opt.has_value() ) { veh = &vpart_opt->vehicle(); @@ -694,7 +695,7 @@ void sfx::do_vehicle_engine_sfx() if( !is_channel_playing( ch ) ) { play_ambient_variant_sound( id_and_variant.first, id_and_variant.second, - sfx::get_heard_volume( g->u.pos() ), ch, 1000 ); + sfx::get_heard_volume( player_character.pos() ), ch, 1000 ); add_msg( m_debug, "START %s %s", id_and_variant.first, id_and_variant.second ); } else { add_msg( m_debug, "PLAYING" ); @@ -731,10 +732,12 @@ void sfx::do_vehicle_engine_sfx() } if( current_gear > previous_gear ) { - play_variant_sound( "vehicle", "gear_shift", get_heard_volume( g->u.pos() ), 0, 0.8, 0.8 ); + play_variant_sound( "vehicle", "gear_shift", get_heard_volume( player_character.pos() ), 0, 0.8, + 0.8 ); add_msg( m_debug, "GEAR UP" ); } else if( current_gear < previous_gear ) { - play_variant_sound( "vehicle", "gear_shift", get_heard_volume( g->u.pos() ), 0, 1.2, 1.2 ); + play_variant_sound( "vehicle", "gear_shift", get_heard_volume( player_character.pos() ), 0, 1.2, + 1.2 ); add_msg( m_debug, "GEAR DOWN" ); } if( ( safe_speed != 0 ) ) { @@ -754,7 +757,7 @@ void sfx::do_vehicle_engine_sfx() Mix_HaltChannel( static_cast( ch ) ); add_msg( m_debug, "STOP speed %d =/= %d", current_speed, previous_speed ); play_ambient_variant_sound( id_and_variant.first, id_and_variant.second, - sfx::get_heard_volume( g->u.pos() ), ch, 1000, pitch ); + sfx::get_heard_volume( player_character.pos() ), ch, 1000, pitch ); add_msg( m_debug, "PITCH %f", pitch ); } previous_speed = current_speed; @@ -765,21 +768,22 @@ void sfx::do_vehicle_exterior_engine_sfx() { static const channel ch = channel::exterior_engine_sound; static const int ch_int = static_cast( ch ); + const avatar &player_character = get_avatar(); // early bail-outs for efficiency - if( g->u.in_vehicle ) { + if( player_character.in_vehicle ) { fade_audio_channel( ch, 300 ); add_msg( m_debug, "STOP exterior_engine_sound, IN CAR" ); return; } - if( g->u.in_sleep_state() && !audio_muted ) { + if( player_character.in_sleep_state() && !audio_muted ) { fade_audio_channel( channel::any, 300 ); audio_muted = true; return; - } else if( g->u.in_sleep_state() && audio_muted ) { + } else if( player_character.in_sleep_state() && audio_muted ) { return; } - VehicleList vehs = g->m.get_vehicles(); + VehicleList vehs = get_map().get_vehicles(); unsigned char noise_factor = 0; unsigned char vol = 0; vehicle *veh = nullptr; @@ -787,9 +791,10 @@ void sfx::do_vehicle_exterior_engine_sfx() for( wrapped_vehicle vehicle : vehs ) { if( vehicle.v->vehicle_noise > 0 && vehicle.v->vehicle_noise - - sound_distance( g->u.pos(), vehicle.v->global_pos3() ) > noise_factor ) { + sound_distance( player_character.pos(), vehicle.v->global_pos3() ) > noise_factor ) { - noise_factor = vehicle.v->vehicle_noise - sound_distance( g->u.pos(), vehicle.v->global_pos3() ); + noise_factor = vehicle.v->vehicle_noise - sound_distance( player_character.pos(), + vehicle.v->global_pos3() ); veh = vehicle.v; } } @@ -850,19 +855,20 @@ void sfx::do_vehicle_exterior_engine_sfx() void sfx::do_ambient() { - if( g->u.in_sleep_state() && !audio_muted ) { + const avatar &player_character = get_avatar(); + if( player_character.in_sleep_state() && !audio_muted ) { fade_audio_channel( channel::any, 300 ); audio_muted = true; return; - } else if( g->u.in_sleep_state() && audio_muted ) { + } else if( player_character.in_sleep_state() && audio_muted ) { return; } audio_muted = false; - const bool is_deaf = g->u.is_deaf(); - const int heard_volume = get_heard_volume( g->u.pos() ); - const bool is_underground = g->u.pos().z < 0; - const bool is_sheltered = g->is_sheltered( g->u.pos() ); - const bool weather_changed = g->weather.weather != previous_weather; + const bool is_deaf = player_character.is_deaf(); + const int heard_volume = get_heard_volume( player_character.pos() ); + const bool is_underground = player_character.pos().z < 0; + const bool is_sheltered = g->is_sheltered( player_character.pos() ); + const bool weather_changed = get_weather().weather != previous_weather; // Step in at night time / we are not indoors if( is_night( calendar::turn ) && !is_sheltered && !is_channel_playing( channel::nighttime_outdoors_env ) && !is_deaf ) { @@ -893,14 +899,16 @@ void sfx::do_ambient() fade_audio_group( group::time_of_day, 1000 ); play_ambient_variant_sound( "environment", "indoors", heard_volume, channel::indoors_env, 1000 ); } + + weather_type current_weather = get_weather().weather; // We are indoors and it is also raining - if( g->weather.weather >= WEATHER_DRIZZLE && g->weather.weather <= WEATHER_ACID_RAIN && + if( current_weather >= WEATHER_DRIZZLE && current_weather <= WEATHER_ACID_RAIN && !is_underground && is_sheltered && !is_channel_playing( channel::indoors_rain_env ) ) { play_ambient_variant_sound( "environment", "indoors_rain", heard_volume, channel::indoors_rain_env, 1000 ); } - if( ( !is_sheltered && g->weather.weather != WEATHER_CLEAR && !is_deaf && + if( ( !is_sheltered && current_weather != WEATHER_CLEAR && !is_deaf && !is_channel_playing( channel::outdoors_snow_env ) && !is_channel_playing( channel::outdoors_flurry_env ) && !is_channel_playing( channel::outdoors_thunderstorm_env ) && @@ -911,7 +919,7 @@ void sfx::do_ambient() weather_changed && !is_deaf ) ) { fade_audio_group( group::weather, 1000 ); // We are outside and there is precipitation - switch( g->weather.weather ) { + switch( current_weather ) { case WEATHER_ACID_DRIZZLE: case WEATHER_DRIZZLE: case WEATHER_LIGHT_DRIZZLE: @@ -955,7 +963,7 @@ void sfx::do_ambient() } } // Keep track of weather to compare for next iteration - previous_weather = g->weather.weather; + previous_weather = current_weather; } // firing is the item that is fired. It may be the wielded gun, but it can also be an attached @@ -978,8 +986,9 @@ void sfx::generate_gun_sound( const player &source_arg, const item &firing ) int angle = 0; int distance = 0; std::string selected_sound; - // this does not mean p == g->u (it could be a vehicle turret) - if( g->u.pos() == source ) { + const avatar &player_character = get_avatar(); + // this does not mean p == avatar (it could be a vehicle turret) + if( player_character.pos() == source ) { selected_sound = "fire_gun"; const auto mods = firing.gunmods(); @@ -992,7 +1001,7 @@ void sfx::generate_gun_sound( const player &source_arg, const item &firing ) } else { angle = get_heard_angle( source ); - distance = sound_distance( g->u.pos(), source ); + distance = sound_distance( player_character.pos(), source ); if( distance <= 17 ) { selected_sound = "fire_gun"; } else { @@ -1175,19 +1184,20 @@ void sfx::do_player_death_hurt( const player &target, bool death ) void sfx::do_danger_music() { - if( g->u.in_sleep_state() && !audio_muted ) { + avatar &player_character = get_avatar(); + if( player_character.in_sleep_state() && !audio_muted ) { fade_audio_channel( channel::any, 100 ); audio_muted = true; return; - } else if( ( g->u.in_sleep_state() && audio_muted ) || + } else if( ( player_character.in_sleep_state() && audio_muted ) || is_channel_playing( channel::chainsaw_theme ) ) { fade_audio_group( group::context_themes, 1000 ); return; } audio_muted = false; int hostiles = 0; - for( auto &critter : g->u.get_visible_creatures( 40 ) ) { - if( g->u.attitude_to( *critter ) == Creature::Attitude::HOSTILE ) { + for( auto &critter : player_character.get_visible_creatures( 40 ) ) { + if( player_character.attitude_to( *critter ) == Creature::Attitude::HOSTILE ) { hostiles++; } } @@ -1225,43 +1235,46 @@ void sfx::do_danger_music() void sfx::do_fatigue() { + avatar &player_character = get_avatar(); /*15: Stamina 75% 16: Stamina 50% 17: Stamina 25%*/ - if( g->u.get_stamina() >= g->u.get_stamina_max() * .75 ) { + if( player_character.get_stamina() >= player_character.get_stamina_max() * .75 ) { fade_audio_group( group::fatigue, 2000 ); return; - } else if( g->u.get_stamina() <= g->u.get_stamina_max() * .74 - && g->u.get_stamina() >= g->u.get_stamina_max() * .5 && - g->u.male && !is_channel_playing( channel::stamina_75 ) ) { + } else if( player_character.get_stamina() <= player_character.get_stamina_max() * .74 && + player_character.get_stamina() >= player_character.get_stamina_max() * .5 && + player_character.male && !is_channel_playing( channel::stamina_75 ) ) { fade_audio_group( group::fatigue, 1000 ); play_ambient_variant_sound( "plmove", "fatigue_m_low", 100, channel::stamina_75, 1000 ); return; - } else if( g->u.get_stamina() <= g->u.get_stamina_max() * .49 - && g->u.get_stamina() >= g->u.get_stamina_max() * .25 && - g->u.male && !is_channel_playing( channel::stamina_50 ) ) { + } else if( player_character.get_stamina() <= player_character.get_stamina_max() * .49 && + player_character.get_stamina() >= player_character.get_stamina_max() * .25 && + player_character.male && !is_channel_playing( channel::stamina_50 ) ) { fade_audio_group( group::fatigue, 1000 ); play_ambient_variant_sound( "plmove", "fatigue_m_med", 100, channel::stamina_50, 1000 ); return; - } else if( g->u.get_stamina() <= g->u.get_stamina_max() * .24 && g->u.get_stamina() >= 0 && - g->u.male && !is_channel_playing( channel::stamina_35 ) ) { + } else if( player_character.get_stamina() <= player_character.get_stamina_max() * .24 && + player_character.get_stamina() >= 0 && player_character.male && + !is_channel_playing( channel::stamina_35 ) ) { fade_audio_group( group::fatigue, 1000 ); play_ambient_variant_sound( "plmove", "fatigue_m_high", 100, channel::stamina_35, 1000 ); return; - } else if( g->u.get_stamina() <= g->u.get_stamina_max() * .74 - && g->u.get_stamina() >= g->u.get_stamina_max() * .5 && - !g->u.male && !is_channel_playing( channel::stamina_75 ) ) { + } else if( player_character.get_stamina() <= player_character.get_stamina_max() * .74 && + player_character.get_stamina() >= player_character.get_stamina_max() * .5 && + !player_character.male && !is_channel_playing( channel::stamina_75 ) ) { fade_audio_group( group::fatigue, 1000 ); play_ambient_variant_sound( "plmove", "fatigue_f_low", 100, channel::stamina_75, 1000 ); return; - } else if( g->u.get_stamina() <= g->u.get_stamina_max() * .49 - && g->u.get_stamina() >= g->u.get_stamina_max() * .25 && - !g->u.male && !is_channel_playing( channel::stamina_50 ) ) { + } else if( player_character.get_stamina() <= player_character.get_stamina_max() * .49 && + player_character.get_stamina() >= player_character.get_stamina_max() * .25 && + !player_character.male && !is_channel_playing( channel::stamina_50 ) ) { fade_audio_group( group::fatigue, 1000 ); play_ambient_variant_sound( "plmove", "fatigue_f_med", 100, channel::stamina_50, 1000 ); return; - } else if( g->u.get_stamina() <= g->u.get_stamina_max() * .24 && g->u.get_stamina() >= 0 && - !g->u.male && !is_channel_playing( channel::stamina_35 ) ) { + } else if( player_character.get_stamina() <= player_character.get_stamina_max() * .24 && + player_character.get_stamina() >= 0 && !player_character.male && + !is_channel_playing( channel::stamina_35 ) ) { fade_audio_group( group::fatigue, 1000 ); play_ambient_variant_sound( "plmove", "fatigue_f_high", 100, channel::stamina_35, 1000 ); return; @@ -1302,8 +1315,9 @@ void sfx::do_footstep() end_sfx_timestamp = std::chrono::high_resolution_clock::now(); sfx_time = end_sfx_timestamp - start_sfx_timestamp; if( std::chrono::duration_cast ( sfx_time ).count() > 400 ) { - int heard_volume = sfx::get_heard_volume( g->u.pos() ); - const auto terrain = g->m.ter( g->u.pos() ).id(); + const avatar &player_character = get_avatar(); + int heard_volume = sfx::get_heard_volume( player_character.pos() ); + const auto terrain = get_map().ter( player_character.pos() ).id(); static const std::set grass = { ter_str_id( "t_grass" ), ter_str_id( "t_shrub" ), @@ -1394,7 +1408,7 @@ void sfx::do_footstep() static const std::set chain_fence = { ter_str_id( "t_chainfence" ), }; - if( !g->u.wearing_something_on( bodypart_id( "foot_l" ) ) ) { + if( !player_character.wearing_something_on( bodypart_id( "foot_l" ) ) ) { play_variant_sound( "plmove", "walk_barefoot", heard_volume, 0, 0.8, 1.2 ); start_sfx_timestamp = std::chrono::high_resolution_clock::now(); return; @@ -1432,7 +1446,7 @@ void sfx::do_footstep() void sfx::do_obstacle( const std::string &obst ) { - int heard_volume = sfx::get_heard_volume( g->u.pos() ); + int heard_volume = sfx::get_heard_volume( get_avatar().pos() ); if( sfx::has_variant_sound( "plmove", obst ) ) { play_variant_sound( "plmove", obst, heard_volume, 0, 0.8, 1.2 ); } else if( ter_str_id( obst ).is_valid() && @@ -1446,8 +1460,9 @@ void sfx::do_obstacle( const std::string &obst ) void sfx::play_activity_sound( const std::string &id, const std::string &variant, int volume ) { - if( act != g->u.activity.id() ) { - act = g->u.activity.id(); + avatar &player_character = get_avatar(); + if( act != player_character.activity.id() ) { + act = player_character.activity.id(); play_ambient_variant_sound( id, variant, volume, channel::player_activities, 0 ); } } @@ -1510,7 +1525,7 @@ void sfx::do_obstacle( const std::string & ) { } /*@{*/ int sfx::get_heard_volume( const tripoint &source ) { - int distance = sound_distance( g->u.pos(), source ); + int distance = sound_distance( get_avatar().pos(), source ); // fract = -100 / 24 const float fract = -4.166666; int heard_volume = fract * distance - 1 + 100; @@ -1523,7 +1538,7 @@ int sfx::get_heard_volume( const tripoint &source ) int sfx::get_heard_angle( const tripoint &source ) { - int angle = coord_to_angle( g->u.pos(), source ) + 90; + int angle = coord_to_angle( get_avatar().pos(), source ) + 90; //add_msg(m_warning, "angle: %i", angle); return ( angle ); } diff --git a/src/visitable.cpp b/src/visitable.cpp index a1808eab944d3..60c4be63ec7b8 100644 --- a/src/visitable.cpp +++ b/src/visitable.cpp @@ -14,7 +14,6 @@ #include "character.h" #include "colony.h" #include "debug.h" -#include "game.h" #include "inventory.h" #include "item.h" #include "item_contents.h" @@ -469,13 +468,13 @@ VisitResponse visitable::visit_items( const std::function &func ) { auto cur = static_cast( this ); - + map &here = get_map(); // skip inaccessible items - if( g->m.has_flag( "SEALED", *cur ) && !g->m.has_flag( "LIQUIDCONT", *cur ) ) { + if( here.has_flag( "SEALED", *cur ) && !here.has_flag( "LIQUIDCONT", *cur ) ) { return VisitResponse::NEXT; } - for( item &e : g->m.i_at( *cur ) ) { + for( item &e : here.i_at( *cur ) ) { if( visit_internal( func, &e ) == VisitResponse::ABORT ) { return VisitResponse::ABORT; } @@ -671,14 +670,15 @@ std::list visitable::remove_items_with( const return res; } - if( !g->m.inbounds( *cur ) ) { + map &here = get_map(); + if( !here.inbounds( *cur ) ) { debugmsg( "cannot remove items from map: cursor out-of-bounds" ); return res; } // fetch the appropriate item stack point offset; - submap *sub = g->m.get_submap_at( *cur, offset ); + submap *sub = here.get_submap_at( *cur, offset ); cata::colony &stack = sub->get_items( offset ); for( auto iter = stack.begin(); iter != stack.end(); ) { @@ -704,7 +704,7 @@ std::list visitable::remove_items_with( const ++iter; } } - g->m.update_submap_active_item_status( *cur ); + here.update_submap_active_item_status( *cur ); return res; } diff --git a/tests/archery_damage_test.cpp b/tests/archery_damage_test.cpp index 5be08c27c436d..fd607750040d2 100644 --- a/tests/archery_damage_test.cpp +++ b/tests/archery_damage_test.cpp @@ -17,7 +17,6 @@ #include "catch/catch.hpp" #include "damage.h" -#include "game.h" #include "game_constants.h" #include "int_id.h" #include "item.h" @@ -34,19 +33,20 @@ static void test_projectile_hitting_wall( const std::string &target_type, bool s dealt_projectile_attack &attack, const std::string &weapon_type ) { static const tripoint target_point{ 5, 5, 0 }; + map &here = get_map(); for( int i = 0; i < 10; ++i ) { projectile projectile_copy = attack.proj; - g->m.set( target_point, ter_id( target_type ), furn_id( "f_null" ) ); + here.set( target_point, ter_id( target_type ), furn_id( "f_null" ) ); CAPTURE( projectile_copy.impact.total_damage() ); - g->m.shoot( target_point, projectile_copy, false ); + here.shoot( target_point, projectile_copy, false ); CAPTURE( target_type ); CAPTURE( weapon_type ); CAPTURE( ter_id( target_type ).obj().name() ); - CAPTURE( g->m.ter( target_point ).obj().name() ); + CAPTURE( here.ter( target_point ).obj().name() ); if( smashable ) { - CHECK( g->m.ter( target_point ) != ter_id( target_type ) ); + CHECK( here.ter( target_point ) != ter_id( target_type ) ); } else { - CHECK( g->m.ter( target_point ) == ter_id( target_type ) ); + CHECK( here.ter( target_point ) == ter_id( target_type ) ); } } } diff --git a/tests/modify_morale_test.cpp b/tests/modify_morale_test.cpp index c1188a84048d3..b05bf6b887fdc 100644 --- a/tests/modify_morale_test.cpp +++ b/tests/modify_morale_test.cpp @@ -6,7 +6,6 @@ #include "avatar.h" #include "catch/catch.hpp" -#include "game.h" #include "item.h" #include "map.h" #include "map_helpers.h" @@ -79,6 +78,7 @@ TEST_CASE( "food enjoyability", "[food][modify_morale][fun]" ) TEST_CASE( "dining with table and chair", "[food][modify_morale][table][chair]" ) { clear_map(); + map &here = get_map(); avatar dummy; const tripoint avatar_pos( 60, 60, 0 ); dummy.setpos( avatar_pos ); @@ -109,8 +109,8 @@ TEST_CASE( "dining with table and chair", "[food][modify_morale][table][chair]" }; GIVEN( "no table or chair are nearby" ) { - REQUIRE_FALSE( g->m.has_nearby_table( dummy.pos(), 1 ) ); - REQUIRE_FALSE( g->m.has_nearby_chair( dummy.pos(), 1 ) ); + REQUIRE_FALSE( here.has_nearby_table( dummy.pos(), 1 ) ); + REQUIRE_FALSE( here.has_nearby_chair( dummy.pos(), 1 ) ); AND_GIVEN( "character has normal table manners" ) { REQUIRE_FALSE( dummy.has_trait( trait_TABLEMANNERS ) ); @@ -145,10 +145,10 @@ TEST_CASE( "dining with table and chair", "[food][modify_morale][table][chair]" } GIVEN( "a table and chair are nearby" ) { - g->m.furn_set( avatar_pos + tripoint_north, furn_id( "f_table" ) ); - g->m.furn_set( avatar_pos + tripoint_east, furn_id( "f_chair" ) ); - REQUIRE( g->m.has_nearby_table( dummy.pos(), 1 ) ); - REQUIRE( g->m.has_nearby_chair( dummy.pos(), 1 ) ); + here.furn_set( avatar_pos + tripoint_north, furn_id( "f_table" ) ); + here.furn_set( avatar_pos + tripoint_east, furn_id( "f_chair" ) ); + REQUIRE( here.has_nearby_table( dummy.pos(), 1 ) ); + REQUIRE( here.has_nearby_chair( dummy.pos(), 1 ) ); AND_GIVEN( "character has normal table manners" ) { REQUIRE_FALSE( dummy.has_trait( trait_TABLEMANNERS ) ); diff --git a/tests/projectile_test.cpp b/tests/projectile_test.cpp index 8ba6c87fcb0ef..c1bfb3aff4303 100644 --- a/tests/projectile_test.cpp +++ b/tests/projectile_test.cpp @@ -21,7 +21,8 @@ static tripoint projectile_end_point( const std::vector &range, const dealt_projectile_attack attack; - attack = projectile_attack( test_proj, range[0], range[2], dispersion_sources(), &g->u, nullptr ); + attack = projectile_attack( test_proj, range[0], range[2], dispersion_sources(), &get_avatar(), + nullptr ); return attack.end_point; } @@ -29,24 +30,25 @@ static tripoint projectile_end_point( const std::vector &range, const TEST_CASE( "projectiles_through_obstacles", "[projectile]" ) { clear_map(); + map &here = get_map(); // Move the player out of the way of the test area - g->u.setpos( { 2, 2, 0 } ); + get_avatar().setpos( { 2, 2, 0 } ); // Ensure that a projectile fired from a gun can pass through a chain link fence // First, set up a test area - three tiles in a row // One on either side clear, with a chainlink fence in the middle std::vector range = { tripoint_zero, tripoint_east, tripoint( 2, 0, 0 ) }; for( const tripoint &pt : range ) { - REQUIRE( g->m.inbounds( pt ) ); - g->m.ter_set( pt, ter_id( "t_dirt" ) ); - g->m.furn_set( pt, furn_id( "f_null" ) ); + REQUIRE( here.inbounds( pt ) ); + here.ter_set( pt, ter_id( "t_dirt" ) ); + here.furn_set( pt, furn_id( "f_null" ) ); REQUIRE_FALSE( g->critter_at( pt ) ); - REQUIRE( g->m.is_transparent( pt ) ); + REQUIRE( here.is_transparent( pt ) ); } // Set an obstacle in the way, a chain fence - g->m.ter_set( range[1], ter_id( "t_chainfence" ) ); + here.ter_set( range[1], ter_id( "t_chainfence" ) ); // Create a gun to fire a projectile from item gun( itype_id( "m1a" ) ); diff --git a/tests/vehicle_power_test.cpp b/tests/vehicle_power_test.cpp index c51da30ba6bd8..74b0fbb5fb372 100644 --- a/tests/vehicle_power_test.cpp +++ b/tests/vehicle_power_test.cpp @@ -6,7 +6,6 @@ #include "bodypart.h" #include "calendar.h" #include "catch/catch.hpp" -#include "game.h" #include "map.h" #include "map_helpers.h" #include "point.h" @@ -20,11 +19,12 @@ static const efftype_id effect_blind( "blind" ); static void reset_player() { + avatar &player_character = get_avatar(); // Move player somewhere safe - REQUIRE( !g->u.in_vehicle ); - g->u.setpos( tripoint_zero ); + REQUIRE( !player_character.in_vehicle ); + player_character.setpos( tripoint_zero ); // Blind the player to avoid needless drawing-related overhead - g->u.add_effect( effect_blind, 1_turns, num_bp, true ); + player_character.add_effect( effect_blind, 1_turns, num_bp, true ); } TEST_CASE( "vehicle power with reactor and solar panels", "[vehicle][power]" ) @@ -32,10 +32,11 @@ TEST_CASE( "vehicle power with reactor and solar panels", "[vehicle][power]" ) reset_player(); build_test_map( ter_id( "t_pavement" ) ); clear_vehicles(); + map &here = get_map(); SECTION( "vehicle with reactor" ) { const tripoint reactor_origin = tripoint( 10, 10, 0 ); - vehicle *veh_ptr = g->m.add_vehicle( vproto_id( "reactor_test" ), reactor_origin, 0, 0, 0 ); + vehicle *veh_ptr = here.add_vehicle( vproto_id( "reactor_test" ), reactor_origin, 0, 0, 0 ); REQUIRE( veh_ptr != nullptr ); REQUIRE( !veh_ptr->reactors.empty() ); @@ -63,14 +64,14 @@ TEST_CASE( "vehicle power with reactor and solar panels", "[vehicle][power]" ) SECTION( "vehicle with solar panels" ) { const tripoint solar_origin = tripoint( 5, 5, 0 ); - vehicle *veh_ptr = g->m.add_vehicle( vproto_id( "solar_panel_test" ), solar_origin, 0, 0, 0 ); + vehicle *veh_ptr = here.add_vehicle( vproto_id( "solar_panel_test" ), solar_origin, 0, 0, 0 ); REQUIRE( veh_ptr != nullptr ); GIVEN( "it is 3 hours after sunrise, with sunny weather" ) { calendar::turn = calendar::turn_zero + calendar::season_length() + 1_days; const time_point start_time = sunrise( calendar::turn ) + 3_hours; veh_ptr->update_time( start_time ); - g->weather.weather_override = WEATHER_SUNNY; + get_weather().weather_override = WEATHER_SUNNY; AND_GIVEN( "the battery has no charge" ) { veh_ptr->discharge_battery( veh_ptr->fuel_left( fuel_type_battery ) ); @@ -100,7 +101,7 @@ TEST_CASE( "vehicle power with reactor and solar panels", "[vehicle][power]" ) GIVEN( "it is 3 hours after sunset, with clear weather" ) { const time_point at_night = sunset( calendar::turn ) + 3_hours; - g->weather.weather_override = WEATHER_CLEAR; + get_weather().weather_override = WEATHER_CLEAR; veh_ptr->update_time( at_night ); AND_GIVEN( "the battery has no charge" ) { @@ -124,10 +125,11 @@ TEST_CASE( "maximum reverse velocity", "[vehicle][power][reverse]" ) reset_player(); build_test_map( ter_id( "t_pavement" ) ); clear_vehicles(); + map &here = get_map(); GIVEN( "a scooter with combustion engine and charged battery" ) { const tripoint origin = tripoint( 10, 0, 0 ); - vehicle *veh_ptr = g->m.add_vehicle( vproto_id( "scooter_test" ), origin, 0, 0, 0 ); + vehicle *veh_ptr = here.add_vehicle( vproto_id( "scooter_test" ), origin, 0, 0, 0 ); REQUIRE( veh_ptr != nullptr ); veh_ptr->charge_battery( 500 ); REQUIRE( veh_ptr->fuel_left( fuel_type_battery ) == 500 ); @@ -152,7 +154,7 @@ TEST_CASE( "maximum reverse velocity", "[vehicle][power][reverse]" ) GIVEN( "a scooter with an electric motor and charged battery" ) { const tripoint origin = tripoint( 15, 0, 0 ); - vehicle *veh_ptr = g->m.add_vehicle( vproto_id( "scooter_electric_test" ), origin, 0, 0, 0 ); + vehicle *veh_ptr = here.add_vehicle( vproto_id( "scooter_electric_test" ), origin, 0, 0, 0 ); REQUIRE( veh_ptr != nullptr ); veh_ptr->charge_battery( 5000 ); REQUIRE( veh_ptr->fuel_left( fuel_type_battery ) == 5000 ); diff --git a/tests/vehicle_test.cpp b/tests/vehicle_test.cpp index b2e255bb83729..82cbe00928294 100644 --- a/tests/vehicle_test.cpp +++ b/tests/vehicle_test.cpp @@ -5,7 +5,6 @@ #include "catch/catch.hpp" #include "damage.h" #include "enums.h" -#include "game.h" #include "item.h" #include "map.h" #include "map_helpers.h" @@ -19,31 +18,35 @@ TEST_CASE( "detaching_vehicle_unboards_passengers" ) clear_map(); const tripoint test_origin( 60, 60, 0 ); const tripoint vehicle_origin = test_origin; - vehicle *veh_ptr = g->m.add_vehicle( vproto_id( "bicycle" ), vehicle_origin, -90, 0, 0 ); - g->m.board_vehicle( test_origin, &g->u ); - REQUIRE( g->u.in_vehicle ); - g->m.detach_vehicle( veh_ptr ); - REQUIRE( !g->u.in_vehicle ); + map &here = get_map(); + avatar &player_character = get_avatar(); + vehicle *veh_ptr = here.add_vehicle( vproto_id( "bicycle" ), vehicle_origin, -90, 0, 0 ); + here.board_vehicle( test_origin, &player_character ); + REQUIRE( player_character.in_vehicle ); + here.detach_vehicle( veh_ptr ); + REQUIRE( !player_character.in_vehicle ); } TEST_CASE( "destroy_grabbed_vehicle_section" ) { GIVEN( "A vehicle grabbed by the player" ) { + map &here = get_map(); const tripoint test_origin( 60, 60, 0 ); - g->place_player( test_origin ); + avatar &player_character = get_avatar(); + player_character.setpos( test_origin ); const tripoint vehicle_origin = test_origin + tripoint_south_east; - vehicle *veh_ptr = g->m.add_vehicle( vproto_id( "bicycle" ), vehicle_origin, -90, 0, 0 ); + vehicle *veh_ptr = here.add_vehicle( vproto_id( "bicycle" ), vehicle_origin, -90, 0, 0 ); REQUIRE( veh_ptr != nullptr ); tripoint grab_point = test_origin + tripoint_east; - g->u.grab( object_type::VEHICLE, grab_point ); - REQUIRE( g->u.get_grab_type() != object_type::NONE ); - REQUIRE( g->u.grab_point == grab_point ); + player_character.grab( object_type::VEHICLE, grab_point ); + REQUIRE( player_character.get_grab_type() != object_type::NONE ); + REQUIRE( player_character.grab_point == grab_point ); WHEN( "The vehicle section grabbed by the player is destroyed" ) { - g->m.destroy( grab_point ); + here.destroy( grab_point ); REQUIRE( veh_ptr->get_parts_at( grab_point, "", part_status_flag::available ).empty() ); THEN( "The player's grab is released" ) { - CHECK( g->u.get_grab_type() == object_type::NONE ); - CHECK( g->u.grab_point == tripoint_zero ); + CHECK( player_character.get_grab_type() == object_type::NONE ); + CHECK( player_character.grab_point == tripoint_zero ); } } } @@ -54,7 +57,7 @@ TEST_CASE( "add_item_to_broken_vehicle_part" ) clear_map(); const tripoint test_origin( 60, 60, 0 ); const tripoint vehicle_origin = test_origin; - vehicle *veh_ptr = g->m.add_vehicle( vproto_id( "bicycle" ), vehicle_origin, 0, 0, 0 ); + vehicle *veh_ptr = get_map().add_vehicle( vproto_id( "bicycle" ), vehicle_origin, 0, 0, 0 ); REQUIRE( veh_ptr != nullptr ); const tripoint pos = vehicle_origin + tripoint_west; From 618677d66539c9b68bab3a16bdafc963fe375201 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Sun, 28 Jun 2020 19:20:17 -0700 Subject: [PATCH 152/206] Tweak hunger test numbers after fillingness adjustment. (#41666) --- tests/stomach_contents_test.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/stomach_contents_test.cpp b/tests/stomach_contents_test.cpp index 33c80899df04a..6f5a81094a27c 100644 --- a/tests/stomach_contents_test.cpp +++ b/tests/stomach_contents_test.cpp @@ -268,8 +268,8 @@ TEST_CASE( "hunger" ) if( print_tests ) { printf( "%d minutes til hunger sets in\n", hunger_time ); } - CHECK( hunger_time <= 435 ); - CHECK( hunger_time >= 405 ); + CHECK( hunger_time <= 375 ); + CHECK( hunger_time >= 345 ); if( print_tests ) { print_stomach_contents( dummy, print_tests ); printf( "eat 16 veggy\n" ); From 414149f44791fe5ddab2d69df63d1e422afe5dea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jianxiang=20Wang=20=28=E7=8E=8B=E5=81=A5=E7=BF=94=29?= Date: Mon, 29 Jun 2020 14:09:52 +0800 Subject: [PATCH 153/206] Dialogue text style (#41629) * Use class translation in dynamic_line_t * Fix json text style --- data/json/achievements.json | 2 +- data/json/npcs/Backgrounds/cop_2.json | 2 +- data/json/npcs/Backgrounds/prisoner_1.json | 2 +- data/json/npcs/NPC_Brigitte_LaCroix.json | 34 +++++++++---------- data/json/npcs/TALK_ALLY_TUTORIAL.json | 2 +- data/json/npcs/TALK_CITY_COP.json | 4 +-- data/json/npcs/TALK_COMMON_ALLY.json | 6 ++-- data/json/npcs/TALK_COMMON_GREET.json | 2 +- data/json/npcs/TALK_COMMON_OTHER.json | 8 ++--- data/json/npcs/TALK_CYBORG_1.json | 12 +++---- data/json/npcs/TALK_FRIEND_CONVERSATION.json | 2 +- data/json/npcs/TALK_MARLOSS_VOICE.json | 2 +- data/json/npcs/TALK_NC_FARMER.json | 2 +- data/json/npcs/TALK_TRUE_FOODPERSON.json | 2 +- .../isherwood_farm/NPC_Carlos_Isherwood.json | 2 +- .../isherwood_farm/NPC_Chris_Isherwood.json | 2 +- .../isherwood_farm/NPC_Eddie_Isherwood.json | 2 +- .../isherwood_farm/NPC_Jack_Isherwood.json | 2 +- .../isherwood_farm/NPC_Jesse_Isherwood.json | 2 +- .../isherwood_farm/NPC_Lisa_Isherwood.json | 2 +- .../isherwood_farm/NPC_Luke_Isherwood.json | 2 +- data/json/npcs/missiondef.json | 4 +-- .../beggars/BEGGAR_5_Yusuke_Taylor.json | 2 +- .../surface_refugees/NPC_Draco_Dune.json | 2 +- .../surface_refugees/NPC_Pablo_Nunez.json | 2 +- .../surface_refugees/NPC_Rhyzaea_Johnny.json | 2 +- .../surface_refugees/NPC_Stan_Borichenko.json | 2 +- .../NPC_free_merchant_broker.json | 4 +-- .../NPC_free_merchant_guard_generic.json | 2 +- .../NPC_free_merchant_shopkeep.json | 2 +- .../surface_staff/NPC_old_guard_doctor.json | 2 +- .../NPC_old_guard_representative.json | 2 +- .../npcs/robofac/NPC_ROBOFAC_INTERCOM.json | 2 +- .../json/npcs/robofac/NPC_ROBOFAC_MERC_1.json | 6 ++-- .../robofac/ROBOFAC_SURFACE_FREEMERCHANT.json | 4 +-- .../npcs/tacoma_ranch/NPC_ranch_barber.json | 2 +- .../npcs/tacoma_ranch/NPC_ranch_guard.json | 2 +- .../NPC_ranch_sickly_laborer.json | 6 ++-- .../Aftershock/npcs/prepnet_dialogue.json | 2 +- data/mods/DinoMod/NPC/NC_BO_BARONYX.json | 4 +-- data/mods/Magiclysm/npc/TALK_OLD_MAGUS.json | 4 +-- src/dialogue.h | 2 +- src/npctalk.cpp | 22 +++++++++--- 43 files changed, 95 insertions(+), 83 deletions(-) diff --git a/data/json/achievements.json b/data/json/achievements.json index 551a136df06a3..bbe0bf7f184c1 100644 --- a/data/json/achievements.json +++ b/data/json/achievements.json @@ -73,7 +73,7 @@ "id": "achievement_marathon", "type": "achievement", "name": "Pheidippides was a hack", - "description": "Run a marathon…plus a little bit more.", + "description": "Run a marathon… plus a little bit more.", "requirements": [ { "event_statistic": "num_moves_ran", "is": ">=", "target": 42196 } ] }, { diff --git a/data/json/npcs/Backgrounds/cop_2.json b/data/json/npcs/Backgrounds/cop_2.json index 77ea7453edfcf..6d0a9ff34786c 100644 --- a/data/json/npcs/Backgrounds/cop_2.json +++ b/data/json/npcs/Backgrounds/cop_2.json @@ -11,7 +11,7 @@ { "id": "BGSS_COP_2_STORY2", "type": "talk_topic", - "dynamic_line": "Eventually yes. It had been quiet for hours. I was parched, injured, and terrified. My training was maybe the only thing that kept me from freaking out. I decided to try to pull myself out and see how bad my injuries were. It was easy. The side of the van was torn open, and it turned out I was basically just lying under a little debris, with the ruins of the van tented around me. I wasn't even too badly hurt. I grabbed as much gear as I could, and I slipped out. It was night. I could hear fighting farther away in the city, so I went the other way. I made it a few blocks before I ran into any ... I ran from them. I ran, and I ran, and I ran some more. And here I am.", + "dynamic_line": "Eventually yes. It had been quiet for hours. I was parched, injured, and terrified. My training was maybe the only thing that kept me from freaking out. I decided to try to pull myself out and see how bad my injuries were. It was easy. The side of the van was torn open, and it turned out I was basically just lying under a little debris, with the ruins of the van tented around me. I wasn't even too badly hurt. I grabbed as much gear as I could, and I slipped out. It was night. I could hear fighting farther away in the city, so I went the other way. I made it a few blocks before I ran into any … I ran from them. I ran, and I ran, and I ran some more. And here I am.", "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/prisoner_1.json b/data/json/npcs/Backgrounds/prisoner_1.json index 70c9ee5bf9c42..61e5c15bea938 100644 --- a/data/json/npcs/Backgrounds/prisoner_1.json +++ b/data/json/npcs/Backgrounds/prisoner_1.json @@ -190,7 +190,7 @@ { "id": "BGSS_PRISONER_1_IN_FOR_TAXEVASION", "type": "talk_topic", - "dynamic_line": "Tax evasion. I was an accountant, and I helped my boss move a hell of a lot of money in some very clever ways. Not clever enough, it turns out...", + "dynamic_line": "Tax evasion. I was an accountant, and I helped my boss move a hell of a lot of money in some very clever ways. Not clever enough, it turns out…", "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] }, { diff --git a/data/json/npcs/NPC_Brigitte_LaCroix.json b/data/json/npcs/NPC_Brigitte_LaCroix.json index 8d3eecaf658d2..04b243421e9e9 100644 --- a/data/json/npcs/NPC_Brigitte_LaCroix.json +++ b/data/json/npcs/NPC_Brigitte_LaCroix.json @@ -101,13 +101,13 @@ "type": "dialogue", "context": "first_meeting", "value": "yes", - "no": "You there. Quiet down. Can you hear it? The song?", + "no": "You there. Quiet down. Can you hear it? The song?", "yes": { "u_has_var": "asked_about_song", "type": "dialogue", "context": "song", "value": "yes", - "no": "You're back. Have you come to listen to the song?", + "no": "You're back. Have you come to listen to the song?", "yes": "Acolyte." } }, @@ -146,7 +146,7 @@ { "type": "talk_topic", "id": "TALK_BONE_SEER_SONG", - "dynamic_line": "Listen carefully. The bones… they sing. Can you hear it? The song they weave? The stories they hold?", + "dynamic_line": "Listen carefully. The bones… they sing. Can you hear it? The song they weave? The stories they hold?", "responses": [ { "text": "What? Singing bones? What are you talking about?", "topic": "TALK_BONE_SEER_SONG2" }, { "text": "Uh… yeah, sure. I think I'll just be on my way.", "topic": "TALK_DONE" } @@ -155,7 +155,7 @@ { "type": "talk_topic", "id": "TALK_BONE_SEER_SONG2", - "dynamic_line": "When it all happened, the Cataclysm, something… changed. You can see it in all creatures, but most of all their bones. They break, morph, rise again, in an infinite cycle. Living dead walk. Monsters rip and tear each other apart. You can see the resonance, the quiet hum of raw strength, and only by taking the bones does the cycle end - their story, their song, their strength, become yours to use.", + "dynamic_line": "When it all happened, the Cataclysm, something… changed. You can see it in all creatures, but most of all their bones. They break, morph, rise again, in an infinite cycle. Living dead walk. Monsters rip and tear each other apart. You can see the resonance, the quiet hum of raw strength, and only by taking the bones does the cycle end - their story, their song, their strength, become yours to use.", "responses": [ { "text": "So what do you actually do with the bones?", "topic": "TALK_BONE_SEER_BONES" }, { "text": "I'm still not quite sure what you mean about songs or strength.", "topic": "TALK_BONE_SEER_SONG3" }, @@ -165,13 +165,13 @@ { "type": "talk_topic", "id": "TALK_BONE_SEER_SONG3", - "dynamic_line": "Only when you crush the bones of a body does it cease to rise. Only if you examine the bones can you see what was. Thus is the story. Whatever causes this change is alive, moving within us all, an inevitable part of this new world. It holds the power of change. When we hold the bones, we hold the power. Thus the strength. Together… they form a beautiful song.", + "dynamic_line": "Only when you crush the bones of a body does it cease to rise. Only if you examine the bones can you see what was. Thus is the story. Whatever causes this change is alive, moving within us all, an inevitable part of this new world. It holds the power of change. When we hold the bones, we hold the power. Thus the strength. Together… they form a beautiful song.", "responses": [ { "text": "I think I understand what you mean, though I am not sure if I agree.", "topic": "TALK_NONE" } ] }, { "type": "talk_topic", "id": "TALK_BONE_SEER_OTHERS", - "dynamic_line": "There are others who follow this cause. You'd do well to aid them, for though we may not be numerous, we are emboldened by the songs we carry.", + "dynamic_line": "There are others who follow this cause. You'd do well to aid them, for though we may not be numerous, we are emboldened by the songs we carry.", "responses": [ { "text": "I will bear that in mind.", "topic": "TALK_NONE" }, { "text": "Cause? Why do you gather these bones anyway?", "topic": "TALK_BONE_SEER_BONES" } @@ -180,13 +180,13 @@ { "type": "talk_topic", "id": "TALK_BONE_SEER_BONES", - "dynamic_line": "The song can be weaved in many forms. Carved bone charms, weapons and armor all hold immense power, and when the time comes, me and my kindred shall gather a great amount of song and sing it to restore this world. Restore it, or end it. Makes no difference.", + "dynamic_line": "The song can be weaved in many forms. Carved bone charms, weapons and armor all hold immense power, and when the time comes, me and my kindred shall gather a great amount of song and sing it to restore this world. Restore it, or end it. Makes no difference.", "responses": [ { "text": "End the world? What?", "topic": "TALK_BONE_SEER_END" } ] }, { "type": "talk_topic", "id": "TALK_BONE_SEER_END", - "dynamic_line": "We believe that enough power in one song could revert the Cataclysm - or accelerate it to a time beyond all, ending it all the same. But with the world looking as is, both options are preferable.", + "dynamic_line": "We believe that enough power in one song could revert the Cataclysm - or accelerate it to a time beyond all, ending it all the same. But with the world looking as is, both options are preferable.", "responses": [ { "text": "Sounds somewhat… doomsday-ish, but I suppose it's a belief like any other. Still, at least you have a goal to help the world, one way or another.", @@ -198,13 +198,13 @@ { "type": "talk_topic", "id": "TALK_BONE_SEER_ACOLYTE", - "dynamic_line": "Your mind is open. More than most. Perhaps one day, you too will feel the power of the song and become Kindred. For now, Acolyte, listen, listen and feel the song.", + "dynamic_line": "Your mind is open. More than most. Perhaps one day, you too will feel the power of the song and become Kindred. For now, Acolyte, listen, listen and feel the song.", "responses": [ { "text": "I… thank you.", "topic": "TALK_BONE_SEER" } ] }, { "type": "talk_topic", "id": "TALK_BONE_SEER_INSULT", - "dynamic_line": "Your skepticism does not surprise me. Perhaps one day, you too will hear the inevitability of the song, feel its power. But until then, you will remain an Acolyte, path to the Kindred closed.", + "dynamic_line": "Your skepticism does not surprise me. Perhaps one day, you too will hear the inevitability of the song, feel its power. But until then, you will remain an Acolyte, path to the Kindred closed.", "responses": [ { "text": "Yeah, alright.", "topic": "TALK_BONE_SEER" } ] }, { @@ -277,7 +277,7 @@ { "id": "TALK_MISSION_OFFER_SEER", "type": "talk_topic", - "dynamic_line": "If you wish to be set on the path to enlightenment, first you must learn to listen and hear the song. Go out, butcher a creature and feel the power between your fingertips. Then bring me the bones and I shall carve them for you. ", + "dynamic_line": "If you wish to be set on the path to enlightenment, first you must learn to listen and hear the song. Go out, butcher a creature and feel the power between your fingertips. Then bring me the bones and I shall carve them for you.", "responses": [ { "text": "Well, I guess I oughta see where this goes. I'm in.", @@ -290,7 +290,7 @@ { "id": "TALK_MISSION_ACCEPTED_SEER", "type": "talk_topic", - "dynamic_line": "Excellent. Now be on your way.", + "dynamic_line": "Excellent. Now be on your way.", "responses": [ { "text": "Consider it done. But I also wanted to ask…", "topic": "TALK_BONE_SEER" }, { "text": "Where should I start?", "topic": "TALK_MISSION_ADVICE_SEER" }, @@ -301,13 +301,13 @@ { "id": "TALK_MISSION_ADVICE_SEER", "type": "talk_topic", - "dynamic_line": "The shambling corpses we see all around move in discord. Their song can be used, but for an Acolyte, this would be needlessly hard. Be sure to carve an unspoiled living creature.", + "dynamic_line": "The shambling corpses we see all around move in discord. Their song can be used, but for an Acolyte, this would be needlessly hard. Be sure to carve an unspoiled living creature.", "responses": [ { "text": "So, a creature that isn't a zombie, or a monster. Got it.", "topic": "TALK_NONE" } ] }, { "id": "TALK_SHARE_EQUIPMENT_SEER", "type": "talk_topic", - "dynamic_line": "The path to enlightenment is for you to walk. For me to aid you would ultimately impede your progress and muddle your song.", + "dynamic_line": "The path to enlightenment is for you to walk. For me to aid you would ultimately impede your progress and muddle your song.", "responses": [ { "text": "I see. Very well then.", "topic": "TALK_NONE" } ] }, { @@ -316,7 +316,7 @@ "dynamic_line": { "u_has_trait": "seer_mark", "no": "Only those who bear my mark will prove themselves worthy of my skills.", - "yes": "You bear my mark, meaning I believe you have potential to learn to truly listen to the Song. Yes, I will lend my skills to you, for now." + "yes": "You bear my mark, meaning I believe you have potential to learn to truly listen to the Song. Yes, I will lend my skills to you, for now." }, "responses": [ { "text": "I see. Very well then.", "topic": "TALK_NONE", "condition": { "not": { "u_has_trait": "seer_mark" } } }, @@ -336,7 +336,7 @@ { "id": "TALK_MISSION_REJECTED_SEER", "type": "talk_topic", - "dynamic_line": "I understand your reluctancy. Feel free to return when you see the way.", + "dynamic_line": "I understand your reluctancy. Feel free to return when you see the way.", "responses": [ { "text": "Maybe some other time. Changing the topic…", "topic": "TALK_NONE" }, { "text": "Alright, but I have to go now.", "topic": "TALK_DONE" } @@ -345,7 +345,7 @@ { "type": "talk_topic", "id": "TALK_BONE_SEER_CYCLE", - "dynamic_line": "It's not just walking horrors and monsters that have changed with the Cataclysm. It started a… cycle, of sorts. Everything repeats. We can only see it in others, but it happens to us, even you and I. How many times have you fallen? Your flesh rent from your body, devoured. Or perhaps it was the quiet whimper of death to exposure. But your bones rose again. Different flesh, different name, sometimes even different knowledge, but the bones, the same. We are all trapped in the same cycle. We just keep forgetting. That's why we need to amass the Song. That's why it has to end, even if it means the destruction, not restoration.", + "dynamic_line": "It's not just walking horrors and monsters that have changed with the Cataclysm. It started a… cycle, of sorts. Everything repeats. We can only see it in others, but it happens to us, even you and I. How many times have you fallen? Your flesh rent from your body, devoured. Or perhaps it was the quiet whimper of death to exposure. But your bones rose again. Different flesh, different name, sometimes even different knowledge, but the bones, the same. We are all trapped in the same cycle. We just keep forgetting. That's why we need to amass the Song. That's why it has to end, even if it means the destruction, not restoration.", "responses": [ { "text": "That is… that's really one hell of a belief. Well, if it helps you deal with the world, who am I to argue.", diff --git a/data/json/npcs/TALK_ALLY_TUTORIAL.json b/data/json/npcs/TALK_ALLY_TUTORIAL.json index 0f3b82d484c34..6e34b80f5725d 100644 --- a/data/json/npcs/TALK_ALLY_TUTORIAL.json +++ b/data/json/npcs/TALK_ALLY_TUTORIAL.json @@ -110,7 +110,7 @@ { "id": "TALK_ALLY_TUTORIAL_ACTIVITIES", "type": "talk_topic", - "dynamic_line": "I can help with some tasks if you show me where to work.\n Use the zone manager (keybind 'Y') to set up sorting zones for your loot, or to draw blueprints for a building, or to define where you want to plant some crops, or where you'd like some trees cut down, or where you want a vehicle dismantled or repaired, or a good fishing spot. Then talk to me about my current activity and tell me to sort stuff, or build stuff, or cut down trees, or repair or dismantle a vehicle, or do farmwork, or catch some fish, and I'll go off and do my best to get what you want done.\n If I need tools, you should leave them in a loot zone near where you want me to work - axes for logging, shovels and seeds and fertilizer for farming, wrenches and hacksaws or a toolbox to take apart a vehicle. I promise to put stuff back in an unsorted loot zone when I'm finished.\n I can pretty much sort out our stuff without needing tools, but keep the piles of unsorted and sorted stuff kind of close together because I don't want to walk back and forth carrying junk too much.", + "dynamic_line": "I can help with some tasks if you show me where to work.\n Use the zone manager (keybind 'Y') to set up sorting zones for your loot, or to draw blueprints for a building, or to define where you want to plant some crops, or where you'd like some trees cut down, or where you want a vehicle dismantled or repaired, or a good fishing spot. Then talk to me about my current activity and tell me to sort stuff, or build stuff, or cut down trees, or repair or dismantle a vehicle, or do farmwork, or catch some fish, and I'll go off and do my best to get what you want done.\n If I need tools, you should leave them in a loot zone near where you want me to work - axes for logging, shovels and seeds and fertilizer for farming, wrenches and hacksaws or a toolbox to take apart a vehicle. I promise to put stuff back in an unsorted loot zone when I'm finished.\n I can pretty much sort out our stuff without needing tools, but keep the piles of unsorted and sorted stuff kind of close together because I don't want to walk back and forth carrying junk too much.", "responses": [ { "text": "Good to know. Can you perform first aid?", "topic": "TALK_ALLY_TUTORIAL_MEDIC" }, { "text": "What about carrying stuff in general?", "topic": "TALK_ALLY_TUTORIAL_MULE" }, diff --git a/data/json/npcs/TALK_CITY_COP.json b/data/json/npcs/TALK_CITY_COP.json index a2ad99073acdb..03d6ccabf40e0 100644 --- a/data/json/npcs/TALK_CITY_COP.json +++ b/data/json/npcs/TALK_CITY_COP.json @@ -7,7 +7,7 @@ "type": "dialogue", "context": "survivor_cop", "value": "yes", - "no": "STOP, Put your hands in the air! Ha, startled you didn't I…there is no law anymore...", + "no": "STOP, Put your hands in the air! Ha, startled you didn't I… there is no law anymore…", "yes": "Hi there, ." }, "responses": [ @@ -25,7 +25,7 @@ { "type": "talk_topic", "id": "TALK_CITY_COP_INTRO", - "dynamic_line": "I was watching the station when things went sideways. None of the other officers returned from the last call, well not as humans anyway...", + "dynamic_line": "I was watching the station when things went sideways. None of the other officers returned from the last call, well not as humans anyway…", "responses": [ { "text": "Why don't you go somewhere else?", "topic": "TALK_CITY_COP_LEAVE" }, { "text": "Let's trade then.", "effect": "start_trade", "topic": "TALK_CITY_COP" }, diff --git a/data/json/npcs/TALK_COMMON_ALLY.json b/data/json/npcs/TALK_COMMON_ALLY.json index 893f2ab47a465..2e3dbe78a391e 100644 --- a/data/json/npcs/TALK_COMMON_ALLY.json +++ b/data/json/npcs/TALK_COMMON_ALLY.json @@ -13,12 +13,12 @@ "no": { "npc_need": "fatigue", "level": "TIRED", - "no": "Just few minutes more...", + "no": "Just few minutes more…", "yes": "Make it quick, I want to go back to sleep." }, "yes": "Just let me sleep, !" }, - "yes": "No, just no..." + "yes": "No, just no…" }, "no": "Anything to do before I go to sleep?" }, @@ -904,7 +904,7 @@ }, { "is_day": "Well, it's the time of day for a quick break surely! How are you holding up?", - "no": "Man it's dark out isn't it? what's up?" + "no": "Man it's dark out isn't it? what's up?" }, { "npc_has_effect": "infected", diff --git a/data/json/npcs/TALK_COMMON_GREET.json b/data/json/npcs/TALK_COMMON_GREET.json index 1be7967e15d8e..b59242d6d8e2f 100644 --- a/data/json/npcs/TALK_COMMON_GREET.json +++ b/data/json/npcs/TALK_COMMON_GREET.json @@ -82,7 +82,7 @@ { "id": "TALK_STRANGER_WARY", "type": "talk_topic", - "dynamic_line": "Okay, no sudden movements...", + "dynamic_line": "Okay, no sudden movements…", "responses": [ { "text": "Bye.", "topic": "TALK_DONE" } ] }, { diff --git a/data/json/npcs/TALK_COMMON_OTHER.json b/data/json/npcs/TALK_COMMON_OTHER.json index de6a348c8db12..53d8d0028c216 100644 --- a/data/json/npcs/TALK_COMMON_OTHER.json +++ b/data/json/npcs/TALK_COMMON_OTHER.json @@ -72,7 +72,7 @@ "no": "Why should I travel with you?", "yes": "You asked me recently; ask again later." }, - "yes": "Not until I get some antibiotics..." + "yes": "Not until I get some antibiotics…" }, "responses": [ { @@ -225,7 +225,7 @@ "no": { "npc_has_effect": "asked_to_train", "no": "I have some reason for denying you training.", - "yes": "Give it some time, I'll show you something new later..." + "yes": "Give it some time, I'll show you something new later…" }, "yes": "I'm too tired, let me rest first." }, @@ -264,7 +264,7 @@ { "id": "TALK_FRIEND_UNCOMFORTABLE", "type": "talk_topic", - "dynamic_line": "I really don't feel comfortable doing so...", + "dynamic_line": "I really don't feel comfortable doing so…", "responses": [ { "text": "I'll give you some space.", "topic": "TALK_FRIEND" } ] }, { @@ -361,7 +361,7 @@ { "id": "TALK_STOLE_ITEM", "type": "talk_topic", - "dynamic_line": "You picked up something that does not belong to you...", + "dynamic_line": "You picked up something that does not belong to you…", "responses": [ { "text": "Okay, okay, this is all a misunderstanding. Sorry, I'll drop it now.", diff --git a/data/json/npcs/TALK_CYBORG_1.json b/data/json/npcs/TALK_CYBORG_1.json index c8bf7001283c5..9adf354fdc2bc 100644 --- a/data/json/npcs/TALK_CYBORG_1.json +++ b/data/json/npcs/TALK_CYBORG_1.json @@ -7,8 +7,8 @@ "type": "dialogue", "context": "cyborg", "value": "yes", - "no": "I… I'm free. *Zzzt* I'm actually free! *bzzz* Look, you're the first person I've seen in a long time.", - "yes": "Hey again. *kzzz*" + "no": "I… I'm free. *Zzzt* I'm actually free! *bzzz* Look, you're the first person I've seen in a long time.", + "yes": "Hey again. *kzzz*" }, "speaker_effect": { "effect": { "npc_add_var": "cyborg_has_talked", "type": "dialogue", "context": "cyborg", "value": "yes" } }, "responses": [ @@ -45,7 +45,7 @@ { "id": "TALK_CYBORG_FRIENDLY", "type": "talk_topic", - "dynamic_line": "*buzz* Great! So what happens now?", + "dynamic_line": "*buzz* Great! So what happens now?", "responses": [ { "text": "Come with me. We can help each other out.", @@ -59,7 +59,7 @@ { "id": "TALK_CYBORG_WARY", "type": "talk_topic", - "dynamic_line": "...Wait. *BEEP* Why do I believe you? *ZZZT* You could be just as bad as them!", + "dynamic_line": "…Wait. *BEEP* Why do I believe you? *ZZZT* You could be just as bad as them!", "responses": [ { "text": "I wouldn't have pulled your chip out if I didn't want you to think for yourself.", @@ -79,7 +79,7 @@ { "id": "TALK_CYBORG_FEARFUL", "type": "talk_topic", - "dynamic_line": "Okay, okay, *BUZZ* I'm sorry! Don't hurt me again! Anything but the chip!", + "dynamic_line": "Okay, okay, *BUZZ* I'm sorry! Don't hurt me again! Anything but the chip!", "responses": [ { "text": "Follow me and do my bidding, then.", @@ -104,7 +104,7 @@ { "id": "TALK_CYBORG_BREAKDOWN", "type": "talk_topic", - "dynamic_line": "...kill… *ZTZTZT* …you!", + "dynamic_line": "…kill… *ZTZTZT* …you!", "responses": [ { "text": "Run while you still can!", diff --git a/data/json/npcs/TALK_FRIEND_CONVERSATION.json b/data/json/npcs/TALK_FRIEND_CONVERSATION.json index d1561687f2bc6..d903a0ef0fbf3 100644 --- a/data/json/npcs/TALK_FRIEND_CONVERSATION.json +++ b/data/json/npcs/TALK_FRIEND_CONVERSATION.json @@ -2,7 +2,7 @@ { "id": "TALK_CONVERSATION_DANGER", "type": "talk_topic", - "dynamic_line": "Are you sure? This doesn't seem like a particularly safe place for small talk...", + "dynamic_line": "Are you sure? This doesn't seem like a particularly safe place for small talk…", "responses": [ { "text": "It's fine, we've got a moment.", diff --git a/data/json/npcs/TALK_MARLOSS_VOICE.json b/data/json/npcs/TALK_MARLOSS_VOICE.json index f27f620e9820e..b3ba9b7efbd8a 100644 --- a/data/json/npcs/TALK_MARLOSS_VOICE.json +++ b/data/json/npcs/TALK_MARLOSS_VOICE.json @@ -18,7 +18,7 @@ "May you find your peace, traveler.", "We might have lost everything, but hope remains.", "May the earth flourish beneath our paths.", - "Unity of spirit, of mind, and body...", + "Unity of spirit, of mind, and body…", "Look for the bonds which define you, and act in accord." ], "responses": [ diff --git a/data/json/npcs/TALK_NC_FARMER.json b/data/json/npcs/TALK_NC_FARMER.json index 6523b82c20560..acce03aaa0496 100644 --- a/data/json/npcs/TALK_NC_FARMER.json +++ b/data/json/npcs/TALK_NC_FARMER.json @@ -82,7 +82,7 @@ { "type": "talk_topic", "id": "TALK_NC_FARMER_EXPERTISE", - "dynamic_line": "I grew up on the farm, I don't know much about ghosts and goblins, but I've spent a lot of time growing food and I work hard. It's better in the country, cleaner. Not as dangerous. I hope.", + "dynamic_line": "I grew up on the farm, I don't know much about ghosts and goblins, but I've spent a lot of time growing food and I work hard. It's better in the country, cleaner. Not as dangerous. I hope.", "responses": [ { "text": "Why don't you go somewhere else?", "topic": "TALK_NC_FARMER_LEAVE" }, { "text": "Wanna get outta here?", "topic": "TALK_SUGGEST_FOLLOW" }, diff --git a/data/json/npcs/TALK_TRUE_FOODPERSON.json b/data/json/npcs/TALK_TRUE_FOODPERSON.json index dddd7c3b0391b..126759d4d3ab3 100644 --- a/data/json/npcs/TALK_TRUE_FOODPERSON.json +++ b/data/json/npcs/TALK_TRUE_FOODPERSON.json @@ -135,7 +135,7 @@ { "id": "TALK_FOODPERSON_INTRODUCTION", "type": "talk_topic", - "dynamic_line": "Indeed it is I! The one and only FOODPERSON!", + "dynamic_line": "Indeed it is I! The one and only FOODPERSON!", "responses": [ { "text": "Wow! Such an honor to meet you in person!", diff --git a/data/json/npcs/isherwood_farm/NPC_Carlos_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Carlos_Isherwood.json index 5eb1f6b9f4c65..b884653ed51b2 100644 --- a/data/json/npcs/isherwood_farm/NPC_Carlos_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Carlos_Isherwood.json @@ -151,7 +151,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_CARLOS_TOPICS", - "dynamic_line": "Go on...", + "dynamic_line": "Go on…", "responses": [ { "text": "I heard about Barry, can you tell me what captured him?", diff --git a/data/json/npcs/isherwood_farm/NPC_Chris_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Chris_Isherwood.json index 3a1722506f42c..14b09df676204 100644 --- a/data/json/npcs/isherwood_farm/NPC_Chris_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Chris_Isherwood.json @@ -144,7 +144,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_CHRIS_TOPICS", - "dynamic_line": "Go on...", + "dynamic_line": "Go on…", "responses": [ { "text": "Your dad asked me to come find you, said you've been looking for your uncle.", diff --git a/data/json/npcs/isherwood_farm/NPC_Eddie_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Eddie_Isherwood.json index bdd946365427f..945369f171555 100644 --- a/data/json/npcs/isherwood_farm/NPC_Eddie_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Eddie_Isherwood.json @@ -181,7 +181,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_EDDIE_TOPICS", - "dynamic_line": "Go on...", + "dynamic_line": "Go on…", "responses": [ { "text": "Your son helps with the dairy?", "topic": "TALK_EDDIE_LUKE" }, { "text": "So, Jesse runs the horse farm?", "topic": "TALK_EDDIE_JESSE" }, diff --git a/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json index 1942f5f8f8420..8f98a076cf814 100644 --- a/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Jack_Isherwood.json @@ -258,7 +258,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_JACK_TOPICS", - "dynamic_line": "Go on ...", + "dynamic_line": "Go on…", "responses": [ { "text": "I'm here to deliver some resources.", diff --git a/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json index 20fa52bb87b22..a09209e1eb02e 100644 --- a/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Jesse_Isherwood.json @@ -170,7 +170,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_JESSE_TOPICS", - "dynamic_line": "Go on...", + "dynamic_line": "Go on…", "responses": [ { "text": "Looks like you are doing well here.", "topic": "TALK_ISHERWOOD_JESSE_TALK1" }, { "text": "Do you have any animal care tips?", "topic": "TALK_ISHERWOOD_JESSE_TIPS" }, diff --git a/data/json/npcs/isherwood_farm/NPC_Lisa_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Lisa_Isherwood.json index bc9966c1d2a9d..bf0cc45c3d7d0 100644 --- a/data/json/npcs/isherwood_farm/NPC_Lisa_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Lisa_Isherwood.json @@ -123,7 +123,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_LISA_TOPICS", - "dynamic_line": "Go on...", + "dynamic_line": "Go on…", "responses": [ { "text": "Hi, I'm looking for Jesse.", "topic": "TALK_LISA_JESSE" }, { "text": "Hi, I'm looking for Chris.", "topic": "TALK_LISA_CHRIS" }, diff --git a/data/json/npcs/isherwood_farm/NPC_Luke_Isherwood.json b/data/json/npcs/isherwood_farm/NPC_Luke_Isherwood.json index bd77065d5a349..6e7206e5d2658 100644 --- a/data/json/npcs/isherwood_farm/NPC_Luke_Isherwood.json +++ b/data/json/npcs/isherwood_farm/NPC_Luke_Isherwood.json @@ -142,7 +142,7 @@ { "type": "talk_topic", "id": "TALK_ISHERWOOD_LUKE_TOPICS", - "dynamic_line": "Go on...", + "dynamic_line": "Go on…", "responses": [ { "text": "Must be tough having the world fall apart when you had you future to look forward to.", diff --git a/data/json/npcs/missiondef.json b/data/json/npcs/missiondef.json index 882496f30c7ac..9ae846640a61e 100644 --- a/data/json/npcs/missiondef.json +++ b/data/json/npcs/missiondef.json @@ -731,10 +731,10 @@ "dialogue": { "describe": "It's hard to tell who actually has the skills to survive these days…", "offer": "It's hard surviving out here on our own, and we'd probably have a better chance working together. Problem is, I don't really know you and what you're capable of. You might have what it takes, or you might not. Either way, I'm going to need some proof. Come back in a few days and I'll gladly follow you. It's basically a win-win for me: either you come back and I'll know you've got what it takes, or you don't and I'll know that I was right not to follow you.", - "accepted": "I'll see you then…or I won't, and then I'll know I made the right decision.", + "accepted": "I'll see you then… or I won't, and then I'll know I made the right decision.", "rejected": "Ya, it was a long shot I admit.", "advice": "Don't die. If you're asking me for advice, that doesn't bode well for you.", - "inquire": "Well, you're not dead…yet.", + "inquire": "Well, you're not dead… yet.", "success": "I'll be honest, I wasn't really expecting to see you again. A promise is a promise, I'll follow you now!", "success_lie": "I know time is relative and all that.", "failure": "I'm not quite sure how you failed to survive AND are talking to me." diff --git a/data/json/npcs/refugee_center/beggars/BEGGAR_5_Yusuke_Taylor.json b/data/json/npcs/refugee_center/beggars/BEGGAR_5_Yusuke_Taylor.json index 141ff4165be2a..837720dc4240b 100644 --- a/data/json/npcs/refugee_center/beggars/BEGGAR_5_Yusuke_Taylor.json +++ b/data/json/npcs/refugee_center/beggars/BEGGAR_5_Yusuke_Taylor.json @@ -100,7 +100,7 @@ { "type": "talk_topic", "id": "TALK_REFUGEE_BEGGAR_5_FUR", - "dynamic_line": "Gross, isn't it? Feels like pubes. I just started growing it everywhere a little while after the Cataclysm. No idea what caused it. I can't blame them for hating it, I hate it.", + "dynamic_line": "Gross, isn't it? Feels like pubes. I just started growing it everywhere a little while after the Cataclysm. No idea what caused it. I can't blame them for hating it, I hate it.", "responses": [ { "text": "Why live out here?", "topic": "TALK_REFUGEE_BEGGAR_5_TALK2" }, { diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Draco_Dune.json b/data/json/npcs/refugee_center/surface_refugees/NPC_Draco_Dune.json index 3557e2c7f2738..374bca1837018 100644 --- a/data/json/npcs/refugee_center/surface_refugees/NPC_Draco_Dune.json +++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Draco_Dune.json @@ -150,7 +150,7 @@ { "type": "talk_topic", "id": "TALK_REFUGEE_Draco_3", - "dynamic_line": "Oh you don't have time for all that, do you? Well, I'll give you the short version. I've gotten kinda tired of it in the telling. Frankly, it's not as heroic, not as inspiring, not as tragic, and certainly not as funny as some of the tales around here. But it's mine, ya know? I'm a musician. Guitar's my baby. You like folk and the blues, friend? Well, that was my bag and I sure could please my own ear with em, anyway. Folks who's bein' generous might also say it pleased theirs. Problem is, I seem to be between guitars right now, you know? Temporarily guitar-light, if you get my saying. Problem is, in the run for my life, I had to use old Jasmine as a bit of a billy club. Had to curb some rowdy dudes on my way here. It was her or me, you understand? You wouldn't begrudge a man breakin' his instrument to save his life, would ya?", + "dynamic_line": "Oh you don't have time for all that, do you? Well, I'll give you the short version. I've gotten kinda tired of it in the telling. Frankly, it's not as heroic, not as inspiring, not as tragic, and certainly not as funny as some of the tales around here. But it's mine, ya know? I'm a musician. Guitar's my baby. You like folk and the blues, friend? Well, that was my bag and I sure could please my own ear with em, anyway. Folks who's bein' generous might also say it pleased theirs. Problem is, I seem to be between guitars right now, you know? Temporarily guitar-light, if you get my saying. Problem is, in the run for my life, I had to use old Jasmine as a bit of a billy club. Had to curb some rowdy dudes on my way here. It was her or me, you understand? You wouldn't begrudge a man breakin' his instrument to save his life, would ya?", "responses": [ { "text": "I think I would've done the same. Nobody around here has a guitar?", "topic": "TALK_REFUGEE_Draco_4" }, { "text": "Yes, yes I would… you monster.", "topic": "TALK_DONE" } diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Pablo_Nunez.json b/data/json/npcs/refugee_center/surface_refugees/NPC_Pablo_Nunez.json index dcca034326a96..54c8e6059c60e 100644 --- a/data/json/npcs/refugee_center/surface_refugees/NPC_Pablo_Nunez.json +++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Pablo_Nunez.json @@ -144,7 +144,7 @@ { "type": "talk_topic", "id": "TALK_REFUGEE_Pablo_Background2", - "dynamic_line": "Dana and I were evacuated early, because of her pregnancy. They took us to a concentration center, and then we got on a bus to come here. The bus though, it was rolled over by a giant monster, and many died. We made it out along with a few others, and we kept going until we made it here. It wasn't much farther, and for some reason the monster didn't chase us, just kept tearing at the bus.", + "dynamic_line": "Dana and I were evacuated early, because of her pregnancy. They took us to a concentration center, and then we got on a bus to come here. The bus though, it was rolled over by a giant monster, and many died. We made it out along with a few others, and we kept going until we made it here. It wasn't much farther, and for some reason the monster didn't chase us, just kept tearing at the bus.", "responses": [ { "text": "What about the pregnancy?", "topic": "TALK_REFUGEE_Pablo_Background2_pregnancy" }, { "text": "What happened to the other crash survivors?", "topic": "TALK_REFUGEE_Pablo_Background2_survivors" }, diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Rhyzaea_Johnny.json b/data/json/npcs/refugee_center/surface_refugees/NPC_Rhyzaea_Johnny.json index f9d92d96dea22..e211e7e563265 100644 --- a/data/json/npcs/refugee_center/surface_refugees/NPC_Rhyzaea_Johnny.json +++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Rhyzaea_Johnny.json @@ -113,7 +113,7 @@ { "type": "talk_topic", "id": "TALK_REFUGEE_Rhyzaea_Background", - "dynamic_line": "It's a long, long story. I'm not from around here, I'm actually from way out in Western Canada. I'd always wanted to see New England, and I was down here on vacation when, well, you know. I got evacuated, but because I'm not a US citizen they weren't willing to take me downstairs. I can understand that, even if I don't like it much. To tell you the truth I'm still coming to terms with the fact that I'll probably never know how my family and my band are doing.", + "dynamic_line": "It's a long, long story. I'm not from around here, I'm actually from way out in Western Canada. I'd always wanted to see New England, and I was down here on vacation when, well, you know. I got evacuated, but because I'm not a US citizen they weren't willing to take me downstairs. I can understand that, even if I don't like it much. To tell you the truth I'm still coming to terms with the fact that I'll probably never know how my family and my band are doing.", "responses": [ { "text": "Tell me about yourself.", "topic": "TALK_REFUGEE_Rhyzaea_Background2" }, { "text": "Tell me about your family.", "topic": "TALK_REFUGEE_Rhyzaea_Family" }, diff --git a/data/json/npcs/refugee_center/surface_refugees/NPC_Stan_Borichenko.json b/data/json/npcs/refugee_center/surface_refugees/NPC_Stan_Borichenko.json index 55349288b0141..454e105f1cd9c 100644 --- a/data/json/npcs/refugee_center/surface_refugees/NPC_Stan_Borichenko.json +++ b/data/json/npcs/refugee_center/surface_refugees/NPC_Stan_Borichenko.json @@ -76,7 +76,7 @@ "type": "general", "context": "meeting", "value": "yes", - "yes": [ "Hi.", "Hello.", "Hm? Oh, hi.", "...Hi." ], + "yes": [ "Hi.", "Hello.", "Hm? Oh, hi.", "…Hi." ], "no": "Hello. I'm sorry, if we've met before, I don't really remember. I'm… I'm Stan." }, "responses": [ diff --git a/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_broker.json b/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_broker.json index d27d188c43c2b..f579c93e2cfde 100644 --- a/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_broker.json +++ b/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_broker.json @@ -163,7 +163,7 @@ "context": "recruit", "value": "yes", "yes": "I do. I don't know what you did to convince them to move out, but our supply chain and I both thank you. I hope it wasn't too unseemly.", - "no": "Even once we got things sorted out, there weren't enough beds for everyone, and definitely not enough supplies. These are harsh times. We're doing what we can for those folks… at least they've got shelter." + "no": "Even once we got things sorted out, there weren't enough beds for everyone, and definitely not enough supplies. These are harsh times. We're doing what we can for those folks… at least they've got shelter." } }, { @@ -175,7 +175,7 @@ { "type": "talk_topic", "id": "TALK_FREE_MERCHANT_STOCKS_SEALED1wrong", - "dynamic_line": "We didn't have great organization when we first arrived. A few of the earliest arrivals set up a triage and sorting system, with the sick and infirm getting set aside to wait. It's cruel, but we could see there was only space for so many, and we didn't know what was causing people to turn into zombies at the time, so we were trying to quarantine out infection. A couple folks died in there, and it escalated. One of the first people here, Jacob, had taken charge of the whole thing. When the triage area had to be evacuated he stayed behind to make sure everyone who could get out got out. It was a hell of a loss.", + "dynamic_line": "We didn't have great organization when we first arrived. A few of the earliest arrivals set up a triage and sorting system, with the sick and infirm getting set aside to wait. It's cruel, but we could see there was only space for so many, and we didn't know what was causing people to turn into zombies at the time, so we were trying to quarantine out infection. A couple folks died in there, and it escalated. One of the first people here, Jacob, had taken charge of the whole thing. When the triage area had to be evacuated he stayed behind to make sure everyone who could get out got out. It was a hell of a loss.", "speaker_effect": [ { "effect": { "u_add_var": "told_about_FM_evacuation", "type": "general", "context": "conversation", "value": "yes" } } ], diff --git a/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_guard_generic.json b/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_guard_generic.json index 7c5306be2a3f2..3a5a09be2e9d5 100644 --- a/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_guard_generic.json +++ b/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_guard_generic.json @@ -14,7 +14,7 @@ "id": "TALK_GUARD", "type": "talk_topic", "dynamic_line": [ - "I'm not in charge here, you're looking for someone else...", + "I'm not in charge here, you're looking for someone else…", "Keep civil or I'll bring the pain.", "Just on watch, move along.", { diff --git a/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_shopkeep.json b/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_shopkeep.json index 0d4c57d67424f..c549babbe622e 100644 --- a/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_shopkeep.json +++ b/data/json/npcs/refugee_center/surface_staff/NPC_free_merchant_shopkeep.json @@ -257,7 +257,7 @@ { "id": "TALK_EVAC_MERCHANT", "type": "talk_topic", - "dynamic_line": { "u_is_wearing": "badge_marshal", "yes": "Welcome marshal...", "no": "Welcome..." } + "dynamic_line": { "u_is_wearing": "badge_marshal", "yes": "Welcome marshal…", "no": "Welcome…" } }, { "id": "TALK_EVAC_MERCHANT_NEW", diff --git a/data/json/npcs/refugee_center/surface_staff/NPC_old_guard_doctor.json b/data/json/npcs/refugee_center/surface_staff/NPC_old_guard_doctor.json index 1bad332985496..dd4421cb5b79e 100644 --- a/data/json/npcs/refugee_center/surface_staff/NPC_old_guard_doctor.json +++ b/data/json/npcs/refugee_center/surface_staff/NPC_old_guard_doctor.json @@ -15,7 +15,7 @@ { "id": "TALK_SCIENCE_REP", "type": "talk_topic", - "dynamic_line": { "u_has_any_trait": [ "PROF_FED" ], "yes": "Marshal...", "no": "Citizen..." }, + "dynamic_line": { "u_has_any_trait": [ "PROF_FED" ], "yes": "Marshal…", "no": "Citizen…" }, "responses": [ { "text": "Who are you?", "topic": "TALK_SCIENCE_REP_NEW" }, { "text": "Heard anything about the outside world?", "topic": "TALK_SCIENCE_REP_WORLD" }, diff --git a/data/json/npcs/refugee_center/surface_visitors/NPC_old_guard_representative.json b/data/json/npcs/refugee_center/surface_visitors/NPC_old_guard_representative.json index 347d8d2c097f6..d874374cf56a1 100644 --- a/data/json/npcs/refugee_center/surface_visitors/NPC_old_guard_representative.json +++ b/data/json/npcs/refugee_center/surface_visitors/NPC_old_guard_representative.json @@ -24,7 +24,7 @@ { "id": "TALK_OLD_GUARD_REP", "type": "talk_topic", - "dynamic_line": { "u_has_any_trait": [ "PROF_FED" ], "yes": "Marshal...", "no": "Citizen..." }, + "dynamic_line": { "u_has_any_trait": [ "PROF_FED" ], "yes": "Marshal…", "no": "Citizen…" }, "responses": [ { "text": "Who are you?", "topic": "TALK_OLD_GUARD_REP_NEW" }, { "text": "Heard anything about the outside world?", "topic": "TALK_OLD_GUARD_REP_WORLD" }, diff --git a/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json b/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json index 3ec807bd27bb0..c1c680f3700e5 100644 --- a/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json +++ b/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json @@ -336,7 +336,7 @@ { "id": "TALK_ROBOFAC_INTERCOM_BUY_PROTECTIVE_GEAR", "type": "talk_topic", - "dynamic_line": "Given the current context, we are willing to sell you a set of our protective gear: gas mask, suit and gear, at a considerable discount. We will sell it for two of our coins.\n\nthe intercom: Hmm wait, we might not have your size...", + "dynamic_line": "Given the current context, we are willing to sell you a set of our protective gear: gas mask, suit and gear, at a considerable discount. We will sell it for two of our coins.\n\nthe intercom: Hmm wait, we might not have your size…", "responses": [ { "text": "[ 2 HGC ] Deal!", diff --git a/data/json/npcs/robofac/NPC_ROBOFAC_MERC_1.json b/data/json/npcs/robofac/NPC_ROBOFAC_MERC_1.json index 4d5df70e8b950..c9ebebb28b448 100644 --- a/data/json/npcs/robofac/NPC_ROBOFAC_MERC_1.json +++ b/data/json/npcs/robofac/NPC_ROBOFAC_MERC_1.json @@ -205,9 +205,9 @@ "id": "TALK_ROBOFAC_MERC_1_RANDOM_THOUGHTS", "type": "talk_topic", "dynamic_line": [ - "Thinking I should go hunt something soon...", - "Wondering if things will get better someday...", - "Hmm? Nothing, I guess I just like resting in this place.", + "Thinking I should go hunt something soon…", + "Wondering if things will get better someday…", + "Hmm? Nothing, I guess I just like resting in this place.", "Have you ever noticed how… wait no, never mind.", "I heard some strange dimensional resonance caused all this, do you think it has happened to other places?", "You noticed this place has working WI-FI? Well not the rest of the net works anyways." diff --git a/data/json/npcs/robofac/ROBOFAC_SURFACE_FREEMERCHANT.json b/data/json/npcs/robofac/ROBOFAC_SURFACE_FREEMERCHANT.json index c6a1d7bd1c294..ca60953a66160 100644 --- a/data/json/npcs/robofac/ROBOFAC_SURFACE_FREEMERCHANT.json +++ b/data/json/npcs/robofac/ROBOFAC_SURFACE_FREEMERCHANT.json @@ -91,11 +91,11 @@ "dynamic_line": { "u_is_wearing": "badge_marshal", "yes": [ - "Still plenty of outlaws in the roads, perhaps you should tend to your job, marshal...", + "Still plenty of outlaws in the roads, perhaps you should tend to your job, marshal…", "You see anything you want, marshal?", "Oh, a U.S. marshal, how quaint." ], - "no": [ "Welcome...", "Here to trade, I hope?", "Safe travels, scavenger." ] + "no": [ "Welcome…", "Here to trade, I hope?", "Safe travels, scavenger." ] }, "responses": [ { "text": "Let's trade.", "effect": "start_trade", "topic": "TALK_ROBOFAC_FREE_MERCHANT" }, diff --git a/data/json/npcs/tacoma_ranch/NPC_ranch_barber.json b/data/json/npcs/tacoma_ranch/NPC_ranch_barber.json index 44d2152c5ec8c..823ffa9106c48 100644 --- a/data/json/npcs/tacoma_ranch/NPC_ranch_barber.json +++ b/data/json/npcs/tacoma_ranch/NPC_ranch_barber.json @@ -47,7 +47,7 @@ { "type": "talk_topic", "id": "TALK_RANCH_BARBER_CUT", - "dynamic_line": "Stand still while I get my clippers...", + "dynamic_line": "Stand still while I get my clippers…", "responses": [ { "text": "Thanks…", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/tacoma_ranch/NPC_ranch_guard.json b/data/json/npcs/tacoma_ranch/NPC_ranch_guard.json index d1af5c89f34c0..7e07ad2c3c409 100644 --- a/data/json/npcs/tacoma_ranch/NPC_ranch_guard.json +++ b/data/json/npcs/tacoma_ranch/NPC_ranch_guard.json @@ -14,7 +14,7 @@ "id": "TALK_RANCH_GUARD", "type": "talk_topic", "dynamic_line": [ - "I'm not in charge here, you're looking for someone else...", + "I'm not in charge here, you're looking for someone else…", "Keep civil or I'll bring the pain.", "Just on watch, move along.", { diff --git a/data/json/npcs/tacoma_ranch/NPC_ranch_sickly_laborer.json b/data/json/npcs/tacoma_ranch/NPC_ranch_sickly_laborer.json index fd43d2fa40cee..ec1e2cabc6805 100644 --- a/data/json/npcs/tacoma_ranch/NPC_ranch_sickly_laborer.json +++ b/data/json/npcs/tacoma_ranch/NPC_ranch_sickly_laborer.json @@ -13,7 +13,7 @@ { "type": "talk_topic", "id": "TALK_RANCH_ILL_1", - "dynamic_line": "Please leave me alone...", + "dynamic_line": "Please leave me alone…", "responses": [ { "text": "What is your job here?", "topic": "TALK_RANCH_ILL_1_JOB" }, { "text": "Do you need any help?", "topic": "TALK_RANCH_ILL_1_HIRE" }, @@ -30,13 +30,13 @@ { "type": "talk_topic", "id": "TALK_RANCH_ILL_1_HIRE", - "dynamic_line": "I don't know what you could do. I've tried everything. Just give me time...", + "dynamic_line": "I don't know what you could do. I've tried everything. Just give me time…", "responses": [ { "text": "OK.", "topic": "TALK_RANCH_ILL_1" } ] }, { "type": "talk_topic", "id": "TALK_RANCH_ILL_1_SICK", - "dynamic_line": "I keep getting sick! At first I thought it was something I ate but now it seems like I can't keep anything down...", + "dynamic_line": "I keep getting sick! At first I thought it was something I ate but now it seems like I can't keep anything down…", "responses": [ { "text": "Uhm.", "topic": "TALK_RANCH_ILL_1" } ] } ] diff --git a/data/mods/Aftershock/npcs/prepnet_dialogue.json b/data/mods/Aftershock/npcs/prepnet_dialogue.json index d95f96b172d71..2ce76101afdca 100644 --- a/data/mods/Aftershock/npcs/prepnet_dialogue.json +++ b/data/mods/Aftershock/npcs/prepnet_dialogue.json @@ -94,7 +94,7 @@ { "type": "talk_topic", "id": "TALK_PrepNet_gardener_ask_goods", - "dynamic_line": "Here? Fruits and berries. Maybe the occasional piece of farm equipment, but you need crypto coins", + "dynamic_line": "Here? Fruits and berries. Maybe the occasional piece of farm equipment, but you need crypto coins", "responses": [ { "text": "Ok.", "topic": "TALK_PrepNet_gardener_1" }, { diff --git a/data/mods/DinoMod/NPC/NC_BO_BARONYX.json b/data/mods/DinoMod/NPC/NC_BO_BARONYX.json index fb1bef2dd2977..9ad99814f7dd3 100644 --- a/data/mods/DinoMod/NPC/NC_BO_BARONYX.json +++ b/data/mods/DinoMod/NPC/NC_BO_BARONYX.json @@ -41,7 +41,7 @@ "type": "dialogue", "context": "first_meeting", "value": "yes", - "no": "You look hungry friend. So much hunger in this world. This is the time of the eaters.", + "no": "You look hungry friend. So much hunger in this world. This is the time of the eaters.", "yes": { "u_has_var": "asked_about_eating", "type": "dialogue", @@ -219,7 +219,7 @@ { "id": "TALK_MISSION_ACCEPTED_SWAMPER", "type": "talk_topic", - "dynamic_line": "Excellent. Make it happen.", + "dynamic_line": "Excellent. Make it happen.", "responses": [ { "text": "Consider it done. But I also wanted to ask…", "topic": "TALK_SWAMPER" }, { "text": "Where should I start?", "topic": "TALK_MISSION_ADVICE_SWAMPER" }, diff --git a/data/mods/Magiclysm/npc/TALK_OLD_MAGUS.json b/data/mods/Magiclysm/npc/TALK_OLD_MAGUS.json index 4c4066e4b998a..5ee961b6072d0 100644 --- a/data/mods/Magiclysm/npc/TALK_OLD_MAGUS.json +++ b/data/mods/Magiclysm/npc/TALK_OLD_MAGUS.json @@ -7,7 +7,7 @@ "type": "dialogue", "context": "old_magus", "value": "yes", - "no": "Huh? *mumble mumble* … Who are you?", + "no": "Huh? *mumble mumble* … Who are you?", "yes": "Oh, you again." }, "responses": [ @@ -52,7 +52,7 @@ { "type": "talk_topic", "id": "TALK_OLD_MAGUS_LEAVE", - "dynamic_line": "And leave my tower and all my research? I think not.", + "dynamic_line": "And leave my tower and all my research? I think not.", "responses": [ { "text": "Wanna get outta here?", "topic": "TALK_SUGGEST_FOLLOW" }, { "text": "What can you sell me?", "topic": "TALK_OLD_MAGUS", "effect": "start_trade" }, diff --git a/src/dialogue.h b/src/dialogue.h index 4f5921be746c0..401c02459990b 100644 --- a/src/dialogue.h +++ b/src/dialogue.h @@ -332,7 +332,7 @@ struct dynamic_line_t { public: dynamic_line_t() = default; - dynamic_line_t( const std::string &line ); + dynamic_line_t( const translation &line ); dynamic_line_t( const JsonObject &jo ); dynamic_line_t( const JsonArray &ja ); static dynamic_line_t from_member( const JsonObject &jo, const std::string &member_name ); diff --git a/src/npctalk.cpp b/src/npctalk.cpp index 2723d0657e06f..dc02ddef94c2e 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -2948,26 +2948,31 @@ dynamic_line_t dynamic_line_t::from_member( const JsonObject &jo, const std::str } else if( jo.has_object( member_name ) ) { return dynamic_line_t( jo.get_object( member_name ) ); } else if( jo.has_string( member_name ) ) { - return dynamic_line_t( jo.get_string( member_name ) ); + translation line; + jo.read( member_name, line ); + return dynamic_line_t( line ); } else { return dynamic_line_t{}; } } -dynamic_line_t::dynamic_line_t( const std::string &line ) +dynamic_line_t::dynamic_line_t( const translation &line ) { function = [line]( const dialogue & ) { - return _( line ); + return line.translated(); }; } + dynamic_line_t::dynamic_line_t( const JsonObject &jo ) { if( jo.has_member( "and" ) ) { std::vector lines; for( const JsonValue entry : jo.get_array( "and" ) ) { if( entry.test_string() ) { - lines.emplace_back( entry.get_string() ); + translation line; + entry.read( line ); + lines.emplace_back( line ); } else if( entry.test_array() ) { lines.emplace_back( entry.get_array() ); } else if( entry.test_object() ) { @@ -2995,6 +3000,11 @@ dynamic_line_t::dynamic_line_t( const JsonObject &jo ) }; } else if( jo.has_string( "gendered_line" ) ) { const std::string line = jo.get_string( "gendered_line" ); + if( test_mode ) { + // HACK: check text style by reading it as a translation object + translation dummy; + jo.read( "gendered_line", dummy ); + } if( !jo.has_array( "relevant_genders" ) ) { jo.throw_error( R"(dynamic line with "gendered_line" must also have "relevant_genders")" ); @@ -3051,7 +3061,9 @@ dynamic_line_t::dynamic_line_t( const JsonArray &ja ) std::vector lines; for( const JsonValue entry : ja ) { if( entry.test_string() ) { - lines.emplace_back( entry.get_string() ); + translation line; + entry.read( line ); + lines.emplace_back( line ); } else if( entry.test_array() ) { lines.emplace_back( entry.get_array() ); } else if( entry.test_object() ) { From 28dcbe6ac74937e86757b90e275777da27857c0f Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Mon, 29 Jun 2020 08:22:32 +0200 Subject: [PATCH 154/206] No healing for you Sugar (#41651) * Sugar constructs don't heal * Prevent use of incompatible healing items --- data/mods/My_Sweet_Cataclysm/sweet_mutations.json | 4 ++-- doc/JSON_FLAGS.md | 1 + src/character.cpp | 6 ++++-- src/game.cpp | 3 +++ src/item_action.cpp | 2 +- src/player.cpp | 5 +++++ 6 files changed, 16 insertions(+), 5 deletions(-) diff --git a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json index b56219f0ac8ce..6cf1e1159746b 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json @@ -35,7 +35,7 @@ "vitamin_rates": [ [ "vitC", -900 ], [ "vitB", -900 ], [ "vitA", -900 ], [ "iron", -900 ], [ "calcium", -900 ] ], "starting_trait": true, "healing_awake": 0.0, - "healing_resting": 0.0, + "healing_resting": -1.0, "healthy_rate": 0.0, "bleed_resist": 1000, "fat_to_max_hp": 0.1, @@ -49,6 +49,6 @@ "bash": 5 } ], - "flags": [ "NO_THIRST", "NO_DISEASE", "NO_RADIATION" ] + "flags": [ "NO_THIRST", "NO_DISEASE", "NO_RADIATION", "NO_MINIMAL_HEALING" ] } ] diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index bf473494ac671..c12ac74a150b0 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -1114,6 +1114,7 @@ Also see `monster_attacks.json` for more special attacks, for example, impale an - ```NO_DISEASE``` This mutation grants immunity to diseases. - ```NO_THIRST``` Your thirst is not modified by food or drinks. - ```NO_RADIATION``` This mutation grants immunity to radiations. +- ```NO_MINIMAL_HEALING``` This mutation disables the minimal healing of 1 hp a day. ### Categories diff --git a/src/character.cpp b/src/character.cpp index 80955b7c4fb0c..3f4a2c628cfa6 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -4690,7 +4690,7 @@ void Character::update_body( const time_point &from, const time_point &to ) // TODO: change @ref med to take time_duration mend( five_mins * to_turns( 5_minutes ) ); } - if( ticks_between( from, to, 24_hours ) > 0 ) { + if( ticks_between( from, to, 24_hours ) > 0 && !has_trait_flag( "NO_MINIMAL_HEALING" ) ) { enforce_minimum_healing(); } @@ -7665,7 +7665,9 @@ bool Character::invoke_item( item *used, const std::string &method ) bool Character::invoke_item( item *used, const std::string &method, const tripoint &pt ) { - if( !has_enough_charges( *used, true ) ) { + if( !has_enough_charges( *used, true ) || ( used->is_medication() && + !can_use_heal_item( *used ) ) ) { + add_msg_if_player( m_bad, _( "Your biology is not compatible with that healing item." ) ); return false; } diff --git a/src/game.cpp b/src/game.cpp index 6f7f853c8e19b..3cdea2d048f75 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2104,6 +2104,9 @@ static hint_rating rate_action_use( const avatar &you, const item &it ) return hint_rating::good; } } else if( it.is_food() || it.is_medication() || it.is_book() || it.is_armor() ) { + if( it.is_medication() && !you.can_use_heal_item( it ) ) { + return hint_rating::cant; + } // The rating is subjective, could be argued as hint_rating::cant or hint_rating::good as well return hint_rating::iffy; } else if( it.type->has_use() ) { diff --git a/src/item_action.cpp b/src/item_action.cpp index d9b773b4917c0..dc93f78f2cef2 100644 --- a/src/item_action.cpp +++ b/src/item_action.cpp @@ -261,7 +261,7 @@ void game::item_action_menu() kmenu.text = _( "Execute which action?" ); kmenu.input_category = "ITEM_ACTIONS"; input_context ctxt( "ITEM_ACTIONS" ); - for( const auto &id : item_actions ) { + for( const std::pair &id : item_actions ) { ctxt.register_action( id.first, id.second.name ); kmenu.additional_actions.emplace_back( id.first, id.second.name ); } diff --git a/src/player.cpp b/src/player.cpp index 1b5f20a8ce0d7..0cd7bc9e53cfb 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -3011,6 +3011,11 @@ void player::use( item_location loc ) item &used = *loc; last_item = used.typeId(); + if( ( *loc ).is_medication() && !can_use_heal_item( *loc ) ) { + add_msg_if_player( m_bad, _( "Your biology is not compatible with that healing item." ) ); + return; + } + if( used.is_tool() ) { if( !used.type->has_use() ) { add_msg_if_player( _( "You can't do anything interesting with your %s." ), used.tname() ); From af418c9a58be30cfd675c44747f07388c81ef792 Mon Sep 17 00:00:00 2001 From: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> Date: Sun, 28 Jun 2020 23:34:59 -0700 Subject: [PATCH 155/206] Move TALK_COMMON_ALLY options into submenus (#41593) --- data/json/npcs/TALK_COMMON_ALLY.json | 190 +++++++++---------- data/json/npcs/TALK_FRIEND_CONVERSATION.json | 50 +++++ 2 files changed, 138 insertions(+), 102 deletions(-) diff --git a/data/json/npcs/TALK_COMMON_ALLY.json b/data/json/npcs/TALK_COMMON_ALLY.json index 2e3dbe78a391e..b1845426208b7 100644 --- a/data/json/npcs/TALK_COMMON_ALLY.json +++ b/data/json/npcs/TALK_COMMON_ALLY.json @@ -46,7 +46,71 @@ "responses": [ { "text": "I want to give you some commands for combat.", "topic": "TALK_COMBAT_COMMANDS" }, { "text": "I want to set some miscellaneous rules.", "topic": "TALK_MISC_RULES" }, + { + "text": "I'd like to know a bit more about your abilities.", + "topic": "TALK_FRIEND", + "effect": "reveal_stats" + }, + { "text": "There's something I want you to do.", "topic": "TALK_ALLY_ORDERS" }, + { "text": "I just wanted to talk for a bit.", "topic": "TALK_ALLY_SOCIAL" }, + { "text": "Can you help me understand something? (HELP/TUTORIAL)", "topic": "TALK_ALLY_TUTORIAL" }, + { "text": "I'm going to go my own way for a while.", "topic": "TALK_LEAVE" }, + { "text": "Let's go.", "topic": "TALK_DONE" } + ] + }, + { + "id": [ "TALK_ALLY_SOCIAL" ], + "type": "talk_topic", + "dynamic_line": { + "is_by_radio": " *tshk* Are you serious? This isn't a cell phone. Can it wait until we're in the same place?", + "no": "Sure, what did you want to say?" + }, + "responses": [ + { + "text": "Mind if we just chat for a bit about your history?", + "topic": "TALK_FRIEND_CONVERSATION", + "condition": { + "and": [ "at_safe_space", { "or": [ { "npc_has_trait_flag": "BG_SURVIVAL_STORY" }, { "npc_has_trait": "NPC_STATIC_NPC" } ] } ] + }, + "//": "If the NPC already has a BG story, or started out as a static NPC (and so probably doesn't need a random bg story), then go on.", + "switch": true + }, + { + "text": "Mind if we just chat for a bit about your history?", + "topic": "TALK_FRIEND_CONVERSATION", + "condition": "at_safe_space", + "switch": true, + "effect": { "npc_add_trait": "BGSS_Confused_1" }, + "//": "If the NPC doesn't have a BG survival story flagged trait, and didn't start the game as a static NPC, give them a BG story.", + "//2": "This is a stand-in for some kind of better system to add a random trait." + }, + { + "text": "Mind if we just chat for a bit about your history?", + "topic": "TALK_CONVERSATION_DANGER", + "condition": { "not": "at_safe_space" }, + "switch": true + }, + { + "text": "Mind if we just chat for a bit about your history?", + "topic": "TALK_CONVERSATION_RADIO", + "condition": { "not": "is_by_radio" }, + "switch": true + }, + { + "text": "Let's just chitchat for a while, I could use some relaxation.", + "topic": "TALK_FRIEND_CHAT", + "condition": { "not": { "npc_has_effect": "asked_to_socialize" } } + }, { "text": "Can I do anything for you?", "topic": "TALK_MISSION_LIST" }, + { "text": "I changed my mind, wanted to ask you something else.", "topic": "TALK_NONE" }, + { "text": "Let's go.", "topic": "TALK_DONE" } + ] + }, + { + "id": [ "TALK_ALLY_ORDERS" ], + "type": "talk_topic", + "dynamic_line": [ "I'm all ears, my friend.", "You gonna give me orders?", "What would you like?", "Just say the word." ], + "responses": [ { "text": "Can you teach me anything?", "condition": { "not": "is_by_radio" }, @@ -66,13 +130,6 @@ "success": { "topic": "TALK_DENY_TRAIN" }, "failure": { "topic": "TALK_TRAIN_PERSUADE" } }, - { - "text": "Let's trade items", - "topic": "TRADE_HALLU", - "condition": { "npc_has_trait": "HALLUCINATION" }, - "switch": true, - "default": false - }, { "text": "Let's trade items.", "condition": { "not": "is_by_radio" }, @@ -81,6 +138,13 @@ "switch": true, "default": true }, + { + "text": "Let's trade items", + "topic": "TRADE_HALLU", + "condition": { "npc_has_trait": "HALLUCINATION" }, + "switch": true, + "default": false + }, { "text": "I want you to use this item.", "condition": { "not": "is_by_radio" }, @@ -105,8 +169,6 @@ "topic": "TALK_FRIEND_GUARD", "effect": "assign_camp" }, - { "text": "Let's talk about your current activity.", "topic": "TALK_ACTIVITIES" }, - { "text": "Let's talk about faction camps.", "topic": "TALK_CAMP_GENERAL" }, { "text": "Find a horse and mount up!", "condition": { "not": "npc_is_riding" }, @@ -126,58 +188,32 @@ "effect": "goto_location" }, { - "text": "I'd like to know a bit more about your abilities.", - "topic": "TALK_FRIEND", - "effect": "reveal_stats" - }, - { - "text": "Any hints about the world we now live in?", - "trial": { - "type": "CONDITION", - "condition": { - "or": [ - { "npc_need": "thirst", "amount": 80 }, - { "npc_need": "hunger", "amount": 160 }, - { "npc_need": "fatigue", "level": "TIRED" }, - { "npc_has_effect": "asked_to_hint" }, - "u_driving", - "npc_driving" - ] - } - }, - "success": { "topic": "TALK_SHELTER_DENY_ADVICE" }, - "failure": { "topic": "TALK_SHELTER_ADVICE", "effect": { "npc_add_effect": "asked_to_hint", "duration": 300 } } - }, - { - "text": "Mind if we just chat for a bit about your history?", - "topic": "TALK_FRIEND_CONVERSATION", - "condition": { - "and": [ "at_safe_space", { "or": [ { "npc_has_trait_flag": "BG_SURVIVAL_STORY" }, { "npc_has_trait": "NPC_STATIC_NPC" } ] } ] - }, - "//": "If the NPC already has a BG story, or started out as a static NPC (and so probably doesn't need a random bg story), then go on.", + "text": "I want you to build a camp here.", + "topic": "TALK_HALLU_CAMP", + "condition": { "npc_has_trait": "HALLUCINATION" }, "switch": true }, { - "text": "Mind if we just chat for a bit about your history?", - "topic": "TALK_FRIEND_CONVERSATION", - "condition": "at_safe_space", + "text": "I want you to build a camp here.", + "topic": "TALK_DONE", + "effect": "start_camp", + "condition": { "npc_at_om_location": "FACTION_CAMP_START" }, "switch": true, - "effect": { "npc_add_trait": "BGSS_Confused_1" }, - "//": "If the NPC doesn't have a BG survival story flagged trait, and didn't start the game as a static NPC, give them a BG story.", - "//2": "This is a stand-in for some kind of better system to add a random trait." + "default": true }, { - "text": "Mind if we just chat for a bit about your history?", - "topic": "TALK_CONVERSATION_DANGER", - "condition": { "not": "at_safe_space" } + "text": "We need to abandon this camp.", + "condition": { "npc_at_om_location": "FACTION_CAMP_ANY" }, + "topic": "TALK_DONE", + "effect": "abandon_camp" }, { - "text": "Let's just chitchat for a while, I could use some relaxation.", - "topic": "TALK_FRIEND_CHAT", - "condition": { "not": { "npc_has_effect": "asked_to_socialize" } } + "text": "Show me what needs to be done at the camp.", + "topic": "TALK_DONE", + "effect": "basecamp_mission", + "condition": { "npc_at_om_location": "FACTION_CAMP_ANY" } }, - { "text": "Tell me about giving you orders (NPC TUTORIAL).", "topic": "TALK_ALLY_TUTORIAL" }, - { "text": "I'm going to go my own way for a while.", "topic": "TALK_LEAVE" }, + { "text": "Let's talk about your current activity.", "topic": "TALK_ACTIVITIES" }, { "text": "Let's go.", "topic": "TALK_DONE" } ] }, @@ -883,56 +919,6 @@ "dynamic_line": "Sure thing, I'll make my way there.", "responses": [ { "text": "Affirmative.", "topic": "TALK_DONE" } ] }, - { - "id": "TALK_FRIEND_CHAT", - "type": "talk_topic", - "dynamic_line": [ - { "u_has_item": "beer", "yes": "", "no": "" }, - { "u_has_item": "european_pilsner", "yes": "", "no": "" }, - { "u_has_item": "pale_ale", "yes": "", "no": "" }, - { "u_has_item": "india_pale_ale", "yes": "", "no": "" }, - { "u_has_item": "wine_barley", "yes": "", "no": "" }, - { - "is_season": "summer", - "yes": "Yeah, this summer heat is hitting me hard, let's take a quick break, how goes it ?", - "no": "" - }, - { - "is_season": "winter", - "yes": "OK, maybe it'll stop me from freezing in this weather, what's up?", - "no": "" - }, - { - "is_day": "Well, it's the time of day for a quick break surely! How are you holding up?", - "no": "Man it's dark out isn't it? what's up?" - }, - { - "npc_has_effect": "infected", - "yes": "Well, I'm feeling pretty sick… are you doing OK though?", - "no": "" - }, - { - "has_no_assigned_mission": "", - "no": { - "has_many_assigned_missions": "Definitely, by the way, thanks for helping me so much with my tasks! Anyway, you coping OK, ? ", - "no": "OK, let's take a moment, oh, and thanks for helping me with that thing, so… what's up?" - } - }, - { - "days_since_cataclysm": 30, - "yes": "Now, we've got a moment, I was just thinking it's been a month or so since… since all this, how are you coping with it all?", - "no": "" - } - ], - "responses": [ - { - "text": "Oh you know, not bad, not bad…", - "topic": "TALK_DONE", - "switch": true, - "effect": [ "morale_chat_activity", { "npc_add_effect": "asked_to_socialize", "duration": 7000 } ] - } - ] - }, { "id": "TRADE_HALLU", "type": "talk_topic", diff --git a/data/json/npcs/TALK_FRIEND_CONVERSATION.json b/data/json/npcs/TALK_FRIEND_CONVERSATION.json index d903a0ef0fbf3..0d25832db6c5b 100644 --- a/data/json/npcs/TALK_FRIEND_CONVERSATION.json +++ b/data/json/npcs/TALK_FRIEND_CONVERSATION.json @@ -28,5 +28,55 @@ "type": "talk_topic", "dynamic_line": "What did you want to talk about?", "responses": [ { "text": "Actually, never mind.", "topic": "TALK_NONE" } ] + }, + { + "id": "TALK_FRIEND_CHAT", + "type": "talk_topic", + "dynamic_line": [ + { "u_has_item": "beer", "yes": "", "no": "" }, + { "u_has_item": "european_pilsner", "yes": "", "no": "" }, + { "u_has_item": "pale_ale", "yes": "", "no": "" }, + { "u_has_item": "india_pale_ale", "yes": "", "no": "" }, + { "u_has_item": "wine_barley", "yes": "", "no": "" }, + { + "is_season": "summer", + "yes": "Yeah, this summer heat is hitting me hard, let's take a quick break, how goes it ?", + "no": "" + }, + { + "is_season": "winter", + "yes": "OK, maybe it'll stop me from freezing in this weather, what's up?", + "no": "" + }, + { + "is_day": "Well, it's the time of day for a quick break surely! How are you holding up?", + "no": "Man it's dark out isn't it? What's up?" + }, + { + "npc_has_effect": "infected", + "yes": "Well, I'm feeling pretty sick… are you doing OK though?", + "no": "" + }, + { + "has_no_assigned_mission": "", + "no": { + "has_many_assigned_missions": "Definitely, by the way, thanks for helping me so much with my tasks! Anyway, you coping OK, ? ", + "no": "OK, let's take a moment, oh, and thanks for helping me with that thing, so… what's up?" + } + }, + { + "days_since_cataclysm": 30, + "yes": "Now, we've got a moment, I was just thinking it's been a month or so since… since all this, how are you coping with it all?", + "no": "" + } + ], + "responses": [ + { + "text": "Oh you know, not bad, not bad…", + "topic": "TALK_DONE", + "switch": true, + "effect": [ "morale_chat_activity", { "npc_add_effect": "asked_to_socialize", "duration": 7000 } ] + } + ] } ] From 2f386b3bafefd97679e0d30cf38e15077102364d Mon Sep 17 00:00:00 2001 From: LyleSY Date: Mon, 29 Jun 2020 02:36:26 -0400 Subject: [PATCH 156/206] Add tigers (#41659) --- data/json/mapgen/zoo.json | 4 ++-- data/json/monstergroups/mammal.json | 3 ++- data/json/monstergroups/misc.json | 6 ++++-- data/json/monsters/mammal.json | 16 ++++++++++++++++ data/json/monsters/zed-animal.json | 14 ++++++++++++++ 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/data/json/mapgen/zoo.json b/data/json/mapgen/zoo.json index 33bdde5fd27df..6cb543524d36a 100644 --- a/data/json/mapgen/zoo.json +++ b/data/json/mapgen/zoo.json @@ -139,8 +139,8 @@ { "chance": 75, "item": "vending_drink", "x": 20, "y": 1 } ], "place_monster": [ - { "monster": "mon_coyote", "x": 8, "y": 16 }, - { "monster": "mon_coyote", "x": 9, "y": 17 }, + { "monster": "mon_tiger", "x": 8, "y": 16 }, + { "monster": "mon_tiger", "x": 9, "y": 17 }, { "monster": "mon_bear", "x": 8, "y": 20 } ] } diff --git a/data/json/monstergroups/mammal.json b/data/json/monstergroups/mammal.json index a0bcab9009071..72138773b29eb 100644 --- a/data/json/monstergroups/mammal.json +++ b/data/json/monstergroups/mammal.json @@ -119,7 +119,8 @@ { "monster": "mon_cat_sphynx", "freq": 50, "cost_multiplier": 0 }, { "monster": "mon_cat_sphynx_kitten", "freq": 5, "cost_multiplier": 0 }, { "monster": "mon_cat_chonker", "freq": 50, "cost_multiplier": 0 }, - { "monster": "mon_cat_chonker_kitten", "freq": 5, "cost_multiplier": 0 } + { "monster": "mon_cat_chonker_kitten", "freq": 5, "cost_multiplier": 0 }, + { "monster": "mon_tiger", "freq": 1, "cost_multiplier": 30 } ] } ] diff --git a/data/json/monstergroups/misc.json b/data/json/monstergroups/misc.json index 19c1b4e05059c..b3b5b4718c62c 100644 --- a/data/json/monstergroups/misc.json +++ b/data/json/monstergroups/misc.json @@ -47,7 +47,8 @@ { "monster": "mon_zombie_pig", "freq": 10, "cost_multiplier": 25, "starts": 2160, "pack_size": [ 1, 5 ] }, { "monster": "mon_giant_cockroach", "freq": 10, "cost_multiplier": 1, "pack_size": [ 1, 5 ] }, { "monster": "mon_pregnant_giant_cockroach", "freq": 1, "cost_multiplier": 3 }, - { "monster": "mon_giant_cockroach_nymph", "freq": 5, "cost_multiplier": 1 } + { "monster": "mon_giant_cockroach_nymph", "freq": 5, "cost_multiplier": 1 }, + { "monster": "mon_tiger", "freq": 1, "cost_multiplier": 30 } ] }, { @@ -171,7 +172,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 15, "cost_multiplier": 3 }, { "monster": "mon_squirrel", "freq": 1, "cost_multiplier": 0 }, { "monster": "mon_cat", "freq": 10, "cost_multiplier": 0 }, - { "monster": "mon_dog", "freq": 10, "cost_multiplier": 0 } + { "monster": "mon_dog", "freq": 10, "cost_multiplier": 0 }, + { "monster": "mon_tiger", "freq": 1, "cost_multiplier": 30 } ] } ] diff --git a/data/json/monsters/mammal.json b/data/json/monsters/mammal.json index 87f3bf37ed61f..520375c618e54 100644 --- a/data/json/monsters/mammal.json +++ b/data/json/monsters/mammal.json @@ -576,6 +576,22 @@ "BLEED" ] }, + { + "id": "mon_tiger", + "type": "MONSTER", + "name": { "str": "tiger" }, + "copy-from": "mon_cougar", + "description": "The majestic tiger, a large feline predator. Native to Asia, they are now most populous in private reserves in the United States. Fast and powerful, this predator is one of the most recognizable and beloved animals in the world. Also one of the deadliest.", + "volume": "190 L", + "weight": "190 kg", + "hp": 180, + "speed": 140, + "symbol": "T", + "morale": 60, + "melee_dice": 3, + "dodge": 2, + "zombify_into": "mon_ziger" + }, { "id": "mon_cow_calf", "type": "MONSTER", diff --git a/data/json/monsters/zed-animal.json b/data/json/monsters/zed-animal.json index d8d8510b57d81..5a26d8b249761 100644 --- a/data/json/monsters/zed-animal.json +++ b/data/json/monsters/zed-animal.json @@ -380,6 +380,20 @@ "FILTHY" ] }, + { + "id": "mon_ziger", + "type": "MONSTER", + "name": { "str": "Tiger wight" }, + "description": "This otherwise normal looking tiger stumbles and sways, its jaws slack, its eyes wide open and shining black.", + "copy-from": "mon_zougar", + "volume": "150 L", + "weight": "190 kg", + "hp": 200, + "speed": 110, + "symbol": "T", + "melee_dice": 3, + "dodge": 0 + }, { "id": "mon_zpider_mass", "type": "MONSTER", From 5699db334d2e737285a74b7467726b208f0676d2 Mon Sep 17 00:00:00 2001 From: Sage Barton Date: Mon, 29 Jun 2020 01:55:20 -0500 Subject: [PATCH 157/206] Fix Segmentation Fault When Removing Last Part Of Vehicle (#41660) --- src/veh_interact.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/veh_interact.cpp b/src/veh_interact.cpp index 4b2436563f857..051bb37277794 100644 --- a/src/veh_interact.cpp +++ b/src/veh_interact.cpp @@ -3185,6 +3185,7 @@ void veh_interact::complete_vehicle( player &p ) } else { veh->remove_part( vehicle_part ); veh->part_removal_cleanup(); + g->m.update_vehicle_cache( veh, veh->sm_pos.z ); } // This will be part of an NPC "job" where they need to clean up the acitivty items afterwards if( p.is_npc() ) { @@ -3196,7 +3197,6 @@ void veh_interact::complete_vehicle( player &p ) // point because we don't want to put them back into the vehicle part // that just got removed). put_into_vehicle_or_drop( p, item_drop_reason::deliberate, resulting_items ); - g->m.update_vehicle_cache( veh, veh->sm_pos.z ); break; } } From 4591fe9671de2333b68026da10267251fc04c535 Mon Sep 17 00:00:00 2001 From: DialoMalison Date: Mon, 29 Jun 2020 03:54:51 -0400 Subject: [PATCH 158/206] Remove duplicate entry --- data/json/recipes/recipe_weapon.json | 1 - 1 file changed, 1 deletion(-) diff --git a/data/json/recipes/recipe_weapon.json b/data/json/recipes/recipe_weapon.json index ca4668cdb0a11..a7eba09f741dd 100644 --- a/data/json/recipes/recipe_weapon.json +++ b/data/json/recipes/recipe_weapon.json @@ -1582,7 +1582,6 @@ "autolearn": true, "using": [ [ "blacksmithing_standard", 3 ], [ "steel_tiny", 3 ] ], "qualities": [ { "id": "CUT", "level": 1 }, { "id": "CHISEL", "level": 3 } ], - "tools": [ [ [ "tongs", -1 ] ] ], "components": [ [ [ "2x4", 1 ], [ "stick", 1 ] ] ] }, { From bda0d169607daae54b0a814a40173852f46f1c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A4r=20Karlsson?= Date: Mon, 29 Jun 2020 14:50:30 +0200 Subject: [PATCH 159/206] Add longest_side to musical_instruments.json --- data/json/items/tool/musical_instruments.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/data/json/items/tool/musical_instruments.json b/data/json/items/tool/musical_instruments.json index 6dab2a0ea80fb..341ebe3e6ec42 100644 --- a/data/json/items/tool/musical_instruments.json +++ b/data/json/items/tool/musical_instruments.json @@ -7,6 +7,7 @@ "description": "A standard factory-made banjo. Looks to be in working condition.", "weight": "2000 g", "volume": "3 L", + "longest_side": "95 cm", "price": 7500, "price_postapoc": 500, "to_hit": 2, @@ -37,6 +38,7 @@ "description": "A polished bone flute with five finger holes.", "weight": "250 g", "volume": "500 ml", + "longest_side": "35 cm", "price": 5000, "price_postapoc": 100, "bashing": 2, @@ -67,6 +69,7 @@ "description": "An ornate clarinet made from wood.", "weight": "550 g", "volume": "1500 ml", + "longest_side": "60 cm", "price": 5500, "price_postapoc": 250, "to_hit": 1, @@ -97,6 +100,7 @@ "description": "A simple silver-plated flute.", "weight": "250 g", "volume": "500 ml", + "longest_side": "66 cm", "price": 5000, "price_postapoc": 150, "bashing": 2, @@ -126,6 +130,7 @@ "description": "A brass trumpet with only a few dents here and there.", "weight": "1500 g", "volume": "2500 ml", + "longest_side": "50 cm", "price": 7500, "price_postapoc": 300, "to_hit": 1, @@ -154,8 +159,9 @@ "category": "tools", "name": { "str": "ukulele" }, "description": "A small factory made ukulele. Looks to be in working condition.", - "weight": "2000 g", + "weight": "350 g", "volume": "2500 ml", + "longest_side": "55 cm", "price": 7500, "price_postapoc": 250, "to_hit": 2, @@ -186,6 +192,7 @@ "description": "A cheap, factory-made violin with a built-in holder for a bow. Still produces a nice sound.", "weight": "1300 g", "volume": "2500 ml", + "longest_side": "60 cm", "price": 7500, "price_postapoc": 600, "to_hit": 2, @@ -216,6 +223,7 @@ "description": "A shiny golden fiddle, with a strange aura around it. You feel like it once belonged to the best there's ever been.", "weight": "13000 g", "volume": "2500 ml", + "longest_side": "60 cm", "price": 1000000, "price_postapoc": 1000, "to_hit": 2, From 4fb291b9f22bd741186e5d9b403c8bc8c86db60c Mon Sep 17 00:00:00 2001 From: Meladath Date: Mon, 29 Jun 2020 15:21:04 +0100 Subject: [PATCH 160/206] Add longest_side to S&W 500, increase holster and XL holster size --- data/json/items/armor/holster.json | 4 ++-- data/json/items/gun/500.json | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/data/json/items/armor/holster.json b/data/json/items/armor/holster.json index 4d5957bf5991d..a364dfdfa97dc 100644 --- a/data/json/items/armor/holster.json +++ b/data/json/items/armor/holster.json @@ -117,7 +117,7 @@ "min_item_volume": "300 ml", "max_contains_volume": "800 ml", "max_contains_weight": "2 kg", - "max_item_length": "25 cm", + "max_item_length": "30 cm", "moves": 50 } ], @@ -229,7 +229,7 @@ "min_item_volume": "750 ml", "max_contains_volume": "1250 ml", "max_contains_weight": "5 kg", - "max_item_length": "30 cm", + "max_item_length": "40 cm", "moves": 50 } ], diff --git a/data/json/items/gun/500.json b/data/json/items/gun/500.json index e47a5954d989d..30235ec66f3e6 100644 --- a/data/json/items/gun/500.json +++ b/data/json/items/gun/500.json @@ -49,6 +49,7 @@ "price_postapoc": 3500, "to_hit": -2, "bashing": 12, + "longest_side": "381 mm", "material": [ "steel", "plastic" ], "symbol": "(", "color": "light_gray", From 014192bc8ddfc64e4881dd4459f8d29da2de1082 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 29 Jun 2020 20:02:54 +0200 Subject: [PATCH 161/206] Move bandage and disinfectant to body --- src/bodypart.h | 1 - src/character.cpp | 28 ++++++++++++---------------- src/character.h | 1 - src/creature.cpp | 30 ++++++++++++++++++++++++++++++ src/creature.h | 6 ++++++ src/iexamine.cpp | 5 ++--- src/iuse_actor.cpp | 6 ++++-- src/savegame_json.cpp | 30 ++++++++++++++++++++++++------ 8 files changed, 78 insertions(+), 29 deletions(-) diff --git a/src/bodypart.h b/src/bodypart.h index 500d733bc8e5d..78c4eb7ec32ac 100644 --- a/src/bodypart.h +++ b/src/bodypart.h @@ -158,7 +158,6 @@ class bodypart int hp_max; int healed_total = 0; - /** Not used yet*/ int damage_bandaged = 0; int damage_disinfected = 0; diff --git a/src/character.cpp b/src/character.cpp index 3f4a2c628cfa6..72f8d0102edb6 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -400,8 +400,6 @@ Character &get_player_character() Character::Character() : visitable(), - damage_bandaged( {{ 0 }} ), - damage_disinfected( {{ 0 }} ), cached_time( calendar::before_time_starts ), id( -1 ), next_climate_control_check( calendar::before_time_starts ), @@ -4565,25 +4563,23 @@ void Character::regen( int rate_multiplier ) } // include healing effects - for( int i = 0; i < num_hp_parts; i++ ) { - const bodypart_id &bp = convert_bp( hp_to_bp( static_cast( i ) ) ).id(); + for( const bodypart_id &bp : get_all_body_parts( true ) ) { float healing = healing_rate_medicine( rest, bp ) * to_turns( 5_minutes ); - int healing_apply = roll_remainder( healing ); - healed_bp( i, healing_apply ); + mod_part_healed_total( bp, healing_apply ); heal( bp, healing_apply ); - if( damage_bandaged[i] > 0 ) { - damage_bandaged[i] -= healing_apply; - if( damage_bandaged[i] <= 0 ) { - damage_bandaged[i] = 0; + if( get_part_damage_bandaged( bp ) > 0 ) { + mod_part_damage_bandaged( bp, -healing_apply ); + if( get_part_damage_bandaged( bp ) <= 0 ) { + set_part_damage_bandaged( bp, 0 ); remove_effect( effect_bandaged, bp->token ); add_msg_if_player( _( "Bandaged wounds on your %s healed." ), body_part_name( bp ) ); } } - if( damage_disinfected[i] > 0 ) { - damage_disinfected[i] -= healing_apply; - if( damage_disinfected[i] <= 0 ) { - damage_disinfected[i] = 0; + if( get_part_damage_disinfected( bp ) > 0 ) { + mod_part_damage_disinfected( bp, -healing_apply ); + if( get_part_damage_disinfected( bp ) <= 0 ) { + set_part_damage_disinfected( bp, 0 ); remove_effect( effect_disinfected, bp->token ); add_msg_if_player( _( "Disinfected wounds on your %s healed." ), body_part_name( bp ) ); } @@ -4591,12 +4587,12 @@ void Character::regen( int rate_multiplier ) // remove effects if the limb was healed by other way if( has_effect( effect_bandaged, bp->token ) && ( get_part( bp )->is_at_max_hp() ) ) { - damage_bandaged[i] = 0; + set_part_damage_bandaged( bp, 0 ); remove_effect( effect_bandaged, bp->token ); add_msg_if_player( _( "Bandaged wounds on your %s healed." ), body_part_name( bp ) ); } if( has_effect( effect_disinfected, bp->token ) && ( get_part( bp )->is_at_max_hp() ) ) { - damage_disinfected[i] = 0; + set_part_damage_disinfected( bp, 0 ); remove_effect( effect_disinfected, bp->token ); add_msg_if_player( _( "Disinfected wounds on your %s healed." ), body_part_name( bp ) ); } diff --git a/src/character.h b/src/character.h index d58d31a355c25..5773a32adc225 100644 --- a/src/character.h +++ b/src/character.h @@ -1707,7 +1707,6 @@ class Character : public Creature, public visitable bool male = false; std::list worn; - std::array damage_bandaged, damage_disinfected; bool nv_cached = false; // Means player sit inside vehicle on the tile he is now bool in_vehicle = false; diff --git a/src/creature.cpp b/src/creature.cpp index 25c59fc1655d9..f7d9f229e6e27 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -1506,6 +1506,16 @@ int Creature::get_part_healed_total( const bodypart_id &id ) const return get_part( id ).get_healed_total(); } +int Creature::get_part_damage_disinfected( const bodypart_id &id ) const +{ + return get_part( id ).get_damage_disinfected(); +} + +int Creature::get_part_damage_bandaged( const bodypart_id &id ) const +{ + return get_part( id ).get_damage_bandaged(); +} + void Creature::set_part_hp_cur( const bodypart_id &id, int set ) { get_part( id )->set_hp_cur( set ); @@ -1521,6 +1531,16 @@ void Creature::set_part_healed_total( const bodypart_id &id, int set ) get_part( id )->set_healed_total( set ); } +void Creature::set_part_damage_disinfected( const bodypart_id &id, int set ) +{ + get_part( id )->set_damage_disinfected( set ); +} + +void Creature::set_part_damage_bandaged( const bodypart_id &id, int set ) +{ + get_part( id )->set_damage_bandaged( set ); +} + void Creature::mod_part_hp_cur( const bodypart_id &id, int mod ) { get_part( id )->mod_hp_cur( mod ); @@ -1536,6 +1556,16 @@ void Creature::mod_part_healed_total( const bodypart_id &id, int mod ) get_part( id )->mod_healed_total( mod ); } +void Creature::mod_part_damage_disinfected( const bodypart_id &id, int mod ) +{ + get_part( id )->mod_damage_disinfected( mod ); +} + +void Creature::mod_part_damage_bandaged( const bodypart_id &id, int mod ) +{ + get_part( id )->mod_damage_bandaged( mod ); +} + void Creature::set_all_parts_hp_cur( const int set ) { for( std::pair &elem : body ) { diff --git a/src/creature.h b/src/creature.h index f17b3a727eafd..51e9b99d83ab8 100644 --- a/src/creature.h +++ b/src/creature.h @@ -617,13 +617,19 @@ class Creature int get_part_hp_max( const bodypart_id &id ) const; int get_part_healed_total( const bodypart_id &id ) const; + int get_part_damage_disinfected( const bodypart_id &id ) const; + int get_part_damage_bandaged( const bodypart_id &id ) const; void set_part_hp_cur( const bodypart_id &id, int set ); void set_part_hp_max( const bodypart_id &id, int set ); void set_part_healed_total( const bodypart_id &id, int set ); + void set_part_damage_disinfected( const bodypart_id &id, int set ); + void set_part_damage_bandaged( const bodypart_id &id, int set ); void mod_part_hp_cur( const bodypart_id &id, int mod ); void mod_part_hp_max( const bodypart_id &id, int mod ); void mod_part_healed_total( const bodypart_id &id, int mod ); + void mod_part_damage_disinfected( const bodypart_id &id, int mod ); + void mod_part_damage_bandaged( const bodypart_id &id, int mod ); void set_all_parts_hp_cur( int set ); diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 7476f9e8eae9f..45bf621677cd1 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -4897,9 +4897,8 @@ void iexamine::autodoc( player &p, const tripoint &examp ) patient.add_effect( effect_disinfected, 1_turns, bp_healed->token ); effect &e = patient.get_effect( effect_disinfected, bp_healed->token ); e.set_duration( e.get_int_dur_factor() * disinfectant_intensity ); - hp_part target_part = player::bp_to_hp( bp_healed->token ); - patient.damage_disinfected[target_part] = patient.get_part_hp_max( bp_healed ) - - patient.get_part_hp_cur( bp_healed ); + patient.set_part_damage_disinfected( bp_healed, + patient.get_part_hp_max( bp_healed ) - patient.get_part_hp_cur( bp_healed ) ); } } patient.moves -= 500; diff --git a/src/iuse_actor.cpp b/src/iuse_actor.cpp index 73069a4020575..5b8dbc93da0b5 100644 --- a/src/iuse_actor.cpp +++ b/src/iuse_actor.cpp @@ -3299,7 +3299,8 @@ int heal_actor::finish_using( player &healer, player &patient, item &it, hp_part patient.add_effect( effect_bandaged, 1_turns, bp_healed ); effect &e = patient.get_effect( effect_bandaged, bp_healed ); e.set_duration( e.get_int_dur_factor() * bandages_intensity ); - patient.damage_bandaged[healed] = patient.get_part_hp_max( bp ) - patient.get_part_hp_cur( bp ); + patient.set_part_damage_bandaged( bp, + patient.get_part_hp_max( bp ) - patient.get_part_hp_cur( bp ) ); practice_amount += 2 * bandages_intensity; } if( disinfectant_power > 0 ) { @@ -3307,7 +3308,8 @@ int heal_actor::finish_using( player &healer, player &patient, item &it, hp_part patient.add_effect( effect_disinfected, 1_turns, bp_healed ); effect &e = patient.get_effect( effect_disinfected, bp_healed ); e.set_duration( e.get_int_dur_factor() * disinfectant_intensity ); - patient.damage_disinfected[healed] = patient.get_part_hp_max( bp ) - patient.get_part_hp_cur( bp ); + patient.set_part_damage_disinfected( bp, + patient.get_part_hp_max( bp ) - patient.get_part_hp_cur( bp ) ); practice_amount += 2 * disinfectant_intensity; } practice_amount = std::max( 9.0f, practice_amount ); diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 67c4aa268a39d..349bd27b0a9c8 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -563,10 +563,7 @@ void Character::load( const JsonObject &data ) data.read( "stim", stim ); data.read( "stamina", stamina ); - data.read( "damage_bandaged", damage_bandaged ); - data.read( "damage_disinfected", damage_disinfected ); data.read( "magic", magic ); - JsonArray parray; data.read( "underwater", underwater ); @@ -645,6 +642,30 @@ void Character::load( const JsonObject &data ) set_part_hp_cur( bodypart_id( "leg_r" ), hp_cur[5] ); set_part_hp_max( bodypart_id( "leg_r" ), hp_max[5] ); } + if( data.has_array( "damage_bandaged" ) ) { + set_anatomy( anatomy_id( "human_anatomy" ) ); + set_body(); + std::array damage_bandaged; + data.read( "damage_bandaged", damage_bandaged ); + set_part_damage_bandaged( bodypart_id( "head" ), damage_bandaged[0] ); + set_part_damage_bandaged( bodypart_id( "torso" ), damage_bandaged[1] ); + set_part_damage_bandaged( bodypart_id( "arm_l" ), damage_bandaged[2] ); + set_part_damage_bandaged( bodypart_id( "arm_r" ), damage_bandaged[3] ); + set_part_damage_bandaged( bodypart_id( "leg_l" ), damage_bandaged[4] ); + set_part_damage_bandaged( bodypart_id( "leg_r" ), damage_bandaged[5] ); + } + if( data.has_array( "damage_disinfected" ) ) { + set_anatomy( anatomy_id( "human_anatomy" ) ); + set_body(); + std::array damage_disinfected; + data.read( "damage_disinfected", damage_disinfected ); + set_part_damage_disinfected( bodypart_id( "head" ), damage_disinfected[0] ); + set_part_damage_disinfected( bodypart_id( "torso" ), damage_disinfected[1] ); + set_part_damage_disinfected( bodypart_id( "arm_l" ), damage_disinfected[2] ); + set_part_damage_disinfected( bodypart_id( "arm_r" ), damage_disinfected[3] ); + set_part_damage_disinfected( bodypart_id( "leg_l" ), damage_disinfected[4] ); + set_part_damage_disinfected( bodypart_id( "leg_r" ), damage_disinfected[5] ); + } inv.clear(); @@ -901,9 +922,6 @@ void player::store( JsonOut &json ) const json.member( "in_vehicle", in_vehicle ); json.member( "id", getID() ); - // potential incompatibility with future expansion - json.member( "damage_bandaged", damage_bandaged ); - json.member( "damage_disinfected", damage_disinfected ); // "Looks like I picked the wrong week to quit smoking." - Steve McCroskey json.member( "addictions", addictions ); json.member( "followers", follower_ids ); From 6fb0e08ce3c1a9030aefbd4c469fc7820e3c4461 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 29 Jun 2020 20:11:24 +0200 Subject: [PATCH 162/206] move healed_total --- src/character.cpp | 6 ------ src/character.h | 5 ----- src/savegame_json.cpp | 15 ++++++++++++--- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/character.cpp b/src/character.cpp index 72f8d0102edb6..0bf0e7bbcb4e4 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -437,7 +437,6 @@ Character::Character() : healthy_calories = 55000; stored_calories = healthy_calories; initialize_stomach_contents(); - healed_total = { { 0, 0, 0, 0, 0, 0 } }; name.clear(); custom_profession.clear(); @@ -8162,11 +8161,6 @@ tripoint Character::adjacent_tile() const return random_entry( ret, pos() ); // player position if no valid adjacent tiles } -void Character::healed_bp( int bp, int amount ) -{ - healed_total[bp] += amount; -} - void Character::set_fac_id( const std::string &my_fac_id ) { fac_id = faction_id( my_fac_id ); diff --git a/src/character.h b/src/character.h index 5773a32adc225..30c9c18db0bd8 100644 --- a/src/character.h +++ b/src/character.h @@ -1928,11 +1928,6 @@ class Character : public Creature, public visitable void shout( std::string msg = "", bool order = false ); /** Handles Character vomiting effects */ void vomit(); - // adds total healing to the bodypart. this is only a counter. - void healed_bp( int bp, int amount ); - - // the amount healed per bodypart per day - std::array healed_total; std::map mutation_category_level; diff --git a/src/savegame_json.cpp b/src/savegame_json.cpp index 349bd27b0a9c8..a7204704b4bf7 100644 --- a/src/savegame_json.cpp +++ b/src/savegame_json.cpp @@ -544,7 +544,6 @@ void Character::load( const JsonObject &data ) // health data.read( "healthy", healthy ); data.read( "healthy_mod", healthy_mod ); - data.read( "healed_24h", healed_total ); // status temp_cur.fill( 5000 ); @@ -666,7 +665,18 @@ void Character::load( const JsonObject &data ) set_part_damage_disinfected( bodypart_id( "leg_l" ), damage_disinfected[4] ); set_part_damage_disinfected( bodypart_id( "leg_r" ), damage_disinfected[5] ); } - + if( data.has_array( "healed_24h" ) ) { + set_anatomy( anatomy_id( "human_anatomy" ) ); + set_body(); + std::array healed_total; + data.read( "healed_24h", healed_total ); + set_part_healed_total( bodypart_id( "head" ), healed_total[0] ); + set_part_healed_total( bodypart_id( "torso" ), healed_total[1] ); + set_part_healed_total( bodypart_id( "arm_l" ), healed_total[2] ); + set_part_healed_total( bodypart_id( "arm_r" ), healed_total[3] ); + set_part_healed_total( bodypart_id( "leg_l" ), healed_total[4] ); + set_part_healed_total( bodypart_id( "leg_r" ), healed_total[5] ); + } inv.clear(); if( data.has_member( "inv" ) ) { @@ -792,7 +802,6 @@ void Character::store( JsonOut &json ) const // health json.member( "healthy", healthy ); json.member( "healthy_mod", healthy_mod ); - json.member( "healed_24h", healed_total ); // status json.member( "temp_cur", temp_cur ); From 11557e9c38ee5675023f9249fc56911bde6a4726 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 29 Jun 2020 20:29:58 +0200 Subject: [PATCH 163/206] some hp_part cleaning --- src/character.cpp | 3 +-- src/iexamine.cpp | 7 +++---- src/map_field.cpp | 3 +-- src/npc.cpp | 8 +++----- src/npctalk_funcs.cpp | 34 ++++++++++++++++------------------ src/panels.cpp | 3 +-- src/player.cpp | 3 +-- 7 files changed, 26 insertions(+), 35 deletions(-) diff --git a/src/character.cpp b/src/character.cpp index 0bf0e7bbcb4e4..7d6687197e6fa 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -8921,8 +8921,7 @@ void Character::hurtall( int dam, Creature *source, bool disturb /*= true*/ ) int Character::hitall( int dam, int vary, Creature *source ) { int damage_taken = 0; - for( int i = 0; i < num_hp_parts; i++ ) { - const bodypart_id bp = convert_bp( hp_to_bp( static_cast( i ) ) ).id(); + for( const bodypart_id &bp : get_all_body_parts( true ) ) { int ddam = vary ? dam * rng( 100 - vary, 100 ) / 100 : dam; int cut = 0; auto damage = damage_instance::physical( ddam, cut, 0 ); diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 45bf621677cd1..6b77ea88b19ac 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -4804,8 +4804,7 @@ void iexamine::autodoc( player &p, const tripoint &examp ) case BONESETTING: { int broken_limbs_count = 0; - for( int i = 0; i < num_hp_parts; i++ ) { - const bodypart_id &part = convert_bp( player::hp_to_bp( static_cast( i ) ) ).id(); + for( const bodypart_id &part : patient.get_all_body_parts( true ) ) { const bool broken = patient.is_limb_broken( part ); effect &existing_effect = patient.get_effect( effect_mending, part->token ); // Skip part if not broken or already healed 50% @@ -4822,9 +4821,9 @@ void iexamine::autodoc( player &p, const tripoint &examp ) // TODO: fail here if unable to perform the action, i.e. can't wear more, trait mismatch. if( !patient.worn_with_flag( flag_SPLINT, part ) ) { item splint; - if( i == hp_arm_l || i == hp_arm_r ) { + if( part == bodypart_id( "arm_l" ) || part == bodypart_id( "arm_r" ) ) { splint = item( "arm_splint", 0 ); - } else if( i == hp_leg_l || i == hp_leg_r ) { + } else if( part == bodypart_id( "leg_l" ) || part == bodypart_id( "leg_r" ) ) { splint = item( "leg_splint", 0 ); } item &equipped_splint = patient.i_add( splint ); diff --git a/src/map_field.cpp b/src/map_field.cpp index c0c7b22bc8085..2897aed7badb9 100644 --- a/src/map_field.cpp +++ b/src/map_field.cpp @@ -1585,8 +1585,7 @@ void map::player_in_field( player &u ) // Small universal damage based on intensity, only if not electroproofed. if( !u.is_elec_immune() ) { int total_damage = 0; - for( size_t i = 0; i < num_hp_parts; i++ ) { - const bodypart_id bp = convert_bp( player::hp_to_bp( static_cast( i ) ) ).id(); + for( const bodypart_id &bp : u.get_all_body_parts( true ) ) { const int dmg = rng( 1, cur.get_field_intensity() ); total_damage += u.deal_damage( nullptr, bp, damage_instance( DT_ELECTRIC, dmg ) ).total_damage(); } diff --git a/src/npc.cpp b/src/npc.cpp index 27758bf59d125..573f8291453f6 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -1054,11 +1054,9 @@ bool npc::wear_if_wanted( const item &it, std::string &reason ) // Splints ignore limits, but only when being equipped on a broken part // TODO: Drop splints when healed if( it.has_flag( "SPLINT" ) ) { - for( int i = 0; i < num_hp_parts; i++ ) { - hp_part hpp = static_cast( i ); - body_part bp = player::hp_to_bp( hpp ); - if( is_limb_broken( convert_bp( bp ) ) && !has_effect( effect_mending, bp ) && - it.covers( convert_bp( bp ).id() ) ) { + for( const bodypart_id &bp : get_all_body_parts( true ) ) { + if( is_limb_broken( bp ) && !has_effect( effect_mending, bp->token ) && + it.covers( bp ) ) { reason = _( "Thanks, I'll wear that now." ); return !!wear_item( it, false ); } diff --git a/src/npctalk_funcs.cpp b/src/npctalk_funcs.cpp index 4b4a773920587..26433c91dfe81 100644 --- a/src/npctalk_funcs.cpp +++ b/src/npctalk_funcs.cpp @@ -554,17 +554,16 @@ void talk_function::give_equipment( npc &p ) void talk_function::give_aid( npc &p ) { p.add_effect( effect_currently_busy, 30_minutes ); - for( int i = 0; i < num_hp_parts; i++ ) { - const body_part bp_healed = player::hp_to_bp( static_cast( i ) ); - g->u.heal( convert_bp( bp_healed ), 5 * rng( 2, 5 ) ); - if( g->u.has_effect( effect_bite, bp_healed ) ) { - g->u.remove_effect( effect_bite, bp_healed ); + for( const bodypart_id &bp : g->u.get_all_body_parts( true ) ) { + g->u.heal( bp, 5 * rng( 2, 5 ) ); + if( g->u.has_effect( effect_bite, bp->token ) ) { + g->u.remove_effect( effect_bite, bp->token ); } - if( g->u.has_effect( effect_bleed, bp_healed ) ) { - g->u.remove_effect( effect_bleed, bp_healed ); + if( g->u.has_effect( effect_bleed, bp->token ) ) { + g->u.remove_effect( effect_bleed, bp->token ); } - if( g->u.has_effect( effect_infected, bp_healed ) ) { - g->u.remove_effect( effect_infected, bp_healed ); + if( g->u.has_effect( effect_infected, bp->token ) ) { + g->u.remove_effect( effect_infected, bp->token ); } } const int moves = to_moves( 100_minutes ); @@ -578,17 +577,16 @@ void talk_function::give_all_aid( npc &p ) give_aid( p ); for( npc &guy : g->all_npcs() ) { if( guy.is_walking_with() && rl_dist( guy.pos(), g->u.pos() ) < PICKUP_RANGE ) { - for( int i = 0; i < num_hp_parts; i++ ) { - const body_part bp_healed = player::hp_to_bp( static_cast( i ) ); - guy.heal( convert_bp( bp_healed ), 5 * rng( 2, 5 ) ); - if( guy.has_effect( effect_bite, bp_healed ) ) { - guy.remove_effect( effect_bite, bp_healed ); + for( const bodypart_id &bp : guy.get_all_body_parts( true ) ) { + guy.heal( bp, 5 * rng( 2, 5 ) ); + if( guy.has_effect( effect_bite, bp->token ) ) { + guy.remove_effect( effect_bite, bp->token ); } - if( guy.has_effect( effect_bleed, bp_healed ) ) { - guy.remove_effect( effect_bleed, bp_healed ); + if( guy.has_effect( effect_bleed, bp->token ) ) { + guy.remove_effect( effect_bleed, bp->token ); } - if( guy.has_effect( effect_infected, bp_healed ) ) { - guy.remove_effect( effect_infected, bp_healed ); + if( guy.has_effect( effect_infected, bp->token ) ) { + guy.remove_effect( effect_infected, bp->token ); } } } diff --git a/src/panels.cpp b/src/panels.cpp index 459f366f047ec..2764f9cd11e73 100644 --- a/src/panels.cpp +++ b/src/panels.cpp @@ -874,8 +874,7 @@ static void draw_limb_health( avatar &u, const catacurses::window &w, int limb_i } }; const bodypart_id bp = convert_bp( avatar::hp_to_bp( static_cast( limb_index ) ) ).id(); - if( u.is_limb_broken( bp.id() ) && ( limb_index >= hp_arm_l && - limb_index <= hp_leg_r ) ) { + if( u.is_limb_broken( bp ) && ( limb_index >= hp_arm_l && limb_index <= hp_leg_r ) ) { //Limb is broken std::string limb = "~~%~~"; nc_color color = c_light_red; diff --git a/src/player.cpp b/src/player.cpp index 0cd7bc9e53cfb..6695fb38616d5 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -1238,8 +1238,7 @@ int player::impact( const int force, const tripoint &p ) int total_dealt = 0; if( mod * effective_force >= 5 ) { - for( int i = 0; i < num_hp_parts; i++ ) { - const bodypart_id bp = convert_bp( hp_to_bp( static_cast( i ) ) ).id(); + for( const bodypart_id &bp : get_all_body_parts( true ) ) { const int bash = effective_force * rng( 60, 100 ) / 100; damage_instance di; di.add_damage( DT_BASH, bash, 0, armor_eff, mod ); From 9d5ccabeb17830632259930229bdff761f2012e3 Mon Sep 17 00:00:00 2001 From: Ununsept117 <63505222+Ununsept117@users.noreply.github.com> Date: Mon, 29 Jun 2020 21:31:27 +0200 Subject: [PATCH 164/206] Make clean water batch time saving more realistic Change batch time savings when crafting clean water from 80% at >4 units to 20% at >1 unit --- data/json/recipes/recipe_food.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/recipes/recipe_food.json b/data/json/recipes/recipe_food.json index 5ca27e103297e..d565e5812bad4 100644 --- a/data/json/recipes/recipe_food.json +++ b/data/json/recipes/recipe_food.json @@ -48,7 +48,7 @@ "skill_used": "cooking", "time": "5 m", "autolearn": true, - "batch_time_factors": [ 80, 4 ], + "batch_time_factors": [ 20, 1 ], "qualities": [ { "id": "BOIL", "level": 1 } ], "tools": [ [ [ "water_boiling_heat", 3, "LIST" ] ] ], "components": [ [ [ "water", 1 ] ] ] From 487d44d2a36af66ba295bef5d00a2e89df52c963 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 29 Jun 2020 22:32:15 +0200 Subject: [PATCH 165/206] test fix --- tests/creature_effect_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/creature_effect_test.cpp b/tests/creature_effect_test.cpp index 02b2e893f5fc4..714f405f7efb4 100644 --- a/tests/creature_effect_test.cpp +++ b/tests/creature_effect_test.cpp @@ -33,6 +33,7 @@ TEST_CASE( "character add_effect", "[creature][character][effect][add]" ) { avatar dummy; + dummy.set_body(); const efftype_id effect_bleed( "bleed" ); const efftype_id effect_grabbed( "grabbed" ); const body_part left_arm = bodypart_id( "arm_l" )->token; From 123ffb0d4f3dadb07b057d8ff34e4285f7ef02e7 Mon Sep 17 00:00:00 2001 From: meladath Date: Mon, 29 Jun 2020 21:54:36 +0100 Subject: [PATCH 166/206] Update longest_side to use feret diameter Thanks to LaVeyanFiend for pointing it out. Co-authored-by: LaVeyanFiend <51099123+LaVeyanFiend@users.noreply.github.com> --- data/json/items/gun/500.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/gun/500.json b/data/json/items/gun/500.json index 30235ec66f3e6..b8c13a7c5c5aa 100644 --- a/data/json/items/gun/500.json +++ b/data/json/items/gun/500.json @@ -49,7 +49,7 @@ "price_postapoc": 3500, "to_hit": -2, "bashing": 12, - "longest_side": "381 mm", + "longest_side": "407 mm", "material": [ "steel", "plastic" ], "symbol": "(", "color": "light_gray", From bdb04de0b892fc32fa87af678246292d9f93f18c Mon Sep 17 00:00:00 2001 From: Meladath Date: Mon, 29 Jun 2020 22:19:41 +0100 Subject: [PATCH 167/206] Increase volume and max size due to some more gun sizes XL holster can now contain exactly 1.5x the volume/length of the standard holster --- data/json/items/armor/holster.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/json/items/armor/holster.json b/data/json/items/armor/holster.json index a364dfdfa97dc..842700fbbd2bb 100644 --- a/data/json/items/armor/holster.json +++ b/data/json/items/armor/holster.json @@ -115,7 +115,7 @@ "pocket_type": "CONTAINER", "holster": true, "min_item_volume": "300 ml", - "max_contains_volume": "800 ml", + "max_contains_volume": "1000 ml", "max_contains_weight": "2 kg", "max_item_length": "30 cm", "moves": 50 @@ -227,9 +227,9 @@ "pocket_type": "CONTAINER", "holster": true, "min_item_volume": "750 ml", - "max_contains_volume": "1250 ml", + "max_contains_volume": "1500 ml", "max_contains_weight": "5 kg", - "max_item_length": "40 cm", + "max_item_length": "45 cm", "moves": 50 } ], From 487c6552371a10a927f32093d4e929b5da7111ae Mon Sep 17 00:00:00 2001 From: Meladath Date: Mon, 29 Jun 2020 22:21:40 +0100 Subject: [PATCH 168/206] Correct volume for S&W 500 --- data/json/items/gun/500.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/gun/500.json b/data/json/items/gun/500.json index b8c13a7c5c5aa..f73571776caa8 100644 --- a/data/json/items/gun/500.json +++ b/data/json/items/gun/500.json @@ -44,7 +44,7 @@ "name": { "str_sp": "S&W 500" }, "description": "The 5-shot Smith and Wesson 500 revolver fires the comparably-named .500 S&W Magnum. It's an impressive weapon.", "weight": "1960 g", - "volume": "750 ml", + "volume": "1307 ml", "price": 90000, "price_postapoc": 3500, "to_hit": -2, From 2831caa86b440d451b3b37b0bfc55ec3f9af8fb0 Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Sun, 28 Jun 2020 20:37:45 -0600 Subject: [PATCH 169/206] Give magazine_well or rigidity to battery tools For most tools that are substantially larger than their compatible batteries, make their battery compartment (MAGAZINE_WELL pocket) "rigid" so the tool does not increase in size when a battery is inserted. For medium-sized shop tools that typically have a protruding battery pack, such as the circular saw, cordless drill, and angle grinder, give a "magazine_well" volume large enough to hold 20-30% of the battery. For very large tools like the extractor and vacuum oven, since they have a range of compatible batteries up to 50 L in volume, I granted them a "magazine_well" substantial enough for most smaller batteries, while larger storage batteries will protrude and add to item volume. --- data/json/items/melee/bludgeons.json | 2 ++ data/json/items/melee/swords_and_blades.json | 5 +++++ data/json/items/tool/cooking.json | 11 +++++++++++ data/json/items/tool/electronics.json | 12 ++++++++++++ data/json/items/tool/fire.json | 1 + data/json/items/tool/lighting.json | 4 ++++ data/json/items/tool/misc.json | 4 ++++ data/json/items/tool/radio_tools.json | 5 +++++ data/json/items/tool/science.json | 19 +++++++++++++++++++ data/json/items/tool/smoking.json | 1 + data/json/items/tool/toileteries.json | 1 + data/json/items/tool/woodworking.json | 2 ++ data/json/items/tool/workshop.json | 10 ++++++++++ 13 files changed, 77 insertions(+) diff --git a/data/json/items/melee/bludgeons.json b/data/json/items/melee/bludgeons.json index af6379b698de3..239879519b5f8 100644 --- a/data/json/items/melee/bludgeons.json +++ b/data/json/items/melee/bludgeons.json @@ -1025,6 +1025,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -1056,6 +1057,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/melee/swords_and_blades.json b/data/json/items/melee/swords_and_blades.json index 5ac895482fff9..0993ea0243b10 100644 --- a/data/json/items/melee/swords_and_blades.json +++ b/data/json/items/melee/swords_and_blades.json @@ -1148,6 +1148,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -1171,6 +1172,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -1194,6 +1196,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -1657,6 +1660,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "500 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "heavy_battery_cell", "heavy_plus_battery_cell", "heavy_atomic_battery_cell", "heavy_disposable_cell" ] @@ -1782,6 +1786,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "200 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] diff --git a/data/json/items/tool/cooking.json b/data/json/items/tool/cooking.json index 8e627371380a3..a3aa05e6f0818 100644 --- a/data/json/items/tool/cooking.json +++ b/data/json/items/tool/cooking.json @@ -86,6 +86,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -242,6 +243,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -268,6 +270,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -367,6 +370,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -470,6 +474,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -565,6 +570,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -594,6 +600,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -681,6 +688,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -724,6 +732,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -988,6 +997,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -1033,6 +1043,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/tool/electronics.json b/data/json/items/tool/electronics.json index ea761e0df0e92..e687cdd3b0fde 100644 --- a/data/json/items/tool/electronics.json +++ b/data/json/items/tool/electronics.json @@ -36,6 +36,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -71,6 +72,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -112,6 +114,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -191,6 +194,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -225,6 +229,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -259,6 +264,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -304,6 +310,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "100 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ @@ -350,6 +357,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -385,6 +393,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -432,6 +441,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -475,6 +485,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -591,6 +602,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/tool/fire.json b/data/json/items/tool/fire.json index ceee5a07ea3b2..142937578c0f3 100644 --- a/data/json/items/tool/fire.json +++ b/data/json/items/tool/fire.json @@ -18,6 +18,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/tool/lighting.json b/data/json/items/tool/lighting.json index 2213ecebe391b..1897a087f53c4 100644 --- a/data/json/items/tool/lighting.json +++ b/data/json/items/tool/lighting.json @@ -165,6 +165,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -477,6 +478,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -600,6 +602,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -646,6 +649,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/tool/misc.json b/data/json/items/tool/misc.json index 6a6e614a7bdbe..dc4ce3b901890 100644 --- a/data/json/items/tool/misc.json +++ b/data/json/items/tool/misc.json @@ -113,6 +113,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -149,6 +150,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -388,6 +390,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "2 L", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "heavy_battery_cell", "heavy_plus_battery_cell", "heavy_atomic_battery_cell", "heavy_disposable_cell" ] @@ -613,6 +616,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "rigid": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] diff --git a/data/json/items/tool/radio_tools.json b/data/json/items/tool/radio_tools.json index c359eb4f8b24c..d5e8de67d7b43 100644 --- a/data/json/items/tool/radio_tools.json +++ b/data/json/items/tool/radio_tools.json @@ -30,6 +30,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -60,6 +61,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -113,6 +115,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -158,6 +161,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -193,6 +197,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/tool/science.json b/data/json/items/tool/science.json index 1d3d2736c6366..7324786c49992 100644 --- a/data/json/items/tool/science.json +++ b/data/json/items/tool/science.json @@ -57,6 +57,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -99,6 +100,7 @@ "holster": true, "max_contains_volume": "25 L", "max_contains_weight": "200 kg", + "//": "this tool is small and has no actual battery compartment, but can connect to large batteries.", "item_restriction": [ "battery_car", "battery_motorbike", "small_storage_battery", "medium_storage_battery", "storage_battery" ] } ] @@ -124,6 +126,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "5 L", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ "large_storage_battery", "storage_battery" ] @@ -159,6 +162,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "5 L", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ "large_storage_battery", "storage_battery" ] @@ -197,6 +201,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "5 L", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ "large_storage_battery", "storage_battery" ] @@ -224,6 +229,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "5 L", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ "large_storage_battery", "storage_battery" ] @@ -262,6 +268,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "5 L", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ @@ -313,6 +320,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "5 L", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ @@ -363,6 +371,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "5 L", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ @@ -414,6 +423,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "5 L", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ @@ -511,6 +521,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "500 ml", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ @@ -562,6 +573,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "500 ml", "max_contains_volume": "50 L", "max_contains_weight": "400 kg", "item_restriction": [ @@ -790,6 +802,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -825,6 +838,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -867,6 +881,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -909,6 +924,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -943,6 +959,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -977,6 +994,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -1198,6 +1216,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/tool/smoking.json b/data/json/items/tool/smoking.json index 30a563987eb74..c2baca0d5177b 100644 --- a/data/json/items/tool/smoking.json +++ b/data/json/items/tool/smoking.json @@ -20,6 +20,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/tool/toileteries.json b/data/json/items/tool/toileteries.json index b341a20fc03cb..d6a91037f1cf2 100644 --- a/data/json/items/tool/toileteries.json +++ b/data/json/items/tool/toileteries.json @@ -52,6 +52,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", diff --git a/data/json/items/tool/woodworking.json b/data/json/items/tool/woodworking.json index 3d49e7dea2d4a..a20dabbe0f7c8 100644 --- a/data/json/items/tool/woodworking.json +++ b/data/json/items/tool/woodworking.json @@ -79,6 +79,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "200 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] @@ -163,6 +164,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "200 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] diff --git a/data/json/items/tool/workshop.json b/data/json/items/tool/workshop.json index e9096786566fa..ed256a47020e6 100644 --- a/data/json/items/tool/workshop.json +++ b/data/json/items/tool/workshop.json @@ -80,6 +80,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "200 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] @@ -201,6 +202,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -229,6 +231,7 @@ { "pocket_type": "MAGAZINE_WELL", "holster": true, + "magazine_well": "200 ml", "max_contains_volume": "20 L", "max_contains_weight": "20 kg", "item_restriction": [ "medium_battery_cell", "medium_plus_battery_cell", "medium_atomic_battery_cell", "medium_disposable_cell" ] @@ -433,6 +436,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -473,6 +477,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -711,6 +716,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -814,6 +820,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -852,6 +859,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -1010,6 +1018,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", @@ -1049,6 +1058,7 @@ "pocket_data": [ { "pocket_type": "MAGAZINE_WELL", + "rigid": true, "holster": true, "max_contains_volume": "20 L", "max_contains_weight": "20 kg", From 07e837a53c91604f9a7248701241814ef9b68426 Mon Sep 17 00:00:00 2001 From: i-am-erk <45136638+I-am-Erk@users.noreply.github.com> Date: Mon, 29 Jun 2020 22:37:21 -0700 Subject: [PATCH 170/206] restore npc hints and faction camps to help file --- data/json/npcs/TALK_ALLY_TUTORIAL.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/data/json/npcs/TALK_ALLY_TUTORIAL.json b/data/json/npcs/TALK_ALLY_TUTORIAL.json index 6e34b80f5725d..cabdf3cb49029 100644 --- a/data/json/npcs/TALK_ALLY_TUTORIAL.json +++ b/data/json/npcs/TALK_ALLY_TUTORIAL.json @@ -6,6 +6,25 @@ "responses": [ { "text": "Forget I asked.", "topic": "TALK_FRIEND" }, { "text": "Skip it, let's get going.", "topic": "TALK_DONE" }, + { + "text": "Any hints about the world we now live in?", + "trial": { + "type": "CONDITION", + "condition": { + "or": [ + { "npc_need": "thirst", "amount": 80 }, + { "npc_need": "hunger", "amount": 160 }, + { "npc_need": "fatigue", "level": "TIRED" }, + { "npc_has_effect": "asked_to_hint" }, + "u_driving", + "npc_driving" + ] + } + }, + "success": { "topic": "TALK_SHELTER_DENY_ADVICE" }, + "failure": { "topic": "TALK_SHELTER_ADVICE", "effect": { "npc_add_effect": "asked_to_hint", "duration": 300 } } + }, + { "text": "Let's talk about faction camps.", "topic": "TALK_CAMP_GENERAL" }, { "text": "What do you mean, \"mostly\" willing to follow my lead?", "topic": "TALK_ALLY_TUTORIAL_MUTINY" }, { "text": "What's that about giving instructions?", "topic": "TALK_ALLY_TUTORIAL_TALK" }, { "text": "We can talk with radios?", "topic": "TALK_ALLY_TUTORIAL_RADIO" }, From d27578205f32815dce9c64813b5b0d6b4a4f0885 Mon Sep 17 00:00:00 2001 From: curstwist <39442864+curstwist@users.noreply.github.com> Date: Tue, 30 Jun 2020 03:05:22 -0400 Subject: [PATCH 171/206] Create Guide for intermediate mapgen.md (#41679) --- .../Guide for intermediate mapgen.md | 616 ++++++++++++++++++ 1 file changed, 616 insertions(+) create mode 100644 doc/JSON Mapping Guides/Guide for intermediate mapgen.md diff --git a/doc/JSON Mapping Guides/Guide for intermediate mapgen.md b/doc/JSON Mapping Guides/Guide for intermediate mapgen.md new file mode 100644 index 0000000000000..261496dc03af8 --- /dev/null +++ b/doc/JSON Mapping Guides/Guide for intermediate mapgen.md @@ -0,0 +1,616 @@ +**Intermediate Mapgen Guide:** + +This guide assumes you are comfortable with basic mapgen elements and adding regular mapgen. It is meant as a supplement to the mapgen.md and overmap.md documents. + +**This guide will cover:** + +* When to use nested mapgen vs. regular mapgen variants. +* How to make and spawn a nested map. +* Some nested map possibilities. +* NPC spawning. +* Leveraging existing nested maps for modders. +* Basic update_mapgen using traps. +* Merged maps for large buildings. + + +**Files you’ll use:** +* a new or existing file to hold your nested map entries (there is a sub folder in mapgen for nested map files). +* the mapgen file you want your nests to spawn in +* palette (optional) +* the files used in the beginner's tutorial (a mapgen file, overmap_terrain, and specials.json or multitile_city_buildings.json/regional_map_settings.json.) + +**Nested maps vs. variant maps:** + +Variant maps are mapgen files that completely replace another map variant by using the same `om_terrain name` and applying a `weight` entry to each variant for spawning in relation to each other. + +Nested maps are a new layer of map applied to an existing mapgen file. They can overwrite existing terrain, furniture, add spawns for loot, monsters, vehicles, etc. They can contain anything that a regular mapgen contains within the object entry. Nested maps are spawned by adding an entry into the main mapgen’s object entry. They can be any size from a single tile to the entire 24x24 overmap terrain. + +Both approaches offer advantages and disadvantages to adding variety to maps. + +Variants are good for large structural changes or complete overhauls. + +* For example, I may do a portion of a farm with a barn and another with a set of farm plots. +* If I want clearly different variants for an entire map, like the same house as empty, abandoned, and furnished. +* Before we added json roofs (and other linked z levels) to our mapgen, most buildings utilized variants for spawning, most have now been renamed but some variants still exist, especially in older specials. + +Nested maps are good for adding more targeted variety and randomness to maps. In addition to what the variant offers, nested maps can let you do things like: + +* rearrange the furniture in a room, or in every room on a case by case basis. +* add smaller targeted thematic content like set pieces, additional monsters, hidden rooms, rare spawns. +* Have different sets of loot and room themes that randomly spawn across multiple buildings. + + +**Update_mapgen:** + +Update mapgen is triggered during game play instead of being initialized during worldgen. I’ll cover some of the update_mapgen uses in this document but it deserves its own guide. + + * Traps can trigger mapgen changes. + * Allows missions to trigger mapgen changes. + * Used by the faction camp building system for blueprints along with nested maps. + * Used by map_extras. + +update mapgen maps are similar to nested maps but are applied to an existing map, not to the mapgen file. Like nested maps, they can overwrite existing terrain, furniture, add spawns for loot, monsters, vehicles, etc. They can contain anything that a regular mapgen contains within the object entry. They can be any size from a single tile to the entire 24x24 overmap terrain, and can even included nested mapgen objects. + +**Merged Maps** + +Merged maps are when you combine the mapgen entries for several OMTs into a single mapgen entry. The `rows` are combined for a group the maps. This is usually used for improved readability for the json and a more compact file size. They are generally handled the same as a single OMT mapgen, with a few exceptions included in this document. Like any mapgen option, there are tradeoffs, a notable limitation is the single fill_ter entry for multiple OMTs. + +**Creating Nested Maps:** + +You’ll want to make some choices before adding nested maps. + +* Their purpose, where are they spawning, multiple locations? +* If it is within a larger building, will you include doors/walls? +* What size map do you need to make. + +A nested map gives you the ability to overwrite or fill in a portion of an existing mapgen. The contents of the nested map entry can contain any entry within mapgen objects (excepting fill_ter). This includes adding nested maps inside your nested map for extra variability. + +Example json entry for the nested map: + +``` + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "room_9x9_recroom_E", + "//": "an entertainment area for various recreations", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "|||||||||", + "|HHH...=|", + "|Hl....x|", + "|%.....=|", + "|.A.A..&|", + "|JJ5JJ +", + "| |", + "|mVJ14 T|", + "|||||||||" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + ".": "t_carpet_green", + "H": "t_carpet_green", + "l": "t_carpet_green", + "A": "t_carpet_green", + "=": "t_carpet_green", + "x": "t_carpet_green", + "%": "t_carpet_green", + "&": "t_carpet_green" + }, + "furniture": { "%": "f_arcade_machine", "=": "f_speaker_cabinet", "&": "f_pinball_machine" }, + "place_loot": [ { "item": "stereo", "x": 7, "y": 2, "chance": 100 }, { "item": "laptop", "x": 5, "y": 5, "chance": 60 } ] + } + } + ``` + +This should feel pretty familiar since it looks like the `object` entry in mapgen and shares the same `type`. +Note the ID is now `nested_mapgen_id` and the object uses a new entry `mapgensize` + +* `nested_mapgen_id`: Your ID should provide useful information about the nest. Multiple nests can share the same ID. + +* `weight`: This value is new and most nested maps don't have it yet. It allows you to weight the spawns of nests that share the same `nested_mapgen_id` (aka variants of nests). + +* `mapgensize`: Nested mapgen can be any size from 1x1 to 24x24 but it must be square. You don't have to use every row or column of the `rows` entry. Any unused portions will fall back to the main mapgen. + +* `terrain` & `furniture`: Without `fill_ter`, you need to define every floor terrain under furniture. If you don't it will fall back to the main mapgen's `fill_ter`. In the above example, there's a green carpet in 1/2 the map and the rest picks up the floor of the mapgen (indoor concrete). If you need to overwrite existing furniture in the main mapgen you can use a combination of `t_null` and `f_null` to override preexisting mapgen. + +_Tips:_ +If you're doing interior spaces, pay attention to door placement and access pathways. + +* For walled nests, I generally keep the doors in the center of the walls. +* For open floor plan nests, I try to preserve the corner spaces for doors in the regular mapgen (if I can design the mapgen with the nests). + +example: note the corner tiles are all empty. +``` + "rows": [ + " CR ", + "O ", + " EE ", + " EE " + ], +``` + +example room outline with possible door placements. The `+` denotes any valid door placement for the above nest. This approach gives you the maximum number of possibilities for fitting this nest into enclosed rooms without blocking the doorway. I toss some indoor plants or other small furniture into the unused corners in the main mapgen as well, to fill out the rooms. + +``` + "rows": [ + "|+||+|", + "+ CR +", + "|O |", + "| EE |", + "+ EE +", + "|+||+|" + ], +``` + +Fitting nests into existing foundations/building outlines can be a bit of a puzzle, especially as you add variations that share the same ID or are used over many maps. So having your doors in predictable places in all your nests will aid in their re-use for future maps. + +We use a naming convention that includes the nested map size and some indication of its orientation or we add a comment with extra context in the json entry. + +Some ID's: +* room_9x9_recroom_N +* room_9x9_recroom_S +* 7x7_band_practice_open + + +by using room and a compass direction, it quickly identifies the nest as having walls/door and the door's orientation. The band practice one is an open space, no walls included. Including the map size will make searching, debug spawning and re-using nests easier as well. + + +**Debug testing:** + +So many nests, so hard to find ones to use! + +We've recently gotten the ability to spawn nested maps via debug in game and this is a huge help for making sure nests fit, don't conflict with elements in the existing maps and are oriented well without adjusting spawn weights to force the nest to spawn naturally. + +This is also a good way to "shop around" for existing nests to re-use in your maps. + +To debug spawn a nested map in game: +* Open debug menu (you will need to add a key bind) +* Choose `map` [m] +* Choose `spawn nested map` [n] +* Search list by using [/] +* Use your selector to place the nested map. The indicator is 0,0 coordinate of the nest. + +You'll quickly see why it's good to use a coherent name format. + +**Mini nests:** + +Nests can be as small as one tile which is very useful if you want special or rare spawns for items, monsters, vehicles, NPCs or other elements. + +An example of a spawn for a particular loot group: +These nests were used in a larger nest of a basement study. I didn't want the study to offer all the magiclysm class books at once. I made nests for each spell class item_group: + +3 1x1 nested maps that only include loot placement. They feed into a larger nest. + +``` + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "animist_loot_spawn", + "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "animist_items", "x": 0, "y": 0, "chance": 70 } ] } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "magus_loot_spawn", + "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "magus_items", "x": 0, "y": 0, "chance": 70 } ] } + }, + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "stormshaper_loot_spawn", + "object": { "mapgensize": [ 1, 1 ], "place_loot": [ { "group": "stormshaper_items", "x": 0, "y": 0, "chance": 70 } ] } + } + ``` + +**NPC spawning:** + +If you use `place_npc` on the main mapgen, the NPC will spawn 100% of the time. NPC's like the refugee center ones get placed like this. + +However, many NPCs should be closer to random encounters. The below example creates a nest that spawns an NPC (and only the NPC): + +``` + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "SEER_Brigitte_LaCroix_spawn", + "object": { "mapgensize": [ 1, 1 ], "place_npcs": [ { "class": "SEER_Brigitte_LaCroix", "x": 0, "y": 0 } ] } + } +``` + +You can also customize the surroundings in which the NPC spawns. For the Chef NPC that spawns in one restaurant, they get their survivor themed setting included: +Note the use of `t_null` in the majority of the map. A lot of the map is unused and relies on the main mapgen. It rearranges furniture to blockade the entrance and adds a little survivor's den flavor. +``` + { + "type": "mapgen", + "method": "json", + "nested_mapgen_id": "chef_s_restaurant", + "object": { + "mapgensize": [ 13, 13 ], + "rows": [ + "mt_________#t", + "____________r", + "__________ffr", + "___________W_", + "_____________", + "_____________", + "_____________", + "_____________", + "_____________", + "_____________", + "_____________", + "_____________", + "_____________" + ], + "terrain": { "_": "t_null", "-": "t_wall", "W": "t_window_boarded" }, + "furniture": { "r": "f_rack", "f": "f_fridge", "t": "f_table", "#": "f_counter", "m": "f_makeshift_bed" }, + "place_npcs": [ { "class": "survivor_chef", "x": 5, "y": 1 } ], + "place_loot": [ + { "group": "produce", "x": [ 10, 11 ], "y": 2, "chance": 70, "repeat": [ 2, 3 ] }, + { "group": "groce_meat", "x": [ 10, 11 ], "y": 2, "chance": 70, "repeat": [ 2, 3 ] }, + { "group": "groce_dairyegg", "x": [ 10, 11 ], "y": 2, "chance": 70, "repeat": [ 2, 3 ] }, + { "group": "bar_food", "x": [ 10, 11 ], "y": 2, "chance": 70, "repeat": [ 2, 3 ] }, + { "group": "bar_fridge", "x": [ 10, 11 ], "y": 2, "chance": 70, "repeat": [ 2, 3 ] }, + { "group": "jackets", "x": 0, "y": 0, "chance": 70, "repeat": [ 2, 3 ] }, + { "group": "alcohol_bottled_canned", "x": 1, "y": 0, "chance": 80 }, + { "group": "baked_goods", "x": [ 2, 4 ], "y": 2, "chance": 50, "repeat": [ 2, 3 ] }, + { "group": "groce_bread", "x": [ 2, 4 ], "y": 2, "chance": 50, "repeat": [ 2, 3 ] }, + { "group": "cannedfood", "x": [ 5, 6 ], "y": 0, "chance": 50, "repeat": [ 2, 3 ] }, + { "group": "cannedfood", "x": [ 9, 11 ], "y": 0, "chance": 50, "repeat": [ 2, 3 ] } + ] + } + } +``` + + **Spawning the nested maps** + + You can spawn nests in the usual two methods, using explicit symbol placement or x,y coordinates. I've encountered rare instances where one style works and the other doesn't but haven't pinned down the cause yet. + + + **x,y coordinate placement:** + +This adds some nice variability if you want the nest's spawn location to shift a bit around the map. I used this extensively on roofs since they are open spaces and I wanted to decrease how static they would feel otherwise. + + + In the main mapgen's `object` you enter the following entry: +``` + "place_nested": [ + { + "chunks": [ [ "null", 30 ], [ "roof_6x6_utility", 30 ], [ "roof_4x4_utility_1", 40 ] ], + "x": [ 5, 14 ], + "y": [ 14, 16 ] + } + ] +``` + +A NPC example: + +``` +"place_nested": [ { "chunks": [ [ "SEER_Brigitte_LaCroix_spawn", 20 ], [ "null", 80 ] ], "x": 18, "y": 6 } ] +``` + +The `chunks` are the `nested_mapgen_id` of the nests and each includes their spawn weight in relation to each other. Adding a `null` entry allows for the nest to have a chance to not spawn anything. `Null` also ensures your NPC related nest spawns as a chance instead of being guaranteed. + +**Explicit symbol placement:** + +In the main mapgen's `object` you add the following entry: +Wherever on the main mapgen's `rows` I place a `1` the first set of chunks will spawn. The other set will spawn wherever I place a `2`. The symbol should be placed wherever you want the 0,0 coordinate of your nested map placed. + +``` +"nested": { + "1": { + "chunks": [ [ "null", 60 ], [ "room_10x10_woodworker_E", 30 ], [ "room_10x10_guns_E", 10 ], [ "room_10x10_guns_N", 10 ] ] + }, + "2": { + "chunks": [ + [ "null", 50 ], + [ "room_6x6_brewer_N", 10 ], + [ "room_6x6_junk", 30 ], + [ "room_6x6_office_N", 30 ], + [ "6x6_sewing_open", 20 ], + [ "6x6_electronics_open", 10 ], + [ "room_6x6_brewer_W", 10 ], + [ "room_6x6_junk_W", 30 ], + [ "room_6x6_office_W", 30 ] + ] + } + } +``` + +The main mapgen `rows` with symbols: +``` + "rows": [ + " ", + " ", + " ", + " ", + " |||||||||||||| ", + " |.g...JJJWZ.U| ", + " |F..........<| ", + " |............| ", + " |............| ", + " |......2.....| ", + " |||||||............| ", + " |1.................| ", + " |..................| ", + " |..................| ", + " |..................| ", + " |..........||||||||| ", + " |..........| ", + " |..........| ", + " |..........| ", + " |..........| ", + " |..........| ", + " |||||||||||| ", + " ", + " " + ], +``` + +**Nested maps and z levels:** + +Currently, nested maps do not support z level linking, so any nested map you make will rely on the main mapgen's roof or attempt to generate the c++ roofs. This works with varying degrees of success. Mostly I find it annoying when I can't put a glass roof on greenhouses. + +**Leveraging existing nested maps for modders.** + +As the nested maps used in vanilla increase, modders can make use of these existing entries to incorporate their mod maps into existing buildings. This should greatly expand the mod's ability to add its content into vanilla maps. By using the same `nested mapgen id` and assigning a `weight` to both your new nest and existing nests (as needed). + +I recommend the modder take a look through existing maps and see if there is one that fits the same overall size, orientation, and spawning rarity that they would like their modded nest to have. +You can search for the nested mapgen ids in the github to make sure its representation meets your needs. + + +**Update_mapgen:** + +As mentioned before, Update_mapgen is applied to existing maps due to events that occur during game play. + +Update mapgen will be covered more in advanced guides that address its uses in faction bases and NPC missions. + +For this guide, the most likely use will be for trap triggered update_mapgen. This is a very new feature and currently is used in the microlab and the magiclysm mod's magic basement. + +Since it is still a new feature, it hasn't been expanded upon much. Currently the following limitation applies: +* Traps can only be triggered by a Player or NPC moving on to the trap tile. + +We are going to use the simpler implementation found in the Magiclysm basement over the micro_lab but I'd recommend looking at the micro lab's multi-trap system as well. + +You will need a trap entry (or use an existing one) + +Trap example: +``` + { + "type": "trap", + "id": "tr_magic_door", + "name": "magic door", + "color": "brown", + "symbol": "+", + "visibility": 99, + "avoidance": 99, + "difficulty": 99, + "action": "map_regen", + "map_regen": "magic_door_appear", + "benign": true + } + ``` + + All the trap specific entries can be learned about in other documentation. What concerns us here are the `action` and `map_regen` entries. We want this trap to trigger a `map_regen` action and the `map_regen` references our `update_mapgen_id`. + + update_magen similarities to nested maps: + + * it can target a smaller map chunk. + * it uses the `object` data. + + differences from nested maps: + + * Coordinates used refer to the main mapgen it is updating. + + update_mapgen sample: + + ``` + { + "type": "mapgen", + "update_mapgen_id": "magic_door_appear", + "method": "json", + "object": { + "place_terrain": [ { "ter": "t_carpet_green", "x": 12, "y": 6 } ], + "place_furniture": [ { "furn": "f_beaded_door", "x": 12, "y": 6 } ] + } + } + ``` +In this example, instead of making rows and assigning symbols, I used a condensed alternative with `place_terrain` and `place_furniture`. The x,y coordinates refer to the main mapgen this is altering. This could have used the typical rows coding we normally use in mapgen as well. + +The main mapgen and spawning your trap: + +``` + { + "type": "mapgen", + "method": "json", + "om_terrain": [ "magic_basement" ], + "weight": 100, + "object": { + "fill_ter": "t_carpet_green", + "rows": [ + " ", + " ||||||||||||||| ", + " |gUU|yRRRRRRET| ", + " ||||||~~~%........E| ", + " ||????|||||........L| ", + " ||.......E!|...E....|| ", + " |&.........|.yrrr...<| ", + " ||...$...Py||||||/|||| ", + " ||TIII|||||RRR......| ", + " ||||||88S|.....H..x| ", + " |~~~/.....H..x| ", + " |B~~|.....s..x| ", + " |BYt|RRRR.....| ", + " ||||||||||||||| ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " + ], + "palettes": [ "standard_domestic_palette" ], + "place_traps": [ { "trap": "tr_magic_door", "x": 21, "y": 4 } ] + } + } + ``` + + I've placed the trap under a coat rack to dissuade casual triggering. Note: when triggered, the trap will update the wall across the room with a beaded door entrance. + + +**Merged maps** + +A merged map is json that has grouped several OMTs together within one mapgen entry. There is no size limit but you should do your best to keep the json readable, so break it up into manageable segments. 3 OMTs together left to right is 72 tiles, and fits easily inside CDDA's preference for no more than 100 columns per line, but some people do as many as 5 OMTs together. More than 5 OMTs together left to right can be hard to read on smaller screens and should be avoided. The same logic applies for vertical grouping: 2-3 OMTs fit easily on most screens, but more than that can be hard to read. + +You can insert existing OMT's into your merged map including forest, field, swamp and water tiles. Generic tiles like forests don't need to be added in your mapgen file, they will be called in the specials.json or multitile_city_buildings entry. + +For the most part, merged maps use the exact same rules and entries as regular mapgen files with a few notable exceptions: + +om_terrain value: + This example is for a map that is 4 OMTs wide and 3 OMTs long (4x3) on the overmap. Each row of OMT's are grouped into an array. + +``` +"om_terrain": [ + [ "farm_stills_4", "farm_stills_3", "farm_stills_2", "farm_stills_1" ], + [ "farm_stills_8", "farm_stills_7", "farm_stills_6", "farm_stills_5" ], + [ "farm_stills_12", "farm_stills_11", "farm_stills_10", "farm_stills_9" ] + ] +``` + +Each OMT's coordinates will continue the row and column numbers, they do not reset to 0,0 at each map boundary. + +For our farm the coordinates will be: +* x sets: + * first OMT: 0,23 + * second OMT: 24,47 + * third OMT: 48,71 + * fourth OMT: 72,95 + +* y sets: + * first row: 0,23 + * second row: 24,47 + * third row: 48,71 + + +The object entries rows reflect all the OMTs together and all the other object entries are shared across all the OMTs: + +``` + "rows": [ + " IFFFFFFFI,,,,IFFFFFFFIffffffffffffffff ,,,, ffffIFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFI ", + " F ,,,, F ???? ???? P,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, , F ", + " F $$$$$$$,,,,$$$$$$$ F -ww- -ww- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F ---..----..--- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, , F ", + " F ,,,, F -x..........x- ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ F -....hhhh....w ?,? I ,,,, F ", + " F ,,,, F w....tttt....-????,? F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD,F ", + " F ,,,, F w....tttt....+,,,,,? F , Q ,,,, , , F ", + " F $$$$$$$,,,,$$$$$$$ F w....tttt...Y-?????? F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F -....hhhh....w F, ,,,, , F ", + " F ,,,, F -x..........x- -ww- F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ F ----......--------HH---- F , ,,,, F ", + " F ,,,, F -......................- F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,,Q F w.;;;;;;;;;;;;;;;;;;;;.w F ,,,, , Q F ", + " F $$$$$$$,,,,$$$$$$$ F -.....................x- F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F ---+-----+-----+-----+-- F , , ,,,, , F ", + " F ,,,, F -iiiiu-H...-BB...kk-TiS- F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ F -Siiiu-t...-.....h.-iii- F , ,,,, , F ", + " F ,,,, F woiiiu-H...-BB.....-iii- F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F -eiiiu-.BB.-.....h.-bbb- F ,,,, , F ", + " F $$$$$$$,,,,$$$$$$$ F -iiiiu-.BBd-BBdddkk-bbb- F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F ---+----ww----ww-------- F, , ,,,, ,F ", + " F ,,,, F , F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ Iffff,fffffffffffffffffffffI , ,,,, , F ", + " F ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, , Q F ", + " F $$$$$$$,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, , F ", + " F ,,,, I ,, ,,,,,O I DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ F #==#==# ,, ##MMMMM## F Q ,,,, , ,F ", + " F ,,,, F #L_q__# ,, ? #E_____O# F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F #L_q__# ,,, #E______# F ,,,, F ", + " F $$$$$$$,,,,$$$$$$$ F #L____# ,, &#E______W F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F #L_c__# ,,,,,,+_______# F , ,,,, , F ", + " F ,,,, F ####### ,, ?#l______# F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ F ? ,, #l______W F, , ,,,, F ", + " F ,,,, F ,,, #l______# F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F ? ,, #_______# F , ,,,, , , F ", + " F $$$$$$$,,,,$$$$$$$ F ? ,,? ######### F DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, F ,, F , ,,,, F ", + " F ,,,, IFFFFFFFFFI,,IFFFFFFFFFFFFFI DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ f ? ,, ? f , , ,,,, , F ", + " F Q ,,,, f 7 7 7,, 7 7 7 f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ? ? ,, ? f , ,,,, F ", + " F $$$$$$$,,,,$$$$$$$ f ,,,,,,,,,,,,,,,,,,,,,, f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ,, f , ,,,, Q F ", + " F ,,,, f 7 7 7,, 7 7? 7 f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ f ? ,,, ? f, ,,,, , , F ", + " F ,,,, f ,,,,,,,,,,,,,,,,,,,,,, f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ? ,,, ? f , ,,,, , ,F ", + " F $$$$$$$,,,,$$$$$$$ f 7 7 ,,7 ? 7 7 7 f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f? ? ,, ? f ,,,, F ", + " F ,,,, f ,,,,,,,,,,,,,,,,,,,,,, f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ f ,, ? f , , ,,,, , , F ", + " F ,,,, f 7 7 ,,7 ? 7 7 7 f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ,, ? f , ,,,, F ", + " F $$$$$$$,,,,$$$$$$$ f ,,,,,,,,,,,,,,,,,,,,,, f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ? ,, ? f, ,,,, , F ", + " F ,,,, f 7 7 ,,7 7 7 7 f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ f ,, ? f , , ,,,, , , F ", + " F ,,,, f ,,,,,,,,,,,,,,,,,,,,,, f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ? ,, ? f Q ,,,, F ", + " F $$$$$$$,,,,$$$$$$$ f 7 7 ,,7 7 7 7 f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ,,, ? ?f , ,,,, , ,F ", + " F ,,,, Q f ,,,,,,,,,,,,,,,,,,,,,, f DDDDDDDDDDDDDDDDDDD,,,,DDDDDDDDDDDDDDDDDDD F ", + " F $$$$$$$,,,,$$$$$$$ f ? ,,, ? f , , ,,,, F ", + " F ,,,, f 7 7 7,, 7 7 7 f,DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ? ,,, ? f , , , Q F ", + " F $$$$$$$,,,,$$$$$$$ f ,,,,,,,,,,,,,,,,,,,,,, f DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD F ", + " F ,,,, f ? ,, f , , , F ", + " F f 7 7 7 ? 7 7 7 f DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD F ", + " IFFFFFFFFFFFFFFFFFFFFIFFFFFFFFFFFFFFFFFFFFFFFFFFIFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFI " + ], +``` + +Important note about spawning items, vehicles and monsters: + +While these maps are merged for the benefit of readability, this isn't automatically recognized by our mapgen processes. When you add spawns using x,y coordinates you can't cross OMT boundaries. Make multiple entries if you want those spawns to occur across more than one OMT. This applies for both x and y coordinates. + +An example: each x coordinate encompasses one OMT from a segment of the mall. +``` +"place_monsters": [ + { "monster": "GROUP_MALL", "x": [ 2, 23 ], "y": [ 2, 23 ], "density": 0.15 }, + { "monster": "GROUP_MALL", "x": [ 26, 47 ], "y": [ 2, 23 ], "density": 0.3 }, + { "monster": "GROUP_MALL", "x": [ 49, 71 ], "y": [ 2, 10 ], "density": 0.2 }, + { "monster": "GROUP_MALL", "x": [ 56, 68 ], "y": [ 17, 21 ], "density": 0.1 }, + { "monster": "GROUP_MALL", "x": [ 73, 95 ], "y": [ 2, 10 ], "density": 0.2 }, + { "monster": "GROUP_MALL", "x": [ 73, 95 ], "y": [ 17, 19 ], "density": 0.1 }, + { "monster": "GROUP_MALL", "x": [ 98, 119 ], "y": [ 0, 11 ], "density": 0.2 }, + { "monster": "GROUP_MALL", "x": [ 96, 105 ], "y": [ 16, 21 ], "density": 0.1 }, + { "monster": "GROUP_MALL", "x": [ 170, 191 ], "y": [ 2, 23 ], "density": 0.1 }, + { "monster": "GROUP_MALL", "x": [ 194, 215 ], "y": [ 2, 23 ], "density": 0.05 } + ] +``` + +* You can mostly get around this by using explicit symbol placement instead, which will apply to all the OMT's within your `rows`. This can get a little messy for monster and vehicle spawns, so I usually keep those to x,y coordinates. + +* Vehicles that spawn across 2 OMT's won't spawn at all. So if you can't get your vehicle to spawn, adjust its placement. Vehicle's 0,0 coordinate can vary depending on the vehicle's own json entry so this usually will take some trial and error to get them spawning nicely. + +* Nested maps of all sorts can be used in a merged map, but they can't cross boundary lines (the nested map will be cut off at the boundary). + +* More information about monster spawning can be found in [doc/MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/MAPGEN.md#spawn-item-or-monster-groups-with-place_groups) + +Note: set point type entries (see the example below) don't work well with merged maps and the issue has been reported. If you use this entry, the points will be repeated in every OMT in your merged map. + +sample: +``` +"set": [ + { "point": "trap", "id": "tr_funnel", "x": [ 2, 9 ], "y": 19, "repeat": [ 1, 2 ] }, + { "point": "trap", "id": "tr_cot", "x": [ 2, 9 ], "y": [ 15, 17 ], "repeat": [ 1, 2 ] } + ] +``` +I wanted to place this cot and funnel in the first OMT but it is repeated every time it encounters a new OMT boundary. From 76cbb72ffbd63744c43d40b76910c292b9028c10 Mon Sep 17 00:00:00 2001 From: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> Date: Tue, 30 Jun 2020 00:06:03 -0700 Subject: [PATCH 172/206] Restructure NPC chit-chat to include lore, and be generally more flexible (#41668) --- data/json/npcs/TALK_FRIEND_CONVERSATION.json | 105 +++++++++++------ data/json/npcs/talk_tags.json | 34 ------ data/json/npcs/talk_tags_chat.json | 118 +++++++++++++++++++ 3 files changed, 188 insertions(+), 69 deletions(-) create mode 100644 data/json/npcs/talk_tags_chat.json diff --git a/data/json/npcs/TALK_FRIEND_CONVERSATION.json b/data/json/npcs/TALK_FRIEND_CONVERSATION.json index 0d25832db6c5b..78ee3d0a6ffe4 100644 --- a/data/json/npcs/TALK_FRIEND_CONVERSATION.json +++ b/data/json/npcs/TALK_FRIEND_CONVERSATION.json @@ -33,46 +33,81 @@ "id": "TALK_FRIEND_CHAT", "type": "talk_topic", "dynamic_line": [ - { "u_has_item": "beer", "yes": "", "no": "" }, - { "u_has_item": "european_pilsner", "yes": "", "no": "" }, - { "u_has_item": "pale_ale", "yes": "", "no": "" }, - { "u_has_item": "india_pale_ale", "yes": "", "no": "" }, - { "u_has_item": "wine_barley", "yes": "", "no": "" }, { - "is_season": "summer", - "yes": "Yeah, this summer heat is hitting me hard, let's take a quick break, how goes it ?", - "no": "" - }, - { - "is_season": "winter", - "yes": "OK, maybe it'll stop me from freezing in this weather, what's up?", - "no": "" - }, - { - "is_day": "Well, it's the time of day for a quick break surely! How are you holding up?", - "no": "Man it's dark out isn't it? What's up?" - }, - { - "npc_has_effect": "infected", - "yes": "Well, I'm feeling pretty sick… are you doing OK though?", - "no": "" - }, - { - "has_no_assigned_mission": "", - "no": { - "has_many_assigned_missions": "Definitely, by the way, thanks for helping me so much with my tasks! Anyway, you coping OK, ? ", - "no": "OK, let's take a moment, oh, and thanks for helping me with that thing, so… what's up?" - } - }, - { - "days_since_cataclysm": 30, - "yes": "Now, we've got a moment, I was just thinking it's been a month or so since… since all this, how are you coping with it all?", - "no": "" + "days_since_cataclysm": 100, + "yes": [ + { "u_has_item": "beer", "yes": " ", "no": "" }, + { + "u_has_item": "european_pilsner", + "yes": " ", + "no": "" + }, + { + "u_has_item": "pale_ale", + "yes": " ", + "no": "" + }, + { + "u_has_item": "india_pale_ale", + "yes": " ", + "no": "" + }, + { + "u_has_item": "wine_barley", + "yes": " ", + "no": "" + }, + { + "is_season": "summer", + "yes": " ", + "no": "" + }, + { + "is_season": "winter", + "yes": " ", + "no": "" + }, + { + "npc_has_effect": "infected", + "yes": " ", + "no": "" + }, + { "npc_has_intelligence": 8, "yes": "", "no": "" }, + { "npc_has_perception": 8, "yes": "", "no": "" } + ], + "no": [ + { "u_has_item": "beer", "yes": " ", "no": "" }, + { + "u_has_item": "european_pilsner", + "yes": " ", + "no": "" + }, + { "u_has_item": "pale_ale", "yes": " ", "no": "" }, + { + "u_has_item": "india_pale_ale", + "yes": " ", + "no": "" + }, + { + "u_has_item": "wine_barley", + "yes": " ", + "no": "" + }, + { "is_season": "summer", "yes": " ", "no": "" }, + { "is_season": "winter", "yes": " ", "no": "" }, + { + "npc_has_effect": "infected", + "yes": " ", + "no": "" + }, + { "npc_has_intelligence": 8, "yes": "", "no": "" }, + { "npc_has_perception": 8, "yes": "", "no": "" } + ] } ], "responses": [ { - "text": "Oh you know, not bad, not bad…", + "text": "", "topic": "TALK_DONE", "switch": true, "effect": [ "morale_chat_activity", { "npc_add_effect": "asked_to_socialize", "duration": 7000 } ] diff --git a/data/json/npcs/talk_tags.json b/data/json/npcs/talk_tags.json index c0c5dea450a1d..6f8b7f3142d7c 100644 --- a/data/json/npcs/talk_tags.json +++ b/data/json/npcs/talk_tags.json @@ -148,40 +148,6 @@ "I'd kill for a sip of water right now." ] }, - { - "type": "snippet", - "category": "", - "//": "Used when chit-chatting while the avatar has a beer", - "text": [ - "Yeah sure, can't help but notice you got beer with you! Let's crack a cold one and chat, , how goes it?", - "Oh definitely, how about one of those beers I see on you? What's up anyway?", - "Yeah you share those beers I see you hoarding and then we chat all you like! Only joking, what's up ?", - "Hey , I bet a chat would be all the sweeter with a nice, cold beer in hand. How's it going?", - "While we chat, what say you we open a beer and just… pretend the world isn't ending, just for a while?", - "Pass me one and let's talk about the good ol' days, ." - ] - }, - { - "type": "snippet", - "category": "", - "//": "General chit chat messages", - "text": [ - "Hey, sure thing, , I need a break anyway, how are you?", - "Yeah OK, , how's it going?", - "Sure, let's shoot the shit! You OK?", - "Why not? How you doing?", - "I'm OK with that, what's up?", - "I can spare a few minutes, how's things?", - "Sure thing , you good?", - "Alright, you got something to get off your chest?", - "Always ready for a good chat! But why, you OK?", - "OK , we should get to know each other, how are you coping?", - "Definitely, I'm game. How you holding up?", - "Good idea . Let's forget the world for a while. How you doin'?", - "Ah, what the heck. How's life been treating you?", - "Sure. So, how about that weather ey?" - ] - }, { "type": "snippet", "category": "", diff --git a/data/json/npcs/talk_tags_chat.json b/data/json/npcs/talk_tags_chat.json new file mode 100644 index 0000000000000..55a9b672fd038 --- /dev/null +++ b/data/json/npcs/talk_tags_chat.json @@ -0,0 +1,118 @@ +[ + { + "type": "snippet", + "category": "", + "//": "Used when chit-chatting while the avatar has a beer; goes before a general chitchat message", + "text": [ + "Yeah sure, want to crack open one of them beers?", + "Oh definitely, how about one of those beers you got?", + "Yeah you share those beers I see you hoarding and then we chat all you like! Only joking, heh.", + "Hey , I bet a chat would be all the sweeter with a nice, cold beer in hand.", + "While we chat, what say you we open a beer and just… pretend the world isn't ending.", + "Pass me one and let's talk, ." + ] + }, + { + "type": "snippet", + "category": "", + "//": "A sentence regarding the season to go before a more general chitchat message.", + "text": [ + "Yeah, this summer heat is hitting me hard, you know?", + "Enjoying the summer.", + "Kinda wishing it would cool off a bit, to be honest." + ] + }, + { + "type": "snippet", + "category": "", + "//": "A sentence regarding the season to go before a more general chitchat message.", + "text": [ + "OK, maybe it'll stop me from freezing in this weather.", + "Gotta say, I'm not minding the snow.", + "It's weird the zombies don't freeze." + ] + }, + { + "type": "snippet", + "category": "", + "//": "A sentence about being sick to go before a more general chitchat message.", + "text": [ "Well, I'm feeling pretty sick… but sure." ] + }, + { + "type": "snippet", + "category": "", + "//": "General chit chat messages", + "text": [ + "", + "I need a break anyway, how are you?", + "So, how's it going?", + "Let's shoot the shit! You OK, ?", + "I'm OK with that, what's up?", + "I guess I can spare a few minutes, how's things?", + "Sure thing , you good?", + "Alright, you got something to get off your chest?", + "Always ready for a good chat! But why, you OK?", + "OK , how are you coping?", + "I'm game. How you holding up?", + "Let's forget the world for a while. How you doin'?", + "What the heck. How's life been treating you?", + "So, how about that weather, eh?", + "Nice of you to make time. How's it been for you lately?", + "My dogs’ve been barkin’ lately, you know?", + "I feel great today. Not sure what it is, just one of those days." + ] + }, + { + "type": "snippet", + "category": "", + "//": "General chit chat messages for NPCs having big thoughts. Tends to be more about establishing game lore.", + "text": [ + "I just can't believe it's over. I keep running my head back to the days it all fell apart. The riots. The lies. The psychos. It never really felt like it was going to go like this.", + "You ever think there's any truth to the crap they were spouting before the world ended? Mind control drugs in the water, bio-terrorism? Some of it would make sense, but it seems so far-fetched. Then again, we're dealing with actual zombies.", + "I wonder if I should be getting more religious now, or less. You know what I'm sayin', ?", + "I been thinkin’ about rearranging my gear. It’s a real mess. Don’t wanna go for my weapon and accidentally pull out a granola bar, right?", + "You ever wonder why we even bother? We’re all just gonna be zombies eventually anyway. I mean, not that I’m gonna stop fighting, but what’s the damn point?", + "I wish I could go bust a cap in one of those zombies right now, without all the fuss about being scared for my life.", + "Every time I close my eyes, I can still see the riots. Do you get that, or is it just me?", + "You ever feel like the whole time before the apocalypse was just a dream you’re waking up from?", + "When do you think you realized the world was ending? For me, it was that damned YouTube video with the lady killing the baby. Holy shit, you know?", + "I wonder if the government's still out there, holed up in some bunker.", + "Remember some of the crazy news from the end of the world? The stuff that got drowned out by the riot coverage I mean. Like, didn't the governor of Rhode Island secede from the Union or something?", + "I keep having dreams that zombies still remember who they were as people, and are just trapped inside the bodies watching everything happen. Haven't been sleeping well.", + "Those mind-control drugs they put in the water to make people riot… you think they're still in there?" + ] + }, + { + "type": "snippet", + "category": "", + "//": "General chit chat messages for intelligent or perceptive NPCs", + "text": [ + "I can't stop wondering who fucked up to make all this happen. Obviously we can't trust the news, they claimed the zombies were \"rioters\" for weeks. Why? Where did this come from?", + "If what they told us about the Chinese was even partly true, do you think it's like this in China? Or maybe the US is some kind of quarantine zone, and at least some of the world is still out there.", + "Have you noticed injuries aren’t healing the same as usual? I started spotting it before the world ended, but it’s become more pronounced. There’s hardly even a granulation step after a cut closes.", + "I still don’t understand how these zombies are powered. They’re like perpetual motion machines.", + "So many parts of this still don't fit together. Who created the zombies? What powers them? Maybe the rumours of mind control drugs were true all along, and someone found a way to bioengineer living dead." + ] + }, + { + "type": "snippet", + "category": "", + "//": "General chit chat messages for further past the apocalypse", + "text": [ + "", + "", + "How do these zombies even keep going? What are they eating? Do you think they'll ever rot away?", + "I been thinkin', one of these days, we're gonna run out of toilet paper. What then?", + "Do you think it’s weird how we’ll, like, open a locked building and find a lone zombie inside? How’d it even get there?", + "Sometimes I wonder if we're all psychos, not just the ones that went crazy and rioted. I never would have thought I could do the things I've done since the world ended.", + "You read any good books lately? I'm glad we still got books.", + "You know what I miss? Movie theaters. You think Hollywood survived this? Maybe there's a bunch of zombie actors out there, filmin' shit out of reflex. Hah, I'd watch that shit." + ] + }, + { + "type": "snippet", + "category": "", + "//": "General chit chat responses from the player", + "text": [ "I hear you, …", "That reminds me of something…", "Right, right. Say, you ever thought about…" ] + } +] From 96bd322737e521bcb1159b4ab8762c8d9a9cfed6 Mon Sep 17 00:00:00 2001 From: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> Date: Tue, 30 Jun 2020 00:06:38 -0700 Subject: [PATCH 173/206] Create "cataclysm: what happened" stories, part 1 (#41672) --- data/json/npcs/BG_trait_groups.json | 4 + data/json/npcs/BG_traits.json | 50 +++++--- .../backgrounds_table_of_contents.json | 6 + data/json/npcs/Backgrounds/confused_1.json | 18 +++ data/json/npcs/Backgrounds/dreamer.json | 18 ++- data/json/npcs/Backgrounds/evacuee_1.json | 6 + data/json/npcs/Backgrounds/evacuee_2.json | 6 + data/json/npcs/Backgrounds/evacuee_3.json | 16 ++- data/json/npcs/Backgrounds/evacuee_4.json | 26 ++++ data/json/npcs/Backgrounds/evacuee_5.json | 18 ++- data/json/npcs/Backgrounds/evacuee_6.json | 8 +- .../json/npcs/Backgrounds/fema_evacuee_1.json | 26 ++++ .../npcs/Backgrounds/left_for_dead_1.json | 33 +++++- .../npcs/Backgrounds/left_for_dead_2.json | 16 +++ .../npcs/Backgrounds/left_for_dead_3.json | 74 ++++++++++++ data/json/npcs/Backgrounds/no_past_1.json | 15 +++ data/json/npcs/Backgrounds/no_past_2.json | 8 +- data/json/npcs/Backgrounds/no_past_4.json | 39 ++++++ data/json/npcs/Backgrounds/religious_1.json | 16 +++ data/json/npcs/Backgrounds/religious_2.json | 6 + data/json/npcs/Backgrounds/wedding_1.json | 7 ++ .../whathappened_table_of_contents.json | 111 ++++++++++++++++++ data/json/npcs/talk_tags.json | 10 ++ 23 files changed, 511 insertions(+), 26 deletions(-) create mode 100644 data/json/npcs/Backgrounds/left_for_dead_3.json create mode 100644 data/json/npcs/Backgrounds/whathappened_table_of_contents.json diff --git a/data/json/npcs/BG_trait_groups.json b/data/json/npcs/BG_trait_groups.json index 31dce06070678..deb5e4b7bc326 100644 --- a/data/json/npcs/BG_trait_groups.json +++ b/data/json/npcs/BG_trait_groups.json @@ -33,6 +33,7 @@ { "trait": "BGSS_FEMA_Evacuee_1" }, { "trait": "BGSS_Left_for_Dead_1" }, { "trait": "BGSS_Left_for_Dead_2" }, + { "trait": "BGSS_Left_for_Dead_3" }, { "trait": "BGSS_Gung_Ho_1" }, { "trait": "BGSS_Gung_Ho_2" }, { "trait": "BGSS_Gung_Ho_3" }, @@ -72,6 +73,7 @@ "subtype": "distribution", "traits": [ { "group": "BG_survival_story_UNIVERSAL" }, + { "trait": "BGSS_Left_for_Dead_3" }, { "trait": "BGSS_Hospital_1" }, { "trait": "BGSS_Hospital_2" }, { "trait": "BGSS_Hospital_3" } @@ -84,6 +86,7 @@ "subtype": "distribution", "traits": [ { "group": "BG_survival_story_UNIVERSAL" }, + { "trait": "BGSS_Left_for_Dead_3" }, { "trait": "BGSS_Gung_Ho_1" }, { "trait": "BGSS_Gung_Ho_2" }, { "trait": "BGSS_Gung_Ho_3" }, @@ -126,6 +129,7 @@ { "trait": "BGSS_Evacuee_4" }, { "trait": "BGSS_Evacuee_5" }, { "trait": "BGSS_Evacuee_6" }, + { "trait": "BGSS_Left_for_Dead_3" }, { "trait": "BGSS_High_School_1" }, { "trait": "BGSS_Burger_Flipper_1" }, { "trait": "BGSS_Nerd_1" } diff --git a/data/json/npcs/BG_traits.json b/data/json/npcs/BG_traits.json index e3ac16db4d155..a3921ba400172 100644 --- a/data/json/npcs/BG_traits.json +++ b/data/json/npcs/BG_traits.json @@ -6,7 +6,7 @@ { "type": "mutation", "id": "BGSS_Confused_1", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Confused 1" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -18,7 +18,7 @@ { "type": "mutation", "id": "BGSS_No_Past_1", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: No Past 1" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -30,7 +30,7 @@ { "type": "mutation", "id": "BGSS_No_Past_2", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: No Past 2" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -42,7 +42,7 @@ { "type": "mutation", "id": "BGSS_No_Past_3", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: No Past 3" }, "player_display": false, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", @@ -54,7 +54,7 @@ { "type": "mutation", "id": "BGSS_No_Past_4", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: No Past 4" }, "player_display": false, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", @@ -66,7 +66,7 @@ { "type": "mutation", "id": "BGSS_No_Past_5", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: No Past 5" }, "player_display": false, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", @@ -78,7 +78,7 @@ { "type": "mutation", "id": "BGSS_Religious_1", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Religious 1" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -90,7 +90,7 @@ { "type": "mutation", "id": "BGSS_Religious_2", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Religious 2" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -102,7 +102,7 @@ { "type": "mutation", "id": "BGSS_Dreamer", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Dreamer 1" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -114,7 +114,7 @@ { "type": "mutation", "id": "BGSS_Wedding_1", - "name": { "str": "Survivor" }, + "name": { "str": "Survivor: Wedding 1" }, "player_display": false, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", @@ -126,7 +126,7 @@ { "type": "mutation", "id": "BGSS_Evacuee_1", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Evacuee 1" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -138,7 +138,7 @@ { "type": "mutation", "id": "BGSS_Evacuee_2", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Evacuee 2" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -150,7 +150,7 @@ { "type": "mutation", "id": "BGSS_Evacuee_3", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Evacuee 3" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "valid": false, @@ -161,7 +161,7 @@ { "type": "mutation", "id": "BGSS_Evacuee_4", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Evacuee 4" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -173,7 +173,7 @@ { "type": "mutation", "id": "BGSS_Evacuee_5", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Evacuee 5" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -185,7 +185,7 @@ { "type": "mutation", "id": "BGSS_Evacuee_6", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Evacuee 6" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -197,7 +197,7 @@ { "type": "mutation", "id": "BGSS_FEMA_Evacuee_1", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: FEMA Evacuee 1" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -209,7 +209,7 @@ { "type": "mutation", "id": "BGSS_Left_for_Dead_1", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Left for Dead 1" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, @@ -221,7 +221,19 @@ { "type": "mutation", "id": "BGSS_Left_for_Dead_2", - "name": { "str": "Survivor Story" }, + "name": { "str": "Survivor: Left for Dead 2" }, + "points": 0, + "description": "This NPC could tell you about how they survived the Cataclysm", + "player_display": false, + "valid": false, + "purifiable": false, + "types": [ "BACKGROUND_SURVIVAL_STORY" ], + "flags": [ "BG_SURVIVAL_STORY" ] + }, + { + "type": "mutation", + "id": "BGSS_Left_for_Dead_3", + "name": { "str": "Survivor: Left for Dead 3" }, "points": 0, "description": "This NPC could tell you about how they survived the Cataclysm", "player_display": false, diff --git a/data/json/npcs/Backgrounds/backgrounds_table_of_contents.json b/data/json/npcs/Backgrounds/backgrounds_table_of_contents.json index ac968970c8f30..59ada7fac0628 100644 --- a/data/json/npcs/Backgrounds/backgrounds_table_of_contents.json +++ b/data/json/npcs/Backgrounds/backgrounds_table_of_contents.json @@ -117,6 +117,12 @@ "condition": { "npc_has_trait": "BGSS_Left_for_Dead_2" }, "switch": true }, + { + "text": "", + "topic": "BGSS_LEFT_FOR_DEAD_3_STORY1", + "condition": { "npc_has_trait": "BGSS_Left_for_Dead_3" }, + "switch": true + }, { "text": "", "topic": "BGSS_GUNG_HO_1_STORY1", diff --git a/data/json/npcs/Backgrounds/confused_1.json b/data/json/npcs/Backgrounds/confused_1.json index 788f7d90b15e4..a94446af96052 100644 --- a/data/json/npcs/Backgrounds/confused_1.json +++ b/data/json/npcs/Backgrounds/confused_1.json @@ -4,5 +4,23 @@ "type": "talk_topic", "dynamic_line": "I don't even know anymore. I have no idea what is going on. I'm just doing what I can to stay alive. The world ended and I bungled along not dying, until I met you.", "responses": [ { "text": "Huh.", "topic": "TALK_FRIEND" } ] + }, + { + "id": "CWH_CONFUSED_1_IDEAS1", + "type": "talk_topic", + "dynamic_line": "I barely understand what's going on *now*. Why do you think I'd know how the world ended?", + "responses": [ + { + "text": "OK, fine. Can you at least tell me what you remember about the events leading up to now?", + "topic": "CWH_CONFUSED_1_IDEAS2" + }, + { "text": "Never mind then.", "topic": "TALK_FRIEND" } + ] + }, + { + "id": "CWH_CONFUSED_1_IDEAS2", + "type": "talk_topic", + "dynamic_line": "What, don't you remember? No, sorry, that's not fair, it was a weird time. OK, well, I guess this all started with the riots, didn't it? We were just leading our lives, doing our jobs, and then people started rioting. Not the usual protests that turned violent or anything, either, people just left their houses and started breaking shit. The news tried to downplay it but they couldn't keep it off the internet. I don't know what caused it, they said it was some kind of drug or toxin in the water? Still, I didn't really realize how bad it was getting at first. Somewhere along the way the \"rioters\" started getting up and walking around with holes in their chests, and that's when the real panic took over. The next few days - or weeks, not really sure - are a blur to me. You'd have to ask someone else how we got from there to total collapse.", + "responses": [ { "text": "Thanks for filling me in.", "topic": "TALK_FRIEND" } ] } ] diff --git a/data/json/npcs/Backgrounds/dreamer.json b/data/json/npcs/Backgrounds/dreamer.json index 76fcd39c2c7ac..610b694525749 100644 --- a/data/json/npcs/Backgrounds/dreamer.json +++ b/data/json/npcs/Backgrounds/dreamer.json @@ -5,7 +5,7 @@ "dynamic_line": "OK, this is gonna sound crazy but I, like, I knew this was going to happen. Like, before it did. You can even ask my psychic except, like, I think she's dead now. I told her about my dreams a week before the world ended. Serious!", "responses": [ { "text": "What were your dreams?", "topic": "BGSS_DREAMER_STORY2" }, - { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] }, @@ -68,5 +68,21 @@ { "text": "Poor Filthy Dan. ", "topic": "TALK_FRIEND" }, { "text": "Thanks for telling me that stuff. ", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_DREAMER_IDEAS1", + "type": "talk_topic", + "dynamic_line": "So, like, there were some really bad riots, okay? Everyone got realy violent and nasty, and to be honest, I was on a bit of a spirit journey for a lot of it and I don't really remember too well. But the weirdest part is, nobody even *cared* about each other. It's like all our caring got sucked away. I think it was some kind of negative energy thing. And also that made the dead, like, come back to life and stuff. Plus, like, there were some monsters? I'm not really sure how they fit in.", + "responses": [ + { "text": "You seem to know a lot, what do you think caused it all?", "topic": "CWH_DREAMER_IDEAS2" }, + { "text": "", "topic": "TALK_NONE" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_DREAMER_IDEAS2", + "type": "talk_topic", + "dynamic_line": "That's a tough one, but I keep thinking back to this dream I had like, a year before it all started. I dreamed there was this big ball of evil energy that was just waiting to suck up all the good thoughts on the earth and turn us into monsters and things? So I guess that's what I think happened. Everything else just seems too far-fetched, you know?", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/evacuee_1.json b/data/json/npcs/Backgrounds/evacuee_1.json index a645900ebbce1..e449a5a05fbf3 100644 --- a/data/json/npcs/Backgrounds/evacuee_1.json +++ b/data/json/npcs/Backgrounds/evacuee_1.json @@ -54,5 +54,11 @@ "type": "talk_topic", "dynamic_line": "I thought I had those damned figured out. I got braver, started heading out by day more and more. One of those screamer zombies spotted me and called in a horde, with a giant beastie at the head of it, the size of a volkswagen and all covered in bone plates. I know when I'm outclassed. The big guy was held back by his own horde of buddies, and I managed to book it back to my place. I closed the windows, locked it down, but it was too late. The giant followed me and just started hammering right through the walls. I grabbed what I could and made for the horizon. Last I saw of my squat, it was collapsing on the bastard. For all I know, it died in the crash, but I am not going back to find out.", "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_EVACUEE_1_IDEAS1", + "type": "talk_topic", + "dynamic_line": "What happened? I'm not really sure. You must know about the riots and all that, that the government and the police totally failed to contain. I don't have a good guess what caused that. I thought it was the usual stuff at first, and I gotta admit, I was sort of excited and scared it was the start of a revolution. Not excited enough to join in though, and I guess anyone who was is probably dead now. I tried to wait it out at home, packed a little bug-out bag, but then the internet started showing videos of rioters getting back up and fighting with crazy injuries. I don't know how many people really believed it at first, but I took that as my sign and ditched town for the evac shelter. I don't know exactly what happened after that. The center I was in was heavily vandalized and empty, and I never saw anyone else. The cell phone grid was locked up, except for one emergency message that came through around a day later saying the government had fallen. Power went out a few days later.", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/evacuee_2.json b/data/json/npcs/Backgrounds/evacuee_2.json index 806fef3d56d82..2dc69e2e061ec 100644 --- a/data/json/npcs/Backgrounds/evacuee_2.json +++ b/data/json/npcs/Backgrounds/evacuee_2.json @@ -27,5 +27,11 @@ "dynamic_line": "What do you think happened? You see them around anywhere?", "speaker_effect": [ { "effect": { "npc_add_effect": "player_BGSS_SAIDNO", "duration": "14000" } } ], "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_EVACUEE_2_IDEAS1", + "type": "talk_topic", + "dynamic_line": "Well, I assume you know about the riots and the military and police and the freakin' nightmare monsters walking the earth beside zombies, right? If you're asking what I think caused it all, well, I dunno. My best guess it was some huge government overreach, maybe some kind of experimental bioweapon that got away. They tried to lie so much at the start about everything that was going on, I don't think the whole 'Chinese attack' shit measures up. They were trying to cover something up. As for the real end times, maybe the rest of the world tried to contain it. I heard there were honest-to-god nukes going off here on American soil. To me that seems like somewhere else, maybe Europe, trying to get whatever is going on here contained. Maybe it even worked. It's bad now but it's not like it was.", + "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/evacuee_3.json b/data/json/npcs/Backgrounds/evacuee_3.json index 7a855cb2f739d..f753a6fdd053b 100644 --- a/data/json/npcs/Backgrounds/evacuee_3.json +++ b/data/json/npcs/Backgrounds/evacuee_3.json @@ -64,10 +64,22 @@ "id": "BGSS_EVACUEE_3_STORY4", "type": "talk_topic", "dynamic_line": "Yeah. I had it pretty good there, but eventually I just started going a bit nuts. Always dark, a bit cold, living off scavenged junk food… a soul can only live like that for so long. When the weather above ground got warmer and the daylight hours got longer I decided to get a bit braver. I'd learned enough about the that I was able to live pretty well after that. I've camped a few places, scavenged berries and whatnot, lived a pretty good life compared to those first few months.", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_EVACUEE_3_IDEAS1", + "type": "talk_topic", + "dynamic_line": "Woah, , I don't even know where to start. The riots? I think it was going on sooner than that. There were bad murmurs going on a few weeks before that happened. Lots of really scary crimes, not your usual stuff but like cannibalism and some real unspeakable shit, you know? When the riots started, I think I was already primed to think of it as something different from a normal equality riot or anything like that. I think that's part of how I got out safer, I had had some time to get some stuff and get going, and didn't try to make shopping trips. People were abso-fuckin-lutely crazy in those days. It was a lot like the pandemic a few years back, except the police were out in the streets in force, gunning people down like it was going out of style.", "responses": [ - { "text": "I didn't meet you in the subway though. You left.", "topic": "BGSS_EVACUEE_3_STORY4" }, - { "text": "", "topic": "TALK_FRIEND" }, + { "text": "Do you have any idea what the actual cause was?", "topic": "CWH_EVACUEE_3_IDEAS2" }, + { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_EVACUEE_3_IDEAS2", + "type": "talk_topic", + "dynamic_line": "Not really. Government fed us all kinds of conflicting stories, and there was some absolutely heinous stuff going on. I mean, you can't have missed that video of the woman killing her own baby, right? God, that still gives me nightmares. I don't know what it was about it, something about the look on her face. Worse stuff came out of course, and now we've both seen worse things with our own eyes, but that one still comes back to haunt me. Anyway, they never could control the riots, and by the time the rioters started turning into undead it was way too late. I don't know if morale just broke or what but I heard rumours the military and police started turning on each other as much as the crowds. What actually made the dead come back to life though? I haven't got a clue.", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/evacuee_4.json b/data/json/npcs/Backgrounds/evacuee_4.json index 6552689ebf4e8..d3c04bfc340a5 100644 --- a/data/json/npcs/Backgrounds/evacuee_4.json +++ b/data/json/npcs/Backgrounds/evacuee_4.json @@ -3,6 +3,32 @@ "id": "BGSS_EVACUEE_4_STORY1", "type": "talk_topic", "dynamic_line": "They were shipping me with a bunch of evacuees over to a refugee center, when the bus got smashed in by the biggest zombie you ever saw. It was busy with the other passengers, so I did what anyone would do and fucked right out of there.", + "responses": [ + { "text": "Don't leave me hanging, what happened next?", "topic": "BGSS_EVACUEE_4_STORY2" }, + { "text": "", "topic": "TALK_NONE" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "BGSS_EVACUEE_4_STORY2", + "type": "talk_topic", + "dynamic_line": "I ran until I felt like my lungs were going to jump right out of my mouth. I holed up in the forest for the night, under a fir tree. In the morning I heard someone talking, so I went to see. I was playing it pretty careful though, there were still a lot of psychos and rioters around. I snuck up on some kind of thing, some monster worse than any zombie. Some huge bug thing, saying random phrases like some kind of broken tape recorder. It was dragging a few human bodies behind it, I couldn't tell if they were dead or unconscious. Honestly I didn't wait to find out, I ducked into the bushes and tried not to breath until I couldn't hear it anymore.", + "responses": [ + { "text": "Where did you go from there?", "topic": "BGSS_EVACUEE_4_STORY3" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "BGSS_EVACUEE_4_STORY3", + "type": "talk_topic", + "dynamic_line": "Once I was okay leaving the bushes, I made my way to an old shed I could see a ways off. It was falling in but it kept the rain and wind off and gave me a place out of sight. I stayed there until I ran out of those ass-tasting ration bars I'd filled my backpack with. Then I took on the wanderin' life until we met.", "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_EVACUEE_4_IDEAS1", + "type": "talk_topic", + "dynamic_line": "What's this, some kinda Back to the Future thing? How could you not know what happened? The world damn well ended, that's what. And it didn't start with an earthquake, birds, snakes, or aeroplanes. It started with riots, and they had to dispatch cops and then the military to take care of the criminals. The government tried to pad it claiming it was some kind of mind control, but I didn't see too much different from the usual bullshit: entitled babies looking for an excuse to break the law. It just got way worse, this time, until it was time to get out of dodge. I heard rumours they were even bombing some of the urban centers to try to control it - which, I have to admit, is maybe a bit too hard-core.", + "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/evacuee_5.json b/data/json/npcs/Backgrounds/evacuee_5.json index 67f7866f4ed82..5891624f6c4b8 100644 --- a/data/json/npcs/Backgrounds/evacuee_5.json +++ b/data/json/npcs/Backgrounds/evacuee_5.json @@ -25,7 +25,7 @@ "topic": "BGSS_EVACUEE_5_WASPS", "condition": { "u_has_perception": 8 } }, - { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] }, @@ -37,5 +37,21 @@ { "text": "Sorry. Could you tell me more about them?", "topic": "BGSS_EVACUEE_5_BEES" }, { "text": "Right. Sorry.", "topic": "TALK_FRIEND" } ] + }, + { + "id": "CWH_EVACUEE_5_IDEAS1", + "type": "talk_topic", + "dynamic_line": "Okay listen. Don't believe that government stuff. There's a common thread to all of it: the riots, the military failing to contain it, even the giant monsters they said were appearing in the last few days and had to be wiped out with nukes.", + "responses": [ + { "text": "You've got my attention.", "topic": "CWH_EVACUEE_5_IDEAS2" }, + { "text": "", "topic": "TALK_NONE" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_EVACUEE_5_IDEAS1", + "type": "talk_topic", + "dynamic_line": "You ever see the Matrix? This is it. In real life. To keep us locked in here, the creators of the simulation have to make sure we're just the right level of miserable. I think their algorithms got messed up though, and went into overdrive, because all this is a little implausible. Still, I guess we're still jacked in, so maybe it's working.", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/evacuee_6.json b/data/json/npcs/Backgrounds/evacuee_6.json index 252ff39d42f61..b447e06fc22fe 100644 --- a/data/json/npcs/Backgrounds/evacuee_6.json +++ b/data/json/npcs/Backgrounds/evacuee_6.json @@ -3,6 +3,12 @@ "id": "BGSS_EVACUEE_6_STORY1", "type": "talk_topic", "dynamic_line": "Well, I was at home when the cell phone alert went off and told me to get to an evac shelter. So I went to an evac shelter. And then the shelter got too crowded, and people were waiting to get taken to the refugee center, but the buses never came. You must already know about all that. It turned into panic, and then fighting. I didn't stick around to see what happened next; I headed into the woods with what tools I could snatch from the lockers. I went back a few days later, but the place was totally abandoned. No idea what happened to all those people.", - "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_EVACUEE_6_IDEAS1", + "type": "talk_topic", + "dynamic_line": "I gotta be honest with you, I heard a lot of stories back at the shelter, and only one of them really stuck. This is some kind of science experiment gone wrong. I don't know what caused the riots and the undead in the first place, but there's no way it's this out of control everywhere. Yeah, I got the same 'the government has fallen' text as everyone, but it doesn't make *sense* that it could be so widespread so fast. I think we're in some sort of exclusion zone, where they're letting whatever is going on run its course to see how it works so they can fight it better next time. Somewhere out there, outside the zone, it's more or less business as usual.", + "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/fema_evacuee_1.json b/data/json/npcs/Backgrounds/fema_evacuee_1.json index ad01bae9c82e4..03963ba1ca279 100644 --- a/data/json/npcs/Backgrounds/fema_evacuee_1.json +++ b/data/json/npcs/Backgrounds/fema_evacuee_1.json @@ -81,5 +81,31 @@ "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_FEMA_EVACUEE_1_IDEAS1", + "type": "talk_topic", + "dynamic_line": "Woof, you ready for a real hot take? The government did this to us. Intentionally, or at least sort-of intentionally.", + "responses": [ + { "text": "Oh?", "topic": "CWH_FEMA_EVACUEE_1_IDEAS2" }, + { "text": "", "topic": "TALK_NONE" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_FEMA_EVACUEE_1_IDEAS2", + "type": "talk_topic", + "dynamic_line": "Damn right. They lied to us for god knows how long about what was going on because they didn't want us to figure it out. It probably started as a way to keep the people in line, but it backfired somehow. My guess is they tried to de-educate us, tried to mislead us, and when that wasn't working they tried actual drugs in the water to make us stupid or something. Instead of just stupid, some people got violent. Then they tried to leverage that to put in martial law, but that didn't work and they wound up fighting hordes of people. Only they didn't realize their brain drugs were some kind of mutagen that turn people into zombies.", + "responses": [ + { "text": "What about all the other stuff?", "topic": "CWH_FEMA_EVACUEE_1_IDEAS3" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_FEMA_EVACUEE_1_IDEAS3", + "type": "talk_topic", + "dynamic_line": "I think it's mostly mutation. I don't know what they used, but it's some real mad science shit, I didn't think most of this was even possible. I also wonder if whatever they put in the water has made us a bit crazy. Maybe some of this is just a hallucination? That one blows my mind a bit, I'm not sure I believe it but I got nothin' else.", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/left_for_dead_1.json b/data/json/npcs/Backgrounds/left_for_dead_1.json index c9649b57f09fd..e8b32a4800a04 100644 --- a/data/json/npcs/Backgrounds/left_for_dead_1.json +++ b/data/json/npcs/Backgrounds/left_for_dead_1.json @@ -3,6 +3,37 @@ "id": "BGSS_LEFT_FOR_DEAD_1_STORY1", "type": "talk_topic", "dynamic_line": "I was late to evacuate when the shit hit the fan. Got stuck in town for a few days, survived by hiding in basements eating girl scout cookies and drinking warm root beer. Eventually I managed to weasel my way out without getting caught by the . I spent a few days holed up in an abandoned mall, but I needed food so I headed out to fend for myself in the woods. I wasn't doing a great job of it, so I'm kinda glad you showed up.", - "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_LEFT_FOR_DEAD_1_IDEAS1", + "type": "talk_topic", + "dynamic_line": "Okay, so, hear me out. This might sound crazy, but we're dealing with the walking dead, so I think I get a pass on that. You know your Greek mythology at all?", + "responses": [ + { "text": "Not really. How is that relevant?", "topic": "CWH_LEFT_FOR_DEAD_1_EXPLAIN" }, + { "text": "Sure, why?", "topic": "CWH_LEFT_FOR_DEAD_1_IDEAS2" }, + { "text": "", "topic": "TALK_NONE" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_LEFT_FOR_DEAD_1_IDEAS2", + "type": "talk_topic", + "dynamic_line": "Okay, well, I know this sounds like an Indiana Jones B-plot, but I think someone found Pandora's Box, the actual thing or close to it. I think they tried to somehow harness it, to use the power in it for something. Maybe even something good, who knows, the power of the gods seems like it would be a green energy source to me. Whatever it was, they screwed it up, and released it for real. Not just a metaphorical thing like in the stories, but actually set the forces of Hades loose on Earth. Yeah, I know it's farfetched, but like I said: I think I get a pass on that.", + "responses": [ + { "text": "What? Pandora's box?", "topic": "CWH_LEFT_FOR_DEAD_1_EXPLAIN" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_LEFT_FOR_DEAD_1_EXPLAIN", + "type": "talk_topic", + "dynamic_line": "According to legend, Pandora was in the house of the gods and found an unopened box. She decided to investigate, and when she opened it and unthinkable horrors and diseases spilled out. Sound familiar?", + "responses": [ + { "text": "Sure, what's that go to do with anything?", "topic": "CWH_LEFT_FOR_DEAD_1_IDEAS2" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] } ] diff --git a/data/json/npcs/Backgrounds/left_for_dead_2.json b/data/json/npcs/Backgrounds/left_for_dead_2.json index 981701eb77d7d..8885d485adb3d 100644 --- a/data/json/npcs/Backgrounds/left_for_dead_2.json +++ b/data/json/npcs/Backgrounds/left_for_dead_2.json @@ -27,5 +27,21 @@ { "text": "Thanks for telling me all that. ", "topic": "TALK_FRIEND" }, { "text": "Thanks for telling me all that. ", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_LEFT_FOR_DEAD_2_IDEAS1", + "type": "talk_topic", + "dynamic_line": "You mean what caused the riots and all that? Well, they told us it was a Chinese bioweapon but I have troubles believing anyone could engineer a bioweapon that could do all this. The only answer I can come up with, silly though it sounds, is aliens.", + "responses": [ + { "text": "You think this is an invasion?", "topic": "CWH_LEFT_FOR_DEAD_2_IDEAS2" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_LEFT_FOR_DEAD_2_IDEAS2", + "type": "talk_topic", + "dynamic_line": "Well, maybe, but I'd guess it's too disorganized to be a proper invasion. If I had to guess, I'd say there was something locked in the polar ice. Like, remember a few years back there was that big thing online about an alien body found in the ice? I don't know if you remember but it was all over the news for a while until it turned out to be a hoax. Only, since then, I've seen some aliens walking around that look a *lot* like that ice body. Maybe it wasn't a hoax, maybe that was a cover-up. So, maybe those aliens had some kind of virus. It went around the world and infected everything silently until, somehow, it activated and caused the violence and monsters and mutations.", + "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/left_for_dead_3.json b/data/json/npcs/Backgrounds/left_for_dead_3.json new file mode 100644 index 0000000000000..ddaaaf7ce79b0 --- /dev/null +++ b/data/json/npcs/Backgrounds/left_for_dead_3.json @@ -0,0 +1,74 @@ +[ + { + "id": "BGSS_LEFT_FOR_DEAD_3_STORY1", + "type": "talk_topic", + "dynamic_line": "Let's not dance around it: I joined the riots, at first. I don't really remember what I was thinking. I'd protested stuff like police brutality before, but this was different. I didn't make a sign and go down there expecting to chant and march, I grabbed a bat and went outside planning to fuck shit up. I've never felt so angry before. The riots had already been going on a while at that point, and to me, it just looked like the government trying to squash the people again.", + "responses": [ + { "text": "Those rioters had a reputation for being absolutely psycho.", "topic": "BGSS_LEFT_FOR_DEAD_3_STORY2" }, + { "text": "Not many people made it out of the riots alive.", "topic": "BGSS_LEFT_FOR_DEAD_3_STORY3" }, + { "text": "", "topic": "TALK_NONE" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "BGSS_LEFT_FOR_DEAD_3_STORY2", + "type": "talk_topic", + "dynamic_line": "Yeah, you're telling me. The rioters… they weren't even like humans, let alone protestors. Nothing like any protest I'd ever been in before. That didn't stop me. I joined them, and I was as bad as a bunch of them. Smashed windows, beat up bystanders, burnt cars. I remember ripping riot gear off a cop and… nevermind. I don't want to remember that.", + "responses": [ + { "text": "How did you survive?", "topic": "BGSS_LEFT_FOR_DEAD_3_STORY3" }, + { "text": "What made you come back?", "topic": "BGSS_LEFT_FOR_DEAD_3_STORY4" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "BGSS_LEFT_FOR_DEAD_3_STORY3", + "type": "talk_topic", + "dynamic_line": "At some point, I felt like I was waking up. It was around the time they were busting out those humvees with riot control turrets on top. Says something about my frame of mind that I don't even remember if I'd seen them before that point. Anyway I heard the gunfire going off and just kinda realized I was on the edges of a mob charging a heavily armed military emplacement. That's when I started seeing the mob for what it was, seeing the wild-eyed animals, even the zombies. I turned and ran.", + "responses": [ + { "text": "What made you come back?", "topic": "BGSS_LEFT_FOR_DEAD_3_STORY4" }, + { "text": "Where did you go from there?", "topic": "BGSS_LEFT_FOR_DEAD_3_STORY5" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "BGSS_LEFT_FOR_DEAD_3_STORY4", + "type": "talk_topic", + "dynamic_line": "I honestly don't know. I wonder if some of the others would have come back to their senses, given time. I don't think I'm anything special. Maybe a lot of them did, and just weren't on the edge of the crowd at the time. I'll tell you, almost as soon as I came back to myself, I could see some of the rioters looking at me like I was prey. I didn't stick around to see what would happen.", + "responses": [ + { "text": "Where did you go from there?", "topic": "BGSS_LEFT_FOR_DEAD_3_STORY5" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "BGSS_LEFT_FOR_DEAD_3_STORY5", + "type": "talk_topic", + "dynamic_line": "I knew the city pretty well. I went for an abandoned building I knew about, headed through a broken window, and holed up in there for a few days. I had a fair bit of stolen food and I just kept to myself. When things started to quiet down, I headed out, and here I am.", + "responses": [ + { "text": "Thanks for telling me all that. ", "topic": "TALK_FRIEND" }, + { "text": "Thanks for telling me all that. ", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_LEFT_FOR_DEAD_3_IDEAS1", + "type": "talk_topic", + "dynamic_line": "So, I remember the time leading up to the riots, same as anyone. Things were bad, there were some really awful crimes being reported in the news, and there was a lot of racial tension as usual from the way the cops were handling it. Then people started rioting, which isn't unusual, but it was weird the kind of places that the riots were starting in. Like, upper middle class neighbourhoods, midwestern small towns, things like that. Anyway, I joined the riots and I don't remember a lot of clear stuff after that.", + "responses": [ + { "text": "You joined the riots?", "topic": "BGSS_LEFT_FOR_DEAD_3_STORY1" }, + { + "text": "You must have some insights into what caused all this, then.", + "topic": "CWH_LEFT_FOR_DEAD_3_IDEAS2" + }, + { "text": "", "topic": "TALK_NONE" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_LEFT_FOR_DEAD_3_IDEAS2", + "type": "talk_topic", + "dynamic_line": "Kinda, I guess. I heard people blaming the riots on some kind of mind control drug, and frankly I'm not sure that's far off base. That's kinda what it felt like, although the whole time I really felt like myself. It wasn't until I snapped out of it that I realized how weird it was. That doesn't explain anything else though: the zombies, the monsters, all this stuff is way off base. Anything I've tried to guess just sounds like bad science fiction, like demonic curses or alien weapons kinda stuff.", + "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] + } +] diff --git a/data/json/npcs/Backgrounds/no_past_1.json b/data/json/npcs/Backgrounds/no_past_1.json index 825764c371ba9..aefc1e8f46f84 100644 --- a/data/json/npcs/Backgrounds/no_past_1.json +++ b/data/json/npcs/Backgrounds/no_past_1.json @@ -4,5 +4,20 @@ "type": "talk_topic", "dynamic_line": "Before ? Who cares about that? This is a new world, and yeah, it's pretty . It's the one we've got though, so let's not dwell in the past when we should be making the best of what little we have left.", "responses": [ { "text": "I can respect that.", "topic": "TALK_FRIEND" } ] + }, + { + "id": "CWH_NO_PAST_1_IDEAS1", + "type": "talk_topic", + "dynamic_line": "I don't really want to talk about the time before, you know?", + "responses": [ + { "text": "Keep it vague if you want, but please, can you fill me in a little?", "topic": "CWH_NO_PAST_1_IDEAS2" }, + { "text": "Never mind then.", "topic": "TALK_FRIEND" } + ] + }, + { + "id": "CWH_NO_PAST_1_IDEAS2", + "type": "talk_topic", + "dynamic_line": "I - fine. Drugs in the water, some kind of bioweapon I guess. You know how things were with China, they blamed it on them mostly. Made people violent and ugly. There were riots. People I cared about joined them, and I guess I'll never know why. Riots led to military and police action, which made the riots worse. People acted like animals, not just the rioters but everyone. Then came the monsters and nightmares walking the world like real Armageddon, and everyone died, and started coming back as monsters themselves. There's your story. If you want more, talk to someone else.", + "responses": [ { "text": "Thanks for that.", "topic": "TALK_FRIEND" } ] } ] diff --git a/data/json/npcs/Backgrounds/no_past_2.json b/data/json/npcs/Backgrounds/no_past_2.json index 28f8010581e62..be7c226dee10c 100644 --- a/data/json/npcs/Backgrounds/no_past_2.json +++ b/data/json/npcs/Backgrounds/no_past_2.json @@ -1,8 +1,14 @@ [ + { + "id": "CWH_NO_PAST_2_IDEAS1", + "type": "talk_topic", + "dynamic_line": "To be honest… I don't really remember. I remember vague details of my life before the world was like this, but itself? It's all a blur. I think something pretty bad must have happened to me. I remember a few things: snatches of violence, something about a woman killing her baby. I feel like I'd rather not remember.", + "responses": [ { "text": "Huh.", "topic": "TALK_FRIEND" } ] + }, { "id": "BGSS_NO_PAST_2_STORY1", "type": "talk_topic", - "dynamic_line": "To be honest… I don't really remember. I remember vague details of my life before the world was like this, but itself? It's all a blur. I don't know how I got where I am now, or how any of this happened. I think something pretty bad must have happened to me. Or maybe I was just hit in the head really hard. Or both. Both seems likely.", + "dynamic_line": "To be honest… I don't really remember. I remember vague details of my life before the world was like this, but itself? It's all a blur. I don't know how I got where I am now, or how any of this happened. I think something pretty bad must have happened to me. Or maybe I was just hit in the head really hard. Or both. Both seems likely. First thing I remember is seeing an already-read text on my phone from the emergency government broadcast system, saying the United States had fallen.", "responses": [ { "text": "Huh.", "topic": "TALK_FRIEND" } ] } ] diff --git a/data/json/npcs/Backgrounds/no_past_4.json b/data/json/npcs/Backgrounds/no_past_4.json index 29f6f55b30de8..d4194568a047a 100644 --- a/data/json/npcs/Backgrounds/no_past_4.json +++ b/data/json/npcs/Backgrounds/no_past_4.json @@ -33,5 +33,44 @@ "type": "talk_topic", "dynamic_line": "Listen. I said it clearly, and if you keep picking at it I'm gonna get mad. Who I was is gone. Dead. I don't give a shit about your 'healthy', don't ask again.", "responses": [ { "text": "What were you saying before?", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_NO_PAST_4_IDEAS1", + "type": "talk_topic", + "dynamic_line": "You're asking me what I think caused all this? It was all over the news. Some kind of Chinese bio-weapon. It's no different from the pandemic a few years back, but this time they got the formula right. Maybe too right. Doesn't matter anyway, I hear it got out on them and wiped them out too. Serves em right.", + "responses": [ + { "text": "Can you tell me more about what actually went down, though?", "topic": "CWH_NO_PAST_4_IDEAS2" }, + { + "condition": { "or": [ { "u_has_perception": 7 }, { "u_has_intelligence": 8 } ] }, + "text": "How does that explain all the other crazy stuff?", + "topic": "CWH_NO_PAST_4_SKEPTIC" + }, + { "text": "", "topic": "TALK_NONE" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_NO_PAST_4_IDEAS2", + "type": "talk_topic", + "dynamic_line": "Well, you know. First there were the riots from the mind-control drugs in the water. Except I think we can all see now it was actually a virus again. The military and the cops did their damndest to put it down but it got out of hand. Then the virus mutated and started bringing the dead back to life like in some kinda B-movie, and shit got really real. They let the big things loose, or they set them on us, I dunno. Huge unspeakable monsters… still makes me shudder to think of them. They obviously weren't built for combat though, and the military took 'em down fast.", + "responses": [ + { + "condition": { "or": [ { "u_has_perception": 7 }, { "u_has_intelligence": 8 } ] }, + "text": "How does that explain all the other crazy stuff?", + "topic": "CWH_NO_PAST_4_SKEPTIC" + }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_NO_PAST_4_SKEPTIC", + "type": "talk_topic", + "dynamic_line": "What? Of course it does. They started with a bioweapon and then it went full nuclear. Only the weapons we had now were a lot worse than H-bombs. Uncle Sam managed to beat back the really nasty stuff, but I guess it was with his dying breath.", + "responses": [ + { "text": "Can you tell me more about what actually went down, though?", "topic": "CWH_NO_PAST_4_IDEAS2" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] } ] diff --git a/data/json/npcs/Backgrounds/religious_1.json b/data/json/npcs/Backgrounds/religious_1.json index 5b3c7d9a11cde..93b87422af825 100644 --- a/data/json/npcs/Backgrounds/religious_1.json +++ b/data/json/npcs/Backgrounds/religious_1.json @@ -58,5 +58,21 @@ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_RELIGIOUS_1_IDEAS1", + "type": "talk_topic", + "dynamic_line": "It's clear enough, isn't it? That… that end, was the Rapture. I'm still here, and I still don't understand why, but I will keep Jesus in my heart through the Tribulations to come. When they're past, I'm sure He will welcome me into the Kingdom of Heaven. Or… or something along those lines.", + "responses": [ + { "text": "I meant more the actual events. What happened?", "topic": "CWH_RELIGIOUS_1_IDEAS2" }, + { "text": "", "topic": "TALK_FRIEND" }, + { "text": "", "topic": "TALK_DONE" } + ] + }, + { + "id": "CWH_RELIGIOUS_1_IDEAS2", + "type": "talk_topic", + "dynamic_line": "Oh. Well, I think it follows the good word in Revelations, if I remember right. I haven't talked to a preacher in a bit, you know. There were the plagues… the first one was the one a couple years ago, that big pandemic, that was when people started talking about the end being near. Then there was a plague of blood, or was it violence? That was the riots. Then the seas turned red with blood, that was from all the people being shot. Then a plague of fire, I remember that one for sure, that was when there were bombs and things going off everywhere to try to contain the riots. And then demons and monsters walked the Earth, and the dead rose from their graves, and finally the meek inherited. Clear as day.", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/religious_2.json b/data/json/npcs/Backgrounds/religious_2.json index 738627e08696d..608a264499165 100644 --- a/data/json/npcs/Backgrounds/religious_2.json +++ b/data/json/npcs/Backgrounds/religious_2.json @@ -4,5 +4,11 @@ "type": "talk_topic", "dynamic_line": "Same as anyone. I turned away from God, and now I'm paying the price. The Rapture has come, and I was left behind. So now, I guess I wander through Hell on Earth. I wish I'd paid more attention in Sunday School.", "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_RELIGIOUS_2_IDEAS1", + "type": "talk_topic", + "dynamic_line": "Well, I guess that was the Rapture. It didn't play out how I thought it would. They made me think it was gonna be a flash of light and then *poof*, everyone's gone. Instead it was messy and dirty. Riots in the streets, the military and police serving the Antichrist to gun down the people like - what was it my dad used to say - like wheat before the chaff? Then when we'd really showed our Sin, God came in with the real plagues. The dead started walking, getting up with machine gun holes in them to fight the military, and the military started turning on each other too. After that, the legions of Hell itself came out. Huge monsters, worse than anything I'd ever imagined, just tore through the cities ripping everything to shreds. Then they started dying off as quick as they'd arrived, and we were left trying to run and hide from the undead. A day or two later the power started going out.", + "responses": [ { "text": "", "topic": "TALK_FRIEND" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/wedding_1.json b/data/json/npcs/Backgrounds/wedding_1.json index 6a15b083266e4..8eb2f0c19c0e4 100644 --- a/data/json/npcs/Backgrounds/wedding_1.json +++ b/data/json/npcs/Backgrounds/wedding_1.json @@ -33,6 +33,7 @@ { "id": "BGSS_WEDDING_1_CALM", "type": "talk_topic", + "//": "Some day it would be nice to have a demographically selected chance of this not being heteronormative", "dynamic_line": { "npc_female": true, "yes": "Well, I have this weird hope. It's probably stupid, but I saw my fiancé peel out of there with his sister - my maid of honor - in her pickup truck as things went bad. So, until I run into them again one way or another, I'm just gonna keep on believing they're out there, doing well. That's more than most of us have.", @@ -42,5 +43,11 @@ { "text": "What were you saying before that?", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] + }, + { + "id": "CWH_WEDDING_1_IDEAS1", + "type": "talk_topic", + "dynamic_line": "I'll be honest with you, I was paying more attention to wedding planning than current events leading up to things. I knew there were riots going on, but they were out of town. Even when they got closer to home, I tried to ignore them so we could have our big day. After the zombies started coming, though, well that's when stuff got really weird. When I was running from the wedding I swear I saw the sky rip open and monsters fly out of the hole, like something out of Independence Day. I don't know what it all was, it looked like black magic or something.", + "responses": [ { "text": "", "topic": "TALK_NONE" }, { "text": "", "topic": "TALK_DONE" } ] } ] diff --git a/data/json/npcs/Backgrounds/whathappened_table_of_contents.json b/data/json/npcs/Backgrounds/whathappened_table_of_contents.json new file mode 100644 index 0000000000000..5f7efe6ebc643 --- /dev/null +++ b/data/json/npcs/Backgrounds/whathappened_table_of_contents.json @@ -0,0 +1,111 @@ +[ + { + "id": "TALK_FRIEND_CONVERSATION", + "type": "talk_topic", + "//": "the 'CWH' prefix stands for 'Cataclysm: what happened', and refers to stories where NPCs answer your questions about what they think happened in the cataclysm.", + "responses": [ + { + "text": "", + "topic": "CWH_CONFUSED_1_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Confused_1" } + }, + { + "text": "", + "topic": "CWH_NO_PAST_1_IDEAS1", + "condition": { "npc_has_trait": "BGSS_No_Past_1" } + }, + { + "text": "", + "topic": "CWH_NO_PAST_2_IDEAS1", + "condition": { "npc_has_trait": "BGSS_No_Past_2" } + }, + { + "text": "", + "topic": "BGSS_NO_PAST_3_STORY1", + "//": "No_past_3'S amnesia story would be the same for either of these questions.", + "condition": { "npc_has_trait": "BGSS_No_Past_3" } + }, + { + "text": "", + "topic": "CWH_NO_PAST_4_IDEAS1", + "condition": { "npc_has_trait": "BGSS_No_Past_4" } + }, + { + "text": "", + "topic": "BGSS_NO_PAST_5_STORY1", + "//": "No_past_5'S unwillingness to talk about it would be the same for either of these questions.", + "condition": { "npc_has_trait": "BGSS_No_Past_5" } + }, + { + "text": "", + "topic": "CWH_RELIGIOUS_1_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Religious_1" } + }, + { + "text": "", + "topic": "CWH_RELIGIOUS_2_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Religious_2" } + }, + { + "text": "", + "topic": "CWH_DREAMER_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Dreamer" } + }, + { + "text": "", + "topic": "CWH_WEDDING_1_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Wedding_1" } + }, + { + "text": "", + "topic": "CWH_EVACUEE_1_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Evacuee_1" } + }, + { + "text": "", + "topic": "CWH_EVACUEE_2_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Evacuee_2" } + }, + { + "text": "", + "topic": "CWH_EVACUEE_3_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Evacuee_3" } + }, + { + "text": "", + "topic": "CWH_EVACUEE_4_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Evacuee_4" } + }, + { + "text": "", + "topic": "CWH_EVACUEE_5_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Evacuee_5" } + }, + { + "text": "", + "topic": "CWH_EVACUEE_6_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Evacuee_6" } + }, + { + "text": "", + "topic": "CWH_FEMA_EVACUEE_1_IDEAS1", + "condition": { "npc_has_trait": "BGSS_FEMA_Evacuee_1" } + }, + { + "text": "", + "topic": "CWH_LEFT_FOR_DEAD_1_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Left_for_Dead_1" } + }, + { + "text": "", + "topic": "CWH_LEFT_FOR_DEAD_2_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Left_for_Dead_2" } + }, + { + "text": "", + "topic": "CWH_LEFT_FOR_DEAD_3_IDEAS1", + "condition": { "npc_has_trait": "BGSS_Left_for_Dead_3" } + } + ] + } +] diff --git a/data/json/npcs/talk_tags.json b/data/json/npcs/talk_tags.json index 6f8b7f3142d7c..64a791efe598e 100644 --- a/data/json/npcs/talk_tags.json +++ b/data/json/npcs/talk_tags.json @@ -1147,6 +1147,16 @@ "Was it rough surviving thus far?" ] }, + { + "type": "snippet", + "category": "", + "//": "avatar response to an NPC that opens up their theories about what the cataclysm was.", + "text": [ + "How do you think we ended up here? What even happened?", + "What's going on? Like, big picture, what the hell happened?", + "Have you heard anything about how the apocalypse came about?" + ] + }, { "type": "snippet", "category": "", From 9e55433bae138cf6a1b8864d4ba1f7fc8b529cfc Mon Sep 17 00:00:00 2001 From: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> Date: Tue, 30 Jun 2020 00:08:06 -0700 Subject: [PATCH 174/206] Adds Exodii monster stat blocks (no spawning yet) (#41446) --- data/json/harvest.json | 33 ++++ data/json/items/ammo/exodii.json | 10 ++ data/json/items/ammo_types.json | 6 + data/json/items/corpses/dead_exodii.json | 70 ++++++++ data/json/items/gun/exodii.json | 66 +++++++ data/json/items/magazine/exodii.json | 40 +++++ data/json/items/resources/alien.json | 91 ++++++++++ data/json/monster_factions.json | 7 + data/json/monsters/cyborgs.json | 127 +++++++++++++ data/json/monsters/drones.json | 56 ++++++ data/json/monsters/turrets.json | 47 +++++ data/json/recipes/recipe_deconstruction.json | 180 ++++++++++++++++++- data/json/species.json | 6 + 13 files changed, 738 insertions(+), 1 deletion(-) create mode 100644 data/json/items/ammo/exodii.json create mode 100644 data/json/items/corpses/dead_exodii.json create mode 100644 data/json/items/gun/exodii.json create mode 100644 data/json/items/magazine/exodii.json diff --git a/data/json/harvest.json b/data/json/harvest.json index ff13b39e5fea7..8f8260e570ff7 100644 --- a/data/json/harvest.json +++ b/data/json/harvest.json @@ -88,6 +88,39 @@ { "drop": "scrap", "base_num": [ 1, 5 ], "scale_num": [ 0.3, 0.7 ], "max": 12, "type": "bone" } ] }, + { + "id": "mon_zomborg", + "type": "harvest", + "message": "You search for any salvageable hardware in what's left of this flesh and metal monster", + "entries": [ + { + "drop": "bio_power_storage", + "type": "bionic", + "flags": [ "FILTHY", "NO_STERILE", "NO_PACKED" ], + "faults": [ "fault_bionic_salvaged" ] + }, + { + "drop": "bionics_common", + "type": "bionic_group", + "flags": [ "FILTHY", "NO_STERILE", "NO_PACKED" ], + "faults": [ "fault_bionic_salvaged" ] + }, + { + "drop": "bionics", + "type": "bionic_group", + "flags": [ "FILTHY", "NO_STERILE", "NO_PACKED" ], + "faults": [ "fault_bionic_salvaged" ], + "base_num": [ 0, 1 ] + }, + { "drop": "meat_tainted", "type": "flesh", "mass_ratio": 0.1 }, + { "drop": "fat_tainted", "type": "flesh", "mass_ratio": 0.04 }, + { "drop": "bone_tainted", "type": "bone", "mass_ratio": 0.05 }, + { "drop": "sinew", "type": "bone", "mass_ratio": 0.001 }, + { "drop": "cable", "base_num": [ 1, 3 ], "scale_num": [ 0.2, 0.6 ], "max": 8, "type": "flesh" }, + { "drop": "e_scrap", "base_num": [ 1, 5 ], "scale_num": [ 0.3, 0.7 ], "max": 12, "type": "bone" }, + { "drop": "scrap", "base_num": [ 1, 5 ], "scale_num": [ 0.3, 0.7 ], "max": 12, "type": "bone" } + ] + }, { "id": "mammal_tiny", "//": "animals so tiny they don't drop chunks of meat", diff --git a/data/json/items/ammo/exodii.json b/data/json/items/ammo/exodii.json new file mode 100644 index 0000000000000..ba09a03a8e62d --- /dev/null +++ b/data/json/items/ammo/exodii.json @@ -0,0 +1,10 @@ +[ + { + "id": "123ln", + "type": "AMMO", + "copy-from": "3006", + "name": { "str": "12.3ln round" }, + "description": "The 12.3ln cartridge was introduced in Romania in the wake of the second Carpathian conflict. The PA md. 71 rifle using this ammunition rapidly gained popularity in the Eastern Union, and from there, the world. Due to this, the 12.3ln rapidly became the standard combat round in the Eurasian sphere. It was easily scavenged and stockpiled by the Exodii. To you, it looks and feels quite similar to a .30-06 Springfield cartridge, but with a slightly sharper taper.", + "ammo_type": "123ln" + } +] diff --git a/data/json/items/ammo_types.json b/data/json/items/ammo_types.json index 533ea1f065132..58ea87677cfcc 100644 --- a/data/json/items/ammo_types.json +++ b/data/json/items/ammo_types.json @@ -652,5 +652,11 @@ "id": "300blk", "name": ".300 AAC Blackout", "default": "300blk" + }, + { + "type": "ammunition_type", + "id": "123ln", + "name": "12.3ln cartridge", + "default": "123ln" } ] diff --git a/data/json/items/corpses/dead_exodii.json b/data/json/items/corpses/dead_exodii.json new file mode 100644 index 0000000000000..e9ab4538932a2 --- /dev/null +++ b/data/json/items/corpses/dead_exodii.json @@ -0,0 +1,70 @@ +[ + { + "type": "GENERIC", + "id": "broken_exodii_worker", + "symbol": ",", + "color": "light_gray", + "name": "broken exodii worker", + "category": "other", + "description": "A broken exodii worker. It's possible it could be gutted for parts.", + "price": 1000, + "material": [ "steel" ], + "volume": "119 L", + "weight": "221 kg", + "bashing": 20, + "cutting": 15, + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + }, + { + "type": "GENERIC", + "id": "broken_exodii_quad", + "symbol": ",", + "color": "light_gray", + "name": "broken exodii quadruped", + "category": "other", + "description": "A broken exodii walker. Still looks intimidating despite being permanently inoperative, possibly due to the sheer size and mass. Could be gutted for parts.", + "price": 1000, + "material": [ "steel" ], + "volume": "410 L", + "weight": "498 kg", + "bashing": 20, + "cutting": 15, + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + }, + { + "type": "GENERIC", + "id": "broken_exodii_turret", + "symbol": ",", + "color": "yellow", + "name": "broken exodii turret", + "category": "other", + "description": "A broken exodii turret. Still looks intimidating despite being permanently inoperative, possibly due to the sheer size and mass. Could be gutted for parts.", + "price": 1000, + "material": [ "steel" ], + "weight": "206 kg", + "volume": "105 L", + "bashing": 20, + "cutting": 15, + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + }, + { + "type": "GENERIC", + "id": "broken_exodii_sniper_drone", + "symbol": ",", + "color": "yellow", + "name": "broken exodii balloon-drone", + "category": "other", + "description": "A broken balloon drone. The balloon has been shredded, but most of the chassis is still intact. Could be gutted for parts.", + "price": 1000, + "material": [ "steel" ], + "volume": "70 L", + "weight": "150 kg", + "bashing": 20, + "cutting": 15, + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + } +] diff --git a/data/json/items/gun/exodii.json b/data/json/items/gun/exodii.json new file mode 100644 index 0000000000000..8342b7e18ef4b --- /dev/null +++ b/data/json/items/gun/exodii.json @@ -0,0 +1,66 @@ +[ + { + "id": "pamd68", + "looks_like": "ar15", + "type": "GUN", + "reload_noise_volume": 10, + "name": { "str": "PA md. 68 Battle Rifle" }, + "description": "The most popular gun to use the 12.3ln cartridge was, of course, the PA md. 71. Its predecessor, the md. 68, was viewed by many as a sort of failure: although it was reliable and powerful, it was too heavy to be used as a good infantry weapon, and not really heavy enough to be a good support gun. Enough were made, though, that during the zombie apocalypse, it gained a great deal of resurgent popularity as a light emplacement gun that used readily available ammunition. It perfectly served the purposes of the Exodii, who had far less concern about its unwieldiness.", + "weight": "9480 g", + "volume": "2800 ml", + "price": 350000, + "price_postapoc": 4000, + "to_hit": -3, + "bashing": 12, + "material": [ "steel", "aluminum" ], + "symbol": "(", + "color": "dark_gray", + "ammo": [ "123ln" ], + "skill": "rifle", + "dispersion": 190, + "durability": 9, + "min_cycle_recoil": 3820, + "modes": [ [ "DEFAULT", "auto", 2 ], [ "AUTO", "auto", 5 ] ], + "barrel_length": "1200 ml", + "faults": [ "fault_gun_blackpowder", "fault_gun_dirt", "fault_gun_chamber_spent" ], + "pocket_data": [ + { + "pocket_type": "MAGAZINE_WELL", + "holster": true, + "max_contains_volume": "20 L", + "max_contains_weight": "20 kg", + "item_restriction": [ "exodiiBRmag" ] + } + ] + }, + { + "id": "pamd71z", + "copy-from": "rifle_manual", + "looks_like": "ar15", + "type": "GUN", + "name": { "str": "PA md. 71 zombie hunting rifle" }, + "description": "This extremely popular Romanian assault rifle, made famous in the third Carpachian War, has been redesigned slightly by the Exodii to serve as a sniper weapon. It is well suited to precision shots against high-priority targets. This modified design fires an extremely rapid 5-shot burst, with the goal of shredding the target and preventing revivification.", + "weight": "3910 g", + "volume": "3 L", + "price": 80000, + "price_postapoc": 3250, + "to_hit": -1, + "bashing": 12, + "material": [ "steel", "aluminum" ], + "color": "light_gray", + "ammo": [ "123ln" ], + "dispersion": 100, + "durability": 8, + "modes": [ [ "DEFAULT", "auto", 5 ] ], + "barrel_length": "250 ml", + "pocket_data": [ + { + "pocket_type": "MAGAZINE_WELL", + "holster": true, + "max_contains_volume": "20 L", + "max_contains_weight": "20 kg", + "item_restriction": [ "exodiiminimag" ] + } + ] + } +] diff --git a/data/json/items/magazine/exodii.json b/data/json/items/magazine/exodii.json new file mode 100644 index 0000000000000..446d8e8129d25 --- /dev/null +++ b/data/json/items/magazine/exodii.json @@ -0,0 +1,40 @@ +[ + { + "id": "exodiiminimag", + "looks_like": "garandclip", + "type": "MAGAZINE", + "name": { "str": "PA Md. 71 Exodii 12.3ln magazine" }, + "description": "A small, sleek magazine based on a classic PA Md. 71 clip, with some redesigns by the Exodii for better use in lighter-than-air drones. Its small size is less appropriate for ground-fighting of hordes of zombies, as it is a bit inconvenient to reload.", + "weight": "30 g", + "volume": "250 ml", + "price": 600, + "price_postapoc": 50, + "material": [ "steel" ], + "symbol": "#", + "color": "light_gray", + "ammo_type": [ "123ln" ], + "capacity": 10, + "reload_time": 220, + "flags": [ "MAG_COMPACT" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "123ln": 10 } } ] + }, + { + "id": "exodiiBRmag", + "looks_like": "stanag30", + "type": "MAGAZINE", + "name": { "str": "PA Md. 68 Exodii 12.3ln magazine" }, + "description": "An unreasonably large magazine for the already heavy PA Md. 68 battle rifle, custom designed and manufactured by the Exodii.", + "weight": "600 g", + "volume": "1250 ml", + "price": 10500, + "price_postapoc": 450, + "material": [ "steel" ], + "symbol": "#", + "color": "light_gray", + "ammo_type": [ "123ln" ], + "capacity": 60, + "reload_time": 180, + "flags": [ "MAG_BULKY" ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "123ln": 60 } } ] + } +] diff --git a/data/json/items/resources/alien.json b/data/json/items/resources/alien.json index 34217f32a970e..67e06a51fab9e 100644 --- a/data/json/items/resources/alien.json +++ b/data/json/items/resources/alien.json @@ -28,5 +28,96 @@ "symbol": "0", "color": "light_blue", "flags": [ "NO_SALVAGE" ] + }, + { + "type": "GENERIC", + "id": "exodii_chassis", + "name": { "str_sp": "Exodii chassis" }, + "description": "This roughly hexagonal frame and associated bodywork looks like it was constructed as a single monolithic piece. The fitting holes and attachments are extremely durable, despite showing signs of heavy wear and repair. The structure is versatile, and could probably be engineered to serve a number of different heavy combat roles.", + "symbol": "c", + "color": "light_gray", + "weight": "500 kg", + "volume": "700 L", + "price": 1000000, + "material": [ "steel" ], + "category": "spare_parts" + }, + { + "type": "GENERIC", + "id": "exodii_drone_chassis", + "name": { "str_sp": "Exodii drone chassis" }, + "description": "This small, roughly hexagonal frame and associated bodywork looks like it was constructed as a single monolithic piece. The fitting holes and attachments are extremely durable, despite showing signs of heavy wear and repair. The structure is versatile, and could probably be engineered to serve a number of different heavy combat roles.", + "symbol": "c", + "color": "light_gray", + "weight": "40 kg", + "volume": "150 L", + "price": 100000, + "material": [ "steel", "aluminum" ], + "category": "spare_parts" + }, + { + "type": "GENERIC", + "id": "cyborg_matrix", + "name": { "str": "cybernetic neural matrix", "str_pl": "cybernetic neural matrices" }, + "description": "A series of tanks and tubes with ports for fluids, electricity, and input and output, this complex arrangement is made to house a brain and spine and the most difficult to replace organs for keeping them alive.", + "symbol": "m", + "color": "light_blue", + "weight": "20 kg", + "volume": "10 L", + "price": 10000, + "material": [ "plastic", "aluminum", "steel" ], + "category": "spare_parts" + }, + { + "type": "GENERIC", + "id": "exodii_computer", + "name": { "str": "unfamiliar electronic thingy" }, + "description": "The wiring and general shape suggest to you that this is a computer, or at least some sort of electronic device, but what it is and what role it serves is lost on you. It's heavy and sturdy in construction.", + "symbol": "p", + "color": "dark_gray", + "weight": "10 kg", + "volume": "10 L", + "price": 10000, + "material": [ "plastic", "steel" ], + "category": "spare_parts" + }, + { + "type": "GENERIC", + "id": "exodii_module", + "name": { "str": "inscribed metal plates" }, + "description": "This device looks electronic, but is unfamiliar. It is a series of tightly fitted coppery-looking rings, set concentrically. Wires run from each ring to an axis in the middle.", + "symbol": "i", + "color": "dark_gray", + "weight": "1 kg", + "volume": "1 L", + "price": 1000, + "material": [ "copper", "steel" ], + "category": "spare_parts" + }, + { + "type": "GENERIC", + "id": "exodii_sensor", + "name": { "str": "cybernetic sensor" }, + "description": "From the large glassy eye - the size of a small dinner plate - in the front, you deduce this is some sort of camera. None of the inner workings make any sense to you nor resemble any camera you've seen before.", + "symbol": ")", + "color": "blue", + "weight": "5 kg", + "volume": "3 L", + "price": 20000, + "material": [ "steel", "plastic" ], + "category": "spare_parts" + }, + { + "type": "GENERIC", + "id": "exodii_motor", + "name": { "str": "rotary device" }, + "description": "You assume from the coils of coppery wire and the protruding piston that this is some sort of motor or generator, but the design doesn't look similar to anything you've seen before, and you can't figure out how to get it to work.", + "symbol": "o", + "color": "blue", + "weight": "2 kg", + "volume": "500 ml", + "price": 2000, + "material": [ "steel", "copper" ], + "category": "spare_parts" } ] diff --git a/data/json/monster_factions.json b/data/json/monster_factions.json index 70a1991aad9d6..510b9501d9a28 100644 --- a/data/json/monster_factions.json +++ b/data/json/monster_factions.json @@ -71,6 +71,13 @@ "base_faction": "bot", "neutral": [ "cop_bot", "military", "utility_bot", "science", "small_animal" ] }, + { + "type": "MONSTER_FACTION", + "name": "exodii", + "neutral": [ "bot" ], + "by_mood": [ "animal", "nether" ], + "hate": [ "zombie", "fungus", "cult", "triffid" ] + }, { "type": "MONSTER_FACTION", "name": "science", diff --git a/data/json/monsters/cyborgs.json b/data/json/monsters/cyborgs.json index 37a7a628f462b..c344640b827d5 100644 --- a/data/json/monsters/cyborgs.json +++ b/data/json/monsters/cyborgs.json @@ -85,5 +85,132 @@ "PATH_AVOID_DANGER_2", "PRIORITIZE_TARGETS" ] + }, + { + "id": "mon_exodii_worker", + "type": "MONSTER", + "name": "Exodii worker", + "description": "This is a mostly humanoid robot equipped with various construction tools.", + "default_faction": "exodii", + "volume": "119 L", + "weight": "221 kg", + "species": [ "CYBORG" ], + "bodytype": "human", + "material": [ "steel" ], + "speed": 110, + "symbol": "e", + "morale": 20, + "aggression": -20, + "hp": 125, + "color": "light_gray", + "melee_skill": 8, + "melee_dice": 2, + "melee_dice_sides": 6, + "melee_cut": 12, + "armor_bash": 12, + "armor_cut": 28, + "vision_day": 50, + "vision_night": 10, + "revert_to_itype": "e_scrap", + "anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT" ], + "death_drops": { "subtype": "collection", "groups": [ [ "robots", 80 ] ] }, + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "HEARS", "GOODHEARING", "NOHEAD", "NO_BREATHE", "PATH_AVOID_DANGER_2", "PRIORITIZE_TARGETS", "HIT_AND_RUN" ] + }, + { + "id": "mon_exodii_quad", + "type": "MONSTER", + "name": "Exodii quadruped", + "description": "This enormous quadrupedal robot seems to be cobbled together from parts, most of them unfamiliar to you. It moves with a heavy, oddly graceful gait, its footsteps leaving shallow craters behind. It bristles with an arsenal of weaponry, but doesn't seem in a particular rush to target you.", + "default_faction": "exodii", + "volume": "413 L", + "weight": "517 kg", + "species": [ "CYBORG" ], + "bodytype": "dog", + "material": [ "steel" ], + "speed": 110, + "symbol": "M", + "aggression": -5, + "morale": 70, + "hp": 240, + "color": "light_gray", + "melee_skill": 10, + "melee_dice": 3, + "melee_dice_sides": 8, + "melee_cut": 12, + "armor_bash": 42, + "armor_cut": 48, + "vision_day": 50, + "vision_night": 20, + "revert_to_itype": "e_scrap", + "starting_ammo": { "123ln": 3000 }, + "anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT" ], + "special_attacks": [ + [ "FLAMETHROWER", 10 ], + { + "type": "gun", + "cooldown": 1, + "move_cost": 150, + "gun_type": "pamd68", + "ammo_type": "123ln", + "fake_skills": [ [ "gun", 5 ], [ "rifle", 8 ] ], + "fake_dex": 12, + "ranges": [ [ 0, 41, "DEFAULT" ] ], + "require_targeting_npc": true, + "require_targeting_monster": true, + "laser_lock": false, + "targeting_cost": 400, + "targeting_timeout_extend": -10, + "no_ammo_sound": "a chk!" + } + ], + "death_drops": { "subtype": "collection", "groups": [ [ "robots", 80 ] ] }, + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "HEARS", "GOODHEARING", "NOHEAD", "NO_BREATHE", "PATH_AVOID_DANGER_2", "PRIORITIZE_TARGETS", "HIT_AND_RUN" ] + }, + { + "id": "mon_zomborg", + "type": "MONSTER", + "name": "zomborg", + "description": "A mix of dead human and even deader technology, this twisted mess of steel and flesh moves like a puppet in the hands of an angry toddler. Its robotic components seem to have shut down, and new bands of flesh have wrapped around them, tugging and pulling them in awkward directions. Bits of metallic skeleton and armor plating jut from its decaying flesh.", + "default_faction": "zombie", + "looks_like": "mon_exodii_worker", + "volume": "120 L", + "weight": "200 kg", + "species": [ "CYBORG", "ZOMBIE" ], + "bodytype": "human", + "material": [ "steel", "flesh" ], + "speed": 60, + "symbol": "Z", + "morale": 100, + "aggression": 100, + "hp": 125, + "color": "light_gray", + "melee_skill": 3, + "melee_dice": 2, + "melee_dice_sides": 6, + "melee_cut": 12, + "armor_bash": 12, + "armor_cut": 28, + "vision_night": 3, + "special_attacks": [ { "type": "bite", "cooldown": 5 }, [ "GRAB", 7 ], [ "scratch", 20 ] ], + "death_drops": { "subtype": "collection", "groups": [ [ "robots", 80 ] ] }, + "death_function": [ "FIREBALL" ], + "harvest": "mon_zomborg", + "flags": [ + "SEES", + "HEARS", + "SMELLS", + "STUMBLES", + "WARM", + "BASHES", + "GROUP_BASH", + "POISON", + "BLEED", + "NO_BREATHE", + "REVIVES", + "PUSH_MON", + "FILTHY" + ] } ] diff --git a/data/json/monsters/drones.json b/data/json/monsters/drones.json index 3f93e922992a4..e902291d66fe5 100644 --- a/data/json/monsters/drones.json +++ b/data/json/monsters/drones.json @@ -129,5 +129,61 @@ "revert_to_itype": "bot_mininuke_hack", "starting_ammo": { "mininuke": 1 }, "special_attacks": [ [ "KAMIKAZE", 0 ] ] + }, + { + "abstract": "exodii_sniper_drone", + "type": "MONSTER", + "name": { "str": "balloon sniper-drone" }, + "description": "This unusual contraption looks like a combination of a weather balloon and a quadcopter. Beneath the crude box containing its components hangs a small articulated rig wielding an integrated rifle. Its propellers flicker to life briefly, then shut down again, keeping it mostly stationary despite the air currents. It looks capable of hanging in the air for quite a long time before running out of power.", + "default_faction": "exodii", + "species": [ "ROBOT" ], + "volume": "5000 L", + "weight": "150 kg", + "//": "weight and dimensions based on the approx. size of a Griff 350, which is a commercial cargo-hauling quadcopter. Then I added a large balloon on top.", + "hp": 20, + "speed": 70, + "armor_bash": 4, + "armor_cut": 3, + "material": [ "aluminum", "steel" ], + "symbol": "e", + "color": "light_green", + "aggression": -20, + "morale": 70, + "vision_day": 50, + "vision_night": 20, + "starting_ammo": { "123ln": 10 }, + "anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT" ], + "special_attacks": [ + { + "type": "gun", + "cooldown": 1, + "move_cost": 350, + "gun_type": "pamd71z", + "ammo_type": "123ln", + "fake_skills": [ [ "gun", 6 ], [ "rifle", 9 ] ], + "fake_dex": 12, + "ranges": [ [ 0, 50, "DEFAULT" ] ], + "require_targeting_npc": true, + "require_targeting_monster": true, + "laser_lock": true, + "targeting_cost": 700, + "targeting_timeout_extend": -10, + "no_ammo_sound": "tick!" + } + ], + "death_drops": { "subtype": "collection", "groups": [ [ "robots", 80 ] ] }, + "death_function": [ "BROKEN" ], + "flags": [ + "SEES", + "HEARS", + "FLIES", + "NOHEAD", + "ELECTRONIC", + "NO_BREATHE", + "INTERIOR_AMMO", + "PATH_AVOID_DANGER_2", + "PRIORITIZE_TARGETS", + "HIT_AND_RUN" + ] } ] diff --git a/data/json/monsters/turrets.json b/data/json/monsters/turrets.json index 2806aa27da25b..0b2ba2b7bfd0f 100644 --- a/data/json/monsters/turrets.json +++ b/data/json/monsters/turrets.json @@ -331,5 +331,52 @@ "death_function": [ "BROKEN" ], "death_drops": { "groups": [ [ "turret_speaker", 1 ] ] }, "flags": [ "SEES", "NOHEAD", "ELECTRONIC", "IMMOBILE", "NO_BREATHE" ] + }, + { + "id": "mon_exodii_turret", + "type": "MONSTER", + "name": "upcycled turret", + "description": "This hefty turret appears to be bolted together out of various scraps of technology, many of them extremely foreign looking. It is equipped with a hefty looking machine gun.", + "default_faction": "exodii", + "weight": "206 kg", + "volume": "105 L", + "hp": 240, + "speed": 100, + "material": [ "steel" ], + "symbol": "2", + "color": "light_gray", + "aggression": -10, + "morale": 100, + "armor_bash": 24, + "armor_cut": 26, + "vision_day": 50, + "vision_night": 20, + "luminance": 1, + "starting_ammo": { "123ln": 3000 }, + "anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT" ], + "special_attacks": [ + { + "type": "gun", + "cooldown": 1, + "move_cost": 150, + "gun_type": "pamd68", + "ammo_type": "123ln", + "fake_skills": [ [ "gun", 5 ], [ "rifle", 8 ] ], + "fake_dex": 12, + "ranges": [ [ 0, 41, "DEFAULT" ] ], + "require_targeting_npc": true, + "require_targeting_monster": true, + "laser_lock": false, + "targeting_cost": 400, + "targeting_timeout_extend": -10, + "targeting_sound": "\"Beep.\"", + "targeting_volume": 20, + "no_ammo_sound": "a chk!" + } + ], + "special_when_hit": [ "RETURN_FIRE", 100 ], + "death_drops": { "subtype": "collection", "groups": [ [ "robots", 80 ] ] }, + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "HEARS", "GOODHEARING", "NOHEAD", "IMMOBILE", "NO_BREATHE", "PRIORITIZE_TARGETS", "INTERIOR_AMMO" ] } ] diff --git a/data/json/recipes/recipe_deconstruction.json b/data/json/recipes/recipe_deconstruction.json index 28b875b32c929..f783464cbbb6d 100644 --- a/data/json/recipes/recipe_deconstruction.json +++ b/data/json/recipes/recipe_deconstruction.json @@ -1158,6 +1158,183 @@ [ [ "storage_battery", 1 ] ] ] }, + { + "result": "broken_exodii_worker", + "type": "uncraft", + "skill_used": "electronics", + "skills_required": [ [ "mechanics", 9 ], [ "computer", 9 ] ], + "difficulty": 9, + "time": "8 h", + "using": [ [ "soldering_standard", 30 ], [ "welding_standard", 20 ] ], + "qualities": [ + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "WRENCH", "level": 2 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "HAMMER", "level": 3 }, + { "id": "SAW_M", "level": 1 } + ], + "components": [ + [ [ "android_legs", 1 ] ], + [ [ "android_chassis", 1 ] ], + [ [ "android_arms", 1 ] ], + [ [ "self_monitoring_module", 1 ] ], + [ [ "exodii_sensor", 1 ] ], + [ [ "exodii_computer", 1 ] ], + [ [ "exodii_module", 2 ] ], + [ [ "exodii_motor", 6 ] ], + [ [ "power_supply", 3 ] ], + [ [ "amplifier", 1 ] ], + [ [ "e_scrap", 10 ] ], + [ [ "clockworks", 1 ] ], + [ [ "steel_chunk", 2 ] ], + [ [ "scrap", 2 ] ], + [ [ "cyborg_matrix", 1 ] ], + [ [ "storage_battery", 1 ] ], + [ [ "plut_cell", 2 ] ], + [ [ "steel_armor", 2 ] ], + [ [ "sheet_metal_small", 6 ] ], + [ [ "motor", 1 ] ], + [ [ "cable", 2 ] ], + [ [ "solder_wire", 20 ] ] + ] + }, + { + "result": "broken_exodii_quad", + "type": "uncraft", + "skill_used": "electronics", + "skills_required": [ [ "mechanics", 9 ], [ "computer", 9 ] ], + "difficulty": 9, + "time": "10 h", + "using": [ [ "soldering_standard", 60 ], [ "welding_standard", 30 ] ], + "qualities": [ + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "WRENCH", "level": 2 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "HAMMER", "level": 3 }, + { "id": "SAW_M", "level": 1 } + ], + "components": [ + [ [ "sensor_module", 1 ] ], + [ [ "spidery_legs_big", 2 ] ], + [ [ "exodii_chassis", 1 ] ], + [ [ "targeting_module", 1 ] ], + [ [ "self_monitoring_module", 1 ] ], + [ [ "exodii_sensor", 2 ] ], + [ [ "exodii_computer", 1 ] ], + [ [ "exodii_module", 2 ] ], + [ [ "exodii_motor", 8 ] ], + [ [ "gun_module", 3 ] ], + [ [ "flamethrower", 1 ] ], + [ [ "tazer", 1 ] ], + [ [ "m4a1", 1 ] ], + [ [ "pamd68", 1 ] ], + [ [ "power_supply", 20 ] ], + [ [ "amplifier", 5 ] ], + [ [ "e_scrap", 50 ] ], + [ [ "clockworks", 4 ] ], + [ [ "steel_chunk", 10 ] ], + [ [ "scrap", 10 ] ], + [ [ "cyborg_matrix", 1 ] ], + [ [ "storage_battery", 2 ] ], + [ [ "plut_cell", 4 ] ], + [ [ "mil_plate", 2 ] ], + [ [ "hard_steel_armor", 10 ] ], + [ [ "sheet_metal_small", 40 ] ], + [ [ "motor", 1 ] ], + [ [ "cable", 10 ] ], + [ [ "omnicamera", 1 ] ], + [ [ "betavoltaic", 20 ] ], + [ [ "solder_wire", 20 ] ] + ] + }, + { + "result": "broken_exodii_turret", + "type": "uncraft", + "skill_used": "electronics", + "skills_required": [ [ "mechanics", 9 ], [ "computer", 9 ] ], + "difficulty": 9, + "time": "8 h", + "using": [ [ "soldering_standard", 60 ], [ "welding_standard", 30 ] ], + "qualities": [ + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "WRENCH", "level": 2 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "HAMMER", "level": 3 }, + { "id": "SAW_M", "level": 1 } + ], + "components": [ + [ [ "turret_chassis", 1 ] ], + [ [ "identification_module", 1 ] ], + [ [ "self_monitoring_module", 1 ] ], + [ [ "exodii_computer", 1 ] ], + [ [ "exodii_module", 3 ] ], + [ [ "exodii_sensor", 2 ] ], + [ [ "exodii_motor", 4 ] ], + [ [ "gun_module", 2 ] ], + [ [ "targeting_module", 1 ] ], + [ [ "pamd68", 1 ] ], + [ [ "flamethrower", 1 ] ], + [ [ "storage_battery", 1 ] ], + [ [ "plut_cell", 4 ] ], + [ [ "power_supply", 10 ] ], + [ [ "amplifier", 3 ] ], + [ [ "e_scrap", 30 ] ], + [ [ "clockworks", 6 ] ], + [ [ "steel_chunk", 10 ] ], + [ [ "scrap", 15 ] ], + [ [ "mil_plate", 2 ] ], + [ [ "hard_steel_armor", 6 ] ], + [ [ "sheet_metal_small", 40 ] ], + [ [ "motor", 1 ] ], + [ [ "cable", 25 ] ], + [ [ "omnicamera", 1 ] ], + [ [ "betavoltaic", 40 ] ], + [ [ "solder_wire", 20 ] ] + ] + }, + { + "result": "broken_exodii_sniper_drone", + "type": "uncraft", + "skill_used": "electronics", + "skills_required": [ [ "mechanics", 9 ], [ "computer", 9 ] ], + "difficulty": 9, + "time": "8 h", + "using": [ [ "soldering_standard", 50 ], [ "welding_standard", 20 ] ], + "qualities": [ + { "id": "SCREW", "level": 1 }, + { "id": "SCREW_FINE", "level": 1 }, + { "id": "WRENCH", "level": 2 }, + { "id": "WRENCH_FINE", "level": 1 }, + { "id": "HAMMER", "level": 3 }, + { "id": "SAW_M", "level": 1 } + ], + "components": [ + [ [ "exodii_drone_chassis", 1 ] ], + [ [ "exodii_computer", 1 ] ], + [ [ "exodii_module", 1 ] ], + [ [ "exodii_sensor", 1 ] ], + [ [ "exodii_motor", 1 ] ], + [ [ "gun_module", 1 ] ], + [ [ "targeting_module", 1 ] ], + [ [ "pamd71z", 1 ] ], + [ [ "small_storage_battery", 1 ] ], + [ [ "plut_cell", 2 ] ], + [ [ "power_supply", 1 ] ], + [ [ "amplifier", 1 ] ], + [ [ "e_scrap", 20 ] ], + [ [ "clockworks", 2 ] ], + [ [ "scrap", 10 ] ], + [ [ "sheet_metal_small", 20 ] ], + [ [ "quad_rotors", 2 ] ], + [ [ "omnicamera", 1 ] ], + [ [ "betavoltaic", 5 ] ], + [ [ "plastic_sheet", 8 ] ], + [ [ "solder_wire", 3 ] ] + ] + }, { "result": "broken_dispatch_military", "type": "uncraft", @@ -1179,7 +1356,8 @@ [ [ "plut_cell", 1 ] ], [ [ "broken_manhack", 4 ] ], [ [ "omnicamera", 1 ] ], - [ [ "storage_battery", 1 ] ] + [ [ "storage_battery", 1 ] ], + [ [ "solder_wire", 20 ] ] ] }, { diff --git a/data/json/species.json b/data/json/species.json index 4b3fef2d02a05..0122bda32e612 100644 --- a/data/json/species.json +++ b/data/json/species.json @@ -17,6 +17,12 @@ "description": "a bird", "fear_triggers": [ "HURT", "SOUND" ] }, + { + "type": "SPECIES", + "id": "CYBORG", + "description": "an alien cyborg", + "footsteps": "heavy thuds." + }, { "type": "SPECIES", "id": "REPTILE", From 4be460fb797d8d988222fd3882163c2cfa0f4d88 Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Tue, 30 Jun 2020 01:08:46 -0600 Subject: [PATCH 175/206] Fill matches, lighters, needles, and other items for starting professions (#41643) * Start with filled lighter/phone/needle/matches This commit re-fills several starting items that had become empty, such that they now spawn full of charges: - matches (20 match) - UPS smartphone (120 battery) - refillable lighter (50 gasoline) - wood needle (200 thread) - bone needle (200 sinew) Fix #40819 * Make gasoline lantern and oil lamp watertight This allows the lanterns to contain fuel, and to spawn filled, particularly when a starting profession has a lantern or lamp. * Give Camper profession filled lantern and canteen --- data/json/items/tool/lighting.json | 4 +- data/json/professions.json | 452 ++++++++++++++--------------- 2 files changed, 212 insertions(+), 244 deletions(-) diff --git a/data/json/items/tool/lighting.json b/data/json/items/tool/lighting.json index 2213ecebe391b..531d52cee4e26 100644 --- a/data/json/items/tool/lighting.json +++ b/data/json/items/tool/lighting.json @@ -256,7 +256,7 @@ "symbol": ";", "color": "yellow", "ammo": [ "gasoline" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "gasoline": 500 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "watertight": true, "ammo_restriction": { "gasoline": 500 } } ], "initial_charges": 500, "max_charges": 500, "charges_per_use": 1, @@ -507,7 +507,7 @@ "symbol": ";", "color": "yellow", "ammo": [ "lamp_oil" ], - "pocket_data": [ { "pocket_type": "MAGAZINE", "ammo_restriction": { "lamp_oil": 750 } } ], + "pocket_data": [ { "pocket_type": "MAGAZINE", "watertight": true, "ammo_restriction": { "lamp_oil": 750 } } ], "initial_charges": 750, "max_charges": 750, "charges_per_use": 1, diff --git a/data/json/professions.json b/data/json/professions.json index 46ab2256392c2..66f8cebed9c77 100644 --- a/data/json/professions.json +++ b/data/json/professions.json @@ -17,6 +17,12 @@ "id": "charged_cell_phone", "entries": [ { "item": "light_plus_battery_cell", "ammo-item": "battery", "charges": 150, "container-item": "cell_phone" } ] }, + { + "type": "item_group", + "subtype": "collection", + "id": "charged_smart_phone", + "entries": [ { "item": "smart_phone", "ammo-item": "battery", "charges": 120 } ] + }, { "type": "item_group", "subtype": "collection", @@ -41,6 +47,18 @@ "id": "charged_tazer", "entries": [ { "item": "medium_disposable_cell", "ammo-item": "battery", "charges": 1200, "container-item": "tazer" } ] }, + { + "type": "item_group", + "subtype": "collection", + "id": "charged_ref_lighter", + "entries": [ { "item": "ref_lighter", "charges": 50 } ] + }, + { + "type": "item_group", + "subtype": "collection", + "id": "charged_matches", + "entries": [ { "item": "matches", "charges": 20 } ] + }, { "type": "item_group", "subtype": "collection", @@ -346,10 +364,9 @@ "knit_scarf", "jug_plastic", "can_beans", - "pockknife", - "matches" + "pockknife" ], - "entries": [ { "group": "charged_cell_phone" } ] + "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_matches" } ] }, "male": [ "boxer_briefs" ], "female": [ "bra", "panties" ] @@ -397,11 +414,11 @@ "knit_scarf", "backpack", "canteen", - "smart_phone", "wristwatch", "binoculars" ], "entries": [ + { "group": "charged_smart_phone" }, { "item": "crossbow", "ammo-item": "bolt_steel", "charges": 1, "contents-item": "shoulder_strap" }, { "item": "quiver", "contents-group": "quiver_bionic_prepper" }, { "item": "machete", "container-item": "scabbard" } @@ -419,19 +436,8 @@ "points": 0, "items": { "both": { - "items": [ - "jeans", - "longshirt", - "socks", - "coat_winter", - "boots_winter", - "knit_scarf", - "pockknife", - "water_clean", - "matches", - "wristwatch" - ], - "entries": [ { "group": "charged_cell_phone" } ] + "items": [ "jeans", "longshirt", "socks", "coat_winter", "boots_winter", "knit_scarf", "pockknife", "water_clean", "wristwatch" ], + "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_matches" } ] }, "male": [ "boxer_shorts" ], "female": [ "bra", "panties" ] @@ -455,8 +461,8 @@ ], "items": { "both": { - "items": [ "pants", "tshirt", "socks", "sweater", "sneakers", "multitool", "water_clean", "matches", "wristwatch" ], - "entries": [ { "group": "charged_cell_phone" } ] + "items": [ "pants", "tshirt", "socks", "sweater", "sneakers", "multitool", "water_clean", "wristwatch" ], + "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_matches" } ] }, "male": [ "boxer_shorts" ], "female": [ "bra", "panties" ] @@ -480,11 +486,11 @@ "boots_hiking", "knife_folding", "water_clean", - "matches", "wristwatch" ], "entries": [ { "group": "charged_two_way_radio" }, + { "group": "charged_matches" }, { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] }, { "item": "m1911", "ammo-item": "45_acp", "charges": 7, "container-item": "holster" }, { "item": "45_acp", "charges": 23 }, @@ -569,8 +575,11 @@ ], "items": { "both": { - "items": [ "dress_shirt", "pants", "socks", "boots", "coat_lab", "gloves_rubber", "glasses_safety", "smart_phone", "wristwatch" ], - "entries": [ { "item": "medium_battery_cell", "ammo-item": "battery", "charges": 500, "container-item": "chemistry_set" } ] + "items": [ "dress_shirt", "pants", "socks", "boots", "coat_lab", "gloves_rubber", "glasses_safety", "wristwatch" ], + "entries": [ + { "group": "charged_smart_phone" }, + { "item": "medium_battery_cell", "ammo-item": "battery", "charges": 500, "container-item": "chemistry_set" } + ] }, "male": [ "briefs" ], "female": [ "bra", "panties" ] @@ -1062,7 +1071,7 @@ "description": "Cocaine. It is, indeed, a helluva drug. You blew your money on some dust, and before you knew it you were turning tricks behind the local CVS just to score one more line. Where are you going to get your next fix now?", "points": -1, "items": { - "both": [ "crackpipe", "crack", "crack", "ref_lighter", "tank_top" ], + "both": { "items": [ "crackpipe", "crack", "crack", "tank_top" ], "entries": [ { "group": "charged_ref_lighter" } ] }, "male": [ "jeans", "flip_flops" ], "female": [ "jeans", "heels" ] }, @@ -1075,7 +1084,10 @@ "description": "Society drove you to the fringes and left you with no home, no family, no friends. You found solace in the bottom of a bottle. Well, society doesn't mean a thing anymore, and for all the crap thrown your way, you're still standing. God damn, you need a drink.", "points": -1, "items": { - "both": [ "pants", "knit_scarf", "whiskey", "gin", "bum_wine", "ragpouch", "bindle", "can_beans", "pockknife", "matches" ], + "both": { + "items": [ "pants", "knit_scarf", "whiskey", "gin", "bum_wine", "ragpouch", "bindle", "can_beans", "pockknife" ], + "entries": [ { "group": "charged_matches" } ] + }, "male": [ "undershirt" ], "female": [ "camisole" ] }, @@ -1154,18 +1166,8 @@ "pets": [ { "name": "mon_cat", "amount": 30 } ], "items": { "both": { - "items": [ - "jeans", - "longshirt", - "socks", - "coat_winter", - "boots_winter", - "knit_scarf", - "pockknife", - "water_clean", - "matches", - "wristwatch" - ] + "items": [ "jeans", "longshirt", "socks", "coat_winter", "boots_winter", "knit_scarf", "pockknife", "water_clean", "wristwatch" ], + "entries": [ { "group": "charged_matches" } ] }, "male": [ "boxer_shorts" ], "female": [ "bra", "panties" ] @@ -1217,12 +1219,12 @@ "wristwatch", "socks", "dress_shoes", - "cig", - "ref_lighter" + "cig" ], "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_two_way_radio" }, + { "group": "charged_ref_lighter" }, { "item": "sw_619", "ammo-item": "357mag_fmj", "charges": 6, "container-item": "holster" }, { "item": "357mag_fmj", "charges": 24 } ] @@ -1590,8 +1592,11 @@ "skills": [ { "level": 4, "name": "computer" } ], "items": { "both": { - "items": [ "pants", "tshirt_text", "socks", "sneakers", "mbag", "laptop", "smart_phone", "caffeine" ], - "entries": [ { "item": "light_plus_battery_cell", "ammo-item": "battery", "charges": 150, "container-item": "portable_game" } ] + "items": [ "pants", "tshirt_text", "socks", "sneakers", "mbag", "laptop", "caffeine" ], + "entries": [ + { "item": "light_plus_battery_cell", "ammo-item": "battery", "charges": 150, "container-item": "portable_game" }, + { "group": "charged_smart_phone" } + ] }, "male": [ "briefs" ], "female": [ "panties" ] @@ -1673,8 +1678,9 @@ "skills": [ { "level": 1, "name": "gun" }, { "level": 1, "name": "smg" }, { "level": 3, "name": "lockpick" } ], "items": { "both": { - "items": [ "waistcoat", "pants", "dress_shirt", "socks", "dress_shoes", "knit_scarf", "gold_watch", "smart_phone" ], + "items": [ "waistcoat", "pants", "dress_shirt", "socks", "dress_shoes", "knit_scarf", "gold_watch" ], "entries": [ + { "group": "charged_smart_phone" }, { "item": "briefcase_smg", "ammo-item": "9mm", "charges": 30 }, { "item": "mp5mag", "ammo-item": "9mm", "charges": 30 } ] @@ -1785,18 +1791,10 @@ "bio_power_storage_mkII" ], "items": { - "both": [ - "socks", - "tshirt", - "jeans", - "leather_belt", - "boots_steel", - "gloves_work", - "glasses_safety", - "hat_hard", - "smart_phone", - "wristwatch" - ], + "both": { + "items": [ "socks", "tshirt", "jeans", "leather_belt", "boots_steel", "gloves_work", "glasses_safety", "hat_hard", "wristwatch" ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs" ], "female": [ "sports_bra", "panties" ] } @@ -1809,18 +1807,20 @@ "points": 5, "CBMs": [ "bio_str_enhancer", "bio_adrenaline", "bio_hydraulics", "bio_metabolics", "bio_power_storage_mkII" ], "items": { - "both": [ - "socks_ankle", - "under_armor_shorts", - "under_armor", - "tshirt", - "shorts", - "lowtops", - "fanny", - "protein_drink", - "smart_phone", - "wristwatch" - ], + "both": { + "items": [ + "socks_ankle", + "under_armor_shorts", + "under_armor", + "tshirt", + "shorts", + "lowtops", + "fanny", + "protein_drink", + "wristwatch" + ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs" ], "female": [ "sports_bra", "panties" ] } @@ -1833,18 +1833,20 @@ "points": 4, "CBMs": [ "bio_adrenaline", "bio_torsionratchet", "bio_power_storage_mkII", "bio_jointservo" ], "items": { - "both": [ - "socks_ankle", - "under_armor_shorts", - "under_armor", - "tshirt", - "shorts", - "lowtops", - "fanny", - "sports_drink", - "smart_phone", - "wristwatch" - ], + "both": { + "items": [ + "socks_ankle", + "under_armor_shorts", + "under_armor", + "tshirt", + "shorts", + "lowtops", + "fanny", + "sports_drink", + "wristwatch" + ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs" ], "female": [ "sports_bra", "panties" ] } @@ -1870,19 +1872,10 @@ "skills": [ { "level": 1, "name": "gun" }, { "level": 1, "name": "pistol" } ], "items": { "both": { - "items": [ - "tac_fullhelmet", - "police_belt", - "pants_cargo", - "under_armor", - "socks", - "boots", - "badge_cybercop", - "smart_phone", - "wristwatch" - ], + "items": [ "tac_fullhelmet", "police_belt", "pants_cargo", "under_armor", "socks", "boots", "badge_cybercop", "wristwatch" ], "entries": [ { "group": "charged_two_way_radio" }, + { "group": "charged_smart_phone" }, { "item": "glock_18c", "ammo-item": "9mmP", "container-item": "holster" }, { "item": "tacvest", "contents-group": "army_mags_glock17" } ] @@ -1933,7 +1926,10 @@ "skills": [ { "level": 2, "name": "barter" }, { "level": 2, "name": "speech" } ], "no_bonus": "teleumbrella", "items": { - "both": [ "socks", "suit", "dress_shoes", "gold_watch", "knit_scarf", "briefcase", "smart_phone", "file", "teleumbrella" ], + "both": { + "items": [ "socks", "suit", "dress_shoes", "gold_watch", "knit_scarf", "briefcase", "file", "teleumbrella" ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "boxer_shorts" ], "female": [ "bra", "panties" ] } @@ -2076,7 +2072,10 @@ ], "skills": [ { "level": 2, "name": "speech" } ], "items": { - "both": [ "dress_shoes", "socks", "knit_scarf", "suit", "wristwatch", "smart_phone" ], + "both": { + "items": [ "dress_shoes", "socks", "knit_scarf", "suit", "wristwatch" ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs" ], "female": [ "bra", "panties" ] } @@ -2100,7 +2099,10 @@ ], "skills": [ { "level": 3, "name": "dodge" } ], "items": { - "both": [ "dress_shoes", "dress_shirt", "knit_scarf", "wristwatch", "blazer", "wristwatch", "smart_phone" ], + "both": { + "items": [ "dress_shoes", "dress_shirt", "knit_scarf", "wristwatch", "blazer", "wristwatch" ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs", "socks", "pants" ], "female": [ "bra", "panties", "stockings", "skirt" ] } @@ -2134,9 +2136,9 @@ "both": { "items": [ "suit", "bowhat", "socks", "dress_shoes", "knit_scarf", "cig", "switchblade", "mag_porn", "sunglasses", "shot_00" ], "entries": [ + { "group": "charged_ref_lighter" }, { "item": "glock_19", "ammo-item": "9mm", "container-item": "holster", "charges": 15 }, - { "item": "glockmag", "ammo-item": "9mm", "charges": 15 }, - { "item": "ref_lighter", "charges": 100 } + { "item": "glockmag", "ammo-item": "9mm", "charges": 15 } ] }, "male": [ "boxer_shorts" ], @@ -2176,7 +2178,7 @@ "CBMs": [ "bio_flashlight", "bio_tools", "bio_ups", "bio_watch", "bio_batteries", "bio_power_storage_mkII" ], "skills": [ { "level": 4, "name": "electronics" }, { "level": 2, "name": "fabrication" } ], "items": { - "both": [ "tshirt", "sneakers", "jacket_light", "wristwatch", "smart_phone" ], + "both": { "items": [ "tshirt", "sneakers", "jacket_light", "wristwatch" ], "entries": [ { "group": "charged_smart_phone" } ] }, "male": [ "briefs", "socks", "pants" ], "female": [ "bra", "panties", "stockings", "skirt" ] } @@ -2213,10 +2215,13 @@ "wristwatch", "tobacco", "rolling_paper", - "matches", "backpack" ], - "entries": [ { "group": "charged_cell_phone" }, { "item": "knife_hunting", "container-item": "sheath" } ] + "entries": [ + { "group": "charged_cell_phone" }, + { "group": "charged_matches" }, + { "item": "knife_hunting", "container-item": "sheath" } + ] }, "male": [ "boxer_shorts" ], "female": [ "bra", "boxer_shorts" ] @@ -2260,7 +2265,9 @@ "description": "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 are no safewords in the apocalypse.", "points": -1, "flags": [ "NO_BONUS_ITEMS" ], - "items": { "both": [ "bondage_suit", "bondage_mask", "boots", "leather_belt", "matches" ] } + "items": { + "both": { "items": [ "bondage_suit", "bondage_mask", "boots", "leather_belt" ], "entries": [ { "group": "charged_matches" } ] } + } }, { "type": "profession", @@ -2270,8 +2277,8 @@ "points": 0, "items": { "both": { - "items": [ "tobacco", "pipe_tobacco", "ref_lighter", "socks", "dress_shoes", "knit_scarf" ], - "entries": [ { "item": "cane", "custom-flags": [ "auto_wield" ] } ] + "items": [ "tobacco", "pipe_tobacco", "socks", "dress_shoes", "knit_scarf" ], + "entries": [ { "group": "charged_ref_lighter" }, { "item": "cane", "custom-flags": [ "auto_wield" ] } ] }, "male": [ "briefs", "dress_shirt", "pants_checkered", "pocketwatch" ], "female": [ "panties", "bra", "dress", "fanny", "gold_watch" ] @@ -2326,18 +2333,8 @@ "points": 0, "items": { "both": { - "items": [ - "trenchcoat", - "gloves_fingerless", - "socks", - "boots_combat", - "weed", - "tobacco", - "rolling_paper", - "ref_lighter", - "wristwatch" - ], - "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_mp3" } ] + "items": [ "trenchcoat", "gloves_fingerless", "socks", "boots_combat", "weed", "tobacco", "rolling_paper", "wristwatch" ], + "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_mp3" }, { "group": "charged_ref_lighter" } ] }, "male": [ "pants_cargo", "tank_top", "boxer_shorts" ], "female": [ "skirt", "corset", "boxer_shorts" ] @@ -2379,19 +2376,8 @@ "points": 0, "items": { "both": { - "items": [ - "dress_shirt", - "tie_skinny", - "sunglasses", - "pants", - "socks", - "dress_shoes", - "rolling_paper", - "tobacco", - "wristwatch", - "ref_lighter" - ], - "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_mp3" } ] + "items": [ "dress_shirt", "tie_skinny", "sunglasses", "pants", "socks", "dress_shoes", "rolling_paper", "tobacco", "wristwatch" ], + "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_mp3" }, { "group": "charged_ref_lighter" } ] }, "male": [ "briefs" ], "female": [ "bra", "panties" ] @@ -2474,8 +2460,8 @@ "skills": [ { "level": 2, "name": "chemistry" }, { "level": 2, "name": "firstaid" } ], "items": { "both": { - "items": [ "striped_shirt", "striped_pants", "sneakers", "socks", "adderall", "matches" ], - "entries": [ { "item": "condom", "contents-item": "dayquil" } ] + "items": [ "striped_shirt", "striped_pants", "sneakers", "socks", "adderall" ], + "entries": [ { "item": "condom", "contents-item": "dayquil" }, { "group": "charged_matches" } ] }, "male": [ "briefs" ], "female": [ "bra", "panties" ] @@ -2553,17 +2539,10 @@ "CBMs": [ "bio_razors", "bio_armor_eyes", "bio_sunglasses", "bio_dex_enhancer", "bio_ears", "bio_carbon" ], "skills": [ { "level": 2, "name": "melee" }, { "level": 2, "name": "unarmed" }, { "level": 2, "name": "dodge" } ], "items": { - "both": [ - "socks", - "tank_top", - "jacket_leather", - "pants_leather", - "boots", - "gloves_fingerless", - "smart_phone", - "wristwatch", - "gum" - ], + "both": { + "items": [ "socks", "tank_top", "jacket_leather", "pants_leather", "boots", "gloves_fingerless", "wristwatch", "gum" ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs" ], "female": [ "sports_bra", "boy_shorts" ] } @@ -2589,8 +2568,8 @@ "skills": [ { "level": 1, "name": "electronics" }, { "level": 1, "name": "firstaid" }, { "level": 1, "name": "computer" } ], "items": { "both": { - "items": [ "tank_top", "shorts", "socks", "lowtops", "aspirin", "anesthetic_kit", "pockknife", "backpack", "wristwatch" ], - "entries": [ { "group": "charged_cell_phone" } ] + "items": [ "tank_top", "shorts", "socks", "lowtops", "aspirin", "pockknife", "backpack", "wristwatch" ], + "entries": [ { "group": "charged_cell_phone" }, { "item": "anesthetic_kit", "charges": 3000 } ] }, "male": [ "briefs" ], "female": [ "camisole", "panties" ] @@ -2650,19 +2629,21 @@ "points": 1, "skills": [ { "level": 1, "name": "barter" }, { "level": 2, "name": "speech" } ], "items": { - "both": [ - "suit", - "tie_necktie", - "tieclip", - "socks", - "dress_shoes", - "knit_scarf", - "wristwatch", - "smart_phone", - "briefcase", - "money_bundle", - "file" - ], + "both": { + "items": [ + "suit", + "tie_necktie", + "tieclip", + "socks", + "dress_shoes", + "knit_scarf", + "wristwatch", + "briefcase", + "money_bundle", + "file" + ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs" ], "female": [ "bra", "panties" ] } @@ -3160,11 +3141,11 @@ "leather_funnel", "clay_pot", "waterskin", - "needle_bone", "fur_rollmat", "fire_drill" ], "entries": [ + { "item": "needle_bone", "ammo-item": "sinew", "charges": 200 }, { "item": "primitive_knife", "container-item": "sheath" }, { "item": "quiver", "contents-group": "quiver_naturalist" } ] @@ -3221,8 +3202,8 @@ ], "items": { "both": { - "items": [ "stockings", "pockknife", "matches", "pipe_tobacco", "tobacco", "backpack" ], - "entries": [ { "group": "charged_cell_phone" } ] + "items": [ "stockings", "pockknife", "pipe_tobacco", "tobacco", "backpack" ], + "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_matches" } ] }, "male": { "items": [ @@ -3245,20 +3226,21 @@ { "item": "lamp_oil", "container-item": "bottle_plastic_small" } ] }, - "female": [ - "dress", - "apron_leather", - "boots", - "gloves_leather", - "long_knit_scarf", - "hat_fur", - "purse", - "oil_lamp", - "needle_wood", - "pot", - "cornmeal", - "salt" - ] + "female": { + "items": [ + "dress", + "apron_leather", + "boots", + "gloves_leather", + "long_knit_scarf", + "hat_fur", + "purse", + "pot", + "cornmeal", + "salt" + ], + "entries": [ { "item": "needle_wood", "ammo-item": "thread", "charges": 200 }, { "item": "oil_lamp", "charges": 750 } ] + } } }, { @@ -3275,23 +3257,24 @@ ], "items": { "both": { - "items": [ "stockings", "pockknife", "matches", "pipe_tobacco", "tobacco", "backpack" ], - "entries": [ { "group": "charged_cell_phone" } ] + "items": [ "stockings", "pockknife", "pipe_tobacco", "tobacco", "backpack" ], + "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_matches" } ] + }, + "male": { + "items": [ + "dress", + "apron_leather", + "boots", + "gloves_leather", + "long_knit_scarf", + "hat_fur", + "purse", + "pot", + "cornmeal", + "salt" + ], + "entries": [ { "item": "needle_wood", "ammo-item": "thread", "charges": 200 }, { "item": "oil_lamp", "charges": 750 } ] }, - "male": [ - "dress", - "apron_leather", - "boots", - "gloves_leather", - "long_knit_scarf", - "hat_fur", - "needle_wood", - "purse", - "oil_lamp", - "pot", - "cornmeal", - "salt" - ], "female": { "items": [ "knee_high_boots", @@ -3375,7 +3358,6 @@ "sneakers", "gloves_fingerless", "slingpack", - "matches", "hairpin", "hairpin", "mag_comic", @@ -3384,7 +3366,7 @@ "marble", "slingshot" ], - "entries": [ { "group": "charged_cell_phone" } ] + "entries": [ { "group": "charged_cell_phone" }, { "group": "charged_matches" } ] }, "male": [ "briefs" ], "female": [ "boy_shorts" ] @@ -3434,22 +3416,24 @@ "points": 3, "CBMs": [ "bio_batteries", "bio_power_storage", "bio_int_enhancer", "bio_memory" ], "items": { - "both": [ - "dress_shirt", - "jacket_light", - "pants", - "socks", - "dress_shoes", - "tie_clipon", - "tieclip", - "fancy_sunglasses", - "knit_scarf", - "wristwatch", - "mbag", - "water_mineral", - "smart_phone", - "money_bundle" - ], + "both": { + "items": [ + "dress_shirt", + "jacket_light", + "pants", + "socks", + "dress_shoes", + "tie_clipon", + "tieclip", + "fancy_sunglasses", + "knit_scarf", + "wristwatch", + "mbag", + "water_mineral", + "money_bundle" + ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs" ], "female": [ "panties" ] } @@ -3592,15 +3576,12 @@ "hat_cotton", "knit_scarf", "backpack", - "ref_lighter", "hatchet", "e_tool", "tent_kit", "rollmat", "sleeping_bag_roll", "knife_swissarmy", - "gasoline_lantern", - "canteen", "granola", "pur_tablets", "wristwatch", @@ -3608,6 +3589,9 @@ ], "entries": [ { "group": "charged_cell_phone" }, + { "group": "charged_ref_lighter" }, + { "item": "gasoline_lantern", "charges": 500 }, + { "item": "water_clean", "ammo-item": "water_clean", "container-item": "canteen" }, { "item": "medium_battery_cell", "ammo-item": "battery", "charges": 500, "container-item": "mess_kit" } ] }, @@ -3634,10 +3618,10 @@ "e_tool", "tool_belt", "mbag", - "wristwatch", - "matches" + "wristwatch" ], "entries": [ + { "group": "charged_matches" }, { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] }, { "item": "jackhammer", "charges": 400 }, { "item": "light_minus_disposable_cell", "charges": 100 }, @@ -3667,10 +3651,10 @@ "mbag", "briefcase", "wristwatch", - "hat_hard", - "matches" + "hat_hard" ], "entries": [ + { "group": "charged_matches" }, { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] }, { "item": "dynamite", "count": 8 }, { "item": "dynamite", "count": 4 }, @@ -3752,12 +3736,11 @@ "dress_shoes", "coat_lab", "bandages", - "anesthetic_kit", "1st_aid", "wristwatch", "stethoscope" ], - "entries": [ { "group": "charged_cell_phone" } ] + "entries": [ { "group": "charged_cell_phone" }, { "item": "anesthetic_kit", "charges": 3000 } ] }, "male": [ "boxer_shorts" ], "female": [ "bra", "panties" ] @@ -3799,7 +3782,10 @@ { "level": 1, "name": "throw" } ], "items": { - "both": [ "jeans", "polo_shirt", "socks", "dress_shoes", "mbag", "caffeine", "smart_phone", "wristwatch" ], + "both": { + "items": [ "jeans", "polo_shirt", "socks", "dress_shoes", "mbag", "caffeine", "wristwatch" ], + "entries": [ { "group": "charged_smart_phone" } ] + }, "male": [ "briefs" ], "female": [ "bra", "panties" ] } @@ -3882,10 +3868,9 @@ "antibiotics", "oxycodone", "1st_aid", - "smart_phone", "wristwatch" ], - "entries": [ { "item": "medium_battery_cell", "charges": 500 } ] + "entries": [ { "group": "charged_smart_phone" }, { "item": "medium_battery_cell", "charges": 500 } ] }, "male": [ "boxer_shorts" ], "female": [ "bra", "panties" ] @@ -3941,19 +3926,10 @@ "skills": [ { "level": 4, "name": "barter" }, { "level": 6, "name": "speech" } ], "traits": [ "LIAR" ], "items": { - "both": [ - "suit", - "tieclip", - "socks_wool", - "dress_shoes", - "smart_phone", - "gold_watch", - "briefcase", - "tie_skinny", - "file", - "ref_lighter", - "cigar" - ], + "both": { + "items": [ "suit", "tieclip", "socks_wool", "dress_shoes", "gold_watch", "briefcase", "tie_skinny", "file", "cigar" ], + "entries": [ { "group": "charged_ref_lighter" }, { "group": "charged_smart_phone" } ] + }, "male": [ "boxer_shorts" ], "female": [ "bra", "panties" ] } @@ -4001,19 +3977,8 @@ "both": { "ammo": 100, "magazine": 100, - "items": [ - "tshirt_tour", - "jeans", - "socks", - "boots_steel", - "multitool", - "wristwatch", - "gloves_work", - "mbag", - "soldering_iron", - "matches" - ], - "entries": [ { "group": "charged_cell_phone" }, { "item": "jacket_jean" } ] + "items": [ "tshirt_tour", "jeans", "socks", "boots_steel", "multitool", "wristwatch", "gloves_work", "mbag", "soldering_iron" ], + "entries": [ { "group": "charged_cell_phone" }, { "item": "jacket_jean" }, { "group": "charged_matches" } ] }, "male": [ "boxer_shorts" ], "female": [ "bra", "boy_shorts" ] @@ -4108,7 +4073,10 @@ "skills": [ { "level": 1, "name": "speech" }, { "level": 2, "name": "driving" } ], "vehicle": "car_sports", "items": { - "both": { "items": [ "gold_watch", "water_mineral", "smart_phone", "money_bundle", "cig", "ref_lighter" ] }, + "both": { + "items": [ "gold_watch", "water_mineral", "money_bundle", "cig" ], + "entries": [ { "group": "charged_ref_lighter" }, { "group": "charged_smart_phone" } ] + }, "male": [ "boxer_shorts", "pants", "dress_shoes", "polo_shirt", "socks" ], "female": [ "tank_top", "bra", "panties", "skirt", "heels", "jacket_leather", "stockings" ] } From 909133dd297514af4d6e36883f8f66cc67701a50 Mon Sep 17 00:00:00 2001 From: nexusmrsep <39925111+nexusmrsep@users.noreply.github.com> Date: Tue, 30 Jun 2020 09:10:15 +0200 Subject: [PATCH 176/206] Fire extinguishers use visible fields (#41639) --- data/json/emit.json | 7 +++ data/json/field_type.json | 87 ++++++++++++++++++++++++++ data/json/item_actions.json | 5 -- data/json/items/ammo.json | 17 +++++ data/json/items/ammo_types.json | 6 ++ data/json/items/tool/firefighting.json | 58 +++++++++++++++-- src/field_type.cpp | 2 + src/field_type.h | 1 + src/item_factory.cpp | 1 - src/iuse.cpp | 24 +------ src/iuse.h | 1 - src/map_field.cpp | 9 +++ 12 files changed, 184 insertions(+), 34 deletions(-) diff --git a/data/json/emit.json b/data/json/emit.json index 4c9045aef0390..f0053ab79d09e 100644 --- a/data/json/emit.json +++ b/data/json/emit.json @@ -331,5 +331,12 @@ "field": "fd_fog", "intensity": 2, "qty": 200 + }, + { + "id": "emit_extinguisher_burst", + "type": "emit", + "field": "fd_extinguisher", + "intensity": 1, + "qty": 10 } ] diff --git a/data/json/field_type.json b/data/json/field_type.json index 2d0e71aced560..76f8b860bb0c5 100644 --- a/data/json/field_type.json +++ b/data/json/field_type.json @@ -239,6 +239,93 @@ "display_items": false, "display_field": true }, + { + "id": "fd_extinguisher", + "type": "field_type", + "intensity_levels": [ + { + "name": "extinguisher mist", + "sym": "%", + "color": "white", + "dangerous": true, + "translucency": 0.1, + "convection_temperature_mod": -10, + "effects": [ + { + "effect_id": "poison", + "body_part": "MOUTH", + "intensity": 2, + "min_duration": "2 minutes", + "max_duration": "2 minutes", + "immune_inside_vehicle": true, + "message": "You feel sick from inhaling the extinguisher mist", + "message_type": "bad" + } + ] + }, + { + "name": "extinguisher cloud", + "color": "white", + "convection_temperature_mod": -20, + "translucency": 0.4, + "effects": [ + { + "effect_id": "poison", + "body_part": "MOUTH", + "intensity": 2, + "min_duration": "2 minutes", + "max_duration": "2 minutes", + "immune_inside_vehicle": true, + "message": "You feel sick from inhaling the extinguisher cloud", + "message_type": "bad" + } + ] + }, + { + "name": "thick extinguisher cloud", + "color": "white", + "convection_temperature_mod": -30, + "translucency": 0.7, + "effects": [ + { + "effect_id": "poison", + "body_part": "MOUTH", + "intensity": 5, + "min_duration": "3 minutes", + "max_duration": "3 minutes", + "//": "won't be applied outside of vehicles, so it could apply harsher effect", + "immune_outside_vehicle": true, + "message": "You feel sick from inhaling the thick extinguisher cloud", + "message_type": "bad" + }, + { + "effect_id": "badpoison", + "body_part": "MOUTH", + "intensity": 5, + "min_duration": "3 minutes", + "max_duration": "3 minutes", + "//": "won't be applied inside of vehicles, so it could apply lesser effect", + "immune_inside_vehicle": true, + "message": "You feel sick from inhaling the thick extinguisher cloud", + "message_type": "bad" + } + ] + } + ], + "description_affix": "on", + "decay_amount_factor": 3, + "priority": 4, + "half_life": "10 seconds", + "phase": "gas", + "display_items": false, + "display_field": true, + "looks_like": "fd_fog", + "gas_absorption_factor": 15, + "has_fume": true, + "percent_spread": 90, + "dirty_transparency_cache": true, + "immunity_data": { "body_part_env_resistance": [ [ "MOUTH", 15 ] ] } + }, { "id": "fd_rubble", "type": "field_type", diff --git a/data/json/item_actions.json b/data/json/item_actions.json index 676f98f7f623d..9f9e62a47d45c 100644 --- a/data/json/item_actions.json +++ b/data/json/item_actions.json @@ -894,11 +894,6 @@ "id": "THORAZINE", "name": { "str": "Take" } }, - { - "type": "item_action", - "id": "THROWABLE_EXTINGUISHER_ACT", - "name": { "str": "Extinguish a fire" } - }, { "type": "item_action", "id": "TOWEL", diff --git a/data/json/items/ammo.json b/data/json/items/ammo.json index 45f6ad2ea0a03..a4f7924cc0974 100644 --- a/data/json/items/ammo.json +++ b/data/json/items/ammo.json @@ -1127,6 +1127,23 @@ "phase": "gas", "ammo_type": "nitrox" }, + { + "type": "AMMO", + "id": "extinguishing_agent", + "category": "chems", + "price": 500, + "price_postapoc": 250, + "name": { "str_sp": "extinguishing agent" }, + "symbol": "%", + "color": "white", + "container": "bottle_plastic", + "description": "Dry chemical solution effective in extinguishing fires.", + "volume": "250 ml", + "weight": "1 g", + "phase": "gas", + "ammo_type": "extinguishing_agent", + "count": 10 + }, { "id": "tinder", "type": "AMMO", diff --git a/data/json/items/ammo_types.json b/data/json/items/ammo_types.json index 58ea87677cfcc..6595a78270ca2 100644 --- a/data/json/items/ammo_types.json +++ b/data/json/items/ammo_types.json @@ -629,6 +629,12 @@ "name": "compressed air", "default": "nitrox" }, + { + "type": "ammunition_type", + "id": "extinguishing_agent", + "name": "extinguishing agent", + "default": "extinguishing_agent" + }, { "id": "tinder", "name": "tinder", diff --git a/data/json/items/tool/firefighting.json b/data/json/items/tool/firefighting.json index 71a47c8c9a441..d7d4dd8b44ed2 100644 --- a/data/json/items/tool/firefighting.json +++ b/data/json/items/tool/firefighting.json @@ -35,8 +35,18 @@ "symbol": ";", "color": "red", "initial_charges": 100, + "pocket_data": [ + { + "pocket_type": "MAGAZINE", + "airtight": true, + "watertight": true, + "rigid": true, + "ammo_restriction": { "extinguishing_agent": 100 } + } + ], "max_charges": 100, "charges_per_use": 1, + "flags": [ "NO_UNLOAD", "NO_RELOAD" ], "use_action": [ "EXTINGUISHER" ] }, { @@ -91,9 +101,20 @@ "material": [ "steel", "plastic" ], "symbol": ";", "color": "red", + "pocket_data": [ + { + "pocket_type": "MAGAZINE", + "airtight": true, + "watertight": true, + "rigid": true, + "ammo_restriction": { "extinguishing_agent": 10 } + } + ], "initial_charges": 10, "max_charges": 10, + "ammo": "extinguishing_agent", "charges_per_use": 1, + "flags": [ "NO_UNLOAD", "NO_RELOAD" ], "use_action": [ "EXTINGUISHER" ] }, { @@ -101,18 +122,47 @@ "type": "TOOL", "category": "tools", "name": { "str": "throwable fire extinguisher" }, - "description": "This is a fire extinguisher in grenade form. While not as effective as a regular fire extinguisher, you can use it from a distance. It is activated by heat, so just throw it into the flames.", + "description": "This is a fire extinguisher in grenade form. While not as effective as a regular fire extinguisher, you can use it from a distance. It has a plastic plug that can be pulled, but is primarely activated by heat, so just throw it into the flames.", "weight": "630 g", "volume": "250 ml", "price": 3000, "price_postapoc": 50, "to_hit": -1, "bashing": 3, - "material": [ "plastic" ], + "material": [ "steel" ], "symbol": "*", "color": "blue", - "use_action": [ "THROWABLE_EXTINGUISHER_ACT" ], - "flags": [ "ACT_IN_FIRE" ] + "use_action": { + "target": "throw_extinguisher_act", + "target_charges": 3, + "menu_text": "Pull plug", + "msg": "You pull the plug on the extinguisher grenade.", + "active": true, + "type": "transform" + }, + "flags": [ "ACT_IN_FIRE", "BOMB" ] + }, + { + "id": "throw_extinguisher_act", + "type": "TOOL", + "category": "tools", + "name": { "str": "active throwable fire extinguisher" }, + "description": "This is an active extinguisher grenade, likely to burst any second now. Better throw it!", + "weight": "630 g", + "volume": "250 ml", + "price": 0, + "price_postapoc": 0, + "to_hit": -1, + "bashing": 6, + "material": [ "steel" ], + "symbol": "*", + "color": "light_red", + "initial_charges": 3, + "max_charges": 3, + "turns_per_charge": 1, + "emits": [ "emit_extinguisher_burst" ], + "revert_to": "canister_empty", + "flags": [ "TRADER_AVOID" ] }, { "id": "pike_pole", diff --git a/src/field_type.cpp b/src/field_type.cpp index c08adb314a043..d6ae14b553938 100644 --- a/src/field_type.cpp +++ b/src/field_type.cpp @@ -316,6 +316,7 @@ const std::vector &field_types::get_all() field_type_id fd_null, fd_blood, fd_bile, + fd_extinguisher, fd_gibs_flesh, fd_gibs_veggy, fd_web, @@ -373,6 +374,7 @@ void field_types::set_field_type_ids() fd_null = field_type_id( "fd_null" ); fd_blood = field_type_id( "fd_blood" ); fd_bile = field_type_id( "fd_bile" ); + fd_extinguisher = field_type_id( "fd_extinguisher" ); fd_gibs_flesh = field_type_id( "fd_gibs_flesh" ); fd_gibs_veggy = field_type_id( "fd_gibs_veggy" ); fd_web = field_type_id( "fd_web" ); diff --git a/src/field_type.h b/src/field_type.h index a83ef1b17428a..d306a5d155963 100644 --- a/src/field_type.h +++ b/src/field_type.h @@ -268,6 +268,7 @@ field_type get_field_type_by_legacy_enum( int legacy_enum_id ); extern field_type_id fd_null, fd_blood, fd_bile, + fd_extinguisher, fd_gibs_flesh, fd_gibs_veggy, fd_web, diff --git a/src/item_factory.cpp b/src/item_factory.cpp index 11817d3f48187..db6bd5e985921 100644 --- a/src/item_factory.cpp +++ b/src/item_factory.cpp @@ -963,7 +963,6 @@ void Item_factory::init() add_iuse( "TAZER2", &iuse::tazer2 ); add_iuse( "TELEPORT", &iuse::teleport ); add_iuse( "THORAZINE", &iuse::thorazine ); - add_iuse( "THROWABLE_EXTINGUISHER_ACT", &iuse::throwable_extinguisher_act ); add_iuse( "TOWEL", &iuse::towel ); add_iuse( "TRIMMER_OFF", &iuse::trimmer_off ); add_iuse( "TRIMMER_ON", &iuse::trimmer_on ); diff --git a/src/iuse.cpp b/src/iuse.cpp index 0dc3d385717b3..4fae904d301d5 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -2012,7 +2012,7 @@ int iuse::extinguisher( player *p, item *it, bool, const tripoint & ) p->moves -= to_moves( 2_seconds ); // Reduce the strength of fire (if any) in the target tile. - g->m.mod_field_intensity( dest, fd_fire, 0 - rng( 2, 3 ) ); + g->m.add_field( dest, fd_extinguisher, 3, 10_turns ); // Also spray monsters in that tile. if( monster *const mon_ptr = g->critter_at( dest, true ) ) { @@ -3667,28 +3667,6 @@ int iuse::can_goo( player *p, item *it, bool, const tripoint & ) return it->type->charges_to_use(); } -int iuse::throwable_extinguisher_act( player *, item *it, bool, const tripoint &pos ) -{ - if( pos.x == -999 || pos.y == -999 ) { - return 0; - } - if( g->m.get_field( pos, fd_fire ) != nullptr ) { - sounds::sound( pos, 50, sounds::sound_t::combat, _( "Bang!" ), false, "explosion", "small" ); - // Reduce the strength of fire (if any) in the target tile. - g->m.mod_field_intensity( pos, fd_fire, 0 - 2 ); - // Slightly reduce the strength of fire around and in the target tile. - for( const tripoint &dest : g->m.points_in_radius( pos, 1 ) ) { - if( g->m.passable( dest ) && dest != pos ) { - g->m.mod_field_intensity( dest, fd_fire, 0 - rng( 0, 2 ) ); - } - } - it->charges = -1; - return 1; - } - it->active = false; - return 0; -} - int iuse::granade( player *p, item *it, bool, const tripoint & ) { p->add_msg_if_player( _( "You pull the pin on the Granade." ) ); diff --git a/src/iuse.h b/src/iuse.h index 55bb787b31df7..6de160f2a237e 100644 --- a/src/iuse.h +++ b/src/iuse.h @@ -188,7 +188,6 @@ int talking_doll( player *, item *, bool, const tripoint & ); int tazer( player *, item *, bool, const tripoint & ); int tazer2( player *, item *, bool, const tripoint & ); int teleport( player *, item *, bool, const tripoint & ); -int throwable_extinguisher_act( player *, item *, bool, const tripoint & ); int toolmod_attach( player *, item *, bool, const tripoint & ); int tow_attach( player *, item *, bool, const tripoint & ); int towel( player *, item *, bool, const tripoint & ); diff --git a/src/map_field.cpp b/src/map_field.cpp index c0c7b22bc8085..f49f38586b05b 100644 --- a/src/map_field.cpp +++ b/src/map_field.cpp @@ -488,6 +488,15 @@ bool map::process_fields_in_submap( submap *const current_submap, } // TODO: Allow spreading to the sides if age < 0 && intensity == 3 } + + if( curtype == fd_extinguisher ) { + field_entry *fire_here = maptile_at_internal( p ).find_field( fd_fire ); + if( fire_here != nullptr ) { + // extinguisher fights fire in 1:1 ratio + fire_here->set_field_intensity( fire_here->get_field_intensity() - cur.get_field_intensity() ); + cur.set_field_intensity( cur.get_field_intensity() - fire_here->get_field_intensity() ); + } + } if( curtype.obj().apply_slime_factor > 0 ) { sblk.apply_slime( p, cur.get_field_intensity() * curtype.obj().apply_slime_factor ); } From bbbf1ff622fef4de57888ce47126889a0d4c0761 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jianxiang=20Wang=20=28=E7=8E=8B=E5=81=A5=E7=BF=94=29?= Date: Tue, 30 Jun 2020 15:12:35 +0800 Subject: [PATCH 177/206] Fix some crashes and item disappearance (#41630) * Fix crash when trading if an item has zero charges * Fix std::bad_alloc or segfault when loading save for a second time * Fix item disappearing when picking item up with full inventory and hands and canceling the wielding prompt. * Fix content disappearing when unloading item * Disallow wielding item unloaded from currently wielded item to avoid crash * Fix crash when trying to wield item from wielded container * Astyle * Fix wrong message shown when unwielding wielded item --- src/character.cpp | 41 +++++++++++++++-------------------------- src/character.h | 12 +++--------- src/game.cpp | 12 ++++-------- src/item_pocket.cpp | 4 +++- src/npctrade.cpp | 15 ++++++++++++--- src/pickup.cpp | 31 ++++++++++++++++--------------- src/player.cpp | 25 +++++++++++++++++-------- 7 files changed, 70 insertions(+), 70 deletions(-) diff --git a/src/character.cpp b/src/character.cpp index 3f4a2c628cfa6..d04adcca5d0e3 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -2284,28 +2284,12 @@ std::vector Character::nearby( const return res; } -int Character::i_add_to_container( const item &it, const bool unloading ) -{ - int charges = it.count(); - if( unloading || !it.count_by_charges() ) { - return charges; - } - - charges -= weapon.fill_with( *it.type, charges ); - for( item &worn_it : worn ) { - if( charges > 0 ) { - charges -= worn_it.fill_with( *it.type, charges ); - } else { - break; - } - } - - return charges; -} - item_pocket *Character::best_pocket( const item &it, const item *avoid ) { - item_pocket *ret = weapon.best_pocket( it ); + item_pocket *ret = nullptr; + if( &weapon != avoid ) { + ret = weapon.best_pocket( it ); + } for( item &worn_it : worn ) { if( &worn_it == avoid ) { continue; @@ -2324,7 +2308,7 @@ item_pocket *Character::best_pocket( const item &it, const item *avoid ) return ret; } -item *Character::try_add( item it, const item *avoid ) +item *Character::try_add( item it, const item *avoid, const bool allow_wield ) { itype_id item_type_id = it.typeId(); last_item = item_type_id; @@ -2355,7 +2339,7 @@ item *Character::try_add( item it, const item *avoid ) return nullptr; } } else { - if( wield( it ) ) { + if( allow_wield && wield( it ) ) { ret = &weapon; } else { return nullptr; @@ -2374,12 +2358,17 @@ item *Character::try_add( item it, const item *avoid ) return ret; } -item &Character::i_add( item it, bool /* should_stack */, const item *avoid ) +item &Character::i_add( item it, bool /* should_stack */, const item *avoid, const bool allow_drop, + const bool allow_wield ) { - item *added = try_add( it, avoid ); + item *added = try_add( it, avoid, /*allow_wield=*/allow_wield ); if( added == nullptr ) { - if( !wield( it ) ) { - return get_map().add_item_or_charges( pos(), it ); + if( !allow_wield || !wield( it ) ) { + if( allow_drop ) { + return get_map().add_item_or_charges( pos(), it ); + } else { + return null_item_reference(); + } } else { return weapon; } diff --git a/src/character.h b/src/character.h index d58d31a355c25..523ef41f86594 100644 --- a/src/character.h +++ b/src/character.h @@ -1346,20 +1346,14 @@ class Character : public Creature, public visitable item &used_weapon(); /*@}*/ - /** - * Try to find containers that can contain @it and fills them up as much as possible. - * Does not work for items that are not count by charges. - * @param unloading Do not try to add to a container when the item was intentionally unloaded. - * @return Remaining charges which could not be stored on the character. - */ - int i_add_to_container( const item &it, bool unloading ); /** * Adds the item to the character's worn items or wields it, or prompts if the Character cannot pick it up. * @avoid is the item to not put @it into */ - item &i_add( item it, bool should_stack = true, const item *avoid = nullptr ); + item &i_add( item it, bool should_stack = true, const item *avoid = nullptr, bool allow_drop = true, + bool allow_wield = true ); /** tries to add to the character's inventory without a popup. returns nullptr if it fails. */ - item *try_add( item it, const item *avoid = nullptr ); + item *try_add( item it, const item *avoid = nullptr, bool allow_wield = true ); /** * Try to pour the given liquid into the given container/vehicle. The transferred charges are diff --git a/src/game.cpp b/src/game.cpp index 3cdea2d048f75..16ddae9681fd8 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -8972,6 +8972,10 @@ void game::wield( item_location loc ) debugmsg( "ERROR: tried to wield null item" ); return; } + if( &u.weapon != &*loc && u.weapon.has_item( *loc ) ) { + add_msg( m_info, _( "You need to put the bag away before trying to wield something from it." ) ); + return; + } if( u.is_armed() ) { const bool is_unwielding = u.is_wielding( *loc ); const auto ret = u.can_unwield( *loc ); @@ -8991,14 +8995,6 @@ void game::wield( item_location loc ) return; } } - if( !loc ) { - /** - * If we lost the location here, that means the thing we're - * trying to wield was inside a wielded item. - */ - add_msg( m_info, "You need to put the bag away before trying to wield something from it." ); - return; - } const auto ret = u.can_wield( *loc ); if( !ret.success() ) { diff --git a/src/item_pocket.cpp b/src/item_pocket.cpp index 9312acb413b03..af3f0d59c0f7a 100644 --- a/src/item_pocket.cpp +++ b/src/item_pocket.cpp @@ -251,7 +251,9 @@ bool item_pocket::stacks_with( const item_pocket &rhs ) const bool item_pocket::is_funnel_container( units::volume &bigger_than ) const { - static const std::vector allowed_liquids{ + // should not be static, since after reloading some members of the item objects, + // such as item types, may be invalidated. + const std::vector allowed_liquids{ item( "water", calendar::turn_zero, 1 ), item( "water_acid", calendar::turn_zero, 1 ), item( "water_acid_weak", calendar::turn_zero, 1 ) diff --git a/src/npctrade.cpp b/src/npctrade.cpp index 6e5cf4312193f..95195e851b19d 100644 --- a/src/npctrade.cpp +++ b/src/npctrade.cpp @@ -163,6 +163,11 @@ std::vector npc_trading::init_buying( player &buyer, player &selle return; } + if( it.count() <= 0 ) { + debugmsg( "item %s has zero or negative charges", it.typeId().str() ); + return; + } + const int market_price = it.price( true ); int val = np.value( it, market_price ); if( ( is_npc && np.wants_to_sell( it, val, market_price ) ) || @@ -212,9 +217,13 @@ void item_pricing::set_values( int ip_count ) count = ip_count; } else { charges = i_p->count(); - price /= charges; - vol /= charges; - weight /= charges; + if( charges > 0 ) { + price /= charges; + vol /= charges; + weight /= charges; + } else { + debugmsg( "item %s has zero or negative charges", i_p->typeId().str() ); + } } } diff --git a/src/pickup.cpp b/src/pickup.cpp index bd0dbd602e57e..c143686030031 100644 --- a/src/pickup.cpp +++ b/src/pickup.cpp @@ -262,16 +262,7 @@ bool pick_one_up( item_location &loc, int quantity, bool &got_water, bool &offer } bool did_prompt = false; - if( newit.count_by_charges() ) { - newit.charges -= u.i_add( newit ).charges; - // if the item stacks with another item when added, - // the charges returned may be larger than the charges of the item added. - newit.charges = std::max( 0, newit.charges ); - } - if( newit.is_ammo() && newit.charges <= 0 ) { - picked_up = true; - option = NUM_ANSWERS; //Skip the options part - } else if( newit.is_frozen_liquid() ) { + if( newit.is_frozen_liquid() ) { if( !( got_water = !( u.crush_frozen_liquid( newloc ) ) ) ) { option = STASH; } @@ -346,12 +337,22 @@ bool pick_one_up( item_location &loc, int quantity, bool &got_water, bool &offer break; } // Intentional fallthrough - case STASH: - auto &entry = mapPickup[newit.tname()]; - entry.second += newit.count(); - entry.first = u.i_add( newit ); - picked_up = true; + case STASH: { + item &added_it = u.i_add( newit, true, nullptr, /*allow_drop=*/false ); + if( added_it.is_null() ) { + // failed to add, do nothing + } else if( &added_it == &it ) { + // merged to the original stack, restore original charges + it.charges -= newit.charges; + } else { + // successfully added + auto &entry = mapPickup[newit.tname()]; + entry.second += newit.count(); + entry.first = added_it; + picked_up = true; + } break; + } } if( picked_up ) { diff --git a/src/player.cpp b/src/player.cpp index 0cd7bc9e53cfb..1a5a371a95960 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -2801,23 +2801,32 @@ bool player::takeoff( int pos ) return takeoff( i_at( pos ) ); } -bool player::add_or_drop_with_msg( item &it, const bool unloading, const item *avoid ) +bool player::add_or_drop_with_msg( item &it, const bool /*unloading*/, const item *avoid ) { if( it.made_of( phase_id::LIQUID ) ) { liquid_handler::consume_liquid( it, 1 ); return it.charges <= 0; } - it.charges = this->i_add_to_container( it, unloading ); - if( it.is_ammo() && it.charges == 0 ) { - return true; - } else if( !this->can_pickVolume( it ) ) { + if( !this->can_pickVolume( it ) ) { put_into_vehicle_or_drop( *this, item_drop_reason::too_large, { it } ); } else if( !this->can_pickWeight( it, !get_option( "DANGEROUS_PICKUPS" ) ) ) { put_into_vehicle_or_drop( *this, item_drop_reason::too_heavy, { it } ); } else { - auto &ni = this->i_add( it, true, avoid ); - add_msg( _( "You put the %s in your inventory." ), ni.tname() ); - add_msg( m_info, "%c - %s", ni.invlet == 0 ? ' ' : ni.invlet, ni.tname() ); + const bool allow_wield = !weapon.has_item( it ); + const int prev_charges = it.charges; + auto &ni = this->i_add( it, true, avoid, /*allow_drop=*/false, /*allow_wield=*/allow_wield ); + if( ni.is_null() ) { + // failed to add + put_into_vehicle_or_drop( *this, item_drop_reason::tumbling, { it } ); + } else if( &ni == &it ) { + // merged into the original stack, restore original charges + it.charges = prev_charges; + put_into_vehicle_or_drop( *this, item_drop_reason::tumbling, { it } ); + } else { + // successfully added + add_msg( _( "You put the %s in your inventory." ), ni.tname() ); + add_msg( m_info, "%c - %s", ni.invlet == 0 ? ' ' : ni.invlet, ni.tname() ); + } } return true; } From 582d6449d6dd1971091346dedfe4c08dca19dadd Mon Sep 17 00:00:00 2001 From: LaVeyanFiend <51099123+LaVeyanFiend@users.noreply.github.com> Date: Tue, 30 Jun 2020 03:13:21 -0400 Subject: [PATCH 178/206] Gun volume audit for 9x19, part 1 (#41596) --- data/json/items/armor/storage.json | 8 ++-- data/json/items/gun/9mm.json | 72 +++++++++++++++--------------- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/data/json/items/armor/storage.json b/data/json/items/armor/storage.json index 9065d3482c926..836b8a59c04ad 100644 --- a/data/json/items/armor/storage.json +++ b/data/json/items/armor/storage.json @@ -686,21 +686,23 @@ "type": "ARMOR", "copy-from": "briefcase", "looks_like": "briefcase", + "weight": "1500 g", + "volume": "15232 ml", + "longest_side": "544 mm", "name": { "str": "H&K operational briefcase (empty)", "str_pl": "H&K operational briefcases (empty)" }, "description": "This is a plain, hard-sided black briefcase with a trigger in the handle and a concealed hole in the side. Squeezing the trigger would currently do nothing, as it is empty. Don't forget to put a suitable MP5 back inside before you try to pay any ransom fees with lead.", "pocket_data": [ { "pocket_type": "CONTAINER", "rigid": true, - "max_contains_volume": "14500 ml", + "max_contains_volume": "14 L", "max_contains_weight": "30 kg", "max_item_length": "50 cm", "moves": 300 } ], "price": 2000, - "price_postapoc": 1250, - "weight": "950 g" + "price_postapoc": 1250 }, { "id": "jerrypack", diff --git a/data/json/items/gun/9mm.json b/data/json/items/gun/9mm.json index c874e1e8b3417..6c5fa335940cc 100644 --- a/data/json/items/gun/9mm.json +++ b/data/json/items/gun/9mm.json @@ -7,7 +7,8 @@ "name": { "str": "Beretta 90-two" }, "description": "A more modern version of Beretta's popular 92 series of handguns, the 90-two performs largely the same. The main difference is a sleeker, almost futuristic-looking design owed in large parts to the polymer underbarrel rail cover.", "weight": "921 g", - "volume": "518 ml", + "volume": "554 ml", + "longest_side": "250 mm", "price": 65000, "to_hit": -2, "bashing": 8, @@ -86,8 +87,9 @@ "reload_noise_volume": 10, "name": { "str": "Cx4 Storm" }, "description": "A small pistol caliber carbine designed for police use and civilian self-defense, the Cx4 Storm uses magazines that are interchangeable with other Beretta 9x19mm handguns.", - "weight": "2580 g", - "volume": "1500 ml", + "weight": "2575 g", + "volume": "4458 ml", + "longest_side": "762 mm", "price": 90000, "price_postapoc": 4000, "to_hit": -1, @@ -136,7 +138,8 @@ "name": { "str": "Glock 19" }, "description": "Possibly the most popular pistol in existence. The Glock 19 is often derided for its plastic construction, but it is easy to shoot.", "weight": "600 g", - "volume": "500 ml", + "volume": "386 ml", + "longest_side": "211 mm", "price": 69000, "price_postapoc": 2500, "to_hit": -2, @@ -168,8 +171,9 @@ "reload_noise_volume": 10, "name": { "str": "H&K MP5A2" }, "description": "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.", - "weight": "2730 g", - "volume": "2894 ml", + "weight": "2726 g", + "volume": "3932 ml", + "longest_side": "682 mm", "price": 280000, "price_postapoc": 3500, "to_hit": -2, @@ -217,22 +221,10 @@ "name": { "str": "H&K MP5SD" }, "description": "The H&K MP5SD offers subsonic performance in almost the same footprint as the H&K MP5, retaining its handiness. The large suppressor cuts down on muzzle flash greatly, aiding in night operations. It has also seen some popularity with SWAT teams, as it lowers the risk of fire and explosions in illegal laboratories. With body armor in more common use, the MP5SD has waned in popularity among special forces due to its decreased terminal performance.", "weight": "3230 g", + "volume": "3499 ml", + "longest_side": "666 mm", "price": 3000000, "price_postapoc": 14000, - "valid_mod_locations": [ - [ "accessories", 3 ], - [ "barrel", 1 ], - [ "bore", 1 ], - [ "brass catcher", 1 ], - [ "grip", 1 ], - [ "mechanism", 4 ], - [ "rail mount", 1 ], - [ "sights mount", 1 ], - [ "underbarrel mount", 1 ], - [ "sling", 1 ], - [ "stock", 1 ] - ], - "modes": [ [ "DEFAULT", "semi-auto", 1 ], [ "BURST", "3 rd.", 3 ], [ "AUTO", "auto", 4 ] ], "built_in_mods": [ "mp5sd_suppressor" ] }, { @@ -241,8 +233,10 @@ "copy-from": "hk_mp5", "name": { "str": "H&K MP5K-PDW" }, "description": "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. The MP5K-PDW model features a shorter barrel, a built-in foregrip, and a side folding stock for vehicle or aircraft crew use.", - "weight": "2360 g", - "volume": "1753 ml", + "weight": "2292 g", + "volume": "2601 ml", + "//": "Forward grip's 68g & 119ml deducted", + "longest_side": "377 mm", "price_postapoc": 3500, "bashing": 8, "dispersion": 270, @@ -269,8 +263,10 @@ "copy-from": "hk_mp5", "name": { "str": "PTR 603" }, "description": "The PTR 603 is a semi-automatic copy of the famous MP5 series, domestically produced for the US market on original Heckler and Koch tooling by PTR Industries. Like the MP5, its roller delayed blowback action offers smooth shooting and precision, setting it apart from other submachine guns and pistol caliber carbines. This model is configured as a pistol to avoid inconvenient and costly NFA regulations. A welded on section of M1913 rail offers convenient mounting for aftermarket optics, but precludes the use of claw mounts.", - "relative": { "weight": -550, "volume": "-500 ml", "handling_modifier": -6 }, - "//": "Attach a pistol stock and you get a semi MP5 again.", + "weight": "2177 g", + "volume": "2110 ml", + "longest_side": "377 mm", + "skill": "pistol", "modes": [ [ "DEFAULT", "semi-auto", 1 ] ], "bashing": 7, "dispersion": 270, @@ -293,11 +289,13 @@ { "id": "briefcase_smg", "copy-from": "hk_mp5k", + "looks_like": "hk_briefcase", "type": "GUN", "name": { "str": "H&K operational briefcase" }, "description": "This is a hard-sided briefcase with a trigger in the handle and a concealed hole in the side. To fire the internally mounted MP5K-PDW, one braces the briefcase at the waist, ensures the briefcase is pointed at the enemy, and squeezes the trigger. Precision and handling are severely hampered all around, however if you need to 'hand over the goods' or look low profile while bodyguarding, this is your gun. When the briefcase is open the MP5 may be reloaded or dismounted.", - "weight": "3570 g", - "volume": "15 L", + "weight": "3800 g", + "volume": "15232 ml", + "longest_side": "544 mm", "price": 480000, "price_postapoc": 5000, "bashing": 15, @@ -616,8 +614,9 @@ "type": "GUN", "name": { "str_sp": "USP 9mm" }, "description": "A popular pistol, widely used among law enforcement. Extensively tested for durability, it has been found to stay accurate even after being subjected to extreme abuse.", - "weight": "770 g", - "volume": "500 ml", + "weight": "771 g", + "volume": "460 ml", + "longest_side": "230 mm", "price": 68000, "price_postapoc": 2500, "to_hit": -2, @@ -697,7 +696,8 @@ "name": { "str": "Glock 17" }, "description": "Designed for all shooters, the Glock 17 is marketed towards law-enforcement and military.", "weight": "630 g", - "volume": "500 ml", + "volume": "427 ml", + "longest_side": "233 mm", "price": 69000, "price_postapoc": 2500, "to_hit": -2, @@ -909,10 +909,11 @@ "copy-from": "pistol_base", "looks_like": "glock_17", "type": "GUN", - "name": { "str": "CZ-75" }, - "description": "The CZ-75 is a semi-automatic pistol developed in Czechoslovakia, and is one of the original wonder nines. Though designed for export to western countries, it was declared a state secret; lack of international patent protection meant that many clones and variants were produced and distributed around the world, with Česká zbrojovka only joining in the 90's. This pistol remains wildly popular among competition shooters.", - "weight": "1000 g", - "volume": "526 ml", + "name": { "str": "CZ 75 B" }, + "description": "The CZ 75 B is a semi-automatic pistol developed in Czechoslovakia, and is one of the original wonder nines. Though designed for export to western countries, it was declared a state secret; lack of international patent protection meant that many clones and variants were produced and distributed around the world, with Česká zbrojovka only joining in the 90's. This pistol remains wildly popular among competition shooters.", + "weight": "998 g", + "volume": "476 ml", + "longest_side": "238 mm", "price": 10000, "price_postapoc": 2500, "to_hit": -2, @@ -940,8 +941,9 @@ "type": "GUN", "name": { "str": "Walther CCP" }, "description": "The Walther CCP is a gas-delayed blowback semi-automatic pistol intended for the concealed carry consumer market. Internally, it is nearly identical to the cult classic H&K P7. Its fixed barrel design makes it potentially more accurate than many other pistols, though this may difficult to realize with its average trigger and short sight radius.", - "weight": "570 g", - "volume": "318 ml", + "weight": "567 g", + "volume": "334 ml", + "longest_side": "194 mm", "price": 12500, "price_postapoc": 2000, "to_hit": -2, From 611e43e0ddb9318b86651db36e32f730b8d4b5c9 Mon Sep 17 00:00:00 2001 From: LaVeyanFiend <51099123+LaVeyanFiend@users.noreply.github.com> Date: Tue, 30 Jun 2020 03:13:44 -0400 Subject: [PATCH 179/206] Re-audit .40 S&W & .300 WinMag (#41692) --- data/json/items/gun/300.json | 5 ++++- data/json/items/gun/40.json | 27 ++++++++++++++++++--------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/data/json/items/gun/300.json b/data/json/items/gun/300.json index 166900ca6ed38..ce542b7b24ab3 100644 --- a/data/json/items/gun/300.json +++ b/data/json/items/gun/300.json @@ -8,7 +8,8 @@ "//": "http://www.guns.com/2012/05/17/remington-xm2010-army-sniper-system-esr-now-in-stores/.", "description": "A bolt-action, box-magazine-fed, sniper rifle chambered in the powerful .300 Winchester Magnum round. The M2010 had completely replaced the M24 rifle series by 2017.", "weight": "5443 g", - "volume": "7143 ml", + "volume": "6182 ml", + "longest_side": "1187 mm", "price": 1701000, "price_postapoc": 3750, "to_hit": -1, @@ -40,6 +41,7 @@ "description": "The Weatherby Mark V is one of the finest bolt action rifles. Designed in 1955 by Roy Weatherby and Fred Jennie, it has a strong action designed to safely fire high-pressure cartridges. These rifles were presented to celebrities as part of a marketing campaign.", "weight": "3730 g", "volume": "3761 ml", + "longest_side": "1183 mm", "price": 259500, "price_postapoc": 5500, "to_hit": -1, @@ -64,6 +66,7 @@ "description": "The Winchester Model 70 is a bolt action sporting rifle. It has an iconic place in American sporting culture and has been held in high regard by shooters since it was introduced in 1936.", "weight": "3520 g", "volume": "3205 ml", + "longest_side": "1198 mm", "price": 46000, "price_postapoc": 3250, "to_hit": -1, diff --git a/data/json/items/gun/40.json b/data/json/items/gun/40.json index 12e93ab4aa522..1abf3c1842973 100644 --- a/data/json/items/gun/40.json +++ b/data/json/items/gun/40.json @@ -6,8 +6,9 @@ "type": "GUN", "name": { "str": "Beretta 90-two .40 S&W" }, "description": "A more modern version of Beretta's popular 92 series of handguns, the 90-two performs largely the same. The main difference is a sleeker, almost futuristic-looking design owed in large parts to the polymer underbarrel rail cover. This one is chambered in .40 S&W.", - "weight": "921 g", - "volume": "518 ml", + "weight": "905 g", + "volume": "554 ml", + "longest_side": "250 mm", "price": 65000, "to_hit": -2, "bashing": 8, @@ -38,7 +39,8 @@ "name": { "str_sp": "Glock 22" }, "description": "A .40 S&W variant of the popular Glock 17 pistol. The standard-issue firearm of the FBI and of countless other law enforcement agencies worldwide.", "weight": "645 g", - "volume": "443 ml", + "volume": "433 ml", + "longest_side": "234 mm", "price": 69000, "price_postapoc": 1750, "to_hit": -2, @@ -86,7 +88,8 @@ "name": { "str": "Beretta Px4 Storm .40 S&W" }, "description": "Lighter than Beretta's iconic 92 series of guns, the Px4 Storm was built by utilizing light-weight polymer construction with steel inserts. Its shape was also optimized for concealed carry. This one is chambered in .40 S&W.", "weight": "785 g", - "volume": "505 ml", + "volume": "520 ml", + "longest_side": "231 mm", "price": 65000, "to_hit": -2, "bashing": 8, @@ -156,7 +159,8 @@ "name": { "str_sp": "SIG Pro .40" }, "description": "Originally marketed as a lightweight and compact alternative to older SIG handguns, the Pro .40 is popular among European police forces.", "weight": "822 g", - "volume": "523 ml", + "volume": "509 ml", + "longest_side": "221 mm", "price": 75000, "price_postapoc": 1500, "to_hit": -2, @@ -251,6 +255,7 @@ "description": "A homemade 6-shot revolver. While it's not as good as the pre-Cataclysm manufactured weapons, it's a decent piece of work, all things considered.", "weight": "1333 g", "volume": "750 ml", + "longest_side": "33 cm", "price": 15000, "price_postapoc": 750, "to_hit": -2, @@ -290,6 +295,7 @@ "description": "The Smith and Wesson 610 is a classic six-shooter revolver chambered for 10mm rounds, or for S&W's own .40 round.", "weight": "1420 g", "volume": "754 ml", + "longest_side": "332 mm", "price": 74000, "price_postapoc": 2250, "to_hit": -2, @@ -322,8 +328,9 @@ "type": "GUN", "name": { "str": "Browning Hi-Power .40 S&W" }, "description": "The Browning Hi-Power is a semi-automatic handgun developed shortly before the second world war. Widely issued since then, it remains in use by India, Canada and Australia. This is a commercial variant produced by Browning Arms in .40 S&W.", - "weight": "900 g", - "volume": "418 ml", + "weight": "907 g", + "volume": "274 ml", + "longest_side": "228 mm", "price": 54000, "price_postapoc": 2000, "to_hit": -2, @@ -352,7 +359,8 @@ "name": { "str": "Walther PPQ .40 S&W" }, "description": "The Walther PPQ is a semi-automatic pistol originating from the Walther P99QA, and maintains compatibility with some of its predecessor's accessories. This model is chambered in .40 S&W.", "weight": "625 g", - "volume": "422 ml", + "volume": "440 ml", + "longest_side": "215 mm", "price": 72500, "price_postapoc": 2000, "bashing": 8, @@ -380,7 +388,8 @@ "name": { "str": "Hi-Point Model JCP" }, "description": "The Hi-Point Model JCP is a blowback operated semi-automatic pistol designed by Hi-Point Firearms, which is known for making inexpensive firearms, and for making said firearms bulky and uncomfortable. Hi-Points have slides made with a zinc pot-metal which is relatively fragile compared to steel slides.", "weight": "990 g", - "volume": "703 ml", + "volume": "546 ml", + "longest_side": "234 mm", "price": 7500, "price_postapoc": 2000, "to_hit": -2, From 38883252e0e1a929343bd0ff21d7a2b288d0e9c5 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Tue, 30 Jun 2020 09:14:23 +0200 Subject: [PATCH 180/206] [My Sweet Cataclysm] Gum is forever (#41032) --- data/json/field_type.json | 25 +++++++++++++- .../mods/My_Sweet_Cataclysm/sweet_effect.json | 3 +- .../My_Sweet_Cataclysm/sweet_field_type.json | 8 ++--- doc/EFFECTS_JSON.md | 5 +++ doc/JSON_INFO.md | 1 + src/character.cpp | 33 +++++++++++++++++++ src/character.h | 1 + src/creature.cpp | 15 ++++++++- src/creature.h | 1 + src/field.cpp | 5 +++ src/field.h | 1 + src/field_type.cpp | 2 ++ src/field_type.h | 2 ++ src/map.cpp | 27 ++++++++------- src/map_field.cpp | 20 +++-------- 15 files changed, 114 insertions(+), 35 deletions(-) diff --git a/data/json/field_type.json b/data/json/field_type.json index 76f8b860bb0c5..d0439ec43ce28 100644 --- a/data/json/field_type.json +++ b/data/json/field_type.json @@ -76,9 +76,32 @@ "id": "fd_web", "type": "field_type", "legacy_enum_id": 5, - "intensity_levels": [ { "name": "cobwebs", "sym": "}" }, { "name": "webs" }, { "name": "thick webs", "transparent": false } ], + "intensity_levels": [ + { + "name": "cobwebs", + "sym": "}", + "effects": [ + { "effect_id": "webbed", "intensity": 1, "min_duration": "1 m", "immune_in_vehicle": true, "is_environmental": false } + ] + }, + { + "name": "webs", + "effects": [ + { "effect_id": "webbed", "intensity": 2, "min_duration": "1 m", "immune_in_vehicle": true, "is_environmental": false } + ] + }, + { + "name": "thick webs", + "transparent": false, + "effects": [ + { "effect_id": "webbed", "intensity": 3, "min_duration": "1 m", "immune_in_vehicle": true, "is_environmental": false } + ] + } + ], "description_affix": "covered_in", "immunity_data": { "traits": [ "WEB_WALKER" ] }, + "immune_mtypes": [ "mon_spider_web", "mon_spider_web_s" ], + "decrease_intensity_on_contact": true, "priority": 2, "phase": "solid", "display_items": false, diff --git a/data/mods/My_Sweet_Cataclysm/sweet_effect.json b/data/mods/My_Sweet_Cataclysm/sweet_effect.json index 416caf3b97bf7..310b98db195a9 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_effect.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_effect.json @@ -7,10 +7,11 @@ "apply_message": "You're covered in gum!", "rating": "bad", "miss_messages": [ [ "The gum webs constrict your movement.", 4 ] ], - "max_intensity": 3, + "max_intensity": 6, "max_duration": "30 s", "base_mods": { "speed_mod": [ -20 ] }, "scaling_mods": { "speed_mod": [ -20 ] }, + "flags": [ "EFFECT_IMPEDING" ], "show_in_info": true } ] diff --git a/data/mods/My_Sweet_Cataclysm/sweet_field_type.json b/data/mods/My_Sweet_Cataclysm/sweet_field_type.json index 77c43ffcd5850..73df21fc1a46c 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_field_type.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_field_type.json @@ -4,6 +4,7 @@ "type": "field_type", "legacy_enum_id": 5, "immune_mtypes": [ "mon_spider_gum" ], + "decrease_intensity_on_contact": true, "intensity_levels": [ { "name": "flimsy gum webs", @@ -12,7 +13,7 @@ "effects": [ { "effect_id": "gummed", - "intensity": 1, + "intensity": 2, "min_duration": "2 seconds", "immune_in_vehicle": true, "is_environmental": false, @@ -27,7 +28,7 @@ "effects": [ { "effect_id": "gummed", - "intensity": 2, + "intensity": 4, "min_duration": "20 seconds", "immune_in_vehicle": true, "is_environmental": false, @@ -43,7 +44,7 @@ "effects": [ { "effect_id": "gummed", - "intensity": 3, + "intensity": 6, "min_duration": "40 seconds", "immune_in_vehicle": true, "is_environmental": false, @@ -57,7 +58,6 @@ "description_affix": "covered_in", "priority": 2, "phase": "solid", - "half_life": "2 h", "bash": { "str_min": 1, "str_max": 3, diff --git a/doc/EFFECTS_JSON.md b/doc/EFFECTS_JSON.md index 5f637266e3e5b..56db3f15fbf4d 100644 --- a/doc/EFFECTS_JSON.md +++ b/doc/EFFECTS_JSON.md @@ -286,6 +286,11 @@ main part (arms, head, legs, etc.). them more pkill. "pain_sizing" and "hurt_sizing" cause large/huge mutations to affect the chance of pain and hurt effects triggering. "harmful_cough" means that the coughs caused by this effect can hurt the player. +### Flags + +"EFFECT_INVISIBLE" Character affected by an effect with this flag are invisible. +"EFFECT_IMPEDING" Character affected by an effect with this flag can't move until they break free from the effect. Breaking free requires a strenght check: `x_in_y( get_str(), 6 * get_effect_int( eff_id )` + ### Effect effects ```C++ "base_mods" : { diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 0848d94c2c5d6..138b3ed9092ba 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -3450,6 +3450,7 @@ Setting of sprite sheets. Same as `tiles-new` field in `tile_config`. Sprite fil { "name": "shadow", // name of this level of intensity "light_override": 3.7 } //light level on the tile occupied by this field will be set at 3.7 not matter the ambient light. ], + "decrease_intensity_on_contact": true, // Decrease the field intensity by one each time a character walk on it. "bash": { "str_min": 1, // lower bracket of bashing damage required to bash "str_max": 3, // higher bracket diff --git a/src/character.cpp b/src/character.cpp index d04adcca5d0e3..af7163d62b45d 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -339,6 +339,7 @@ static const std::string flag_BELTED( "BELTED" ); static const std::string flag_BLIND( "BLIND" ); static const std::string flag_DEAF( "DEAF" ); static const std::string flag_DISABLE_SIGHTS( "DISABLE_SIGHTS" ); +static const std::string flag_EFFECT_IMPEDING( "EFFECT_IMPEDING" ); static const std::string flag_EFFECT_INVISIBLE( "EFFECT_INVISIBLE" ); static const std::string flag_EFFECT_NIGHT_VISION( "EFFECT_NIGHT_VISION" ); static const std::string flag_FIX_NEARSIGHT( "FIX_NEARSIGHT" ); @@ -1558,6 +1559,29 @@ void Character::try_remove_webs() } } +void Character::try_remove_impeding_effect() +{ + for( const effect &eff : get_effects_with_flag( flag_EFFECT_IMPEDING ) ) { + const efftype_id &eff_id = eff.get_id(); + if( is_mounted() ) { + auto mon = mounted_creature.get(); + if( x_in_y( mon->type->melee_dice * mon->type->melee_sides, + 6 * get_effect_int( eff_id ) ) ) { + add_msg( _( "The %s breaks free!" ), mon->get_name() ); + mon->remove_effect( eff_id ); + remove_effect( eff_id ); + } + /** @EFFECT_STR increases chance to escape webs */ + } else if( x_in_y( get_str(), 6 * get_effect_int( eff_id ) ) ) { + add_msg_player_or_npc( m_good, _( "You free yourself!" ), + _( " frees themselves!" ) ); + remove_effect( eff_id ); + } else { + add_msg_if_player( _( "You try to free yourself, but can't!" ) ); + } + } +} + bool Character::move_effects( bool attacking ) { if( has_effect( effect_downed ) ) { @@ -1585,6 +1609,11 @@ bool Character::move_effects( bool attacking ) try_remove_crushed(); return false; } + if( has_effect_with_flag( flag_EFFECT_IMPEDING ) ) { + try_remove_impeding_effect(); + return false; + } + // Below this point are things that allow for movement if they succeed // Currently we only have one thing that forces movement if you succeed, should we get more @@ -1627,6 +1656,10 @@ void Character::wait_effects( bool attacking ) try_remove_webs(); return; } + if( has_effect_with_flag( flag_EFFECT_IMPEDING ) ) { + try_remove_impeding_effect(); + return; + } if( has_effect( effect_grabbed ) && !attacking && !try_remove_grab() ) { return; } diff --git a/src/character.h b/src/character.h index 523ef41f86594..39bef0767288f 100644 --- a/src/character.h +++ b/src/character.h @@ -639,6 +639,7 @@ class Character : public Creature, public visitable void try_remove_heavysnare(); void try_remove_crushed(); void try_remove_webs(); + void try_remove_impeding_effect(); /** Check against the character's current movement mode */ bool movement_mode_is( const move_mode_id &mode ) const; diff --git a/src/creature.cpp b/src/creature.cpp index 25c59fc1655d9..bc01e992e99ec 100644 --- a/src/creature.cpp +++ b/src/creature.cpp @@ -1145,7 +1145,7 @@ bool Creature::has_effect_with_flag( const std::string &flag, body_part bp ) con { for( auto &elem : *effects ) { for( const std::pair &_it : elem.second ) { - if( bp == _it.first && _it.second.has_flag( flag ) ) { + if( ( bp == _it.first || bp == num_bp ) && _it.second.has_flag( flag ) ) { return true; } } @@ -1153,6 +1153,19 @@ bool Creature::has_effect_with_flag( const std::string &flag, body_part bp ) con return false; } +std::vector Creature::get_effects_with_flag( const std::string &flag ) const +{ + std::vector effs; + for( auto &elem : *effects ) { + for( const std::pair &_it : elem.second ) { + if( _it.second.has_flag( flag ) ) { + effs.push_back( _it.second ); + } + } + } + return effs; +} + effect &Creature::get_effect( const efftype_id &eff_id, body_part bp ) { return const_cast( const_cast( this )->get_effect( eff_id, bp ) ); diff --git a/src/creature.h b/src/creature.h index f17b3a727eafd..e19c3ff4a3e09 100644 --- a/src/creature.h +++ b/src/creature.h @@ -494,6 +494,7 @@ class Creature bool has_effect( const efftype_id &eff_id, body_part bp = num_bp ) const; /** Check if creature has any effect with the given flag. */ bool has_effect_with_flag( const std::string &flag, body_part bp = num_bp ) const; + std::vector get_effects_with_flag( const std::string &flag ) const; /** Return the effect that matches the given arguments exactly. */ const effect &get_effect( const efftype_id &eff_id, body_part bp = num_bp ) const; effect &get_effect( const efftype_id &eff_id, body_part bp = num_bp ); diff --git a/src/field.cpp b/src/field.cpp index bbf8102195051..062b09d867694 100644 --- a/src/field.cpp +++ b/src/field.cpp @@ -130,6 +130,11 @@ int field_entry::set_field_intensity( int new_intensity ) } +void field_entry::mod_field_intensity( int mod ) +{ + set_field_intensity( get_field_intensity() + mod ); +} + time_duration field_entry::get_field_age() const { return age; diff --git a/src/field.h b/src/field.h index 38aabd02041a4..1668c8cf3d56d 100644 --- a/src/field.h +++ b/src/field.h @@ -62,6 +62,7 @@ class field_entry int get_field_intensity() const; // Allows you to modify the intensity of the current field entry. int set_field_intensity( int new_intensity ); + void mod_field_intensity( int mod ); /// @returns @ref age. time_duration get_field_age() const; diff --git a/src/field_type.cpp b/src/field_type.cpp index d6ae14b553938..fa21bd996e471 100644 --- a/src/field_type.cpp +++ b/src/field_type.cpp @@ -250,6 +250,8 @@ void field_type::load( const JsonObject &jo, const std::string & ) optional( jo, was_loaded, "display_field", display_field, false ); optional( jo, was_loaded, "wandering_field", wandering_field_id, "fd_null" ); + optional( jo, was_loaded, "decrease_intensity_on_contact", decrease_intensity_on_contact, false ); + bash_info.load( jo, "bash", map_bash_info::field ); if( was_loaded && jo.has_member( "copy-from" ) && looks_like.empty() ) { looks_like = jo.get_string( "copy-from" ); diff --git a/src/field_type.h b/src/field_type.h index d306a5d155963..6110bc4db642b 100644 --- a/src/field_type.h +++ b/src/field_type.h @@ -163,6 +163,8 @@ struct field_type { field_type_id wandering_field; std::string looks_like; + bool decrease_intensity_on_contact = false; + public: const field_intensity_level &get_intensity_level( int level = 0 ) const; std::string get_name( int level = 0 ) const { diff --git a/src/map.cpp b/src/map.cpp index e9b3edbb1bad5..53e08c0711b5a 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -3347,10 +3347,12 @@ void map::bash_vehicle( const tripoint &p, bash_params ¶ms ) void map::bash_field( const tripoint &p, bash_params ¶ms ) { - if( get_field( p, fd_web ) != nullptr ) { - params.did_bash = true; - params.bashed_solid = true; // To prevent bashing furniture/vehicles - remove_field( p, fd_web ); + for( const std::pair &fd : field_at( p ) ) { + if( fd.first->bash_info.str_min > -1 ) { + params.did_bash = true; + params.bashed_solid = true; // To prevent bashing furniture/vehicles + remove_field( p, fd.first ); + } } } @@ -3650,14 +3652,15 @@ void map::shoot( const tripoint &p, projectile &proj, const bool hit_items ) dam = std::max( 0.0f, dam ); // Check fields? - const field_entry *fieldhit = get_field( p, fd_web ); - if( fieldhit != nullptr ) { - if( inc ) { - add_field( p, fd_fire, fieldhit->get_field_intensity() - 1 ); - } else if( dam > 5 + fieldhit->get_field_intensity() * 5 && - one_in( 5 - fieldhit->get_field_intensity() ) ) { - dam -= rng( 1, 2 + fieldhit->get_field_intensity() * 2 ); - remove_field( p, fd_web ); + for( const std::pair &fd : field_at( p ) ) { + if( fd.first->bash_info.str_min > 0 ) { + if( inc ) { + add_field( p, fd_fire, fd.second.get_field_intensity() - 1 ); + } else if( dam > 5 + fd.second.get_field_intensity() * 5 && + one_in( 5 - fd.second.get_field_intensity() ) ) { + dam -= rng( 1, 2 + fd.second.get_field_intensity() * 2 ); + remove_field( p, fd.first ); + } } } diff --git a/src/map_field.cpp b/src/map_field.cpp index f49f38586b05b..229ed9f24c59e 100644 --- a/src/map_field.cpp +++ b/src/map_field.cpp @@ -1382,22 +1382,6 @@ void map::player_in_field( player &u ) // Do things based on what field effect we are currently in. const field_type_id ft = cur.get_field_type(); - if( ft == fd_web ) { - // If we are in a web, can't walk in webs or are in a vehicle, get webbed maybe. - // Moving through multiple webs stacks the effect. - if( !u.has_trait( trait_WEB_WALKER ) && !u.in_vehicle ) { - // Between 5 and 15 minus your current web level. - u.add_effect( effect_webbed, 1_turns, num_bp, true, cur.get_field_intensity() ); - // It is spent. - cur.set_field_intensity( 0 ); - continue; - // If you are in a vehicle destroy the web. - // It should of been destroyed when you ran over it anyway. - } else if( u.in_vehicle ) { - cur.set_field_intensity( 0 ); - continue; - } - } if( ft == fd_acid ) { // Assume vehicles block acid damage entirely, // you're certainly not standing in it. @@ -1723,6 +1707,10 @@ void map::creature_in_field( Creature &critter ) const field_type_id cur_field_id = cur_field_entry.get_field_type(); for( const auto &fe : cur_field_entry.field_effects() ) { + // the field is decreased even if you are in a vehicle + if( cur_field_id->decrease_intensity_on_contact ) { + cur_field_entry.mod_field_intensity( -1 ); + } if( in_vehicle && fe.immune_in_vehicle ) { continue; } From 24f5590b5cfce038c3154fa570d0b2711e7de385 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A4r=20Karlsson?= Date: Tue, 30 Jun 2020 09:18:31 +0200 Subject: [PATCH 181/206] Add longest_side to items/tool/knives.json (#41658) * Add longest_side to items/tool/knives.json Also, adjust starting equipment for beekeeper, adding a sheath for the honey scraper. --- data/json/items/tool/knives.json | 3 +++ data/json/professions.json | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/data/json/items/tool/knives.json b/data/json/items/tool/knives.json index ac389deb2daa0..7c38c98bb589d 100644 --- a/data/json/items/tool/knives.json +++ b/data/json/items/tool/knives.json @@ -6,6 +6,7 @@ "description": "A knife consisting of crudely-worked copper, and a simple handle. Primitive, but a step above stone-age.", "weight": "650 g", "volume": "250 ml", + "longest_side": "25 cm", "price": 3000, "price_postapoc": 10, "to_hit": -1, @@ -44,6 +45,7 @@ "description": "A sharp, knife-like tool used in harvesting honey from beehives. Makes a passable melee weapon.", "weight": "580 g", "volume": "250 ml", + "longest_side": "46 cm", "price": 1000, "price_postapoc": 100, "to_hit": -1, @@ -79,6 +81,7 @@ "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.", "weight": "453 g", "volume": "250 ml", + "longest_side": "25 cm", "price": 0, "price_postapoc": 0, "to_hit": -3, diff --git a/data/json/professions.json b/data/json/professions.json index 66f8cebed9c77..b895a804c7a01 100644 --- a/data/json/professions.json +++ b/data/json/professions.json @@ -651,7 +651,6 @@ "items": { "both": { "items": [ - "honey_scraper", "beekeeping_hood", "beekeeping_suit", "beekeeping_gloves", @@ -662,7 +661,7 @@ "honey_bottled", "honey_bottled" ], - "entries": [ { "group": "charged_cell_phone" } ] + "entries": [ { "group": "charged_cell_phone" }, { "item": "honey_scraper", "container-item": "sheath" } ] }, "male": [ "boxer_briefs" ], "female": [ "bra", "panties" ] From 6d1f70cc74311198530738509c3328b4ceb575b4 Mon Sep 17 00:00:00 2001 From: johnrdconnolly <59102789+johnrdconnolly@users.noreply.github.com> Date: Tue, 30 Jun 2020 00:19:12 -0700 Subject: [PATCH 182/206] Update firerighting.json lengths (#41645) --- data/json/items/tool/firefighting.json | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/data/json/items/tool/firefighting.json b/data/json/items/tool/firefighting.json index d7d4dd8b44ed2..36e62708d7c11 100644 --- a/data/json/items/tool/firefighting.json +++ b/data/json/items/tool/firefighting.json @@ -14,6 +14,7 @@ "techniques": [ "WBLOCK_1" ], "weight": "907 g", "volume": "1 L", + "longest_side": "40 cm", "bashing": 17, "cutting": 28, "to_hit": -2, @@ -25,8 +26,9 @@ "type": "TOOL", "name": { "str": "large fire extinguisher" }, "description": "This is an emergency fire extinguisher containing five gallons of fire retardant foam. It would be useful for putting out adjacent fires.", - "weight": "13813 g", + "weight": "7030 g", "volume": "20000 ml", + "longest_side": "50 cm", "price": 5000, "price_postapoc": 100, "to_hit": -4, @@ -57,6 +59,7 @@ "weight": "2520 g", "volume": "2 L", "price": 20000, + "longest_side": "90 cm", "price_postapoc": 1500, "bashing": 17, "cutting": 34, @@ -73,8 +76,9 @@ "type": "TOOL", "name": { "str": "Halligan bar" }, "description": "This is a heavy multiple-use tool commonly carried by firefighters, law enforcement, and military rescue units. Use it to open locked doors without destroying them or to lift manhole covers. You could also wield it to bash some heads in.", - "weight": "3600 g", + "weight": "5443 g", "volume": "1250 ml", + "longest_side": "60 cm", "price": 7500, "price_postapoc": 1500, "bashing": 40, @@ -85,15 +89,16 @@ "techniques": [ "WBLOCK_1", "BRUTAL", "SWEEP" ], "qualities": [ [ "PRY", 4 ], [ "HAMMER", 2 ], [ "DIG", 1 ] ], "use_action": [ "HAMMER", "CROWBAR" ], - "flags": [ "DURABLE_MELEE", "BELT_CLIP", "STAB" ] + "flags": [ "DURABLE_MELEE", "BELT_CLIP", "STAB", "SHEATH_AXE" ] }, { "id": "sm_extinguisher", "type": "TOOL", "name": { "str": "small fire extinguisher" }, "description": "This is a hand held fire extinguisher containing a liter of highly compressed CO2 gas. It would be useful for putting out adjacent fires.", - "weight": "2267 g", + "weight": "1133 g", "volume": "2000 ml", + "longest_side": "40 cm", "price": 4000, "price_postapoc": 50, "to_hit": -1, @@ -178,6 +183,7 @@ "flags": [ "DURABLE_MELEE", "REACH_ATTACK", "NONCONDUCTIVE", "SHEATH_SPEAR", "ALWAYS_TWOHAND" ], "weight": "3100 g", "volume": "3250 ml", + "longest_side": "160 cm", "bashing": 20, "cutting": 6, "to_hit": -1, @@ -197,6 +203,7 @@ "flags": [ "DURABLE_MELEE", "STAB", "SHEATH_AXE" ], "weight": "2900 g", "volume": "1900 ml", + "longest_side": "90 cm", "bashing": 15, "cutting": 13, "to_hit": -1, From 537b77378619d28aaf8c617b0f82317ef66c251d Mon Sep 17 00:00:00 2001 From: nexusmrsep <39925111+nexusmrsep@users.noreply.github.com> Date: Tue, 30 Jun 2020 09:21:52 +0200 Subject: [PATCH 183/206] Skill based achievements (#41657) --- data/json/achievements.json | 435 +++++++++++++++ data/json/statistics.json | 1044 +++++++++++++++++++++++++++++++++++ src/player.cpp | 3 + 3 files changed, 1482 insertions(+) diff --git a/data/json/achievements.json b/data/json/achievements.json index bbe0bf7f184c1..66decd2db0948 100644 --- a/data/json/achievements.json +++ b/data/json/achievements.json @@ -286,5 +286,440 @@ { "event_statistic": "num_broken_right_arm", "is": ">=", "target": 1, "visible": "when_requirement_completed" }, { "event_statistic": "num_broken_left_arm", "is": ">=", "target": 1, "visible": "when_requirement_completed" } ] + }, + { + "id": "achievement_lvl_7_barter", + "type": "achievement", + "name": "Free Trader", + "description": "Extraordinary gizmos for obscenely low prices!", + "requirements": [ { "event_statistic": "num_gains_barter_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_barter", + "type": "achievement", + "name": "Cut-Me-Own-Throat Dibbler", + "description": "My Innuit friend, I'm selling you this ice for such a low price, that it's cutting me own throat.", + "requirements": [ { "event_statistic": "num_gains_barter_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_barter" ] + }, + { + "id": "achievement_lvl_7_speech", + "type": "achievement", + "name": "Eloquent", + "description": "We're frends, aren't we?", + "requirements": [ { "event_statistic": "num_gains_speech_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_speech", + "type": "achievement", + "name": "Silver Tongue", + "description": "Legend has it that you convinced a zombie hulk to go away.", + "requirements": [ { "event_statistic": "num_gains_speech_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_speech" ] + }, + { + "id": "achievement_lvl_7_computer", + "type": "achievement", + "name": "HackerMan", + "description": "This OS has a back door. There is always a back door.", + "requirements": [ { "event_statistic": "num_gains_computer_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_computer", + "type": "achievement", + "name": "Still not quite like Kevin", + "description": "It's not cheating. It's debugging.", + "requirements": [ { "event_statistic": "num_gains_computer_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_computer" ] + }, + { + "id": "achievement_lvl_7_firstaid", + "type": "achievement", + "name": "MD", + "description": "Is there a doctor in the house?", + "requirements": [ { "event_statistic": "num_gains_firstaid_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_firstaid", + "type": "achievement", + "name": "Dr House", + "description": "It's lupus.", + "requirements": [ { "event_statistic": "num_gains_firstaid_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_firstaid" ] + }, + { + "id": "achievement_lvl_7_mechanics", + "type": "achievement", + "name": "Engineer", + "description": "Just give me my wrench.", + "requirements": [ { "event_statistic": "num_gains_mechanics_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_mechanics", + "type": "achievement", + "name": "MacGyver", + "description": "This whole deal is holding on faith, spit and duct tape.", + "requirements": [ { "event_statistic": "num_gains_mechanics_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_mechanics" ] + }, + { + "id": "achievement_lvl_7_traps", + "type": "achievement", + "name": "Trapper", + "description": "A good trap doesn't discriminate between beavers and zombeavers.", + "requirements": [ { "event_statistic": "num_gains_traps_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_traps", + "type": "achievement", + "name": "Minesweeper", + "description": "All it takes is one mistake.", + "requirements": [ { "event_statistic": "num_gains_traps_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_traps" ] + }, + { + "id": "achievement_lvl_7_driving", + "type": "achievement", + "name": "Ace Driver", + "description": "No turn is too sharp.", + "requirements": [ { "event_statistic": "num_gains_driving_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_driving", + "type": "achievement", + "name": "The Stig", + "description": "Formula One is for Sunday drivers.", + "requirements": [ { "event_statistic": "num_gains_driving_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_driving" ] + }, + { + "id": "achievement_lvl_7_swimming", + "type": "achievement", + "name": "Swimmer", + "description": "Like a fish to water.", + "requirements": [ { "event_statistic": "num_gains_swimming_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_swimming", + "type": "achievement", + "name": "Michael Phelps", + "description": "Faster then Jaws.", + "requirements": [ { "event_statistic": "num_gains_swimming_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_swimming" ] + }, + { + "id": "achievement_lvl_7_fabrication", + "type": "achievement", + "name": "Do-It-Yourselfer", + "description": "Take this thing, put it in that thing, and voila.", + "requirements": [ { "event_statistic": "num_gains_fabrication_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_fabrication", + "type": "achievement", + "name": "Jack of All Trades", + "description": "With a right ammount of glue, there is nothing I can't do.", + "requirements": [ { "event_statistic": "num_gains_fabrication_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_fabrication" ] + }, + { + "id": "achievement_lvl_7_cooking", + "type": "achievement", + "name": "Master Chef", + "description": "Glazed tenderloin is a cakewalk.", + "requirements": [ { "event_statistic": "num_gains_cooking_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_cooking", + "type": "achievement", + "name": "Hell's Kitchen", + "description": "Today's menu: Soupe a l'oignon, Boeuf Bourguignon and Creme brulee.", + "requirements": [ { "event_statistic": "num_gains_cooking_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_cooking" ] + }, + { + "id": "achievement_lvl_7_tailor", + "type": "achievement", + "name": "Tailor", + "description": "A needle, a thread and a dream.", + "requirements": [ { "event_statistic": "num_gains_tailor_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_tailor", + "type": "achievement", + "name": "Fashion Designer", + "description": "Male, feamale and mutant fashion alike.", + "requirements": [ { "event_statistic": "num_gains_tailor_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_tailor" ] + }, + { + "id": "achievement_lvl_7_survival", + "type": "achievement", + "name": "Survivalist", + "description": "Survival is my game.", + "requirements": [ { "event_statistic": "num_gains_survival_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_survival", + "type": "achievement", + "name": "Bear Grylls", + "description": "So you say you can survive on your own urine?", + "requirements": [ { "event_statistic": "num_gains_survival_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_survival" ] + }, + { + "id": "achievement_lvl_7_electronics", + "type": "achievement", + "name": "Ohm's Law", + "description": "Thunder Ohm. Two volts enter, one volt leaves. Resistance is futile.", + "requirements": [ { "event_statistic": "num_gains_electronics_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_electronics", + "type": "achievement", + "name": "Nicola Tesla", + "description": "One does not simply taste a 9V battery.", + "requirements": [ { "event_statistic": "num_gains_electronics_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_electronics" ] + }, + { + "id": "achievement_lvl_7_archery", + "type": "achievement", + "name": "Bull's Eye", + "description": "Better then Legolas.", + "requirements": [ { "event_statistic": "num_gains_archery_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_archery", + "type": "achievement", + "name": "Robin Hood", + "description": "Wilhelm Tell? Never heard of.", + "requirements": [ { "event_statistic": "num_gains_archery_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_archery" ] + }, + { + "id": "achievement_lvl_7_gun", + "type": "achievement", + "name": "Eagle Eye", + "description": "Only me and my target.", + "requirements": [ { "event_statistic": "num_gains_gun_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_gun", + "type": "achievement", + "name": "Deadshot", + "description": "Don't run. You'll die tired.", + "requirements": [ { "event_statistic": "num_gains_gun_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_gun" ] + }, + { + "id": "achievement_lvl_7_launcher", + "type": "achievement", + "name": "Gunner", + "description": "Caliber makes the difference.", + "requirements": [ { "event_statistic": "num_gains_launcher_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_launcher", + "type": "achievement", + "name": "Rocket Man", + "description": "I'm sending you to the moon. In pieces.", + "requirements": [ { "event_statistic": "num_gains_launcher_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_launcher" ] + }, + { + "id": "achievement_lvl_7_pistol", + "type": "achievement", + "name": "Small But Deadly", + "description": "Caliber doesn't count when you're on the recieving side of the barrel.", + "requirements": [ { "event_statistic": "num_gains_pistol_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_pistol", + "type": "achievement", + "name": "Dirty Harry", + "description": "But being this is a .44 Magnum, the most powerful handgun in the world and would blow your head clean off, you've gotta ask yourself one question: Do I feel lucky? Well, do ya, punk?", + "requirements": [ { "event_statistic": "num_gains_pistol_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_pistol" ] + }, + { + "id": "achievement_lvl_7_rifle", + "type": "achievement", + "name": "Rifleman", + "description": "This is my rifle. There are many like it, but this one is mine. My rifle is my best friend. It is my life. I must master it as I must master my life.", + "requirements": [ { "event_statistic": "num_gains_rifle_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_rifle", + "type": "achievement", + "name": "Soldier", + "description": "Without me, my rifle is useless. Without my rifle, I am useless. I will keep my rifle clean and ready, even as I am clean and ready. We will become part of each other.", + "requirements": [ { "event_statistic": "num_gains_rifle_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_rifle" ] + }, + { + "id": "achievement_lvl_7_shotgun", + "type": "achievement", + "name": "Double Barrel, Double Fun", + "description": "When you want to hit your target nine times with one shot.", + "requirements": [ { "event_statistic": "num_gains_shotgun_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_shotgun", + "type": "achievement", + "name": "Elmer Fudd", + "description": "What's up doc? Hunting wabbits?", + "requirements": [ { "event_statistic": "num_gains_shotgun_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_shotgun" ] + }, + { + "id": "achievement_lvl_7_smg", + "type": "achievement", + "name": "Spray'n'Pray", + "description": "One will hit. It's a matter of statistics.", + "requirements": [ { "event_statistic": "num_gains_smg_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_smg", + "type": "achievement", + "name": "SMG Goes BRRRT!", + "description": "We definitely need more ammo.", + "requirements": [ { "event_statistic": "num_gains_smg_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_smg" ] + }, + { + "id": "achievement_lvl_7_throw", + "type": "achievement", + "name": "Yeet!", + "description": "And never come back.", + "requirements": [ { "event_statistic": "num_gains_throw_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_throw", + "type": "achievement", + "name": "Kobe Bryant", + "description": "Frag out!", + "requirements": [ { "event_statistic": "num_gains_throw_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_throw" ] + }, + { + "id": "achievement_lvl_7_melee", + "type": "achievement", + "name": "Brawler", + "description": "Bottle in left hand, chair leg in right hand.", + "requirements": [ { "event_statistic": "num_gains_melee_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_melee", + "type": "achievement", + "name": "Street Fighter", + "description": "It's winning that matters, not the style.", + "requirements": [ { "event_statistic": "num_gains_melee_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_melee" ] + }, + { + "id": "achievement_lvl_7_bashing", + "type": "achievement", + "name": "Batter", + "description": "Every strike brings me closer to a home run.", + "requirements": [ { "event_statistic": "num_gains_bashing_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_bashing", + "type": "achievement", + "name": "Stone Age", + "description": "Cudgel was humanity's first tool. And it may be it's last, so why not master it?", + "requirements": [ { "event_statistic": "num_gains_bashing_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_bashing" ] + }, + { + "id": "achievement_lvl_7_cutting", + "type": "achievement", + "name": "Way of the Sword", + "description": "When the sword is once drawn, the passions of men observe no bounds of moderation.", + "requirements": [ { "event_statistic": "num_gains_cutting_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_cutting", + "type": "achievement", + "name": "Miyamoto Musashi", + "description": "The sword has to be more than a simple weapon; it has to be an answer to life's questions.", + "requirements": [ { "event_statistic": "num_gains_cutting_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_cutting" ] + }, + { + "id": "achievement_lvl_7_dodge", + "type": "achievement", + "name": "Elusive", + "description": "A strongest of blows is nothing if it doesn't land.", + "requirements": [ { "event_statistic": "num_gains_dodge_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_dodge", + "type": "achievement", + "name": "Neo", + "description": "But can you dodge a bullet?", + "requirements": [ { "event_statistic": "num_gains_dodge_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_dodge" ] + }, + { + "id": "achievement_lvl_7_stabbing", + "type": "achievement", + "name": "Cold Steel", + "description": "While you were partying, I studied the blade.", + "requirements": [ { "event_statistic": "num_gains_stabbing_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_stabbing", + "type": "achievement", + "name": "Jack the Ripper", + "description": "Is this a dagger which I see before me, the handle toward my hand? Come, let me clutch thee.", + "requirements": [ { "event_statistic": "num_gains_stabbing_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_stabbing" ] + }, + { + "id": "achievement_lvl_7_unarmed", + "type": "achievement", + "name": "Road to Shaolin", + "description": "I feel an army in my fist.", + "requirements": [ { "event_statistic": "num_gains_unarmed_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_unarmed", + "type": "achievement", + "name": "Mr Miyagi", + "description": "To be your own weapon.", + "requirements": [ { "event_statistic": "num_gains_unarmed_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_unarmed" ] + }, + { + "id": "achievement_lvl_7_lockpick", + "type": "achievement", + "name": "Burglar", + "description": "Crowbar? Such a barbarity.", + "requirements": [ { "event_statistic": "num_gains_lockpick_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_lockpick", + "type": "achievement", + "name": "Locksmith", + "description": "If there is a lock, there is a key.", + "requirements": [ { "event_statistic": "num_gains_lockpick_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_lockpick" ] + }, + { + "id": "achievement_lvl_7_chemistry", + "type": "achievement", + "name": "Periodic Table", + "description": "It's somewhat like cooking. Just don't lick the spoon.", + "requirements": [ { "event_statistic": "num_gains_chemistry_level_7", "is": ">=", "target": 1 } ] + }, + { + "id": "achievement_lvl_10_chemistry", + "type": "achievement", + "name": "Heisenberg", + "description": "You all know who I am. I'm the cook. Say my name.", + "requirements": [ { "event_statistic": "num_gains_chemistry_level_10", "is": ">=", "target": 1 } ], + "hidden_by": [ "achievement_lvl_7_chemistry" ] } ] diff --git a/data/json/statistics.json b/data/json/statistics.json index 3ef7f023f5441..417e625ebce40 100644 --- a/data/json/statistics.json +++ b/data/json/statistics.json @@ -523,6 +523,1050 @@ "event_transformation": "avatar_gains_skill_level", "description": { "str": "skill level gained", "str_pl": "skill levels gained" } }, + { + "id": "avatar_gains_barter_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "barter" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_barter_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_barter_level_7", + "description": { "str_sp": "bartering skill level 7 gained" } + }, + { + "id": "avatar_gains_speech_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "speech" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_speech_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_speech_level_7", + "description": { "str_sp": "speaking skill level 7 gained" } + }, + { + "id": "avatar_gains_computer_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "computer" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_computer_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_computer_level_7", + "description": { "str_sp": "computers skill level 7 gained" } + }, + { + "id": "avatar_gains_firstaid_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "firstaid" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_firstaid_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_firstaid_level_7", + "description": { "str_sp": "first aid skill level 7 gained" } + }, + { + "id": "avatar_gains_mechanics_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "mechanics" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_mechanics_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_mechanics_level_7", + "description": { "str_sp": "mechanics skill level 7 gained" } + }, + { + "id": "avatar_gains_traps_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "traps" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_traps_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_traps_level_7", + "description": { "str_sp": "trapping skill level 7 gained" } + }, + { + "id": "avatar_gains_driving_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "driving" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_driving_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_driving_level_7", + "description": { "str_sp": "driving skill level 7 gained" } + }, + { + "id": "avatar_gains_swimming_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "swimming" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_swimming_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_swimming_level_7", + "description": { "str_sp": "swimming skill level 7 gained" } + }, + { + "id": "avatar_gains_fabrication_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "fabrication" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_fabrication_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_fabrication_level_7", + "description": { "str_sp": "fabrication skill level 7 gained" } + }, + { + "id": "avatar_gains_cooking_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "cooking" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_cooking_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_cooking_level_7", + "description": { "str_sp": "cooking skill level 7 gained" } + }, + { + "id": "avatar_gains_tailor_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "tailor" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_tailor_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_tailor_level_7", + "description": { "str_sp": "tailoring skill level 7 gained" } + }, + { + "id": "avatar_gains_survival_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "survival" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_survival_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_survival_level_7", + "description": { "str_sp": "survival skill level 7 gained" } + }, + { + "id": "avatar_gains_electronics_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "electronics" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_electronics_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_electronics_level_7", + "description": { "str_sp": "electronics skill level 7 gained" } + }, + { + "id": "avatar_gains_archery_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "archery" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_archery_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_archery_level_7", + "description": { "str_sp": "archery skill level 7 gained" } + }, + { + "id": "avatar_gains_gun_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "gun" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_gun_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_gun_level_7", + "description": { "str_sp": "marksmanship skill level 7 gained" } + }, + { + "id": "avatar_gains_launcher_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "launcher" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_launcher_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_launcher_level_7", + "description": { "str_sp": "launchers skill level 7 gained" } + }, + { + "id": "avatar_gains_pistol_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "pistol" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_pistol_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_pistol_level_7", + "description": { "str_sp": "handguns skill level 7 gained" } + }, + { + "id": "avatar_gains_rifle_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "rifle" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_rifle_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_survival_level_7", + "description": { "str_sp": "rifles skill level 7 gained" } + }, + { + "id": "avatar_gains_shotgun_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "shotgun" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_shotgun_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_shotgun_level_7", + "description": { "str_sp": "shotguns skill level 7 gained" } + }, + { + "id": "avatar_gains_smg_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "smg" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_smg_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_smg_level_7", + "description": { "str_sp": "submachine guns skill level 7 gained" } + }, + { + "id": "avatar_gains_throw_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "throw" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_throw_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_throw_level_7", + "description": { "str_sp": "throwing skill level 7 gained" } + }, + { + "id": "avatar_gains_melee_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "melee" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_melee_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_melee_level_7", + "description": { "str_sp": "melee skill level 7 gained" } + }, + { + "id": "avatar_gains_bashing_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "bashing" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_bashing_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_bashing_level_7", + "description": { "str_sp": "bashing weapons skill level 7 gained" } + }, + { + "id": "avatar_gains_cutting_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "cutting" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_cutting_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_cutting_level_7", + "description": { "str_sp": "cutting weapons skill level 7 gained" } + }, + { + "id": "avatar_gains_dodge_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "dodge" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_dodge_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_dodge_level_7", + "description": { "str_sp": "dodging skill level 7 gained" } + }, + { + "id": "avatar_gains_stabbing_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "stabbing" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_stabbing_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_stabbing_level_7", + "description": { "str_sp": "piercing weapons skill level 7 gained" } + }, + { + "id": "avatar_gains_unarmed_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "unarmed" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_unarmed_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_unarmed_level_7", + "description": { "str_sp": "unarmed skill level 7 gained" } + }, + { + "id": "avatar_gains_lockpick_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "lockpick" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_lockpick_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_lockpick_level_7", + "description": { "str_sp": "lock picking skill level 7 gained" } + }, + { + "id": "avatar_gains_chemistry_level_7", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "chemistry" ] }, + "new_level": { "equals": [ "int", "7" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_chemistry_level_7", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_chemistry_level_7", + "description": { "str_sp": "chemistry skill level 7 gained" } + }, + { + "id": "avatar_gains_barter_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "barter" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_barter_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_barter_level_10", + "description": { "str_sp": "bartering skill level 10 gained" } + }, + { + "id": "avatar_gains_speech_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "speech" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_speech_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_speech_level_10", + "description": { "str_sp": "speaking skill level 10 gained" } + }, + { + "id": "avatar_gains_computer_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "computer" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_computer_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_computer_level_10", + "description": { "str_sp": "computers skill level 10 gained" } + }, + { + "id": "avatar_gains_firstaid_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "firstaid" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_firstaid_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_firstaid_level_10", + "description": { "str_sp": "first aid skill level 10 gained" } + }, + { + "id": "avatar_gains_mechanics_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "mechanics" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_mechanics_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_mechanics_level_10", + "description": { "str_sp": "mechanics skill level 10 gained" } + }, + { + "id": "avatar_gains_traps_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "traps" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_traps_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_traps_level_10", + "description": { "str_sp": "trapping skill level 10 gained" } + }, + { + "id": "avatar_gains_driving_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "driving" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_driving_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_driving_level_10", + "description": { "str_sp": "driving skill level 10 gained" } + }, + { + "id": "avatar_gains_swimming_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "swimming" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_swimming_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_swimming_level_10", + "description": { "str_sp": "swimming skill level 10 gained" } + }, + { + "id": "avatar_gains_fabrication_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "fabrication" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_fabrication_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_fabrication_level_10", + "description": { "str_sp": "fabrication skill level 10 gained" } + }, + { + "id": "avatar_gains_cooking_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "cooking" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_cooking_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_cooking_level_10", + "description": { "str_sp": "cooking skill level 10 gained" } + }, + { + "id": "avatar_gains_tailor_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "tailor" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_tailor_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_tailor_level_10", + "description": { "str_sp": "tailoring skill level 10 gained" } + }, + { + "id": "avatar_gains_survival_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "survival" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_survival_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_survival_level_10", + "description": { "str_sp": "survival skill level 10 gained" } + }, + { + "id": "avatar_gains_electronics_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "electronics" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_electronics_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_electronics_level_10", + "description": { "str_sp": "electronics skill level 10 gained" } + }, + { + "id": "avatar_gains_archery_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "archery" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_archery_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_archery_level_10", + "description": { "str_sp": "archery skill level 10 gained" } + }, + { + "id": "avatar_gains_gun_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "gun" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_gun_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_gun_level_10", + "description": { "str_sp": "marksmanship skill level 10 gained" } + }, + { + "id": "avatar_gains_launcher_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "launcher" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_launcher_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_launcher_level_10", + "description": { "str_sp": "launchers skill level 10 gained" } + }, + { + "id": "avatar_gains_pistol_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "pistol" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_pistol_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_pistol_level_10", + "description": { "str_sp": "handguns skill level 10 gained" } + }, + { + "id": "avatar_gains_rifle_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "rifle" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_rifle_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_survival_level_10", + "description": { "str_sp": "rifles skill level 10 gained" } + }, + { + "id": "avatar_gains_shotgun_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "shotgun" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_shotgun_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_shotgun_level_10", + "description": { "str_sp": "shotguns skill level 10 gained" } + }, + { + "id": "avatar_gains_smg_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "smg" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_smg_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_smg_level_10", + "description": { "str_sp": "submachine guns skill level 10 gained" } + }, + { + "id": "avatar_gains_throw_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "throw" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_throw_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_throw_level_10", + "description": { "str_sp": "throwing skill level 10 gained" } + }, + { + "id": "avatar_gains_melee_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "melee" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_melee_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_melee_level_10", + "description": { "str_sp": "melee skill level 10 gained" } + }, + { + "id": "avatar_gains_bashing_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "bashing" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_bashing_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_bashing_level_10", + "description": { "str_sp": "bashing weapons skill level 10 gained" } + }, + { + "id": "avatar_gains_cutting_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "cutting" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_cutting_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_cutting_level_10", + "description": { "str_sp": "cutting weapons skill level 10 gained" } + }, + { + "id": "avatar_gains_dodge_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "dodge" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_dodge_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_dodge_level_10", + "description": { "str_sp": "dodging skill level 10 gained" } + }, + { + "id": "avatar_gains_stabbing_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "stabbing" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_stabbing_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_stabbing_level_10", + "description": { "str_sp": "piercing weapons skill level 10 gained" } + }, + { + "id": "avatar_gains_unarmed_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "unarmed" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_unarmed_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_unarmed_level_10", + "description": { "str_sp": "unarmed skill level 10 gained" } + }, + { + "id": "avatar_gains_lockpick_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "lockpick" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_lockpick_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_lockpick_level_10", + "description": { "str_sp": "lock picking skill level 10 gained" } + }, + { + "id": "avatar_gains_chemistry_level_10", + "type": "event_transformation", + "event_type": "gains_skill_level", + "value_constraints": { + "character": { "equals_statistic": "avatar_id" }, + "skill": { "equals": [ "skill_id", "chemistry" ] }, + "new_level": { "equals": [ "int", "10" ] } + }, + "drop_fields": [ "character", "skill", "new_level" ] + }, + { + "id": "num_gains_chemistry_level_10", + "type": "event_statistic", + "stat_type": "count", + "event_transformation": "avatar_gains_chemistry_level_10", + "description": { "str_sp": "chemistry skill level 10 gained" } + }, { "id": "avatar_reads_book", "type": "event_transformation", diff --git a/src/player.cpp b/src/player.cpp index 1a5a371a95960..747ccab813796 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -3726,6 +3726,9 @@ void player::practice( const skill_id &id, int amount, int cap, bool suppress_wa get_skill_level_object( id ).train( amount ); int newLevel = get_skill_level( id ); std::string skill_name = skill.name(); + if( newLevel > oldLevel ) { + g->events().send( getID(), id, newLevel ); + } if( is_player() && newLevel > oldLevel ) { add_msg( m_good, _( "Your skill in %s has increased to %d!" ), skill_name, newLevel ); } From d750f3c449709274de62696015462258ae4542b1 Mon Sep 17 00:00:00 2001 From: hexagonrecursion Date: Tue, 30 Jun 2020 07:24:39 +0000 Subject: [PATCH 184/206] Finish modernizing volume and weight (#41627) --- data/json/items/gun/50.json | 6 +++--- data/json/items/gun/762R.json | 4 ++-- data/json/items/gun/flintlock.json | 2 +- data/json/items/gun/shot.json | 2 +- data/json/items/melee/swords_and_blades.json | 6 +++--- data/json/items/obsolete.json | 2 +- data/json/items/vehicle/wheel.json | 2 +- data/json/traps.json | 22 ++++++++++---------- data/json/vehicleparts/wheel.json | 2 +- 9 files changed, 24 insertions(+), 24 deletions(-) diff --git a/data/json/items/gun/50.json b/data/json/items/gun/50.json index 9b285d99f595e..e8380986ca2a1 100644 --- a/data/json/items/gun/50.json +++ b/data/json/items/gun/50.json @@ -101,12 +101,12 @@ [ "underbarrel mount", 1 ] ], "relative": { - "weight": -21500, - "volume": -6, + "weight": "-21500 g", + "volume": "-1500 ml", "price": -1210000, "ranged_damage": { "damage_type": "bullet", "amount": -4 }, "dispersion": 60, - "barrel_length": -1 + "barrel_length": "-250 ml" }, "flags": [ "RELOAD_EJECT" ], "pocket_data": [ { "pocket_type": "MAGAZINE", "holster": true, "rigid": true, "ammo_restriction": { "50": 1 } } ] diff --git a/data/json/items/gun/762R.json b/data/json/items/gun/762R.json index 9dd327fd2fe7d..96e20fedc44e7 100644 --- a/data/json/items/gun/762R.json +++ b/data/json/items/gun/762R.json @@ -9,11 +9,11 @@ "price": 23000, "price_postapoc": 3000, "relative": { - "volume": -2, + "volume": "-500 ml", "range": -6, "ranged_damage": { "damage_type": "bullet", "amount": -3 }, "dispersion": 60, - "barrel_length": -2 + "barrel_length": "-500 ml" } }, { diff --git a/data/json/items/gun/flintlock.json b/data/json/items/gun/flintlock.json index 76e33b4aaf25b..7fa5068592ba0 100644 --- a/data/json/items/gun/flintlock.json +++ b/data/json/items/gun/flintlock.json @@ -32,7 +32,7 @@ "clip_size": 2, "price_postapoc": 2750, "proportional": { "dispersion": 1.3, "weight": 1.25, "volume": 1.25 }, - "relative": { "weight": 400, "range": -1, "ranged_damage": { "damage_type": "bullet", "amount": -2 } }, + "relative": { "weight": "400 g", "range": -1, "ranged_damage": { "damage_type": "bullet", "amount": -2 } }, "extend": { "flags": [ "RELOAD_ONE" ] }, "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "flintlock": 2 } } ] }, diff --git a/data/json/items/gun/shot.json b/data/json/items/gun/shot.json index 9d5c1cf07b268..82de9e4b1edb0 100644 --- a/data/json/items/gun/shot.json +++ b/data/json/items/gun/shot.json @@ -318,7 +318,7 @@ "description": "A home-made double-barreled shotgun. It is simply two pipes attached to a stock, with a pair of hammers to strike the two rounds it holds.", "clip_size": 2, "modes": [ [ "DEFAULT", "single", 1 ], [ "DOUBLE", "double", 2 ] ], - "relative": { "weight": 500, "volume": 1, "price": 5000 }, + "relative": { "weight": "500 g", "volume": "250 ml", "price": 5000 }, "barrel_length": "72 ml", "valid_mod_locations": [ [ "accessories", 2 ], diff --git a/data/json/items/melee/swords_and_blades.json b/data/json/items/melee/swords_and_blades.json index 0993ea0243b10..b522cba17549d 100644 --- a/data/json/items/melee/swords_and_blades.json +++ b/data/json/items/melee/swords_and_blades.json @@ -1113,7 +1113,7 @@ "looks_like": "fencing_foil", "name": { "str": "sharpened foil" }, "description": "This once mostly harmless fencing foil has had its electrical plunger assembly removed and has been crudely sharpened to a point. Though it still lacks a cutting edge, it is now somewhat more lethal, yet still familiar to the practiced fencer.", - "relative": { "weight": -25, "cutting": 2 } + "relative": { "weight": "-25 g", "cutting": 2 } }, { "id": "fencing_epee_sharpened", @@ -1122,7 +1122,7 @@ "looks_like": "fencing_epee", "name": { "str": "sharpened épée" }, "description": "This once mostly harmless fencing épée has had its electrical plunger assembly removed and has been crudely sharpened to a point. Though it still lacks a cutting edge, it is now considerably more lethal, yet still familiar to the practiced fencer.", - "relative": { "weight": -35, "cutting": 5 } + "relative": { "weight": "-35 g", "cutting": 5 } }, { "id": "fencing_sabre_sharpened", @@ -1131,7 +1131,7 @@ "looks_like": "fencing_sabre", "name": { "str": "sharpened saber" }, "description": "This once mostly harmless fencing saber has had its rounded tip snapped off and has been crudely sharpened to a point. Though it still lacks a cutting edge, it is now considerably more lethal, yet still familiar to the practiced fencer.", - "relative": { "weight": -10, "cutting": 5 } + "relative": { "weight": "-10 g", "cutting": 5 } }, { "id": "shock_foil", diff --git a/data/json/items/obsolete.json b/data/json/items/obsolete.json index 0770be2921370..156876806e8b2 100644 --- a/data/json/items/obsolete.json +++ b/data/json/items/obsolete.json @@ -2282,7 +2282,7 @@ [ "rail mount", 1 ], [ "underbarrel mount", 1 ] ], - "relative": { "weight": 1000, "volume": 6, "range": 3, "ranged_damage": { "damage_type": "stab", "amount": 4 } }, + "relative": { "weight": "1 kg", "volume": "1500 ml", "range": 3, "ranged_damage": { "damage_type": "stab", "amount": 4 } }, "proportional": { "price": 3, "dispersion": 0.5 }, "pocket_data": [ { diff --git a/data/json/items/vehicle/wheel.json b/data/json/items/vehicle/wheel.json index ee20fdd2ed123..58d1f3859e96e 100644 --- a/data/json/items/vehicle/wheel.json +++ b/data/json/items/vehicle/wheel.json @@ -405,6 +405,6 @@ "type": "WHEEL", "name": { "str": "banded wooden cart wheel" }, "description": "A wooden cart wheel with metal bands for durability, hand made.", - "relative": { "weight": 500 } + "relative": { "weight": "500 g" } } ] diff --git a/data/json/traps.json b/data/json/traps.json index e6d1c5f3ad5ea..3e3d2d7d46e11 100644 --- a/data/json/traps.json +++ b/data/json/traps.json @@ -139,7 +139,7 @@ { "type": "trap", "id": "tr_beartrap", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "bear trap", "color": "blue", "symbol": "^", @@ -161,7 +161,7 @@ { "type": "trap", "id": "tr_beartrap_buried", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "buried bear trap", "color": "blue", "symbol": "^", @@ -234,7 +234,7 @@ { "type": "trap", "id": "tr_crossbow", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "crossbow trap", "color": "green", "symbol": "^", @@ -257,7 +257,7 @@ { "type": "trap", "id": "tr_shotgun_2", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "shotgun trap", "color": "red", "symbol": "^", @@ -279,7 +279,7 @@ { "type": "trap", "id": "tr_shotgun_2_1", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "shotgun trap", "color": "red", "symbol": "^", @@ -302,7 +302,7 @@ { "type": "trap", "id": "tr_shotgun_1", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "shotgun trap", "color": "red", "symbol": "^", @@ -325,7 +325,7 @@ { "type": "trap", "id": "tr_engine", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "spinning blade engine", "color": "light_red", "symbol": "_", @@ -351,7 +351,7 @@ { "type": "trap", "id": "tr_landmine", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "land mine", "color": "red", "symbol": "^", @@ -373,7 +373,7 @@ { "type": "trap", "id": "tr_landmine_buried", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "buried land mine", "color": "red", "symbol": "_", @@ -395,7 +395,7 @@ { "type": "trap", "id": "tr_telepad", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "teleport pad", "color": "magenta", "symbol": "_", @@ -502,7 +502,7 @@ { "type": "trap", "id": "tr_boobytrap", - "trigger_weight": 200, + "trigger_weight": "200 g", "name": "booby trap", "color": "light_cyan", "symbol": "^", diff --git a/data/json/vehicleparts/wheel.json b/data/json/vehicleparts/wheel.json index f7d00da9402a0..51bdd6f701df9 100644 --- a/data/json/vehicleparts/wheel.json +++ b/data/json/vehicleparts/wheel.json @@ -9,7 +9,7 @@ "broken_symbol": "X", "broken_color": "light_gray", "damage_modifier": 40, - "folded_volume": 1, + "folded_volume": "250 ml", "durability": 80, "description": "A piece of wood with holes suitable for a bike or motorbike wheel.", "item": "wheel_mount_wood", From d6ea74de39dd7cdff309665c5deae73794c12926 Mon Sep 17 00:00:00 2001 From: Andrey Bienkowski Date: Tue, 30 Jun 2020 12:38:36 +0300 Subject: [PATCH 185/206] Remove pointless door This door can only be used by a mary poppins --- data/json/mapgen/s_apt.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/mapgen/s_apt.json b/data/json/mapgen/s_apt.json index 7fc87b35c3211..7032df7b562a6 100644 --- a/data/json/mapgen/s_apt.json +++ b/data/json/mapgen/s_apt.json @@ -67,7 +67,7 @@ "object": { "fill_ter": "t_floor", "rows": [ - "##o####o##&*&##o####o##.", + "##o####o##&#&##o####o##.", "#d@@I|fhF|===|7 F|d y#.", "o @@ |h O|===|5 + @@o.", "#y + 5|===|O A|D I#.", From ccc0313cb0fcc405f77f967f3a480266af616785 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A4r=20Karlsson?= Date: Tue, 30 Jun 2020 16:10:14 +0200 Subject: [PATCH 186/206] 12mm gun audit (#41697) --- data/json/items/gun/12mm.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/json/items/gun/12mm.json b/data/json/items/gun/12mm.json index 770acf10d4b01..2cd4780d00877 100644 --- a/data/json/items/gun/12mm.json +++ b/data/json/items/gun/12mm.json @@ -7,7 +7,8 @@ "name": { "str": "H&K G80 railgun" }, "description": "Developed by Heckler & Koch, this railgun magnetically propels a ferromagnetic projectile using an alternating current. Powered by UPS.", "weight": "3914 g", - "volume": "2750 ml", + "volume": "4958 ml", + "longest_side": "1005 mm", "price": 1920000, "price_postapoc": 12000, "to_hit": -1, From 8602ef8867eb9e84f56c99b1c0c13918bc0f6a30 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Tue, 30 Jun 2020 19:02:44 +0200 Subject: [PATCH 187/206] fix the thing --- src/character.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/character.cpp b/src/character.cpp index af7163d62b45d..2f1ee1dcd74f2 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -7687,8 +7687,10 @@ bool Character::invoke_item( item *used, const std::string &method ) bool Character::invoke_item( item *used, const std::string &method, const tripoint &pt ) { - if( !has_enough_charges( *used, true ) || ( used->is_medication() && - !can_use_heal_item( *used ) ) ) { + if( !has_enough_charges( *used, true ) ) { + return false; + } + if( used->is_medication() && !can_use_heal_item( *used ) ) { add_msg_if_player( m_bad, _( "Your biology is not compatible with that healing item." ) ); return false; } From e91c3c8a32de38025c386bbf5f013a2bfe7c5f00 Mon Sep 17 00:00:00 2001 From: faefux <49350286+faefux@users.noreply.github.com> Date: Tue, 30 Jun 2020 16:52:04 -0400 Subject: [PATCH 188/206] Update music.json (#41713) --- data/json/items/generic/music.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/items/generic/music.json b/data/json/items/generic/music.json index b77aeabc02625..4c9b508d056b5 100644 --- a/data/json/items/generic/music.json +++ b/data/json/items/generic/music.json @@ -39,7 +39,7 @@ "type": "GENERIC", "id": "microphone_xlr_generic", "name": { "str": "XLR microphone" }, - "description": "A typical microphone used to record or amplify voice. Comes with a clip. Has a 3-pin XLR connector on the bottom in order to connect to am amp.", + "description": "A typical microphone used to record or amplify voice. Comes with a clip. Has a 3-pin XLR connector on the bottom in order to connect to an amp.", "symbol": "i", "color": "dark_gray", "volume": "550 ml", From 67d661f11854666651c4cfdf5e26eb97b1534a46 Mon Sep 17 00:00:00 2001 From: Matias Fito Date: Tue, 30 Jun 2020 18:06:37 -0300 Subject: [PATCH 189/206] Fix MISSION_RANCH_SCAVENGER_1 required item Actual requested item is knife_spear_superior not knife_spear. fixes #41560 --- data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json b/data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json index d55784f1dbd87..d3ea627c516e5 100644 --- a/data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json +++ b/data/json/npcs/tacoma_ranch/NPC_ranch_scavenger.json @@ -49,7 +49,7 @@ "goal": "MGOAL_FIND_ITEM", "difficulty": 5, "value": 50000, - "item": "spear_knife", + "item": "spear_knife_superior", "count": 12, "origins": [ "ORIGIN_SECONDARY" ], "followup": "MISSION_RANCH_SCAVENGER_2", From 377bbbd0a12d38807042469c2803771dc1a2570d Mon Sep 17 00:00:00 2001 From: olanti-p Date: Wed, 1 Jul 2020 01:25:06 +0300 Subject: [PATCH 190/206] Fix copying in loops --- src/map.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 53e08c0711b5a..cb4ffcf43187a 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -3347,7 +3347,7 @@ void map::bash_vehicle( const tripoint &p, bash_params ¶ms ) void map::bash_field( const tripoint &p, bash_params ¶ms ) { - for( const std::pair &fd : field_at( p ) ) { + for( const std::pair &fd : field_at( p ) ) { if( fd.first->bash_info.str_min > -1 ) { params.did_bash = true; params.bashed_solid = true; // To prevent bashing furniture/vehicles @@ -3652,7 +3652,7 @@ void map::shoot( const tripoint &p, projectile &proj, const bool hit_items ) dam = std::max( 0.0f, dam ); // Check fields? - for( const std::pair &fd : field_at( p ) ) { + for( const std::pair &fd : field_at( p ) ) { if( fd.first->bash_info.str_min > 0 ) { if( inc ) { add_field( p, fd_fire, fd.second.get_field_intensity() - 1 ); From e3f2df2c142c4c17c91c8f753aa92ea2be1e02c2 Mon Sep 17 00:00:00 2001 From: nexusmrsep <39925111+nexusmrsep@users.noreply.github.com> Date: Wed, 1 Jul 2020 04:02:15 +0200 Subject: [PATCH 191/206] Workout and exercise (#41409) * new workout equpment mapgen distribution * serialize & deserialize variables --- .../furniture-recreation.json | 84 +++++- .../json/mapgen/basement/basement_bionic.json | 8 +- .../urban_14_dense_house_mart_food.json | 7 +- data/json/mapgen/fire_station.json | 2 +- data/json/mapgen/gym.json | 8 +- data/json/mapgen/house/house15.json | 2 +- data/json/mapgen/lab/lab_rooms.json | 6 +- data/json/mapgen/mall/mall_second_floor.json | 13 +- data/json/mapgen/nested/basement_nested.json | 32 ++- data/json/mapgen/police_station.json | 4 +- data/json/mapgen/robofachq_static.json | 8 +- data/json/mapgen/sports_store.json | 4 +- data/json/mapgen/stadium_football.json | 4 +- .../mapgen_palettes/hotel_tower_palette.json | 2 +- .../house_general_palette.json | 2 +- data/json/mapgen_palettes/lmoe.json | 2 +- data/json/mapgen_palettes/mansion.json | 8 +- .../necropolis/necropolis_b2.json | 4 +- .../necropolis/necropolis_b3.json | 4 +- data/json/player_activities.json | 28 ++ .../worldgen/gas/s_gas_b21.json | 2 +- .../Magiclysm/worldgen/magic_academy.json | 8 +- .../bandit_tower/bandit_tower_2trc_04.json | 2 +- data/mods/More_Locations/tpalettes.json | 4 +- .../palettes/national_guard_camp.json | 2 +- .../palettes/national_guard_camp_b.json | 2 +- .../building_jsons/urban_20_duplex.json | 2 +- .../building_jsons/urban_33_hotel.json | 2 +- data/raw/keybindings.json | 6 + doc/JSON_FLAGS.md | 2 + src/action.cpp | 3 + src/action.h | 2 + src/activity_actor.cpp | 241 ++++++++++++++++++ src/activity_actor.h | 41 +++ src/game.cpp | 1 + src/handle_action.cpp | 6 + src/iexamine.cpp | 12 +- src/iexamine.h | 1 + src/player_activity.cpp | 23 +- src/player_activity.h | 5 + 40 files changed, 544 insertions(+), 55 deletions(-) diff --git a/data/json/furniture_and_terrain/furniture-recreation.json b/data/json/furniture_and_terrain/furniture-recreation.json index 87ae45ae4cd6b..58ae31a1257f8 100644 --- a/data/json/furniture_and_terrain/furniture-recreation.json +++ b/data/json/furniture_and_terrain/furniture-recreation.json @@ -4,12 +4,13 @@ "id": "f_exercise", "name": "exercise machine", "symbol": "T", - "description": "A heavy set of weightlifting equipment for strength training, with a pair of heavy weights affixed to opposite ends of a sturdy pipe. The weights are huge, and using them without a spotter would be a good way to seriously injure yourself.", + "description": "A heavy set of weightlifting equipment for strength training, with a pair of heavy weights affixed to opposite ends of a sturdy pipe. You can adjust the set by hand-picking the weights you wish to use.", "color": "dark_gray", "move_cost_mod": 1, "coverage": 35, "required_str": 8, - "flags": [ "TRANSPARENT", "MINEABLE" ], + "flags": [ "TRANSPARENT", "MINEABLE", "WORKOUT_ARMS" ], + "examine_action": "workout", "deconstruct": { "items": [ { "item": "pipe", "count": 1 }, @@ -250,6 +251,47 @@ ] } }, + { + "type": "furniture", + "id": "f_ergometer_mechanical", + "name": "mechanical ergometer", + "description": "An exercise machine with a set of handles and plates meant to emulate rowing a boat. This an older model with mechanical resistance adjustments, but it works without power.", + "symbol": "5", + "color": "dark_gray", + "move_cost_mod": 2, + "required_str": 8, + "looks_like": "f_ergometer", + "flags": [ "BLOCKSDOOR", "TRANSPARENT", "MOUNTABLE", "WORKOUT_ARMS", "WORKOUT_LEGS" ], + "deconstruct": { + "items": [ + { "item": "foot_crank", "count": [ 1, 1 ] }, + { "item": "plastic_chunk", "count": [ 8, 10 ] }, + { "item": "scrap", "count": [ 2, 4 ] }, + { "item": "chain", "count": 1 }, + { "item": "pipe", "count": [ 4, 5 ] }, + { "item": "saddle", "count": [ 1, 1 ] }, + { "item": "wheel_small", "count": [ 1, 1 ] }, + { "item": "nail", "charges": [ 6, 8 ] } + ] + }, + "examine_action": "workout", + "bash": { + "str_min": 6, + "str_max": 25, + "sound": "smash!", + "sound_fail": "thump!", + "items": [ + { "item": "foot_crank", "prob": 50 }, + { "item": "plastic_chunk", "count": [ 4, 6 ] }, + { "item": "scrap", "count": [ 0, 2 ] }, + { "item": "chain", "prob": 50 }, + { "item": "pipe", "count": [ 0, 4 ] }, + { "item": "saddle", "prob": 50 }, + { "item": "wheel_small", "prob": 50 }, + { "item": "nail", "charges": [ 2, 6 ] } + ] + } + }, { "type": "furniture", "id": "f_treadmill", @@ -267,6 +309,7 @@ { "item": "pipe", "count": [ 4, 3 ] }, { "item": "small_lcd_screen", "count": 1 }, { "item": "RAM", "count": 1 }, + { "item": "motor_tiny", "count": 1 }, { "item": "nail", "charges": [ 6, 8 ] } ] }, @@ -281,6 +324,40 @@ { "item": "pipe", "count": [ 0, 4 ] }, { "item": "small_lcd_screen", "prob": 50 }, { "item": "RAM", "count": [ 0, 1 ] }, + { "item": "motor_tiny", "count": [ 0, 1 ] }, + { "item": "nail", "charges": [ 2, 6 ] } + ] + } + }, + { + "type": "furniture", + "id": "f_treadmill_mechanical", + "name": "gravity treadmill", + "description": "A gravity driven conveyor belt with a mechanical control panel for running in place. Conveyor belt is positioned in a steep, but adjustable incline, so it slides back under your weight.", + "symbol": "L", + "color": "dark_gray", + "move_cost_mod": 1, + "required_str": 12, + "looks_like": "f_treadmill", + "flags": [ "BLOCKSDOOR", "TRANSPARENT", "MOUNTABLE", "WORKOUT_LEGS" ], + "deconstruct": { + "items": [ + { "item": "plastic_chunk", "count": [ 10, 14 ] }, + { "item": "scrap", "count": [ 2, 10 ] }, + { "item": "pipe", "count": [ 4, 6 ] }, + { "item": "nail", "charges": [ 6, 8 ] } + ] + }, + "examine_action": "workout", + "bash": { + "str_min": 12, + "str_max": 40, + "sound": "smash!", + "sound_fail": "thump!", + "items": [ + { "item": "plastic_chunk", "count": [ 4, 10 ] }, + { "item": "scrap", "count": [ 0, 5 ] }, + { "item": "pipe", "count": [ 0, 4 ] }, { "item": "nail", "charges": [ 2, 6 ] } ] } @@ -297,7 +374,8 @@ "move_cost_mod": -1, "coverage": 65, "required_str": 10, - "flags": [ "BASHABLE", "BLOCKSDOOR", "PLACE_ITEM", "ORGANIC" ], + "flags": [ "BASHABLE", "BLOCKSDOOR", "PLACE_ITEM", "ORGANIC", "WORKOUT_ARMS" ], + "examine_action": "workout", "bash": { "str_min": 15, "str_max": 20, diff --git a/data/json/mapgen/basement/basement_bionic.json b/data/json/mapgen/basement/basement_bionic.json index 729e4d713465f..c89d9178d2f22 100644 --- a/data/json/mapgen/basement/basement_bionic.json +++ b/data/json/mapgen/basement/basement_bionic.json @@ -37,8 +37,8 @@ "furniture": { "}": "f_pinball_machine", "*": "f_shower", - "!": "f_ergometer", - "@": "f_treadmill", + "!": [ "f_ergometer", "f_ergometer_mechanical" ], + "@": [ "f_treadmill", "f_treadmill_mechanical" ], "^": "f_exercise", "%": "f_floor_canvas", "C": "f_cupboard", @@ -113,8 +113,8 @@ "furniture": { "}": "f_pinball_machine", "*": "f_shower", - "!": "f_ergometer", - "@": "f_treadmill", + "!": [ "f_ergometer", "f_ergometer_mechanical" ], + "@": [ "f_treadmill", "f_treadmill_mechanical" ], "^": "f_exercise", "%": "f_floor_canvas", "C": "f_cupboard", diff --git a/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json b/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json index 236f7a1fcc508..9fa7b68530de2 100644 --- a/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json +++ b/data/json/mapgen/city_blocks/urban_14_dense_house_mart_food.json @@ -53,7 +53,12 @@ ">": "t_stairs_down", "-": "t_thconc_floor" }, - "furniture": { "!": "f_counter", "]": "f_treadmill", ")": "f_exercise", "}": "f_ergometer" }, + "furniture": { + "!": "f_counter", + "]": [ "f_treadmill", "f_treadmill_mechanical" ], + ")": "f_exercise", + "}": [ "f_ergometer", "f_ergometer_mechanical" ] + }, "vendingmachines": { "[": { "item_group": "vending_drink" }, "(": { "item_group": "vending_food" } }, "set": [ { "point": "trap", "id": "tr_rollmat", "x": [ 9, 11 ], "y": 11 }, diff --git a/data/json/mapgen/fire_station.json b/data/json/mapgen/fire_station.json index cc655746c8104..67f08c0d32318 100644 --- a/data/json/mapgen/fire_station.json +++ b/data/json/mapgen/fire_station.json @@ -195,7 +195,7 @@ "furniture": { "#": "f_table", "&": "f_sink", - "5": "f_ergometer", + "5": [ "f_ergometer", "f_ergometer_mechanical" ], "B": "f_bookcase", "E": "f_exercise", "F": "f_fridge", diff --git a/data/json/mapgen/gym.json b/data/json/mapgen/gym.json index 0bf565cf27fb2..47336aeb21b99 100644 --- a/data/json/mapgen/gym.json +++ b/data/json/mapgen/gym.json @@ -47,10 +47,10 @@ "4": "t_gutter_downspout" }, "furniture": { - "!": "f_ergometer", + "!": [ "f_ergometer", "f_ergometer_mechanical" ], "#": "f_counter", "*": "f_shower", - "@": "f_treadmill", + "@": [ "f_treadmill", "f_treadmill_mechanical" ], "O": "f_locker", "V": "f_exercise", "a": "f_stool", @@ -176,13 +176,13 @@ "<": "t_stairs_up" }, "furniture": { - "!": "f_ergometer", + "!": [ "f_ergometer", "f_ergometer_mechanical" ], "{": "f_bigmirror", "#": "f_counter", "H": "f_vending_c", "&": "f_counter", "*": "f_shower", - "@": "f_treadmill", + "@": [ "f_treadmill", "f_treadmill_mechanical" ], "O": "f_locker", "V": "f_exercise", "C": "f_bench", diff --git a/data/json/mapgen/house/house15.json b/data/json/mapgen/house/house15.json index ee74d8d46bb55..952d3f72e4d93 100644 --- a/data/json/mapgen/house/house15.json +++ b/data/json/mapgen/house/house15.json @@ -34,7 +34,7 @@ ], "palettes": [ "standard_domestic_palette" ], "terrain": { "%": "t_region_shrub_fruit", "!": "t_region_groundcover_urban", "'": "t_concrete" }, - "furniture": { "!": "f_bluebell", "$": "f_treadmill" }, + "furniture": { "!": "f_bluebell", "$": [ "f_treadmill", "f_treadmill_mechanical" ] }, "place_loot": [ { "group": "livingroom", "x": [ 7, 16 ], "y": [ 7, 9 ], "chance": 90, "repeat": [ 1, 6 ] } ], "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 1, 22 ], "y": [ 2, 21 ], "chance": 5 } ] } diff --git a/data/json/mapgen/lab/lab_rooms.json b/data/json/mapgen/lab/lab_rooms.json index 99b271c604cec..eb218c8ba97b0 100644 --- a/data/json/mapgen/lab/lab_rooms.json +++ b/data/json/mapgen/lab/lab_rooms.json @@ -986,7 +986,11 @@ ], "palettes": [ "lab_palette" ], "terrain": { "%": "t_thconc_floor" }, - "furniture": { "%": "f_treadmill", "5": [ "f_ergometer", "f_exercise" ], "`": "f_canvas_floor" }, + "furniture": { + "%": [ "f_treadmill", "f_treadmill_mechanical" ], + "5": [ "f_ergometer", "f_ergometer_mechanical", "f_exercise" ], + "`": "f_canvas_floor" + }, "items": { ".": { "item": "clutter_gym", "chance": 3 }, "l": { "item": "locker_gym", "chance": 30 }, diff --git a/data/json/mapgen/mall/mall_second_floor.json b/data/json/mapgen/mall/mall_second_floor.json index 6681f69e49b1a..66da84c6b67a1 100644 --- a/data/json/mapgen/mall/mall_second_floor.json +++ b/data/json/mapgen/mall/mall_second_floor.json @@ -1144,7 +1144,14 @@ "S": "t_thconc_floor", "I": "t_thconc_floor" }, - "furniture": { "%": "f_counter", "*": "f_crate_c", "!": "f_beaded_door", "p": "f_desk", "]": "f_ergometer", "0": "f_exercise" }, + "furniture": { + "%": "f_counter", + "*": "f_crate_c", + "!": "f_beaded_door", + "p": "f_desk", + "]": [ "f_ergometer", "f_ergometer_mechanical" ], + "0": "f_exercise" + }, "items": { "K": { "item": "pottery", "chance": 30, "repeat": [ 2, 4 ] }, "J": { "item": "office", "chance": 20 }, @@ -1220,8 +1227,8 @@ "I": "t_thconc_floor" }, "furniture": { - "*": "f_treadmill", - "]": "f_ergometer", + "*": [ "f_treadmill", "f_treadmill_mechanical" ], + "]": [ "f_ergometer", "f_ergometer_mechanical" ], "!": "f_exercise", "&": "f_counter", "%": "f_shower", diff --git a/data/json/mapgen/nested/basement_nested.json b/data/json/mapgen/nested/basement_nested.json index eed3e4d43c684..f00bf35ad6a8b 100644 --- a/data/json/mapgen/nested/basement_nested.json +++ b/data/json/mapgen/nested/basement_nested.json @@ -2760,7 +2760,13 @@ "O": "t_carpet_purple", "=": "t_carpet_purple" }, - "furniture": { "!": "f_ergometer", "@": "f_treadmill", "V": "f_exercise", "c": "f_bench", "B": "f_bigmirror" }, + "furniture": { + "!": [ "f_ergometer", "f_ergometer_mechanical" ], + "@": [ "f_treadmill", "f_treadmill_mechanical" ], + "V": "f_exercise", + "c": "f_bench", + "B": "f_bigmirror" + }, "traps": { "=": "tr_rollmat" }, "nested": { "1": { "chunks": [ [ "5x5_sauna_N", 30 ], [ "5x5_pool", 10 ], [ "5x5_gym_N", 60 ] ] } } } @@ -2791,7 +2797,13 @@ "O": "t_carpet_green", "=": "t_carpet_green" }, - "furniture": { "!": "f_ergometer", "@": "f_treadmill", "V": "f_exercise", "c": "f_bench", "B": "f_bigmirror" }, + "furniture": { + "!": [ "f_ergometer", "f_ergometer_mechanical" ], + "@": [ "f_treadmill", "f_treadmill_mechanical" ], + "V": "f_exercise", + "c": "f_bench", + "B": "f_bigmirror" + }, "traps": { "=": "tr_rollmat" }, "nested": { "1": { "chunks": [ [ "5x5_sauna_S", 30 ], [ "5x5_pool", 10 ], [ "5x5_gym_S", 60 ] ] } } } @@ -2822,7 +2834,13 @@ "O": "t_carpet_yellow", "=": "t_carpet_yellow" }, - "furniture": { "!": "f_ergometer", "@": "f_treadmill", "V": "f_exercise", "c": "f_bench", "B": "f_bigmirror" }, + "furniture": { + "!": [ "f_ergometer", "f_ergometer_mechanical" ], + "@": [ "f_treadmill", "f_treadmill_mechanical" ], + "V": "f_exercise", + "c": "f_bench", + "B": "f_bigmirror" + }, "traps": { "=": "tr_rollmat" }, "nested": { "1": { "chunks": [ [ "5x5_sauna_E", 30 ], [ "5x5_pool", 10 ], [ "5x5_gym_E", 60 ] ] } } } @@ -2853,7 +2871,13 @@ "O": "t_carpet_red", "=": "t_carpet_red" }, - "furniture": { "!": "f_ergometer", "@": "f_treadmill", "V": "f_exercise", "c": "f_bench", "B": "f_bigmirror" }, + "furniture": { + "!": [ "f_ergometer", "f_ergometer_mechanical" ], + "@": [ "f_treadmill", "f_treadmill_mechanical" ], + "V": "f_exercise", + "c": "f_bench", + "B": "f_bigmirror" + }, "traps": { "=": "tr_rollmat" }, "nested": { "1": { "chunks": [ [ "5x5_sauna_W", 30 ], [ "5x5_pool", 10 ], [ "5x5_gym_W", 60 ] ] } } } diff --git a/data/json/mapgen/police_station.json b/data/json/mapgen/police_station.json index 06dbdae88ad93..c5084d364a98a 100644 --- a/data/json/mapgen/police_station.json +++ b/data/json/mapgen/police_station.json @@ -573,10 +573,10 @@ "5": "t_gutter_drop" }, "furniture": { - "&": "f_ergometer", + "&": [ "f_ergometer", "f_ergometer_mechanical" ], ":": "f_exercise", "b": "f_bench", - "=": "f_treadmill", + "=": [ "f_treadmill", "f_treadmill_mechanical" ], "A": "f_bigmirror", "s": "f_shower", "S": "f_sink", diff --git a/data/json/mapgen/robofachq_static.json b/data/json/mapgen/robofachq_static.json index 3c7ca357af165..662312a1303ad 100644 --- a/data/json/mapgen/robofachq_static.json +++ b/data/json/mapgen/robofachq_static.json @@ -294,8 +294,8 @@ "S": "f_table", "A": "f_canvas_wall", "%": "f_canvas_door", - "E": "f_ergometer", - "T": "f_treadmill", + "E": [ "f_ergometer", "f_ergometer_mechanical" ], + "T": [ "f_treadmill", "f_treadmill_mechanical" ], "X": "f_exercise" }, "sealed_item": { @@ -415,8 +415,8 @@ "%": "f_canvas_door", "H": "f_armchair", "M": "f_server", - "E": "f_ergometer", - "T": "f_treadmill", + "E": [ "f_ergometer", "f_ergometer_mechanical" ], + "T": [ "f_treadmill", "f_treadmill_mechanical" ], "X": "f_exercise" }, "items": { diff --git a/data/json/mapgen/sports_store.json b/data/json/mapgen/sports_store.json index 35be3e5075581..ffaa665dc4d73 100644 --- a/data/json/mapgen/sports_store.json +++ b/data/json/mapgen/sports_store.json @@ -48,8 +48,8 @@ "furniture": { "#": "f_counter", "h": "f_stool", - "t": "f_treadmill", - "e": "f_ergometer", + "t": [ "f_treadmill", "f_treadmill_mechanical" ], + "e": [ "f_ergometer", "f_ergometer_mechanical" ], "p": "f_floor_canvas", "m": "f_exercise", "%": "f_sink", diff --git a/data/json/mapgen/stadium_football.json b/data/json/mapgen/stadium_football.json index 9d3c32abad4ee..357b6b079dbce 100644 --- a/data/json/mapgen/stadium_football.json +++ b/data/json/mapgen/stadium_football.json @@ -1011,10 +1011,10 @@ "+": "f_null", "-": "f_null", ".": "f_null", - "5": "f_ergometer", + "5": [ "f_ergometer", "f_ergometer_mechanical" ], "C": "f_counter", "D": "f_null", - "L": "f_treadmill", + "L": [ "f_treadmill", "f_treadmill_mechanical" ], "S": "f_sink", "T": "f_trashcan", "_": "f_null", diff --git a/data/json/mapgen_palettes/hotel_tower_palette.json b/data/json/mapgen_palettes/hotel_tower_palette.json index 6a0b5d0f93b39..2a55e64166211 100644 --- a/data/json/mapgen_palettes/hotel_tower_palette.json +++ b/data/json/mapgen_palettes/hotel_tower_palette.json @@ -18,7 +18,7 @@ "S": "f_sink", "&": "f_toilet", "b": "f_bathtub", - "E": [ "f_exercise", "f_ergometer", "f_treadmill" ], + "E": [ "f_exercise", "f_ergometer", "f_ergometer_mechanical", "f_treadmill", "f_treadmill_mechanical" ], "e": "f_fridge", "l": "f_locker", "W": "f_washer", diff --git a/data/json/mapgen_palettes/house_general_palette.json b/data/json/mapgen_palettes/house_general_palette.json index d5906dfd9d8e3..0078a6b98f6a0 100644 --- a/data/json/mapgen_palettes/house_general_palette.json +++ b/data/json/mapgen_palettes/house_general_palette.json @@ -212,7 +212,7 @@ "u": "t_thconc_floor", "X": "t_thconc_floor" }, - "furniture": { "c": "f_exercise", "u": "f_ergometer", "X": "f_punching_bag" }, + "furniture": { "c": "f_exercise", "u": [ "f_ergometer", "f_ergometer_mechanical" ], "X": "f_punching_bag" }, "monsters": { "!": [ { "monster": "GROUP_ROACH", "chance": 70 }, { "monster": "GROUP_ZOMBIE", "chance": 100 } ], ".": [ { "monster": "GROUP_ROACH", "chance": 80 }, { "monster": "GROUP_ZOMBIE", "chance": 60 } ] diff --git a/data/json/mapgen_palettes/lmoe.json b/data/json/mapgen_palettes/lmoe.json index 28bc0f7a493ad..90c3cd16938ce 100644 --- a/data/json/mapgen_palettes/lmoe.json +++ b/data/json/mapgen_palettes/lmoe.json @@ -28,7 +28,7 @@ "C": "f_cupboard", "d": "f_dresser", "D": "f_desk", - "e": "f_ergometer", + "e": "f_ergometer_mechanical", "E": "f_exercise", "F": "f_fridge", "f": "f_sofa", diff --git a/data/json/mapgen_palettes/mansion.json b/data/json/mapgen_palettes/mansion.json index 38d71fed78598..f81b9ffd22891 100644 --- a/data/json/mapgen_palettes/mansion.json +++ b/data/json/mapgen_palettes/mansion.json @@ -24,8 +24,8 @@ "D": "f_desk", "F": "f_fridge", "G": "f_dryer", - "H": "f_treadmill", - "I": "f_ergometer", + "H": [ "f_treadmill", "f_treadmill_mechanical" ], + "I": [ "f_ergometer", "f_ergometer_mechanical" ], "J": "f_bathtub", "K": [ [ "f_cardboard_box", 5 ], "f_crate_c", "f_crate_o" ], "L": [ [ "f_cardboard_box", 5 ], "f_crate_c", "f_crate_o" ], @@ -46,8 +46,8 @@ "e": "f_pool_table", "f": "f_fridge", "g": "f_dryer", - "h": "f_treadmill", - "i": "f_ergometer", + "h": [ "f_treadmill", "f_treadmill_mechanical" ], + "i": [ "f_ergometer", "f_ergometer_mechanical" ], "j": "f_shower", "l": "f_bookcase", "m": "f_locker", diff --git a/data/json/mapgen_palettes/necropolis/necropolis_b2.json b/data/json/mapgen_palettes/necropolis/necropolis_b2.json index 623867b26765b..35a0329c92f4b 100644 --- a/data/json/mapgen_palettes/necropolis/necropolis_b2.json +++ b/data/json/mapgen_palettes/necropolis/necropolis_b2.json @@ -6,9 +6,9 @@ "?": "f_sofa", "@": "f_bed", "B": "f_bathtub", - "C": "f_treadmill", + "C": [ "f_treadmill", "f_treadmill_mechanical" ], "D": "f_trashcan", - "J": "f_ergometer", + "J": [ "f_ergometer", "f_ergometer_mechanical" ], "L": "f_locker", "N": "f_robotic_arm", "O": "f_oven", diff --git a/data/json/mapgen_palettes/necropolis/necropolis_b3.json b/data/json/mapgen_palettes/necropolis/necropolis_b3.json index 1a28f41637278..4184ef4853819 100644 --- a/data/json/mapgen_palettes/necropolis/necropolis_b3.json +++ b/data/json/mapgen_palettes/necropolis/necropolis_b3.json @@ -6,9 +6,9 @@ "?": "f_sofa", "@": "f_bed", "B": "f_bathtub", - "C": "f_treadmill", + "C": [ "f_treadmill", "f_treadmill_mechanical" ], "D": "f_trashcan", - "J": "f_ergometer", + "J": [ "f_ergometer", "f_ergometer_mechanical" ], "L": "f_locker", "N": "f_robotic_arm", "O": "f_oven", diff --git a/data/json/player_activities.json b/data/json/player_activities.json index 9db49f5ac2afa..f66090b8e2350 100644 --- a/data/json/player_activities.json +++ b/data/json/player_activities.json @@ -866,5 +866,33 @@ "activity_level": "NO_EXERCISE", "verb": "consuming", "based_on": "time" + }, + { + "id": "ACT_WORKOUT_HARD", + "type": "activity_type", + "activity_level": "EXTRA_EXERCISE", + "verb": { "ctxt": "training", "str": "working out" }, + "based_on": "time" + }, + { + "id": "ACT_WORKOUT_ACTIVE", + "type": "activity_type", + "activity_level": "ACTIVE_EXERCISE", + "verb": { "ctxt": "training", "str": "working out" }, + "based_on": "time" + }, + { + "id": "ACT_WORKOUT_MODERATE", + "type": "activity_type", + "activity_level": "MODERATE_EXERCISE", + "verb": { "ctxt": "training", "str": "working out" }, + "based_on": "time" + }, + { + "id": "ACT_WORKOUT_LIGHT", + "type": "activity_type", + "activity_level": "LIGHT_EXERCISE", + "verb": { "ctxt": "training", "str": "working out" }, + "based_on": "time" } ] diff --git a/data/mods/Fuji_Structures/worldgen/gas/s_gas_b21.json b/data/mods/Fuji_Structures/worldgen/gas/s_gas_b21.json index 7e3544246d05f..d73f21557f905 100644 --- a/data/mods/Fuji_Structures/worldgen/gas/s_gas_b21.json +++ b/data/mods/Fuji_Structures/worldgen/gas/s_gas_b21.json @@ -67,7 +67,7 @@ "i": "f_locker", "j": "f_bench", "k": "f_locker", - "l": "f_treadmill", + "l": [ "f_treadmill", "f_treadmill_mechanical" ], "m": "f_shower", "n": "f_toilet", "p": "f_sink", diff --git a/data/mods/Magiclysm/worldgen/magic_academy.json b/data/mods/Magiclysm/worldgen/magic_academy.json index 5fe37bae294f2..124cc479cd113 100644 --- a/data/mods/Magiclysm/worldgen/magic_academy.json +++ b/data/mods/Magiclysm/worldgen/magic_academy.json @@ -115,7 +115,13 @@ "palettes": [ "standard_domestic_palette" ], "traps": { "=": "tr_rollmat" }, "terrain": { " ": "t_thconc_floor", "`": "t_rock", "]": "t_door_glass_green_c", "#": "t_rock_blue", "~": "t_water_pool" }, - "furniture": { ")": "f_beaded_door", "}": "f_huge_mana_crystal", "!": "f_ergometer", "$": "f_treadmill", "%": "f_exercise" }, + "furniture": { + ")": "f_beaded_door", + "}": "f_huge_mana_crystal", + "!": [ "f_ergometer", "f_ergometer_mechanical" ], + "$": [ "f_treadmill", "f_treadmill_mechanical" ], + "%": "f_exercise" + }, "place_loot": [ { "item": "television", "x": 8, "y": 1, "chance": 100 }, { "item": "stereo", "x": 7, "y": 1, "chance": 100 } ], "items": { "q": [ diff --git a/data/mods/More_Locations/bandit_tower/bandit_tower_2trc_04.json b/data/mods/More_Locations/bandit_tower/bandit_tower_2trc_04.json index e3b27dfb5eadd..4dcb0b10af242 100644 --- a/data/mods/More_Locations/bandit_tower/bandit_tower_2trc_04.json +++ b/data/mods/More_Locations/bandit_tower/bandit_tower_2trc_04.json @@ -36,7 +36,7 @@ "rotation": 1, "palettes": [ "tri_tower", "upper_level", "bandit_tower_stuff" ], "terrain": { "5": "t_pavement", "8": "t_bridge", "y": "t_wall_wood" }, - "furniture": { "Y": "f_exercise", "J": "f_treadmill" }, + "furniture": { "Y": "f_exercise", "J": [ "f_treadmill", "f_treadmill_mechanical" ] }, "items": { "l": { "item": "sports", "chance": 20 }, "x": { "item": "allsporting", "chance": 20 } }, "npcs": { "@": { "class": "thug" } } } diff --git a/data/mods/More_Locations/tpalettes.json b/data/mods/More_Locations/tpalettes.json index 064bb40945c8f..d1257d5566d95 100644 --- a/data/mods/More_Locations/tpalettes.json +++ b/data/mods/More_Locations/tpalettes.json @@ -120,7 +120,7 @@ "P": "f_piano", "W": "f_wardrobe", "Y": "f_statue", - "Z": [ "f_treadmill", "f_exercise" ] + "Z": [ "f_treadmill", "f_treadmill_mechanical", "f_exercise" ] }, "items": { "$": { "item": "art", "chance": 75 }, @@ -642,7 +642,7 @@ "3": "f_dryer", "5": "f_pool_table", "7": "f_exercise", - "8": "f_treadmill", + "8": [ "f_treadmill", "f_treadmill_mechanical" ], "9": "f_pinball_machine", "0": "f_arcade_machine" } diff --git a/data/mods/National_Guard_Camp/palettes/national_guard_camp.json b/data/mods/National_Guard_Camp/palettes/national_guard_camp.json index cc2263d43e805..eb4d7b3a4d59e 100644 --- a/data/mods/National_Guard_Camp/palettes/national_guard_camp.json +++ b/data/mods/National_Guard_Camp/palettes/national_guard_camp.json @@ -32,7 +32,7 @@ "t": "f_toilet", "u": "f_shower", "v": "f_oven", - "y": "f_treadmill" + "y": [ "f_treadmill", "f_treadmill_mechanical" ] }, "terrain": { " ": "t_thconc_floor", diff --git a/data/mods/National_Guard_Camp/palettes/national_guard_camp_b.json b/data/mods/National_Guard_Camp/palettes/national_guard_camp_b.json index e9e81b21b3ff2..83d7b77b4e9a8 100644 --- a/data/mods/National_Guard_Camp/palettes/national_guard_camp_b.json +++ b/data/mods/National_Guard_Camp/palettes/national_guard_camp_b.json @@ -31,7 +31,7 @@ "t": "f_toilet", "u": "f_shower", "v": "f_oven", - "y": "f_treadmill", + "y": [ "f_treadmill", "f_treadmill_mechanical" ], "z": "f_trashcan" }, "terrain": { diff --git a/data/mods/Urban_Development/building_jsons/urban_20_duplex.json b/data/mods/Urban_Development/building_jsons/urban_20_duplex.json index ab03813b0dcf8..95e6333f27ef2 100644 --- a/data/mods/Urban_Development/building_jsons/urban_20_duplex.json +++ b/data/mods/Urban_Development/building_jsons/urban_20_duplex.json @@ -78,7 +78,7 @@ ], "palettes": [ "acidia_residential_commercial_palette" ], "terrain": { "7": "t_strconc_floor" }, - "furniture": { "7": "f_treadmill" }, + "furniture": { "7": [ "f_treadmill", "f_treadmill_mechanical" ] }, "items": { "'": { "item": "cleaning", "chance": 2 }, "D": { "item": "allclothes", "chance": 60 }, diff --git a/data/mods/Urban_Development/building_jsons/urban_33_hotel.json b/data/mods/Urban_Development/building_jsons/urban_33_hotel.json index e42a6a3a02bfa..9173d3810cf80 100644 --- a/data/mods/Urban_Development/building_jsons/urban_33_hotel.json +++ b/data/mods/Urban_Development/building_jsons/urban_33_hotel.json @@ -515,7 +515,7 @@ ], "palettes": [ "acidia_commercial_palette" ], "terrain": { " ": "t_linoleum_white", "!": "t_linoleum_white", "2": "t_linoleum_white" }, - "furniture": { "!": "f_ergometer", "2": "f_treadmill" }, + "furniture": { "!": [ "f_ergometer", "f_ergometer_mechanical" ], "2": [ "f_treadmill", "f_treadmill_mechanical" ] }, "items": { " ": { "item": "traveler", "chance": 1 }, "3": { "item": "traveler", "chance": 1 } }, "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 2, 11 ], "y": [ 1, 18 ], "density": 0.4 } ] } diff --git a/data/raw/keybindings.json b/data/raw/keybindings.json index 5a0d798c2df3e..5c022b87163ae 100644 --- a/data/raw/keybindings.json +++ b/data/raw/keybindings.json @@ -1855,6 +1855,12 @@ "id": "sleep", "bindings": [ { "input_method": "keyboard", "key": "$" } ] }, + { + "type": "keybinding", + "name": "Workout", + "category": "DEFAULTMODE", + "id": "workout" + }, { "type": "keybinding", "name": "Control Vehicle", diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index c12ac74a150b0..9de5fccbca008 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -596,6 +596,8 @@ List of known flags, used in both `terrain.json` and `furniture.json`. - ```UNSTABLE``` Walking here cause the bouldering effect on the character. - ```USABLE_FIRE``` This terrain or furniture counts as a nearby fire for crafting. - ```WALL``` This terrain is an upright obstacle. Used for fungal conversion, and also implies `CONNECT_TO_WALL`. +- ```WORKOUT_LEGS``` This furniture is for training your legs. Needed for checks like `is_limb_broken()`. +- ```WORKOUT_ARMS``` This furniture is for training your arms. Needed for checks like `is_limb_broken()`. ### Examine Actions diff --git a/src/action.cpp b/src/action.cpp index 4c0eec381e9d2..55089b097c265 100644 --- a/src/action.cpp +++ b/src/action.cpp @@ -296,6 +296,8 @@ std::string action_ident( action_id act ) return "ignore_enemy"; case ACTION_WHITELIST_ENEMY: return "whitelist_enemy"; + case ACTION_WORKOUT: + return "workout"; case ACTION_SAVE: return "save"; case ACTION_QUICKSAVE: @@ -928,6 +930,7 @@ action_id handle_action_menu() } else if( category == _( "Misc" ) ) { REGISTER_ACTION( ACTION_WAIT ); REGISTER_ACTION( ACTION_SLEEP ); + REGISTER_ACTION( ACTION_WORKOUT ); REGISTER_ACTION( ACTION_BIONICS ); REGISTER_ACTION( ACTION_MUTATIONS ); REGISTER_ACTION( ACTION_CONTROL_VEHICLE ); diff --git a/src/action.h b/src/action.h index ad6b004fe8452..db4a3e0bcd4ec 100644 --- a/src/action.h +++ b/src/action.h @@ -219,6 +219,8 @@ enum action_id : int { ACTION_IGNORE_ENEMY, /** Whitelist the enemy that triggered safemode */ ACTION_WHITELIST_ENEMY, + /** Open workout menu */ + ACTION_WORKOUT, /** Save the game and quit */ ACTION_SAVE, /** Quicksave the game */ diff --git a/src/activity_actor.cpp b/src/activity_actor.cpp index 3cfe572ba1f88..a005dfa2e9c85 100644 --- a/src/activity_actor.cpp +++ b/src/activity_actor.cpp @@ -21,6 +21,7 @@ #include "line.h" #include "map.h" #include "map_iterator.h" +#include "morale_types.h" #include "npc.h" #include "options.h" #include "output.h" @@ -1293,6 +1294,242 @@ std::unique_ptr try_sleep_activity_actor::deserialize( JsonIn &j return actor.clone(); } +void workout_activity_actor::start( player_activity &act, Character &who ) +{ + if( who.get_fatigue() > fatigue_levels::DEAD_TIRED ) { + who.add_msg_if_player( _( "You are too tired to exercise." ) ); + act_id = activity_id::NULL_ID(); + act.set_to_null(); + return; + } + if( who.get_thirst() > 240 ) { + who.add_msg_if_player( _( "You are too dehydrated to exercise." ) ); + act_id = activity_id::NULL_ID(); + act.set_to_null(); + return; + } + if( who.is_armed() ) { + who.add_msg_if_player( _( "Empty your hands first." ) ); + act_id = activity_id::NULL_ID(); + act.set_to_null(); + return; + } + // free training requires all limbs intact, but specialized workout machines + // train upper or lower parts of body only and may permit workout with + // broken limbs as long as they are not involved by the machine + bool hand_equipment = g->m.has_flag_furn( "WORKOUT_ARMS", location ); + bool leg_equipment = g->m.has_flag_furn( "WORKOUT_LEGS", location ); + static const bodypart_id arm_l = bodypart_id( "arm_l" ); + static const bodypart_id arm_r = bodypart_id( "arm_r" ); + static const bodypart_id leg_l = bodypart_id( "leg_l" ); + static const bodypart_id leg_r = bodypart_id( "leg_r" ); + if( hand_equipment && ( ( who.is_limb_broken( arm_l ) ) || + who.is_limb_broken( arm_r ) ) ) { + who.add_msg_if_player( _( "You cannot train here with a broken arm." ) ); + act_id = activity_id::NULL_ID(); + act.set_to_null(); + return; + } + if( leg_equipment && ( ( who.is_limb_broken( leg_l ) ) || + who.is_limb_broken( leg_r ) ) ) { + who.add_msg_if_player( _( "You cannot train here with a broken leg." ) ); + act_id = activity_id::NULL_ID(); + act.set_to_null(); + return; + } + if( !hand_equipment && !leg_equipment && + ( who.is_limb_broken( arm_l ) || + who.is_limb_broken( arm_r ) || + who.is_limb_broken( leg_l ) || + who.is_limb_broken( leg_r ) ) ) { + who.add_msg_if_player( _( "You cannot train freely with a broken limb." ) ); + act_id = activity_id::NULL_ID(); + act.set_to_null(); + return; + } + uilist workout_query; + workout_query.desc_enabled = true; + workout_query.text = + _( "Physical effort determines workout efficiency, but also rate of exhaustion." ); + workout_query.title = _( "Choose training intensity:" ); + workout_query.addentry_desc( 1, true, 'l', _( "Light" ), + _( "Light excercise comparable in intensity to walking, but more focused and methodical." ) ); + workout_query.addentry_desc( 2, true, 'm', _( "Moderate" ), + _( "Moderate excercise without excessive exertion, but with enough effort to break a sweat." ) ); + workout_query.addentry_desc( 3, true, 'a', _( "Active" ), + _( "Active excercise with full involvement. Strenuous, but in a controlled manner." ) ); + workout_query.addentry_desc( 4, true, 'h', _( "High" ), + _( "High intensity excercise with maximum effort and full power. Exhausting in the long run." ) ); + workout_query.query(); + switch( workout_query.ret ) { + case UILIST_CANCEL: + act.set_to_null(); + act_id = activity_id::NULL_ID(); + return; + case 4: + act_id = activity_id( "ACT_WORKOUT_HARD" ); + intensity_modifier = 4; + break; + case 3: + act_id = activity_id( "ACT_WORKOUT_ACTIVE" ); + intensity_modifier = 3; + break; + case 2: + act_id = activity_id( "ACT_WORKOUT_MODERATE" ); + intensity_modifier = 2; + break; + case 1: + default: + act_id = activity_id( "ACT_WORKOUT_LIGHT" ); + intensity_modifier = 1; + break; + } + int length; + query_int( length, _( "Train for how long (minutes): " ) ); + if( length > 0 ) { + duration = length * 1_minutes; + } else { + act_id = activity_id::NULL_ID(); + act.set_to_null(); + return; + } + act.moves_total = to_moves( duration ); + act.moves_left = act.moves_total; + if( who.male ) { + sfx::play_activity_sound( "plmove", "fatigue_m_med", sfx::get_heard_volume( location ) ); + } else { + sfx::play_activity_sound( "plmove", "fatigue_f_med", sfx::get_heard_volume( location ) ); + } + who.add_msg_if_player( _( "You start your workout session." ) ); +} + +void workout_activity_actor::do_turn( player_activity &act, Character &who ) +{ + if( who.get_fatigue() > fatigue_levels::DEAD_TIRED ) { + who.add_msg_if_player( _( "You are exhausted so you finish your workout early." ) ); + act.set_to_null(); + return; + } + if( who.get_thirst() > 240 ) { + who.add_msg_if_player( _( "You are dehydrated so you finish your workout early." ) ); + act.set_to_null(); + return; + } + if( !rest_mode && who.get_stamina() > who.get_stamina_max() / 3 ) { + who.mod_stamina( -25 - intensity_modifier ); + if( one_in( 180 / intensity_modifier ) ) { + who.mod_fatigue( 1 ); + who.mod_thirst( 1 ); + } + if( calendar::once_every( 16_minutes / intensity_modifier ) ) { + //~ heavy breathing when excercising + std::string huff = _( "yourself huffing and puffing!" ); + sounds::sound( location + tripoint_east, 2 * intensity_modifier, sounds::sound_t::speech, huff, + true ); + } + // morale bonus kicks in gradually after 5 minutes of exercise + if( calendar::once_every( 2_minutes ) && + ( ( elapsed + act.moves_total - act.moves_left ) / 100 * 1_turns ) > 5_minutes ) { + who.add_morale( MORALE_FEELING_GOOD, intensity_modifier, 20, 6_hours, 30_minutes ); + } + if( calendar::once_every( 2_minutes ) ) { + who.add_msg_if_player( m_debug, who.activity_level_str() ); + who.add_msg_if_player( m_debug, act.id().c_str() ); + } + } else if( !rest_mode ) { + rest_mode = true; + who.add_msg_if_player( _( "You catch your breath for few moments." ) ); + } else if( who.get_stamina() >= who.get_stamina_max() ) { + rest_mode = false; + who.add_msg_if_player( _( "You get back to your training." ) ); + } +} + +void workout_activity_actor::finish( player_activity &act, Character &who ) +{ + if( !query_keep_training( act, who ) ) { + act.set_to_null(); + who.add_msg_if_player( _( "You finish your workout session." ) ); + } +} + +void workout_activity_actor::canceled( player_activity &/*act*/, Character &/*who*/ ) +{ + stop_time = calendar::turn; +} + +bool workout_activity_actor::query_keep_training( player_activity &act, Character &who ) +{ + if( disable_query || !who.is_avatar() ) { + elapsed += act.moves_total - act.moves_left; + act.moves_total = to_moves( 60_minutes ); + act.moves_left = act.moves_total; + return true; + } + int length; + uilist workout_query; + workout_query.text = _( "You have finished your training cycle, keep training?" ); + workout_query.addentry( 1, true, 'S', _( "Stop training." ) ); + workout_query.addentry( 2, true, 'c', _( "Continue training." ) ); + workout_query.addentry( 3, true, 'C', _( "Continue training and don't ask again." ) ); + workout_query.query(); + switch( workout_query.ret ) { + case UILIST_CANCEL: + case 1: + act_id = activity_id::NULL_ID(); + act.set_to_null(); + return false; + case 3: + disable_query = true; + elapsed += act.moves_total - act.moves_left; + act.moves_total = to_moves( 60_minutes ); + act.moves_left = act.moves_total; + return true; + case 2: + default: + query_int( length, _( "Train for how long (minutes): " ) ); + elapsed += act.moves_total - act.moves_left; + act.moves_total = to_moves( length * 1_minutes ); + act.moves_left = act.moves_total; + return true; + break; + } +} + +void workout_activity_actor::serialize( JsonOut &jsout ) const +{ + jsout.start_object(); + + jsout.member( "disable_query", disable_query ); + jsout.member( "act_id", act_id ); + jsout.member( "duration", duration ); + jsout.member( "location", location ); + jsout.member( "stop_time", stop_time ); + jsout.member( "elapsed", elapsed ); + jsout.member( "intensity_modifier", intensity_modifier ); + jsout.member( "rest_mode", rest_mode ); + + jsout.end_object(); +} + +std::unique_ptr workout_activity_actor::deserialize( JsonIn &jsin ) +{ + workout_activity_actor actor = workout_activity_actor( tripoint_zero ); + + JsonObject data = jsin.get_object(); + + data.read( "disable_query", actor.disable_query ); + data.read( "act_id", actor.act_id ); + data.read( "duration", actor.duration ); + data.read( "location", actor.location ); + data.read( "stop_time", actor.stop_time ); + data.read( "elapsed", actor.elapsed ); + data.read( "intensity_modifier", actor.intensity_modifier ); + data.read( "rest_mode", actor.rest_mode ); + + return actor.clone(); +} + namespace activity_actors { @@ -1311,6 +1548,10 @@ deserialize_functions = { { activity_id( "ACT_OPEN_GATE" ), &open_gate_activity_actor::deserialize }, { activity_id( "ACT_PICKUP" ), &pickup_activity_actor::deserialize }, { activity_id( "ACT_TRY_SLEEP" ), &try_sleep_activity_actor::deserialize }, + { activity_id( "ACT_WORKOUT_HARD" ), &workout_activity_actor::deserialize }, + { activity_id( "ACT_WORKOUT_ACTIVE" ), &workout_activity_actor::deserialize }, + { activity_id( "ACT_WORKOUT_MODERATE" ), &workout_activity_actor::deserialize }, + { activity_id( "ACT_WORKOUT_LIGHT" ), &workout_activity_actor::deserialize }, }; } // namespace activity_actors diff --git a/src/activity_actor.h b/src/activity_actor.h index e8eeff6d42169..f0f654929c3d1 100644 --- a/src/activity_actor.h +++ b/src/activity_actor.h @@ -7,6 +7,7 @@ #include #include +#include "activity_type.h" #include "clone_ptr.h" #include "item_location.h" #include "item.h" @@ -581,6 +582,46 @@ class try_sleep_activity_actor : public activity_actor static std::unique_ptr deserialize( JsonIn &jsin ); }; +class workout_activity_actor : public activity_actor +{ + private: + bool disable_query = false; // disables query, continue as long as possible + bool rest_mode = false; // work or rest during training session + time_duration duration; + tripoint location; + time_point stop_time; // can resume if time apart is not above + activity_id act_id = activity_id( "ACT_WORKOUT_LIGHT" ); // variable activities + int intensity_modifier = 1; + int elapsed = 0; + + public: + workout_activity_actor( const tripoint &loc ) : location( loc ) {} + + // can assume different sub-activities + activity_id get_type() const override { + return act_id; + } + + bool can_resume_with_internal( const activity_actor &other, const Character & ) const override { + const workout_activity_actor &w_actor = static_cast( other ); + return ( location == w_actor.location && calendar::turn - stop_time <= 10_minutes ); + } + + void start( player_activity &act, Character &who ) override; + void do_turn( player_activity &act, Character &who ) override; + void finish( player_activity &act, Character &who ) override; + void canceled( player_activity &/*act*/, Character &/*who*/ ) override; + + bool query_keep_training( player_activity &act, Character &who ); + + std::unique_ptr clone() const override { + return std::make_unique( *this ); + } + + void serialize( JsonOut &jsout ) const override; + static std::unique_ptr deserialize( JsonIn &jsin ); +}; + namespace activity_actors { diff --git a/src/game.cpp b/src/game.cpp index 16ddae9681fd8..31fe9ede25a93 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -2580,6 +2580,7 @@ input_context get_default_mode_input_context() ctxt.register_action( "autoattack" ); ctxt.register_action( "ignore_enemy" ); ctxt.register_action( "whitelist_enemy" ); + ctxt.register_action( "workout" ); ctxt.register_action( "save" ); ctxt.register_action( "quicksave" ); #if !defined(RELEASE) diff --git a/src/handle_action.cpp b/src/handle_action.cpp index 14bf87009ea8d..c0a516b4db933 100644 --- a/src/handle_action.cpp +++ b/src/handle_action.cpp @@ -2251,6 +2251,12 @@ bool game::handle_action() } break; + case ACTION_WORKOUT: + if( query_yn( _( "Start workout?" ) ) ) { + u.assign_activity( player_activity( workout_activity_actor( u.pos() ) ) ); + } + break; + case ACTION_SUICIDE: if( query_yn( _( "Commit suicide?" ) ) ) { if( query_yn( _( "REALLY commit suicide?" ) ) ) { diff --git a/src/iexamine.cpp b/src/iexamine.cpp index 7476f9e8eae9f..3da765f262377 100644 --- a/src/iexamine.cpp +++ b/src/iexamine.cpp @@ -5953,6 +5953,15 @@ void iexamine::workbench_internal( player &p, const tripoint &examp, } } +void iexamine::workout( player &p, const tripoint &examp ) +{ + if( !query_yn( _( "Use the %s to exercise?" ), get_map().furnname( examp ) ) ) { + none( p, examp ); + return; + } + p.assign_activity( player_activity( workout_activity_actor( examp ) ) ); +} + /** * Given then name of one of the above functions, returns the matching function * pointer. If no match is found, defaults to iexamine::none but prints out a @@ -6039,7 +6048,8 @@ iexamine_function iexamine_function_from_string( const std::string &function_nam { "quern_examine", &iexamine::quern_examine }, { "smoker_options", &iexamine::smoker_options }, { "open_safe", &iexamine::open_safe }, - { "workbench", &iexamine::workbench } + { "workbench", &iexamine::workbench }, + { "workout", &iexamine::workout } } }; diff --git a/src/iexamine.h b/src/iexamine.h index 9e4b2e2ca4c33..abb9665b081a7 100644 --- a/src/iexamine.h +++ b/src/iexamine.h @@ -111,6 +111,7 @@ void open_safe( player &p, const tripoint &examp ); void workbench( player &p, const tripoint &examp ); void workbench_internal( player &p, const tripoint &examp, const cata::optional &part ); +void workout( player &p, const tripoint &examp ); bool pour_into_keg( const tripoint &pos, item &liquid ); cata::optional getGasPumpByNumber( const tripoint &p, int number ); diff --git a/src/player_activity.cpp b/src/player_activity.cpp index d23501835c0fd..913aef93cde31 100644 --- a/src/player_activity.cpp +++ b/src/player_activity.cpp @@ -76,6 +76,13 @@ void player_activity::set_to_null() sfx::end_activity_sounds(); // kill activity sounds when activity is nullified } +void player_activity::sychronize_type_with_actor() +{ + if( actor && type != activity_id::NULL_ID() ) { + type = actor->get_type(); + } +} + bool player_activity::rooted() const { return type->rooted(); @@ -177,13 +184,17 @@ void player_activity::start_or_resume( Character &who, bool resuming ) if( actor && !resuming ) { actor->start( *this, who ); } - if( rooted() ) { + if( !type.is_null() && rooted() ) { who.rooted_message(); } + // last, as start function may have changed the type + sychronize_type_with_actor(); } void player_activity::do_turn( player &p ) { + // first to ensure sync with actor + sychronize_type_with_actor(); // Should happen before activity or it may fail du to 0 moves if( *this && type->will_refuel_fires() ) { try_fuel_fire( *this, p ); @@ -241,6 +252,7 @@ void player_activity::do_turn( player &p ) const bool travel_activity = id() == ACT_TRAVELLING; // This might finish the activity (set it to null) if( actor ) { + p.increase_activity_level( actor->get_type()->exertion_level() ); actor->do_turn( *this, p ); } else { // Use the legacy turn function @@ -254,7 +266,13 @@ void player_activity::do_turn( player &p ) // to simulate that the next step will surely use up some stamina anyway // this is to ensure that resting will occur when traveling overburdened const int adjusted_stamina = travel_activity ? p.get_stamina() - 1 : p.get_stamina(); - if( adjusted_stamina < previous_stamina && p.get_stamina() < p.get_stamina_max() / 3 ) { + activity_id act_id = actor ? actor->get_type() : type; + bool excluded = act_id == activity_id( "ACT_WORKOUT_HARD" ) || + act_id == activity_id( "ACT_WORKOUT_ACTIVE" ) || + act_id == activity_id( "ACT_WORKOUT_MODERATE" ) || + act_id == activity_id( "ACT_WORKOUT_LIGHT" ); + if( !excluded && adjusted_stamina < previous_stamina && + p.get_stamina() < p.get_stamina_max() / 3 ) { if( one_in( 50 ) ) { p.add_msg_if_player( _( "You pause for a moment to catch your breath." ) ); } @@ -280,6 +298,7 @@ void player_activity::do_turn( player &p ) set_to_null(); } } + p.reset_activity_level(); } if( !*this ) { // Make sure data of previous activity is cleared diff --git a/src/player_activity.h b/src/player_activity.h index 419d8c66e4b88..39b14c00ed80e 100644 --- a/src/player_activity.h +++ b/src/player_activity.h @@ -93,6 +93,11 @@ class player_activity /** This replaces the former usage `act.type = ACT_NULL` */ void set_to_null(); + // This makes player_activity's activity type inherit activity_actor's activity type, + // in order to synchronize both, due to possible variablility of actor's activity type + // allowed via override of activity_actor::get_type() + void sychronize_type_with_actor(); + const activity_id &id() const { return type; } From bacfe163dc288a09cdf1032cdd66c29744d4d028 Mon Sep 17 00:00:00 2001 From: Xenomorph-III Date: Wed, 1 Jul 2020 14:08:46 +1200 Subject: [PATCH 192/206] Adds a no-welding version of the four-winds shotgun. (#41626) * add alternate recipe for slam_fire shotgun. No welder this time, and it's given right off the bat! Say hello to your new early early-game shotgun! --- data/json/items/gun/shot.json | 4 +- data/json/items/migration.json | 5 ++ data/json/recipes/recipe_obsolete.json | 5 ++ data/json/recipes/weapon/ranged.json | 47 ++++++++++++++++++- .../firearms/gg_firearms_migration.json | 5 ++ data/mods/Generic_Guns/firearms/shot.json | 8 ++-- data/mods/Generic_Guns/obsolete.json | 5 ++ .../recipes/recipes_firearms_single.json | 44 ++++++++++++++++- 8 files changed, 113 insertions(+), 10 deletions(-) diff --git a/data/json/items/gun/shot.json b/data/json/items/gun/shot.json index 82de9e4b1edb0..bb29392ff70a8 100644 --- a/data/json/items/gun/shot.json +++ b/data/json/items/gun/shot.json @@ -827,10 +827,10 @@ "pocket_data": [ { "pocket_type": "MAGAZINE", "rigid": true, "ammo_restriction": { "shot": 6 } } ] }, { - "id": "slam_shotgun", + "id": "four_winds_shotgun", "copy-from": "shotgun_base", "type": "GUN", - "name": { "str": "makeshift shotgun" }, + "name": { "str": "four winds shotgun" }, "description": "A crude shotgun, composed of two thick steel pipes, an end cap and a nail. The lack of sights make this weapon only useful at point-blank range.", "weight": "3629 g", "volume": "2264 ml", diff --git a/data/json/items/migration.json b/data/json/items/migration.json index 5733fd4dd7373..a8c09f9122da4 100644 --- a/data/json/items/migration.json +++ b/data/json/items/migration.json @@ -1233,5 +1233,10 @@ "id": "carton_unsealed", "type": "MIGRATION", "replace": "carton_sealed" + }, + { + "id": "slam_shotgun", + "type": "MIGRATION", + "replace": "four_winds_shotgun" } ] diff --git a/data/json/recipes/recipe_obsolete.json b/data/json/recipes/recipe_obsolete.json index 1cb21d004dbb5..2d9f696a4e43d 100644 --- a/data/json/recipes/recipe_obsolete.json +++ b/data/json/recipes/recipe_obsolete.json @@ -2499,5 +2499,10 @@ "type": "recipe", "result": "bone_plate", "obsolete": true + }, + { + "type": "recipe", + "result": "slam_shotgun", + "obsolete": true } ] diff --git a/data/json/recipes/weapon/ranged.json b/data/json/recipes/weapon/ranged.json index cdf1df3b28f6e..1941edb1980c9 100644 --- a/data/json/recipes/weapon/ranged.json +++ b/data/json/recipes/weapon/ranged.json @@ -260,13 +260,13 @@ }, { "type": "recipe", - "result": "slam_shotgun", + "result": "four_winds_shotgun", "category": "CC_WEAPON", "subcategory": "CSC_WEAPON_RANGED", "skill_used": "mechanics", "skills_required": [ [ "gun", 1 ] ], "difficulty": 1, - "time": "2 h", + "time": "4 h", "autolearn": true, "book_learn": [ [ "manual_shotgun", 1 ] ], "qualities": [ @@ -301,5 +301,48 @@ ] ], "components": [ [ [ "pipe", 2 ] ], [ [ "nail", 1 ] ], [ [ "scrap", 3 ] ] ] + }, + { + "type": "recipe", + "result": "four_winds_shotgun", + "id_suffix": "without_welding", + "category": "CC_WEAPON", + "subcategory": "CSC_WEAPON_RANGED", + "skill_used": "mechanics", + "skills_required": [ [ "gun", 1 ] ], + "time": "2 h", + "autolearn": true, + "qualities": [ + { "id": "SAW_M", "level": 1 }, + { "id": "HAMMER", "level": 2 }, + { "id": "FILE", "level": 1 }, + { "id": "WRENCH", "level": 1 }, + { "id": "DRILL", "level": 2 } + ], + "tools": [ + [ + [ "shot_00", -1 ], + [ "shot_bird", -1 ], + [ "shot_dragon", -1 ], + [ "shot_flechette", -1 ], + [ "shot_slug", -1 ], + [ "shot_scrap", -1 ], + [ "shot_he", -1 ], + [ "shot_beanbag", -1 ], + [ "reloaded_shot_00", -1 ], + [ "reloaded_shot_bird", -1 ], + [ "reloaded_shot_dragon", -1 ], + [ "reloaded_shot_flechette", -1 ], + [ "reloaded_shot_slug", -1 ], + [ "bp_shot_00", -1 ], + [ "bp_shot_bird", -1 ], + [ "bp_shot_dragon", -1 ], + [ "bp_shot_flechette", -1 ], + [ "bp_shot_slug", -1 ], + [ "bp_shot_scrap", -1 ], + [ "shot_hull", -1 ] + ] + ], + "components": [ [ [ "pipe", 2 ] ], [ [ "nail", 1 ] ], [ [ "pipe_fittings", 1 ] ] ] } ] diff --git a/data/mods/Generic_Guns/firearms/gg_firearms_migration.json b/data/mods/Generic_Guns/firearms/gg_firearms_migration.json index a3bb83542b657..09a76cd919cd4 100644 --- a/data/mods/Generic_Guns/firearms/gg_firearms_migration.json +++ b/data/mods/Generic_Guns/firearms/gg_firearms_migration.json @@ -306,5 +306,10 @@ ], "type": "MIGRATION", "replace": "shot_pump" + }, + { + "id": "slam_shotgun", + "type": "MIGRATION", + "replace": "four_winds_shotgun" } ] diff --git a/data/mods/Generic_Guns/firearms/shot.json b/data/mods/Generic_Guns/firearms/shot.json index 85f7ddeea8119..4986437868f5d 100644 --- a/data/mods/Generic_Guns/firearms/shot.json +++ b/data/mods/Generic_Guns/firearms/shot.json @@ -50,10 +50,10 @@ "ammo": [ "ammo_shot" ] }, { - "id": "slam_shotgun", - "copy-from": "slam_shotgun", + "id": "four_winds_shotgun", + "copy-from": "four_winds_shotgun", "type": "GUN", - "name": { "str": "slam-fire shotgun" }, + "name": { "str": "four winds shotgun" }, "description": "A crude shotgun, composed of two thick steel pipes, an end cap and a nail. The lack of sights make this weapon only useful at point-blank range.", "weight": "3629 g", "volume": "2264 ml", @@ -62,7 +62,7 @@ "price_postapoc": 1000, "bashing": 8, "material": [ "steel" ], - "ranged_damage": { "damage_type": "bullet", "amount": -2 }, + "ranged_damage": { "damage_type": "bullet", "amount": -6 }, "dispersion": 960, "durability": 4, "clip_size": 1, diff --git a/data/mods/Generic_Guns/obsolete.json b/data/mods/Generic_Guns/obsolete.json index 452cccd75d252..69beceb33f2fb 100644 --- a/data/mods/Generic_Guns/obsolete.json +++ b/data/mods/Generic_Guns/obsolete.json @@ -43,5 +43,10 @@ "type": "recipe", "result": "rifle_pipe_rifle", "obsolete": true + }, + { + "type": "recipe", + "result": "slam_shotgun", + "obsolete": true } ] diff --git a/data/mods/Generic_Guns/recipes/recipes_firearms_single.json b/data/mods/Generic_Guns/recipes/recipes_firearms_single.json index 1c2998dfd75bc..d3c1c77753998 100644 --- a/data/mods/Generic_Guns/recipes/recipes_firearms_single.json +++ b/data/mods/Generic_Guns/recipes/recipes_firearms_single.json @@ -125,7 +125,7 @@ }, { "type": "recipe", - "result": "slam_shotgun", + "result": "four_winds_shotgun", "category": "CC_WEAPON", "subcategory": "CSC_WEAPON_RANGED", "skill_used": "mechanics", @@ -146,7 +146,6 @@ [ "shot_buck", -1 ], [ "shot_fowl", -1 ], [ "shot_pyro", -1 ], - [ "shot_dart", -1 ], [ "shot_foster", -1 ], [ "shot_bean", -1 ], [ "reloaded_shot_buck", -1 ], @@ -165,5 +164,46 @@ ] ], "components": [ [ [ "pipe", 2 ] ], [ [ "nail", 1 ] ], [ [ "scrap", 3 ] ] ] + }, + { + "type": "recipe", + "result": "four_winds_shotgun", + "id_suffix": "without_welding", + "category": "CC_WEAPON", + "subcategory": "CSC_WEAPON_RANGED", + "skill_used": "mechanics", + "skills_required": [ [ "gun", 1 ] ], + "time": "1 h", + "autolearn": true, + "qualities": [ + { "id": "SAW_M", "level": 1 }, + { "id": "DRILL", "level": 2 }, + { "id": "HAMMER", "level": 2 }, + { "id": "FILE", "level": 1 }, + { "id": "WRENCH", "level": 1 } + ], + "tools": [ + [ + [ "shot_buck", -1 ], + [ "shot_fowl", -1 ], + [ "shot_pyro", -1 ], + [ "shot_foster", -1 ], + [ "shot_bean", -1 ], + [ "reloaded_shot_buck", -1 ], + [ "reloaded_shot_fowl", -1 ], + [ "reloaded_shot_pyro", -1 ], + [ "reloaded_shot_dart", -1 ], + [ "reloaded_shot_foster", -1 ], + [ "reloaded_shot_junk", -1 ], + [ "bp_shot_buck", -1 ], + [ "bp_shot_fowl", -1 ], + [ "bp_shot_pyro", -1 ], + [ "bp_shot_dart", -1 ], + [ "bp_shot_foster", -1 ], + [ "bp_shot_junk", -1 ], + [ "shot_hull", -1 ] + ] + ], + "components": [ [ [ "pipe", 2 ] ], [ [ "nail", 1 ] ], [ [ "pipe_fittings", 1 ] ] ] } ] From 975c9420a15dc46c867d80677a33bf62b47b1ef1 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Tue, 30 Jun 2020 19:13:52 -0700 Subject: [PATCH 193/206] Remove auto --- src/iuse.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index b13ded24123a5..e8d585fa0aa08 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -3927,7 +3927,7 @@ int iuse::molotov_lit( player *p, item *it, bool t, const tripoint &pos ) if( pos.x == -999 || pos.y == -999 ) { return 0; } else if( !t ) { - for( auto &pt : g->m.points_in_radius( pos, 1, 0 ) ) { + for( const tripoint &pt : g->m.points_in_radius( pos, 1, 0 ) ) { const int intensity = 1 + one_in( 3 ) + one_in( 5 ); g->m.add_field( pt, fd_fire, intensity ); } From 0df224f2eb7511d9e503d3f1c99fb3154f4ebde8 Mon Sep 17 00:00:00 2001 From: Menschheit Date: Wed, 1 Jul 2020 04:47:04 +0200 Subject: [PATCH 194/206] Fix loading problem for guns with internal magazine (still need json change for specific guns) (#41667) * fix speed loader(still need some more json changes) * Added magazine pocket for marlin_9a --- data/json/items/gun/22.json | 1 + data/json/items/gun/3006.json | 1 + data/json/items/gun/762.json | 1 + data/json/items/gun/762R.json | 1 + src/item.cpp | 7 +++++++ 5 files changed, 11 insertions(+) diff --git a/data/json/items/gun/22.json b/data/json/items/gun/22.json index 57f61e61c8a72..9e5d8d21e460b 100644 --- a/data/json/items/gun/22.json +++ b/data/json/items/gun/22.json @@ -88,6 +88,7 @@ "faults": [ "fault_gun_blackpowder", "fault_gun_dirt" ], "flags": [ "RELOAD_ONE" ], "pocket_data": [ + { "pocket_type": "MAGAZINE", "ammo_restriction": { "22": 19 } }, { "pocket_type": "MAGAZINE_WELL", "holster": true, diff --git a/data/json/items/gun/3006.json b/data/json/items/gun/3006.json index 5ed0ebb3026d8..30c23b48aaf5a 100644 --- a/data/json/items/gun/3006.json +++ b/data/json/items/gun/3006.json @@ -130,6 +130,7 @@ ], "flags": [ "RELOAD_ONE" ], "pocket_data": [ + { "pocket_type": "MAGAZINE", "ammo_restriction": { "3006": 5 } }, { "pocket_type": "MAGAZINE_WELL", "holster": true, diff --git a/data/json/items/gun/762.json b/data/json/items/gun/762.json index 8ee6fec7d9b75..599efb0022157 100644 --- a/data/json/items/gun/762.json +++ b/data/json/items/gun/762.json @@ -135,6 +135,7 @@ ], "flags": [ "RELOAD_ONE", "NEVER_JAMS" ], "pocket_data": [ + { "pocket_type": "MAGAZINE", "ammo_restriction": { "762": 10 } }, { "pocket_type": "MAGAZINE_WELL", "holster": true, diff --git a/data/json/items/gun/762R.json b/data/json/items/gun/762R.json index 96e20fedc44e7..b33dab7af9c43 100644 --- a/data/json/items/gun/762R.json +++ b/data/json/items/gun/762R.json @@ -73,6 +73,7 @@ ], "flags": [ "RELOAD_ONE" ], "pocket_data": [ + { "pocket_type": "MAGAZINE", "ammo_restriction": { "762R": 5 } }, { "pocket_type": "MAGAZINE_WELL", "holster": true, diff --git a/src/item.cpp b/src/item.cpp index ea1169e61133b..68330de06a237 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -6587,6 +6587,13 @@ bool item::is_reloadable_helper( const itype_id &ammo, bool now ) const return false; } } + //Now single shoted gun also has magazine_well slot for speedloader + //If ammo is not an ammo it may be dangerous to use parameters like ammo->ammo->type + //It is complicated: normal magazine in addition to speedloader? Magazines of mods? + if( now && !ammo->ammo ) { + return magazine_compatible().count( ammo ); + } + return now ? ammo_remaining() < ammo_capacity( ammo->ammo->type ) : true; } return magazine_compatible().count( ammo ); From 672e309c7bb298324b70341de5106c9ddfac1be5 Mon Sep 17 00:00:00 2001 From: Menschheit Date: Wed, 1 Jul 2020 05:04:54 +0200 Subject: [PATCH 195/206] Fix multi select for washing (#41633) * Fix Selector UI for washing * Fix UI display for detergent consumption * Modify existing class instead of adding new one * Always use item_location to avoid type conversion --- src/inventory_ui.cpp | 25 ++++++++++++++++--------- src/inventory_ui.h | 6 ++++-- src/iuse.cpp | 10 ++++------ 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/inventory_ui.cpp b/src/inventory_ui.cpp index eb98670ff40df..6864339383c0a 100644 --- a/src/inventory_ui.cpp +++ b/src/inventory_ui.cpp @@ -2282,12 +2282,10 @@ drop_locations inventory_iuse_selector::execute() count = 0; } } - drop_locations dropped_pos_and_qty; - for( const std::pair &use_pair : to_use ) { - item_location loc( u, const_cast( use_pair.first ) ); - dropped_pos_and_qty.push_back( std::make_pair( loc, use_pair.second ) ); + for( const std::pair &use_pair : to_use ) { + dropped_pos_and_qty.push_back( std::make_pair( *use_pair.first, use_pair.second ) ); } return dropped_pos_and_qty; @@ -2295,17 +2293,26 @@ drop_locations inventory_iuse_selector::execute() void inventory_iuse_selector::set_chosen_count( inventory_entry &entry, size_t count ) { - const item *it = &*entry.any_item(); + const item_location &it = entry.any_item(); if( count == 0 ) { entry.chosen_count = 0; - const auto iter = to_use.find( it ); - if( iter != to_use.end() ) { - to_use.erase( iter ); + for( const item_location &loc : entry.locations ) { + to_use.erase( &loc ); } } else { entry.chosen_count = std::min( std::min( count, max_chosen_count ), entry.get_available_count() ); - to_use[it] = entry.chosen_count; + if( it->count_by_charges() ) { + to_use[&it] = entry.chosen_count; + } else { + for( const item_location &loc : entry.locations ) { + if( count == 0 ) { + break; + } + to_use[&loc] = 1; + count--; + } + } } on_change( entry ); diff --git a/src/inventory_ui.h b/src/inventory_ui.h index 70c2808689d1d..e013973cf12e0 100644 --- a/src/inventory_ui.h +++ b/src/inventory_ui.h @@ -734,7 +734,7 @@ class inventory_compare_selector : public inventory_multiselector class inventory_iuse_selector : public inventory_multiselector { public: - using GetStats = std::function & )>; + using GetStats = std::function & )>; inventory_iuse_selector( player &p, const std::string &selector_title, const inventory_selector_preset &preset = default_preset, @@ -747,7 +747,7 @@ class inventory_iuse_selector : public inventory_multiselector private: GetStats get_stats; - std::map to_use; + std::map to_use; size_t max_chosen_count; }; @@ -769,4 +769,6 @@ class inventory_drop_selector : public inventory_multiselector std::vector> dropping; size_t max_chosen_count; }; + + #endif // CATA_SRC_INVENTORY_UI_H diff --git a/src/iuse.cpp b/src/iuse.cpp index c82ba03e28839..b02f7f613781d 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -9755,12 +9755,12 @@ int iuse::wash_items( player *p, bool soft_items, bool hard_items ) ( hard_items && !location->is_soft() ) ); } ); auto make_raw_stats = [available_water, available_cleanser]( - const std::map &items + const std::map &locs ) { units::volume total_volume = 0_ml; - for( const auto &p : items ) { - total_volume += p.first->volume() * p.second / - ( p.first->count_by_charges() ? p.first->charges : 1 ); + for( const auto &p : locs ) { + total_volume += ( *p.first )->volume() * p.second / + ( ( *p.first )->count_by_charges() ? ( *p.first )->charges : 1 ); } washing_requirements required = washing_requirements_for_volume( total_volume ); auto to_string = []( int val ) -> std::string { @@ -9789,7 +9789,6 @@ int iuse::wash_items( player *p, bool soft_items, bool hard_items ) if( to_clean.empty() ) { return 0; } - // Determine if we have enough water and cleanser for all the items. units::volume total_volume = 0_ml; for( drop_location pair : to_clean ) { @@ -9823,7 +9822,6 @@ int iuse::wash_items( player *p, bool soft_items, bool hard_items ) } // Assign the activity values. p->assign_activity( ACT_WASH, required.time ); - for( const drop_location &pair : to_clean ) { p->activity.targets.push_back( pair.first ); p->activity.values.push_back( pair.second ); From e42715fcff76e5d10c271a5158545855ae2d7ec7 Mon Sep 17 00:00:00 2001 From: Qrox Date: Mon, 29 Jun 2020 18:51:48 +0800 Subject: [PATCH 196/206] Fix crash when trying to reloading item inside advanced inventory --- src/advanced_inv.cpp | 8 ++++++++ src/advanced_inv.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index eb177cf3e2a92..602d5e17e5951 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -1348,8 +1348,12 @@ void advanced_inventory::action_examine( advanced_inv_listitem *sitem, // "return to AIM". do_return_entry(); assert( g->u.has_activity( ACT_ADV_INVENTORY ) ); + // `inventory_item_menu` may call functions that move items, so we should + // always recalculate during this period to ensure all item references are valid + always_recalc = true; ret = g->inventory_item_menu( loc, info_startx, info_width, src == advanced_inventory::side::left ? game::LEFT_OF_INFO : game::RIGHT_OF_INFO ); + always_recalc = false; if( !g->u.has_activity( ACT_ADV_INVENTORY ) ) { exit = true; } else { @@ -1432,6 +1436,10 @@ void advanced_inventory::display() ui->mark_resize(); ui->on_redraw( [&]( const ui_adaptor & ) { + if( always_recalc ) { + recalc = true; + } + redraw_pane( advanced_inventory::side::left ); redraw_pane( advanced_inventory::side::right ); redraw_sidebar(); diff --git a/src/advanced_inv.h b/src/advanced_inv.h index 29baf1e1da147..28267a33c9774 100644 --- a/src/advanced_inv.h +++ b/src/advanced_inv.h @@ -81,6 +81,7 @@ class advanced_inventory int colstart = 0; bool recalc = false; + bool always_recalc = false; /** * Which panels is active (item moved from there). */ From 0c9fb0f37cb97ae7b3ee54f1b281f10d5dd178fd Mon Sep 17 00:00:00 2001 From: Menschheit Date: Wed, 1 Jul 2020 05:41:23 +0200 Subject: [PATCH 197/206] Allow unloading mods instead of the gun itself (#41685) --- src/player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/player.cpp b/src/player.cpp index d0debcb939207..643ff5d2c31a3 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -2918,7 +2918,7 @@ bool player::unload( item_location &loc ) if( target->is_magazine() ) { player_activity unload_mag_act( activity_id( "ACT_UNLOAD_MAG" ) ); assign_activity( unload_mag_act ); - activity.targets.emplace_back( loc ); + activity.targets.emplace_back( item_location( loc, target ) ); // Calculate the time to remove the contained ammo (consuming half as much time as required to load the magazine) int mv = 0; From 07111b0049fdc33114a81abc6c015b1a87e32bb2 Mon Sep 17 00:00:00 2001 From: Broken27 <67008253+Broken27@users.noreply.github.com> Date: Wed, 1 Jul 2020 05:42:50 +0200 Subject: [PATCH 198/206] Added recipe for separation funnel (#41689) --- data/json/recipes/recipe_others.json | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/data/json/recipes/recipe_others.json b/data/json/recipes/recipe_others.json index a91bade313322..4e39d6a1186a0 100644 --- a/data/json/recipes/recipe_others.json +++ b/data/json/recipes/recipe_others.json @@ -4609,5 +4609,33 @@ "autolearn": true, "tools": [ [ [ "tongs", -1 ] ], [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ], [ [ "sheet_metal", -1 ] ], [ [ "forge", 75 ] ] ], "components": [ [ [ "plastic_chunk", 200 ] ] ] + }, + { + "type": "recipe", + "result": "funnel_separation", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_TOOLS", + "skill_used": "fabrication", + "difficulty": 7, + "time": "1 h", + "book_learn": [ [ "glassblowing_book", 5 ] ], + "qualities": [ { "id": "CHISEL", "level": 3 } ], + "tools": [ [ [ "tongs", -1 ] ], [ [ "pipe", -1 ] ], [ [ "crucible", -1 ], [ "crucible_clay", -1 ] ], [ [ "forge", 75 ] ] ], + "components": [ + [ [ "glass_shard", 3 ], [ "pipe_glass", 1 ], [ "flask_glass", 3 ], [ "test_tube", 6 ], [ "marble", 75 ] ], + [ [ "stopcock", 1 ] ] + ] + }, + { + "type": "recipe", + "result": "stopcock", + "category": "CC_OTHER", + "subcategory": "CSC_OTHER_OTHER", + "skill_used": "fabrication", + "difficulty": 4, + "time": "30 m", + "autolearn": true, + "tools": [ [ [ "mold_plastic", -1 ] ], [ [ "surface_heat", 5, "LIST" ] ] ], + "components": [ [ [ "plastic_chunk", 1 ] ] ] } ] From a1e694840af497e4b9fb0f985b61a463a156298c Mon Sep 17 00:00:00 2001 From: Menschheit Date: Wed, 1 Jul 2020 05:45:20 +0200 Subject: [PATCH 199/206] update item_contents::only_item (#41690) --- src/item_contents.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/item_contents.cpp b/src/item_contents.cpp index cea650f10942b..37bf67cabea6b 100644 --- a/src/item_contents.cpp +++ b/src/item_contents.cpp @@ -372,8 +372,8 @@ ret_val item_contents::insert_item( const item &it, item_pocket::pocket_ty // LAST is invalid, so we assume it will be a regular container pk_type = item_pocket::pocket_type::CONTAINER; } - ret_val pocket = find_pocket_for( it, pk_type ); + ret_val pocket = find_pocket_for( it, pk_type ); if( pocket.value() == nullptr ) { return ret_val::make_failure( "No success" ); } @@ -827,12 +827,14 @@ const item &item_contents::only_item() const return null_item_reference(); } for( const item_pocket &pocket : contents ) { - if( pocket.empty() || !pocket.is_type( item_pocket::pocket_type::CONTAINER ) ) { + if( pocket.empty() || !( pocket.is_type( item_pocket::pocket_type::CONTAINER ) || + pocket.is_type( item_pocket::pocket_type::SOFTWARE ) ) ) { continue; } // the first item we come to is the only one. return pocket.front(); } + return null_item_reference(); } From 80bf30d6f706d2de190b1e609ac4fed740141fd0 Mon Sep 17 00:00:00 2001 From: Andrey Bienkowski Date: Tue, 30 Jun 2020 18:52:35 +0300 Subject: [PATCH 200/206] Modernize more volume and weight --- data/core/basic.json | 4 +- data/legacy/1/obsolete.json | 116 +++++++++--------- data/legacy/3/crazy.json | 8 +- data/legacy/4/boots.json | 92 +++++++------- data/legacy/5/vehicle_parts.json | 4 +- data/mods/Aftershock/items/comestibles.json | 2 +- .../mods/CRT_EXPANSION/items/crt_gunmods.json | 2 +- .../items/crt_makeshift_survival.json | 8 +- data/mods/DinoMod/egg.json | 4 +- data/mods/DinoMod/monsters/dinosaur.json | 2 +- data/mods/Generic_Guns/magazines/grenade.json | 2 +- data/mods/Magiclysm/items/alchemy_items.json | 6 +- data/mods/Magiclysm/items/books_lore.json | 2 +- data/mods/Magiclysm/items/enchanted_misc.json | 2 +- .../mods/Magiclysm/items/enchanted_rings.json | 8 +- data/mods/Magiclysm/items/ethereal_items.json | 8 +- 16 files changed, 135 insertions(+), 135 deletions(-) diff --git a/data/core/basic.json b/data/core/basic.json index 8ea36066cbbf7..b825d6e455bfe 100644 --- a/data/core/basic.json +++ b/data/core/basic.json @@ -12,8 +12,8 @@ "category": "food", "name": { "str_sp": "water" }, "description": "Water, the stuff of life, the best thirst-quencher available. It would be safer to drink once purified.", - "weight": 250, - "volume": 1, + "weight": "250 g", + "volume": "250 ml", "price": 50, "symbol": "~", "color": "light_blue", diff --git a/data/legacy/1/obsolete.json b/data/legacy/1/obsolete.json index ae5e8e6bda3fd..fa27ed1399e39 100644 --- a/data/legacy/1/obsolete.json +++ b/data/legacy/1/obsolete.json @@ -8,8 +8,8 @@ "color": "yellow", "description": "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. This one has been handmade using an intact casing.", "material": [ "steel", "powder" ], - "volume": 1, - "weight": 3, + "volume": "250 ml", + "weight": "3 g", "bashing": 1, "ammo_type": "22", "casing": "22_casing", @@ -30,8 +30,8 @@ "color": "yellow", "description": "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. This one has been handmade using an intact casing.", "material": [ "steel", "powder" ], - "volume": 1, - "weight": 3, + "volume": "250 ml", + "weight": "3 g", "bashing": 1, "ammo_type": "22", "casing": "22_casing", @@ -52,8 +52,8 @@ "color": "red", "description": "A hand-reloaded beanbag round for shotguns, not deadly but designed to disable.", "material": [ "plastic", "powder" ], - "volume": 1, - "weight": 46, + "volume": "250 ml", + "weight": "46 g", "ammo_type": "shot", "casing": "shot_hull", "damage": 8, @@ -72,8 +72,8 @@ "description": "A homemade, rechargeable power cell built from salvaged electronics. With enough electronics skill, you could attach it to an electric-powered device to provide it with energy. The power cell is not compatible with standard batteries; it must be re-energized via a special recharging station.", "price": 2000, "material": [ "plastic", "aluminum" ], - "weight": 142, - "volume": 1, + "weight": "142 g", + "volume": "250 ml", "to_hit": -2, "category": "spare_parts" }, @@ -82,7 +82,7 @@ "id": "brew_bum_wine", "name": "cheap wine must", "description": "Unfermented grape wine. A hearty mix of pressed grapes, with some added brandy to fortify it.", - "weight": 46, + "weight": "46 g", "color": "red", "container": "jug_plastic", "flags": [ "TRADER_AVOID" ], @@ -92,7 +92,7 @@ "fun": -15, "price": 0, "material": [ "fruit", "water" ], - "volume": 1, + "volume": "250 ml", "charges": 7, "phase": "liquid", "comestible_type": "DRINK", @@ -110,8 +110,8 @@ "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ], "skill": "shotgun", "ammo": [ "shot" ], - "weight": 1814, - "volume": 4, + "weight": "1814 g", + "volume": "1 L", "bashing": 12, "to_hit": -1, "ranged_damage": 4, @@ -146,8 +146,8 @@ "flags": [ "RELOAD_ONE", "NEVER_JAMS", "RELOAD_EJECT" ], "skill": "shotgun", "ammo": [ "shot" ], - "weight": 1133, - "volume": 6, + "weight": "1133 g", + "volume": "1500 ml", "bashing": 12, "to_hit": -1, "ranged_damage": 1, @@ -166,12 +166,12 @@ "name": "spare magazine", "description": "A spare magazine you can keep on hand to make reloads faster, but must itself be reloaded before it can be used again.", "location": "accessories", - "weight": 330, + "weight": "330 g", "color": "light_gray", "symbol": ":", "material": [ "steel", "plastic" ], "mod_targets": [ "pistol", "shotgun", "smg", "rifle" ], - "volume": 1, + "volume": "250 ml", "price": 5000 }, { @@ -181,13 +181,13 @@ "clip_size_modifier": 50, "description": "Increases the ammunition capacity of your firearm by 50%.", "location": "magazine", - "weight": 495, + "weight": "495 g", "to_hit": -1, "color": "light_gray", "symbol": ":", "material": [ "steel", "plastic" ], "mod_targets": [ "pistol", "shotgun", "smg", "rifle" ], - "volume": 1, + "volume": "250 ml", "price": 5600 }, { @@ -197,12 +197,12 @@ "clip_size_modifier": 100, "description": "Completely doubles the ammunition capacity of your firearm.", "location": "magazine", - "weight": 660, + "weight": "660 g", "color": "light_gray", "symbol": ":", "material": [ "steel", "plastic" ], "mod_targets": [ "shotgun", "smg", "rifle", "pistol" ], - "volume": 2, + "volume": "500 ml", "price": 7200 }, { @@ -215,8 +215,8 @@ "description": "10 plastic bags, folded smooth and wrapped tightly together with a string.", "price": 500, "material": [ "plastic" ], - "weight": 10, - "volume": 1, + "weight": "10 g", + "volume": "250 ml", "to_hit": 1 }, { @@ -227,12 +227,12 @@ "dispersion_modifier": 90, "damage_modifier": 6, "description": "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 and fire rate.", - "weight": 589, + "weight": "589 g", "color": "magenta", "symbol": ":", "material": [ "steel" ], "mod_targets": [ "rifle" ], - "volume": 2, + "volume": "500 ml", "integral_volume": 0, "burst_modifier": 4, "recoil_modifier": 60, @@ -248,12 +248,12 @@ "dispersion_modifier": -150, "damage_modifier": 8, "description": "This is a complete conversion kit, designed to turn a rifle into a deadly sniper rifle. It removes any automatic fire capabilities but also increases accuracy and damage.", - "weight": 589, + "weight": "589 g", "color": "green", "symbol": ":", "material": [ "steel" ], "mod_targets": [ "rifle" ], - "volume": 2, + "volume": "500 ml", "integral_volume": 0, "burst_modifier": -99, "price": 66000, @@ -270,8 +270,8 @@ "description": "A large block of semi-processed coal.", "price": 60000, "material": [ "stone" ], - "weight": 13840, - "volume": 72, + "weight": "13840 g", + "volume": "18 L", "bashing": 8, "to_hit": -5 }, @@ -285,8 +285,8 @@ "color": "dark_gray", "description": "These are smaller pieces of charcoal used in smaller heating devices.", "material": [ "wood" ], - "volume": 1, - "weight": 22, + "volume": "250 ml", + "weight": "22 g", "phase": "solid", "ammo_type": "charcoal", "count": 10, @@ -302,8 +302,8 @@ "color": "dark_gray", "description": "These are smaller pieces of coal used in smaller heating devices.", "material": [ "wood" ], - "volume": 1, - "weight": 22, + "volume": "250 ml", + "weight": "22 g", "ammo_type": "charcoal", "count": 10, "stack_size": 20 @@ -317,8 +317,8 @@ "color": "white", "description": "Also known as a flight, this item provides aerodynamic stabilization of arrows. You'll need to put these on your arrows to make them functional.", "material": [ "paper" ], - "volume": 1, - "weight": 1, + "volume": "250 ml", + "weight": "1 g", "bashing": 1, "ammo_type": "components", "count": 10, @@ -328,7 +328,7 @@ "type": "ARMOR", "id": "helmet_netting", "name": "helmet netting", - "weight": 25, + "weight": "25 g", "color": "green", "covers": [ "HEAD" ], "to_hit": -1, @@ -337,7 +337,7 @@ "flags": [ "OVERSIZE", "BELTED", "WATER_FRIENDLY" ], "price": 2000, "material": [ "cotton" ], - "volume": 0, + "volume": "0 L", "coverage": 12, "material_thickness": 1 }, @@ -350,8 +350,8 @@ "category": "other", "description": "A small metal tank for holding gas or liquids. Useful for crafting.", "price": 6000, - "weight": 3200, - "volume": 45, + "weight": "3200 g", + "volume": "11250 ml", "bashing": 5, "to_hit": -3, "material": [ "steel" ] @@ -367,8 +367,8 @@ "material": [ "steel", "plastic" ], "flags": [ "CHARGE", "NO_UNLOAD", "NEVER_JAMS", "NO_UNLOAD" ], "skill": "rifle", - "weight": 1814, - "volume": 13, + "weight": "1814 g", + "volume": "3250 ml", "bashing": 8, "to_hit": -1, "dispersion": 10, @@ -396,8 +396,8 @@ "color": "yellow", "description": "A single capacitor charged with current to be used by a laser weapon or similar armament.", "material": [ "steel" ], - "volume": 1, - "weight": 5 + "volume": "250 ml", + "weight": "5 g" }, { "id": "inhaler_stimgas", @@ -405,8 +405,8 @@ "comestible_type": "MED", "name": "stimgas inhaler", "description": "A powerful stimulant with no risk of addiction.", - "weight": 10, - "volume": 1, + "weight": "10 g", + "volume": "250 ml", "price": 750, "charges": 25, "material": [ "plastic" ], @@ -422,8 +422,8 @@ "comestible_type": "MED", "name": "sewagas inhaler", "description": "A powerful hallucinogen with low risk of addiction.", - "weight": 10, - "volume": 1, + "weight": "10 g", + "volume": "250 ml", "price": 500, "charges": 25, "material": [ "plastic" ], @@ -451,8 +451,8 @@ "flags": [ "RELOAD_AND_SHOOT", "NEVER_JAMS", "PRIMITIVE_RANGED_WEAPON" ], "skill": "archery", "ammo": [ "dart" ], - "weight": 440, - "volume": 4, + "weight": "440 g", + "volume": "1 L", "bashing": 8, "to_hit": -2, "dispersion": 75, @@ -470,8 +470,8 @@ "color": "yellow", "description": "A handful of darts, useful as ammunition for blowguns.", "material": [ "wood" ], - "volume": 1, - "weight": 1, + "volume": "250 ml", + "weight": "1 g", "ammo_type": "dart", "damage": 1, "range": 30, @@ -490,8 +490,8 @@ "description": "An electrode plate from a lead-acid battery.", "price": 10, "material": [ "steel" ], - "weight": 400, - "volume": 1, + "weight": "400 g", + "volume": "250 ml", "bashing": 4, "to_hit": -2 }, @@ -501,8 +501,8 @@ "name": "active nail bomb", "description": "This is an active nail bomb, likely to explode any second now. Better throw it!", "category": "weapons", - "weight": 290, - "volume": 2, + "weight": "290 g", + "volume": "500 ml", "price": 0, "material": [ "steel", "plastic" ], "symbol": "*", @@ -528,8 +528,8 @@ "name": "forged sword", "description": "A common short sword, forged from several pieces of steel. The pointy end is the dangerous one.", "material": [ "steel" ], - "volume": 8, - "weight": 700, + "volume": "2 L", + "weight": "700 g", "bashing": 4, "cutting": 14, "to_hit": 2, @@ -546,8 +546,8 @@ "category": "other", "material": [ "wood" ], "flags": [ "NO_SALVAGE", "TRADER_AVOID" ], - "weight": 6, - "volume": 0, + "weight": "6 g", + "volume": "0 L", "to_hit": -5, "qualities": [ [ "COOK", 1 ] ] }, diff --git a/data/legacy/3/crazy.json b/data/legacy/3/crazy.json index c1b2cef436118..4ddad28328f6f 100644 --- a/data/legacy/3/crazy.json +++ b/data/legacy/3/crazy.json @@ -9,8 +9,8 @@ "category": "weapons", "name": "Granade", "description": "Attached to this grenade is a name tag with the name Kevin written on it. Does not seem to work like a grenade, handle with care.", - "weight": 180, - "volume": 1, + "weight": "180 g", + "volume": "250 ml", "price": 40000, "to_hit": -1, "bashing": 6, @@ -25,8 +25,8 @@ "category": "weapons", "name": "active Granade", "description": "Attached to this grenade is a name tag with the name Kevin written on it. Does not seem to work like a grenade, handle with care. Better throw it!", - "weight": 180, - "volume": 1, + "weight": "180 g", + "volume": "250 ml", "price": 0, "to_hit": -1, "bashing": 6, diff --git a/data/legacy/4/boots.json b/data/legacy/4/boots.json index 368d17a085ae2..36d9718eb42b8 100644 --- a/data/legacy/4/boots.json +++ b/data/legacy/4/boots.json @@ -4,8 +4,8 @@ "type": "ARMOR", "name": { "str": "pair of boots", "str_pl": "pairs of boots" }, "description": "Tough leather boots. Very durable.", - "weight": 1060, - "volume": 10, + "weight": "1060 g", + "volume": "2500 ml", "price": 10000, "to_hit": -1, "bashing": 1, @@ -43,8 +43,8 @@ "category": "armor", "name": { "str": "pair of bone armor boots", "str_pl": "pairs of bone armor boots" }, "description": "Leather boots armored with reinforcements made from bone. Light and strong.", - "weight": 1824, - "volume": 17, + "weight": "1824 g", + "volume": "4250 ml", "price": 13500, "to_hit": -1, "bashing": 4, @@ -82,8 +82,8 @@ "category": "armor", "name": { "str": "pair of turnout boots", "str_pl": "pairs of turnout boots" }, "description": "A pair of steel-toed rubber boots, the sort worn by firefighters. Highly resistant to heat and flame, they provide excellent protection from injury.", - "weight": 1930, - "volume": 14, + "weight": "1930 g", + "volume": "3500 ml", "price": 13000, "to_hit": 2, "material": [ "plastic", "nomex" ], @@ -120,8 +120,8 @@ "category": "armor", "name": { "str": "pair of chitinous boots", "str_pl": "pairs of chitinous boots" }, "description": "Boots made from the exoskeletons of insects. Light and durable.", - "weight": 1620, - "volume": 17, + "weight": "1620 g", + "volume": "4250 ml", "price": 13500, "to_hit": -1, "bashing": 4, @@ -159,8 +159,8 @@ "category": "armor", "name": { "str": "pair of combat boots", "str_pl": "pairs of combat boots" }, "description": "Modern reinforced tactical combat boots. Very durable.", - "weight": 1060, - "volume": 8, + "weight": "1060 g", + "volume": "2 L", "price": 7000, "to_hit": -1, "bashing": 1, @@ -198,8 +198,8 @@ "category": "armor", "name": { "str": "pair of survivor fireboots", "str_pl": "pairs of survivor fireboots" }, "description": "A pair of customized, Kevlar armored Nomex boots, modified to provide maximum protection from harm and the elements, even when knee-deep in the dead.", - "weight": 1980, - "volume": 12, + "weight": "1980 g", + "volume": "3 L", "price": 24000, "to_hit": -1, "bashing": 1, @@ -236,8 +236,8 @@ "type": "ARMOR", "name": { "str": "pair of fur boots", "str_pl": "pairs of fur boots" }, "description": "Boots lined with fur for warmth.", - "weight": 1890, - "volume": 18, + "weight": "1890 g", + "volume": "4500 ml", "price": 14000, "to_hit": -1, "bashing": 1, @@ -275,8 +275,8 @@ "category": "armor", "name": { "str": "pair of survivor wetsuit boots", "str_pl": "pairs of survivor wetsuit boots" }, "description": "A pair of customized, Kevlar armored neoprene boots, modified to provide maximum protection from harm and the elements, even when knee-deep in the dead.", - "weight": 1180, - "volume": 6, + "weight": "1180 g", + "volume": "1500 ml", "price": 24000, "to_hit": -1, "bashing": 1, @@ -313,8 +313,8 @@ "type": "ARMOR", "name": { "str": "pair of hiking boots", "str_pl": "pairs of hiking boots" }, "description": "Tough yet light leather boots. Durable and comfortable.", - "weight": 960, - "volume": 8, + "weight": "960 g", + "volume": "2 L", "price": 14000, "to_hit": -1, "bashing": 1, @@ -352,8 +352,8 @@ "category": "armor", "name": { "str": "pair of heavy survivor boots", "str_pl": "pairs of heavy survivor boots" }, "description": "A pair of customized Kevlar boots, heavily armored with steel and modified to provide maximum protection from harm, even when knee-deep in the dead.", - "weight": 1610, - "volume": 12, + "weight": "1610 g", + "volume": "3 L", "price": 24000, "to_hit": -1, "bashing": 1, @@ -391,8 +391,8 @@ "category": "armor", "name": { "str": "pair of leather armor boots", "str_pl": "pairs of leather armor boots" }, "description": "Thick leather boots made specifically to protect the feet. Light and tough.", - "weight": 902, - "volume": 8, + "weight": "902 g", + "volume": "2 L", "price": 12500, "to_hit": -1, "bashing": 4, @@ -430,8 +430,8 @@ "category": "armor", "name": { "str": "pair of light survivor boots", "str_pl": "pairs of light survivor boots" }, "description": "A pair of customized, Kevlar armored cloth boots, modified to provide maximum protection from harm, even when knee-deep in the dead.", - "weight": 1120, - "volume": 8, + "weight": "1120 g", + "volume": "2 L", "price": 24000, "to_hit": -1, "bashing": 1, @@ -469,8 +469,8 @@ "category": "armor", "name": { "str": "pair of armored boots", "str_pl": "pairs of armored boots" }, "description": "An extremely heavy set of armor plated boots.", - "weight": 1890, - "volume": 13, + "weight": "1890 g", + "volume": "3250 ml", "price": 50000, "to_hit": -2, "bashing": 7, @@ -507,8 +507,8 @@ "type": "ARMOR", "name": { "str": "pair of rubber boots", "str_pl": "pairs of rubber boots" }, "description": "A pair of rubber boots, often used while cleaning with caustic materials.", - "weight": 980, - "volume": 14, + "weight": "980 g", + "volume": "3500 ml", "price": 8000, "to_hit": 2, "material": [ "plastic" ], @@ -544,8 +544,8 @@ "type": "ARMOR", "name": { "str": "pair of steeltoed boots", "str_pl": "pairs of steeltoed boots" }, "description": "Leather boots with a steel toe. Extremely durable.", - "weight": 1320, - "volume": 12, + "weight": "1320 g", + "volume": "3 L", "price": 12000, "to_hit": -1, "bashing": 4, @@ -583,8 +583,8 @@ "category": "armor", "name": { "str": "pair of survivor boots", "str_pl": "pairs of survivor boots" }, "description": "A pair of customized leather boots, armored with Kevlar and modified to provide maximum protection from harm, even when knee-deep in the dead.", - "weight": 1330, - "volume": 10, + "weight": "1330 g", + "volume": "2500 ml", "price": 24000, "to_hit": -1, "bashing": 1, @@ -621,8 +621,8 @@ "type": "ARMOR", "name": { "str": "pair of western boots", "str_pl": "pairs of western boots" }, "description": "Stiff leather boots with intricate embroidery and one-inch heels. They look good, but aren't made for running.", - "weight": 1060, - "volume": 10, + "weight": "1060 g", + "volume": "2500 ml", "price": 15000, "to_hit": -1, "bashing": 1, @@ -659,8 +659,8 @@ "type": "ARMOR", "name": { "str": "pair of winter boots", "str_pl": "pairs of winter boots" }, "description": "Cumbersome boots designed for warmth.", - "weight": 1640, - "volume": 14, + "weight": "1640 g", + "volume": "3500 ml", "price": 7000, "to_hit": -1, "material": [ "wool", "plastic" ], @@ -697,8 +697,8 @@ "category": "armor", "name": { "str": "pair of winter survivor boots", "str_pl": "pairs of winter survivor boots" }, "description": "A pair of customized, Kevlar armored fur boots, modified to provide maximum protection from harm and the elements, even when knee-deep in the dead.", - "weight": 1760, - "volume": 14, + "weight": "1760 g", + "volume": "3500 ml", "price": 24000, "to_hit": -1, "bashing": 1, @@ -736,8 +736,8 @@ "category": "armor", "name": { "str": "pair of XL survivor boots", "str_pl": "pairs of XL survivor boots" }, "description": "A massive pair of customized leather boots, armored with Kevlar and modified to provide maximum protection from harm and the elements, even when knee-deep in the dead.", - "weight": 2460, - "volume": 20, + "weight": "2460 g", + "volume": "5 L", "price": 24000, "to_hit": -1, "bashing": 1, @@ -774,8 +774,8 @@ "type": "ARMOR", "name": { "str": "pair of knee-high boots", "str_pl": "pairs of knee-high boots" }, "description": "Very long leather boots that cover the lower legs. Difficult to wear but extremely durable.", - "weight": 1520, - "volume": 15, + "weight": "1520 g", + "volume": "3750 ml", "price": 8000, "to_hit": -1, "bashing": 1, @@ -812,8 +812,8 @@ "type": "ARMOR", "name": { "str": "pair of rollerblades", "str_pl": "pairs of rollerblades" }, "description": "A pair of inline skates. Very fast on flat floors, but they make it hard to move on rough terrain, or to dodge effectively.", - "weight": 1640, - "volume": 15, + "weight": "1640 g", + "volume": "3750 ml", "price": 8500, "to_hit": -2, "material": [ "plastic", "cotton" ], @@ -849,8 +849,8 @@ "type": "ARMOR", "name": { "str": "pair of rollerskates", "str_pl": "pairs of rollerskates" }, "description": "An old-fashioned pair of leather rollerskates with steel frames. While quite fast on flat floors, they make it difficult to move on rough terrain.", - "weight": 2720, - "volume": 12, + "weight": "2720 g", + "volume": "3 L", "price": 8500, "to_hit": -2, "bashing": 6, diff --git a/data/legacy/5/vehicle_parts.json b/data/legacy/5/vehicle_parts.json index 924fe9d2faf1c..63ba8bcd2170f 100644 --- a/data/legacy/5/vehicle_parts.json +++ b/data/legacy/5/vehicle_parts.json @@ -4,12 +4,12 @@ "id": "v_curtain_item", "name": { "str": "vehicle curtain" }, "description": "A rod, a few metal rings, and a large piece of cloth with some strings attached for securely fastening the edges.", - "weight": 2200, + "weight": "2200 g", "to_hit": -4, "color": "white", "symbol": "\"", "material": [ "cotton", "steel" ], - "volume": 20, + "volume": "5 L", "bashing": 1, "category": "veh_parts", "price": 3500 diff --git a/data/mods/Aftershock/items/comestibles.json b/data/mods/Aftershock/items/comestibles.json index 127bf14320281..635e8bb42b274 100644 --- a/data/mods/Aftershock/items/comestibles.json +++ b/data/mods/Aftershock/items/comestibles.json @@ -12,7 +12,7 @@ "quench": -5, "description": "A crumbly white pill half the size of your thumb, packed with vitamins and calories. Provides a whole day's nutrition in portable form, but it's a little hard to keep down, thanks to the rancid taste and chalky texture.", "price": 10000, - "volume": 0, + "volume": "0 L", "charges": 5, "looks_like": "vitamins", "fun": -8, diff --git a/data/mods/CRT_EXPANSION/items/crt_gunmods.json b/data/mods/CRT_EXPANSION/items/crt_gunmods.json index 5934e0ffedf7c..d766cef8f9de8 100644 --- a/data/mods/CRT_EXPANSION/items/crt_gunmods.json +++ b/data/mods/CRT_EXPANSION/items/crt_gunmods.json @@ -23,7 +23,7 @@ "name": "CQB SI shotgun", "description": "The integrated underbarrel shotgun of this gun which holds a single shot. It's irremovable.", "weight": "2600 g", - "volume": 0, + "volume": "0 L", "price": 95000, "to_hit": -1, "material": [ "steel" ], diff --git a/data/mods/CRT_EXPANSION/items/crt_makeshift_survival.json b/data/mods/CRT_EXPANSION/items/crt_makeshift_survival.json index 1c5364d238df6..7e1a56be307c2 100644 --- a/data/mods/CRT_EXPANSION/items/crt_makeshift_survival.json +++ b/data/mods/CRT_EXPANSION/items/crt_makeshift_survival.json @@ -5,8 +5,8 @@ "category": "armor", "name": "plant fiber tunic", "description": "A loose garment cobbled together from a collection of plant bundles and wound together by makeshift cordage", - "weight": 1520, - "volume": 23, + "weight": "1520 g", + "volume": "5750 ml", "price": 0, "to_hit": -5, "material": [ "dry_plant" ], @@ -25,8 +25,8 @@ "category": "armor", "name": "plant fiber bracelet", "description": "A bracelet wound together by makeshift cordage. Has some cool looking pebbles. ", - "weight": 1520, - "volume": 23, + "weight": "1520 g", + "volume": "5750 ml", "price": 0, "to_hit": -5, "material": [ "dry_plant" ], diff --git a/data/mods/DinoMod/egg.json b/data/mods/DinoMod/egg.json index 615beeec8dfc8..851bf76b47ecc 100644 --- a/data/mods/DinoMod/egg.json +++ b/data/mods/DinoMod/egg.json @@ -3,7 +3,7 @@ "type": "COMESTIBLE", "id": "egg_dino", "name": "dinosaur egg", - "weight": 75, + "weight": "75 g", "color": "green", "spoils_in": "4 days", "comestible_type": "FOOD", @@ -14,7 +14,7 @@ "description": "Pale, football-shaped egg laid by a dinosaur.", "price": 500, "material": [ "egg" ], - "volume": 1, + "volume": "250 ml", "stack_size": 4, "fun": -6, "flags": [ "FREEZERBURN" ], diff --git a/data/mods/DinoMod/monsters/dinosaur.json b/data/mods/DinoMod/monsters/dinosaur.json index 31c3d55a1f949..fe0304a8d9fce 100644 --- a/data/mods/DinoMod/monsters/dinosaur.json +++ b/data/mods/DinoMod/monsters/dinosaur.json @@ -868,7 +868,7 @@ "symbol": "D", "color": "magenta_green", "volume": "400000 ml", - "weight": 400000, + "weight": "400 kg", "material": [ "flesh" ], "aggression": 10, "morale": 30, diff --git a/data/mods/Generic_Guns/magazines/grenade.json b/data/mods/Generic_Guns/magazines/grenade.json index 13d8f2c655acd..d5fc0146d0af8 100644 --- a/data/mods/Generic_Guns/magazines/grenade.json +++ b/data/mods/Generic_Guns/magazines/grenade.json @@ -4,7 +4,7 @@ "type": "MAGAZINE", "name": { "str": "grenade machine gun belt" }, "description": "An ammo belt consisting of metal linkages which separate from the belt upon firing. This one holds grenade cartridges and is too bulky to be worn like other ammo belts.", - "volume": 0, + "volume": "0 L", "price": 0, "material": [ "steel" ], "symbol": "#", diff --git a/data/mods/Magiclysm/items/alchemy_items.json b/data/mods/Magiclysm/items/alchemy_items.json index 1ea8c222106b0..9345100f06711 100644 --- a/data/mods/Magiclysm/items/alchemy_items.json +++ b/data/mods/Magiclysm/items/alchemy_items.json @@ -119,7 +119,7 @@ "description": "The powdered remains of a will-o-wisps's physical form. It seems to still possess an otherworldly glow.", "material": [ "powder" ], "weight": "5 g", - "volume": 1 + "volume": "250 ml" }, { "id": "glow_light", @@ -165,7 +165,7 @@ "description": "The great plates from behind a bulette's head have always been prized for use in shield and armor making.", "material": [ "arcane_skin" ], "weight": "30 kg", - "volume": 12 + "volume": "3 L" }, { "id": "bulette_pearl", @@ -176,7 +176,7 @@ "description": "As a bulette burrows through the earth its gills collect minute amounts of precious metals and gems which slowly aggregate into lustrous gemstones prized for their beauty and power.", "material": [ "stone" ], "weight": "120 g", - "volume": 1 + "volume": "250 ml" }, { "id": "dragon_essence", diff --git a/data/mods/Magiclysm/items/books_lore.json b/data/mods/Magiclysm/items/books_lore.json index d7920c471160f..33b24e508593e 100644 --- a/data/mods/Magiclysm/items/books_lore.json +++ b/data/mods/Magiclysm/items/books_lore.json @@ -43,7 +43,7 @@ "name": "old photo", "description": "A photo of a jovial, old wizard, he seems to be dancing with a coat rack in this basement. There is a stack of suitcases in the background.", "weight": "1 g", - "volume": 0, + "volume": "0 L", "price": 800, "material": [ "paper" ], "symbol": "*", diff --git a/data/mods/Magiclysm/items/enchanted_misc.json b/data/mods/Magiclysm/items/enchanted_misc.json index a31fd6860ca07..39b097220230a 100644 --- a/data/mods/Magiclysm/items/enchanted_misc.json +++ b/data/mods/Magiclysm/items/enchanted_misc.json @@ -53,7 +53,7 @@ "name": { "str": "skeleton key of opening", "str_pl": "skeleton keys of opening" }, "description": "A small gold skeleton key. You can activate it to unlock locked things.", "weight": "20 g", - "volume": 0, + "volume": "0 L", "price": 500000, "material": [ "gold" ], "symbol": "[", diff --git a/data/mods/Magiclysm/items/enchanted_rings.json b/data/mods/Magiclysm/items/enchanted_rings.json index 09ec19b12640e..0cdac26a70129 100644 --- a/data/mods/Magiclysm/items/enchanted_rings.json +++ b/data/mods/Magiclysm/items/enchanted_rings.json @@ -5,7 +5,7 @@ "name": "copper magic ring", "description": "A generic copper magic ring.", "weight": "4 g", - "volume": 0, + "volume": "0 L", "price": 5000, "material": [ "copper" ], "symbol": "[", @@ -21,7 +21,7 @@ "name": "magic ring", "description": "A generic silver magic ring.", "weight": "5 g", - "volume": 0, + "volume": "0 L", "price": 5000, "material": [ "silver" ], "symbol": "[", @@ -37,7 +37,7 @@ "name": "magic ring", "description": "A generic gold magic ring.", "weight": "9 g", - "volume": 0, + "volume": "0 L", "price": 5000, "material": [ "gold" ], "symbol": "[", @@ -53,7 +53,7 @@ "name": "magic ring", "description": "A generic platinum magic ring.", "weight": "11 g", - "volume": 0, + "volume": "0 L", "price": 5000, "material": [ "platinum" ], "symbol": "[", diff --git a/data/mods/Magiclysm/items/ethereal_items.json b/data/mods/Magiclysm/items/ethereal_items.json index 6d3c6a06a4757..2cc6e97e9f495 100644 --- a/data/mods/Magiclysm/items/ethereal_items.json +++ b/data/mods/Magiclysm/items/ethereal_items.json @@ -83,8 +83,8 @@ "category": "tools", "name": "magic light", "description": "A small magical light that you can read by.", - "weight": 0, - "volume": 0, + "weight": "0 kg", + "volume": "0 L", "price": 0, "symbol": ",", "color": "light_green", @@ -234,8 +234,8 @@ "type": "ARMOR", "name": { "str": "flesh pouch", "str_pl": "flesh pouches" }, "description": "A large pouch of tough flesh on your back, filled with tiny tentacles that grasp and hold anything you place inside. It shifts and adjusts itself to minimize encumbrance.", - "weight": 0, - "volume": 0, + "weight": "0 kg", + "volume": "0 L", "price": 0, "material": [ "flesh" ], "symbol": "[", From c3cba8e66e3e22438dfb87933a5d7b03eec95ff6 Mon Sep 17 00:00:00 2001 From: Mark Langsdorf Date: Mon, 29 Jun 2020 18:24:16 -0500 Subject: [PATCH 201/206] options: remove the option to not use z-levels Ground vehicle z-level transitions requires that z-levels be enabled, and getting rid of this option will also allow much of the map code to be dramatically simplified. --- src/game.cpp | 2 +- src/map.h | 2 +- src/options.cpp | 7 ------- tests/ground_destroy_test.cpp | 14 -------------- tests/monster_vision_test.cpp | 3 +-- tests/test_main.cpp | 2 +- 6 files changed, 4 insertions(+), 26 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 31fe9ede25a93..2581eb5a28f50 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -574,7 +574,7 @@ void game::setup() load_world_modfiles( ui ); - m = map( get_option( "ZLEVELS" ) ); + m = map( true ); next_npc_id = character_id( 1 ); next_mission_id = 1; diff --git a/src/map.h b/src/map.h index 2a209ceaea716..f559c940aebc7 100644 --- a/src/map.h +++ b/src/map.h @@ -212,7 +212,7 @@ class map public: // Constructors & Initialization - map( int mapsize = MAPSIZE, bool zlev = false ); + map( int mapsize = MAPSIZE, bool zlev = true ); map( bool zlev ) : map( MAPSIZE, zlev ) { } virtual ~map(); diff --git a/src/options.cpp b/src/options.cpp index f7c9cc54535f7..096a75d14e8bb 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -2145,13 +2145,6 @@ void options_manager::add_options_world_default() add_empty_line(); - add( "ZLEVELS", "world_default", translate_marker( "Z-levels" ), - translate_marker( "If true, enables several features related to vertical movement, such as hauling items up stairs, climbing downspouts, and flying aircraft. May cause problems if toggled mid-game." ), - true - ); - - add_empty_line(); - add( "CHARACTER_POINT_POOLS", "world_default", translate_marker( "Character point pools" ), translate_marker( "Allowed point pools for character generation." ), { { "any", translate_marker( "Any" ) }, { "multi_pool", translate_marker( "Multi-pool only" ) }, { "no_freeform", translate_marker( "No freeform" ) } }, diff --git a/tests/ground_destroy_test.cpp b/tests/ground_destroy_test.cpp index 85cbda89f8c5b..2a76bd17fb684 100644 --- a/tests/ground_destroy_test.cpp +++ b/tests/ground_destroy_test.cpp @@ -19,14 +19,11 @@ // Destroying pavement with a pickaxe should not leave t_flat_roof. // See issue #24707: // https://github.com/CleverRaven/Cataclysm-DDA/issues/24707 -// Behavior may depend on ZLEVELS being set. TEST_CASE( "pavement_destroy", "[.]" ) { const ter_id flat_roof_id = ter_id( "t_flat_roof" ); REQUIRE( flat_roof_id != t_null ); - const bool zlevels_set = get_option( "ZLEVELS" ); - INFO( "ZLEVELS is " << zlevels_set ); clear_map_and_put_player_underground(); // Populate the map with pavement. g->m.ter_set( tripoint_zero, ter_id( "t_pavement" ) ); @@ -44,15 +41,11 @@ TEST_CASE( "pavement_destroy", "[.]" ) // Ground-destroying explosions on dirt or grass shouldn't leave t_flat_roof. // See issue #23250: // https://github.com/CleverRaven/Cataclysm-DDA/issues/23250 -// Behavior may depend on ZLEVELS being set. TEST_CASE( "explosion_on_ground", "[.]" ) { ter_id flat_roof_id = ter_id( "t_flat_roof" ); REQUIRE( flat_roof_id != t_null ); - const bool zlevels_set = get_option( "ZLEVELS" ); - INFO( "ZLEVELS is " << zlevels_set ); - clear_map_and_put_player_underground(); std::vector test_terrain_id = { ter_id( "t_dirt" ), ter_id( "t_grass" ) @@ -90,7 +83,6 @@ TEST_CASE( "explosion_on_ground", "[.]" ) // Ground-destroying explosions on t_floor with a t_rock_floor basement // below should create some t_open_air, not just t_flat_roof (which is // the defined roof of a t_rock-floor). -// Behavior depends on ZLEVELS being set. TEST_CASE( "explosion_on_floor_with_rock_floor_basement", "[.]" ) { ter_id flat_roof_id = ter_id( "t_flat_roof" ); @@ -103,9 +95,6 @@ TEST_CASE( "explosion_on_floor_with_rock_floor_basement", "[.]" ) REQUIRE( rock_floor_id != t_null ); REQUIRE( open_air_id != t_null ); - const bool zlevels_set = get_option( "ZLEVELS" ); - INFO( "ZLEVELS is " << zlevels_set ); - clear_map_and_put_player_underground(); const int area_dim = 24; @@ -148,7 +137,6 @@ TEST_CASE( "explosion_on_floor_with_rock_floor_basement", "[.]" ) // Destroying interior floors shouldn't cause the roofs above to collapse. // Destroying supporting walls should cause the roofs above to collapse. -// Behavior may depend on ZLEVELS being set. TEST_CASE( "collapse_checks", "[.]" ) { constexpr int wall_size = 5; @@ -163,8 +151,6 @@ TEST_CASE( "collapse_checks", "[.]" ) REQUIRE( wall_id != t_null ); REQUIRE( open_air_id != t_null ); - const bool zlevels_set = get_option( "ZLEVELS" ); - INFO( "ZLEVELS is " << zlevels_set ); clear_map_and_put_player_underground(); // build a structure diff --git a/tests/monster_vision_test.cpp b/tests/monster_vision_test.cpp index cef8bd52fa32d..b35d863942ea2 100644 --- a/tests/monster_vision_test.cpp +++ b/tests/monster_vision_test.cpp @@ -23,8 +23,7 @@ static const time_point midday = calendar::turn_zero + 12_hours; TEST_CASE( "monsters shouldn't see through floors", "[vision]" ) { - override_option opt( "ZLEVELS", "true" ); - override_option opt2( "FOV_3D", "true" ); + override_option opt( "FOV_3D", "true" ); bool old_fov_3d = fov_3d; fov_3d = true; calendar::turn = midday; diff --git a/tests/test_main.cpp b/tests/test_main.cpp index f0ff30227e652..316df98c4e7e7 100644 --- a/tests/test_main.cpp +++ b/tests/test_main.cpp @@ -144,7 +144,7 @@ static void init_global_game_state( const std::vector &mods, g->u = avatar(); g->u.create( character_type::NOW ); - g->m = map( get_option( "ZLEVELS" ) ); + g->m = map(); overmap_special_batch empty_specials( point_zero ); overmap_buffer.create_custom_overmap( point_zero, empty_specials ); From d7c8c55285cf4257d220f9a0da1c0ccb8be5e402 Mon Sep 17 00:00:00 2001 From: Stephen Pittman Date: Wed, 1 Jul 2020 15:54:41 +1000 Subject: [PATCH 202/206] Use correct typing in inventory_ui.cpp --- src/inventory_ui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inventory_ui.cpp b/src/inventory_ui.cpp index 6864339383c0a..87cc0697172ec 100644 --- a/src/inventory_ui.cpp +++ b/src/inventory_ui.cpp @@ -2284,7 +2284,7 @@ drop_locations inventory_iuse_selector::execute() } drop_locations dropped_pos_and_qty; - for( const std::pair &use_pair : to_use ) { + for( const std::pair &use_pair : to_use ) { dropped_pos_and_qty.push_back( std::make_pair( *use_pair.first, use_pair.second ) ); } From add04520dc7cf7ab1e0e8c96d5cb6c57323b2955 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Wed, 1 Jul 2020 01:08:36 -0700 Subject: [PATCH 203/206] Test that items in various locations are updated once per tick (#41710) --- tests/active_item_test.cpp | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tests/active_item_test.cpp diff --git a/tests/active_item_test.cpp b/tests/active_item_test.cpp new file mode 100644 index 0000000000000..18fa63411c168 --- /dev/null +++ b/tests/active_item_test.cpp @@ -0,0 +1,43 @@ +#include "avatar.h" +#include "catch/catch.hpp" +#include "item.h" +#include "map.h" +#include "map_helpers.h" +#include "player_helpers.h" +#include "point.h" + +TEST_CASE( "active_items_processed_regularly", "[item]" ) +{ + clear_avatar(); + clear_map(); + avatar &player_character = get_avatar(); + map &here = get_map(); + // An arbitrary active item that ticks every turn. + item active_item( "firecracker_act", 0, 5 ); + active_item.activate(); + const int active_item_ticks = active_item.charges; + item storage( "backpack", 0 ); + cata::optional::iterator> wear_success = player_character.wear_item( storage ); + REQUIRE( wear_success ); + + item *inventory_item = player_character.try_add( active_item ); + REQUIRE( inventory_item != nullptr ); + REQUIRE( inventory_item->charges == active_item_ticks ); + + bool wield_success = player_character.wield( active_item ); + REQUIRE( wield_success ); + REQUIRE( player_character.weapon.charges == active_item_ticks ); + + here.add_item( player_character.pos(), active_item ); + REQUIRE( here.i_at( player_character.pos() ).only_item().charges == active_item_ticks ); + // TODO: spawn a vehicle and stash a firecracker in there too. + + // Call item processing entry points. + here.process_items(); + player_character.process_items(); + + const int expected_ticks = active_item_ticks - 1; + CHECK( inventory_item->charges == expected_ticks ); + CHECK( player_character.weapon.charges == expected_ticks ); + CHECK( here.i_at( player_character.pos() ).only_item().charges == expected_ticks ); +} From 501f14189b541d03cdd0390c97b07f54eb952758 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Wed, 1 Jul 2020 04:14:36 -0700 Subject: [PATCH 204/206] Map reference migration part nine (#41717) * Map reference migration part nine * Downgrade avatar references to Character Reducing inclusions of avatar.h and player.h --- src/avatar_action.cpp | 2 +- src/avatar_action.h | 5 +- src/descriptions.cpp | 2 +- src/inventory_ui.cpp | 56 ++++++------ src/inventory_ui.h | 17 ++-- src/kill_tracker.cpp | 4 +- src/magic.cpp | 25 +++--- src/map.cpp | 6 +- src/map.h | 2 +- src/mondefense.cpp | 9 +- src/monexamine.cpp | 150 ++++++++++++++++++-------------- src/mutation.cpp | 13 +-- src/npctalk.cpp | 19 ++-- src/overmapbuffer.cpp | 27 +++--- src/pickup.cpp | 27 +++--- src/pixel_minimap.cpp | 7 +- src/sounds.cpp | 24 ++--- src/turret.cpp | 12 ++- src/vehicle.h | 2 +- src/weather.cpp | 18 ++-- tests/encumbrance_test.cpp | 17 ++-- tests/item_location_test.cpp | 6 +- tests/monster_test.cpp | 18 ++-- tests/npc_talk_test.cpp | 30 +++---- tests/player_test.cpp | 20 ++--- tests/projectile_test.cpp | 7 +- tests/vehicle_drag_test.cpp | 4 +- tests/vehicle_power_test.cpp | 5 +- tests/vehicle_test.cpp | 2 +- tests/vehicle_turrets_test.cpp | 4 +- tests/visitable_remove_test.cpp | 33 ++++--- 31 files changed, 306 insertions(+), 267 deletions(-) diff --git a/src/avatar_action.cpp b/src/avatar_action.cpp index 20ee21ace8e63..bd71cca6d6d68 100644 --- a/src/avatar_action.cpp +++ b/src/avatar_action.cpp @@ -838,7 +838,7 @@ void avatar_action::fire_wielded_weapon( avatar &you ) you.assign_activity( aim_activity_actor::use_wielded(), false ); } -void avatar_action::fire_ranged_mutation( avatar &you, const item &fake_gun ) +void avatar_action::fire_ranged_mutation( Character &you, const item &fake_gun ) { you.assign_activity( aim_activity_actor::use_mutation( fake_gun ), false ); } diff --git a/src/avatar_action.h b/src/avatar_action.h index fbed8231365f9..c2715f1cd6f7d 100644 --- a/src/avatar_action.h +++ b/src/avatar_action.h @@ -6,12 +6,13 @@ #include "point.h" #include "units.h" +class aim_activity_actor; class avatar; +class Character; class item; class item_location; class map; class turret_data; -class aim_activity_actor; namespace avatar_action { @@ -53,7 +54,7 @@ bool can_fire_weapon( avatar &you, const map &m, const item &weapon ); void fire_wielded_weapon( avatar &you ); /** Stores fake gun specified by the mutation and starts interactive aiming */ -void fire_ranged_mutation( avatar &you, const item &fake_gun ); +void fire_ranged_mutation( Character &you, const item &fake_gun ); /** Stores fake gun specified by the bionic and starts interactive aiming */ void fire_ranged_bionic( avatar &you, const item &fake_gun, const units::energy &cost_per_shot ); diff --git a/src/descriptions.cpp b/src/descriptions.cpp index 01210d004a48a..d8b7e9ffbecb6 100644 --- a/src/descriptions.cpp +++ b/src/descriptions.cpp @@ -155,7 +155,7 @@ std::string map_data_common_t::extended_description() const if( has_any_harvest ) { ss << "--" << std::endl; - int player_skill = get_avatar().get_skill_level( skill_survival ); + int player_skill = get_player_character().get_skill_level( skill_survival ); ss << _( "You could harvest the following things from it:" ) << std::endl; // Group them by identical ids to avoid repeating same blocks of data // First, invert the mapping: season->id to id->seasons diff --git a/src/inventory_ui.cpp b/src/inventory_ui.cpp index 87cc0697172ec..1ea1e2590f965 100644 --- a/src/inventory_ui.cpp +++ b/src/inventory_ui.cpp @@ -1,12 +1,10 @@ #include "inventory_ui.h" -#include "avatar.h" #include "cata_utility.h" #include "catacharset.h" #include "character.h" #include "colony.h" #include "debug.h" -#include "game.h" #include "ime.h" #include "inventory.h" #include "item.h" @@ -18,7 +16,6 @@ #include "optional.h" #include "options.h" #include "output.h" -#include "player.h" #include "point.h" #include "string_formatter.h" #include "string_id.h" @@ -114,10 +111,11 @@ class selection_column_preset : public inventory_selector_preset } nc_color get_color( const inventory_entry &entry ) const override { + Character &player_character = get_player_character(); if( entry.is_item() ) { - if( &*entry.any_item() == &g->u.weapon ) { + if( &*entry.any_item() == &player_character.weapon ) { return c_light_blue; - } else if( g->u.is_worn( *entry.any_item() ) ) { + } else if( player_character.is_worn( *entry.any_item() ) ) { return c_cyan; } } @@ -171,7 +169,7 @@ nc_color inventory_entry::get_invlet_color() const { if( !is_selectable() ) { return c_dark_gray; - } else if( g->u.inv.assigned_invlet.count( get_invlet() ) ) { + } else if( get_player_character().inv.assigned_invlet.count( get_invlet() ) ) { return c_yellow; } else { return c_white; @@ -232,9 +230,10 @@ inventory_selector_preset::inventory_selector_preset() bool inventory_selector_preset::sort_compare( const inventory_entry &lhs, const inventory_entry &rhs ) const { + Character &player_character = get_player_character(); // Place items with an assigned inventory letter first, since the player cared enough to assign them - const bool left_fav = g->u.inv.assigned_invlet.count( lhs.any_item()->invlet ); - const bool right_fav = g->u.inv.assigned_invlet.count( rhs.any_item()->invlet ); + const bool left_fav = player_character.inv.assigned_invlet.count( lhs.any_item()->invlet ); + const bool right_fav = player_character.inv.assigned_invlet.count( rhs.any_item()->invlet ); if( left_fav == right_fav ) { return lhs.cached_name.compare( rhs.cached_name ) < 0; // Simple alphabetic order } else if( left_fav ) { @@ -637,17 +636,21 @@ void inventory_column::set_stack_favorite( const item_location &location, bool f { const item *selected_item = location.get_item(); std::list to_favorite; + map &here = get_map(); + Character &player_character = get_player_character(); if( location.where() == item_location::type::character ) { - int position = g->u.get_item_position( selected_item ); + int position = player_character.get_item_position( selected_item ); if( position < 0 ) { - g->u.i_at( position ).set_favorite( !selected_item->is_favorite ); // worn/wielded + // worn/wielded + player_character.i_at( position ).set_favorite( !selected_item->is_favorite ); } else { - g->u.inv.set_stack_favorite( position, !selected_item->is_favorite ); // in inventory + // in inventory + player_character.inv.set_stack_favorite( position, !selected_item->is_favorite ); } } else if( location.where() == item_location::type::map ) { - map_stack items = g->m.i_at( location.position() ); + map_stack items = here.i_at( location.position() ); for( auto &item : items ) { if( item.stacks_with( *selected_item ) ) { @@ -658,7 +661,7 @@ void inventory_column::set_stack_favorite( const item_location &location, bool f item->set_favorite( favorite ); } } else if( location.where() == item_location::type::vehicle ) { - const cata::optional vp = g->m.veh_at( + const cata::optional vp = here.veh_at( location.position() ).part_with_feature( "CARGO", true ); assert( vp ); @@ -916,7 +919,7 @@ size_t inventory_column::get_entry_indent( const inventory_entry &entry ) const return res; } -int inventory_column::reassign_custom_invlets( const player &p, int min_invlet, int max_invlet ) +int inventory_column::reassign_custom_invlets( const Character &p, int min_invlet, int max_invlet ) { int cur_invlet = min_invlet; for( auto &elem : entries ) { @@ -1324,9 +1327,10 @@ void inventory_selector::add_character_items( Character &character ) void inventory_selector::add_map_items( const tripoint &target ) { - if( g->m.accessible_items( target ) ) { - map_stack items = g->m.i_at( target ); - const std::string name = to_upper_case( g->m.name( target ) ); + map &here = get_map(); + if( here.accessible_items( target ) ) { + map_stack items = here.i_at( target ); + const std::string name = to_upper_case( here.name( target ) ); const item_category map_cat( name, no_translation( name ), 100 ); add_items( map_column, [ &target ]( item * it ) { @@ -1342,7 +1346,8 @@ void inventory_selector::add_map_items( const tripoint &target ) void inventory_selector::add_vehicle_items( const tripoint &target ) { - const cata::optional vp = g->m.veh_at( target ).part_with_feature( "CARGO", true ); + const cata::optional vp = + get_map().veh_at( target ).part_with_feature( "CARGO", true ); if( !vp ) { return; } @@ -1367,9 +1372,10 @@ void inventory_selector::add_vehicle_items( const tripoint &target ) void inventory_selector::add_nearby_items( int radius ) { if( radius >= 0 ) { + map &here = get_map(); for( const tripoint &pos : closest_tripoints_first( u.pos(), radius ) ) { // can not reach this -> can not access its contents - if( u.pos() != pos && !g->m.clear_path( u.pos(), pos, rl_dist( u.pos(), pos ), 1, 100 ) ) { + if( u.pos() != pos && !here.clear_path( u.pos(), pos, rl_dist( u.pos(), pos ), 1, 100 ) ) { continue; } add_map_items( pos ); @@ -1828,7 +1834,7 @@ void inventory_selector::draw_footer( const catacurses::window &w ) const } } -inventory_selector::inventory_selector( player &u, const inventory_selector_preset &preset ) +inventory_selector::inventory_selector( Character &u, const inventory_selector_preset &preset ) : u( u ) , preset( preset ) , ctxt( "INVENTORY" ) @@ -2125,7 +2131,7 @@ item_location inventory_pick_selector::execute() } } -inventory_multiselector::inventory_multiselector( player &p, +inventory_multiselector::inventory_multiselector( Character &p, const inventory_selector_preset &preset, const std::string &selection_column_title ) : inventory_selector( p, preset ), @@ -2147,7 +2153,7 @@ void inventory_multiselector::rearrange_columns( size_t client_width ) selection_col->set_visibility( !is_overflown( client_width ) ); } -inventory_compare_selector::inventory_compare_selector( player &p ) : +inventory_compare_selector::inventory_compare_selector( Character &p ) : inventory_multiselector( p, default_preset, _( "ITEMS TO COMPARE" ) ) {} std::pair inventory_compare_selector::execute() @@ -2218,7 +2224,7 @@ void inventory_compare_selector::toggle_entry( inventory_entry *entry ) } inventory_iuse_selector::inventory_iuse_selector( - player &p, + Character &p, const std::string &selector_title, const inventory_selector_preset &preset, const GetStats &get_st @@ -2326,7 +2332,7 @@ inventory_selector::stats inventory_iuse_selector::get_raw_stats() const return stats{{ stat{{ "", "", "", "" }}, stat{{ "", "", "", "" }} }}; } -inventory_drop_selector::inventory_drop_selector( player &p, +inventory_drop_selector::inventory_drop_selector( Character &p, const inventory_selector_preset &preset, const std::string &selection_column_title ) : inventory_multiselector( p, preset, selection_column_title ), max_chosen_count( std::numeric_limits::max() ) @@ -2423,7 +2429,7 @@ drop_locations inventory_drop_selector::execute() const auto filter_to_nonfavorite_and_nonworn = []( const inventory_entry & entry ) { return entry.is_item() && !entry.any_item()->is_favorite && - !g->u.is_worn( *entry.any_item() ); + !get_player_character().is_worn( *entry.any_item() ); }; const auto selected( get_active_column().get_entries( filter_to_nonfavorite_and_nonworn ) ); diff --git a/src/inventory_ui.h b/src/inventory_ui.h index e013973cf12e0..d253f7d479949 100644 --- a/src/inventory_ui.h +++ b/src/inventory_ui.h @@ -27,7 +27,6 @@ class Character; class item; -class player; class string_input_popup; struct tripoint; class ui_adaptor; @@ -336,7 +335,7 @@ class inventory_column /** Resets width to original (unchanged). */ virtual void reset_width( const std::vector &all_columns ); /** Returns next custom inventory letter. */ - int reassign_custom_invlets( const player &p, int min_invlet, int max_invlet ); + int reassign_custom_invlets( const Character &p, int min_invlet, int max_invlet ); /** Reorder entries, repopulate titles, adjust to the new height. */ virtual void prepare_paging( const std::string &filter = "" ); /** @@ -479,7 +478,7 @@ class selection_column : public inventory_column class inventory_selector { public: - inventory_selector( player &u, const inventory_selector_preset &preset = default_preset ); + inventory_selector( Character &u, const inventory_selector_preset &preset = default_preset ); virtual ~inventory_selector(); /** These functions add items from map / vehicles. */ void add_contained_items( item_location &container ); @@ -519,7 +518,7 @@ class inventory_selector bool keep_open = false; protected: - player &u; + Character &u; const inventory_selector_preset &preset; /** @@ -698,7 +697,7 @@ inventory_selector::stat display_stat( const std::string &caption, int cur_value class inventory_pick_selector : public inventory_selector { public: - inventory_pick_selector( player &p, + inventory_pick_selector( Character &p, const inventory_selector_preset &preset = default_preset ) : inventory_selector( p, preset ) {} @@ -708,7 +707,7 @@ class inventory_pick_selector : public inventory_selector class inventory_multiselector : public inventory_selector { public: - inventory_multiselector( player &p, const inventory_selector_preset &preset = default_preset, + inventory_multiselector( Character &p, const inventory_selector_preset &preset = default_preset, const std::string &selection_column_title = "" ); protected: void rearrange_columns( size_t client_width ) override; @@ -720,7 +719,7 @@ class inventory_multiselector : public inventory_selector class inventory_compare_selector : public inventory_multiselector { public: - inventory_compare_selector( player &p ); + inventory_compare_selector( Character &p ); std::pair execute(); protected: @@ -735,7 +734,7 @@ class inventory_iuse_selector : public inventory_multiselector { public: using GetStats = std::function & )>; - inventory_iuse_selector( player &p, + inventory_iuse_selector( Character &p, const std::string &selector_title, const inventory_selector_preset &preset = default_preset, const GetStats & = {} ); @@ -754,7 +753,7 @@ class inventory_iuse_selector : public inventory_multiselector class inventory_drop_selector : public inventory_multiselector { public: - inventory_drop_selector( player &p, + inventory_drop_selector( Character &p, const inventory_selector_preset &preset = default_preset, const std::string &selection_column_title = _( "ITEMS TO DROP" ) ); drop_locations execute(); diff --git a/src/kill_tracker.cpp b/src/kill_tracker.cpp index 5cee5f4cccd37..63748db738ee8 100644 --- a/src/kill_tracker.cpp +++ b/src/kill_tracker.cpp @@ -121,7 +121,7 @@ void kill_tracker::notify( const cata::event &e ) switch( e.type() ) { case event_type::character_kills_monster: { character_id killer = e.get( "killer" ); - if( killer != get_avatar().getID() ) { + if( killer != get_player_character().getID() ) { // TODO: add a kill counter for npcs? break; } @@ -131,7 +131,7 @@ void kill_tracker::notify( const cata::event &e ) } case event_type::character_kills_character: { character_id killer = e.get( "killer" ); - if( killer != get_avatar().getID() ) { + if( killer != get_player_character().getID() ) { break; } std::string victim_name = e.get( "victim_name" ); diff --git a/src/magic.cpp b/src/magic.cpp index 3147ea802946d..c87849df39e93 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -9,7 +9,6 @@ #include #include -#include "avatar.h" #include "calendar.h" #include "cata_utility.h" #include "catacharset.h" @@ -1419,7 +1418,7 @@ void known_magic::forget_spell( const spell_id &sp ) } add_msg( m_bad, _( "All knowledge of %s leaves you." ), sp->name ); // TODO: add parameter for owner of known_magic for this function - g->events().send( get_avatar().getID(), sp->id ); + g->events().send( get_player_character().getID(), sp->id ); spellbook.erase( sp ); } @@ -1563,8 +1562,8 @@ class spellcasting_callback : public uilist_callback int invlet = 0; invlet = popup_getkey( _( "Choose a new hotkey for this spell." ) ); if( inv_chars.valid( invlet ) ) { - const bool invlet_set = g->u.magic.set_invlet( known_spells[entnum]->id(), invlet, - reserved_invlets ); + const bool invlet_set = + get_player_character().magic.set_invlet( known_spells[entnum]->id(), invlet, reserved_invlets ); if( !invlet_set ) { popup( _( "Hotkey already used." ) ); } else { @@ -1573,7 +1572,7 @@ class spellcasting_callback : public uilist_callback } } else { popup( _( "Hotkey removed." ) ); - g->u.magic.rem_invlet( known_spells[entnum]->id() ); + get_player_character().magic.rem_invlet( known_spells[entnum]->id() ); } return true; } @@ -1687,7 +1686,7 @@ void spellcasting_callback::draw_spell_info( const spell &sp, const uilist *menu string_format( "%s: %d", _( "Max Level" ), sp.get_max_level() ) ); print_colored_text( w_menu, point( h_col1, line ), gray, gray, - sp.colorized_fail_percent( g->u ) ); + sp.colorized_fail_percent( get_player_character() ) ); print_colored_text( w_menu, point( h_col2, line++ ), gray, gray, string_format( "%s: %d", _( "Difficulty" ), sp.get_difficulty() ) ); @@ -1701,21 +1700,21 @@ void spellcasting_callback::draw_spell_info( const spell &sp, const uilist *menu line++; } - const bool cost_encumb = energy_cost_encumbered( sp, g->u ); + const bool cost_encumb = energy_cost_encumbered( sp, get_player_character() ); std::string cost_string = cost_encumb ? _( "Casting Cost (impeded)" ) : _( "Casting Cost" ); std::string energy_cur = sp.energy_source() == magic_energy_type::hp ? "" : - string_format( _( " (%s current)" ), sp.energy_cur_string( g->u ) ); - if( !sp.can_cast( g->u ) ) { + string_format( _( " (%s current)" ), sp.energy_cur_string( get_player_character() ) ); + if( !sp.can_cast( get_player_character() ) ) { cost_string = colorize( _( "Not Enough Energy" ), c_red ); energy_cur = ""; } print_colored_text( w_menu, point( h_col1, line++ ), gray, gray, string_format( "%s: %s %s%s", cost_string, - sp.energy_cost_string( g->u ), sp.energy_string(), energy_cur ) ); - const bool c_t_encumb = casting_time_encumbered( sp, g->u ); + sp.energy_cost_string( get_player_character() ), sp.energy_string(), energy_cur ) ); + const bool c_t_encumb = casting_time_encumbered( sp, get_player_character() ); print_colored_text( w_menu, point( h_col1, line++ ), gray, gray, colorize( string_format( "%s: %s", c_t_encumb ? _( "Casting Time (impeded)" ) : _( "Casting Time" ), - moves_to_string( sp.casting_time( g->u ) ) ), + moves_to_string( sp.casting_time( get_player_character() ) ) ), c_t_encumb ? c_red : c_light_gray ) ); if( line <= win_height * 3 / 4 ) { @@ -2159,7 +2158,7 @@ void spell_events::notify( const cata::event &e ) int learn_at_level = it->second; if( learn_at_level == slvl ) { std::string learn_spell_id = it->first; - g->u.magic.learn_spell( learn_spell_id, g->u ); + get_player_character().magic.learn_spell( learn_spell_id, get_player_character() ); spell_type spell_learned = spell_factory.obj( spell_id( learn_spell_id ) ); add_msg( _( "Your experience and knowledge in creating and manipulating magical energies to cast %s have opened your eyes to new possibilities, you can now cast %s." ), diff --git a/src/map.cpp b/src/map.cpp index cb4ffcf43187a..16b9b5cff676e 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -978,7 +978,7 @@ vehicle *map::veh_at_internal( const tripoint &p, int &part_num ) return const_cast( const_cast( this )->veh_at_internal( p, part_num ) ); } -void map::board_vehicle( const tripoint &pos, player *p ) +void map::board_vehicle( const tripoint &pos, Character *p ) { if( p == nullptr ) { debugmsg( "map::board_vehicle: null player" ); @@ -988,7 +988,9 @@ void map::board_vehicle( const tripoint &pos, player *p ) const cata::optional vp = veh_at( pos ).part_with_feature( VPFLAG_BOARDABLE, true ); if( !vp ) { - if( p->grab_point.x == 0 && p->grab_point.y == 0 ) { + avatar *player_character = p->as_avatar(); + if( player_character != nullptr && + player_character->grab_point.x == 0 && player_character->grab_point.y == 0 ) { debugmsg( "map::board_vehicle: vehicle not found" ); } return; diff --git a/src/map.h b/src/map.h index f559c940aebc7..ccb53bfa0fd6f 100644 --- a/src/map.h +++ b/src/map.h @@ -573,7 +573,7 @@ class map vehicle *veh_at_internal( const tripoint &p, int &part_num ); const vehicle *veh_at_internal( const tripoint &p, int &part_num ) const; // Put player on vehicle at x,y - void board_vehicle( const tripoint &p, player *pl ); + void board_vehicle( const tripoint &p, Character *pl ); // Remove given passenger from given vehicle part. // If dead_passenger, then null passenger is acceptable. void unboard_vehicle( const vpart_reference &, player *passenger, diff --git a/src/mondefense.cpp b/src/mondefense.cpp index b38dad3d0be35..cdaaafa3d690f 100644 --- a/src/mondefense.cpp +++ b/src/mondefense.cpp @@ -10,9 +10,9 @@ #include #include -#include "avatar.h" #include "ballistics.h" #include "bodypart.h" +#include "character.h" #include "creature.h" #include "damage.h" #include "dispersion.h" @@ -76,8 +76,9 @@ void mdefense::zapback( monster &m, Creature *const source, return; } - if( get_avatar().sees( source->pos() ) ) { - const auto msg_type = source == &get_avatar() ? m_bad : m_info; + + if( get_player_character().sees( source->pos() ) ) { + const auto msg_type = source->is_avatar() ? m_bad : m_info; add_msg( msg_type, _( "Striking the %1$s shocks %2$s!" ), m.name(), source->disp_name() ); } @@ -139,7 +140,7 @@ void mdefense::acidsplash( monster &m, Creature *const source, projectile_attack( prj, m.pos(), target, dispersion_sources{ 1200 }, &m ); } - if( get_avatar().sees( m.pos() ) ) { + if( get_player_character().sees( m.pos() ) ) { add_msg( m_warning, _( "Acid sprays out of %s as it is hit!" ), m.disp_name() ); } } diff --git a/src/monexamine.cpp b/src/monexamine.cpp index 81ebdd3976f62..9fd185b08dc67 100644 --- a/src/monexamine.cpp +++ b/src/monexamine.cpp @@ -99,6 +99,7 @@ bool monexamine::pet_menu( monster &z ) amenu.addentry( swap_pos, true, 's', _( "Swap positions" ) ); amenu.addentry( rename, true, 'e', _( "Rename" ) ); + Character &player_character = get_player_character(); if( z.has_effect( effect_has_bag ) ) { amenu.addentry( give_items, true, 'g', _( "Place items into bag" ) ); amenu.addentry( remove_bag, true, 'b', _( "Remove bag from %s" ), pet_name ); @@ -123,7 +124,7 @@ bool monexamine::pet_menu( monster &z ) if( z.has_effect( effect_tied ) ) { amenu.addentry( rope, true, 't', _( "Untie" ) ); } else if( !z.has_flag( MF_RIDEABLE_MECH ) ) { - std::vector rope_inv = g->u.items_with( []( const item & itm ) { + std::vector rope_inv = player_character.items_with( []( const item & itm ) { return itm.has_flag( "TIE_UP" ); } ); if( !rope_inv.empty() ) { @@ -151,7 +152,7 @@ bool monexamine::pet_menu( monster &z ) available = false; } if( available ) { - if( g->u.has_quality( qual_SHEAR, 1 ) ) { + if( player_character.has_quality( qual_SHEAR, 1 ) ) { amenu.addentry( shear, true, 'S', _( "Shear %s." ), pet_name ); } else { amenu.addentry( shear, false, 'S', _( "You cannot shear this animal without shears." ) ); @@ -159,29 +160,32 @@ bool monexamine::pet_menu( monster &z ) } } if( z.has_flag( MF_PET_MOUNTABLE ) && !z.has_effect( effect_monster_saddled ) && - g->u.has_item_with_flag( "TACK" ) && g->u.get_skill_level( skill_survival ) >= 1 ) { + player_character.has_item_with_flag( "TACK" ) && + player_character.get_skill_level( skill_survival ) >= 1 ) { amenu.addentry( attach_saddle, true, 'h', _( "Tack up %s" ), pet_name ); } else if( z.has_flag( MF_PET_MOUNTABLE ) && z.has_effect( effect_monster_saddled ) ) { amenu.addentry( remove_saddle, true, 'h', _( "Remove tack from %s" ), pet_name ); } else if( z.has_flag( MF_PET_MOUNTABLE ) && !z.has_effect( effect_monster_saddled ) && - g->u.has_item_with_flag( "TACK" ) && g->u.get_skill_level( skill_survival ) < 1 ) { + player_character.has_item_with_flag( "TACK" ) && + player_character.get_skill_level( skill_survival ) < 1 ) { amenu.addentry( remove_saddle, false, 'h', _( "You don't know how to saddle %s" ), pet_name ); } if( z.has_flag( MF_PAY_BOT ) ) { amenu.addentry( pay, true, 'f', _( "Manage your friendship with %s" ), pet_name ); } if( !z.has_flag( MF_RIDEABLE_MECH ) ) { - if( z.has_flag( MF_PET_MOUNTABLE ) && g->u.can_mount( z ) ) { + if( z.has_flag( MF_PET_MOUNTABLE ) && player_character.can_mount( z ) ) { amenu.addentry( mount, true, 'r', _( "Mount %s" ), pet_name ); } else if( !z.has_flag( MF_PET_MOUNTABLE ) ) { amenu.addentry( mount, false, 'r', _( "%s cannot be mounted" ), pet_name ); - } else if( z.get_size() <= g->u.get_size() ) { + } else if( z.get_size() <= player_character.get_size() ) { amenu.addentry( mount, false, 'r', _( "%s is too small to carry your weight" ), pet_name ); - } else if( g->u.get_skill_level( skill_survival ) < 1 ) { + } else if( player_character.get_skill_level( skill_survival ) < 1 ) { amenu.addentry( mount, false, 'r', _( "You have no knowledge of riding at all" ) ); - } else if( g->u.get_weight() >= z.get_weight() * z.get_mountable_weight_ratio() ) { + } else if( player_character.get_weight() >= z.get_weight() * z.get_mountable_weight_ratio() ) { amenu.addentry( mount, false, 'r', _( "You are too heavy to mount %s" ), pet_name ); - } else if( !z.has_effect( effect_monster_saddled ) && g->u.get_skill_level( skill_survival ) < 4 ) { + } else if( !z.has_effect( effect_monster_saddled ) && + player_character.get_skill_level( skill_survival ) < 4 ) { amenu.addentry( mount, false, 'r', _( "You are not skilled enough to ride without a saddle" ) ); } } else { @@ -195,16 +199,16 @@ bool monexamine::pet_menu( monster &z ) } amenu.addentry( check_bat, false, 'c', _( "%s battery level is %d%%" ), z.get_name(), static_cast( charge_percent ) ); - if( g->u.weapon.is_null() && z.battery_item ) { + if( player_character.weapon.is_null() && z.battery_item ) { amenu.addentry( mount, true, 'r', _( "Climb into the mech and take control" ) ); - } else if( !g->u.weapon.is_null() ) { + } else if( !player_character.weapon.is_null() ) { amenu.addentry( mount, false, 'r', _( "You cannot pilot the mech whilst wielding something" ) ); } else if( !z.battery_item ) { amenu.addentry( mount, false, 'r', _( "This mech has a dead battery and won't turn on" ) ); } if( z.battery_item ) { amenu.addentry( remove_bat, true, 'x', _( "Remove the mech's battery pack" ) ); - } else if( g->u.has_amount( z.type->mech_battery, 1 ) ) { + } else if( player_character.has_amount( z.type->mech_battery, 1 ) ) { amenu.addentry( insert_bat, true, 'x', _( "Insert a new battery pack" ) ); } else { amenu.addentry( insert_bat, false, 'x', _( "You need a %s to power this mech" ), type.nname( 1 ) ); @@ -283,17 +287,19 @@ bool monexamine::pet_menu( monster &z ) void monexamine::shear_animal( monster &z ) { - const int moves = to_moves( time_duration::from_minutes( 30 / g->u.max_quality( + Character &player_character = get_player_character(); + const int moves = to_moves( time_duration::from_minutes( 30 / player_character.max_quality( qual_SHEAR ) ) ); - g->u.assign_activity( activity_id( "ACT_SHEAR" ), moves, -1 ); - g->u.activity.coords.push_back( g->m.getabs( z.pos() ) ); + player_character.assign_activity( activity_id( "ACT_SHEAR" ), moves, -1 ); + player_character.activity.coords.push_back( get_map().getabs( z.pos() ) ); // pin the sheep in place if it isn't already if( !z.has_effect( effect_tied ) ) { z.add_effect( effect_tied, 1_turns, num_bp, true ); - g->u.activity.str_values.push_back( "temp_tie" ); + player_character.activity.str_values.push_back( "temp_tie" ); } - g->u.activity.targets.push_back( item_location( g->u, g->u.best_quality_item( qual_SHEAR ) ) ); + player_character.activity.targets.push_back( item_location( player_character, + player_character.best_quality_item( qual_SHEAR ) ) ); add_msg( _( "You start shearing the %s." ), z.get_name() ); } @@ -305,7 +311,7 @@ static item_location pet_armor_loc( monster &z ) z.get_volume() <= it.get_pet_armor_max_vol(); }; - return game_menus::inv::titled_filter_menu( filter, g->u, _( "Pet armor" ) ); + return game_menus::inv::titled_filter_menu( filter, get_avatar(), _( "Pet armor" ) ); } static item_location tack_loc() @@ -314,12 +320,12 @@ static item_location tack_loc() return it.has_flag( "TACK" ); }; - return game_menus::inv::titled_filter_menu( filter, g->u, _( "Tack" ) ); + return game_menus::inv::titled_filter_menu( filter, get_avatar(), _( "Tack" ) ); } void monexamine::remove_battery( monster &z ) { - g->m.add_item_or_charges( g->u.pos(), *z.battery_item ); + get_map().add_item_or_charges( get_player_character().pos(), *z.battery_item ); z.battery_item.reset(); } @@ -329,7 +335,8 @@ void monexamine::insert_battery( monster &z ) // already has a battery, shouldn't be called with one, but just incase. return; } - std::vector bat_inv = g->u.items_with( []( const item & itm ) { + Character &player_character = get_player_character(); + std::vector bat_inv = player_character.items_with( []( const item & itm ) { return itm.has_flag( "MECH_BAT" ); } ); if( bat_inv.empty() ) { @@ -351,24 +358,25 @@ void monexamine::insert_battery( monster &z ) return; } item *bat_item = bat_inv[index - 1]; - int item_pos = g->u.get_item_position( bat_item ); + int item_pos = player_character.get_item_position( bat_item ); if( item_pos != INT_MIN ) { z.battery_item = cata::make_value( *bat_item ); - g->u.i_rem( item_pos ); + player_character.i_rem( item_pos ); } } bool monexamine::mech_hack( monster &z ) { + Character &player_character = get_player_character(); itype_id card_type = itype_id_military; - if( g->u.has_amount( card_type, 1 ) ) { + if( player_character.has_amount( card_type, 1 ) ) { if( query_yn( _( "Swipe your ID card into the mech's security port?" ) ) ) { - g->u.mod_moves( -100 ); + player_character.mod_moves( -100 ); z.add_effect( effect_pet, 1_turns, num_bp, true ); z.friendly = -1; add_msg( m_good, _( "The %s whirs into life and opens its restraints to accept a pilot." ), z.get_name() ); - g->u.use_amount( card_type, 1 ); + player_character.use_amount( card_type, 1 ); return true; } } else { @@ -392,8 +400,9 @@ static int prompt_for_amount( const char *const msg, const int max ) bool monexamine::pay_bot( monster &z ) { + Character &player_character = get_player_character(); time_duration friend_time = z.get_effect_dur( effect_pet ); - const int charge_count = g->u.charges_of( itype_cash_card ); + const int charge_count = player_character.charges_of( itype_cash_card ); int amount = 0; uilist bot_menu; @@ -414,7 +423,7 @@ bool monexamine::pay_bot( monster &z ) "How much friendship do you get? Max: %d minutes.", charge_count / 10 ), charge_count / 10 ); if( amount > 0 ) { time_duration time_bought = time_duration::from_minutes( amount ); - g->u.use_charges( itype_cash_card, amount * 10 ); + player_character.use_charges( itype_cash_card, amount * 10 ); z.add_effect( effect_pet, time_bought ); z.add_effect( effect_paid, time_bought, num_bp, true ); z.friendly = -1; @@ -434,7 +443,7 @@ void monexamine::attach_or_remove_saddle( monster &z ) { if( z.has_effect( effect_monster_saddled ) ) { z.remove_effect( effect_monster_saddled ); - g->u.i_add( *z.tack_item ); + get_player_character().i_add( *z.tack_item ); z.tack_item.reset(); } else { item_location loc = tack_loc(); @@ -452,7 +461,7 @@ void monexamine::attach_or_remove_saddle( monster &z ) bool Character::can_mount( const monster &critter ) const { const auto &avoid = get_path_avoid(); - auto route = g->m.route( pos(), critter.pos(), get_pathfinding_settings(), avoid ); + auto route = get_map().route( pos(), critter.pos(), get_pathfinding_settings(), avoid ); if( route.empty() ) { return false; @@ -466,23 +475,24 @@ bool Character::can_mount( const monster &critter ) const void monexamine::mount_pet( monster &z ) { - g->u.mount_creature( z ); + get_player_character().mount_creature( z ); } void monexamine::swap( monster &z ) { std::string pet_name = z.get_name(); - g->u.moves -= 150; + Character &player_character = get_player_character(); + player_character.moves -= 150; ///\EFFECT_STR increases chance to successfully swap positions with your pet ///\EFFECT_DEX increases chance to successfully swap positions with your pet - if( !one_in( ( g->u.str_cur + g->u.dex_cur ) / 6 ) ) { + if( !one_in( ( player_character.str_cur + player_character.dex_cur ) / 6 ) ) { bool t = z.has_effect( effect_tied ); if( t ) { z.remove_effect( effect_tied ); } - g->swap_critters( g->u, z ); + g->swap_critters( player_character, z ); if( t ) { z.add_effect( effect_tied, 1_turns, num_bp, true ); @@ -496,17 +506,18 @@ void monexamine::swap( monster &z ) void monexamine::push( monster &z ) { std::string pet_name = z.get_name(); - g->u.moves -= 30; + Character &player_character = get_player_character(); + player_character.moves -= 30; ///\EFFECT_STR increases chance to successfully push your pet - if( !one_in( g->u.str_cur ) ) { + if( !one_in( player_character.str_cur ) ) { add_msg( _( "You pushed the %s." ), pet_name ); } else { add_msg( _( "You pushed the %s, but it resisted." ), pet_name ); return; } - point delta( z.posx() - g->u.posx(), z.posy() - g->u.posy() ); + point delta( z.posx() - player_character.posx(), z.posy() - player_character.posy() ); z.move_to( tripoint( z.posx() + delta.x, z.posy() + delta.y, z.posz() ) ); } @@ -529,7 +540,9 @@ void monexamine::attach_bag_to( monster &z ) return it.is_armor() && it.get_total_capacity() > 0_ml; }; - item_location loc = game_menus::inv::titled_filter_menu( filter, g->u, _( "Bag item" ) ); + avatar &player_character = get_avatar(); + item_location loc = game_menus::inv::titled_filter_menu( filter, player_character, + _( "Bag item" ) ); if( !loc ) { add_msg( _( "Never mind." ) ); @@ -539,11 +552,11 @@ void monexamine::attach_bag_to( monster &z ) item &it = *loc; z.storage_item = cata::make_value( it ); add_msg( _( "You mount the %1$s on your %2$s." ), it.display_name(), pet_name ); - g->u.i_rem( &it ); + player_character.i_rem( &it ); z.add_effect( effect_has_bag, 1_turns, num_bp, true ); // Update encumbrance in case we were wearing it - g->u.flag_encumbrance(); - g->u.moves -= 200; + player_character.flag_encumbrance(); + player_character.moves -= 200; } void monexamine::remove_bag_from( monster &z ) @@ -553,10 +566,11 @@ void monexamine::remove_bag_from( monster &z ) if( !z.inv.empty() ) { dump_items( z ); } - g->m.add_item_or_charges( g->u.pos(), *z.storage_item ); + Character &player_character = get_player_character(); + get_map().add_item_or_charges( player_character.pos(), *z.storage_item ); add_msg( _( "You remove the %1$s from %2$s." ), z.storage_item->display_name(), pet_name ); z.storage_item.reset(); - g->u.moves -= 200; + player_character.moves -= 200; } else { add_msg( m_bad, _( "Your %1$s doesn't have a bag!" ), pet_name ); } @@ -566,12 +580,14 @@ void monexamine::remove_bag_from( monster &z ) void monexamine::dump_items( monster &z ) { std::string pet_name = z.get_name(); + Character &player_character = get_player_character(); + map &here = get_map(); for( auto &it : z.inv ) { - g->m.add_item_or_charges( g->u.pos(), it ); + here.add_item_or_charges( player_character.pos(), it ); } z.inv.clear(); add_msg( _( "You dump the contents of the %s's bag on the ground." ), pet_name ); - g->u.moves -= 200; + player_character.moves -= 200; } bool monexamine::give_items_to( monster &z ) @@ -586,7 +602,8 @@ bool monexamine::give_items_to( monster &z ) units::mass max_weight = z.weight_capacity() - z.get_carried_weight(); units::volume max_volume = storage.get_total_capacity() - z.get_carried_volume(); - drop_locations items = game_menus::inv::multidrop( g->u ); + avatar &player_character = get_avatar(); + drop_locations items = game_menus::inv::multidrop( player_character ); drop_locations to_move; for( const drop_location &itq : items ) { const item &it = *itq.first; @@ -605,7 +622,7 @@ bool monexamine::give_items_to( monster &z ) } } z.add_effect( effect_controlled, 5_turns ); - g->u.drop( to_move, z.pos(), true ); + player_character.drop( to_move, z.pos(), true ); return false; } @@ -635,7 +652,7 @@ bool monexamine::add_armor( monster &z ) loc.remove_item(); z.add_effect( effect_monster_armor, 1_turns, num_bp, true ); // TODO: armoring a horse takes a lot longer than 2 seconds. This should be a long action. - g->u.moves -= 200; + get_player_character().moves -= 200; return true; } @@ -650,12 +667,12 @@ void monexamine::remove_armor( monster &z ) std::string pet_name = z.get_name(); if( z.armor_item ) { z.armor_item->erase_var( "pet_armor" ); - g->m.add_item_or_charges( z.pos(), *z.armor_item ); + get_map().add_item_or_charges( z.pos(), *z.armor_item ); add_msg( pgettext( "pet armor", "You remove the %1$s from %2$s." ), z.armor_item->display_name(), pet_name ); z.armor_item.reset(); // TODO: removing armor from a horse takes a lot longer than 2 seconds. This should be a long action. - g->u.moves -= 200; + get_player_character().moves -= 200; } else { add_msg( m_bad, _( "Your %1$s isn't wearing armor!" ), pet_name ); } @@ -665,34 +682,38 @@ void monexamine::remove_armor( monster &z ) void monexamine::play_with( monster &z ) { std::string pet_name = z.get_name(); - g->u.assign_activity( ACT_PLAY_WITH_PET, rng( 50, 125 ) * 100 ); - g->u.activity.str_values.push_back( pet_name ); + Character &player_character = get_player_character(); + player_character.assign_activity( ACT_PLAY_WITH_PET, rng( 50, 125 ) * 100 ); + player_character.activity.str_values.push_back( pet_name ); } void monexamine::kill_zslave( monster &z ) { - z.apply_damage( &g->u, bodypart_id( "torso" ), 100 ); // damage the monster (and its corpse) - z.die( &g->u ); // and make sure it's really dead + avatar &player_character = get_avatar(); + z.apply_damage( &player_character, bodypart_id( "torso" ), + 100 ); // damage the monster (and its corpse) + z.die( &player_character ); // and make sure it's really dead - g->u.moves -= 150; + player_character.moves -= 150; if( !one_in( 3 ) ) { - g->u.add_msg_if_player( _( "You tear out the pheromone ball from the zombie slave." ) ); + player_character.add_msg_if_player( _( "You tear out the pheromone ball from the zombie slave." ) ); item ball( "pheromone", 0 ); - iuse::pheromone( &g->u, &ball, true, g->u.pos() ); + iuse::pheromone( &player_character, &ball, true, player_character.pos() ); } } void monexamine::tie_or_untie( monster &z ) { + Character &player_character = get_player_character(); if( z.has_effect( effect_tied ) ) { z.remove_effect( effect_tied ); if( z.tied_item ) { - g->u.i_add( *z.tied_item ); + player_character.i_add( *z.tied_item ); z.tied_item.reset(); } } else { - std::vector rope_inv = g->u.items_with( []( const item & itm ) { + std::vector rope_inv = player_character.items_with( []( const item & itm ) { return itm.has_flag( "TIE_UP" ); } ); if( rope_inv.empty() ) { @@ -713,10 +734,10 @@ void monexamine::tie_or_untie( monster &z ) return; } item *rope_item = rope_inv[index - 1]; - int item_pos = g->u.get_item_position( rope_item ); + int item_pos = player_character.get_item_position( rope_item ); if( item_pos != INT_MIN ) { z.tied_item = cata::make_value( *rope_item ); - g->u.i_rem( item_pos ); + player_character.i_rem( item_pos ); z.add_effect( effect_tied, 1_turns, num_bp, true ); } } @@ -732,13 +753,14 @@ void monexamine::milk_source( monster &source_mon ) } if( milkable_ammo->second > 0 ) { const int moves = to_moves( time_duration::from_minutes( milkable_ammo->second / 2 ) ); - g->u.assign_activity( ACT_MILK, moves, -1 ); - g->u.activity.coords.push_back( g->m.getabs( source_mon.pos() ) ); + Character &player_character = get_player_character(); + player_character.assign_activity( ACT_MILK, moves, -1 ); + player_character.activity.coords.push_back( get_map().getabs( source_mon.pos() ) ); // pin the cow in place if it isn't already bool temp_tie = !source_mon.has_effect( effect_tied ); if( temp_tie ) { source_mon.add_effect( effect_tied, 1_turns, num_bp, true ); - g->u.activity.str_values.push_back( "temp_tie" ); + player_character.activity.str_values.push_back( "temp_tie" ); } add_msg( _( "You milk the %s." ), source_mon.get_name() ); } else { diff --git a/src/mutation.cpp b/src/mutation.cpp index 137b6b0158bb4..d2b134efc4cb2 100644 --- a/src/mutation.cpp +++ b/src/mutation.cpp @@ -402,7 +402,7 @@ void Character::mutation_effect( const trait_id &mut ) _( "Your %s is pushed off!" ), _( "'s %s is pushed off!" ), armor.tname() ); - g->m.add_item_or_charges( pos(), armor ); + get_map().add_item_or_charges( pos(), armor ); } return true; } ); @@ -608,7 +608,7 @@ void Character::activate_mutation( const trait_id &mut ) } if( mut == trait_WEB_WEAVER ) { - g->m.add_field( pos(), fd_web, 1 ); + get_map().add_field( pos(), fd_web, 1 ); add_msg_if_player( _( "You start spinning web with your spinnerets!" ) ); } else if( mut == trait_BURROW ) { tdata.powered = false; @@ -668,8 +668,9 @@ void Character::activate_mutation( const trait_id &mut ) } // Check for adjacent trees. bool adjacent_tree = false; - for( const tripoint &p2 : g->m.points_in_radius( pos(), 1 ) ) { - if( g->m.has_flag( "TREE", p2 ) ) { + map &here = get_map(); + for( const tripoint &p2 : here.points_in_radius( pos(), 1 ) ) { + if( here.has_flag( "TREE", p2 ) ) { adjacent_tree = true; } } @@ -718,7 +719,7 @@ void Character::activate_mutation( const trait_id &mut ) return; } else if( !mdata.ranged_mutation.is_empty() ) { add_msg_if_player( mdata.ranged_mutation_message() ); - avatar_action::fire_ranged_mutation( g->u, item( mdata.ranged_mutation ) ); + avatar_action::fire_ranged_mutation( *this, item( mdata.ranged_mutation ) ); tdata.powered = false; return; } @@ -1431,7 +1432,7 @@ static mutagen_rejection try_reject_mutagen( Character &guy, const item &it, boo if( guy.has_trait( trait_M_SPORES ) || guy.has_trait( trait_M_FERTILE ) || guy.has_trait( trait_M_BLOSSOMS ) || guy.has_trait( trait_M_BLOOM ) ) { guy.add_msg_if_player( m_good, _( "We decontaminate it with spores." ) ); - g->m.ter_set( guy.pos(), t_fungus ); + get_map().ter_set( guy.pos(), t_fungus ); if( guy.is_avatar() ) { g->memorial().add( pgettext( "memorial_male", "Destroyed a harmful invader." ), diff --git a/src/npctalk.cpp b/src/npctalk.cpp index dc02ddef94c2e..ec0a479a66436 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -138,7 +138,7 @@ std::string talk_trial::name() const /** Time (in turns) and cost (in cent) for training: */ time_duration calc_skill_training_time( const npc &p, const skill_id &skill ) { - return 1_minutes + 30_seconds * g->u.get_skill_level( skill ) - + return 1_minutes + 30_seconds * get_player_character().get_skill_level( skill ) - 1_seconds * p.get_skill_level( skill ); } @@ -340,7 +340,7 @@ static void npc_temp_orders_menu( const std::vector &npc_list ) static void tell_veh_stop_following() { - for( wrapped_vehicle &veh : g->m.get_vehicles() ) { + for( wrapped_vehicle &veh : get_map().get_vehicles() ) { vehicle *v = veh.v; if( v->has_engine_type( fuel_type_animal, false ) && v->is_owned_by( g->u ) ) { v->is_following = false; @@ -351,7 +351,7 @@ static void tell_veh_stop_following() static void assign_veh_to_follow() { - for( wrapped_vehicle &veh : g->m.get_vehicles() ) { + for( wrapped_vehicle &veh : get_map().get_vehicles() ) { vehicle *v = veh.v; if( v->has_engine_type( fuel_type_animal, false ) && v->is_owned_by( g->u ) ) { v->activate_animal_follow(); @@ -361,7 +361,7 @@ static void assign_veh_to_follow() static void tell_magic_veh_to_follow() { - for( wrapped_vehicle &veh : g->m.get_vehicles() ) { + for( wrapped_vehicle &veh : get_map().get_vehicles() ) { vehicle *v = veh.v; if( v->magic ) { for( const vpart_reference &vp : v->get_all_parts() ) { @@ -377,7 +377,7 @@ static void tell_magic_veh_to_follow() static void tell_magic_veh_stop_following() { - for( wrapped_vehicle &veh : g->m.get_vehicles() ) { + for( wrapped_vehicle &veh : get_map().get_vehicles() ) { vehicle *v = veh.v; if( v->magic ) { for( const vpart_reference &vp : v->get_all_parts() ) { @@ -422,7 +422,7 @@ void game::chat() std::vector following_vehicles; std::vector magic_vehicles; std::vector magic_following_vehicles; - for( auto &veh : g->m.get_vehicles() ) { + for( auto &veh : get_map().get_vehicles() ) { auto &v = veh.v; if( v->has_engine_type( fuel_type_animal, false ) && v->is_owned_by( g->u ) ) { animal_vehicles.push_back( v ); @@ -627,8 +627,9 @@ void game::chat() void npc::handle_sound( const sounds::sound_t spriority, const std::string &description, int heard_volume, const tripoint &spos ) { - const tripoint s_abs_pos = g->m.getabs( spos ); - const tripoint my_abs_pos = g->m.getabs( pos() ); + const map &here = get_map(); + const tripoint s_abs_pos = here.getabs( spos ); + const tripoint my_abs_pos = here.getabs( pos() ); add_msg( m_debug, "%s heard '%s', priority %d at volume %d from %d:%d, my pos %d:%d", disp_name(), description, static_cast( spriority ), heard_volume, @@ -2363,7 +2364,7 @@ void talk_effect_fun_t::set_add_mission( const std::string &mission_id ) function = [mission_id]( const dialogue & d ) { npc &p = *d.beta; mission *miss = mission::reserve_new( mission_type_id( mission_id ), p.getID() ); - miss->assign( g->u ); + miss->assign( get_avatar() ); p.chatbin.missions_assigned.push_back( miss ); }; } diff --git a/src/overmapbuffer.cpp b/src/overmapbuffer.cpp index 209ecdd9b7778..d48aa6cfb6225 100644 --- a/src/overmapbuffer.cpp +++ b/src/overmapbuffer.cpp @@ -7,10 +7,10 @@ #include #include -#include "avatar.h" #include "basecamp.h" #include "calendar.h" #include "cata_utility.h" +#include "character.h" #include "character_id.h" #include "color.h" #include "common_types.h" @@ -482,7 +482,7 @@ void overmapbuffer::process_mongroups() { // arbitrary radius to include nearby overmaps (aside from the current one) const auto radius = MAPSIZE * 2; - const auto center = g->u.global_sm_location(); + const auto center = get_player_character().global_sm_location(); for( auto &om : get_overmaps_near( center, radius ) ) { om->process_mongroups(); } @@ -492,7 +492,7 @@ void overmapbuffer::move_hordes() { // arbitrary radius to include nearby overmaps (aside from the current one) const auto radius = MAPSIZE * 2; - const auto center = g->u.global_sm_location(); + const auto center = get_player_character().global_sm_location(); for( auto &om : get_overmaps_near( center, radius ) ) { om->move_hordes(); } @@ -564,7 +564,7 @@ void overmapbuffer::set_scent( const tripoint &loc, int strength ) void overmapbuffer::move_vehicle( vehicle *veh, const point &old_msp ) { - const point new_msp = g->m.getabs( veh->global_pos3().xy() ); + const point new_msp = get_map().getabs( veh->global_pos3().xy() ); const point old_omt = ms_to_omt_copy( old_msp ); const point new_omt = ms_to_omt_copy( new_msp ); const overmap_with_local_coords old_om_loc = get_om_global( old_omt ); @@ -592,14 +592,14 @@ void overmapbuffer::remove_camp( const basecamp &camp ) void overmapbuffer::remove_vehicle( const vehicle *veh ) { - const point omt = ms_to_omt_copy( g->m.getabs( veh->global_pos3().xy() ) ); + const point omt = ms_to_omt_copy( get_map().getabs( veh->global_pos3().xy() ) ); const overmap_with_local_coords om_loc = get_om_global( omt ); om_loc.om->vehicles.erase( veh->om_id ); } void overmapbuffer::add_vehicle( vehicle *veh ) { - const point abs_pos = g->m.getabs( veh->global_pos3().xy() ); + const point abs_pos = get_map().getabs( veh->global_pos3().xy() ); const point omt = ms_to_omt_copy( abs_pos ); const overmap_with_local_coords om_loc = get_om_global( omt ); int id = om_loc.om->vehicles.size() + 1; @@ -1073,11 +1073,11 @@ shared_ptr_fast overmapbuffer::remove_npc( const character_id &id ) std::vector> overmapbuffer::get_npcs_near_player( int radius ) { - tripoint plpos = g->u.global_omt_location(); + tripoint plpos = get_player_character().global_omt_location(); // get_npcs_near needs submap coordinates omt_to_sm( plpos.x, plpos.y ); // INT_MIN is a (a bit ugly) way to inform get_npcs_near not to filter by z-level - const int zpos = g->m.has_zlevels() ? INT_MIN : plpos.z; + const int zpos = get_map().has_zlevels() ? INT_MIN : plpos.z; return get_npcs_near( tripoint( plpos.xy(), zpos ), radius ); } @@ -1179,7 +1179,7 @@ static radio_tower_reference create_radio_tower_reference( const overmap &om, ra radio_tower_reference overmapbuffer::find_radio_station( const int frequency ) { - const auto center = g->u.global_sm_location(); + const auto center = get_player_character().global_sm_location(); for( auto &om : get_overmaps_near( center, RADIO_MAX_STRENGTH ) ) { for( auto &tower : om->radios ) { const auto rref = create_radio_tower_reference( *om, tower, center ); @@ -1194,7 +1194,7 @@ radio_tower_reference overmapbuffer::find_radio_station( const int frequency ) std::vector overmapbuffer::find_all_radio_stations() { std::vector result; - const auto center = g->u.global_sm_location(); + const auto center = get_player_character().global_sm_location(); // perceived signal strength is distance (in submaps) - signal strength, so towers // further than RADIO_MAX_STRENGTH submaps away can never be received at all. const int radius = RADIO_MAX_STRENGTH; @@ -1370,9 +1370,10 @@ void overmapbuffer::spawn_monster( const tripoint &p ) assert( ms.x >= 0 && ms.x < SEEX ); assert( ms.y >= 0 && ms.y < SEEX ); ms += sm_to_ms_copy( p.xy() ); + const map &here = get_map(); // The monster position must be local to the main map when added to the game - const tripoint local = tripoint( g->m.getlocal( ms ), p.z ); - assert( g->m.inbounds( local ) ); + const tripoint local = tripoint( here.getlocal( ms ), p.z ); + assert( here.inbounds( local ) ); monster *const placed = g->place_critter_at( make_shared_fast( this_monster ), local ); if( placed ) { @@ -1385,7 +1386,7 @@ void overmapbuffer::spawn_monster( const tripoint &p ) void overmapbuffer::despawn_monster( const monster &critter ) { // Get absolute coordinates of the monster in map squares, translate to submap position - tripoint sm = ms_to_sm_copy( g->m.getabs( critter.pos() ) ); + tripoint sm = ms_to_sm_copy( get_map().getabs( critter.pos() ) ); // Get the overmap coordinates and get the overmap, sm is now local to that overmap const point omp = sm_to_om_remain( sm.x, sm.y ); overmap &om = get( omp ); diff --git a/src/pickup.cpp b/src/pickup.cpp index c143686030031..417b46006f33f 100644 --- a/src/pickup.cpp +++ b/src/pickup.cpp @@ -140,7 +140,7 @@ static pickup_answer handle_problematic_pickup( const item &it, bool &offered_sw return CANCEL; } - player &u = g->u; + Character &u = get_player_character(); uilist amenu; @@ -175,7 +175,7 @@ static pickup_answer handle_problematic_pickup( const item &it, bool &offered_sw bool Pickup::query_thief() { - player &u = g->u; + Character &u = get_player_character(); const bool force_uc = get_option( "FORCE_CAPITAL_YN" ); const auto &allow_key = force_uc ? input_context::disallow_lower_case : input_context::allow_all_keys; @@ -219,7 +219,7 @@ bool Pickup::query_thief() bool pick_one_up( item_location &loc, int quantity, bool &got_water, bool &offered_swap, PickupMap &mapPickup, bool autopickup ) { - player &u = g->u; + player &u = get_avatar(); int moves_taken = 100; bool picked_up = false; pickup_answer option = CANCEL; @@ -235,7 +235,7 @@ bool pick_one_up( item_location &loc, int quantity, bool &got_water, bool &offer const auto wield_check = u.can_wield( newit ); - if( !newit.is_owned_by( g->u, true ) ) { + if( !newit.is_owned_by( u, true ) ) { // Has the player given input on if stealing is ok? if( u.get_value( "THIEF_MODE" ) == "THIEF_ASK" ) { Pickup::query_thief(); @@ -363,7 +363,7 @@ bool pick_one_up( item_location &loc, int quantity, bool &got_water, bool &offer } else { loc.remove_item(); } - g->u.moves -= moves_taken; + u.moves -= moves_taken; } return picked_up || !did_prompt; @@ -416,7 +416,8 @@ void Pickup::pick_up( const tripoint &p, int min, from_where get_items_from ) { int cargo_part = -1; - const optional_vpart_position vp = g->m.veh_at( p ); + map &local = get_map(); + const optional_vpart_position vp = local.veh_at( p ); vehicle *const veh = veh_pointer_or_null( vp ); bool from_vehicle = false; @@ -424,7 +425,7 @@ void Pickup::pick_up( const tripoint &p, int min, from_where get_items_from ) if( veh != nullptr && get_items_from == prompt ) { const cata::optional carg = vp.part_with_feature( "CARGO", false ); const bool veh_has_items = carg && !veh->get_items( carg->part_index() ).empty(); - const bool map_has_items = g->m.has_items( p ); + const bool map_has_items = local.has_items( p ); if( veh_has_items && map_has_items ) { uilist amenu( _( "Get items from where?" ), { _( "Get items from vehicle cargo" ), _( "Get items on the ground" ) } ); if( amenu.ret == UILIST_CANCEL ) { @@ -441,20 +442,20 @@ void Pickup::pick_up( const tripoint &p, int min, from_where get_items_from ) from_vehicle = cargo_part >= 0; } else { // Nothing to change, default is to pick from ground anyway. - if( g->m.has_flag( "SEALED", p ) ) { + if( local.has_flag( "SEALED", p ) ) { return; } } } if( !from_vehicle ) { - bool isEmpty = ( g->m.i_at( p ).empty() ); + bool isEmpty = ( local.i_at( p ).empty() ); // Hide the pickup window if this is a toilet and there's nothing here // but non-frozen water. - if( ( !isEmpty ) && g->m.furn( p ) == f_toilet ) { + if( ( !isEmpty ) && local.furn( p ) == f_toilet ) { isEmpty = true; - for( const item &maybe_water : g->m.i_at( p ) ) { + for( const item &maybe_water : local.i_at( p ) ) { if( maybe_water.typeId() != itype_water || maybe_water.is_frozen_liquid() ) { isEmpty = false; break; @@ -475,7 +476,7 @@ void Pickup::pick_up( const tripoint &p, int min, from_where get_items_from ) here.push_back( it ); } } else { - map_stack mapitems = g->m.i_at( p ); + map_stack mapitems = local.i_at( p ); for( item_stack::iterator it = mapitems.begin(); it != mapitems.end(); ++it ) { here.push_back( it ); } @@ -498,7 +499,7 @@ void Pickup::pick_up( const tripoint &p, int min, from_where get_items_from ) // Bail out if this square cannot be auto-picked-up if( g->check_zone( zone_type_id( "NO_AUTO_PICKUP" ), p ) ) { return; - } else if( g->m.has_flag( "SEALED", p ) ) { + } else if( local.has_flag( "SEALED", p ) ) { return; } } diff --git a/src/pixel_minimap.cpp b/src/pixel_minimap.cpp index e48725537c7d4..6fde954b06de6 100644 --- a/src/pixel_minimap.cpp +++ b/src/pixel_minimap.cpp @@ -14,7 +14,6 @@ #include #include -#include "avatar.h" #include "cata_utility.h" #include "character.h" #include "color.h" @@ -101,7 +100,7 @@ SDL_Color get_critter_color( Creature *critter, int flicker, int mixture ) if( const monster *m = dynamic_cast( critter ) ) { //faction status (attacking or tracking) determines if red highlights get applied to creature - const monster_attitude matt = m->attitude( &get_avatar() ); + const monster_attitude matt = m->attitude( &get_player_character() ); if( MATT_ATTACK == matt || MATT_FOLLOW == matt ) { const SDL_Color red_pixel = SDL_Color{ 0xFF, 0x0, 0x0, 0xFF }; @@ -296,7 +295,7 @@ void pixel_minimap::update_cache_at( const tripoint &sm_pos ) { const map &here = get_map(); const level_cache &access_cache = here.access_cache( sm_pos.z ); - const bool nv_goggle = get_avatar().get_vision_modes()[NV_GOGGLES]; + const bool nv_goggle = get_player_character().get_vision_modes()[NV_GOGGLES]; submap_cache &cache_item = get_cache_at( here.get_abs_sub() + sm_pos ); const tripoint ms_pos = sm_to_ms_copy( sm_pos ); @@ -514,7 +513,7 @@ void pixel_minimap::render_critters( const tripoint ¢er ) const auto critter = g->critter_at( p, true ); - if( critter == nullptr || !get_avatar().sees( *critter ) ) { + if( critter == nullptr || !get_player_character().sees( *critter ) ) { continue; } diff --git a/src/sounds.cpp b/src/sounds.cpp index 0d48fc898703e..41af771d22db3 100644 --- a/src/sounds.cpp +++ b/src/sounds.cpp @@ -11,9 +11,9 @@ #include #include -#include "avatar.h" #include "bodypart.h" #include "calendar.h" +#include "character.h" #include "coordinate_conversions.h" #include "creature.h" #include "debug.h" @@ -647,7 +647,7 @@ int sfx::set_channel_volume( channel channel, int volume ) void sfx::do_vehicle_engine_sfx() { static const channel ch = channel::interior_engine_sound; - const avatar &player_character = get_avatar(); + const Character &player_character = get_player_character(); if( !player_character.in_vehicle ) { fade_audio_channel( ch, 300 ); add_msg( m_debug, "STOP interior_engine_sound, OUT OF CAR" ); @@ -768,7 +768,7 @@ void sfx::do_vehicle_exterior_engine_sfx() { static const channel ch = channel::exterior_engine_sound; static const int ch_int = static_cast( ch ); - const avatar &player_character = get_avatar(); + const Character &player_character = get_player_character(); // early bail-outs for efficiency if( player_character.in_vehicle ) { fade_audio_channel( ch, 300 ); @@ -855,7 +855,7 @@ void sfx::do_vehicle_exterior_engine_sfx() void sfx::do_ambient() { - const avatar &player_character = get_avatar(); + const Character &player_character = get_player_character(); if( player_character.in_sleep_state() && !audio_muted ) { fade_audio_channel( channel::any, 300 ); audio_muted = true; @@ -986,7 +986,7 @@ void sfx::generate_gun_sound( const player &source_arg, const item &firing ) int angle = 0; int distance = 0; std::string selected_sound; - const avatar &player_character = get_avatar(); + const Character &player_character = get_player_character(); // this does not mean p == avatar (it could be a vehicle turret) if( player_character.pos() == source ) { selected_sound = "fire_gun"; @@ -1184,7 +1184,7 @@ void sfx::do_player_death_hurt( const player &target, bool death ) void sfx::do_danger_music() { - avatar &player_character = get_avatar(); + Character &player_character = get_player_character(); if( player_character.in_sleep_state() && !audio_muted ) { fade_audio_channel( channel::any, 100 ); audio_muted = true; @@ -1235,7 +1235,7 @@ void sfx::do_danger_music() void sfx::do_fatigue() { - avatar &player_character = get_avatar(); + Character &player_character = get_player_character(); /*15: Stamina 75% 16: Stamina 50% 17: Stamina 25%*/ @@ -1315,7 +1315,7 @@ void sfx::do_footstep() end_sfx_timestamp = std::chrono::high_resolution_clock::now(); sfx_time = end_sfx_timestamp - start_sfx_timestamp; if( std::chrono::duration_cast ( sfx_time ).count() > 400 ) { - const avatar &player_character = get_avatar(); + const Character &player_character = get_player_character(); int heard_volume = sfx::get_heard_volume( player_character.pos() ); const auto terrain = get_map().ter( player_character.pos() ).id(); static const std::set grass = { @@ -1446,7 +1446,7 @@ void sfx::do_footstep() void sfx::do_obstacle( const std::string &obst ) { - int heard_volume = sfx::get_heard_volume( get_avatar().pos() ); + int heard_volume = sfx::get_heard_volume( get_player_character().pos() ); if( sfx::has_variant_sound( "plmove", obst ) ) { play_variant_sound( "plmove", obst, heard_volume, 0, 0.8, 1.2 ); } else if( ter_str_id( obst ).is_valid() && @@ -1460,7 +1460,7 @@ void sfx::do_obstacle( const std::string &obst ) void sfx::play_activity_sound( const std::string &id, const std::string &variant, int volume ) { - avatar &player_character = get_avatar(); + Character &player_character = get_player_character(); if( act != player_character.activity.id() ) { act = player_character.activity.id(); play_ambient_variant_sound( id, variant, volume, channel::player_activities, 0 ); @@ -1525,7 +1525,7 @@ void sfx::do_obstacle( const std::string & ) { } /*@{*/ int sfx::get_heard_volume( const tripoint &source ) { - int distance = sound_distance( get_avatar().pos(), source ); + int distance = sound_distance( get_player_character().pos(), source ); // fract = -100 / 24 const float fract = -4.166666; int heard_volume = fract * distance - 1 + 100; @@ -1538,7 +1538,7 @@ int sfx::get_heard_volume( const tripoint &source ) int sfx::get_heard_angle( const tripoint &source ) { - int angle = coord_to_angle( get_avatar().pos(), source ) + 90; + int angle = coord_to_angle( get_player_character().pos(), source ) + 90; //add_msg(m_warning, "angle: %i", angle); return ( angle ); } diff --git a/src/turret.cpp b/src/turret.cpp index 8ecd3c4463af7..dfe6451c58f28 100644 --- a/src/turret.cpp +++ b/src/turret.cpp @@ -291,17 +291,21 @@ void turret_data::post_fire( player &p, int shots ) veh->drain( fuel_type_battery, mode->get_gun_ups_drain() * shots ); } -int turret_data::fire( player &p, const tripoint &target ) +int turret_data::fire( Character &c, const tripoint &target ) { if( !veh || !part ) { return 0; } int shots = 0; auto mode = base()->gun_current_mode(); + player *player_character = c.as_player(); + if( player_character == nullptr ) { + return 0; + } - prepare_fire( p ); - shots = p.fire_gun( target, mode.qty, *mode ); - post_fire( p, shots ); + prepare_fire( *player_character ); + shots = player_character->fire_gun( target, mode.qty, *mode ); + post_fire( *player_character, shots ); return shots; } diff --git a/src/vehicle.h b/src/vehicle.h index 8b7f5e828454c..52f4dbdd9a512 100644 --- a/src/vehicle.h +++ b/src/vehicle.h @@ -537,7 +537,7 @@ class turret_data * @param target coordinates that will be fired on. * @return the number of shots actually fired (may be zero). */ - int fire( player &p, const tripoint &target ); + int fire( Character &c, const tripoint &target ); bool can_reload() const; bool can_unload() const; diff --git a/src/weather.cpp b/src/weather.cpp index ac1cea97a9864..882859210654e 100644 --- a/src/weather.cpp +++ b/src/weather.cpp @@ -63,7 +63,7 @@ weather_manager &get_weather() static bool is_player_outside() { - return g->m.is_outside( point( g->u.posx(), g->u.posy() ) ) && g->get_levz() >= 0; + return get_map().is_outside( point( g->u.posx(), g->u.posy() ) ) && g->get_levz() >= 0; } static constexpr int THUNDER_CHANCE = 50; @@ -331,8 +331,9 @@ double trap::funnel_turns_per_charge( double rain_depth_mm_per_hour ) const static void fill_funnels( int rain_depth_mm_per_hour, bool acid, const trap &tr ) { const double turns_per_charge = tr.funnel_turns_per_charge( rain_depth_mm_per_hour ); + map &here = get_map(); // Give each funnel on the map a chance to collect the rain. - const std::vector &funnel_locs = g->m.trap_locations( tr.loadid ); + const std::vector &funnel_locs = here.trap_locations( tr.loadid ); for( const tripoint &loc : funnel_locs ) { units::volume maxcontains = 0_ml; if( one_in( turns_per_charge ) ) { @@ -341,7 +342,7 @@ static void fill_funnels( int rain_depth_mm_per_hour, bool acid, const trap &tr // This funnel has collected some rain! Put the rain in the largest // container here which is either empty or contains some mixture of // impure water and acid. - map_stack items = g->m.i_at( loc ); + map_stack items = here.i_at( loc ); auto container = items.end(); for( auto candidate_container = items.begin(); candidate_container != items.end(); ++candidate_container ) { @@ -440,7 +441,7 @@ void do_rain( weather_type const w ) decay_time = 45_turns; wetness = 60; } - g->m.decay_fields_and_scent( decay_time ); + get_map().decay_fields_and_scent( decay_time ); wet_player( wetness ); } @@ -905,7 +906,7 @@ double get_local_windpower( double windpower, const oter_id &omter, const tripoi bool is_wind_blocker( const tripoint &location ) { - return g->m.has_flag( "BLOCK_WIND", location ); + return get_map().has_flag( "BLOCK_WIND", location ); } // Description of Wind Speed - https://en.wikipedia.org/wiki/Beaufort_scale @@ -1011,9 +1012,10 @@ void weather_manager::update_weather() // Check weather every few turns, instead of every turn. // TODO: predict when the weather changes and use that time. nextweather = calendar::turn + 5_minutes; + map &here = get_map(); const weather_datum wdata = weather_data( weather ); if( weather != old_weather && wdata.dangerous && - g->get_levz() >= 0 && g->m.is_outside( g->u.pos() ) + g->get_levz() >= 0 && here.is_outside( g->u.pos() ) && !g->u.has_activity( ACT_WAIT_WEATHER ) ) { g->cancel_activity_or_ignore_query( distraction_type::weather_change, string_format( _( "The weather changed to %s!" ), wdata.name ) ); @@ -1026,7 +1028,7 @@ void weather_manager::update_weather() if( wdata.sight_penalty != weather::sight_penalty( old_weather ) ) { for( int i = -OVERMAP_DEPTH; i <= OVERMAP_HEIGHT; i++ ) { - g->m.set_transparency_cache_dirty( i ); + here.set_transparency_cache_dirty( i ); } } } @@ -1054,7 +1056,7 @@ int weather_manager::get_temperature( const tripoint &location ) } //underground temperature = average New England temperature = 43F/6C rounded to int const int temp = ( location.z < 0 ? AVERAGE_ANNUAL_TEMPERATURE : temperature ) + - ( g->new_game ? 0 : g->m.get_temperature( location ) + temp_mod ); + ( g->new_game ? 0 : get_map().get_temperature( location ) + temp_mod ); temperature_cache.emplace( std::make_pair( location, temp ) ); return temp; diff --git a/tests/encumbrance_test.cpp b/tests/encumbrance_test.cpp index 27ae8fe12a3ff..d548f51e987c1 100644 --- a/tests/encumbrance_test.cpp +++ b/tests/encumbrance_test.cpp @@ -5,23 +5,21 @@ #include #include -#include "avatar.h" #include "catch/catch.hpp" -#include "npc.h" -#include "player.h" #include "bodypart.h" #include "character.h" +#include "debug.h" #include "item.h" #include "material.h" +#include "npc.h" #include "type_id.h" -#include "debug.h" static void test_encumbrance_on( - player &p, + Character &p, const std::vector &clothing, const std::string &body_part, int expected_encumbrance, - const std::function &tweak_player = {} + const std::function &tweak_player = {} ) { CAPTURE( body_part ); @@ -43,7 +41,7 @@ static void test_encumbrance_items( const std::vector &clothing, const std::string &body_part, const int expected_encumbrance, - const std::function &tweak_player = {} + const std::function &tweak_player = {} ) { // Test NPC first because NPC code can accidentally end up using properties @@ -53,7 +51,8 @@ static void test_encumbrance_items( test_encumbrance_on( example_npc, clothing, body_part, expected_encumbrance, tweak_player ); } SECTION( "testing on player" ) { - test_encumbrance_on( get_avatar(), clothing, body_part, expected_encumbrance, tweak_player ); + test_encumbrance_on( get_player_character(), clothing, body_part, expected_encumbrance, + tweak_player ); } } @@ -75,7 +74,7 @@ struct add_trait { add_trait( const std::string &t ) : trait( t ) {} add_trait( const trait_id &t ) : trait( t ) {} - void operator()( player &p ) { + void operator()( Character &p ) { p.toggle_trait( trait ); } diff --git a/tests/item_location_test.cpp b/tests/item_location_test.cpp index 03a94bbab44c9..ea95b1e1990ce 100644 --- a/tests/item_location_test.cpp +++ b/tests/item_location_test.cpp @@ -2,8 +2,8 @@ #include #include -#include "avatar.h" #include "catch/catch.hpp" +#include "character.h" #include "item.h" #include "map_helpers.h" #include "rng.h" @@ -68,7 +68,7 @@ TEST_CASE( "item_location_doesnt_return_stale_map_item", "[item][item_location]" TEST_CASE( "item_in_container", "[item][item_location]" ) { - avatar &dummy = get_avatar(); + Character &dummy = get_player_character(); clear_avatar(); item &backpack = dummy.i_add( item( "backpack" ) ); item jeans( "jeans" ); @@ -77,7 +77,7 @@ TEST_CASE( "item_in_container", "[item][item_location]" ) backpack.put_in( jeans, item_pocket::pocket_type::CONTAINER ); - item_location backpack_loc( dummy, & **dummy.wear( backpack ) ); + item_location backpack_loc( dummy, & **dummy.wear_item( backpack ) ); REQUIRE( dummy.has_item( *backpack_loc ) ); diff --git a/tests/monster_test.cpp b/tests/monster_test.cpp index dddceab3914d1..1343278ff84b7 100644 --- a/tests/monster_test.cpp +++ b/tests/monster_test.cpp @@ -8,20 +8,19 @@ #include #include -#include "avatar.h" #include "catch/catch.hpp" +#include "character.h" #include "game.h" +#include "game_constants.h" +#include "item.h" +#include "line.h" #include "map.h" #include "map_helpers.h" #include "monster.h" #include "options_helpers.h" #include "options.h" -#include "player.h" -#include "test_statistics.h" -#include "game_constants.h" -#include "item.h" -#include "line.h" #include "point.h" +#include "test_statistics.h" using move_statistics = statistics; @@ -86,10 +85,11 @@ static int can_catch_player( const std::string &monster_type, const tripoint &di { clear_map(); REQUIRE( g->num_creatures() == 1 ); // the player - player &test_player = get_avatar(); + Character &test_player = get_player_character(); // Strip off any potentially encumbering clothing. - std::list temp; - while( test_player.takeoff( test_player.i_at( -2 ), &temp ) ) {} + test_player.remove_worn_items_with( []( item & ) { + return true; + } ); const tripoint center{ 65, 65, 0 }; test_player.setpos( center ); diff --git a/tests/npc_talk_test.cpp b/tests/npc_talk_test.cpp index f05b2e4f1f9e9..e1b5a1b5c9ddf 100644 --- a/tests/npc_talk_test.cpp +++ b/tests/npc_talk_test.cpp @@ -85,7 +85,7 @@ static std::string gen_dynamic_line( dialogue &d ) static void change_om_type( const std::string &new_type ) { - const tripoint omt_pos = ms_to_omt_copy( get_map().getabs( get_avatar().pos() ) ); + const tripoint omt_pos = ms_to_omt_copy( get_map().getabs( get_player_character().pos() ) ); overmap_buffer.ter_set( omt_pos, oter_id( new_type ) ); } @@ -93,7 +93,7 @@ static npc &prep_test( dialogue &d ) { clear_avatar(); clear_vehicles(); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); REQUIRE_FALSE( player_character.in_vehicle ); const tripoint test_origin( 15, 15, 0 ); @@ -134,7 +134,7 @@ TEST_CASE( "npc_talk_stats", "[npc_talk]" ) dialogue d; prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); player_character.str_cur = 8; player_character.dex_cur = 8; player_character.int_cur = 8; @@ -170,7 +170,7 @@ TEST_CASE( "npc_talk_skills", "[npc_talk]" ) const skill_id skill( "driving" ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); player_character.set_skill_level( skill, 8 ); d.add_topic( "TALK_TEST_SIMPLE_SKILLS" ); @@ -193,7 +193,7 @@ TEST_CASE( "npc_talk_wearing_and_trait", "[npc_talk]" ) dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); for( const trait_id &tr : player_character.get_mutations() ) { player_character.unset_mutation( tr ); } @@ -238,7 +238,7 @@ TEST_CASE( "npc_talk_effect", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); d.add_topic( "TALK_TEST_EFFECT" ); gen_response_lines( d, 1 ); @@ -259,7 +259,7 @@ TEST_CASE( "npc_talk_service", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); d.add_topic( "TALK_TEST_SERVICE" ); player_character.cash = 0; @@ -466,7 +466,7 @@ TEST_CASE( "npc_talk_switch", "[npc_talk]" ) { dialogue d; prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); d.add_topic( "TALK_TEST_SWITCH" ); player_character.cash = 1000; @@ -496,7 +496,7 @@ TEST_CASE( "npc_talk_or", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); d.add_topic( "TALK_TEST_OR" ); player_character.cash = 0; @@ -513,7 +513,7 @@ TEST_CASE( "npc_talk_and", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); player_character.toggle_trait( trait_id( "ELFA_EARS" ) ); d.add_topic( "TALK_TEST_AND" ); @@ -530,7 +530,7 @@ TEST_CASE( "npc_talk_nested", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); d.add_topic( "TALK_TEST_NESTED" ); talker_npc.add_effect( effect_currently_busy, 9999_turns ); @@ -547,7 +547,7 @@ TEST_CASE( "npc_talk_nested", "[npc_talk]" ) TEST_CASE( "npc_talk_conditionals", "[npc_talk]" ) { dialogue d; - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); prep_test( d ); player_character.cash = 800; @@ -577,7 +577,7 @@ TEST_CASE( "npc_talk_items", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); player_character.remove_items_with( []( const item & it ) { return it.get_category().get_id() == item_category_id( "books" ) || @@ -860,7 +860,7 @@ TEST_CASE( "npc_talk_bionics", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); player_character.clear_bionics(); talker_npc.clear_bionics(); @@ -879,7 +879,7 @@ TEST_CASE( "npc_talk_effects", "[npc_talk]" ) { dialogue d; npc &talker_npc = prep_test( d ); - avatar &player_character = get_avatar(); + player &player_character = get_avatar(); // speaker effects just use are owed because I don't want to do anything complicated player_character.cash = 1000; diff --git a/tests/player_test.cpp b/tests/player_test.cpp index d3ffb68878053..15e64c69d73a2 100644 --- a/tests/player_test.cpp +++ b/tests/player_test.cpp @@ -3,9 +3,8 @@ #include #include -#include "avatar.h" #include "catch/catch.hpp" -#include "player.h" +#include "character.h" #include "weather.h" #include "bodypart.h" #include "calendar.h" @@ -13,7 +12,7 @@ // Set the stage for a particular ambient and target temperature and run update_bodytemp() until // core body temperature settles. -static void temperature_check( player *p, const int ambient_temp, const int target_temp ) +static void temperature_check( Character *p, const int ambient_temp, const int target_temp ) { get_weather().temperature = ambient_temp; for( int i = 0 ; i < num_bp; i++ ) { @@ -40,7 +39,7 @@ static void temperature_check( player *p, const int ambient_temp, const int targ CHECK( high > p->temp_cur[0] ); } -static void equip_clothing( player *p, const std::string &clothing ) +static void equip_clothing( Character *p, const std::string &clothing ) { const item article( clothing, 0 ); p->wear_item( article ); @@ -48,7 +47,7 @@ static void equip_clothing( player *p, const std::string &clothing ) // Run the tests for each of the temperature setpoints. // ambient_temps MUST have 7 values or we'll segfault. -static void test_temperature_spread( player *p, const std::array &ambient_temps ) +static void test_temperature_spread( Character *p, const std::array &ambient_temps ) { temperature_check( p, ambient_temps[0], BODYTEMP_FREEZING ); temperature_check( p, ambient_temps[1], BODYTEMP_VERY_COLD ); @@ -59,14 +58,15 @@ static void test_temperature_spread( player *p, const std::array &ambien temperature_check( p, ambient_temps[6], BODYTEMP_SCORCHING ); } -TEST_CASE( "Player body temperatures converge on expected values.", "[.bodytemp]" ) +TEST_CASE( "player body temperatures converge on expected values.", "[.bodytemp]" ) { - player &dummy = get_avatar(); + Character &dummy = get_player_character(); - // Remove first worn item until there are none left. - std::list temp; - while( dummy.takeoff( dummy.i_at( -2 ), &temp ) ) {} + // Strip off any potentially encumbering clothing. + dummy.remove_worn_items_with( []( item & ) { + return true; + } ); // See http://personal.cityu.edu.hk/~bsapplec/heat.htm for temperature basis. // As we aren't modeling metabolic rate, assume 2 METS when not sleeping. diff --git a/tests/projectile_test.cpp b/tests/projectile_test.cpp index c1bfb3aff4303..2c4f4dc318ade 100644 --- a/tests/projectile_test.cpp +++ b/tests/projectile_test.cpp @@ -1,7 +1,7 @@ #include "catch/catch.hpp" -#include "avatar.h" #include "ballistics.h" +#include "character.h" #include "dispersion.h" #include "game.h" #include "itype.h" @@ -21,7 +21,8 @@ static tripoint projectile_end_point( const std::vector &range, const dealt_projectile_attack attack; - attack = projectile_attack( test_proj, range[0], range[2], dispersion_sources(), &get_avatar(), + attack = projectile_attack( test_proj, range[0], range[2], dispersion_sources(), + &get_player_character(), nullptr ); return attack.end_point; @@ -33,7 +34,7 @@ TEST_CASE( "projectiles_through_obstacles", "[projectile]" ) map &here = get_map(); // Move the player out of the way of the test area - get_avatar().setpos( { 2, 2, 0 } ); + get_player_character().setpos( { 2, 2, 0 } ); // Ensure that a projectile fired from a gun can pass through a chain link fence // First, set up a test area - three tiles in a row diff --git a/tests/vehicle_drag_test.cpp b/tests/vehicle_drag_test.cpp index 499b2eafc1ddb..a7268479d814e 100644 --- a/tests/vehicle_drag_test.cpp +++ b/tests/vehicle_drag_test.cpp @@ -3,10 +3,10 @@ #include #include -#include "avatar.h" #include "bodypart.h" #include "calendar.h" #include "catch/catch.hpp" +#include "character.h" #include "map.h" #include "map_helpers.h" #include "point.h" @@ -27,7 +27,7 @@ static void clear_game_drag( const ter_id &terrain ) clear_creatures(); clear_npcs(); - avatar &player_character = get_avatar(); + Character &player_character = get_player_character(); // Move player somewhere safe CHECK( !player_character.in_vehicle ); player_character.setpos( tripoint_zero ); diff --git a/tests/vehicle_power_test.cpp b/tests/vehicle_power_test.cpp index 74b0fbb5fb372..6d016d910b3bc 100644 --- a/tests/vehicle_power_test.cpp +++ b/tests/vehicle_power_test.cpp @@ -2,10 +2,10 @@ #include #include -#include "avatar.h" #include "bodypart.h" #include "calendar.h" #include "catch/catch.hpp" +#include "character.h" #include "map.h" #include "map_helpers.h" #include "point.h" @@ -17,9 +17,10 @@ static const itype_id fuel_type_battery( "battery" ); static const itype_id fuel_type_plut_cell( "plut_cell" ); static const efftype_id effect_blind( "blind" ); +// TODO: Move this into player_helpers to avoid character include. static void reset_player() { - avatar &player_character = get_avatar(); + Character &player_character = get_player_character(); // Move player somewhere safe REQUIRE( !player_character.in_vehicle ); player_character.setpos( tripoint_zero ); diff --git a/tests/vehicle_test.cpp b/tests/vehicle_test.cpp index 82cbe00928294..c6c5b63e0d31f 100644 --- a/tests/vehicle_test.cpp +++ b/tests/vehicle_test.cpp @@ -19,7 +19,7 @@ TEST_CASE( "detaching_vehicle_unboards_passengers" ) const tripoint test_origin( 60, 60, 0 ); const tripoint vehicle_origin = test_origin; map &here = get_map(); - avatar &player_character = get_avatar(); + Character &player_character = get_player_character(); vehicle *veh_ptr = here.add_vehicle( vproto_id( "bicycle" ), vehicle_origin, -90, 0, 0 ); here.board_vehicle( test_origin, &player_character ); REQUIRE( player_character.in_vehicle ); diff --git a/tests/vehicle_turrets_test.cpp b/tests/vehicle_turrets_test.cpp index 6c319c9adf96d..a1416f8983660 100644 --- a/tests/vehicle_turrets_test.cpp +++ b/tests/vehicle_turrets_test.cpp @@ -5,8 +5,8 @@ #include #include "ammo.h" -#include "avatar.h" #include "catch/catch.hpp" +#include "character.h" #include "item.h" #include "item_location.h" #include "itype.h" @@ -61,7 +61,7 @@ static const vpart_info *biggest_tank( const ammotype &ammo ) TEST_CASE( "vehicle_turret", "[vehicle] [gun] [magazine] [.]" ) { map &here = get_map(); - avatar &player_character = get_avatar(); + Character &player_character = get_player_character(); for( auto e : turret_types() ) { SECTION( e->name() ) { vehicle *veh = here.add_vehicle( vproto_id( "none" ), point( 65, 65 ), 270, 0, 0 ); diff --git a/tests/visitable_remove_test.cpp b/tests/visitable_remove_test.cpp index 696208e169996..fc6cd722d4894 100644 --- a/tests/visitable_remove_test.cpp +++ b/tests/visitable_remove_test.cpp @@ -4,11 +4,9 @@ #include #include -#include "avatar.h" #include "calendar.h" #include "cata_utility.h" #include "catch/catch.hpp" -#include "game.h" #include "inventory.h" #include "item.h" #include "item_contents.h" @@ -16,7 +14,7 @@ #include "map.h" #include "map_selector.h" #include "optional.h" -#include "player.h" +#include "character.h" #include "point.h" #include "rng.h" #include "type_id.h" @@ -46,25 +44,26 @@ TEST_CASE( "visitable_remove", "[visitable]" ) REQUIRE( item( container_id ).is_container() ); REQUIRE( item( worn_id ).is_container() ); - player &p = g->u; + Character &p = get_player_character(); p.worn.clear(); p.worn.push_back( item( "backpack" ) ); p.inv.clear(); p.remove_weapon(); p.wear_item( item( "backpack" ) ); // so we don't drop anything + map &here = get_map(); // check if all tiles within radius are loaded within current submap and passable - const auto suitable = []( const tripoint & pos, const int radius ) { + const auto suitable = [&here]( const tripoint & pos, const int radius ) { std::vector tiles = closest_tripoints_first( pos, radius ); - return std::all_of( tiles.begin(), tiles.end(), []( const tripoint & e ) { - if( !g->m.inbounds( e ) ) { + return std::all_of( tiles.begin(), tiles.end(), [&here]( const tripoint & e ) { + if( !here.inbounds( e ) ) { return false; } - if( const optional_vpart_position vp = g->m.veh_at( e ) ) { - g->m.destroy_vehicle( &vp->vehicle() ); + if( const optional_vpart_position vp = here.veh_at( e ) ) { + here.destroy_vehicle( &vp->vehicle() ); } - g->m.i_clear( e ); - return g->m.passable( e ); + here.i_clear( e ); + return here.passable( e ); } ); }; @@ -306,11 +305,11 @@ TEST_CASE( "visitable_remove", "[visitable]" ) if( i == 0 || tiles.empty() ) { // always place at least one bottle on player tile our++; - g->m.add_item( p.pos(), obj ); + here.add_item( p.pos(), obj ); } else { // randomly place bottles on adjacent tiles adj++; - g->m.add_item( random_entry( tiles ), obj ); + here.add_item( random_entry( tiles ), obj ); } } REQUIRE( our + adj == count ); @@ -416,13 +415,13 @@ TEST_CASE( "visitable_remove", "[visitable]" ) std::vector tiles = closest_tripoints_first( p.pos(), 1 ); tiles.erase( tiles.begin() ); // player tile tripoint veh = random_entry( tiles ); - REQUIRE( g->m.add_vehicle( vproto_id( "shopping_cart" ), veh, 0, 0, 0 ) ); + REQUIRE( here.add_vehicle( vproto_id( "shopping_cart" ), veh, 0, 0, 0 ) ); - REQUIRE( std::count_if( tiles.begin(), tiles.end(), []( const tripoint & e ) { - return static_cast( g->m.veh_at( e ) ); + REQUIRE( std::count_if( tiles.begin(), tiles.end(), [&here]( const tripoint & e ) { + return static_cast( here.veh_at( e ) ); } ) == 1 ); - const cata::optional vp = g->m.veh_at( veh ).part_with_feature( "CARGO", true ); + const cata::optional vp = here.veh_at( veh ).part_with_feature( "CARGO", true ); REQUIRE( vp ); vehicle *const v = &vp->vehicle(); const int part = vp->part_index(); From 9419cac8103fa9842235b2c81f2d9b50c1056f89 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Wed, 1 Jul 2020 22:04:55 +0300 Subject: [PATCH 205/206] Fix compiling when using SDL and SOUND --- src/sounds.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/sounds.cpp b/src/sounds.cpp index 41af771d22db3..dc9f0d3e62129 100644 --- a/src/sounds.cpp +++ b/src/sounds.cpp @@ -1066,9 +1066,10 @@ sfx::sound_thread::sound_thread( const tripoint &source, const tripoint &target, { // This is function is run in the main thread. const int heard_volume = get_heard_volume( source ); - const player *p = g->critter_at( source ); - if( !p ) { - p = &g->u; + npc *np = g->critter_at( source ); + const player &p = np ? static_cast( *np ) : + dynamic_cast( get_player_character() ); + if( !p.is_npc() ) { // sound comes from the same place as the player is, calculation of angle wouldn't work ang_src = 0; vol_src = heard_volume; @@ -1079,8 +1080,8 @@ sfx::sound_thread::sound_thread( const tripoint &source, const tripoint &target, vol_targ = std::max( heard_volume - 20, 0 ); } ang_targ = get_heard_angle( target ); - weapon_skill = p->weapon.melee_skill(); - weapon_volume = p->weapon.volume() / units::legacy_volume_factor; + weapon_skill = p.weapon.melee_skill(); + weapon_volume = p.weapon.volume() / units::legacy_volume_factor; } // Operator overload required for thread API. From 99a47b91b1c3963e16238b2757e86aa8b9c71038 Mon Sep 17 00:00:00 2001 From: "U-N\\N" Date: Thu, 2 Jul 2020 01:12:48 +0200 Subject: [PATCH 206/206] fix transparency --- src/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map.cpp b/src/map.cpp index cb4ffcf43187a..8a9dc81e0f24d 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -5342,7 +5342,7 @@ void map::remove_field( const tripoint &p, const field_type_id &field_to_remove p.y / SEEX ) * MAPSIZE ) ) ); } const auto &fdata = field_to_remove.obj(); - if( fdata.is_transparent() ) { + if( !fdata.is_transparent() ) { set_transparency_cache_dirty( p.z ); } if( fdata.is_dangerous() ) {