From 56851a6144f814f507f3fb63cb834dfc07a61d55 Mon Sep 17 00:00:00 2001 From: Mark Langsdorf Date: Mon, 10 Feb 2020 14:40:41 -0600 Subject: [PATCH 01/12] npc: only report attitude changes that the avatar can see Simple fix to stop the player from seeing attitude changes for NPCs that the avatar cannot see. --- src/npc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/npc.cpp b/src/npc.cpp index 073b119cb658b..5a88fafd1c40e 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -3149,7 +3149,7 @@ void npc::set_attitude( npc_attitude new_attitude ) name, npc_attitude_id( attitude ), npc_attitude_id( new_attitude ) ); attitude_group new_group = get_attitude_group( new_attitude ); attitude_group old_group = get_attitude_group( attitude ); - if( new_group != old_group && !is_fake() ) { + if( new_group != old_group && !is_fake() && g->u.sees( *this ) ) { switch( new_group ) { case attitude_group::hostile: add_msg_if_npc( m_bad, _( " gets angry!" ) ); From c5dc07dd0ac39d7bfcc6002c4c39b6a81ab89d58 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Mon, 10 Feb 2020 23:46:20 +0300 Subject: [PATCH 02/12] Remove non-existing ammo effect from code --- src/item_factory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/item_factory.cpp b/src/item_factory.cpp index 50d403c5a6922..a92ff8edb4b9b 100644 --- a/src/item_factory.cpp +++ b/src/item_factory.cpp @@ -231,7 +231,7 @@ void Item_factory::finalize_pre( itype &obj ) static const std::set special_cookoff_tags = {{ "NAPALM", "NAPALM_BIG", "EXPLOSIVE_SMALL", "EXPLOSIVE", "EXPLOSIVE_BIG", "EXPLOSIVE_HUGE", - "TOXICGAS", "TEARGAS", "SMOKE", "SMOKE_BIG", + "TOXICGAS", "SMOKE", "SMOKE_BIG", "FRAG", "FLASHBANG" } }; From 5a90688a46111d6f0a89febd56f80549752d0c9c Mon Sep 17 00:00:00 2001 From: Eric Pierce Date: Mon, 10 Feb 2020 22:11:52 -0700 Subject: [PATCH 03/12] Transfer inhaler to NPC inventory on mission end (#37454) * Let asthmatic NPC keep inhaler after quest I recruited an asthmatic NPC after completing their inhaler mission and was startled to see they had already lost it. This allows them to keep the inhaler you find for them. Attempted fix for #31773. I have detailed some problems with this commit in comments on that issue. * Not take away all the player's inhalers This may be a case of the workaround being worse than what's being worked around. Will find a better solution. * Don't sell inhaler by individual charges When using this function to sell an inhaler to an NPC, `u.has_charges` is (apparently) returning true (since player has inhaler charges), although the inhaler itself is not counted by charges according to @BevapDin. This change makes `set_u_sell_item` follow more closely the pattern of `set_u_buy_item`, by merging the two separate `if/else` blocks into one, handling both the charge adjustment and `p.i_add` to transfer them item. Most importantly, the first condition for doing charge-based adjustment is whether `count_by_charges()` is true. I've preserved the check for `u.has_charges`, because we need to ensure the requested number of charges are available. --- data/json/npcs/missiondef.json | 6 +++--- src/npctalk.cpp | 26 ++++++++++---------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/data/json/npcs/missiondef.json b/data/json/npcs/missiondef.json index f656fa048fd06..8ac4bf289a13c 100644 --- a/data/json/npcs/missiondef.json +++ b/data/json/npcs/missiondef.json @@ -28,11 +28,11 @@ "id": "MISSION_GET_INHALER", "type": "mission_definition", "name": "Find Inhaler", - "goal": "MGOAL_FIND_ITEM", + "goal": "MGOAL_CONDITION", + "goal_condition": { "u_has_item": "inhaler" }, "difficulty": 2, "value": 150000, "urgent": true, - "item": "inhaler", "origins": [ "ORIGIN_OPENER_NPC", "ORIGIN_ANY_NPC" ], "deadline_low": 30, "deadline_high": 48, @@ -55,7 +55,7 @@ { "clear_npc_rule": "investigate_noises" } ] }, - "end": { "effect": [ "stop_guard", { "set_npc_rule": "investigate_noises" }, "npc_thankful" ] }, + "end": { "effect": [ "stop_guard", { "set_npc_rule": "investigate_noises" }, { "u_sell_item": "inhaler" }, "npc_thankful" ] }, "fail": { "effect": "npc_die" } }, { diff --git a/src/npctalk.cpp b/src/npctalk.cpp index 48e4a95873beb..057d64175f359 100644 --- a/src/npctalk.cpp +++ b/src/npctalk.cpp @@ -1970,31 +1970,25 @@ void talk_effect_fun_t::set_u_sell_item( const std::string &item_name, int cost, function = [item_name, cost, count]( const dialogue & d ) { npc &p = *d.beta; player &u = *d.alpha; - item old_item = item( item_name, calendar::turn ); - if( u.has_charges( item_name, count ) ) { - u.use_charges( item_name, count ); + if( item::count_by_charges( item_name ) && u.has_charges( item_name, count ) ) { + for( const item &it : u.use_charges( item_name, count ) ) { + p.i_add( it ); + } } else if( u.has_amount( item_name, count ) ) { - u.use_amount( item_name, count ); + for( const item &it : u.use_amount( item_name, count ) ) { + p.i_add( it ); + } } else { //~ %1$s is a translated item name - popup( _( "You don't have a %1$s!" ), old_item.tname() ); + popup( _( "You don't have a %1$s!" ), item::nname( item_name ) ); return; } - if( old_item.count_by_charges() ) { - old_item.mod_charges( count - 1 ); - p.i_add( old_item ); - } else { - for( int i_cnt = 0; i_cnt < count; i_cnt++ ) { - p.i_add( old_item ); - } - } - if( count == 1 ) { //~ %1%s is the NPC name, %2$s is an item - popup( _( "You give %1$s a %2$s." ), p.name, old_item.tname() ); + popup( _( "You give %1$s a %2$s." ), p.name, item::nname( item_name ) ); } else { //~ %1%s is the NPC name, %2$d is a number of items, %3$s are items - popup( _( "You give %1$s %2$d %3$s." ), p.name, count, old_item.tname() ); + popup( _( "You give %1$s %2$d %3$s." ), p.name, count, item::nname( item_name, count ) ); } p.op_of_u.owed += cost; }; From 0dcf11e8e8e4e5f38cd0fe57defc6a719011f6fd Mon Sep 17 00:00:00 2001 From: Trioct Date: Mon, 10 Feb 2020 23:13:38 -0600 Subject: [PATCH 04/12] Fix map memory edge case (#37460) --- src/cata_tiles.cpp | 8 +++++++- src/game.cpp | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index 9e40cb41a262e..dc11f3da4cf7a 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -1294,6 +1294,9 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int formatted_text( text, catacurses::red, NORTH ) ); } } + if( !p.invisible[0] ) { + g->m.check_and_set_seen_cache( p.pos ); + } } } // tile overrides are already drawn in the previous code @@ -1353,8 +1356,9 @@ void cata_tiles::draw( const point &dest, const tripoint ¢er, int width, int would_apply_vision_effects( g->m.get_visibility( ch.visibility_cache[np.x][np.y], cache ) ); } //calling draw to memorize everything. + //bypass cache check in case we learn something new about the terrain's connections + draw_terrain( p, lighting, height_3d, invisible ); if( g->m.check_seen_cache( p ) ) { - draw_terrain( p, lighting, height_3d, invisible ); draw_furniture( p, lighting, height_3d, invisible ); draw_trap( p, lighting, height_3d, invisible ); draw_vpart( p, lighting, height_3d, invisible ); @@ -2181,6 +2185,8 @@ bool cata_tiles::draw_terrain( const tripoint &p, const lit_level ll, int &heigh int connect_group = 0; if( t.obj().connects( connect_group ) ) { get_connect_values( p, subtile, rotation, connect_group, {} ); + // re-memorize previously seen terrain in case new connections have been seen + g->m.set_memory_seen_cache_dirty( p ); } else { get_terrain_orientation( p, rotation, subtile, {}, invisible ); // do something to get other terrain orientation values diff --git a/src/game.cpp b/src/game.cpp index 76136a41b2ec6..6572fa29b119d 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -9398,6 +9398,7 @@ void game::place_player_overmap( const tripoint &om_dest ) m.clear_vehicle_cache( z ); m.clear_vehicle_list( z ); } + m.access_cache( get_levz() ).map_memory_seen_cache.reset(); // offset because load_map expects the coordinates of the top left corner, but the // player will be centered in the middle of the map. const tripoint map_om_pos( tripoint( 2 * om_dest.x, 2 * om_dest.y, @@ -10403,6 +10404,7 @@ void game::vertical_shift( const int z_after ) m.clear_vehicle_cache( z_before ); m.access_cache( z_before ).vehicle_list.clear(); m.access_cache( z_before ).zone_vehicles.clear(); + m.access_cache( z_before ).map_memory_seen_cache.reset(); m.set_transparency_cache_dirty( z_before ); m.set_outside_cache_dirty( z_before ); m.load( tripoint( get_levx(), get_levy(), z_after ), true ); From 74040d0dc6127154db83b4c6294a9f84c0fa89b2 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Tue, 11 Feb 2020 08:15:39 +0300 Subject: [PATCH 05/12] Don't add duplicate options to the page (#37548) --- src/cata_tiles.cpp | 15 +++++++++++++++ src/cata_tiles.h | 1 + src/options.cpp | 14 ++++++++++++-- src/sdltiles.cpp | 21 +-------------------- 4 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/cata_tiles.cpp b/src/cata_tiles.cpp index dc11f3da4cf7a..a27c515e949b7 100644 --- a/src/cata_tiles.cpp +++ b/src/cata_tiles.cpp @@ -3618,4 +3618,19 @@ std::vector cata_tiles::build_renderer_list() return renderer_names.empty() ? default_renderer_names : renderer_names; } +std::vector cata_tiles::build_display_list() +{ + std::vector display_names; + std::vector default_display_names = { + { "0", translate_marker( "Display 0" ) } + }; + + int numdisplays = SDL_GetNumVideoDisplays(); + for( int i = 0 ; i < numdisplays ; i++ ) { + display_names.emplace_back( std::to_string( i ), std::string( SDL_GetDisplayName( i ) ) ); + } + + return display_names.empty() ? default_display_names : display_names; +} + #endif // SDL_TILES diff --git a/src/cata_tiles.h b/src/cata_tiles.h index 36d5c869b5e41..45ec9194ce19c 100644 --- a/src/cata_tiles.h +++ b/src/cata_tiles.h @@ -476,6 +476,7 @@ class cata_tiles void do_tile_loading_report(); point player_to_screen( const point & ) const; static std::vector build_renderer_list(); + static std::vector build_display_list(); protected: template void tile_loading_report( const maptype &tiletypemap, const std::string &label, diff --git a/src/options.cpp b/src/options.cpp index c57a5fc7fd5f4..a18bd1ed94b57 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -135,7 +135,14 @@ void options_manager::addOptionToPage( const std::string &name, const std::strin { for( Page &p : pages_ ) { if( p.id_ == page ) { + // Don't add duplicate options to the page + for( const cata::optional &i : p.items_ ) { + if( i.has_value() && i.value() == name ) { + return; + } + } p.items_.emplace_back( name ); + return; } } // @TODO handle the case when an option has no valid page id (note: consider hidden external options as well) @@ -1806,10 +1813,13 @@ void options_manager::add_options_graphics() add_empty_line(); +#if defined(TILES) + std::vector display_list = cata_tiles::build_display_list(); add( "DISPLAY", "graphics", translate_marker( "Display" ), translate_marker( "Sets which video display will be used to show the game. Requires restart." ), - 0, 10000, 0, COPT_CURSES_HIDE - ); + display_list, + display_list.front().first, COPT_CURSES_HIDE ); +#endif #if !defined(__ANDROID__) // Android is always fullscreen add( "FULLSCREEN", "graphics", translate_marker( "Fullscreen" ), diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index f25b50c083f70..c9ee7420a7d51 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -390,7 +390,7 @@ static void WinCreate() } #endif - int display = get_option( "DISPLAY" ); + int display = std::stoi( get_option( "DISPLAY" ) ); if( display < 0 || display >= SDL_GetNumVideoDisplays() ) { display = 0; } @@ -925,23 +925,6 @@ void set_displaybuffer_rendertarget() SetRenderTarget( renderer, display_buffer ); } -// Populate a map with the available video displays and their name -static void find_videodisplays() -{ - std::vector< std::tuple > displays; - - int numdisplays = SDL_GetNumVideoDisplays(); - for( int i = 0 ; i < numdisplays ; i++ ) { - displays.push_back( std::make_tuple( i, std::string( SDL_GetDisplayName( i ) ) ) ); - } - - int current_display = get_option( "DISPLAY" ); - get_options().add( "DISPLAY", "graphics", translate_marker( "Display" ), - translate_marker( "Sets which video display will be used to show the game. Requires restart." ), - displays, current_display, 0, options_manager::COPT_CURSES_HIDE, true - ); -} - // line_id is one of the LINE_*_C constants // FG is a curses color void Font::draw_ascii_lines( unsigned char line_id, int drawx, int drawy, int FG ) const @@ -3529,8 +3512,6 @@ void catacurses::init_interface() InitSDL(); - find_videodisplays(); - init_term_size_and_scaling_factor(); WinCreate(); From 9f4e399db1f13abcb62cc6b30f4551b263d5ba78 Mon Sep 17 00:00:00 2001 From: anothersimulacrum Date: Mon, 10 Feb 2020 21:13:35 -0800 Subject: [PATCH 06/12] Clear loaded scenario blacklist when leaving world This caused you to be unable to load a world with a mod containing a scenario blacklist more than once without exiting the game. Also don't locally redefine all_scenarios when finalizing scenario blacklists. --- src/init.cpp | 1 + src/scenario.cpp | 11 ++++++++--- src/scenario.h | 2 ++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/init.cpp b/src/init.cpp index 55466a56a54de..b53e61c79fd6d 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -512,6 +512,7 @@ void DynamicDataLoader::unload_data() reset_mapgens(); reset_effect_types(); reset_speech(); + reset_scenarios_blacklist(); overmap_land_use_codes::reset(); overmap_connections::reset(); overmap_locations::reset(); diff --git a/src/scenario.cpp b/src/scenario.cpp index 79a34fa2a4a3b..4f095057a826f 100644 --- a/src/scenario.cpp +++ b/src/scenario.cpp @@ -257,12 +257,12 @@ void scen_blacklist::load( const JsonObject &jo, const std::string & ) void scen_blacklist::finalize() { - std::vector> all_scenarios; + std::vector> all_scens; for( const scenario &scen : scenario::get_all() ) { - all_scenarios.emplace_back( scen.ident() ); + all_scens.emplace_back( scen.ident() ); } for( const string_id &sc : sc_blacklist.scenarios ) { - if( std::find( all_scenarios.begin(), all_scenarios.end(), sc ) == all_scenarios.end() ) { + if( std::find( all_scens.begin(), all_scens.end(), sc ) == all_scens.end() ) { debugmsg( "Scenario blacklist contains invalid scenario" ); } } @@ -283,6 +283,11 @@ void scen_blacklist::finalize() } } +void reset_scenarios_blacklist() +{ + sc_blacklist.scenarios.clear(); +} + std::vector> scenario::permitted_professions() const { if( !cached_permitted_professions.empty() ) { diff --git a/src/scenario.h b/src/scenario.h index 52f4822fd4347..cf5a2a9621e05 100644 --- a/src/scenario.h +++ b/src/scenario.h @@ -119,4 +119,6 @@ struct scen_blacklist { void finalize(); }; +void reset_scenarios_blacklist(); + #endif From 6d26b222a538eb134ca9d9d4abdc9fcc26cd8209 Mon Sep 17 00:00:00 2001 From: Brian-Otten <47374323+Brian-Otten@users.noreply.github.com> Date: Tue, 11 Feb 2020 06:26:37 +0100 Subject: [PATCH 07/12] Adjust grenade values (#37585) --- data/json/items/tool/explosives.json | 2 +- src/explosion.cpp | 6 +++--- tests/explosion_balance_test.cpp | 29 ++++++++++++++++++---------- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/data/json/items/tool/explosives.json b/data/json/items/tool/explosives.json index 545ea2f2f2119..828861d1b06bf 100644 --- a/data/json/items/tool/explosives.json +++ b/data/json/items/tool/explosives.json @@ -627,7 +627,7 @@ "sound_volume": 0, "sound_msg": "Tick.", "no_deactivate_msg": "You've already pulled the %s's pin; try throwing it instead.", - "explosion": { "power": 185, "shrapnel": 212 } + "explosion": { "power": 240, "shrapnel": { "casing_mass": 217, "fragment_mass": 0.15 } } }, "flags": [ "BOMB", "TRADER_AVOID" ] }, diff --git a/src/explosion.cpp b/src/explosion.cpp index d37a55d7f32da..a9836a893df07 100644 --- a/src/explosion.cpp +++ b/src/explosion.cpp @@ -97,7 +97,7 @@ shrapnel_data load_shrapnel_data( const JsonObject &jo ) // Casing mass is mandatory jo.read( "casing_mass", ret.casing_mass ); // Rest isn't - ret.fragment_mass = jo.get_float( "fragment_mass", 0.005 ); + ret.fragment_mass = jo.get_float( "fragment_mass", 0.15 ); ret.recovery = jo.get_int( "recovery", 0 ); ret.drop = itype_id( jo.get_string( "drop", "null" ) ); return ret; @@ -448,9 +448,9 @@ static std::vector shrapnel( const tripoint &src, int power, } if( g->m.impassable( target ) ) { if( optional_vpart_position vp = g->m.veh_at( target ) ) { - vp->vehicle().damage( vp->part_index(), damage ); + vp->vehicle().damage( vp->part_index(), damage / 100 ); } else { - g->m.bash( target, damage / 10, true ); + g->m.bash( target, damage / 100, true ); } } } diff --git a/tests/explosion_balance_test.cpp b/tests/explosion_balance_test.cpp index 9c3ff822fe42a..f54b5aa412666 100644 --- a/tests/explosion_balance_test.cpp +++ b/tests/explosion_balance_test.cpp @@ -21,14 +21,18 @@ #include "type_id.h" #include "point.h" +enum class outcome_type { + Kill, Casualty +}; + static void check_lethality( const std::string &explosive_id, const int range, float lethality, - float margin ) + float margin, outcome_type expected_outcome ) { const epsilon_threshold target_lethality{ lethality, margin }; int num_survivors = 0; int num_subjects = 0; int num_wounded = 0; - statistics deaths; + statistics victims; std::stringstream survivor_stats; int total_hp = 0; do { @@ -56,17 +60,22 @@ static void check_lethality( const std::string &explosive_id, const int range, f num_survivors += survivors.size(); for( Creature *survivor : survivors ) { survivor_stats << survivor->pos() << " " << survivor->get_hp() << ", "; - num_wounded += ( survivor->get_hp() < survivor->get_hp_max() ) ? 1 : 0; + bool wounded = survivor->get_hp() < survivor->get_hp_max(); + num_wounded += wounded ? 1 : 0; total_hp += survivor->get_hp(); - deaths.add( false ); + if( expected_outcome == outcome_type::Casualty && wounded ) { + victims.add( true ); + } else { + victims.add( false ); + } } if( !survivors.empty() ) { survivor_stats << std::endl; } for( int i = survivors.size(); i < num_subjects_this_time; ++i ) { - deaths.add( true ); + victims.add( true ); } - } while( deaths.uncertain_about( target_lethality ) ); + } while( victims.uncertain_about( target_lethality ) ); CAPTURE( margin ); INFO( explosive_id ); INFO( "range " << range ); @@ -75,7 +84,7 @@ static void check_lethality( const std::string &explosive_id, const int range, f INFO( "Wounded survivors: " << num_wounded ); const int average_hp = num_survivors ? total_hp / num_survivors : 0; INFO( "average hp of survivors: " << average_hp ); - CHECK( deaths.avg() == Approx( lethality ).margin( margin ) ); + CHECK( victims.avg() == Approx( lethality ).margin( margin ) ); } static std::vector get_part_hp( vehicle *veh ) @@ -125,11 +134,11 @@ static void check_vehicle_damage( const std::string &explosive_id, const std::st TEST_CASE( "grenade_lethality", "[grenade],[explosion],[balance]" ) { - check_lethality( "grenade_act", 5, 0.95, 0.06 ); - check_lethality( "grenade_act", 15, 0.40, 0.06 ); + check_lethality( "grenade_act", 5, 0.95, 0.06, outcome_type::Kill ); + check_lethality( "grenade_act", 15, 0.40, 0.06, outcome_type::Casualty ); } TEST_CASE( "grenade_vs_vehicle", "[grenade],[explosion],[balance]" ) { check_vehicle_damage( "grenade_act", "car", 5 ); -} +} \ No newline at end of file From 7572e3814afa3396d5f6fdd956ca6969c3e2d8b5 Mon Sep 17 00:00:00 2001 From: Anton Burmistrov Date: Tue, 11 Feb 2020 10:10:24 +0400 Subject: [PATCH 08/12] Clear the screen after exiting from character creation UI (#37915) * Clear the screen after exiting from character creation UI Also fixed small grahical glitch in skills tab in character creation menu * Refresh too --- src/newcharacter.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/newcharacter.cpp b/src/newcharacter.cpp index 8e38efc495c45..daa0770a27d51 100644 --- a/src/newcharacter.cpp +++ b/src/newcharacter.cpp @@ -467,6 +467,8 @@ bool avatar::create( character_type type, const std::string &tempname ) } while( true ); if( tab < 0 ) { + catacurses::clear(); + catacurses::refresh(); return false; } @@ -1631,7 +1633,7 @@ tab_direction set_skills( const catacurses::window &w, avatar &u, points_left &p // Clear the bottom of the screen. werase( w_description ); mvwprintz( w, point( remaining_points_length + 9, 3 ), c_light_gray, - std::string( getmaxx( w ) - remaining_points_length - 4, ' ' ) ); + std::string( getmaxx( w ) - remaining_points_length - 10, ' ' ) ); // Write the hint as to upgrade costs const int cost = skill_increment_cost( u, currentSkill->ident() ); From 62284571fde861ed8281f448afb245b122c9dc38 Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Tue, 11 Feb 2020 07:11:06 +0100 Subject: [PATCH 09/12] Comestible name to object (#37907) --- data/json/items/comestibles/carnivore.json | 3 +-- data/json/items/comestibles/drink.json | 3 +-- data/json/items/comestibles/frozen.json | 3 +-- data/json/items/comestibles/junkfood.json | 3 +-- data/json/items/comestibles/meat_dishes.json | 9 +++------ data/json/items/comestibles/med.json | 3 +-- data/json/items/comestibles/other.json | 12 ++++------- data/json/items/comestibles/raw_veggy.json | 9 +++------ data/json/items/comestibles/seed.json | 21 +++++++------------- 9 files changed, 22 insertions(+), 44 deletions(-) diff --git a/data/json/items/comestibles/carnivore.json b/data/json/items/comestibles/carnivore.json index 61530e9bdeaf9..a300072c95fc0 100644 --- a/data/json/items/comestibles/carnivore.json +++ b/data/json/items/comestibles/carnivore.json @@ -297,8 +297,7 @@ "id": "offal_canned", "copy-from": "offal", "type": "COMESTIBLE", - "name": "canned offal", - "name_plural": "canned offal", + "name": { "str": "canned offal", "str_pl": "canned offal" }, "description": "Freshly cooked organ meat and entrails, preserved by canning. Unappetizing, but filled with essential vitamins.", "volume": "500 ml", "stack_size": 2, diff --git a/data/json/items/comestibles/drink.json b/data/json/items/comestibles/drink.json index 6c288e1a078d2..e37f9a3cd1663 100644 --- a/data/json/items/comestibles/drink.json +++ b/data/json/items/comestibles/drink.json @@ -122,8 +122,7 @@ { "type": "COMESTIBLE", "id": "chai_tea", - "name": "chai tea", - "name_plural": "chai tea", + "name": { "str": "chai tea", "str_pl": "chai tea" }, "weight": "259 g", "color": "brown", "spoils_in": "12 hours", diff --git a/data/json/items/comestibles/frozen.json b/data/json/items/comestibles/frozen.json index 67b2dc864a05b..f0cf7312aa21f 100644 --- a/data/json/items/comestibles/frozen.json +++ b/data/json/items/comestibles/frozen.json @@ -93,8 +93,7 @@ "type": "COMESTIBLE", "copy-from": "icecream", "id": "icecream_candy", - "name": "candy ice cream", - "name_plural": "candy ice cream scoops", + "name": { "str": "candy ice cream", "str_pl": "candy ice cream scoops" }, "description": "Ice cream with bits of chocolate, caramel, or other flavoring mixed in.", "fun": 20, "healthy": -3, diff --git a/data/json/items/comestibles/junkfood.json b/data/json/items/comestibles/junkfood.json index 02b9488e63b9c..c4fd10bb8aa19 100644 --- a/data/json/items/comestibles/junkfood.json +++ b/data/json/items/comestibles/junkfood.json @@ -1066,8 +1066,7 @@ { "id": "hotdogs_campfire", "type": "COMESTIBLE", - "name": "campfire hot dog", - "name_plural": "campfire hot dogs", + "name": { "str": "campfire hot dog" }, "copy-from": "hotdogs_frozen", "description": "The simple hot dog, cooked over an open fire. Would be better on a bun, but it's quite an improvement over eating it uncooked", "stack_size": 4, diff --git a/data/json/items/comestibles/meat_dishes.json b/data/json/items/comestibles/meat_dishes.json index e2407d3cf80de..3cabf6c4a608e 100644 --- a/data/json/items/comestibles/meat_dishes.json +++ b/data/json/items/comestibles/meat_dishes.json @@ -307,8 +307,7 @@ { "type": "COMESTIBLE", "id": "fish_canned", - "name": "canned fish", - "name_plural": "canned fish", + "name": { "str": "canned fish", "str_pl": "canned fish" }, "copy-from": "fish_cooked", "color": "light_gray", "spoils_in": "1 day 16 hours", @@ -601,8 +600,7 @@ { "type": "COMESTIBLE", "id": "can_tuna", - "name": "canned tuna fish", - "name_plural": "canned tuna fish", + "name": { "str": "canned tuna fish", "str_pl": "canned tuna fish" }, "weight": "154 g", "color": "light_gray", "spoils_in": "1 day", @@ -676,8 +674,7 @@ { "type": "COMESTIBLE", "id": "can_clams", - "name": "canned clam", - "name_plural": "canned clams", + "name": { "str": "canned clam" }, "weight": "169 g", "color": "light_gray", "spoils_in": "1 day", diff --git a/data/json/items/comestibles/med.json b/data/json/items/comestibles/med.json index 024667e170a94..4b2e4215335ca 100644 --- a/data/json/items/comestibles/med.json +++ b/data/json/items/comestibles/med.json @@ -1423,8 +1423,7 @@ "id": "cattail_jelly", "type": "COMESTIBLE", "comestible_type": "MED", - "name": "cattail jelly", - "name_plural": "cattail jellies", + "name": { "str": "cattail jelly", "str_pl": "cattail jellies" }, "description": "Clear jelly harvested from cattail, has antiseptic properties and works as a painkiller.", "container": "bottle_plastic_small", "weight": "50 g", diff --git a/data/json/items/comestibles/other.json b/data/json/items/comestibles/other.json index c16183f84fb80..f68cd53eaa241 100644 --- a/data/json/items/comestibles/other.json +++ b/data/json/items/comestibles/other.json @@ -258,8 +258,7 @@ { "type": "COMESTIBLE", "id": "can_beans", - "name": "canned beans", - "name_plural": "beans", + "name": { "str": "canned beans", "str_pl": "beans" }, "weight": "256 g", "color": "brown", "spoils_in": "2 days", @@ -511,8 +510,7 @@ { "type": "COMESTIBLE", "id": "can_tomato", - "name": "canned tomato", - "name_plural": "canned tomatoes", + "name": { "str": "canned tomato", "str_pl": "canned tomatoes" }, "weight": "128 g", "color": "red", "spoils_in": "3 days 18 hours", @@ -556,8 +554,7 @@ "id": "cattlefodder", "type": "COMESTIBLE", "comestible_type": "FOOD", - "name": "cattle fodder", - "name_plural": "cattle fodder", + "name": { "str": "cattle fodder", "str_pl": "cattle fodder" }, "description": "What cattle eat. Mainly made of grass, silage or legumes. It's perfect for ruminants.", "weight": "300 g", "volume": "250 ml", @@ -622,8 +619,7 @@ "id": "catfood", "type": "COMESTIBLE", "comestible_type": "FOOD", - "name": "cat food", - "name_plural": "cat food", + "name": { "str": "cat food", "str_pl": "cat food" }, "description": "This is food for cats. It smells strange, but cats seem to love it.", "weight": "223 g", "spoils_in": "1 day", diff --git a/data/json/items/comestibles/raw_veggy.json b/data/json/items/comestibles/raw_veggy.json index 26fe206a35de8..9313e87a70373 100644 --- a/data/json/items/comestibles/raw_veggy.json +++ b/data/json/items/comestibles/raw_veggy.json @@ -121,8 +121,7 @@ { "type": "COMESTIBLE", "id": "carrot", - "name": "carrot", - "name_plural": "carrots", + "name": { "str": "carrot" }, "weight": "68 g", "color": "light_red", "spoils_in": "5 days", @@ -143,8 +142,7 @@ { "type": "COMESTIBLE", "id": "cattail_rhizome", - "name": "cattail rhizome", - "name_plural": "cattail rhizomes", + "name": { "str": "cattail rhizome" }, "weight": "209 g", "color": "brown", "spoils_in": "3 days 8 hours", @@ -162,8 +160,7 @@ { "type": "COMESTIBLE", "id": "cattail_stalk", - "name": "cattail stalk", - "name_plural": "cattail stalks", + "name": { "str": "cattail stalk" }, "weight": "100 g", "color": "green", "spoils_in": "3 days 8 hours", diff --git a/data/json/items/comestibles/seed.json b/data/json/items/comestibles/seed.json index e77089ffc7935..7095d0f214cbc 100644 --- a/data/json/items/comestibles/seed.json +++ b/data/json/items/comestibles/seed.json @@ -184,8 +184,7 @@ "id": "seed_cabbage", "copy-from": "seed", "price": 50, - "name": "cabbage seeds", - "name_plural": "cabbage seeds", + "name": { "str": "cabbage seeds", "str_pl": "cabbage seeds" }, "color": "light_gray", "description": "Some white cabbage seeds.", "seed_data": { "plant_name": "cabbage", "fruit": "cabbage", "byproducts": [ "withered" ], "grow": "85 days" } @@ -256,8 +255,7 @@ "type": "COMESTIBLE", "id": "seed_cattail", "copy-from": "seed", - "name": "cattail seeds", - "name_plural": "cattail seeds", + "name": { "str": "cattail seeds", "str_pl": "cattail seeds" }, "color": "green", "description": "Some cattail seeds.", "seed_data": { "plant_name": "cattail", "fruit": "cattail_stalk", "byproducts": [ "cattail_rhizome" ], "grow": "91 days" } @@ -318,8 +316,7 @@ "type": "COMESTIBLE", "id": "seed_cactus", "copy-from": "seed", - "name": "cactus seeds", - "name_plural": "cactus seeds", + "name": { "str": "cactus seeds", "str_pl": "cactus seeds" }, "color": "green", "description": "Some cactus seeds.", "seed_data": { "plant_name": "cactus", "fruit": "cactus_pad", "grow": "91 days" } @@ -350,8 +347,7 @@ "id": "seed_carrot", "copy-from": "seed", "price": 50, - "name": "carrot seeds", - "name_plural": "carrot seeds", + "name": { "str": "carrot seeds", "str_pl": "carrot seeds" }, "description": "Some carrot seeds.", "seed_data": { "plant_name": "carrot", "fruit": "carrot", "byproducts": [ "withered" ], "grow": "65 days" } }, @@ -402,8 +398,7 @@ "type": "COMESTIBLE", "id": "seed_weed", "copy-from": "seed", - "name": "cannabis seeds", - "name_plural": "cannabis seeds", + "name": { "str": "cannabis seeds", "str_pl": "cannabis seeds" }, "color": "green", "use_action": "SEED", "quench": -1, @@ -507,8 +502,7 @@ "type": "COMESTIBLE", "id": "seed_canola", "copy-from": "seed", - "name": "canola seeds", - "name_plural": "canola seeds", + "name": { "str": "canola seeds", "str_pl": "canola seeds" }, "color": "green", "description": "Some canola seeds. You could press them into oil.", "charges": 2, @@ -668,8 +662,7 @@ "id": "seed_celery", "copy-from": "seed", "price": 50, - "name": "celery seeds", - "name_plural": "celery seeds", + "name": { "str": "celery seeds", "str_pl": "celery seeds" }, "description": "Some celery seeds.", "seed_data": { "plant_name": "celery", "fruit": "celery", "byproducts": [ "withered" ], "grow": "130 days" } }, From eb6473418cc154200348ef0c17c566ce614aad6a Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Tue, 11 Feb 2020 07:11:33 +0100 Subject: [PATCH 10/12] Ammo modern json (#37909) --- data/json/items/chemicals_and_resources.json | 15 +++++---------- data/json/items/comestibles/seed.json | 3 +-- data/json/items/fuel.json | 15 ++++++--------- data/json/items/resources/home_improvement.json | 3 +-- data/json/items/resources/metal.json | 3 +-- data/json/items/resources/misc.json | 6 ++---- data/json/items/resources/tailoring.json | 9 +++------ 7 files changed, 19 insertions(+), 35 deletions(-) diff --git a/data/json/items/chemicals_and_resources.json b/data/json/items/chemicals_and_resources.json index 6f2a097da1865..3694fd4cb6d30 100644 --- a/data/json/items/chemicals_and_resources.json +++ b/data/json/items/chemicals_and_resources.json @@ -596,8 +596,7 @@ "id": "chem_muriatic_acid", "category": "chems", "price": 250, - "name": "hydrochloric acid", - "name_plural": "hydrochloric acid", + "name": { "str": "hydrochloric acid", "str_pl": "hydrochloric acid" }, "symbol": "=", "color": "white", "flags": [ "DROP_ACTION_ONLY_IF_LIQUID" ], @@ -688,8 +687,7 @@ "id": "chem_hexamine", "category": "chems", "price": 900, - "name": "hexamine", - "name_plural": "hexamine", + "name": { "str": "hexamine", "str_pl": "hexamine" }, "symbol": "=", "color": "red", "description": "A handful of waxy hexamine tablets. This ubiquitous fuel was used to start up almost every garden grill and no 'real' camping trip could do its cooking without it, until the Cataclysm. Nowadays, it is even more valuable then before, being the key component in the preparation of several military-grade explosives.", @@ -706,8 +704,7 @@ "id": "chem_hydrogen_peroxide_conc", "category": "chems", "price": 1000, - "name": "hydrogen peroxide (concentrated)", - "name_plural": "hydrogen peroxide (concentrated)", + "name": { "str": "hydrogen peroxide (concentrated)", "str_pl": "hydrogen peroxide (concentrated)" }, "symbol": "~", "color": "white", "description": "Concentrated hydrogen peroxide is a powerful oxidant, violently decomposing in contact with most reducing agents. Can be used as rocket fuel or to make high explosives. Causes severe burns to any organic matter and may ignite it on contact.", @@ -807,8 +804,7 @@ "id": "chem_formaldehyde", "category": "chems", "price": 200, - "name": "formaldehyde", - "name_plural": "formaldehyde", + "name": { "str": "formaldehyde", "str_pl": "formaldehyde" }, "symbol": "~", "color": "white", "description": "Formaldehyde, here dissolved in water, was widely used before the Cataclysm as a precursor to production of many chemicals and materials and as an embalming agent. Easily identifiable by its pungent odor. Terribly toxic, carcinogenic, and volatile.", @@ -930,8 +926,7 @@ "id": "chem_rocket_fuel", "category": "chems", "price": 500, - "name": "improvised rocket fuel", - "name_plural": "improvised rocket fuel", + "name": { "str": "improvised rocket fuel", "str_pl": "improvised rocket fuel" }, "symbol": "=", "color": "white", "description": "A chunk of a zinc powder and sulfur mixture, bound together by superglue, that can be used as an impromptu rocket fuel.", diff --git a/data/json/items/comestibles/seed.json b/data/json/items/comestibles/seed.json index 7095d0f214cbc..d11b987e65fb8 100644 --- a/data/json/items/comestibles/seed.json +++ b/data/json/items/comestibles/seed.json @@ -416,8 +416,7 @@ "id": "fungal_seeds", "copy-from": "seed", "price": 100, - "name": "fungal seeds", - "name_plural": "fungal seeds", + "name": { "str": "fungal seeds", "str_pl": "fungal seeds" }, "color": "dark_gray", "description": "Some fungal seeds.", "ammo_type": "NULL", diff --git a/data/json/items/fuel.json b/data/json/items/fuel.json index 98e3a5ade1144..536c0a15a423b 100644 --- a/data/json/items/fuel.json +++ b/data/json/items/fuel.json @@ -84,8 +84,7 @@ { "id": "gasoline", "type": "AMMO", - "name": "gasoline", - "name_plural": "gasoline", + "name": { "str": "gasoline", "str_pl": "gasoline" }, "description": "Gasoline is a highly flammable liquid. When under pressure, it has the potential for violent explosion.", "category": "fuel", "weight": "1 g", @@ -107,7 +106,7 @@ "fuel": { "energy": 34.2, "pump_terrain": "t_gas_pump", - "explosion_data": { "chance_hot": 2, "chance_cold": 5, "factor": 1.0, "fiery": true, "size_factor": 0.1 } + "explosion_data": { "chance_hot": 2, "chance_cold": 5, "factor": 1, "fiery": true, "size_factor": 0.1 } } }, { @@ -131,7 +130,7 @@ "ammo_type": "lamp_oil", "fuel": { "//": "Roughly equivalent to LPG", - "energy": 26.0, + "energy": 26, "explosion_data": { "chance_hot": 5, "chance_cold": 10, "factor": 0.2, "fiery": true, "size_factor": 0.1 } }, "range": 6, @@ -160,7 +159,7 @@ "ammo_type": "motor_oil", "fuel": { "//": "Roughly equivalent to LPG", - "energy": 26.0, + "energy": 26, "explosion_data": { "chance_hot": 5, "chance_cold": 10, "factor": 0.2, "fiery": true, "size_factor": 0.1 } }, "range": 6, @@ -194,8 +193,7 @@ { "id": "gelled_gasoline", "type": "AMMO", - "name": "gelled gasoline", - "name_plural": "gelled gasoline", + "name": { "str": "gelled gasoline", "str_pl": "gelled gasoline" }, "copy-from": "gasoline", "description": "A flammable gel composed of gasoline and dissolved shavings of polystyrene, roughly similar in properties to napalm b. It's meant to be used with a flamethrower.", "price": 400, @@ -207,8 +205,7 @@ { "id": "flamethrower_fuel", "type": "AMMO", - "name": "flamethrower fuel", - "name_plural": "flamethrower fuel", + "name": { "str": "flamethrower fuel", "str_pl": "flamethrower fuel" }, "copy-from": "gasoline", "description": "A mixture of gasoline and diesel oil in equal parts. Its combustion properties make it unfit for applications where you would use any of them separately, but it can be used to feed a flamethrower.", "price": 400, diff --git a/data/json/items/resources/home_improvement.json b/data/json/items/resources/home_improvement.json index 679f76ce3aab4..8b0b8e07bcb56 100644 --- a/data/json/items/resources/home_improvement.json +++ b/data/json/items/resources/home_improvement.json @@ -51,8 +51,7 @@ "id": "g_paint", "category": "other", "price": 120, - "name": "green paint", - "name_plural": "green paint", + "name": { "str": "green paint", "str_pl": "green paint" }, "symbol": "o", "color": "green", "description": "A can of green paint.", diff --git a/data/json/items/resources/metal.json b/data/json/items/resources/metal.json index 499d96bdbf4b7..fdb50482199d1 100644 --- a/data/json/items/resources/metal.json +++ b/data/json/items/resources/metal.json @@ -106,8 +106,7 @@ "id": "gold_small", "type": "AMMO", "category": "spare_parts", - "name": "gold", - "name_plural": "gold", + "name": { "str": "gold", "str_pl": "gold" }, "description": "A soft shiny metal. Before the apocalypse this would've been worth a small fortune but now its value is greatly diminished.", "weight": "5 g", "//": "Density 19.32g/cm³ ~ 4.8kg/250ml @ stack 1000 = 5g/unit", diff --git a/data/json/items/resources/misc.json b/data/json/items/resources/misc.json index 6624a3e35589f..780e5afd207b3 100644 --- a/data/json/items/resources/misc.json +++ b/data/json/items/resources/misc.json @@ -65,8 +65,7 @@ "id": "incendiary", "type": "AMMO", "category": "chems", - "name": "incendiary", - "name_plural": "incendiaries", + "name": { "str": "incendiary", "str_pl": "incendiaries" }, "description": "Material from an incendiary round, useful in constructing incendiary ammunition.", "weight": "2 g", "volume": "500 ml", @@ -114,8 +113,7 @@ "id": "fuse", "type": "AMMO", "category": "spare_parts", - "name": "fuse", - "name_plural": "fuse", + "name": { "str": "fuse", "str_pl": "fuse" }, "description": "A piece of fuse, long enough to give you enough time to get away from most explosions.", "weight": "6 g", "volume": "80 ml", diff --git a/data/json/items/resources/tailoring.json b/data/json/items/resources/tailoring.json index 9e6d2b13d16c8..75ba44bd4590f 100644 --- a/data/json/items/resources/tailoring.json +++ b/data/json/items/resources/tailoring.json @@ -18,8 +18,7 @@ "id": "scrap_faux_fur", "copy-from": "scrap_cotton", "type": "AMMO", - "name": "faux fur scraps", - "name_plural": "faux fur scraps", + "name": { "str": "faux fur scraps", "str_pl": "faux fur scraps" }, "description": "Oddly-shaped smallish bits of faux fur, waste material from tailoring projects. Not useful for much and usually disposed of.", "price": 0, "material": "faux_fur" @@ -28,8 +27,7 @@ "id": "scrap_felt", "copy-from": "scrap_cotton", "type": "AMMO", - "name": "felt scraps", - "name_plural": "felt scraps", + "name": { "str": "felt scraps", "str_pl": "felt scraps" }, "description": "Oddly-shaped smallish bits of felt, waste material from tailoring projects. Not useful for much and usually disposed of, but can be recycled into some wool fiber if you really want.", "material": "wool" }, @@ -37,8 +35,7 @@ "id": "scrap_fur", "copy-from": "scrap_cotton", "type": "AMMO", - "name": "fur scraps", - "name_plural": "fur scraps", + "name": { "str": "fur scraps", "str_pl": "fur scraps" }, "description": "Oddly-shaped smallish bits of fur, waste material from tailoring projects. Not useful for much and usually disposed of.", "price": 0, "material": "fur" From 7404a1ec5ed94141363df066d2d643a29384848c Mon Sep 17 00:00:00 2001 From: snipercup <50166150+snipercup@users.noreply.github.com> Date: Tue, 11 Feb 2020 07:12:03 +0100 Subject: [PATCH 11/12] Gun name to object (#37903) --- data/json/items/gun/22.json | 3 +-- data/json/items/gun/300.json | 3 +-- data/json/items/gun/308.json | 9 +++------ data/json/items/gun/40.json | 3 +-- data/json/items/gun/40x46mm.json | 3 +-- data/json/items/gun/44.json | 3 +-- data/json/items/gun/45.json | 3 +-- data/json/items/gun/460.json | 6 ++---- data/json/items/gun/50.json | 3 +-- data/json/items/gun/66mm.json | 3 +-- data/json/items/gun/9mm.json | 9 +++------ data/json/items/gun/shot.json | 6 ++---- data/json/items/ranged/launchers.json | 3 +-- 13 files changed, 19 insertions(+), 38 deletions(-) diff --git a/data/json/items/gun/22.json b/data/json/items/gun/22.json index 77d8e7952bb4e..c3d461cbc8dbb 100644 --- a/data/json/items/gun/22.json +++ b/data/json/items/gun/22.json @@ -44,8 +44,7 @@ "looks_like": "ar15", "type": "GUN", "reload_noise_volume": 10, - "name": "Marlin 39A", - "name_plural": "Marlin 39A", + "name": { "str": "Marlin 39A", "str_pl": "Marlin 39A" }, "description": "The oldest and longest-produced shoulder firearm in the world. Though it fires the weak .22 round, it is highly accurate and damaging, and has essentially no recoil.", "weight": "2948 g", "volume": "2500 ml", diff --git a/data/json/items/gun/300.json b/data/json/items/gun/300.json index 7b0123db67dbb..1be4c8474b984 100644 --- a/data/json/items/gun/300.json +++ b/data/json/items/gun/300.json @@ -4,8 +4,7 @@ "copy-from": "rifle_base", "looks_like": "ar15", "type": "GUN", - "name": "M2010 ESR", - "name_plural": "M2010 ESR", + "name": { "str": "M2010 ESR", "str_pl": "M2010 ESR" }, "//": "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": "5500 g", diff --git a/data/json/items/gun/308.json b/data/json/items/gun/308.json index cadff9b57a87d..f1eea5aa35c19 100644 --- a/data/json/items/gun/308.json +++ b/data/json/items/gun/308.json @@ -28,8 +28,7 @@ "copy-from": "rifle_auto", "looks_like": "ar15", "type": "GUN", - "name": "H&K G3", - "name_plural": "H&K G3", + "name": { "str": "H&K G3", "str_pl": "H&K G3" }, "description": "An early battle rifle developed after the end of WWII. The G3 is designed to unload large amounts of deadly ammunition, but it is less suitable over long ranges.", "weight": "4380 g", "volume": "2 L", @@ -106,8 +105,7 @@ "copy-from": "rifle_semi", "looks_like": "ar15", "type": "GUN", - "name": "M1A", - "name_plural": "M1A", + "name": { "str": "M1A", "str_pl": "M1A" }, "description": "The child of the M1 Garand World War 2 rifle, the M1A is a semi-automatic variant of the M14, favored for its accuracy and modular use.", "weight": "4230 g", "volume": "2250 ml", @@ -297,8 +295,7 @@ "copy-from": "rifle_manual", "looks_like": "ar15", "type": "GUN", - "name": "M24", - "name_plural": "M24", + "name": { "str": "M24", "str_pl": "M24" }, "description": "The M24 Sniper is the military and police version of the Remington Model 700 rifle, M24 being the model name assigned by the United States Army after adoption as their standard sniper rifle in 1988. The M24 is referred to as a 'weapon system' because it consists of not only a rifle, but also a detachable telescopic sight and other accessories.", "weight": "5000 g", "volume": "2750 ml", diff --git a/data/json/items/gun/40.json b/data/json/items/gun/40.json index e6eb6a65338e3..7f813721c6518 100644 --- a/data/json/items/gun/40.json +++ b/data/json/items/gun/40.json @@ -119,8 +119,7 @@ "copy-from": "smg_base", "looks_like": "hk_mp5", "type": "GUN", - "name": "Luty SMG: .40 S&W", - "name_plural": "Luty SMGs: .40 S&W", + "name": { "str": "Luty SMG: .40 S&W", "str_pl": "Luty SMGs: .40 S&W" }, "description": "A Luty pattern makeshift smoothbore SMG crudely constructed out of various steel parts using some of the more advanced powered hand tools; likely one of the most complex guns that are feasible to make outside of a machine shop, but still very unreliable. This one is chambered for .40 S&W cartridges and accepts custom-made makeshift magazines.", "//": "Crafting recipe must make use of angle grinder, bench grinder, set square and vise, which don't yet exist in game. No factory mags until UMP40, mp5/40, or other straight .40 mags are implemented.", "weight": "3274 g", diff --git a/data/json/items/gun/40x46mm.json b/data/json/items/gun/40x46mm.json index 874812eddda57..3688851e823b8 100644 --- a/data/json/items/gun/40x46mm.json +++ b/data/json/items/gun/40x46mm.json @@ -83,8 +83,7 @@ "copy-from": "launcher_base", "looks_like": "m79", "type": "GUN", - "name": "Milkor MGL", - "name_plural": "Milkor MGL", + "name": { "str": "Milkor MGL", "str_pl": "Milkor MGL" }, "description": "The Milkor Multi-Grenade Launcher is designed to compensate for the drawback of single-shot grenade launchers by allowing sustained heavy firepower. However, it is still slow to reload and must be used with careful planning.", "weight": "5300 g", "volume": "2250 ml", diff --git a/data/json/items/gun/44.json b/data/json/items/gun/44.json index 3cf65f637f162..716c11e724cd8 100644 --- a/data/json/items/gun/44.json +++ b/data/json/items/gun/44.json @@ -42,8 +42,7 @@ "copy-from": "rifle_manual", "looks_like": "ar15", "type": "GUN", - "name": "Henry Big Boy .44", - "name_plural": "Henry Big Boy .44", + "name": { "str": "Henry Big Boy .44", "str_pl": "Henry Big Boy .44" }, "description": "This fine lever action rifle is chambered in the powerful .44 magnum cartridge and features a sleek octagonal barrel with a tube fed magazine. Go get 'em cowboy!", "weight": "3937 g", "volume": "3 L", diff --git a/data/json/items/gun/45.json b/data/json/items/gun/45.json index ee010fc2eb2b2..be1351421502a 100644 --- a/data/json/items/gun/45.json +++ b/data/json/items/gun/45.json @@ -198,8 +198,7 @@ "copy-from": "smg_base", "looks_like": "hk_mp5", "type": "GUN", - "name": "Luty SMG: .45", - "name_plural": "Luty SMGs: .45", + "name": { "str": "Luty SMG: .45", "str_pl": "Luty SMGs: .45" }, "description": "A Luty pattern makeshift smoothbore SMG crudely constructed out of various steel parts using some of the more advanced powered hand tools; likely one of the most complex guns that are feasible to make outside of a machine shop, but still very unreliable. This one is chambered for .45 ACP cartridges and accepts MAC-10 compatible magazines.", "//": "Crafting recipe must make use of angle grinder, bench grinder, set square and vise, which don't yet exist in game.", "weight": "3274 g", diff --git a/data/json/items/gun/460.json b/data/json/items/gun/460.json index 43f10639246e3..c72c9bf055c2c 100644 --- a/data/json/items/gun/460.json +++ b/data/json/items/gun/460.json @@ -29,8 +29,7 @@ "copy-from": "pistol_revolver", "looks_like": "sw_619", "type": "GUN", - "name": "L2031 Enforcer", - "name_plural": "L2031 Enforcer", + "name": { "str": "L2031 Enforcer", "str_pl": "L2031 Enforcer" }, "//": "Real-life Autorevolvers tended to vary between 6-7.5 inch barrels, so we'll err on the side of a +1 here.", "description": "An \"autorevolver\", this Leadworks LLC six-shooter combines the ease-of-action of a semi-auto with the ease-of-reloading and style of a revolver. In addition to ubiquitous .45 ACP, the Enforcer also fires powerful .460 Rowland, offering .44 Magnum performance in a smaller package. It achieved overnight stardom when it appeared in \"Treasure Trail\", a popular space-Western series. Comes with built in holographic and laser sights. Similar to other Leadworks products it doesn't accept third-party modifications.", "weight": "1370 g", @@ -63,8 +62,7 @@ "looks_like": "sw_619", "type": "GUN", "reload_noise_volume": 10, - "name": "L1820 Long Ranger", - "name_plural": "L1820 Long Ranger", + "name": { "str": "L1820 Long Ranger", "str_pl": "L1820 Long Ranger" }, "//": "If it's based off the Winchester 94, it's likely got a 20 inch barrel. For sanity's sake though, let's cap it at +4.", "description": "The Leadworks Long Ranger was designed to give Enforcer users (or anyone using .460/.45 caliber cartridges) a little extra reach while using the same ammunition. Loaded with powerful .460 Rowland ammunition, this rifle offers a competitive replacement to the AR-15 in politically restrictive climates, but was met with disgust from lever action purists because of its synthetic furniture and built in holographic and laser sights. Similar to other Leadworks products it doesn't accept third-party modifications.", "weight": "4175 g", diff --git a/data/json/items/gun/50.json b/data/json/items/gun/50.json index 6190f254559ad..ec9a23ecce7ed 100644 --- a/data/json/items/gun/50.json +++ b/data/json/items/gun/50.json @@ -29,8 +29,7 @@ "copy-from": "gun_base", "looks_like": "ar15", "type": "GUN", - "name": "M2HB Browning HMG", - "name_plural": "M2HB Browning HMG", + "name": { "str": "M2HB Browning HMG", "str_pl": "M2HB Browning HMG" }, "description": "A heavy machine gun used by the US Military from its inception to the Cataclysm, and even rarely by Cataclysm survivors. Its massive size and design make it impossible to use unless deployed or mounted to a vehicle.", "weight": "38000 g", "volume": "5 L", diff --git a/data/json/items/gun/66mm.json b/data/json/items/gun/66mm.json index 80d5c0b625ab5..44e0fefaf0fb8 100644 --- a/data/json/items/gun/66mm.json +++ b/data/json/items/gun/66mm.json @@ -5,8 +5,7 @@ "type": "GUN", "symbol": "(", "color": "dark_gray", - "name": "M202A1 FLASH", - "name_plural": "M202A1 FLASH", + "name": { "str": "M202A1 FLASH", "str_pl": "M202A1 FLASH" }, "description": "An American rocket launcher designed in the 1970s to replace WW2 era flamethrowers still in use in Vietnam. It has four barrels sharing the 66mm caliber of the M72 LAW.", "price": 2900000, "material": "steel", diff --git a/data/json/items/gun/9mm.json b/data/json/items/gun/9mm.json index 9ef423b0b70c9..7b2a0d1eeed99 100644 --- a/data/json/items/gun/9mm.json +++ b/data/json/items/gun/9mm.json @@ -245,8 +245,7 @@ "looks_like": "hk_mp5", "type": "GUN", "reload_noise_volume": 10, - "name": "Kel-Tec SUB-2000", - "name_plural": "Kel-Tec SUB-2000", + "name": { "str": "Kel-Tec SUB-2000", "str_pl": "Kel-Tec SUB-2000" }, "description": "A uniquely designed pistol caliber carbine with an integral folding stock and that makes use of 9x19mm Glock magazines.", "weight": "1930 g", "volume": "1750 ml", @@ -286,8 +285,7 @@ "copy-from": "l_enforcer_45", "looks_like": "sw_619", "type": "GUN", - "name": "L2032 Lookout", - "name_plural": "L2032 Lookout", + "name": { "str": "L2032 Lookout", "str_pl": "L2032 Lookout" }, "description": "After the Enforcer's success, Leadworks LLC reworked their autorevolver design to cater to the 9x19mm market. The Lookout takes advantage of the smaller 9x19mm to hold a seventh round, without sacrificing the ease of handling or reloading the Enforcer made legendary. Comes with built in holographic and laser sights. Similar to other Leadworks products it doesn't accept third-party modifications.", "ammo": "9mm", "clip_size": 7, @@ -408,8 +406,7 @@ "copy-from": "smg_base", "looks_like": "hk_mp5", "type": "GUN", - "name": "Luty SMG: 9x19mm", - "name_plural": "Luty SMGs: 9x19mm", + "name": { "str": "Luty SMG: 9x19mm", "str_pl": "Luty SMGs: 9x19mm" }, "description": "A Luty pattern makeshift smoothbore SMG crudely constructed out of various steel parts using some of the more advanced powered hand tools; likely one of the most complex guns that are feasible to make outside of a machine shop, but still very unreliable. This one is chambered for 9x19mm cartridges and accepts STEN compatible magazines.", "//": "Crafting recipe must make use of angle grinder, bench grinder, set square and vise, which don't yet exist in game.", "weight": "3274 g", diff --git a/data/json/items/gun/shot.json b/data/json/items/gun/shot.json index 7a0312df708cc..627c7857a2441 100644 --- a/data/json/items/gun/shot.json +++ b/data/json/items/gun/shot.json @@ -78,8 +78,7 @@ "copy-from": "shotgun_pump", "looks_like": "remington_870", "type": "GUN", - "name": "Kel-Tec KSG", - "name_plural": "Kel-Tec KSG", + "name": { "str": "Kel-Tec KSG", "str_pl": "Kel-Tec KSG" }, "description": "A bullpup pump-action shotgun, the Kel-Tec KSG uses a pair of magazine tubes to increase its capacity. Each tube has to be loaded separately, but this offers the option of loading different ammunition for different situations.", "weight": "1550 g", "volume": "4784 ml", @@ -112,8 +111,7 @@ "copy-from": "shotgun_base", "looks_like": "remington_870", "type": "GUN", - "name": "M1014 shotgun", - "name_plural": "M1014 shotguns", + "name": { "str": "M1014 shotgun" }, "description": "Benelli's first gas-operated shotgun, featuring dual pistons for enhanced reliability with various loads and a collapsible buttstock that reduces length by almost 8 inches. Adopted in 1999 as the M1014 Joint Service Combat Shotgun, the Benelli M4 is one of the finest combat shotguns available.", "weight": "3550 g", "volume": "2500 ml", diff --git a/data/json/items/ranged/launchers.json b/data/json/items/ranged/launchers.json index 73452351d4bc2..c758cb41c0ef7 100644 --- a/data/json/items/ranged/launchers.json +++ b/data/json/items/ranged/launchers.json @@ -5,8 +5,7 @@ "looks_like": "m79", "symbol": "(", "color": "green", - "name": "M72 LAW", - "name_plural": "M72 LAW", + "name": { "str": "M72 LAW", "str_pl": "M72 LAW" }, "description": "A disposable light anti-tank rocket launcher. Once fired, it cannot be reloaded and must be disposed of.", "price": 200000, "//": "A tube with a lever. Unsurprisingly, dirt cheap (at least for a rocket launcher).", From 4ab395e8a1c58478b224e165b73aacde15459424 Mon Sep 17 00:00:00 2001 From: curstwist <39442864+curstwist@users.noreply.github.com> Date: Tue, 11 Feb 2020 01:30:34 -0500 Subject: [PATCH 12/12] Add houses for existing basements (#37902) * add houses for existing basements * Update house30.json --- data/json/mapgen/basement/basement_chem.json | 12 +- data/json/mapgen/basement/basement_meth.json | 120 +++++++++--------- .../mapgen/basement/basement_survival.json | 83 ++++++------ data/json/mapgen/basement/basement_weed.json | 7 +- data/json/mapgen/house/house26.json | 90 +++++++++++++ data/json/mapgen/house/house27.json | 90 +++++++++++++ data/json/mapgen/house/house28.json | 93 ++++++++++++++ data/json/mapgen/house/house29.json | 93 ++++++++++++++ data/json/mapgen/house/house30.json | 89 +++++++++++++ .../overmap/multitile_city_buildings.json | 50 ++++++++ .../overmap_terrain_residential.json | 110 ++++++++++++++++ data/json/regional_map_settings.json | 5 + 12 files changed, 730 insertions(+), 112 deletions(-) create mode 100644 data/json/mapgen/house/house26.json create mode 100644 data/json/mapgen/house/house27.json create mode 100644 data/json/mapgen/house/house28.json create mode 100644 data/json/mapgen/house/house29.json create mode 100644 data/json/mapgen/house/house30.json diff --git a/data/json/mapgen/basement/basement_chem.json b/data/json/mapgen/basement/basement_chem.json index 7f8132666ab1f..2d03a8496316c 100644 --- a/data/json/mapgen/basement/basement_chem.json +++ b/data/json/mapgen/basement/basement_chem.json @@ -2,10 +2,10 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "basement" ], + "om_terrain": [ "basement_chem" ], + "//": "matches house_29", "weight": 250, "object": { - "rotation": [ 0, 3 ], "fill_ter": "t_rock", "rows": [ " ", @@ -26,7 +26,7 @@ " |R________i| ", " |||+|++||||| ", " |W__|..| ", - " |E_R|<<| ", + " |E_R|.<| ", " |||||||| ", " ", " ", @@ -89,10 +89,10 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "basement" ], + "om_terrain": "basement_chem2", + "//": "matches house_30", "weight": 200, "object": { - "rotation": [ 0, 3 ], "fill_ter": "t_rock", "rows": [ " ", @@ -113,7 +113,7 @@ " |||||+||,,||+|||||| ", " |i,A,F|++|U__XU| ", " |D,,,T|..|U___c| ", - " |b,,hT|<<|U___c| ", + " |b,,hT|<.|U___c| ", " |b,n,T||||U_U_U| ", " ||||||| ||||||| ", " ", diff --git a/data/json/mapgen/basement/basement_meth.json b/data/json/mapgen/basement/basement_meth.json index d7d10b9ced476..74124ce556469 100644 --- a/data/json/mapgen/basement/basement_meth.json +++ b/data/json/mapgen/basement/basement_meth.json @@ -2,34 +2,34 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "basement" ], + "om_terrain": [ "basement_meth" ], + "//": "linked to house_27.", "weight": 20, "object": { - "rotation": [ 0, 3 ], "fill_ter": "t_rock", "rows": [ " ", " ", " ", " ", - " |||||||||||||| ", - " |D.YY+D|rr__d| ", - " |##YY+D|____w| ", - " |##YY|||x||||||||", - " |D...+....YYYYYY|", - " |||+||....YYYYYY|", - " |&..b|....YYYYYY|", - " |....+..|||||||||", - " |Scci|..Bx__R|pu|", - " ||||||..B|l__|_n|", - " |..<|||+|+||", - " |..<||O___0|", - " |..|||O___0|", - " |..B||A___I|", - " |+||||f___o|", - " |__F||0___0|", - " |r_W||rrrr0|", - " ||||||||||||", + " %%%%%%%%%%%%%% ", + " %D.YY+D|rr__d% ", + " %##YY+D|____w% ", + " %##YY|||x||||%%%%", + " %D...+....YYYYYY%", + " %||+||....YYYYYY%", + " %&..b|....YYYYYY%", + " %....+..||||||||%", + " %Scci|..Bx__R|pu%", + " %%%%%%..B|l__|_n%", + " %..<|||+|+|%", + " %...||O___0%", + " %..|||O___0%", + " %..B||A___I%", + " %+||||f___o%", + " %__F||0___0%", + " %r_W||rrrr0%", + " %%%%%%%%%%%%", " ", " " ], @@ -114,34 +114,34 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "basement" ], + "om_terrain": [ "basement_meth" ], + "//": "linked to house_27.", "weight": 250, "object": { - "rotation": [ 0, 3 ], "fill_ter": "t_rock", "rows": [ " ", " ", " ", " ", - " |||||||||||||||||", - " |DYYY+D|rr__d|TT|", - " |##YY+D|____w|..|", - " |##YY|||+|||||+||", - " |D...+...YYYYYYY|", - " |||+||...YYYYYYY|", - " |&...|...YYYYYYY|", - " |....+..|||||||||", - " |Scci|..B| ", - " ||||||..B| ", - " |..<| ", - " |..<| ", - " |..|| ", - " |..B| ", - " |+||| ", - " |__F| ", - " |r_W| ", - " ||||| ", + " %%%%%%%%%%%%%%%%%", + " %DYYY+D|rr__d|TT%", + " %##YY+D|____w|..%", + " %##YY|||+|||||+|%", + " %D...+...YYYYYYY%", + " %||+||...YYYYYYY%", + " %&...|...YYYYYYY%", + " %....+..|%%%%%%%%", + " %Scci|..B% ", + " %%%%%%..B% ", + " %..<% ", + " %...% ", + " %..%% ", + " %..B% ", + " %+||% ", + " %__F% ", + " %r_W% ", + " %%%%% ", " ", " " ], @@ -172,34 +172,34 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "basement" ], + "om_terrain": [ "basement_meth" ], + "//": "linked to house_27.", "weight": 250, "object": { - "rotation": [ 0, 3 ], "fill_ter": "t_rock", "rows": [ " ", " ", " ", " ", - " |||||||||||||||||", - " |DYYY+D|rr__d|TT|", - " |##YY+D|____w|..|", - " |##YY|||+|||||+||", - " |D...+...YYYYYYY|", - " |||+||...YYYYYYY|", - " |&...|...YYYYYYY|", - " |....+..|||||||||", - " |Scci|........T| ", - " ||||||........T| ", - " |..<|....t| ", - " |..<|....t| ", - " |..||YY.TB| ", - " |..B||||||| ", - " |+||| ", - " |__F| ", - " |r_W| ", - " ||||| ", + " %%%%%%%%%%%%%%%%%", + " %DYYY+D|rr__d|TT%", + " %##YY+D|____w|..%", + " %##YY|||+|||||+|%", + " %D...+...YYYYYYY%", + " %||+||...YYYYYYY%", + " %&...|...YYYYYYY%", + " %....+..|||||||%%", + " %Scci|........T% ", + " %%%%%%........T% ", + " %..<|....t% ", + " %...|....t% ", + " %..||YY.TB% ", + " %..B%%%%%%% ", + " %+||% ", + " %__F% ", + " %r_W% ", + " %%%%% ", " ", " " ], diff --git a/data/json/mapgen/basement/basement_survival.json b/data/json/mapgen/basement/basement_survival.json index a5fdf408baf6a..145cb64b24ff7 100644 --- a/data/json/mapgen/basement/basement_survival.json +++ b/data/json/mapgen/basement/basement_survival.json @@ -17,12 +17,13 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "basement" ], - "weight": 250, + "om_terrain": [ "basement_survival" ], + "//": "matches house_26", "object": { "fill_ter": "t_rock", - "rotation": [ 0, 3 ], "rows": [ + " ", + " ", " -------------------- ", " |######....ccgf...{| ", " |#................{| ", @@ -33,19 +34,17 @@ " |............|.......| ", " |sssss.s|{..{|dbb.bbd| ", " |.......|{..{|-------| ", - " |X...xXX|{..{|...| ", - " |Xx....X|{...+..t| ", + " |X...xXX|{..{|..t| ", + " |Xx....X|{...+...| ", " |XX..xXX|{..{|k..| ", " |XXx..X.|{..{|------ ", " |X......|----|....<| ", - " |-|...............<| ", + " |-|................| ", " |---..........|--| ", " |----------| ", " ", " ", " ", - " ", - " ", " " ], "terrain": { @@ -89,56 +88,56 @@ "toilets": { "t": { } }, "place_liquids": [ { "liquid": "water", "x": [ 4, 15 ], "y": [ 14, 15 ], "repeat": 3 } ], "place_loot": [ - { "group": "basement_survival_last_stand_casing", "x": 2, "y": 6, "chance": 20, "repeat": [ 1, 10 ] }, - { "group": "basement_survival_last_stand_casing", "x": 3, "y": 6, "chance": 20, "repeat": [ 1, 10 ] }, - { "group": "basement_survival_last_stand_casing", "x": 4, "y": 6, "chance": 20, "repeat": [ 1, 10 ] }, - { "group": "basement_survival_last_stand_casing", "x": 5, "y": 7, "chance": 20, "repeat": [ 1, 10 ] }, - { "group": "basement_survival_last_stand_casing", "x": 2, "y": 7, "chance": 20, "repeat": [ 1, 10 ] }, - { "group": "basement_survival_last_stand_casing", "x": 3, "y": 7, "chance": 20, "repeat": [ 1, 10 ] }, - { "group": "basement_survival_last_stand_casing", "x": 4, "y": 7, "chance": 20, "repeat": [ 1, 10 ] }, - { "group": "basement_survival_last_stand_casing", "x": 5, "y": 7, "chance": 20, "repeat": [ 1, 10 ] }, - { "group": "basement_survival_last_stand", "x": [ 3, 4 ], "y": 7, "chance": 100 }, - { "group": "tools_common", "x": [ 3, 7 ], "y": 1, "chance": 100 }, - { "group": "tools_entry", "x": [ 3, 7 ], "y": 1, "chance": 50 }, + { "group": "basement_survival_last_stand_casing", "x": 2, "y": 8, "chance": 20, "repeat": [ 1, 10 ] }, + { "group": "basement_survival_last_stand_casing", "x": 3, "y": 8, "chance": 20, "repeat": [ 1, 10 ] }, + { "group": "basement_survival_last_stand_casing", "x": 4, "y": 8, "chance": 20, "repeat": [ 1, 10 ] }, + { "group": "basement_survival_last_stand_casing", "x": 5, "y": 9, "chance": 20, "repeat": [ 1, 10 ] }, + { "group": "basement_survival_last_stand_casing", "x": 2, "y": 9, "chance": 20, "repeat": [ 1, 10 ] }, + { "group": "basement_survival_last_stand_casing", "x": 3, "y": 9, "chance": 20, "repeat": [ 1, 10 ] }, + { "group": "basement_survival_last_stand_casing", "x": 4, "y": 9, "chance": 20, "repeat": [ 1, 10 ] }, + { "group": "basement_survival_last_stand_casing", "x": 5, "y": 9, "chance": 20, "repeat": [ 1, 10 ] }, + { "group": "basement_survival_last_stand", "x": [ 3, 4 ], "y": 9, "chance": 100 }, + { "group": "tools_common", "x": [ 3, 7 ], "y": 3, "chance": 100 }, + { "group": "tools_entry", "x": [ 3, 7 ], "y": 3, "chance": 50 }, { "item": "fire_ax", "x": 2, "y": 2, "chance": 25 }, - { "item": "2x4", "x": [ 4, 7 ], "y": [ 3, 4 ], "chance": 100, "repeat": [ 2, 4 ] }, - { "item": "log", "x": [ 4, 7 ], "y": [ 3, 4 ], "chance": 100, "repeat": [ 1, 2 ] }, - { "group": "misc_smoking", "x": 21, "y": 6, "chance": 75 }, - { "group": "kitchen", "x": [ 11, 13 ], "y": 5, "chance": 100 }, - { "group": "cannedfood", "x": 10, "y": 8, "chance": 75 }, - { "group": "cannedfood", "x": 10, "y": 9, "chance": 75 }, + { "item": "2x4", "x": [ 4, 7 ], "y": [ 5, 6 ], "chance": 100, "repeat": [ 2, 4 ] }, + { "item": "log", "x": [ 4, 7 ], "y": [ 5, 6 ], "chance": 100, "repeat": [ 1, 2 ] }, + { "group": "misc_smoking", "x": 21, "y": 8, "chance": 75 }, + { "group": "kitchen", "x": [ 11, 13 ], "y": 7, "chance": 100 }, { "group": "cannedfood", "x": 10, "y": 10, "chance": 75 }, { "group": "cannedfood", "x": 10, "y": 11, "chance": 75 }, { "group": "cannedfood", "x": 10, "y": 12, "chance": 75 }, { "group": "cannedfood", "x": 10, "y": 13, "chance": 75 }, - { "group": "fridge", "x": 15, "y": 1, "chance": 80, "repeat": [ 1, 3 ] }, - { "group": "book_survival", "x": 15, "y": 5, "chance": 90 }, - { "group": "book_survival", "x": 15, "y": 6, "chance": 30 }, - { "group": "gear_survival", "x": 13, "y": 8, "chance": 75 }, - { "group": "gear_survival", "x": 13, "y": 9, "chance": 75 }, + { "group": "cannedfood", "x": 10, "y": 14, "chance": 75 }, + { "group": "cannedfood", "x": 10, "y": 15, "chance": 75 }, + { "group": "fridge", "x": 14, "y": 2, "chance": 80, "repeat": [ 1, 3 ] }, + { "group": "book_survival", "x": 15, "y": 7, "chance": 90 }, + { "group": "book_survival", "x": 15, "y": 8, "chance": 30 }, { "group": "gear_survival", "x": 13, "y": 10, "chance": 75 }, + { "group": "gear_survival", "x": 13, "y": 11, "chance": 75 }, { "group": "gear_survival", "x": 13, "y": 12, "chance": 75 }, - { "group": "gear_survival", "x": 13, "y": 13, "chance": 75 }, + { "group": "gear_survival", "x": 13, "y": 14, "chance": 75 }, + { "group": "gear_survival", "x": 13, "y": 15, "chance": 75 }, { "group": "guns_survival", "x": 19, - "y": [ 1, 2 ], + "y": [ 3, 4 ], "chance": 100, "repeat": [ 1, 2 ], "ammo": 75, "magazine": 100 }, - { "group": "ammo_reloaded", "x": 19, "y": 3, "chance": 100, "repeat": [ 1, 3 ], "magazine": 100 }, - { "group": "guns_pistol_common", "x": 15, "y": 8, "chance": 30, "ammo": 75, "magazine": 100 }, - { "group": "guns_pistol_common", "x": 21, "y": 8, "chance": 30, "ammo": 75, "magazine": 100 }, - { "group": "clothing_outdoor_set", "x": 15, "y": 8, "chance": 30 }, - { "group": "clothing_outdoor_set", "x": 21, "y": 8, "chance": 30 }, - { "item": "blanket", "x": 16, "y": 8, "chance": 30 }, - { "item": "blanket", "x": 20, "y": 8, "chance": 30 }, - { "item": "pillow", "x": 16, "y": 8, "chance": 30 }, - { "item": "pillow", "x": 20, "y": 8, "chance": 30 } + { "group": "ammo_reloaded", "x": 19, "y": 5, "chance": 100, "repeat": [ 1, 3 ], "magazine": 100 }, + { "group": "guns_pistol_common", "x": 15, "y": 10, "chance": 30, "ammo": 75, "magazine": 100 }, + { "group": "guns_pistol_common", "x": 21, "y": 10, "chance": 30, "ammo": 75, "magazine": 100 }, + { "group": "clothing_outdoor_set", "x": 15, "y": 10, "chance": 30 }, + { "group": "clothing_outdoor_set", "x": 21, "y": 10, "chance": 30 }, + { "item": "blanket", "x": 16, "y": 10, "chance": 30 }, + { "item": "blanket", "x": 20, "y": 10, "chance": 30 }, + { "item": "pillow", "x": 16, "y": 10, "chance": 30 }, + { "item": "pillow", "x": 20, "y": 10, "chance": 30 } ], - "place_monsters": [ { "monster": "GROUP_PREPPER_HOUSE", "x": [ 2, 10 ], "y": [ 4, 7 ], "chance": 2 } ] + "place_monsters": [ { "monster": "GROUP_PREPPER_HOUSE", "x": [ 2, 10 ], "y": [ 6, 9 ], "chance": 2 } ] } } ] diff --git a/data/json/mapgen/basement/basement_weed.json b/data/json/mapgen/basement/basement_weed.json index 5b428d917d6c5..80e52254b9411 100644 --- a/data/json/mapgen/basement/basement_weed.json +++ b/data/json/mapgen/basement/basement_weed.json @@ -12,10 +12,9 @@ { "type": "mapgen", "method": "json", - "om_terrain": [ "basement" ], - "weight": 250, + "om_terrain": [ "basement_weed" ], + "//": "matches house_28", "object": { - "rotation": [ 0, 3 ], "fill_ter": "t_rock", "rows": [ " ", @@ -36,7 +35,7 @@ " ||||||||__|||| ", " |++| ", " |..| ", - " |<<| ", + " |.<| ", " |||| ", " ", " ", diff --git a/data/json/mapgen/house/house26.json b/data/json/mapgen/house/house26.json new file mode 100644 index 0000000000000..6f86ac754a18e --- /dev/null +++ b/data/json/mapgen/house/house26.json @@ -0,0 +1,90 @@ +[ + { + "method": "json", + "om_terrain": "house_26", + "//": "used by basement_survival", + "type": "mapgen", + "weight": 100, + "object": { + "fill_ter": "t_floor", + "rows": [ + "......p`................", + "....%%```%%....%%%......", + ".###oo#*#oo#####o####...", + ".#TE L R RRR#...", + ".#x H hro...", + ".#x lH yP r#...", + ".#x H |||+||###.", + ".o |y T#.", + ".# AAA A |D @@o.", + ".#JJJJJJJ 6|d @@o.", + ".o4 6|TEs I#.", + ".#F12357OY ||||#####.", + ".#|||||||||| |QBB#^....", + ".oI T@@ + +--8o.....", + ".oIh @@ | |t-S#.....", + ".#|| Ey| ||||###...", + ".#D+ |||||| RRR >#...", + ".###db|U |y y#...", + "...####U + EsET ####...", + ".....^###o#oo#o###......", + "........................", + "........................", + "........................", + "........................" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "]": "t_wall_glass", + "-": "t_linoleum_white", + "Q": "t_linoleum_white", + "8": "t_linoleum_white", + "B": "t_linoleum_white", + "S": "t_linoleum_white", + "9": "t_linoleum_white", + "t": "t_linoleum_white" + }, + "furniture": { "!": "f_region_flower" } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_26_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " 22222222222222222223 ", + " |..................3 ", + " |..................3 ", + " |..................3 ", + " |.....:............323 ", + " |....................3 ", + " |.............N......3 ", + " |....................3 ", + " |......X.............3 ", + " |................5---3 ", + " |................3 ", + " |................3 ", + " |................3 ", + " |.........=.&....323 ", + " |..................3 ", + " |-|................3 ", + " |--5..........3--3 ", + " |----------3 ", + " ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } + } +] diff --git a/data/json/mapgen/house/house27.json b/data/json/mapgen/house/house27.json new file mode 100644 index 0000000000000..8cf31bc8710d9 --- /dev/null +++ b/data/json/mapgen/house/house27.json @@ -0,0 +1,90 @@ +[ + { + "method": "json", + "om_terrain": "house_27", + "//": "used by basement_meth", + "type": "mapgen", + "weight": 100, + "object": { + "fill_ter": "t_floor", + "rows": [ + "................`p......", + "..[........[....`.....[.", + ".......[........`..[....", + "...............```......", + ".......#######o#+#o##...", + ".......# xxx H| y#...", + ".......oE l H|L E#^..", + ".......# HHH ||| ####", + ".......# hN#", + ".......#72JJA R N#", + ".......o5 JA 6|||||#", + ".......o4 6|T @@#", + ".......#F1O3Y |I #", + ".......###### |Ih o", + "...........^# >| + d#", + ".........```o R|+|||||#", + ".........```+ R| y D#", + "...[.....```#|+|| b#", + "............#t-Q| o", + "............o--B| @@ d#", + "....[...[...#S8B|I@@I T#", + "............############", + "........................", + "........................" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "]": "t_wall_glass", + "-": "t_linoleum_white", + "Q": "t_linoleum_white", + "8": "t_linoleum_white", + "B": "t_linoleum_white", + "S": "t_linoleum_white", + "9": "t_linoleum_white", + "t": "t_linoleum_white" + }, + "furniture": { "!": "f_region_flower" } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_27_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " 22222222222222 ", + " |............3 ", + " |............3 ", + " |............5223", + " |...............3", + " |...............3", + " |...............3", + " |...............3", + " |...............3", + " |----5..........3", + " |..=....&..3", + " |..........3", + " |..........3", + " |......N...3", + " |..........3", + " |..........3", + " |..........3", + " |----------|", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } + } +] diff --git a/data/json/mapgen/house/house28.json b/data/json/mapgen/house/house28.json new file mode 100644 index 0000000000000..7940e5f8cac4d --- /dev/null +++ b/data/json/mapgen/house/house28.json @@ -0,0 +1,93 @@ +[ + { + "method": "json", + "om_terrain": "house_28", + "//": "used by basement_weed", + "type": "mapgen", + "weight": 100, + "object": { + "fill_ter": "t_floor", + "rows": [ + ".````````````p..........", + ".`......%%```%%.........", + ".`.....##o#*#o##.....[..", + ".`..[..#r L#........", + ".`.....or io..[.....", + ".`.....#y i#........", + ".`.##### ||#####....", + ".`.#F126 |dT I#....", + ".`.o4 | @@o....", + ".`.o5 hfh | @@#.[..", + ".`.oO hfh + o....", + ".`.#7 y| EbD#....", + ".`.#TsHHH R|+|####$;$$", + ".`.#E l R|-t#^.....$", + "$;$#y xxx R|S9#...[..$", + "$`.##o##### ####......$", + "$`..^...``# i#.........$", + "$`````````] i)......[..$", + "$..[....``)y>).........$", + "$.........#))#...[.....$", + "$...[..................$", + "$.......[...[.......[..$", + "$.[............[.......$", + "$$$$$$$$$$$$$$$$$$$$$$$$" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "$": "t_privacy_fence", + ";": "t_privacy_fencegate_c", + ")": "t_wall_glass", + "]": "t_door_glass_c", + "-": "t_linoleum_white", + "Q": "t_linoleum_white", + "8": "t_linoleum_white", + "B": "t_linoleum_white", + "S": "t_linoleum_white", + "9": "t_linoleum_white", + "t": "t_linoleum_white" + }, + "furniture": { "!": "f_region_flower" } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_28_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " 222222222 ", + " |.......3 ", + " |.......3 ", + " |...X...3 ", + " |222|.......32223 ", + " |...............3 ", + " |........&......3 ", + " |...............3 ", + " |...............3 ", + " |...N...........3 ", + " |.........=..5--3 ", + " |............3 ", + " |............3 ", + " |5-----|..3--3 ", + " |..3 ", + " |..3 ", + " |..3 ", + " |--3 ", + " ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } + } +] diff --git a/data/json/mapgen/house/house29.json b/data/json/mapgen/house/house29.json new file mode 100644 index 0000000000000..d73ffd9067533 --- /dev/null +++ b/data/json/mapgen/house/house29.json @@ -0,0 +1,93 @@ +[ + { + "method": "json", + "om_terrain": "house_29", + "//": "used by basement_chem", + "type": "mapgen", + "weight": 100, + "object": { + "fill_ter": "t_floor", + "rows": [ + "..........``p...........", + "..........``............", + "..........``.....X......", + "...`````````............", + "...`......```````````...", + "...`..%%.```..%%....`...", + "...`..####*###o###..`...", + "...`..#xxy L|@d y#..`...", + "...`..o l |@ Io..`...", + "...`..#HHH | hIo..`...", + "...`..#RRT | #..`...", + "...`.%# + ybD#$$;$$$", + "$$$;$%o hfh |||||#..`..$", + "$..`.%o hfh |QBB#..`..$", + "$..`.%# +---o..`..$", + "$..`..#5 Y|t8S#..`..$", + "$..`..#O 7#####..`..$", + "$..`..o4 6#^jj%..`..$", + "$..`..#F123 >#......`..$", + "$..`..##oo#*##..[...`..$", + "$..`.......`........`..$", + "$..``````````````````..$", + "$......................$", + "$$$$$$$$$$$$$$$$$$$$$$$$" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "$": "t_privacy_fence", + ";": "t_privacy_fencegate_c", + ")": "t_wall_glass", + "]": "t_door_glass_c", + "-": "t_linoleum_white", + "Q": "t_linoleum_white", + "8": "t_linoleum_white", + "B": "t_linoleum_white", + "S": "t_linoleum_white", + "9": "t_linoleum_white", + "t": "t_linoleum_white" + }, + "furniture": { "!": "f_region_flower" } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_29_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " |22222222223 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |......5---3 ", + " |......3 ", + " |......3 ", + " |------3 ", + " ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } + } +] diff --git a/data/json/mapgen/house/house30.json b/data/json/mapgen/house/house30.json new file mode 100644 index 0000000000000..8dd4358d469fd --- /dev/null +++ b/data/json/mapgen/house/house30.json @@ -0,0 +1,89 @@ +[ + { + "method": "json", + "om_terrain": "house_30", + "//": "used by basement_chem2", + "type": "mapgen", + "weight": 100, + "object": { + "fill_ter": "t_floor", + "rows": [ + ".......!`p..............", + ".......!`!..............", + ".......!`!......[.......", + "...[...!`!..............", + "......!```!.........[...", + "......!```!!!!!!!.......", + "......##*####ooo##......", + "......#L |R s x#...[..", + "......# |R H o......", + "......o Hl #......", + "......# |r HHHT#......", + "......# |rh y#^%%...", + "...##### ||| ||##o##..", + "...#9Qt| + y@@#..", + "...oS--+ hfh | so..", + "...##||| hfh |dbD###..", + "....#347 J|+|||||#....", + "....#2 J| d#....", + "....o1 >|E @@ o....", + "....#FO5 ####I@@ID#....", + "....###o#*#`^##o#o##....", + "........``````.!!!......", + "...u....``````.....X....", + "........................" + ], + "palettes": [ "standard_domestic_palette" ], + "terrain": { + "%": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ], + "[": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ], + "!": "t_region_groundcover_urban", + "`": "t_concrete", + "-": "t_linoleum_white", + "Q": "t_linoleum_white", + "8": "t_linoleum_white", + "B": "t_linoleum_white", + "S": "t_linoleum_white", + "9": "t_linoleum_white", + "t": "t_linoleum_white" + }, + "furniture": { "!": "f_region_flower" } + } + }, + { + "type": "mapgen", + "method": "json", + "om_terrain": "house_30_roof", + "object": { + "fill_ter": "t_shingle_flat_roof", + "rows": [ + " ", + " ", + " ", + " ", + " ", + " ", + " |22222222223 ", + " |..........3 ", + " |..........3 ", + " |..........3 ", + " |....=..&..3 ", + " |..........3 ", + " |22|...X......52223 ", + " |.................3 ", + " |.................3 ", + " ||........N.....--3 ", + " |..............3 ", + " |..............3 ", + " |..............3 ", + " |.....3--5.....3 ", + " |-----3 |-----3 ", + " ", + " ", + " " + ], + "palettes": [ "roof_palette" ], + "terrain": { ".": "t_shingle_flat_roof" } + } + } +] diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json index 8182c9023557c..bcf456650dd89 100644 --- a/data/json/overmap/multitile_city_buildings.json +++ b/data/json/overmap/multitile_city_buildings.json @@ -298,6 +298,56 @@ "locations": [ "land" ], "overmaps": [ { "point": [ 0, 0, 0 ], "overmap": "house_25_north" }, { "point": [ 0, 0, 1 ], "overmap": "house_25_roof_north" } ] }, + { + "type": "city_building", + "id": "house_26", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_26_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_26_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement_survival_north" } + ] + }, + { + "type": "city_building", + "id": "house_27", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_27_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_27_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement_meth_north" } + ] + }, + { + "type": "city_building", + "id": "house_28", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_28_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_28_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement_weed_north" } + ] + }, + { + "type": "city_building", + "id": "house_29", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_29_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_29_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement_chem_north" } + ] + }, + { + "type": "city_building", + "id": "house_30", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "house_30_north" }, + { "point": [ 0, 0, 1 ], "overmap": "house_30_roof_north" }, + { "point": [ 0, 0, -1 ], "overmap": "basement_chem2_north" } + ] + }, { "type": "city_building", "id": "house_08", diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json index bc6a42374e86b..08ba2ff2618f2 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_residential.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_residential.json @@ -1192,6 +1192,116 @@ "color": "light_green", "see_cost": 2 }, + { + "type": "overmap_terrain", + "id": "house_26", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_26_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "basement_survival", + "copy-from": "generic_city_house_basement" + }, + { + "type": "overmap_terrain", + "id": "house_27", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_27_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "basement_meth", + "copy-from": "generic_city_house_basement" + }, + { + "type": "overmap_terrain", + "id": "house_28", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_28_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "basement_weed", + "copy-from": "generic_city_house_basement" + }, + { + "type": "overmap_terrain", + "id": "house_29", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_29_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "basement_chem", + "copy-from": "generic_city_house_basement" + }, + { + "type": "overmap_terrain", + "id": "house_30", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2, + "flags": [ "SIDEWALK", "GENERIC_LOOT" ] + }, + { + "type": "overmap_terrain", + "id": "house_30_roof", + "name": "house", + "copy-from": "generic_city_building", + "color": "light_green", + "see_cost": 2 + }, + { + "type": "overmap_terrain", + "id": "basement_chem2", + "copy-from": "generic_city_house_basement" + }, { "type": "overmap_terrain", "id": "house_vacant", diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json index 6bcd99b2042d6..76bca6eeb6cf9 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -599,6 +599,11 @@ "house_23": 50, "house_24": 50, "house_25": 50, + "house_26": 50, + "house_27": 50, + "house_28": 50, + "house_29": 50, + "house_30": 50, "house_garage": 50, "house_garage2": 50, "house_garage3": 50,