From 237904a1a49413802b7795ba3b20743c0965860f Mon Sep 17 00:00:00 2001 From: Qrox Date: Sun, 29 Dec 2019 20:49:53 +0800 Subject: [PATCH 01/37] Fix box drawing characters of bitmap fonts not shown when SDL line drawing is disabled --- src/sdltiles.cpp | 96 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 75 insertions(+), 21 deletions(-) diff --git a/src/sdltiles.cpp b/src/sdltiles.cpp index bdb00e4d0372b..382e836634376 100644 --- a/src/sdltiles.cpp +++ b/src/sdltiles.cpp @@ -709,8 +709,23 @@ void CachedTTFFont::OutputChar( const std::string &ch, const int x, const int y, bool BitmapFont::isGlyphProvided( const std::string &ch ) const { - uint32_t t = UTF8_getch( ch ); - return t < 256; + const uint32_t t = UTF8_getch( ch ); + switch( t ) { + case LINE_XOXO_UNICODE: + case LINE_OXOX_UNICODE: + case LINE_XXOO_UNICODE: + case LINE_OXXO_UNICODE: + case LINE_OOXX_UNICODE: + case LINE_XOOX_UNICODE: + case LINE_XXXO_UNICODE: + case LINE_XXOX_UNICODE: + case LINE_XOXX_UNICODE: + case LINE_OXXX_UNICODE: + case LINE_XXXX_UNICODE: + return true; + default: + return t < 256; + } } void BitmapFont::OutputChar( const std::string &ch, const int x, const int y, @@ -723,25 +738,64 @@ void BitmapFont::OutputChar( const std::string &ch, const int x, const int y, void BitmapFont::OutputChar( const int t, const int x, const int y, const unsigned char color, const float opacity ) { - if( t > 256 ) { - return; - } - SDL_Rect src; - src.x = ( t % tilewidth ) * fontwidth; - src.y = ( t / tilewidth ) * fontheight; - src.w = fontwidth; - src.h = fontheight; - SDL_Rect rect; - rect.x = x; - rect.y = y; - rect.w = fontwidth; - rect.h = fontheight; - if( opacity != 1.0f ) { - SDL_SetTextureAlphaMod( ascii[color].get(), opacity * 255 ); - } - RenderCopy( renderer, ascii[color], &src, &rect ); - if( opacity != 1.0f ) { - SDL_SetTextureAlphaMod( ascii[color].get(), 255 ); + if( t <= 256 ) { + SDL_Rect src; + src.x = ( t % tilewidth ) * fontwidth; + src.y = ( t / tilewidth ) * fontheight; + src.w = fontwidth; + src.h = fontheight; + SDL_Rect rect; + rect.x = x; + rect.y = y; + rect.w = fontwidth; + rect.h = fontheight; + if( opacity != 1.0f ) { + SDL_SetTextureAlphaMod( ascii[color].get(), opacity * 255 ); + } + RenderCopy( renderer, ascii[color], &src, &rect ); + if( opacity != 1.0f ) { + SDL_SetTextureAlphaMod( ascii[color].get(), 255 ); + } + } else { + unsigned char uc = 0; + switch( t ) { + case LINE_XOXO_UNICODE: + uc = LINE_XOXO_C; + break; + case LINE_OXOX_UNICODE: + uc = LINE_OXOX_C; + break; + case LINE_XXOO_UNICODE: + uc = LINE_XXOO_C; + break; + case LINE_OXXO_UNICODE: + uc = LINE_OXXO_C; + break; + case LINE_OOXX_UNICODE: + uc = LINE_OOXX_C; + break; + case LINE_XOOX_UNICODE: + uc = LINE_XOOX_C; + break; + case LINE_XXXO_UNICODE: + uc = LINE_XXXO_C; + break; + case LINE_XXOX_UNICODE: + uc = LINE_XXOX_C; + break; + case LINE_XOXX_UNICODE: + uc = LINE_XOXX_C; + break; + case LINE_OXXX_UNICODE: + uc = LINE_OXXX_C; + break; + case LINE_XXXX_UNICODE: + uc = LINE_XXXX_C; + break; + default: + return; + } + draw_ascii_lines( uc, x, y, color ); } } From efcccf874b9be7a4c4371fd5968be52648646e67 Mon Sep 17 00:00:00 2001 From: Qrox Date: Mon, 30 Dec 2019 18:32:47 +0800 Subject: [PATCH 02/37] Fix linking error by explicitly instantiating advanced_inv_area::i_stacked --- src/advanced_inv_area.cpp | 7 +++++++ src/advanced_inv_pane.cpp | 1 + 2 files changed, 8 insertions(+) diff --git a/src/advanced_inv_area.cpp b/src/advanced_inv_area.cpp index 73349dac5cf38..2890677790bef 100644 --- a/src/advanced_inv_area.cpp +++ b/src/advanced_inv_area.cpp @@ -454,3 +454,10 @@ advanced_inv_area::itemstack advanced_inv_area::i_stacked( T items ) } return stacks; } + +// instantiate the template +template +advanced_inv_area::itemstack advanced_inv_area::i_stacked( vehicle_stack items ); + +template +advanced_inv_area::itemstack advanced_inv_area::i_stacked( map_stack items ); diff --git a/src/advanced_inv_pane.cpp b/src/advanced_inv_pane.cpp index ad0fe4b50fa73..9b8e2161d28c6 100644 --- a/src/advanced_inv_pane.cpp +++ b/src/advanced_inv_pane.cpp @@ -1,3 +1,4 @@ +#include "advanced_inv_area.h" #include "auto_pickup.h" #include "avatar.h" #include "cata_utility.h" From d5d1a978d687c09b4236f805fd80b3a44d1dbb2b Mon Sep 17 00:00:00 2001 From: David Brown Date: Mon, 30 Dec 2019 15:32:20 +0000 Subject: [PATCH 03/37] check for never_learn before adding candidate recipes to sdcard --- src/iuse.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/iuse.cpp b/src/iuse.cpp index fc831355d959b..43000f9555efd 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -6290,7 +6290,9 @@ static bool einkpc_download_memory_card( player &p, item &eink, item &mc ) for( const auto &e : recipe_dict ) { const auto &r = e.second; - + if( r.never_learn ) { + continue; + } if( science ) { if( r.difficulty >= 3 && one_in( r.difficulty + 1 ) ) { candidates.push_back( &r ); From a8597e04c7fdccda78a5d43dee4026b5f9684a82 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 30 Dec 2019 17:30:49 +0100 Subject: [PATCH 04/37] Use empty() method --- src/item.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/item.cpp b/src/item.cpp index 7c41ae4cbda6a..8a3e7a54bfd95 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -4037,7 +4037,7 @@ std::string item::display_name( unsigned int quantity ) const if( is_money() ) { amt = string_format( " $%.2f", amount / 100.0 ); } else { - if( ammotext != "" ) { + if( !ammotext.empty() ) { ammotext = " " + ammotext; } @@ -4047,7 +4047,7 @@ std::string item::display_name( unsigned int quantity ) const amt = string_format( " (%i%s)", amount, ammotext ); } } - } else if( ammotext != "" ) { + } else if( !ammotext.empty() ) { amt = " (" + ammotext + ")"; } From 4224568456caf294ff3118911abba1773dd32990 Mon Sep 17 00:00:00 2001 From: Valiant Date: Mon, 30 Dec 2019 20:36:27 +0400 Subject: [PATCH 05/37] Removed cooking skill requirement from makeshift pot and copper pot recipes --- data/json/recipes/other/tool.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/data/json/recipes/other/tool.json b/data/json/recipes/other/tool.json index b0af9744cae1d..db9729a4b4133 100644 --- a/data/json/recipes/other/tool.json +++ b/data/json/recipes/other/tool.json @@ -419,7 +419,6 @@ "category": "CC_OTHER", "subcategory": "CSC_OTHER_TOOLS", "skill_used": "fabrication", - "skills_required": [ "cooking", 1 ], "difficulty": 1, "time": "20 m", "reversible": true, @@ -433,7 +432,6 @@ "category": "CC_OTHER", "subcategory": "CSC_OTHER_TOOLS", "skill_used": "fabrication", - "skills_required": [ "cooking", 1 ], "difficulty": 1, "time": "20 m", "reversible": true, From 5e74d4b8c02fe3edf7fbc0ec0862383246209de1 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 30 Dec 2019 18:56:44 +0100 Subject: [PATCH 06/37] Sugar kin don't get thirst from food or drink --- data/mods/My_Sweet_Cataclysm/sweet_mutations.json | 3 ++- doc/JSON_FLAGS.md | 1 + src/character.cpp | 7 ++++++- src/player.cpp | 3 +-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json index 6677b631abd8d..70ce1bc6203b4 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json @@ -41,6 +41,7 @@ "fat_to_max_hp": 0.1, "allowed_category": [ "SUGAR" ], "no_cbm_on_bp": [ "TORSO", "HEAD", "EYES", "MOUTH", "ARM_L", "ARM_R", "HAND_L", "HAND_R", "LEG_L", "LEG_R", "FOOT_L", "FOOT_R" ], - "armor": [ { "parts": "ALL", "cut": 10, "bash": 5 } ] + "armor": [ { "parts": "ALL", "cut": 10, "bash": 5 } ], + "flags": [ "NO_THIRST" ] } ] diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index ebab90d2fffba..2175529cab17e 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -1086,6 +1086,7 @@ Also see `monster_attacks.json` for more special attacks, for example, impale an - ```UNARMED_BONUS``` You get a bonus to unarmed bash and cut damage equal to unarmed_skill/2 up to 4. - ```NEED_ACTIVE_TO_MELEE``` This mutation gives bonus to unarmed melee only if it's active. +- ```NO_THIRST``` Your thirst is not modified by food or drinks. ### Categories diff --git a/src/character.cpp b/src/character.cpp index 1858a1f3c37b5..8859fd167275f 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -3367,7 +3367,12 @@ std::pair Character::get_fatigue_description() const void Character::mod_thirst( int nthirst ) { - set_thirst( thirst + nthirst ); + for( const std::pair &mut : my_mutations ) { + if( mut.first->flags.count( "NO_THIRST" ) > 0 ) { + return; + } + } + set_thirst( std::max( -100, thirst + nthirst ) ); } void Character::set_thirst( int nthirst ) diff --git a/src/player.cpp b/src/player.cpp index 3beb518bf9891..1ded0f601e66c 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -2274,8 +2274,7 @@ void player::update_stomach( const time_point &from, const time_point &to ) // Digest nutrients in guts, they will be distributed to needs levels food_summary digested_to_body = guts.digest( *this, rates, five_mins, half_hours ); // Water from stomach skips guts and gets absorbed by body - set_thirst( std::max( - -100, get_thirst() - units::to_milliliter( digested_to_guts.water ) / 5 ) ); + mod_thirst( - units::to_milliliter( digested_to_guts.water ) / 5 ); guts.ingest( digested_to_guts ); // Apply nutrients, unless this is an NPC and NO_NPC_FOOD is enabled. if( !is_npc() || !get_option( "NO_NPC_FOOD" ) ) { From 94ed5ce4c83fdc74d4f7ba4f9bc45a3ea2e255f0 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 30 Dec 2019 19:08:08 +0100 Subject: [PATCH 07/37] Sugar kins can't get sick --- data/json/mutations/mutations.json | 3 ++- data/mods/My_Sweet_Cataclysm/sweet_mutations.json | 2 +- doc/JSON_FLAGS.md | 2 ++ src/character.cpp | 6 ++---- src/player.cpp | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index 26c235393844e..70b79ea9edc80 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -2627,7 +2627,8 @@ "points": 2, "description": "Your body is simply immune to diseases. You will never catch an ambient disease.", "prereqs": [ "DISRESISTANT" ], - "category": [ "PLANT", "SLIME", "TROGLOBITE" ] + "category": [ "PLANT", "SLIME", "TROGLOBITE" ], + "flags": [ "NO_DISEASE" ] }, { "type": "mutation", diff --git a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json index 70ce1bc6203b4..cfecbb275fa74 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json @@ -42,6 +42,6 @@ "allowed_category": [ "SUGAR" ], "no_cbm_on_bp": [ "TORSO", "HEAD", "EYES", "MOUTH", "ARM_L", "ARM_R", "HAND_L", "HAND_R", "LEG_L", "LEG_R", "FOOT_L", "FOOT_R" ], "armor": [ { "parts": "ALL", "cut": 10, "bash": 5 } ], - "flags": [ "NO_THIRST" ] + "flags": [ "NO_THIRST", "NO_DISEASE" ] } ] diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index 2175529cab17e..fbab96e2a6353 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -1086,8 +1086,10 @@ Also see `monster_attacks.json` for more special attacks, for example, impale an - ```UNARMED_BONUS``` You get a bonus to unarmed bash and cut damage equal to unarmed_skill/2 up to 4. - ```NEED_ACTIVE_TO_MELEE``` This mutation gives bonus to unarmed melee only if it's active. +- ```NO_DISEASE``` This mutation grants immunity to disease. - ```NO_THIRST``` Your thirst is not modified by food or drinks. + ### Categories These branches are also the valid entries for the categories of `dreams` in `dreams.json` diff --git a/src/character.cpp b/src/character.cpp index 8859fd167275f..1990307fed1ae 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -3367,10 +3367,8 @@ std::pair Character::get_fatigue_description() const void Character::mod_thirst( int nthirst ) { - for( const std::pair &mut : my_mutations ) { - if( mut.first->flags.count( "NO_THIRST" ) > 0 ) { - return; - } + if( has_trait_flag( "NO_THIRST" ) ) { + return; } set_thirst( std::max( -100, thirst + nthirst ) ); } diff --git a/src/player.cpp b/src/player.cpp index 1ded0f601e66c..37a3709f54ff4 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -2341,7 +2341,7 @@ void player::update_stomach( const time_point &from, const time_point &to ) void player::get_sick() { // NPCs are too dumb to handle infections now - if( is_npc() || has_trait( trait_DISIMMUNE ) ) { + if( is_npc() || has_trait_flag( "NO_DISEASE" ) ) { // In a shocking twist, disease immunity prevents diseases. return; } From 75681c32e5a087dca096b1a158061a20a32ae1fb Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 30 Dec 2019 19:29:35 +0100 Subject: [PATCH 08/37] radiation is private --- src/avatar.cpp | 2 +- src/bionics.cpp | 10 +++++----- src/character.cpp | 17 ++++++++++++++++- src/character.h | 7 ++++++- src/computer.cpp | 2 +- src/debug_menu.cpp | 6 +++--- src/game.cpp | 6 +++--- src/iuse.cpp | 12 ++++++------ src/npcmove.cpp | 6 +++--- src/player.cpp | 14 +++++++------- 10 files changed, 51 insertions(+), 31 deletions(-) diff --git a/src/avatar.cpp b/src/avatar.cpp index 52e4191142c33..8079cf678c855 100644 --- a/src/avatar.cpp +++ b/src/avatar.cpp @@ -1164,7 +1164,7 @@ void avatar::reset_stats() } // Radiation - set_fake_effect_dur( effect_irradiated, 1_turns * radiation ); + set_fake_effect_dur( effect_irradiated, 1_turns * get_rad() ); // Morale const int morale = get_morale_level(); set_fake_effect_dur( effect_happy, 1_turns * morale ); diff --git a/src/bionics.cpp b/src/bionics.cpp index 2e517fa8b8b67..b6b4ee5909a94 100644 --- a/src/bionics.cpp +++ b/src/bionics.cpp @@ -464,7 +464,7 @@ bool player::activate_bionic( int b, bool eff_only ) std::vector good; std::vector bad; - if( radiation > 0 ) { + if( get_rad() > 0 ) { bad.push_back( _( "Irradiated" ) ); } @@ -537,12 +537,12 @@ bool player::activate_bionic( int b, bool eff_only ) mod_power_level( bionics[bionic_id( "bio_lighter" )].power_activate ); } } else if( bio.id == "bio_geiger" ) { - add_msg_if_player( m_info, _( "Your radiation level: %d" ), radiation ); + add_msg_if_player( m_info, _( "Your radiation level: %d" ), get_rad() ); } else if( bio.id == "bio_radscrubber" ) { - if( radiation > 4 ) { - radiation -= 5; + if( get_rad() > 4 ) { + mod_rad( -5 ); } else { - radiation = 0; + set_rad( 0 ); } } else if( bio.id == "bio_adrenaline" ) { if( has_effect( effect_adrenaline ) ) { diff --git a/src/character.cpp b/src/character.cpp index 1990307fed1ae..518c5b7b04a8d 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -238,7 +238,7 @@ Character::Character() : thirst = 0; fatigue = 0; sleep_deprivation = 0; - radiation = 0; + set_rad( 0 ); tank_plut = 0; reactor_plut = 0; slow_rad = 0; @@ -5300,6 +5300,21 @@ void Character::mod_stim( int mod ) stim += mod; } +int Character::get_rad() const +{ + return radiation; +} + +void Character::set_rad( int new_rad ) +{ + radiation = new_rad; +} + +void Character::mod_rad( int mod ) +{ + radiation += mod; +} + int Character::get_stamina() const { return stamina; diff --git a/src/character.h b/src/character.h index a368826da7281..77072be567805 100644 --- a/src/character.h +++ b/src/character.h @@ -1267,7 +1267,6 @@ class Character : public Creature, public visitable std::list consumption_history; int oxygen; - int radiation; int tank_plut; int reactor_plut; int slow_rad; @@ -1375,6 +1374,10 @@ class Character : public Creature, public visitable void set_stim( int new_stim ); void mod_stim( int mod ); + int get_rad() const; + void set_rad(int new_rad); + void mod_rad(int mod); + int get_stamina() const; int get_stamina_max() const; void set_stamina( int new_stamina ); @@ -1701,6 +1704,8 @@ class Character : public Creature, public visitable int stim; int pkill; + int radiation; + scenttype_id type_of_scent; struct weighted_int_list melee_miss_reasons; diff --git a/src/computer.cpp b/src/computer.cpp index cf3828e432cd7..86feb60d722ab 100644 --- a/src/computer.cpp +++ b/src/computer.cpp @@ -1126,7 +1126,7 @@ void computer::activate_function( computer_action action ) print_newline(); } print_error( _( "GEIGER COUNTER @ CONSOLE:… %s mSv/h." ), g->m.get_radiation( g->u.pos() ) ); - print_error( _( "PERSONAL DOSIMETRY:… %s mSv." ), g->u.radiation ); + print_error( _( "PERSONAL DOSIMETRY:… %s mSv." ), g->u.get_rad() ); print_newline(); query_any( _( "Press any key…" ) ); break; diff --git a/src/debug_menu.cpp b/src/debug_menu.cpp index a5442c61ed99e..e61b1222e809f 100644 --- a/src/debug_menu.cpp +++ b/src/debug_menu.cpp @@ -733,7 +733,7 @@ void character_edit_menu() uilist smenu; smenu.addentry( 0, true, 'h', "%s: %d", _( "Health" ), p.get_healthy() ); smenu.addentry( 1, true, 'm', "%s: %d", _( "Health modifier" ), p.get_healthy_mod() ); - smenu.addentry( 2, true, 'r', "%s: %d", _( "Radiation" ), p.radiation ); + smenu.addentry( 2, true, 'r', "%s: %d", _( "Radiation" ), p.get_rad() ); smenu.query(); int value; switch( smenu.ret ) { @@ -748,8 +748,8 @@ void character_edit_menu() } break; case 2: - if( query_int( value, _( "Set the value to? Currently: %d" ), p.radiation ) ) { - p.radiation = value; + if( query_int( value, _( "Set the value to? Currently: %d" ), p.get_rad() ) ) { + p.set_rad( value ); } break; default: diff --git a/src/game.cpp b/src/game.cpp index 4a9b0e624c1cc..0d7457525d324 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -11345,8 +11345,8 @@ void game::process_artifact( item &it, player &p ) break; case AEP_PBLUE: - if( p.radiation > 0 ) { - p.radiation--; + if( p.get_rad() > 0 ) { + p.mod_rad( -1 ); } break; @@ -11487,7 +11487,7 @@ bool check_art_charge_req( item &it ) reqsmet = p.has_effect( effect_sleep ); break; case( ACR_RAD ): - reqsmet = ( ( g->m.get_radiation( p.pos() ) > 0 ) || ( p.radiation > 0 ) ); + reqsmet = ( ( g->m.get_radiation( p.pos() ) > 0 ) || ( p.get_rad() > 0 ) ); break; case( ACR_WET ): reqsmet = std::any_of( p.body_wetness.begin(), p.body_wetness.end(), diff --git a/src/iuse.cpp b/src/iuse.cpp index 24b8c4c5f7a70..a80f860464434 100644 --- a/src/iuse.cpp +++ b/src/iuse.cpp @@ -1252,7 +1252,7 @@ static void marloss_common( player &p, item &it, const trait_id ¤t_color ) iuse dummy; dummy.purifier( &p, &it, false, p.pos() ); if( effect == 6 ) { - p.radiation = 0; + p.set_rad( 0 ); } } else if( effect == 7 ) { @@ -1397,7 +1397,7 @@ int iuse::mycus( player *p, item *it, bool t, const tripoint &pos ) p->add_msg_if_player( m_good, _( "You feel better all over." ) ); p->mod_painkiller( 30 ); this->purifier( p, it, t, pos ); // Clear out some of that goo you may have floating around - p->radiation = 0; + p->set_rad( 0 ); p->healall( 4 ); // Can't make you a whole new person, but not for lack of trying p->add_msg_if_player( m_good, _( "As it settles in, you feel ecstasy radiating through every part of your body…" ) ); @@ -3427,14 +3427,14 @@ int iuse::geiger( player *p, item *it, bool t, const tripoint &pos ) } const tripoint &pnt = *pnt_; if( pnt == g->u.pos() ) { - p->add_msg_if_player( m_info, _( "Your radiation level: %d mSv (%d mSv from items)" ), p->radiation, + p->add_msg_if_player( m_info, _( "Your radiation level: %d mSv (%d mSv from items)" ), p->get_rad(), p->leak_level( "RADIOACTIVE" ) ); break; } if( npc *const person_ = g->critter_at( pnt ) ) { npc &person = *person_; p->add_msg_if_player( m_info, _( "%s's radiation level: %d mSv (%d mSv from items)" ), - person.name, person.radiation, + person.name, person.get_rad(), person.leak_level( "RADIOACTIVE" ) ); } break; @@ -5819,12 +5819,12 @@ int iuse::radglove( player *p, item *it, bool, const tripoint & ) return 0; } else { p->add_msg_if_player( _( "You activate your radiation biomonitor." ) ); - if( p->radiation >= 1 ) { + if( p->get_rad() >= 1 ) { p->add_msg_if_player( m_warning, _( "You are currently irradiated." ) ); p->add_msg_player_or_say( m_info, _( "Your radiation level: %d mSv." ), _( "It says here that my radiation level is %d mSv." ), - p->radiation ); + p->get_rad() ); } else { p->add_msg_player_or_say( m_info, _( "You are not currently irradiated." ), diff --git a/src/npcmove.cpp b/src/npcmove.cpp index b08ee25201ded..5997a2ddb52d7 100644 --- a/src/npcmove.cpp +++ b/src/npcmove.cpp @@ -4319,13 +4319,13 @@ bool npc::complain() } // Radiation every 10 minutes - if( radiation > 90 ) { + if( get_rad() > 90 ) { activate_bionic_by_id( bio_radscrubber ); std::string speech = _( "I'm suffering from radiation sickness…" ); - if( complain_about( radiation_string, 10_minutes, speech, radiation > 150 ) ) { + if( complain_about( radiation_string, 10_minutes, speech, get_rad() > 150 ) ) { return true; } - } else if( !radiation ) { + } else if( !get_rad() ) { deactivate_bionic_by_id( bio_radscrubber ); } diff --git a/src/player.cpp b/src/player.cpp index 37a3709f54ff4..eeb1bb9376c06 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -2231,7 +2231,7 @@ void player::update_body( const time_point &from, const time_point &to ) reset_activity_level(); } // Radiation kills health even at low doses - update_health( has_trait( trait_RADIOGENIC ) ? 0 : -radiation ); + update_health( has_trait( trait_RADIOGENIC ) ? 0 : -get_rad() ); get_sick(); } @@ -2831,8 +2831,8 @@ void player::regen( int rate_multiplier ) } } - if( radiation > 0 ) { - radiation = std::max( 0, radiation - roll_remainder( rate_multiplier / 50.0f ) ); + if( get_rad() > 0 ) { + set_rad( std::max( 0, get_rad() - roll_remainder( rate_multiplier / 50.0f ) ) ); } } @@ -2998,10 +2998,10 @@ void player::process_one_effect( effect &it, bool is_new ) if( val != 0 ) { mod = 1; if( is_new || it.activated( calendar::turn, "RAD", val, reduced, mod ) ) { - radiation += bound_mod_to_vals( radiation, val, it.get_max_val( "RAD", reduced ), 0 ); + mod_rad( bound_mod_to_vals( get_rad(), val, it.get_max_val( "RAD", reduced ), 0 ) ); // Radiation can't go negative - if( radiation < 0 ) { - radiation = 0; + if( get_rad() < 0 ) { + set_rad( 0 ); } } } @@ -6435,7 +6435,7 @@ void player::environmental_revert_effect() set_stim( 0 ); set_pain( 0 ); set_painkiller( 0 ); - radiation = 0; + set_rad( 0 ); recalc_sight_limits(); reset_encumbrance(); From 5d9879a7d79b069082e86b81b634b9976a12a6b0 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 30 Dec 2019 20:35:19 +0100 Subject: [PATCH 09/37] missing radiation entries --- src/suffer.cpp | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/suffer.cpp b/src/suffer.cpp index 9167088c0442f..cb98005ec8bf4 100644 --- a/src/suffer.cpp +++ b/src/suffer.cpp @@ -1033,45 +1033,45 @@ void Character::suffer_from_radiation() } if( calendar::once_every( 15_minutes ) ) { - if( radiation < 0 ) { - radiation = 0; - } else if( radiation > 2000 ) { - radiation = 2000; + if( get_rad() < 0 ) { + set_rad( 0 ); + } else if( get_rad() > 2000 ) { + set_rad( 2000 ); } - if( get_option( "RAD_MUTATION" ) && rng( 100, 10000 ) < radiation ) { + if( get_option( "RAD_MUTATION" ) && rng( 100, 10000 ) < get_rad() ) { mutate(); - radiation -= 50; - } else if( radiation > 50 && rng( 1, 3000 ) < radiation && ( stomach.contains() > 0_ml || + mod_rad( -50 ); + } else if( get_rad() > 50 && rng( 1, 3000 ) < get_rad() && ( stomach.contains() > 0_ml || radiation_increasing || !in_sleep_state() ) ) { vomit(); - radiation -= 1; + mod_rad( -1 ); } } const bool radiogenic = has_trait( trait_RADIOGENIC ); - if( radiogenic && calendar::once_every( 30_minutes ) && radiation > 0 ) { + if( radiogenic && calendar::once_every( 30_minutes ) && get_rad() > 0 ) { // At 200 irradiation, twice as fast as REGEN - if( x_in_y( radiation, 200 ) ) { + if( x_in_y( get_rad(), 200 ) ) { healall( 1 ); if( rad_mut == 0 ) { // Don't heal radiation if we're generating it naturally // That would counter the main downside of radioactivity - radiation -= 5; + mod_rad( -5 ); } } } - if( !radiogenic && radiation > 0 ) { + if( !radiogenic && get_rad() > 0 ) { // Even if you heal the radiation itself, the damage is done. const int hmod = get_healthy_mod(); - if( hmod > 200 - radiation ) { - set_healthy_mod( std::max( -200, 200 - radiation ) ); + if( hmod > 200 - get_rad() ) { + set_healthy_mod( std::max( -200, 200 - get_rad() ) ); } } - if( radiation > 200 && calendar::once_every( 10_minutes ) && x_in_y( radiation, 1000 ) ) { + if( get_rad() > 200 && calendar::once_every( 10_minutes ) && x_in_y( get_rad(), 1000 ) ) { hurtall( 1, nullptr ); - radiation -= 5; + mod_rad( -5 ); } if( !reactor_plut && !tank_plut && !slow_rad ) { @@ -1146,7 +1146,7 @@ void Character::suffer_from_radiation() tank_plut *= 0.6; } while( slow_rad >= 1000 ) { - radiation += 1; + mod_rad( 1 ); slow_rad -= 1000; } } @@ -1504,7 +1504,7 @@ bool Character::irradiate( float rads, bool bypass ) } int rads_max = roll_remainder( rads ); - radiation += rng( 0, rads_max ); + mod_rad( rng( 0, rads_max ) ); // Apply rads to any radiation badges. for( item *const it : inv_dump() ) { @@ -1578,8 +1578,8 @@ void Character::mend( int rate_multiplier ) healing_factor *= addiction_scaling( 0.25f, 0.75f, addiction_level( ADD_ALCOHOL ) ); } - if( radiation > 0 && !has_trait( trait_RADIOGENIC ) ) { - healing_factor *= clamp( ( 1000.0f - radiation ) / 1000.0f, 0.0f, 1.0f ); + if( get_rad() > 0 && !has_trait( trait_RADIOGENIC ) ) { + healing_factor *= clamp( ( 1000.0f - get_rad() ) / 1000.0f, 0.0f, 1.0f ); } // Bed rest speeds up mending From 76f7f28b4a6f831c2f6a5610302152fff2b0bd90 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 30 Dec 2019 20:35:38 +0100 Subject: [PATCH 10/37] Sugar kins are immune to radiations --- data/mods/My_Sweet_Cataclysm/sweet_mutations.json | 2 +- doc/JSON_FLAGS.md | 3 ++- src/character.cpp | 5 ++++- src/player.cpp | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json index cfecbb275fa74..c0ca6700d4037 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json @@ -42,6 +42,6 @@ "allowed_category": [ "SUGAR" ], "no_cbm_on_bp": [ "TORSO", "HEAD", "EYES", "MOUTH", "ARM_L", "ARM_R", "HAND_L", "HAND_R", "LEG_L", "LEG_R", "FOOT_L", "FOOT_R" ], "armor": [ { "parts": "ALL", "cut": 10, "bash": 5 } ], - "flags": [ "NO_THIRST", "NO_DISEASE" ] + "flags": [ "NO_THIRST", "NO_DISEASE", "NO_RADIATION" ] } ] diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md index fbab96e2a6353..714af7fe74781 100644 --- a/doc/JSON_FLAGS.md +++ b/doc/JSON_FLAGS.md @@ -1086,8 +1086,9 @@ Also see `monster_attacks.json` for more special attacks, for example, impale an - ```UNARMED_BONUS``` You get a bonus to unarmed bash and cut damage equal to unarmed_skill/2 up to 4. - ```NEED_ACTIVE_TO_MELEE``` This mutation gives bonus to unarmed melee only if it's active. -- ```NO_DISEASE``` This mutation grants immunity to disease. +- ```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. ### Categories diff --git a/src/character.cpp b/src/character.cpp index 518c5b7b04a8d..2fefebdea9db5 100644 --- a/src/character.cpp +++ b/src/character.cpp @@ -5312,7 +5312,10 @@ void Character::set_rad( int new_rad ) void Character::mod_rad( int mod ) { - radiation += mod; + if( has_trait_flag( "NO_RADIATION" ) ) { + return; + } + set_rad( std::max( 0, get_rad() + mod ) ); } int Character::get_stamina() const diff --git a/src/player.cpp b/src/player.cpp index eeb1bb9376c06..067d76e01bf1e 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -2832,7 +2832,7 @@ void player::regen( int rate_multiplier ) } if( get_rad() > 0 ) { - set_rad( std::max( 0, get_rad() - roll_remainder( rate_multiplier / 50.0f ) ) ); + mod_rad( -roll_remainder( rate_multiplier / 50.0f ) ); } } From 88a4e31bf16200a125bec7b6afad42c51ae038ff Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 30 Dec 2019 20:46:57 +0100 Subject: [PATCH 11/37] Sugar kin can eat honey --- data/mods/My_Sweet_Cataclysm/sweet_mutations.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json index c0ca6700d4037..260d1e73fe9c9 100644 --- a/data/mods/My_Sweet_Cataclysm/sweet_mutations.json +++ b/data/mods/My_Sweet_Cataclysm/sweet_mutations.json @@ -29,7 +29,7 @@ "ROBUST", "CARNIVORE" ], - "can_only_eat": [ "junk", "sugar" ], + "can_only_eat": [ "junk", "sugar", "honey" ], "can_only_heal_with": [ "caramel_ointement" ], "description": "You are literally made of sugar.", "vitamin_rates": [ [ "vitC", -900 ], [ "vitB", -900 ], [ "vitA", -900 ], [ "iron", -900 ], [ "calcium", -900 ] ], From 9141fc0c1e071356896e41d754add373b050418d Mon Sep 17 00:00:00 2001 From: John Candlebury Date: Mon, 30 Dec 2019 14:39:05 -0600 Subject: [PATCH 12/37] Fix flooring of house_inner_garden --- data/json/mapgen/house/house_inner_garden.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/data/json/mapgen/house/house_inner_garden.json b/data/json/mapgen/house/house_inner_garden.json index ba19c5dd67965..542e3b906ea8f 100644 --- a/data/json/mapgen/house/house_inner_garden.json +++ b/data/json/mapgen/house/house_inner_garden.json @@ -16,12 +16,12 @@ "#h #~~~~~~U#", "## #~~~~~~U#", ".# +~~~~~~U#", - ".# y y8]888#8#88#8##", + ".# y y8]#88#888888##", ".###iL## #8sssssssssss#.", ".p#n 8s#3..3..sFs#.", ".M#K JA ]s.......sFs#.", ".^#QllJA 8s#......sFs#.", - "######## #8sSsssssssss#.", + "######## #8sssssssssss#.", "#y + y8]#8]#8]8888#.", "o 6 #R + 1 #.", "o #R #++#HLH #.", @@ -32,7 +32,15 @@ "........................" ], "palettes": [ "house_w_foundation_palette" ], - "terrain": { "8": "t_wall_glass", "#": "t_rock_wall", "]": "t_door_glass_c", "%": "t_wall_w" }, + "terrain": { + "8": "t_wall_glass", + "#": "t_rock_wall", + "]": "t_door_glass_c", + "%": "t_wall_w", + "F": "t_concrete", + "U": "t_thconc_floor", + "N": "t_thconc_floor" + }, "furniture": { "a": "f_displaycase" }, "place_vehicles": [ { "vehicle": "showroom_small_vehicles", "x": 17, "y": 5, "rotation": 270, "chance": 20, "status": 0 }, From 4159f6a1ac150d2f7413cfbedaab2bbf9d77f562 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Tue, 31 Dec 2019 00:07:09 +0300 Subject: [PATCH 13/37] Add missing whitespace --- src/options.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/options.cpp b/src/options.cpp index a317848681e83..7c016b57f738c 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1545,7 +1545,7 @@ void options_manager::add_options_interface() false ); add( "AMMO_IN_NAMES", "interface", translate_marker( "Add ammo to weapon/magazine names" ), - translate_marker( "If true, the default ammo is added to weapon and magazine names. For example \"Mosin-Nagant M44 (4/5)\" becomes \"Mosin-Nagant M44 (4/5 7.62x54mm)\"." ), + translate_marker( "If true, the default ammo is added to weapon and magazine names. For example \"Mosin-Nagant M44 (4/5)\" becomes \"Mosin-Nagant M44 (4/5 7.62x54mm)\"." ), true ); From 45f85d2f812b78798fe32f3c0f8409e60bddbc7c Mon Sep 17 00:00:00 2001 From: Matthew Taylor Date: Mon, 30 Dec 2019 21:12:10 +0000 Subject: [PATCH 14/37] Fix bathroom SUS groups (#36529) --- data/json/itemgroups/SUS/domestic.json | 68 ++++++++++++++++++-------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/data/json/itemgroups/SUS/domestic.json b/data/json/itemgroups/SUS/domestic.json index 2e6c025c0863d..34b11cd597c70 100644 --- a/data/json/itemgroups/SUS/domestic.json +++ b/data/json/itemgroups/SUS/domestic.json @@ -609,35 +609,63 @@ ] }, { - "id": "SUS_bathroom_toiletries", + "id": "SUS_bathroom_sink", "type": "item_group", "//": "SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given storage furniture.", - "//2": "This is a category for all the items which appear in bathrooms, which are NOT immediately useful medicines. This list is created in part to not ruin player's chances of finding antibiotics, antifungals and asprin, as it suppliments the current bathroom drops instead of replacing. Item probabilities are loosely based on how likely families would take an item with them when evacuating.", + "//2": "This group is for a bathroom sink.", "subtype": "collection", "entries": [ { "item": "soap_holder", "prob": 40 }, - { "item": "soap", "count": [ 1, 4 ], "prob": 60 }, + { "item": "soap", "count": [ 1, 4 ], "prob": 90 }, + { "item": "razor_shaving", "count": [ 1, 2 ], "prob": 20 }, { "item": "bleach", "prob": 15 }, { "item": "ammonia", "prob": 20 }, - { "item": "razor_shaving", "count": [ 1, 2 ], "prob": 75 }, - { "item": "shavingkit", "prob": 1 }, - { "item": "mirror", "prob": 25 }, - { "item": "toothbrush_plain", "count": [ 1, 3 ], "prob": 45 }, - { "item": "hairbrush", "count": [ 1, 2 ], "prob": 60 }, + { "item": "toothbrush_plain", "count": [ 1, 3 ], "prob": 45 } + ] + }, + { + "id": "SUS_hair_drawer", + "type": "item_group", + "//": "SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given storage furniture.", + "//2": "This group is for a drawer for haircare tools.", + "subtype": "collection", + "entries": [ + { "item": "hairbrush", "count": [ 1, 2 ], "prob": 90 }, + { "item": "comb_pocket", "count": [ 1, 2 ], "prob": 75 }, { "item": "curler_hair", "prob": 25 }, - { "item": "string_floss", "count": [ 1, 2 ], "prob": 50 }, - { "item": "comb_pocket", "count": [ 1, 2 ], "prob": 55 }, - { "item": "plunger_toilet", "prob": 90 }, - { "item": "plunger_futuristic", "prob": 20 }, - { "item": "cu_pipe", "prob": 10 }, - { "item": "hose", "prob": 10 }, - { "item": "sponge", "count": [ 1, 3 ], "prob": 75 }, - { "item": "candle", "count": [ 1, 2 ], "prob": 20 }, - { "item": "matches", "prob": 10 }, - { "item": "toilet_paper", "prob": 80 }, { "item": "hair_dryer", "prob": 60 }, - { "item": "curling_iron", "prob": 50 }, - { "item": "brush_toilet", "prob": 75 } + { "item": "curling_iron", "prob": 20 } + ] + }, + { + "id": "SUS_toilet", + "type": "item_group", + "//": "SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given storage furniture.", + "//2": "This group is for things you often find stored on or next to a toilet.", + "subtype": "collection", + "entries": [ + { "distribution": [ { "item": "plunger_toilet", "prob": 90 }, { "item": "plunger_futuristic", "prob": 10 } ] }, + { "item": "brush_toilet", "prob": 75 }, + { "item": "toilet_paper", "prob": 80 } + ] + }, + { + "id": "SUS_bathroom_cabinet", + "type": "item_group", + "//": "SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given storage furniture.", + "//2": "This group is for a bathroom cabinet.", + "subtype": "collection", + "entries": [ + { "item": "soap", "count": [ 1, 4 ], "prob": 70 }, + { + "distribution": [ { "item": "razor_shaving", "count": [ 1, 2 ], "prob": 50 }, { "item": "shavingkit", "prob": 50 } ], + "prob": 75 + }, + { "item": "mirror", "prob": 25 }, + { "item": "string_floss", "count": [ 1, 2 ], "prob": 60 }, + { "item": "sponge", "count": [ 1, 3 ], "prob": 75 }, + { "collection": [ { "item": "candle", "count": [ 1, 2 ] }, { "item": "matches" } ], "prob": 20 }, + { "item": "toilet_paper", "prob": 80 } ] } ] From 26ec5c860dc314a6164fbdc5afdef681bde21859 Mon Sep 17 00:00:00 2001 From: Fris0uman Date: Mon, 30 Dec 2019 22:17:18 +0100 Subject: [PATCH 15/37] astyle --- src/character.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/character.h b/src/character.h index 77072be567805..362b39a4aa989 100644 --- a/src/character.h +++ b/src/character.h @@ -1375,8 +1375,8 @@ class Character : public Creature, public visitable void mod_stim( int mod ); int get_rad() const; - void set_rad(int new_rad); - void mod_rad(int mod); + void set_rad( int new_rad ); + void mod_rad( int mod ); int get_stamina() const; int get_stamina_max() const; From 0406bae90a0c14b17f1ada7ddfc2936f555302c7 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Mon, 30 Dec 2019 19:24:27 +0300 Subject: [PATCH 16/37] Assorted Aftershock fixes --- build-scripts/mod_test_blacklist | 1 - data/mods/Aftershock/afs_speech.json | 2 +- data/mods/Aftershock/items/afs_item_groups.json | 4 ++-- data/mods/Aftershock/items/afs_tools.json | 8 ++++---- .../Aftershock/maps/afs_regional_map_settings.json | 3 +-- .../mods/Aftershock/maps/mapgen/prepnet_orchard.json | 12 ++++++------ data/mods/Aftershock/npcs/afs_npc.json | 3 +-- data/mods/Aftershock/player/afs_professions.json | 6 ++++-- .../Aftershock/vehicles/afs_vehicle_overrides.json | 2 +- 9 files changed, 20 insertions(+), 21 deletions(-) diff --git a/build-scripts/mod_test_blacklist b/build-scripts/mod_test_blacklist index c08830f779ff7..bdabdfdeabf5a 100644 --- a/build-scripts/mod_test_blacklist +++ b/build-scripts/mod_test_blacklist @@ -1,4 +1,3 @@ -aftershock blazemod crt_expansion generic_guns diff --git a/data/mods/Aftershock/afs_speech.json b/data/mods/Aftershock/afs_speech.json index aacc67356893a..94c20cee2f116 100644 --- a/data/mods/Aftershock/afs_speech.json +++ b/data/mods/Aftershock/afs_speech.json @@ -32,7 +32,7 @@ { "type": "speech", "speaker": "afs_mon_migoturret", - "sound": "\"The better to eat you! I don't actually think I eat anymore.\"", + "sound": "\"The better to eat you! I don't actually think I eat anymore.\"", "volume": 40 }, { diff --git a/data/mods/Aftershock/items/afs_item_groups.json b/data/mods/Aftershock/items/afs_item_groups.json index 68cd58024bde9..b3e60b7fac1dd 100644 --- a/data/mods/Aftershock/items/afs_item_groups.json +++ b/data/mods/Aftershock/items/afs_item_groups.json @@ -11,7 +11,7 @@ { "item": "pants_cargo" }, { "item": "kevlar" }, { "item": "leather_pouch" }, - { "item": "balclava", "chance": 75 }, + { "item": "balclava", "prob": 75 }, { "item": "bootsheath" } ] }, @@ -19,7 +19,7 @@ "type": "item_group", "id": "afs_gardener_carried", "subtype": "collection", - "entries": [ { "group": "hardware", "count": [ 1, 2 ] }, { "group": "snacks", "repeat": [ 1, 3 ] } ] + "entries": [ { "group": "hardware", "count": [ 1, 2 ] }, { "group": "snacks", "count": [ 1, 3 ] } ] }, { "type": "item_group", diff --git a/data/mods/Aftershock/items/afs_tools.json b/data/mods/Aftershock/items/afs_tools.json index 7229cbc3f8846..16a71330921f9 100644 --- a/data/mods/Aftershock/items/afs_tools.json +++ b/data/mods/Aftershock/items/afs_tools.json @@ -19,7 +19,7 @@ "active": true, "type": "transform" }, - { "type": "CAMERA" } + "CAMERA" ], "flags": [ "WATCH", "ALARMCLOCK" ] }, @@ -44,7 +44,7 @@ "type": "TOOL", "name": "Wraitheon executive's smartphone", "copy-from": "afs_atomic_smartphone", - "description": "Your custom crafted atomic smartphone. Most notably a confidential executive-level override program allows you to remotely control most robots.", + "description": "Your custom crafted atomic smartphone. Most notably a confidential executive-level override program allows you to remotely control most robots.", "price": 20000000, "price_postapoc": 250000, "material": [ "superalloy", "aluminum" ], @@ -55,8 +55,8 @@ "active": true, "type": "transform" }, - { "revert_to": "afs_atomic_smartphone", "type": "CAMERA" }, - { "type": "ROBOTCONTROL" } + "CAMERA", + "ROBOTCONTROL" ] }, { diff --git a/data/mods/Aftershock/maps/afs_regional_map_settings.json b/data/mods/Aftershock/maps/afs_regional_map_settings.json index a87db39cfa2ea..33ef3c8145ebc 100644 --- a/data/mods/Aftershock/maps/afs_regional_map_settings.json +++ b/data/mods/Aftershock/maps/afs_regional_map_settings.json @@ -2,7 +2,6 @@ { "type": "region_overlay", "regions": [ "all" ], - "city": { "basements": { "basement": 1000, "basement_hidden_lab_stairs": 100, "basement_bionic": 100 } }, - "weather": { "base_temperature": 0.0 } + "city": { "basements": { "basement": 1000, "basement_hidden_lab_stairs": 100, "basement_bionic": 100 } } } ] diff --git a/data/mods/Aftershock/maps/mapgen/prepnet_orchard.json b/data/mods/Aftershock/maps/mapgen/prepnet_orchard.json index f5d8745818874..e3147bb35c3e1 100644 --- a/data/mods/Aftershock/maps/mapgen/prepnet_orchard.json +++ b/data/mods/Aftershock/maps/mapgen/prepnet_orchard.json @@ -63,9 +63,9 @@ { "item": "supplies_farming", "x": 3, "y": 9, "chance": 99 } ], "sealed_item": { "p": { "items": { "item": "farming_seeds", "chance": 100 }, "furniture": "f_plant_harvest" } }, - "place_monsters": [ - { "monster": "GROUP_PARK_SCENIC", "x": 12, "y": 14, "chance": 2 }, - { "monster": "GROUP_PrepNet", "x": [ 3, 20 ], "y": [ 16, 20 ], "repeat": 4, "friendly": true } + "place_monster": [ + { "group": "GROUP_PARK_SCENIC", "x": 12, "y": 14, "chance": 2 }, + { "group": "GROUP_PrepNet", "x": [ 3, 20 ], "y": [ 16, 20 ], "repeat": 4, "friendly": true } ], "place_npcs": [ { "class": "prepnet_gardener", "x": 10, "y": 9 } ] } @@ -136,9 +136,9 @@ { "item": "supplies_farming", "x": 6, "y": 7, "chance": 15 } ], "sealed_item": { "p": { "items": { "item": "farming_seeds", "chance": 100 }, "furniture": "f_plant_harvest" } }, - "place_monsters": [ - { "monster": "GROUP_PARK_SCENIC", "x": 12, "y": 14, "chance": 2 }, - { "monster": "GROUP_PrepNet", "x": [ 3, 20 ], "y": [ 16, 20 ], "repeat": 3, "friendly": true } + "place_monster": [ + { "group": "GROUP_PARK_SCENIC", "x": 12, "y": 14, "chance": 2 }, + { "group": "GROUP_PrepNet", "x": [ 3, 20 ], "y": [ 16, 20 ], "repeat": 3, "friendly": true } ], "place_npcs": [ { "class": "prepnet_gardener", "x": 10, "y": 9 } ] } diff --git a/data/mods/Aftershock/npcs/afs_npc.json b/data/mods/Aftershock/npcs/afs_npc.json index 8b5617036d7ee..c420e2d9addb2 100644 --- a/data/mods/Aftershock/npcs/afs_npc.json +++ b/data/mods/Aftershock/npcs/afs_npc.json @@ -8,7 +8,6 @@ "attitude": 1, "mission": 0, "chat": "TALK_PrepNet_gardener_1", - "faction": "Prepnet_Phyle", - "mon_faction": "PrepNet" + "faction": "Prepnet_Phyle" } ] diff --git a/data/mods/Aftershock/player/afs_professions.json b/data/mods/Aftershock/player/afs_professions.json index befe3b51f381d..27d21f1b0159e 100644 --- a/data/mods/Aftershock/player/afs_professions.json +++ b/data/mods/Aftershock/player/afs_professions.json @@ -32,8 +32,10 @@ "points": 2, "skills": [ { "level": 5, "name": "computer" } ], "items": { - "both": [ "laptop", "software_useless", "linuxtshirt", "pants_cargo", "socks", "slingpack", "sneakers", "smart_phone" ], - "entries": [ { "item": "light_plus_battery_cell", "ammo-item": "battery", "charges": 150, "container-item": "eink_tablet_pc" } ], + "both": { + "items": [ "laptop", "software_useless", "linuxtshirt", "pants_cargo", "socks", "slingpack", "sneakers", "smart_phone" ], + "entries": [ { "item": "light_plus_battery_cell", "ammo-item": "battery", "charges": 150, "container-item": "eink_tablet_pc" } ] + }, "male": [ "briefs" ], "female": [ "bra", "panties" ] } diff --git a/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json b/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json index cf8d2507ee7dc..f4882e95aca6f 100644 --- a/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json +++ b/data/mods/Aftershock/vehicles/afs_vehicle_overrides.json @@ -97,7 +97,7 @@ { "y": 1, "x": 3, - "parts": [ "turret_mount", { "ammo_type": [ "40x46mm_m433" ], "part": "mounted_mk19", "ammo": 60, "ammo_qty": [ 1, 25 ] } ] + "parts": [ "turret_mount", { "ammo_types": [ "40x46mm_m433" ], "part": "mounted_mk19", "ammo": 60, "ammo_qty": [ 1, 25 ] } ] }, { "y": 1, "x": 3, "parts": [ "seat", "seatbelt_heavyduty" ] }, { "y": 0, "x": 3, "parts": [ "hdframe_vertical_2", "stowboard_vertical", "hdroof" ] }, From 377fce1fa2473e21134d2430665b586dbc017154 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Mon, 30 Dec 2019 19:25:34 +0300 Subject: [PATCH 17/37] Assorted generic guns fixes --- build-scripts/mod_test_blacklist | 1 - data/mods/Generic_Guns/gg_vehicle_override.json | 1 - 2 files changed, 2 deletions(-) diff --git a/build-scripts/mod_test_blacklist b/build-scripts/mod_test_blacklist index bdabdfdeabf5a..5fcc595c4ac3b 100644 --- a/build-scripts/mod_test_blacklist +++ b/build-scripts/mod_test_blacklist @@ -1,6 +1,5 @@ blazemod crt_expansion -generic_guns Graphical_Overmap mapgen_demo more_locations diff --git a/data/mods/Generic_Guns/gg_vehicle_override.json b/data/mods/Generic_Guns/gg_vehicle_override.json index 116a1e4657f7a..6dd0374e21562 100644 --- a/data/mods/Generic_Guns/gg_vehicle_override.json +++ b/data/mods/Generic_Guns/gg_vehicle_override.json @@ -70,7 +70,6 @@ "color": "green", "broken_color": "green", "size": 2000, - "range": 12, "breaks_into": [ { "item": "m134", "prob": 50 } ], "requirements": { "install": { "skills": [ [ "mechanics", 6 ], [ "rifle", 3 ] ] }, "removal": { "skills": [ [ "mechanics", 4 ] ] } } } From 2749f76dcbb9702ba6d39b0cf95162f7472acc47 Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Mon, 30 Dec 2019 19:25:47 +0300 Subject: [PATCH 18/37] Assorted blazemod fixes --- data/mods/blazemod/blaze_blob_parts.json | 17 +-------- data/mods/blazemod/blaze_other.json | 3 +- data/mods/blazemod/blaze_other_parts.json | 5 ++- data/mods/blazemod/blaze_override.json | 42 ++++++++--------------- data/mods/blazemod/blaze_test.json | 1 - data/mods/blazemod/snippets.json | 2 +- 6 files changed, 19 insertions(+), 51 deletions(-) diff --git a/data/mods/blazemod/blaze_blob_parts.json b/data/mods/blazemod/blaze_blob_parts.json index d98293f0776f7..3a797d6b08e98 100644 --- a/data/mods/blazemod/blaze_blob_parts.json +++ b/data/mods/blazemod/blaze_blob_parts.json @@ -47,12 +47,11 @@ "color": "blue", "broken_color": "blue", "durability": 400, - "range": 1, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "bitergrow" } ], "requirements": { "repair": { "time": "5 m", "using": [ [ "blobrep", 1 ] ] } }, - "descriptions": "A living blob, transformed into a heavy vehicle weapon.", + "description": "A living blob, transformed into a heavy vehicle weapon.", "flags": [ "TURRET", "FOLDABLE", "OBSTACLE" ] }, { @@ -66,7 +65,6 @@ "color": "magenta", "broken_color": "magenta", "durability": 200, - "range": 8, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "cluttergrow" } ], @@ -85,7 +83,6 @@ "color": "light_blue", "broken_color": "light_blue", "durability": 200, - "range": 18, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "freeziegrow" } ], @@ -200,7 +197,6 @@ "color": "brown", "broken_color": "brown", "durability": 600, - "range": 1, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "fuzzlegrow" } ], @@ -1179,7 +1175,6 @@ "color": "blue", "broken_color": "blue", "durability": 1000, - "range": 1, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "horrorgrow" } ], @@ -1197,7 +1192,6 @@ "color": "brown", "broken_color": "brown", "durability": 200, - "range": 8, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "inkiegrow" } ], @@ -1215,7 +1209,6 @@ "color": "light_red", "broken_color": "light_red", "durability": 200, - "range": 8, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "meltiegrow" } ], @@ -1631,7 +1624,6 @@ "color": "red", "broken_color": "red", "durability": 200, - "range": 60, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "queengrow" } ], @@ -1650,7 +1642,6 @@ "color": "cyan", "broken_color": "cyan", "durability": 200, - "range": 18, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "razorqueengrow" } ], @@ -1669,7 +1660,6 @@ "color": "light_blue", "broken_color": "light_blue", "durability": 200, - "range": 16, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "sharpgrow" } ], @@ -1688,7 +1678,6 @@ "color": "blue", "broken_color": "blue", "durability": 200, - "range": 12, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "sicklegrow" } ], @@ -1707,7 +1696,6 @@ "color": "cyan", "broken_color": "cyan", "durability": 200, - "range": 16, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "sparkiegrow" } ], @@ -1726,7 +1714,6 @@ "color": "yellow", "broken_color": "yellow", "durability": 200, - "range": 8, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "stickiegrow" } ], @@ -1745,7 +1732,6 @@ "color": "light_red", "broken_color": "light_red", "durability": 200, - "range": 10, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "torchiegrow" } ], @@ -1764,7 +1750,6 @@ "color": "cyan", "broken_color": "cyan", "durability": 200, - "range": 12, "damage_modifier": 10, "folded_volume": 1, "breaks_into": [ { "item": "voideatergrow" } ], diff --git a/data/mods/blazemod/blaze_other.json b/data/mods/blazemod/blaze_other.json index aa719cf24fc00..53ec86b273209 100644 --- a/data/mods/blazemod/blaze_other.json +++ b/data/mods/blazemod/blaze_other.json @@ -180,8 +180,7 @@ "id": "turretframe", "type": "GENERIC", "category": "veh_parts", - "name": "turret chassis", - "name_plural": "turret chassis", + "name": { "str": "turret chassis", "str_pl": "turret chassis" }, "description": "A frame capable of rotating a full 360 degrees, capable of mounting multiple weapon systems either welded directly onto it or secured via the straps. It comes with a easily modified container for ammunition storage, a rudimentary ammo feed system for easy access, and a section for a movement system. It is controlled by a targeting AI that can adapt to the usage of whatever weapon that has been loading, with proper programming.", "weight": "38604 g", "volume": "20 L", diff --git a/data/mods/blazemod/blaze_other_parts.json b/data/mods/blazemod/blaze_other_parts.json index 46e303a047f3a..3507132c350dc 100644 --- a/data/mods/blazemod/blaze_other_parts.json +++ b/data/mods/blazemod/blaze_other_parts.json @@ -46,11 +46,11 @@ "copy-from": "engine_combustion", "type": "vehicle_part", "fuel_type": "coal_lump", - "cold_affects_start": true, "looks_like": "diesel_engine_v12", "m2c": 75, "//": "45% energy efficiency", - "description": "A closed cycle, external combustion steam turbine. Burns coal from a bunker in the vehicle to produce steam." + "description": "A closed cycle, external combustion steam turbine. Burns coal from a bunker in the vehicle to produce steam.", + "extend": { "flags": [ "E_COLD_START" ] } }, { "id": "engine_steam_turbine_small", @@ -328,7 +328,6 @@ "id": "turretframe", "type": "vehicle_part", "name": "turret chassis", - "name_plural": "turret chassis", "item": "turretframe", "symbol": "Y", "broken_symbol": "#", diff --git a/data/mods/blazemod/blaze_override.json b/data/mods/blazemod/blaze_override.json index b8a9ec67a12dc..3ade71f8a5b37 100644 --- a/data/mods/blazemod/blaze_override.json +++ b/data/mods/blazemod/blaze_override.json @@ -14,8 +14,7 @@ "copy-from": "flamethrower", "type": "vehicle_part", "name": "manual flamethrower", - "broken_symbol": "#", - "range": 5 + "broken_symbol": "#" }, { "id": "auto_m1918", @@ -25,8 +24,7 @@ "symbol": "t", "broken_symbol": "#", "color": "brown", - "size": 40, - "range": 12 + "size": 40 }, { "id": "am249", @@ -34,16 +32,14 @@ "type": "vehicle_part", "name": "M249 turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "aplasma_gun", "copy-from": "plasma_gun", "type": "vehicle_part", "name": "plasma turret", - "broken_symbol": "#", - "range": 12 + "broken_symbol": "#" }, { "id": "afusion_gun", @@ -51,8 +47,7 @@ "type": "vehicle_part", "name": "fusion turret", "broken_symbol": "#", - "size": 10, - "range": 12 + "size": 10 }, { "id": "am2browning", @@ -60,8 +55,7 @@ "type": "vehicle_part", "name": "M2 Browning turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_m240", @@ -69,8 +63,7 @@ "type": "vehicle_part", "name": "M240 turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_m60", @@ -78,8 +71,7 @@ "type": "vehicle_part", "name": "M60 turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_abzats", @@ -87,8 +79,7 @@ "type": "vehicle_part", "name": "auto-shotgun turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_m134", @@ -96,8 +87,7 @@ "type": "vehicle_part", "name": "M134D-H Minigun turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_mk19", @@ -105,8 +95,7 @@ "type": "vehicle_part", "name": "Mark 19 turret", "broken_symbol": "#", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_rm614", @@ -115,8 +104,7 @@ "name": "RM614 turret", "broken_symbol": "#", "broken_color": "light_gray", - "size": 40, - "range": 12 + "size": 40 }, { "id": "auto_rm298", @@ -125,16 +113,14 @@ "name": "RM298 turret", "broken_symbol": "#", "broken_color": "light_gray", - "size": 40, - "range": 12 + "size": 40 }, { "id": "awatercannon", "copy-from": "watercannon", "type": "vehicle_part", "name": "water cannon turret", - "broken_symbol": "#", - "range": 7 + "broken_symbol": "#" }, { "id": "pool_ball", diff --git a/data/mods/blazemod/blaze_test.json b/data/mods/blazemod/blaze_test.json index b6cca51c99e42..38f1e0e0ce4e2 100644 --- a/data/mods/blazemod/blaze_test.json +++ b/data/mods/blazemod/blaze_test.json @@ -874,7 +874,6 @@ "color": "pink", "broken_color": "pink", "size": 10, - "range": 18, "folded_volume": 20, "breaks_into": [ { "item": "vortexcannon", "count": [ 0, 1 ] } ], "requirements": { "install": { "skills": [ [ "mechanics", 4 ] ] }, "removal": { "skills": [ [ "mechanics", 2 ] ] } } diff --git a/data/mods/blazemod/snippets.json b/data/mods/blazemod/snippets.json index 0e2670643db49..953a067c2d546 100644 --- a/data/mods/blazemod/snippets.json +++ b/data/mods/blazemod/snippets.json @@ -17,7 +17,7 @@ "text": "\"Day 40. Controls broken-- car's magic reactor makes it goes inexorably forward. Giant rollers on front demolish forest. Maine, here I come.\"" }, { "id": "note_blazemod_5", "text": "\"my car is a diamond in the rough… literally\"" }, - { "id": "note_blazemod_6", "text": "\"M249 TURRET NODDED. IS TURRET ALIVE? FINALLY, SOMEBODY TO TALK TO!\"" }, + { "id": "note_blazemod_6", "text": "\"M249 TURRET NODDED. IS TURRET ALIVE? FINALLY, SOMEBODY TO TALK TO!\"" }, { "id": "note_blazemod_7", "text": "\"Added so many things to my taxi that it went a-blaze. Whoops.\"" }, { "id": "note_blazemod_8", From 49e9e573f432cc544f014e3e8586c079c296fcec Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Tue, 31 Dec 2019 00:27:39 +0300 Subject: [PATCH 19/37] Assorted CRT expansion fixes --- data/mods/CRT_EXPANSION/crt_materials.json | 6 +----- data/mods/CRT_EXPANSION/items/crt_armor.json | 2 +- data/mods/CRT_EXPANSION/items/crt_tools.json | 3 --- data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json | 2 +- 4 files changed, 3 insertions(+), 10 deletions(-) diff --git a/data/mods/CRT_EXPANSION/crt_materials.json b/data/mods/CRT_EXPANSION/crt_materials.json index ef039e86f09ae..dbb5b022129ff 100644 --- a/data/mods/CRT_EXPANSION/crt_materials.json +++ b/data/mods/CRT_EXPANSION/crt_materials.json @@ -16,11 +16,7 @@ "dmg_adj": [ "ripped", "torn", "shredded", "tattered" ], "bash_dmg_verb": "ripped", "cut_dmg_verb": "cut", - "burn_data": [ - { "fuel": 1, "smoke": 3, "burn": 1, "chance": 10 }, - { "fuel": 1, "smoke": 3, "burn": 2 }, - { "fuel": 1, "smoke": 3, "burn": 3 } - ] + "burn_data": [ { "fuel": 1, "smoke": 3, "burn": 1 }, { "fuel": 1, "smoke": 3, "burn": 2 }, { "fuel": 1, "smoke": 3, "burn": 3 } ] }, { "type": "AMMO", diff --git a/data/mods/CRT_EXPANSION/items/crt_armor.json b/data/mods/CRT_EXPANSION/items/crt_armor.json index f9bc5a91d1291..773440e8e17ee 100644 --- a/data/mods/CRT_EXPANSION/items/crt_armor.json +++ b/data/mods/CRT_EXPANSION/items/crt_armor.json @@ -33,7 +33,7 @@ "warmth": 40, "encumbrance": 17, "material_thickness": 5, - "enviromental_protection": 5 + "environmental_protection": 5 }, { "id": "crt_la_boots", diff --git a/data/mods/CRT_EXPANSION/items/crt_tools.json b/data/mods/CRT_EXPANSION/items/crt_tools.json index cb2823dbb3e76..839f6a4f83115 100644 --- a/data/mods/CRT_EXPANSION/items/crt_tools.json +++ b/data/mods/CRT_EXPANSION/items/crt_tools.json @@ -33,11 +33,9 @@ "weight": "350 g", "volume": "750 ml", "price": 20000, - "damage": { "damage_type": "cold", "amount": 100 }, "cutting": 8, "bashing": 3, "to_hit": 2, - "durability": 15, "symbol": ";", "qualities": [ [ "CUT_FINE", 1 ] ], "use_action": "CROWBAR", @@ -57,7 +55,6 @@ "price": 20000, "bashing": 10, "to_hit": 1, - "durability": 15, "symbol": "8", "flags": [ "UNARMED_WEAPON", "UNBREAKABLE_MELEE" ], "techniques": [ "WBLOCK_2", "UHAND", "HOOK" ] diff --git a/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json b/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json index cbcfeeb462795..df51f72b9801b 100644 --- a/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json +++ b/data/mods/CRT_EXPANSION/mutations/crt_mutatinoc.json @@ -20,7 +20,7 @@ "visibility": -7, "ugliness": -7, "description": "Aside from your appearances, your movements are incredibly graceful and allow you to seemingly glide through every task.", - "thresheq": [ "THRESH_VAMP" ], + "threshreq": [ "THRESH_VAMP" ], "category": [ "VAMP" ], "stealth_modifier": 5, "noise_modifier": 0.2, From f2168675200824f60e7ecbed1fda1f44b988f8fb Mon Sep 17 00:00:00 2001 From: curstwist <39442864+curstwist@users.noreply.github.com> Date: Mon, 30 Dec 2019 19:04:54 -0500 Subject: [PATCH 20/37] Add city block (#36540) * add support files incl. palette, overmap terrain, map spawn entries * add core mapgen adds core mapgen and location dependent nested maps entries * add nested chunks * remove fill_ter from nested chunks * Update retail_nested.json * update item_groups --- .../json/mapgen/city_blocks/city_block_2.json | 315 ++++ data/json/mapgen/nested/retail_nested.json | 1369 +++++++++++++++++ .../mapgen_palettes/city_block_palette.json | 122 ++ .../overmap/multitile_city_buildings.json | 15 + .../overmap_terrain_commercial.json | 56 + data/json/regional_map_settings.json | 1 + 6 files changed, 1878 insertions(+) create mode 100644 data/json/mapgen/city_blocks/city_block_2.json create mode 100644 data/json/mapgen/nested/retail_nested.json create mode 100644 data/json/mapgen_palettes/city_block_palette.json diff --git a/data/json/mapgen/city_blocks/city_block_2.json b/data/json/mapgen/city_blocks/city_block_2.json new file mode 100644 index 0000000000000..fdfb627b61eb6 --- /dev/null +++ b/data/json/mapgen/city_blocks/city_block_2.json @@ -0,0 +1,315 @@ +[ + { + "type": "mapgen", + "method": "json", + "om_terrain": [ [ "city_block2_1", "city_block2_2", "city_block2_3", "city_block2_4" ] ], + "weight": 250, + "object": { + "fill_ter": "t_floor", + "rows": [ + "..MMMsssMMMss|ooooo|+||~~$M|o+o|...sss...|o+o|M.M.X.s|oo|+|oo|s.X.M$~~$ss|ooooooooo|MMMsssMMMsss", + ".|ooo|+|ooo|s|y JE F|~~||| |o|sss>|o| yH|o|2 R|>|R 2 |--sssoRHy 2 |ooo|||ooo|--", + "-|2 3 |>| |--|4 ||!|!|| 4 | R|!|R |-->|o|y |2 yHR|s-", + "-| |!| |--| 9 |9 | ! ! |--s! | !ss", + "-| | | |--| | | %%| |%% |--s|E | R|>s", + "-| ! ! AA|--| | | %t|||t% |---|K | R|||", + "-| y|||%%Q YJJJ|--@ DLD R%%%%|%%%%R DD | * j|j * |---|K JA %%%%%%| l|", + "-| A AA Y|Ttj%Q n@--@ DLD R%tjT|Tjt%R LL | RR%TT|TT%RR @---|n J *7 | DLD J K@", + "-|JJJJJJ Q|T * i|--| * T|T * DD | %%%%%|%%%%% |---|i JA % | DLD AJ n@", + "-|Q Q|%%%%*% KKl|--@y %%%%%%|%%%%%% y| *7 |6 * |---|K % | DLD AJ i@", + "-|lKinKK Q|1 %*%%%|--|Y *8 |1 * Y|LD % | % AL|---|% %% % |y J K@", + "-|%%%%%% R| %7 |--|Q l% | %l Q|LD % | % AL@---|Q Q% %%%%%%|%%%%%% Q|", + "-|1 * R| % |--|Q K% | %K Q|LD % | %y AL|-;;|QQQ% *8 |1 * QQQ|", + "-| %%*%| % @--|Q K% | %K Q| %%%%%|%%%%% |-;S|%%%% % | %%*%|||", + "-@ %j t| % |--|KinK% | %KinK|Q *7 |6 * Y|-;;|jYt% % | %j t|S-", + "-| % ||@|@|||@|||--||@@||||@|||||@|||||@||Q K% | %Q K|--;@ * % | % y@;-", + "-| %TTy|S;;;;----------------;;S;S;;-------@Y K% | %Q K@--;|TTy% % | %YTT|;-", + "-||@|@|||@||;;--------------------;;;;;--------|lniK% | %linK|--;|||||||||@|||||@|||||||;-", + "--------;;;;;;---------------------------------||@|||||@|||@@||||@||----------------------------", + "----------------------------------------------------;;;;;S;;;-----------------------------------", + "------------------------------------------------------------------------------------------------", + "------------------------------------------------------------------------------------------------", + "------------------------------------------------------------------------------------------------", + "------------------------------------------------------------------------------------------------" + ], + "palettes": [ "city_block_foundation_palette" ], + "terrain": { "%": "t_wall_w" }, + "nested": { + "1": { + "chunks": [ + [ "bedroom_5x5_adult_N_1", 20 ], + [ "bedroom_5x5_adult_S_1", 20 ], + [ "bedroom_5x5_adult_W_1", 20 ], + [ "bedroom_5x5_adult_N_2", 20 ], + [ "bedroom_5x5_adult_E_2", 20 ], + [ "bedroom_5x5_adult_N_2", 20 ], + [ "bedroom_5x5_adult_N_2", 20 ], + [ "bedroom_5x5_adult_S_2", 20 ] + ] + }, + "2": { "chunks": [ [ "livingroom_5x5_E_1", 20 ], [ "livingroom_5x5_W_1", 20 ], [ "livingroom_5x5_E_2", 20 ] ] }, + "3": { "chunks": [ [ "bonus_room_3x3_4", 20 ], [ "bonus_room_3x3_N_6", 20 ], [ "bonus_room_3x3_N_8", 20 ] ] }, + "4": { + "chunks": [ + [ "livingroom_5x5_E_1", 20 ], + [ "livingroom_5x5_E_2", 20 ], + [ "bonus_room_3x3_5", 20 ], + [ "bonus_room_3x3_E_5", 20 ], + [ "bonus_room_2x2_1", 20 ] + ] + }, + "5": { + "chunks": [ + [ "bonus_room_3x3_E_5", 20 ], + [ "bonus_room_3x3_N_6", 20 ], + [ "bonus_room_3x3_S_6", 20 ], + [ "bonus_room_3x3_W_6", 20 ], + [ "bonus_room_3x3_N_8", 20 ], + [ "bonus_room_3x3_E_8", 20 ], + [ "bonus_room_3x3_E_6", 20 ] + ] + }, + "6": { + "chunks": [ + [ "bedroom_4x4_adult_1_W", 20 ], + [ "bedroom_4x4_adult_1_S", 20 ], + [ "bedroom_4x4_adult_2_N", 20 ], + [ "bedroom_4x4_adult_2_W", 20 ], + [ "bedroom_4x4_adult_2_E", 20 ], + [ "bedroom_4x4_adult_2_S", 20 ], + [ "bedroom_4x4_adult_3_S", 20 ], + [ "bedroom_4x4_adult_3_N", 20 ], + [ "bedroom_4x4_adult_3_E", 20 ], + [ "bedroom_4x4_adult_3_W", 20 ] + ] + }, + "7": { + "chunks": [ + [ "bedroom_4x4_adult_1_S", 20 ], + [ "bedroom_4x4_adult_3_S", 20 ], + [ "bedroom_4x4_adult_3_N", 20 ], + [ "bedroom_4x4_adult_3_E", 20 ], + [ "bedroom_4x4_adult_3_W", 20 ] + ] + }, + "8": { + "chunks": [ + [ "bedroom_5x5_adult_N_1", 20 ], + [ "bedroom_5x5_adult_S_1", 20 ], + [ "bedroom_5x5_adult_E_1", 20 ], + [ "bedroom_5x5_adult_N_2", 20 ], + [ "bedroom_5x5_adult_S_2", 20 ], + [ "bedroom_5x5_adult_E_2", 20 ], + [ "bedroom_5x5_adult_W_2", 20 ] + ] + }, + "9": { "chunks": [ [ "bonus_room_3x3_S_6", 20 ], [ "bonus_room_3x3_S_8", 20 ] ] } + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines candy shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_candy_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_candy_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_candy" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines beauty shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_beauty_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_beauty_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_beauty" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines beauty shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_vitamin_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_vitamin_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_vitamin" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines cellphone shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_cellphone_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_cellphone_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_cellphone" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines music shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_music_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_music_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_music" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines electronics shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_electronics_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_electronics_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_electronics" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines pizza shop front & back 9x9 front, 3x3 back crates.", + "nested_mapgen_id": "city_block_2_pizza_shop", + "object": { + "mapgensize": [ 15, 15 ], + "place_nested": [ + { "chunks": [ "city_block_9x9_pizza_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_3x3_backroom_crates_pizza" ], "x": 6, "y": 12 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines general shop front & back 8x8 front, 4x4 back room.", + "nested_mapgen_id": "city_block_2_clothing_shop", + "object": { + "mapgensize": [ 12, 12 ], + "place_nested": [ + { "chunks": [ "city_block_8x8_clothing_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_4x4_backroom_clothing" ], "x": 4, "y": 8 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines formal clothing shop front & back 8x8 front, 4x4 back room.", + "nested_mapgen_id": "city_block_2_formal_clothing_shop", + "object": { + "mapgensize": [ 12, 12 ], + "place_nested": [ + { "chunks": [ "city_block_8x8_formal_clothing_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_4x4_backroom_clothing_formal" ], "x": 4, "y": 8 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines leather clothing shop front & back 8x8 front, 4x4 back room.", + "nested_mapgen_id": "city_block_2_leather_clothing_shop", + "object": { + "mapgensize": [ 12, 12 ], + "place_nested": [ + { "chunks": [ "city_block_8x8_leather_clothing_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_4x4_backroom_clothing_leather" ], "x": 4, "y": 8 } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "combines fur clothing shop front & back 8x8 front, 4x4 back room.", + "nested_mapgen_id": "city_block_2_fur_clothing_shop", + "object": { + "mapgensize": [ 12, 12 ], + "place_nested": [ + { "chunks": [ "city_block_8x8_fur_clothing_shop_front" ], "x": 0, "y": 0 }, + { "chunks": [ "city_block_4x4_backroom_clothing_fur" ], "x": 4, "y": 8 } + ] + } + } +] diff --git a/data/json/mapgen/nested/retail_nested.json b/data/json/mapgen/nested/retail_nested.json new file mode 100644 index 0000000000000..ee87fcfdf9425 --- /dev/null +++ b/data/json/mapgen/nested/retail_nested.json @@ -0,0 +1,1369 @@ +[ + { + "type": "mapgen", + "method": "json", + "//": "designed for spaces 9x9.", + "nested_mapgen_id": "city_block_9x9_candy_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "LHL LHL", + " ", + "w L L L w", + "w L L L w", + "w L L L w", + "y ", + "MMM?MM Y", + " A ", + " VVV " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_table", + "M": "f_displaycase", + "w": "f_rack_wood", + "V": "f_glass_cabinet", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "toy_store", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "candy_chocolate", "chance": 30, "repeat": [ 0, 4 ] } ], + "w": [ { "item": "candy_chocolate", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ + { "item": "candy_chocolate", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "toy_store", "chance": 30, "repeat": [ 1, 2 ] } + ], + "V": [ + { "item": "candy_chocolate", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "toy_store", "chance": 30, "repeat": [ 1, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 candy shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_candy", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "candy_chocolate", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "toy_store", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for spaces 9x9. Beauty and cosmetics shop.", + "nested_mapgen_id": "city_block_9x9_beauty_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "HHH HHH", + " ....... ", + "w.L.L.L.w", + "w.L.L.L.w", + "w.L.L.L.w", + "y....... ", + "MMM?MM Y", + " A ", + " VVV " + ], + "terrain": { " ": "t_floor", "L": "t_carpet_yellow", ".": "t_carpet_yellow", "?": "t_console_broken" }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_table", + "M": "f_displaycase", + "w": "f_rack", + "V": "f_glass_cabinet", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "beauty", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "beauty", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "beauty", "chance": 30, "repeat": [ 0, 4 ] } ], + "w": [ { "item": "beauty", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "beauty", "chance": 30, "repeat": [ 0, 4 ] } ], + "V": [ { "item": "beauty", "chance": 30, "repeat": [ 0, 4 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 beauty shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_beauty", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { "z": [ { "item": "beauty", "chance": 30, "repeat": [ 1, 6 ] } ] } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 vitamin shop.", + "nested_mapgen_id": "city_block_9x9_vitamin_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "LHL LHL", + " ", + "V V V V V", + "V V V V V", + "V V V V V", + "y ", + "MMM?MM Y", + " A ", + "y VVV " + ], + "terrain": { + " ": "t_linoleum_white", + "L": "t_linoleum_white", + "H": "t_linoleum_white", + "V": "t_linoleum_white", + "M": "t_linoleum_white", + "A": "t_linoleum_white", + "y": "t_linoleum_white", + "Y": "t_linoleum_white", + "?": "t_console_broken" + }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_table", + "M": "f_counter", + "V": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "office", "chance": 30, "repeat": [ 0, 4 ] } ], + "V": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 0, 4 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 vitamin shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_vitamin", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { "z": [ { "item": "vitamin_shop", "chance": 30, "repeat": [ 1, 6 ] } ] } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 cellphone shop.", + "nested_mapgen_id": "city_block_9x9_cellphone_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "GGy yGG", + " ....... ", + "V.LL.HH.V", + "V.LL.HH.V", + "V.LL.HH.V", + " ....... ", + "M?MM?M Y", + " A A ", + "y MMMM y" + ], + "terrain": { + " ": "t_linoleum_white", + "G": "t_linoleum_white", + "V": "t_linoleum_white", + "M": "t_linoleum_white", + "A": "t_linoleum_white", + "y": "t_linoleum_white", + "Y": "t_linoleum_white", + "H": "t_carpet_green", + "L": "t_carpet_green", + ".": "t_carpet_green", + "?": "t_console_broken" + }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_displaycase", + "M": "f_counter", + "V": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "elecsto_pcs", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "elecsto_persele", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "cell_shop", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "cell_shop", "chance": 30, "repeat": [ 0, 1 ] } ], + "V": [ { "item": "cell_shop", "chance": 30, "repeat": [ 0, 4 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 cellphone shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_cellphone", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "cell_shop", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "elecsto_pcs", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "elecsto_persele", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 music shop.", + "nested_mapgen_id": "city_block_9x9_music_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "HHHy yHHH", + " ....... ", + "V.LL.GG.V", + "V.LL.GG.V", + "V.LL.GG.V", + " .......V", + "MMMM?M V", + " A ", + "y MMMM Y" + ], + "terrain": { " ": "t_floor", "G": "t_carpet_red", "L": "t_carpet_red", ".": "t_carpet_red", "?": "t_console_broken" }, + "furniture": { + "L": "f_table", + "H": "f_table", + "G": "f_displaycase", + "M": "f_counter", + "V": "f_bookcase", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "musicstore_showpiece", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "mussto_windinst", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "mussto_stringinst", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "office", "chance": 30, "repeat": [ 0, 1 ] } ], + "V": [ { "item": "musicstore_showpiece", "chance": 30, "repeat": [ 0, 4 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 music shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_music", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "musicstore_showpiece", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "mussto_windinst", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "mussto_stringinst", "chance": 30, "repeat": [ 0, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 electronics shop.", + "nested_mapgen_id": "city_block_9x9_electronics_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "HHHy yHHH", + " ....... ", + "V.LL.LL.V", + "V.GG.GG.V", + "V.BB.BB.V", + " .......V", + "MMMM?M y", + " A ", + "y MMMM Y" + ], + "terrain": { + " ": "t_floor", + "G": "t_carpet_yellow", + "L": "t_carpet_yellow", + "B": "t_carpet_yellow", + ".": "t_carpet_yellow", + "?": "t_console_broken" + }, + "furniture": { + "L": "f_table", + "B": "f_table", + "H": "f_displaycase", + "G": "f_displaycase", + "M": "f_counter", + "V": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "H": [ { "item": "elecsto_pcs", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "elecsto_cameras", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "elecsto_entapl", "chance": 30, "repeat": [ 0, 4 ] } ], + "B": [ { "item": "elecsto_homapl", "chance": 30, "repeat": [ 0, 4 ] } ], + "M": [ { "item": "office", "chance": 30, "repeat": [ 0, 1 ] } ], + "V": [ + { "item": "elecsto_lights", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "elecsto_diy", "chance": 30, "repeat": [ 0, 4 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 electronics shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_electronics", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "elecsto_pcs", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "elecsto_cameras", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "elecsto_entapl", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "elecsto_homapl", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "elecsto_lights", "chance": 30, "repeat": [ 0, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 9x9 pizza shop.", + "nested_mapgen_id": "city_block_9x9_pizza_shop_front", + "object": { + "mapgensize": [ 9, 9 ], + "rotation": [ 0, 3 ], + "rows": [ + "AAAY YMMM", + "MMM AAA", + "V ? ", + "B M R RR", + "i G L LL", + "B G R RR", + "s M ", + "F M R RR", + "Q RLyLL" + ], + "terrain": { + " ": "t_linoleum_gray", + "L": "t_linoleum_gray", + "R": "t_linoleum_gray", + "B": "t_linoleum_gray", + "G": "t_linoleum_gray", + "M": "t_linoleum_gray", + "F": "t_linoleum_gray", + "V": "t_linoleum_gray", + "Q": "t_linoleum_gray", + "Y": "t_linoleum_gray", + "y": "t_linoleum_gray", + "A": "t_linoleum_gray", + "s": "t_linoleum_gray", + "i": "t_linoleum_gray", + "?": "t_console_broken" + }, + "furniture": { + "L": "f_table", + "i": "f_oven", + "s": "f_sink", + "R": "f_bench", + "B": "f_counter", + "G": "f_displaycase", + "M": "f_counter", + "F": "f_glass_fridge", + "V": "f_rack", + "Q": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "B": [ { "item": "pizza_kitchen", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "pizza_display", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "pizza_table", "chance": 30, "repeat": [ 1, 2 ] } ], + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "F": [ { "item": "pizza_fridge", "chance": 30, "repeat": [ 0, 4 ] } ], + "V": [ { "item": "pizza_display", "chance": 30, "repeat": [ 0, 4 ] } ], + "Q": [ { "item": "pizza_kitchen", "chance": 30, "repeat": [ 0, 1 ] } ], + "M": [ + { "item": "pizza_table", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "pizza_display", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 pizza shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_pizza", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "pizza_kitchen", "chance": 30, "repeat": [ 0, 2 ] }, + { "item": "pizza_table", "chance": 30, "repeat": [ 0, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 8x8 clothing shop.", + "nested_mapgen_id": "city_block_8x8_clothing_shop_front", + "object": { + "mapgensize": [ 8, 8 ], + "rotation": [ 0, 3 ], + "rows": [ + " BBB ", + " C GA b", + " C G?G ", + " d R", + " LdL ", + " C R", + " C QQVV ", + "|| |||||" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken", "|": "t_brick_wall" }, + "furniture": { + "A": "f_stool", + "B": "f_counter", + "C": "f_table", + "G": "f_displaycase", + "b": "f_bigmirror", + "d": "f_mannequin", + "L": "f_table", + "Q": "f_rack_wood", + "R": "f_armchair", + "V": "f_rack_wood", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "d": [ + { "item": "jackets", "chance": 40 }, + { "item": "pants", "chance": 100 }, + { "item": "shirts", "chance": 100 }, + { "item": "hatstore_accessories", "chance": 100 }, + { "item": "shoestore_shoes", "chance": 100 } + ], + "C": [ { "item": "shirts", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "pants", "chance": 30, "repeat": [ 1, 2 ] } ], + "Q": [ { "item": "bags", "chance": 30, "repeat": [ 1, 2 ] } ], + "V": [ { "item": "shoestore_shoes", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ + { "item": "hatstore_accessories", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "jewelry_front", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 general clothing shop crates.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "z zz", + " z z", + "z z ", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "shirts", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "pants", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "jackets", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "hatstore_accessories", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "shoestore_shoes", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 general clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CCCC", + " ", + " ", + "CC C" + ], + "terrain": { " ": "t_floor" }, + "furniture": { "C": "f_rack" }, + "items": { + "C": [ + { "item": "shirts", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "pants", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "jackets", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 8x8 formal clothing shop.", + "nested_mapgen_id": "city_block_8x8_formal_clothing_shop_front", + "object": { + "mapgensize": [ 8, 8 ], + "rotation": [ 0, 3 ], + "rows": [ + " GGG ", + " e A b", + " C B?B ", + " d b", + " RCR ", + " b", + " b LLL ", + "|| |||||" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken", "|": "t_brick_wall" }, + "furniture": { + "A": "f_stool", + "B": "f_counter", + "C": "f_table", + "G": "f_displaycase", + "b": "f_bigmirror", + "d": "f_mannequin", + "e": "f_mannequin", + "L": "f_wardrobe", + "R": "f_armchair" + }, + "items": { + "d": [ + { "item": "wedding_suits", "chance": 100 }, + { "item": "hatstore_accessories", "chance": 100 }, + { "item": "dress_shoes", "chance": 100 } + ], + "e": [ + { "item": "wedding_suits", "chance": 100 }, + { "item": "hatstore_accessories", "chance": 100 }, + { "item": "dress_shoes", "chance": 100 } + ], + "C": [ { "item": "dress_shoes", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "wedding_suits", "chance": 30, "repeat": [ 1, 2 ] } ], + "V": [ { "item": "shoestore_shoes", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ + { "item": "neckties", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 formal clothing shop crates.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_formal", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "z zz", + " z z", + "z z ", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "wedding_suits", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "hatstore_accessories", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "dress_shoes", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "neckties", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 0, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 formal clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_formal", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CCCC", + " ", + " ", + "CC C" + ], + "terrain": { " ": "t_floor" }, + "furniture": { "C": "f_rack" }, + "items": { + "C": [ + { "item": "wedding_suits", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "dress_shoes", "chance": 30, "repeat": [ 0, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 formal clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_formal", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CBBB", + "e Ad", + " ", + "bb C" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { "A": "f_stool", "B": "f_workbench", "C": "f_rack_wood", "d": "f_mannequin", "e": "f_mannequin", "b": "f_bench" }, + "items": { + "C": [ { "item": "SUS_tailoring_materials", "chance": 30, "repeat": [ 1, 2 ] } ], + "d": [ { "item": "SUS_mannequin_formal_mens", "chance": 30 } ], + "e": [ { "item": "SUS_mannequin_dresses", "chance": 30 } ], + "B": [ + { "item": "SUS_tailoring_tool_drawer", "chance": 30, "repeat": [ 0, 1 ] }, + { "item": "SUS_tailoring_fasteners", "chance": 30, "repeat": [ 2, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 8x8 leather clothing shop.", + "nested_mapgen_id": "city_block_8x8_leather_clothing_shop_front", + "object": { + "mapgensize": [ 8, 8 ], + "rotation": [ 0, 3 ], + "rows": [ + " d B?B ", + " Q AB b", + " Q ", + " Q C G b", + " d C G ", + " b", + " b LLL ", + "|| |||||" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken", "|": "t_brick_wall" }, + "furniture": { + "A": "f_stool", + "B": "f_counter", + "C": "f_table", + "G": "f_displaycase", + "b": "f_bigmirror", + "Q": "f_rack_wood", + "d": "f_mannequin", + "L": "f_wardrobe" + }, + "items": { + "d": [ + { "item": "leather_shop", "chance": 100 }, + { "item": "pants", "chance": 50 }, + { "item": "shirts", "chance": 50 }, + { "item": "leather_shop_accessories", "chance": 100 } + ], + "C": [ { "item": "leather_shop", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "leather_shop", "chance": 30, "repeat": [ 1, 2 ] } ], + "Q": [ { "item": "leather_shop", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ + { "item": "leather_shop_accessories", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 leather clothing shop crates.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_leather", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "z zz", + " z z", + "z z ", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "leather_shop", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "leather_shop_accessories", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 leather clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_leather", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CCCC", + " ", + " ", + "CC C" + ], + "terrain": { " ": "t_floor" }, + "furniture": { "C": "f_rack" }, + "items": { + "C": [ + { "item": "leather_shop", "chance": 30, "repeat": [ 0, 6 ] }, + { "item": "leather_shop_accessories", "chance": 30, "repeat": [ 0, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 leather clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_leather", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CBBB", + " Ad", + "A ", + "BB C" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { "A": "f_stool", "B": "f_workbench", "C": "f_rack_wood", "d": "f_mannequin", "e": "f_mannequin", "b": "f_bench" }, + "items": { + "C": [ + { "item": "SUS_tailoring_materials", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "leather_shop_repair", "chance": 30, "repeat": [ 2, 6 ] } + ], + "d": [ + { "item": "leather_shop", "chance": 100 }, + { "item": "pants", "chance": 50 }, + { "item": "shirts", "chance": 50 }, + { "item": "leather_shop_accessories", "chance": 100 } + ] + }, + "B": [ + { "item": "SUS_tailoring_tool_drawer", "chance": 30, "repeat": [ 0, 1 ] }, + { "item": "SUS_tailoring_fasteners", "chance": 30, "repeat": [ 2, 6 ] } + ] + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 8x8 fur clothing shop.", + "nested_mapgen_id": "city_block_8x8_fur_clothing_shop_front", + "object": { + "mapgensize": [ 8, 8 ], + "rotation": [ 0, 3 ], + "rows": [ + " d B?B ", + " L AB b", + " L ", + " L C G b", + " d C G ", + " b", + " b QQQ ", + "|| |||||" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken", "|": "t_brick_wall" }, + "furniture": { + "A": "f_stool", + "B": "f_counter", + "C": "f_table", + "G": "f_displaycase", + "b": "f_bigmirror", + "Q": "f_rack_wood", + "d": "f_mannequin", + "L": "f_wardrobe" + }, + "items": { + "d": [ + { "item": "fancyfurs", "chance": 100 }, + { "item": "pants", "chance": 50 }, + { "item": "shirts", "chance": 50 }, + { "item": "dress_shoes", "chance": 100 } + ], + "C": [ { "item": "fancyfurs", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "fancyfurs", "chance": 30, "repeat": [ 1, 2 ] } ], + "Q": [ { "item": "fancyfurs", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ + { "item": "neckties", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "jewelry_front", "chance": 30, "repeat": [ 0, 1 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 fur clothing shop crates.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_fur", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z ", + "z z ", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "fancyfurs", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "neckties", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "accesories_personal_unisex", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 fur clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_fur", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CCCC", + " ", + " ", + "CC C" + ], + "terrain": { " ": "t_floor" }, + "furniture": { "C": "f_rack" }, + "items": { "C": [ { "item": "fancyfurs", "chance": 30, "repeat": [ 0, 6 ] } ] } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 fur clothing backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_clothing_fur", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "CBBB", + " Ad", + "A ", + "BB C" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { "A": "f_stool", "B": "f_workbench", "C": "f_rack_wood", "d": "f_mannequin", "e": "f_mannequin", "b": "f_bench" }, + "items": { + "C": [ + { "item": "SUS_tailoring_materials", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "SUS_fur_tailoring_materials", "chance": 30, "repeat": [ 2, 6 ] } + ], + "d": [ { "item": "SUS_mannequin_fur", "chance": 100 } ], + "B": [ + { "item": "SUS_tailoring_tool_drawer", "chance": 30, "repeat": [ 0, 1 ] }, + { "item": "SUS_tailoring_fasteners", "chance": 30, "repeat": [ 2, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 5x5 shop backroom.", + "nested_mapgen_id": "city_block_5x5_backroom_shop", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "d G", + "L G", + "BA ", + "B zz", + "Cyz " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "A": "f_chair", + "B": "f_desk", + "C": "f_rack", + "G": "f_locker", + "b": "f_bench", + "d": "f_filing_cabinet", + "L": "f_shredder", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] + }, + "items": { + "d": [ { "item": "office_paper", "chance": 25 } ], + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "B": [ { "item": "office", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 5x5 shop backroom.", + "nested_mapgen_id": "city_block_5x5_backroom_shop", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "y GG", + "b G", + "b z ", + " zz", + "CDF " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "A": "f_chair", + "B": "f_desk", + "C": "f_rack", + "G": "f_locker", + "b": "f_bench", + "d": "f_filing_cabinet", + "L": "f_shredder", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 shop backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_shop", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "FD d", + "G ", + "G ", + "ybb " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "G": "f_locker", + "b": "f_bench", + "d": "f_filing_cabinet", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 shop backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_shop", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "FD d", + "G ", + "G ", + "y C " + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "C": "f_rack", + "G": "f_sofa", + "d": "f_filing_cabinet", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 4x4 shop backroom.", + "nested_mapgen_id": "city_block_4x4_backroom_shop", + "object": { + "mapgensize": [ 4, 4 ], + "rotation": [ 0, 3 ], + "rows": [ + "d L", + "B ", + "BA ", + "y GC" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "A": "f_chair", + "B": "f_desk", + "C": "f_rack", + "G": "f_locker", + "d": "f_filing_cabinet", + "L": "f_shredder", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "B": [ { "item": "office", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 5x5 shop backroom.", + "nested_mapgen_id": "city_block_5x5_backroom_shop", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "d FD", + "G b ", + "G b z", + "G b ", + "yz CC" + ], + "terrain": { " ": "t_floor", "?": "t_console_broken" }, + "furniture": { + "A": "f_chair", + "B": "f_desk", + "C": "f_rack", + "G": "f_locker", + "b": "f_bench", + "d": "f_filing_cabinet", + "L": "f_shredder", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 5x5 shop backroom.", + "nested_mapgen_id": "city_block_5x5_backroom_shop", + "object": { + "mapgensize": [ 5, 5 ], + "rotation": [ 0, 3 ], + "rows": [ + "d FD", + "G ", + "G z", + "C ", + "yAAA " + ], + "terrain": { " ": "t_floor" }, + "furniture": { + "A": "f_sofa", + "C": "f_rack", + "G": "f_locker", + "d": "f_filing_cabinet", + "D": "f_vending_c", + "F": "f_vending_c", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] + }, + "vendingmachines": { "D": { "item_group": "vending_drink" }, "F": { "item_group": "vending_food" } }, + "items": { + "C": [ { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] } ], + "G": [ { "item": "jackets", "chance": 30, "repeat": [ 0, 1 ] }, { "item": "bags", "chance": 30, "repeat": [ 0, 1 ] } ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for 3x3 candy shop crates.", + "nested_mapgen_id": "city_block_3x3_backroom_crates_candy", + "object": { + "mapgensize": [ 3, 3 ], + "rotation": [ 0, 3 ], + "rows": [ + "z z", + " z", + "z z" + ], + "terrain": { "z": "t_floor" }, + "furniture": { "z": [ [ "f_cardboard_box", 5 ], "f_crate_c" ] }, + "items": { + "z": [ + { "item": "candy_chocolate", "chance": 30, "repeat": [ 1, 6 ] }, + { "item": "toy_store", "chance": 30, "repeat": [ 1, 6 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for restaurant spaces 14x14.", + "nested_mapgen_id": "city_block_14x14_restaurant", + "object": { + "mapgensize": [ 14, 14 ], + "rotation": [ 0, 3 ], + "rows": [ + " ", + " ", + "HLH HLH GG ", + "HLH HLH LL ", + " GG ", + "HLH HLH y ", + "HLH HLH GG ", + " LL ", + "|||||||| GG ", + "JJiRiJJ| || ", + "F n| |t ", + "F RRR l| * ", + "F * | ", + "YPPQQSY| |j " + ], + "terrain": { "?": "t_console_broken", "|": "t_brick_wall", "*": "t_door_c" }, + "furniture": { + "L": "f_table", + "H": "f_chair", + "G": "f_sofa", + "t": "f_toilet", + "j": "f_sink", + "P": "f_rack", + "S": "f_rack", + "Q": "f_rack", + "Y": "f_trashcan", + "A": "f_stool", + "i": "f_oven", + "F": "f_fridge", + "n": "f_sink", + "l": "f_dishwasher", + "J": "f_counter", + "R": "f_counter", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "l": [ { "item": "restaur_sink", "chance": 30, "repeat": [ 1, 2 ] } ], + "n": [ { "item": "restaur_sink", "chance": 30, "repeat": [ 1, 2 ] } ], + "j": [ { "item": "restaur_bath", "chance": 30, "repeat": [ 1, 2 ] } ], + "i": [ { "item": "SUS_oven", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "restaur_table", "chance": 30, "repeat": [ 0, 4 ] } ], + "J": [ + { "item": "SUS_knife_drawer", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 1, 2 ] } + ], + "R": [ + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "diner_food", "chance": 30, "repeat": [ 1, 2 ] } + ], + "P": [ + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "restaur_rack", "chance": 30, "repeat": [ 1, 2 ] } + ], + "Q": [ + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 1, 2 ] } + ], + "S": [ + { "item": "groce_bread", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "restaur_kitchen", "chance": 30, "repeat": [ 1, 2 ] } + ] + } + } + }, + { + "type": "mapgen", + "method": "json", + "//": "designed for bar spaces 11x11.", + "nested_mapgen_id": "city_block_11x11_bar", + "object": { + "mapgensize": [ 11, 11 ], + "rotation": [ 0, 3 ], + "rows": [ + "y A xx ", + "F RRA xx ", + "n RA xx ", + "J RA ", + "J ARA LG ", + "F RA LLG ", + "F yGGG ", + "|| ||||||| ", + "t| |FFFllK ", + " * * K ", + "j|K|YnJK " + ], + "terrain": { " ": "t_null", "|": "t_brick_wall", "*": "t_door_c" }, + "furniture": { + "L": "f_table", + "x": "f_pool_table", + "G": "f_sofa", + "t": "f_toilet", + "j": "f_sink", + "Y": "f_trashcan", + "A": "f_stool", + "F": "f_glass_fridge", + "n": "f_sink", + "l": "f_dishwasher", + "J": "f_counter", + "R": "f_counter", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ] + }, + "items": { + "K": { "item": "keg_beer", "chance": 50 }, + "Y": [ { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] } ], + "x": [ { "item": "pool_table", "chance": 30, "repeat": [ 1, 2 ] } ], + "l": [ { "item": "restaur_sink", "chance": 30, "repeat": [ 1, 2 ] } ], + "n": [ { "item": "restaur_sink", "chance": 30, "repeat": [ 1, 2 ] } ], + "j": [ { "item": "restaur_bath", "chance": 30, "repeat": [ 1, 2 ] } ], + "L": [ { "item": "bar_table", "chance": 30, "repeat": [ 0, 4 ] } ], + "J": [ + { "item": "liqstore_brew", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "bar_alcohol", "chance": 30, "repeat": [ 1, 2 ] } + ], + "R": [ { "item": "bar_table", "chance": 30, "repeat": [ 0, 4 ] } ], + "F": [ + { "item": "bar_alcohol", "chance": 30, "repeat": [ 0, 4 ] }, + { "item": "bar_fridge", "chance": 30, "repeat": [ 1, 2 ] } + ] + } + } + } +] diff --git a/data/json/mapgen_palettes/city_block_palette.json b/data/json/mapgen_palettes/city_block_palette.json new file mode 100644 index 0000000000000..11ff96b47b26a --- /dev/null +++ b/data/json/mapgen_palettes/city_block_palette.json @@ -0,0 +1,122 @@ +[ + { + "type": "palette", + "id": "city_block_foundation_palette", + "furniture": { + "A": "f_stool", + "B": "f_beaded_door", + "D": "f_chair", + "E": "f_rack_coat", + "F": "f_bench", + "G": "f_bench", + "H": "f_armchair", + "I": "f_desk", + "J": "f_counter", + "K": "f_cupboard", + "L": "f_table", + "N": "f_workbench", + "O": "f_wardrobe", + "P": "f_locker", + "Q": "f_rack", + "R": "f_bookcase", + "T": "f_bathtub", + "U": "f_utility_shelf", + "W": "f_washer", + "X": "f_birdbath", + "Y": "f_trashcan", + "Z": "f_dryer", + "d": "f_shower", + "g": "f_water_heater", + "h": "f_fireplace", + "i": "f_oven", + "j": "f_sink", + "n": "f_sink", + "k": "f_woodstove", + "l": "f_fridge", + "m": "f_glass_fridge", + "p": [ "f_dumpster", "f_recycle_bin" ], + "r": "f_wood_keg", + "v": "f_safe_l", + "w": "f_rack_wood", + "y": [ "f_indoor_plant", "f_indoor_plant_y" ], + "z": "f_metal_butcher_rack" + }, + "terrain": { + ".": [ [ "t_region_groundcover_urban", 10 ], "t_region_shrub_decorative" ], + "-": "t_open_air", + "p": "t_concrete", + "X": "t_region_groundcover_urban", + " ": "t_floor", + "|": "t_brick_wall", + "%": "t_wall_w", + "<": "t_stairs_up", + ">": "t_stairs_down", + "o": "t_laminated_glass", + "+": "t_laminated_door_glass_c", + "@": "t_window_domestic", + "*": [ [ "t_door_c", 10 ], [ "t_door_o", 5 ], [ "t_door_locked_interior", 3 ] ], + "!": [ [ "t_door_locked_peep", 2 ], "t_door_locked_alarm", [ "t_door_locked", 10 ], "t_door_c" ], + "s": "t_concrete", + "~": "t_pavement", + "#": "t_chainfence", + "u": "t_chaingate_l", + "x": [ [ "t_door_metal_pickable", 20 ], [ "t_door_metal_c", 5 ], [ "t_door_metal_c_peep", 3 ] ], + "C": "t_column", + "^": "t_gutter_downspout", + ",": "t_glass_railing", + ";": "t_grate", + "M": "t_region_shrub_decorative", + "S": "t_ladder_down", + "V": "t_ladder_up", + "?": "t_console_broken", + "$": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ] + }, + "toilets": { "t": { } }, + "liquids": { "g": { "liquid": "water_clean", "amount": [ 0, 100 ] } }, + "items": { + "O": [ { "item": "wardrobe_mens", "chance": 50 }, { "item": "wardrobe_womens", "chance": 50, "repeat": [ 1, 2 ] } ], + "Q": [ + { "item": "preserved_food", "chance": 20, "repeat": [ 1, 2 ] }, + { "item": "dry_goods", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "pet_food", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "condiments", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "pantry_liquids", "chance": 10 } + ], + "K": [ + { "item": "dishes_utility", "chance": 30 }, + { "item": "condiments", "chance": 40, "repeat": [ 1, 2 ] }, + { "item": "SUS_knife_drawer", "chance": 20, "repeat": [ 1, 2 ] }, + { "item": "SUS_junk_drawer", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "SUS_cookware", "chance": 20 } + ], + "w": [ + { "item": "shower", "chance": 20 }, + { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "bed", "chance": 30, "repeat": [ 1, 2 ] } + ], + "v": [ + { "item": "art", "chance": 5 }, + { "item": "gemstones", "chance": 10, "repeat": [ 3, 6 ] }, + { "item": "jewelry_front", "chance": 5, "repeat": [ 1, 4 ] }, + { "item": "drugdealer", "chance": 10, "repeat": [ 1, 2 ] }, + { "item": "maps", "chance": 2 } + ], + "U": [ + { "item": "home_hw", "chance": 20, "repeat": [ 1, 2 ] }, + { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "mechanics", "chance": 10, "repeat": [ 1, 2 ] } + ], + "j": [ + { "item": "softdrugs", "chance": 45, "repeat": [ 1, 3 ] }, + { "item": "cleaning", "chance": 30, "repeat": [ 1, 2 ] }, + { "item": "harddrugs", "chance": 5 } + ], + "T": { "item": "shower", "chance": 30, "repeat": [ 1, 2 ] }, + "n": { "item": "SUS_kitchen_sink", "chance": 10, "repeat": [ 1, 2 ] }, + "i": { "item": "SUS_oven", "chance": 25, "repeat": [ 1, 2 ] }, + "l": { "item": "SUS_fridge", "chance": 30, "repeat": [ 1, 2 ] }, + "Y": { "item": "trash", "chance": 30, "repeat": [ 1, 2 ] }, + "R": { "item": "homebooks", "chance": 30, "repeat": [ 1, 2 ] } + } + } +] diff --git a/data/json/overmap/multitile_city_buildings.json b/data/json/overmap/multitile_city_buildings.json index d39f219c916f1..6acd7d0a7817e 100644 --- a/data/json/overmap/multitile_city_buildings.json +++ b/data/json/overmap/multitile_city_buildings.json @@ -2399,6 +2399,21 @@ { "point": [ 0, 1, 3 ], "overmap": "homeless_1_0_roof_north" } ] }, + { + "type": "city_building", + "id": "city_block_2", + "locations": [ "land" ], + "overmaps": [ + { "point": [ 0, 0, 0 ], "overmap": "city_block2_1_north" }, + { "point": [ 0, 0, 1 ], "overmap": "city_block2_flr2_1_north" }, + { "point": [ 1, 0, 0 ], "overmap": "city_block2_2_north" }, + { "point": [ 1, 0, 1 ], "overmap": "city_block2_flr2_2_north" }, + { "point": [ 2, 0, 0 ], "overmap": "city_block2_3_north" }, + { "point": [ 2, 0, 1 ], "overmap": "city_block2_flr2_3_north" }, + { "point": [ 3, 0, 0 ], "overmap": "city_block2_4_north" }, + { "point": [ 3, 0, 1 ], "overmap": "city_block2_flr2_4_north" } + ] + }, { "type": "city_building", "id": "craft_shop", diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json b/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json index a2419b1db3a94..c3a56648cab83 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_commercial.json @@ -3188,5 +3188,61 @@ "name": "hunting supply store roof", "sym": "H", "color": "brown" + }, + { + "type": "overmap_terrain", + "id": "city_block2_1", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_2", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_3", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_4", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_flr2_1", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_flr2_2", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_flr2_3", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" + }, + { + "type": "overmap_terrain", + "id": "city_block2_flr2_4", + "name": "urban city block", + "copy-from": "generic_city_building", + "color": "light_blue" } ] diff --git a/data/json/regional_map_settings.json b/data/json/regional_map_settings.json index 1f8cb793d1ab8..2d60437c536ee 100644 --- a/data/json/regional_map_settings.json +++ b/data/json/regional_map_settings.json @@ -591,6 +591,7 @@ }, "shops": { "bus_station": 200, + "city_block_2": 300, "town_hall": 150, "craft_shop": 200, "craft_shop_1": 200, From d12d605fa7b21407a794dafd9e5e957650d3b7ca Mon Sep 17 00:00:00 2001 From: RarkGrames <50421549+RarkGrames@users.noreply.github.com> Date: Tue, 31 Dec 2019 01:05:29 +0100 Subject: [PATCH 21/37] Update cooking_components.json (#36559) --- data/json/requirements/cooking_components.json | 1 + 1 file changed, 1 insertion(+) diff --git a/data/json/requirements/cooking_components.json b/data/json/requirements/cooking_components.json index df17297b53fa2..a46df90e4a795 100644 --- a/data/json/requirements/cooking_components.json +++ b/data/json/requirements/cooking_components.json @@ -672,6 +672,7 @@ [ "wine_barley", 1 ], [ "pale_ale", 1 ], [ "stout", 1 ], + [ "imperial_stout", 1 ], [ "mixed_alcohol_weak", 1 ] ] ] From b91f8795a18652d6e719b2e1c26e5a35326da5cf Mon Sep 17 00:00:00 2001 From: RarkGrames <50421549+RarkGrames@users.noreply.github.com> Date: Tue, 31 Dec 2019 01:06:26 +0100 Subject: [PATCH 22/37] Carbon fiber crossbow bolts (#36552) * Added the bolt * Added spawns --- data/json/itemgroups/item_groups.json | 2 ++ data/json/itemgroups/main.json | 3 ++- data/json/items/crossbows.json | 22 ++++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/data/json/itemgroups/item_groups.json b/data/json/itemgroups/item_groups.json index 951751203405c..ec01d32cda91a 100644 --- a/data/json/itemgroups/item_groups.json +++ b/data/json/itemgroups/item_groups.json @@ -1407,6 +1407,7 @@ [ "10gal_hat", 4 ], [ "bb", 8 ], [ "bolt_steel", 7 ], + [ "bolt_cf", 5 ], [ "bbgun", 10 ], [ "crossbow", 2 ], [ "mag_survival", 40 ], @@ -2315,6 +2316,7 @@ [ "hat_boonie", 10 ], [ "helmet_riot", 25 ], [ "bolt_steel", 7 ], + [ "bolt_cf", 5 ], [ "shot_00", 8 ], [ "shot_flechette", 3 ], [ "20x66_shot", 4 ], diff --git a/data/json/itemgroups/main.json b/data/json/itemgroups/main.json index ed5a13cb02d33..68292fdaddb19 100644 --- a/data/json/itemgroups/main.json +++ b/data/json/itemgroups/main.json @@ -260,7 +260,8 @@ [ "arrow_field_point_fletched", 50 ], [ "arrow_cf", 100 ], [ "bolt_wood", 100 ], - [ "bolt_wood_bodkin", 50 ] + [ "bolt_wood_bodkin", 50 ], + [ "bolt_cf", 100 ] ] } ] diff --git a/data/json/items/crossbows.json b/data/json/items/crossbows.json index cdd1f20007dc9..06ce4388ebe0f 100644 --- a/data/json/items/crossbows.json +++ b/data/json/items/crossbows.json @@ -219,6 +219,28 @@ "count": 10, "effects": [ "RECOVER_45", "NOGIB" ] }, + { + "type": "AMMO", + "id": "bolt_cf", + "price": 2000, + "name": "carbon fiber hunting bolt", + "symbol": "=", + "color": "green", + "looks_like": "bolt_steel", + "description": "A fletched carbon fiber crossbow bolt shaft with an expanding broadhead tip. Deals impressive damage to targets. Stands a good chance of remaining intact once fired.", + "material": [ "kevlar_rigid", "steel" ], + "volume": "250 ml", + "weight": "30 g", + "bashing": 1, + "ammo_type": "bolt", + "prop_damage": 1.35, + "range": 4, + "dispersion": 50, + "loudness": 0, + "count": 10, + "stack_size": 10, + "effects": [ "RECOVER_30" ] + }, { "type": "AMMO", "id": "bolt_explosive", From 22dd2b5e7ebbfa7aa3e55802f0b40e532d40f6dd Mon Sep 17 00:00:00 2001 From: RarkGrames <50421549+RarkGrames@users.noreply.github.com> Date: Tue, 31 Dec 2019 01:08:10 +0100 Subject: [PATCH 23/37] Veteran survivor zombies (#36557) * Added veteran survivor zed * Added zed to monstergroups * Pronoun fix --- data/json/monstergroups/monstergroups.json | 22 ++++++++++++++++------ data/json/monsters/zed_survivor.json | 14 ++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) create mode 100644 data/json/monsters/zed_survivor.json diff --git a/data/json/monstergroups/monstergroups.json b/data/json/monstergroups/monstergroups.json index 4e1ab1dc23224..c93385f156532 100644 --- a/data/json/monstergroups/monstergroups.json +++ b/data/json/monstergroups/monstergroups.json @@ -2316,6 +2316,7 @@ { "monster": "mon_zombie_swimmer", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_static", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 }, { "monster": "mon_beekeeper", "freq": 1, "cost_multiplier": 5 }, { "monster": "mon_zombie_technician", "freq": 1, "cost_multiplier": 12 }, { "monster": "mon_zombie_runner", "freq": 20, "cost_multiplier": 5, "pack_size": [ 1, 4 ] }, @@ -4369,7 +4370,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 5, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 30, "cost_multiplier": 5 }, - { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 } + { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -4391,7 +4393,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 30, "cost_multiplier": 5 }, - { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 } + { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -4400,7 +4403,8 @@ "default": "mon_zombie", "monsters": [ { "monster": "mon_zombie_tough", "freq": 180, "cost_multiplier": 0 }, - { "monster": "mon_zombie_survivor", "freq": 400, "cost_multiplier": 0 } + { "monster": "mon_zombie_survivor", "freq": 400, "cost_multiplier": 0 }, + { "monster": "mon_zombie_survivor_elite", "freq": 20, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -4423,6 +4427,7 @@ { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 30, "cost_multiplier": 5 }, { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 }, { "monster": "mon_zombie_runner", "freq": 130, "cost_multiplier": 3 } ] }, @@ -4445,7 +4450,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 180, "cost_multiplier": 5 }, - { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 } + { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -4467,7 +4473,8 @@ { "monster": "mon_dog_zombie_rot", "freq": 10, "cost_multiplier": 2 }, { "monster": "mon_zombie_swimmer", "freq": 20, "cost_multiplier": 2 }, { "monster": "mon_zombie_static", "freq": 30, "cost_multiplier": 5 }, - { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 } + { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 } ] }, { @@ -5161,6 +5168,7 @@ { "monster": "mon_zombie_swimmer", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_static", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 }, { "monster": "mon_beekeeper", "freq": 1, "cost_multiplier": 5 }, { "monster": "mon_zombie_technician", "freq": 1, "cost_multiplier": 12 }, { "monster": "mon_zombie_runner", "freq": 20, "cost_multiplier": 5, "pack_size": [ 1, 4 ] }, @@ -5186,6 +5194,7 @@ { "monster": "mon_zombie_hazmat", "freq": 10, "cost_multiplier": 3 }, { "monster": "mon_zombie_static", "freq": 10, "cost_multiplier": 5 }, { "monster": "mon_zombie_survivor", "freq": 1, "cost_multiplier": 25 }, + { "monster": "mon_zombie_survivor_elite", "freq": 1, "cost_multiplier": 25, "starts": 60 }, { "monster": "mon_zombie_technician", "freq": 1, "cost_multiplier": 12 }, { "monster": "mon_zombie_runner", "freq": 20, "cost_multiplier": 5, "pack_size": [ 1, 4 ] }, { "monster": "mon_zombie_brainless", "freq": 55, "cost_multiplier": 1 } @@ -5237,7 +5246,8 @@ { "monster": "mon_zombie_fat", "freq": 150, "cost_multiplier": 1 }, { "monster": "mon_zombie_wretched", "freq": 120, "cost_multiplier": 1 }, { "monster": "mon_zombie_crawler", "freq": 100, "cost_multiplier": 1 }, - { "monster": "mon_zombie_survivor", "freq": 70, "cost_multiplier": 1 } + { "monster": "mon_zombie_survivor", "freq": 70, "cost_multiplier": 1 }, + { "monster": "mon_zombie_survivor_elite", "freq": 10, "cost_multiplier": 1, "starts": 60 } ] }, { diff --git a/data/json/monsters/zed_survivor.json b/data/json/monsters/zed_survivor.json new file mode 100644 index 0000000000000..e11684b72e341 --- /dev/null +++ b/data/json/monsters/zed_survivor.json @@ -0,0 +1,14 @@ +[ + { + "id": "mon_zombie_survivor_elite", + "type": "MONSTER", + "name": "veteran survivor zombie", + "description": "This zombie once was a survivor like you, and a pretty good one at that. Unfortunately they didn't make it, despite the custom-made, heavy armor pieces they wear and the gear that they are still lugging around.", + "copy-from": "mon_zombie_survivor", + "looks_like": "mon_zombie_survivor", + "color": "light_red_green", + "armor_bash": 15, + "armor_cut": 25, + "death_drops": "mon_zombie_survivor_elite_death_drops" + } +] From a8dfebc1a6cd65b5e36de34e66c83d6ef7161c50 Mon Sep 17 00:00:00 2001 From: Jerimee Richir Date: Mon, 30 Dec 2019 19:09:32 -0500 Subject: [PATCH 24/37] Update materials section of JSON_INFO.md (#36476) * Update JSON_INFO.md * Update JSON_INFO.md * Update doc/JSON_INFO.md Co-Authored-By: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> * Update JSON_INFO.md Co-authored-by: I-am-Erk <45136638+I-am-Erk@users.noreply.github.com> --- doc/JSON_INFO.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index 59e672ef1b7ee..f063f0a8da035 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -474,12 +474,13 @@ The syntax listed here is still valid. | `name` | In-game name displayed. | `bash_resist` | How well a material resists bashing damage. | `cut_resist` | How well a material resists cutting damage. -| `bash_dmg_verb` | Verb used when material takes bashing damage. -| `cut_dmg_verb` | Verb used when material takes cutting damage. -| `dmg_adj` | Description added to damaged item in ascending severity. | `acid_resist` | Ability of a material to resist acid. | `elec_resist` | Ability of a material to resist electricity. | `fire_resist` | Ability of a material to resist fire. +| `chip_resist` | Returns resistance to being damaged by attacks against the item itself. +| `bash_dmg_verb` | Verb used when material takes bashing damage. +| `cut_dmg_verb` | Verb used when material takes cutting damage. +| `dmg_adj` | Description added to damaged item in ascending severity. | `dmg_adj` | Adjectives used to describe damage states of a material. | `density` | Density of a material. | `vitamins` | Vitamins in a material. Usually overridden by item specific values. From 78fbf61f365c13194c8a3346b779c1a9b02cbdce Mon Sep 17 00:00:00 2001 From: BevapDin Date: Tue, 31 Dec 2019 01:31:08 +0100 Subject: [PATCH 25/37] Remove pointless check before adding to values of map. If the key does not exist in the map, it is added its value is automatically initialized anyway. --- src/mapgen.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/mapgen.cpp b/src/mapgen.cpp index eb641e5de8e18..accc8dd96b2d8 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -7300,16 +7300,10 @@ std::pair, std::map> get_changed_ids_from_up tripoint_fake_map_edge ) ) { ter_id ter_at_pos = fake_map.ter( pos ); if( ter_at_pos != t_dirt ) { - if( terrains.find( ter_at_pos ) == terrains.end() ) { - terrains[ter_at_pos] = 0; - } terrains[ter_at_pos] += 1; } if( fake_map.has_furn( pos ) ) { furn_id furn_at_pos = fake_map.furn( pos ); - if( furnitures.find( furn_at_pos ) == furnitures.end() ) { - furnitures[furn_at_pos] = 0; - } furnitures[furn_at_pos] += 1; } } From 45e8aadec312732f9cc6e26979de53ca68f21e5f Mon Sep 17 00:00:00 2001 From: BevapDin Date: Tue, 31 Dec 2019 01:32:08 +0100 Subject: [PATCH 26/37] Iterate via map::points_on_zlevel Much simpler and does not need magic values. fixup iterationg --- src/mapgen.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/mapgen.cpp b/src/mapgen.cpp index accc8dd96b2d8..179ba8ed95cfb 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -7272,8 +7272,6 @@ std::pair, std::map> get_changed_ids_from_up const std::string &update_mapgen_id ) { const int fake_map_z = -9; - const tripoint tripoint_below_zero( 0, 0, fake_map_z ); - const tripoint tripoint_fake_map_edge( 23, 23, fake_map_z ); std::map terrains; std::map furnitures; @@ -7296,8 +7294,7 @@ std::pair, std::map> get_changed_ids_from_up any, any, 0, dummy_settings, fake_map, any, 0.0f, calendar::turn, nullptr ); if( update_function->second[0]->update_map( fake_md ) ) { - for( const tripoint &pos : fake_map.points_in_rectangle( tripoint_below_zero, - tripoint_fake_map_edge ) ) { + for( const tripoint &pos : fake_map.points_on_zlevel( fake_map_z ) ) { ter_id ter_at_pos = fake_map.ter( pos ); if( ter_at_pos != t_dirt ) { terrains[ter_at_pos] += 1; From 61dcc4d0d0595f06c7c9f35cb589c49c48f33139 Mon Sep 17 00:00:00 2001 From: BevapDin Date: Tue, 31 Dec 2019 01:33:42 +0100 Subject: [PATCH 27/37] Convert functionality of tinymap::fake_load into its own class. The class takes care of storing the temporary submaps (and deleting them) and it will also not save them into the global mapbuffer. --- src/map.cpp | 37 +++++++++++-------------------------- src/map.h | 11 +++++++++-- src/mapgen.cpp | 6 ++---- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/src/map.cpp b/src/map.cpp index 3ed741cfb49b3..76760fb5b6057 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -7332,44 +7332,29 @@ bool tinymap::inbounds( const tripoint &p ) const // set up a map just long enough scribble on it // this tinymap should never, ever get saved -bool tinymap::fake_load( const furn_id &fur_type, const ter_id &ter_type, const trap_id &trap_type, - int fake_map_z ) +fake_map::fake_map( const furn_id &fur_type, const ter_id &ter_type, const trap_id &trap_type, + const int fake_map_z ) { const tripoint tripoint_below_zero( 0, 0, fake_map_z ); - bool do_terset = true; set_abs_sub( tripoint_below_zero ); for( int gridx = 0; gridx < my_MAPSIZE; gridx++ ) { for( int gridy = 0; gridy < my_MAPSIZE; gridy++ ) { - const tripoint gridp( gridx, gridy, fake_map_z ); - submap *tmpsub = MAPBUFFER.lookup_submap( gridp ); - if( tmpsub == nullptr ) { - generate_uniform( gridp, ter_type ); - do_terset = false; - tmpsub = MAPBUFFER.lookup_submap( gridp ); - if( tmpsub == nullptr ) { - dbg( D_ERROR ) << "failed to generate a fake submap at 0,0,-9 "; - debugmsg( "failed to generate a fake submap at 0,0,-9" ); - return false; - } - } - const size_t gridn = get_nonant( gridp ); + std::unique_ptr sm = std::make_unique(); - setsubmap( gridn, tmpsub ); - } - } + std::uninitialized_fill_n( &sm->ter[0][0], SEEX * SEEY, ter_type ); + std::uninitialized_fill_n( &sm->frn[0][0], SEEX * SEEY, fur_type ); + std::uninitialized_fill_n( &sm->trp[0][0], SEEX * SEEY, trap_type ); + + setsubmap( get_nonant( { gridx, gridy, fake_map_z } ), sm.get() ); - for( const tripoint &pos : points_in_rectangle( tripoint_below_zero, - tripoint( MAPSIZE * SEEX, MAPSIZE * SEEY, fake_map_z ) ) ) { - if( do_terset ) { - ter_set( pos, ter_type ); + temp_submaps_.emplace_back( std::move( sm ) ); } - furn_set( pos, fur_type ); - trap_set( pos, trap_type ); } - return true; } +fake_map::~fake_map() = default; + void map::set_graffiti( const tripoint &p, const std::string &contents ) { if( !inbounds( p ) ) { diff --git a/src/map.h b/src/map.h index 65a89eb8d3c65..ba5ab3e96b3f9 100644 --- a/src/map.h +++ b/src/map.h @@ -1834,8 +1834,15 @@ class tinymap : public map public: tinymap( int mapsize = 2, bool zlevels = false ); bool inbounds( const tripoint &p ) const override; - bool fake_load( const furn_id &fur_type, const ter_id &ter_type, const trap_id &trap_type, - int fake_map_z ); }; +class fake_map : public tinymap +{ + private: + std::vector> temp_submaps_; + public: + fake_map( const furn_id &fur_type, const ter_id &ter_type, const trap_id &trap_type, + int fake_map_z ); + ~fake_map(); +}; #endif diff --git a/src/mapgen.cpp b/src/mapgen.cpp index 179ba8ed95cfb..4eb206c519909 100644 --- a/src/mapgen.cpp +++ b/src/mapgen.cpp @@ -7282,10 +7282,8 @@ std::pair, std::map> get_changed_ids_from_up return std::make_pair( terrains, furnitures ); } - tinymap fake_map; - if( !fake_map.fake_load( f_null, t_dirt, tr_null, fake_map_z ) ) { - return std::make_pair( terrains, furnitures ); - } + ::fake_map fake_map( f_null, t_dirt, tr_null, fake_map_z ); + oter_id any = oter_id( "field" ); // just need a variable here, it doesn't need to be valid const regional_settings dummy_settings; From 9f94abef484b546daff5aa41b0c3a05ca3009021 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Tue, 31 Dec 2019 02:03:03 +0000 Subject: [PATCH 28/37] Fix level of indention error. --- data/json/mapgen/nested/retail_nested.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/json/mapgen/nested/retail_nested.json b/data/json/mapgen/nested/retail_nested.json index ee87fcfdf9425..48f3c48b02fe2 100644 --- a/data/json/mapgen/nested/retail_nested.json +++ b/data/json/mapgen/nested/retail_nested.json @@ -855,12 +855,12 @@ { "item": "pants", "chance": 50 }, { "item": "shirts", "chance": 50 }, { "item": "leather_shop_accessories", "chance": 100 } + ], + "B": [ + { "item": "SUS_tailoring_tool_drawer", "chance": 30, "repeat": [ 0, 1 ] }, + { "item": "SUS_tailoring_fasteners", "chance": 30, "repeat": [ 2, 6 ] } ] - }, - "B": [ - { "item": "SUS_tailoring_tool_drawer", "chance": 30, "repeat": [ 0, 1 ] }, - { "item": "SUS_tailoring_fasteners", "chance": 30, "repeat": [ 2, 6 ] } - ] + } } }, { From 0e9401d652e82760883ace05bbe18f0e0627db8d Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Mon, 30 Dec 2019 23:59:42 +0300 Subject: [PATCH 29/37] Fix savegame migration for Hazardous Waste Sarcophagus --- data/json/obsolete_terrains.json | 16 +++++++ .../overmap_terrain_waste_junk.json | 34 -------------- .../Graphical_Overmap/overmap_terrain.json | 28 ----------- data/mods/alt_map_key/overmap_terrain.json | 32 ------------- src/savegame.cpp | 47 ++++++++++++++++++- 5 files changed, 62 insertions(+), 95 deletions(-) diff --git a/data/json/obsolete_terrains.json b/data/json/obsolete_terrains.json index 9f500f559f41f..ff08cf793d1f9 100644 --- a/data/json/obsolete_terrains.json +++ b/data/json/obsolete_terrains.json @@ -274,6 +274,22 @@ "haz_sar", "haz_sar_entrance_b1", "haz_sar_b1", + "haz_sar_entrance_north", + "haz_sar_north", + "haz_sar_entrance_b1_north", + "haz_sar_b1_north", + "haz_sar_entrance_east", + "haz_sar_east", + "haz_sar_entrance_b1_east", + "haz_sar_b1_east", + "haz_sar_entrance_south", + "haz_sar_south", + "haz_sar_entrance_b1_south", + "haz_sar_b1_south", + "haz_sar_entrance_west", + "haz_sar_west", + "haz_sar_entrance_b1_west", + "haz_sar_b1_west", "house_base_north", "house_base_south", "house_base_east", diff --git a/data/json/overmap/overmap_terrain/overmap_terrain_waste_junk.json b/data/json/overmap/overmap_terrain/overmap_terrain_waste_junk.json index 5bab968600498..2959f76bfd649 100644 --- a/data/json/overmap/overmap_terrain/overmap_terrain_waste_junk.json +++ b/data/json/overmap/overmap_terrain/overmap_terrain_waste_junk.json @@ -172,40 +172,6 @@ "see_cost": 5, "flags": [ "RISK_HIGH" ] }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance", - "name": "hazardous waste sarcophagus", - "sym": "X", - "color": "pink", - "see_cost": 5, - "flags": [ "RISK_HIGH" ] - }, - { - "type": "overmap_terrain", - "id": "haz_sar", - "name": "hazardous waste sarcophagus", - "sym": "X", - "color": "pink", - "see_cost": 5 - }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance_b1", - "name": "hazardous waste sarcophagus", - "sym": "X", - "color": "pink", - "see_cost": 5, - "flags": [ "RISK_HIGH" ] - }, - { - "type": "overmap_terrain", - "id": "haz_sar_b1", - "name": "hazardous waste sarcophagus", - "sym": "X", - "color": "pink", - "see_cost": 5 - }, { "type": "overmap_terrain", "id": "sewer", diff --git a/data/mods/Graphical_Overmap/overmap_terrain.json b/data/mods/Graphical_Overmap/overmap_terrain.json index bd7f583283041..3ab496e93534f 100644 --- a/data/mods/Graphical_Overmap/overmap_terrain.json +++ b/data/mods/Graphical_Overmap/overmap_terrain.json @@ -22865,34 +22865,6 @@ "sym": "ó", "color": "light_green" }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance", - "copy-from": "haz_sar_entrance", - "sym": "Õ", - "color": "green" - }, - { - "type": "overmap_terrain", - "id": "haz_sar", - "copy-from": "haz_sar", - "sym": "Õ", - "color": "green" - }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance_b1", - "copy-from": "haz_sar_entrance_b1", - "sym": "Õ", - "color": "green" - }, - { - "type": "overmap_terrain", - "id": "haz_sar_b1", - "copy-from": "haz_sar_b1", - "sym": "Õ", - "color": "green" - }, { "type": "overmap_terrain", "id": "pump_station_1", diff --git a/data/mods/alt_map_key/overmap_terrain.json b/data/mods/alt_map_key/overmap_terrain.json index 11706a3080958..0ab94a4eeb173 100644 --- a/data/mods/alt_map_key/overmap_terrain.json +++ b/data/mods/alt_map_key/overmap_terrain.json @@ -1882,38 +1882,6 @@ "sym": "t", "color": "pink" }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance", - "copy-from": "haz_sar_entrance", - "name": "hazardous waste sarcophagus", - "sym": "H", - "color": "i_pink" - }, - { - "type": "overmap_terrain", - "id": "haz_sar", - "copy-from": "haz_sar", - "name": "hazardous waste sarcophagus", - "sym": "h", - "color": "i_pink" - }, - { - "type": "overmap_terrain", - "id": "haz_sar_entrance_b1", - "copy-from": "haz_sar_entrance_b1", - "name": "hazardous waste sarcophagus", - "sym": "H", - "color": "i_pink" - }, - { - "type": "overmap_terrain", - "id": "haz_sar_b1", - "copy-from": "haz_sar_b1", - "name": "hazardous waste sarcophagus", - "sym": "h", - "color": "i_pink" - }, { "type": "overmap_terrain", "id": "cave", diff --git a/src/savegame.cpp b/src/savegame.cpp index 1853de65d491f..136722172e72e 100644 --- a/src/savegame.cpp +++ b/src/savegame.cpp @@ -706,7 +706,6 @@ void overmap::convert_terrain( const std::unordered_map & old.compare( 0, 5, "cabin" ) == 0 || old.compare( 0, 5, "pond_" ) == 0 || old.compare( 0, 6, "bandit" ) == 0 || - old.compare( 0, 7, "haz_sar" ) == 0 || // remove after 0.E. old.compare( 0, 7, "shelter" ) == 0 || old.compare( 0, 8, "campsite" ) == 0 || old.compare( 0, 9, "pwr_large" ) == 0 || @@ -786,6 +785,52 @@ void overmap::convert_terrain( const std::unordered_map & } else { debugmsg( "Malformed Megastore" ); } + + } else if( old.compare( 0, 7, "haz_sar" ) == 0 ) { + if( old == "haz_sar_entrance" || old == "haz_sar_entrance_north" ) { + ter_set( pos, oter_id( "haz_sar_1_1_north" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_1_2_north" ) ); + ter_set( pos + point_south, oter_id( "haz_sar_1_3_north" ) ); + ter_set( pos + point_south_west, oter_id( "haz_sar_1_4_north" ) ); + } else if( old == "haz_sar_entrance_south" ) { + ter_set( pos, oter_id( "haz_sar_1_1_south" ) ); + ter_set( pos + point_north, oter_id( "haz_sar_1_2_south" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_1_3_south" ) ); + ter_set( pos + point_north_west, oter_id( "haz_sar_1_4_south" ) ); + } else if( old == "haz_sar_entrance_east" ) { + ter_set( pos, oter_id( "haz_sar_1_1_east" ) ); + ter_set( pos + point_north, oter_id( "haz_sar_1_2_east" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_1_3_east" ) ); + ter_set( pos + point_north_west, oter_id( "haz_sar_1_4_east" ) ); + } else if( old == "haz_sar_entrance_west" ) { + ter_set( pos, oter_id( "haz_sar_1_1_west" ) ); + ter_set( pos + point_south, oter_id( "haz_sar_1_2_west" ) ); + ter_set( pos + point_east, oter_id( "haz_sar_1_3_west" ) ); + ter_set( pos + point_south_east, oter_id( "haz_sar_1_4_west" ) ); + } + + if( old == "haz_sar_entrance_b1" || old == "haz_sar_entrance_b1_north" ) { + ter_set( pos, oter_id( "haz_sar_b_1_north" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_b_2_north" ) ); + ter_set( pos + point_south, oter_id( "haz_sar_b_3_north" ) ); + ter_set( pos + point_south_west, oter_id( "haz_sar_b_4_north" ) ); + } else if( old == "haz_sar_entrance_b1_south" ) { + ter_set( pos, oter_id( "haz_sar_b_1_south" ) ); + ter_set( pos + point_north, oter_id( "haz_sar_b_2_south" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_b_3_south" ) ); + ter_set( pos + point_north_west, oter_id( "haz_sar_b_4_south" ) ); + } else if( old == "haz_sar_entrance_b1_east" ) { + ter_set( pos, oter_id( "haz_sar_b_1_east" ) ); + ter_set( pos + point_north, oter_id( "haz_sar_b_2_east" ) ); + ter_set( pos + point_west, oter_id( "haz_sar_b_3_east" ) ); + ter_set( pos + point_north_west, oter_id( "haz_sar_b_4_east" ) ); + } else if( old == "haz_sar_entrance_b1_west" ) { + ter_set( pos, oter_id( "haz_sar_b_1_west" ) ); + ter_set( pos + point_south, oter_id( "haz_sar_b_2_west" ) ); + ter_set( pos + point_east, oter_id( "haz_sar_b_3_west" ) ); + ter_set( pos + point_south_east, oter_id( "haz_sar_b_4_west" ) ); + } + } else if( old == "house_base_north" ) { ter_set( pos, oter_id( "house_north" ) ); } else if( old == "house_base_south" ) { From 36a95fabfd869331756b4166953107216371132c Mon Sep 17 00:00:00 2001 From: ZhilkinSerg Date: Tue, 31 Dec 2019 01:29:49 +0300 Subject: [PATCH 30/37] Update Android build parameters on Travis --- build-scripts/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-scripts/build.sh b/build-scripts/build.sh index 74807d81cd0d8..cc9172489bd68 100755 --- a/build-scripts/build.sh +++ b/build-scripts/build.sh @@ -145,7 +145,7 @@ then cd android # Specify dumb terminal to suppress gradle's constatnt output of time spent building, which # fills the log with nonsense. - TERM=dumb ./gradlew assembleRelease -Pj=$num_jobs -Plocalize=false -Pabi32=false -Pabi64=true -Pdeps=/home/travis/build/CleverRaven/Cataclysm-DDA/android/app/deps.zip + TERM=dumb ./gradlew assembleRelease -Pj=$num_jobs -Plocalize=false -Pabi_arm_32=false -Pabi_arm_64=true -Pdeps=/home/travis/build/CleverRaven/Cataclysm-DDA/android/app/deps.zip else make -j "$num_jobs" RELEASE=1 CCACHE=1 BACKTRACE=1 CROSS="$CROSS_COMPILATION" LINTJSON=0 From 93d8a1d7c8411849af8a82619ae424663b23457c Mon Sep 17 00:00:00 2001 From: John Candlebury Date: Mon, 30 Dec 2019 18:08:01 -0600 Subject: [PATCH 31/37] Slight rewrite of first intercom mission. --- data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json b/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json index 6605d27f48e8e..e510f29f105dd 100644 --- a/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json +++ b/data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json @@ -93,7 +93,7 @@ "has_generic_rewards": false, "followup": "MISSION_ROBOFAC_INTERCOM_2", "dialogue": { - "describe": "No, I said … [*You hear a short, muffled conversation from across the intercom*]/nWell, it seems we do have a use for you. It's dangerous and you are likely to die, but if you complete it we will allow you limited access to our resources.", + "describe": "…", "offer": "One of our scientists recently left the lab to perform a field test on a prototype robot, but failed to return, and has not been heard of since. Investigate the test and return with her and the prototype. Failing that, return with the data recorder that was attached to our prototype.", "accepted": "We appreciate your help, good luck.", "rejected": "Don't expect our help then.", @@ -330,9 +330,18 @@ { "text": "Wait! Maybe I can help you!", "condition": { "not": { "u_has_mission": "MISSION_ROBOFAC_INTERCOM_1" } }, - "topic": "TALK_MISSION_LIST" + "topic": "MISSION_ROBOFAC_INTERCOM_1_INTRODUCTION" }, { "text": "Alright, I'll leave", "topic": "TALK_DONE" } ] + }, + { + "id": "MISSION_ROBOFAC_INTERCOM_1_INTRODUCTION", + "type": "talk_topic", + "dynamic_line": "Theres nothing you could do for us, now leave before I'm forced to…\n[You hear a short, muffled conversation from across the intercom]\n\nthe intercom: Well, it seems we do have some use for you. It's a dangerous task, but if you complete it we will allow you limited trading access.", + "responses": [ + { "text": "Tell me about it.", "topic": "TALK_MISSION_OFFER" }, + { "text": "I'm not risking myself for a deal that bad.", "topic": "TALK_DONE" } + ] } ] From ab4acd2df0fb9601089e70ad8cffa63b233adde6 Mon Sep 17 00:00:00 2001 From: arijust <54635208+arijust@users.noreply.github.com> Date: Tue, 31 Dec 2019 03:40:43 +0100 Subject: [PATCH 32/37] Magiclysm - Golems (#35658) * Adds 3 kinds of golems. They still need more work. * Changes to golems. Still not done. Add broken golems and effect/spells later. * Add slow effect. * Add spells for golems. * Update monsterspells.json * Update effects.json * Update monsters.json * Create constructs.json * Create deconstruction.json * Update deconstruction.json * Update monsterspells.json * Edit golem descriptions. * Update deconstruction.json * Added golems to forest mon_group I didn't have a better idea where to add them. * Fix monsters weight. * Change weight from grams to kilograms. * Tweak spells. * Change valid targets for gas_attack spell Co-Authored-By: Curtis Merrill * Lint * One more lint * Fix regeneration for lemure. * some fixes * remove merge error * more color fixes Co-authored-by: Curtis Merrill --- data/mods/Magiclysm/Spells/monsterspells.json | 43 +++++++++ data/mods/Magiclysm/items/constructs.json | 52 ++++++++++ data/mods/Magiclysm/monstergroups.json | 3 + data/mods/Magiclysm/monsters/monsters.json | 95 +++++++++++++++++++ .../Magiclysm/recipes/deconstruction.json | 29 ++++++ 5 files changed, 222 insertions(+) create mode 100644 data/mods/Magiclysm/items/constructs.json create mode 100644 data/mods/Magiclysm/recipes/deconstruction.json diff --git a/data/mods/Magiclysm/Spells/monsterspells.json b/data/mods/Magiclysm/Spells/monsterspells.json index 84b68d133b3bd..7976d85806aee 100644 --- a/data/mods/Magiclysm/Spells/monsterspells.json +++ b/data/mods/Magiclysm/Spells/monsterspells.json @@ -17,6 +17,49 @@ "effect": "projectile_attack", "extra_effects": [ { "id": "light_healing", "hit_self": true } ] }, + { + "id": "rocket_punch", + "type": "SPELL", + "name": "Rocket Punch", + "description": "Ejects giant fist from arm.", + "valid_targets": [ "hostile" ], + "flags": [ "NO_LEGS" ], + "damage_type": "bash", + "min_damage": 30, + "max_damage": 40, + "damage_increment": 2, + "max_level": 5, + "min_range": 1, + "max_range": 2, + "range_increment": 0.2, + "effect": "projectile_attack" + }, + { + "id": "gas_attack", + "type": "SPELL", + "name": "Gas Attack", + "description": "Spreads toxic gas around itself.", + "valid_targets": [ "self", "hostile", "ground" ], + "flags": [ "NO_HANDS", "NO_LEGS" ], + "damage_type": "bio", + "min_damage": 1, + "max_damage": 1, + "max_level": 5, + "min_range": 1, + "max_range": 3, + "range_increment": 0.2, + "effect": "target_attack", + "field_id": "fd_toxic_gas", + "field_chance": 10, + "min_field_intensity": 1, + "max_field_intensity": 1, + "min_duration": 1000, + "max_duration": 6000, + "duration_increment": 1000, + "min_aoe": 1, + "max_aoe": 2, + "aoe_increment": 0.2 + }, { "type": "SPELL", "id": "mon_demon_fireball", diff --git a/data/mods/Magiclysm/items/constructs.json b/data/mods/Magiclysm/items/constructs.json new file mode 100644 index 0000000000000..efc54880b3eb1 --- /dev/null +++ b/data/mods/Magiclysm/items/constructs.json @@ -0,0 +1,52 @@ +[ + { + "type": "GENERIC", + "id": "broken_claygolem", + "symbol": "x", + "color": "brown", + "name": "broken clay golem", + "category": "other", + "description": "A broken clay golem, looking like piece of post-modern art. Could be smashed for clay.", + "price": 10000, + "material": [ "clay" ], + "weight": "122 kg", + "volume": "120 L", + "bashing": 4, + "cutting": 4, + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + }, + { + "type": "GENERIC", + "id": "broken_stonegolem", + "symbol": "x", + "color": "light_gray", + "name": "broken stone golem", + "category": "other", + "description": "A broken stone golem, not that much different from big boulder. Could be smashed for stone.", + "price": 10000, + "material": [ "stone" ], + "weight": "162 kg", + "volume": "120 L", + "bashing": 4, + "cutting": 4, + "to_hit": -3, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + }, + { + "type": "GENERIC", + "id": "broken_irongolem", + "symbol": "x", + "color": "dark_gray", + "name": "broken iron golem", + "category": "other", + "description": "A broken iron golem, with all iron you would possibly ever need. Could be smashed for iron.", + "price": 100000, + "material": [ "iron" ], + "weight": "945 kg", + "volume": "120 L", + "bashing": 30, + "to_hit": -5, + "flags": [ "TRADER_AVOID", "NO_REPAIR" ] + } +] diff --git a/data/mods/Magiclysm/monstergroups.json b/data/mods/Magiclysm/monstergroups.json index ac3c80a0802fc..ba251b0eba50a 100644 --- a/data/mods/Magiclysm/monstergroups.json +++ b/data/mods/Magiclysm/monstergroups.json @@ -14,6 +14,9 @@ { "monster": "mon_owlbear", "freq": 10, "cost_multiplier": 10 }, { "monster": "mon_wisp", "freq": 3, "cost_multiplier": 10, "conditions": [ "NIGHT" ] }, { "monster": "mon_troll", "freq": 3, "cost_multiplier": 10, "conditions": [ "DAY" ] }, + { "monster": "mon_claygolem", "freq": 8, "cost_multiplier": 3 }, + { "monster": "mon_stonegolem", "freq": 4, "cost_multiplier": 5 }, + { "monster": "mon_irongolem", "freq": 2, "cost_multiplier": 8 }, { "monster": "mon_demon_spiderling", "freq": 15, "cost_multiplier": 5, "pack_size": [ 3, 7 ] } ] }, diff --git a/data/mods/Magiclysm/monsters/monsters.json b/data/mods/Magiclysm/monsters/monsters.json index f9076f9f62f0f..7fc8d45db5cf3 100644 --- a/data/mods/Magiclysm/monsters/monsters.json +++ b/data/mods/Magiclysm/monsters/monsters.json @@ -330,5 +330,100 @@ "death_function": [ "NORMAL" ], "regenerates": 1, "flags": [ "SEES", "SMELLS", "HEARS", "STUMBLES", "PATH_AVOID_FIRE", "REVIVES" ] + }, + { + "id": "mon_claygolem", + "type": "MONSTER", + "name": "clay golem", + "description": "A large, humanoid golem made from clay. Its proportions are off and it seems fragile.", + "default_faction": "robot", + "bodytype": "human", + "species": [ "ROBOT" ], + "diff": 2, + "volume": "120 L", + "weight": "122 kg", + "hp": 100, + "speed": 80, + "material": [ "clay" ], + "symbol": "X", + "color": "brown", + "aggression": 10, + "morale": 100, + "melee_skill": 6, + "melee_dice": 2, + "melee_dice_sides": 10, + "melee_cut": 5, + "armor_bash": 10, + "armor_cut": 10, + "dodge": 0, + "vision_day": 40, + "vision_night": 40, + "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ] + }, + { + "id": "mon_stonegolem", + "type": "MONSTER", + "name": "stone golem", + "description": "A large, humanoid golem made from stone. Its fists look similar to rockets.", + "default_faction": "robot", + "bodytype": "human", + "species": [ "ROBOT" ], + "diff": 2, + "volume": "120 L", + "weight": "162 kg", + "hp": 250, + "speed": 60, + "material": [ "stone" ], + "symbol": "X", + "color": "light_gray", + "aggression": 10, + "morale": 100, + "melee_skill": 6, + "melee_dice": 3, + "melee_dice_sides": 8, + "melee_cut": 6, + "armor_bash": 20, + "armor_cut": 20, + "dodge": 0, + "vision_day": 40, + "vision_night": 40, + "special_attacks": [ { "type": "spell", "spell_id": "rocket_punch", "spell_level": 5, "cooldown": 10 } ], + "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ] + }, + { + "id": "mon_irongolem", + "type": "MONSTER", + "name": "iron golem", + "description": "A large, humanoid golem made from iron. Some sort of noxious gas seems to be seeping from its mouth.", + "default_faction": "robot", + "bodytype": "human", + "species": [ "ROBOT" ], + "diff": 2, + "volume": "120 L", + "weight": "945 kg", + "hp": 400, + "speed": 50, + "material": [ "iron" ], + "symbol": "X", + "color": "dark_gray", + "aggression": 10, + "morale": 100, + "melee_skill": 6, + "melee_dice": 3, + "melee_dice_sides": 10, + "melee_cut": 7, + "armor_bash": 32, + "armor_cut": 32, + "dodge": 0, + "vision_day": 40, + "vision_night": 40, + "special_attacks": [ { "type": "spell", "spell_id": "gas_attack", "spell_level": 5, "cooldown": 60 } ], + "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], + "death_function": [ "BROKEN" ], + "flags": [ "SEES", "NO_BREATHE", "ACIDPROOF", "LOUDMOVES" ] } ] diff --git a/data/mods/Magiclysm/recipes/deconstruction.json b/data/mods/Magiclysm/recipes/deconstruction.json new file mode 100644 index 0000000000000..5fe9ad10e4cdd --- /dev/null +++ b/data/mods/Magiclysm/recipes/deconstruction.json @@ -0,0 +1,29 @@ +[ + { + "result": "broken_claygolem", + "type": "uncraft", + "skill_used": "spellcraft", + "difficulty": 2, + "time": "4 h", + "qualities": [ { "id": "HAMMER", "level": 1 } ], + "components": [ [ [ "clay_lump", 231 ] ] ] + }, + { + "result": "broken_stonegolem", + "type": "uncraft", + "skill_used": "spellcraft", + "difficulty": 4, + "time": "4 h", + "qualities": [ { "id": "HAMMER", "level": 1 } ], + "components": [ [ [ "rock", 222 ] ], [ [ "sharp_rock", 33 ] ] ] + }, + { + "result": "broken_irongolem", + "type": "uncraft", + "skill_used": "spellcraft", + "difficulty": 6, + "time": "6 h", + "qualities": [ { "id": "HAMMER", "level": 1 }, { "id": "SAW_M", "level": 1 } ], + "components": [ [ [ "scrap", 800 ] ], [ [ "steel_lump", 200 ] ] ] + } +] From 1e3f85e023dbfff32087a7586539fa1e9338a3be Mon Sep 17 00:00:00 2001 From: Eric <52087122+Ramza13@users.noreply.github.com> Date: Mon, 30 Dec 2019 21:47:21 -0500 Subject: [PATCH 33/37] Options to allow previous behavior around prompt for dangerous terrain (#36037) * Add new options to always prompt fo rdangerous terrain and only while crouching. * Changed default to legacy behavior --- src/game.cpp | 24 ++++++++++++++++++------ src/options.cpp | 8 +++++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/game.cpp b/src/game.cpp index 0d7457525d324..a41fdd9cce361 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -8949,16 +8949,28 @@ bool game::walk_move( const tripoint &dest_loc ) u.set_underwater( false ); if( !shifting_furniture && !pushing && is_dangerous_tile( dest_loc ) ) { - if( !u.movement_mode_is( CMM_RUN ) ) { - std::vector harmful_stuff = get_dangerous_tile( dest_loc ); + std::vector harmful_stuff = get_dangerous_tile( dest_loc ); + if( get_option( "DANGEROUS_TERRAIN_WARNING_PROMPT" ) == "ALWAYS" && + !prompt_dangerous_tile( dest_loc ) ) { + return true; + } else if( get_option( "DANGEROUS_TERRAIN_WARNING_PROMPT" ) == "RUNNING" && + ( !u.movement_mode_is( CMM_RUN ) || !prompt_dangerous_tile( dest_loc ) ) ) { + add_msg( m_warning, + _( "Stepping into that %1$s looks risky. Run into it if you wish to enter anyway." ), + enumerate_as_string( harmful_stuff ) ); + return true; + } else if( get_option( "DANGEROUS_TERRAIN_WARNING_PROMPT" ) == "CROUCHING" && + ( !u.movement_mode_is( CMM_CROUCH ) || !prompt_dangerous_tile( dest_loc ) ) ) { + add_msg( m_warning, + _( "Stepping into that %1$s looks risky. Crouch and move into it if you wish to enter anyway." ), + enumerate_as_string( harmful_stuff ) ); + return true; + } else if( get_option( "DANGEROUS_TERRAIN_WARNING_PROMPT" ) == "NEVER" && + !u.movement_mode_is( CMM_RUN ) ) { add_msg( m_warning, _( "Stepping into that %1$s looks risky. Run into it if you wish to enter anyway." ), enumerate_as_string( harmful_stuff ) ); return true; - } else if( !get_option( "DANGEROUS_RUNNING" ) ) { - if( !prompt_dangerous_tile( dest_loc ) ) { - return true; - } } } // Used to decide whether to print a 'moving is slow message diff --git a/src/options.cpp b/src/options.cpp index 7c016b57f738c..df472bb059c3b 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -1140,9 +1140,11 @@ void options_manager::add_options_general() false ); - add( "DANGEROUS_RUNNING", "general", translate_marker( "Dangerous running" ), - translate_marker( "If true, the player will not be prevented from moving into known hazardous tiles while running." ), - false + add( "DANGEROUS_TERRAIN_WARNING_PROMPT", "general", + translate_marker( "Dangerous terrain warning prompt" ), + translate_marker( "Always: You will be prompted to move onto dangerous tiles. Running: You will only be able to move onto dangerous tiles while running and will be prompted. Crouching: You will only be able to move onto a dangerous tile while crouching and will be prompted. Never: You will not be able to move onto a dangerous tile unless running and will not be warned or prompted." ), + { { "ALWAYS", to_translation( "Always" ) }, { "RUNNING", translate_marker( "Running" ) }, { "CROUCHING", translate_marker( "Crouching" ) }, { "NEVER", translate_marker( "Never" ) } }, + "ALWAYS" ); mOptionsSort["general"]++; From 521066c6a8d07b8601aefbfd3eb7aaa228bb356a Mon Sep 17 00:00:00 2001 From: Curtis Merrill Date: Mon, 30 Dec 2019 21:48:13 -0500 Subject: [PATCH 34/37] refactor inventory_item_menu (#36206) --- src/advanced_inv.cpp | 3 ++- src/game.cpp | 7 +++---- src/game.h | 2 +- src/game_inventory.cpp | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index 8f51b1b03ec59..aec50f7cbf500 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -1393,6 +1393,7 @@ void advanced_inventory::display() if( spane.get_area() == AIM_INVENTORY || spane.get_area() == AIM_WORN ) { int idx = spane.get_area() == AIM_INVENTORY ? sitem->idx : player::worn_position_to_index( sitem->idx ); + item_location loc( g->u, &g->u.i_at( idx ) ); // Setup a "return to AIM" activity. If examining the item creates a new activity // (e.g. reading, reloading, activating), the new activity will be put on top of // "return to AIM". Once the new activity is finished, "return to AIM" comes back @@ -1401,7 +1402,7 @@ void advanced_inventory::display() // "return to AIM". do_return_entry(); assert( g->u.has_activity( activity_id( "ACT_ADV_INVENTORY" ) ) ); - ret = g->inventory_item_menu( idx, info_startx, info_width, + ret = g->inventory_item_menu( loc, info_startx, info_width, src == advanced_inventory::side::left ? game::LEFT_OF_INFO : game::RIGHT_OF_INFO ); if( !g->u.has_activity( activity_id( "ACT_ADV_INVENTORY" ) ) ) { exit = true; diff --git a/src/game.cpp b/src/game.cpp index a41fdd9cce361..a3e546ebfc4e6 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1956,18 +1956,17 @@ void game::handle_key_blocking_activity() /* item submenu for 'i' and '/' * It use draw_item_info to draw item info and action menu * -* @param pos position of item in inventory +* @param locThisItem the item * @param iStartX Left coordinate of the item info window * @param iWidth width of the item info window (height = height of terminal) * @return getch */ -int game::inventory_item_menu( int pos, int iStartX, int iWidth, +int game::inventory_item_menu( item_location locThisItem, int iStartX, int iWidth, const inventory_item_menu_positon position ) { int cMenu = static_cast( '+' ); - item &oThisItem = u.i_at( pos ); - item_location locThisItem( u, &oThisItem ); + item &oThisItem = *locThisItem; if( u.has_item( oThisItem ) ) { #if defined(__ANDROID__) if( get_option( "ANDROID_INVENTORY_AUTOADD" ) ) { diff --git a/src/game.h b/src/game.h index bd898594a779c..df64522ef294f 100644 --- a/src/game.h +++ b/src/game.h @@ -568,7 +568,7 @@ class game RIGHT_OF_INFO, LEFT_TERMINAL_EDGE, }; - int inventory_item_menu( int pos, int startx = 0, int width = 50, + int inventory_item_menu( item_location locThisItem, int startx = 0, int width = 50, inventory_item_menu_positon position = RIGHT_OF_INFO ); /** Custom-filtered menu for inventory and nearby items and those that within specified radius */ diff --git a/src/game_inventory.cpp b/src/game_inventory.cpp index dd49c8693cef8..c1f2b746152e4 100644 --- a/src/game_inventory.cpp +++ b/src/game_inventory.cpp @@ -201,7 +201,7 @@ void game_menus::inv::common( avatar &you ) } g->refresh_all(); - res = g->inventory_item_menu( you.get_item_position( location.get_item() ) ); + res = g->inventory_item_menu( location ); g->refresh_all(); } while( loop_options.count( res ) != 0 ); From 48df630cb8c2e645eb9068519ac176c9c696e13b Mon Sep 17 00:00:00 2001 From: Eric <52087122+Ramza13@users.noreply.github.com> Date: Mon, 30 Dec 2019 21:49:18 -0500 Subject: [PATCH 35/37] Prevent npc's jumping from ledges or running into dangerous tiles (#36475) --- src/npcmove.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/npcmove.cpp b/src/npcmove.cpp index 5997a2ddb52d7..80b52f8e5b41f 100644 --- a/src/npcmove.cpp +++ b/src/npcmove.cpp @@ -2178,7 +2178,7 @@ bool npc::can_move_to( const tripoint &p, bool no_bashing ) const { // Allow moving into any bashable spots, but penalize them during pathing // Doors are not passable for hallucinations - return( rl_dist( pos(), p ) <= 1 && + return( rl_dist( pos(), p ) <= 1 && g->m.has_floor( p ) && !g->is_dangerous_tile( p ) && ( g->m.passable( p ) || ( can_open_door( p, !g->m.is_outside( pos() ) ) && !is_hallucination() ) || ( !no_bashing && g->m.bash_rating( smash_ability(), p ) > 0 ) ) ); From b693d932bdd14d63d864096d5329821f47b9b650 Mon Sep 17 00:00:00 2001 From: 8street Date: Tue, 31 Dec 2019 05:51:21 +0300 Subject: [PATCH 36/37] Extended pickup window (#36492) --- src/pickup.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pickup.cpp b/src/pickup.cpp index 863209a068d37..288ea626d3f7b 100644 --- a/src/pickup.cpp +++ b/src/pickup.cpp @@ -567,6 +567,15 @@ void Pickup::pick_up( const tripoint &p, int min, from_where get_items_from ) int pickupH = maxitems + pickupBorderRows; int pickupW = 44; + //find max length of item name and resize pickup window width + for( const std::list &cur_list : stacked_here ) { + const item &this_item = *cur_list.front(); + int item_len = utf8_width( remove_color_tags( this_item.display_name() ) ) + 10; + if( item_len > pickupW && item_len < TERMX ) { + pickupW = item_len; + } + } + int itemsW = pickupW; int pickupX = 0; From 528f49b63f3171b193d55504fc543689bf2df903 Mon Sep 17 00:00:00 2001 From: Fris0uman <41293484+Fris0uman@users.noreply.github.com> Date: Tue, 31 Dec 2019 04:09:03 +0100 Subject: [PATCH 37/37] Jsonize crafting skill penalty from mutations (#36565) * Jsonize crafting skill penalty from mutations * Halve the penalty from paws mutations --- data/json/mutations/mutations.json | 12 ++++++++++++ doc/JSON_INFO.md | 1 + src/crafting.cpp | 18 ++++++------------ src/mutation.h | 3 +++ src/mutation_data.cpp | 9 +++++++++ 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index 70b79ea9edc80..932266ca20252 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -4854,6 +4854,7 @@ "description": "Your hands have fused into quasi-paws. Fine manipulation is a challenge: permanent hand encumbrance of 10, difficulty with delicate craftwork, and your gloves don't fit. But they handle water better.", "encumbrance_always": [ [ "HAND_L", 10 ], [ "HAND_R", 10 ] ], "restricts_gear": [ "HAND_L", "HAND_R" ], + "craft_skill_bonus": [ [ "electronics", -2 ], [ "tailor", -2 ], [ "mechanics", -2 ] ], "types": [ "HANDS" ], "prereqs": [ "CLAWS", "CLAWS_RETRACT", "CLAWS_RAT" ], "cancels": [ "TALONS" ], @@ -4869,6 +4870,17 @@ "ugliness": 3, "mixed_effect": true, "description": "Your paws are much larger now. Manual dexterity is difficult: permanent hand encumbrance of 20, serious problems crafting, and no gloves. But you can swim more effectively.", + "craft_skill_bonus": [ + [ "electronics", -4 ], + [ "tailor", -4 ], + [ "mechanics", -4 ], + [ "firstaid", -2 ], + [ "computer", -2 ], + [ "traps", -2 ], + [ "fabrication", -2 ], + [ "cooking", -2 ], + [ "survival", -2 ] + ], "encumbrance_always": [ [ "HAND_L", 20 ], [ "HAND_R", 20 ] ], "restricts_gear": [ "HAND_L", "HAND_R" ], "types": [ "HANDS" ], diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md index f063f0a8da035..9c0e13b01c8ab 100644 --- a/doc/JSON_INFO.md +++ b/doc/JSON_INFO.md @@ -1017,6 +1017,7 @@ Note that even though most statistics yield an integer, you should still use "good": 1 } ] // "neutral/good/ignored" // Good increases pos and cancels neg, neut cancels neg, ignored cancels both "vitamin_rates": [ [ "vitC", -1200 ] ], // How much extra vitamins do you consume per minute. Negative values mean production "vitamins_absorb_multi": [ [ "flesh", [ [ "vitA", 0 ], [ "vitB", 0 ], [ "vitC", 0 ], [ "calcium", 0 ], [ "iron", 0 ] ], [ "all", [ [ "vitA", 2 ], [ "vitB", 2 ], [ "vitC", 2 ], [ "calcium", 2 ], [ "iron", 2 ] ] ] ], // multiplier of vitamin absorption based on material. "all" is every material. supports multiple materials. +"craft_skill_bonus": [ [ "electronics", -2 ], [ "tailor", -2 ], [ "mechanics", -2 ] ], // Skill affected by the mutation and their bonuses. Bonuses can be negative, a bonus of 4 is worth 1 full skill level. "restricts_gear" : [ "TORSO" ], //list of bodyparts that get restricted by this mutation "allow_soft_gear" : true, //If there is a list of 'restricts_gear' this sets if the location still allows items made out of soft materials (Only one of the types need to be soft for it to be considered soft). (default: false) "destroys_gear" : true, //If true, destroys the gear in the 'restricts_gear' location when mutated into. (default: false) diff --git a/src/crafting.cpp b/src/crafting.cpp index cea5d6c85cd02..65e81f1b2aff0 100644 --- a/src/crafting.cpp +++ b/src/crafting.cpp @@ -29,6 +29,7 @@ #include "map.h" #include "map_iterator.h" #include "messages.h" +#include "mutation.h" #include "npc.h" #include "options.h" #include "output.h" @@ -73,8 +74,6 @@ static const efftype_id effect_contacts( "contacts" ); void drop_or_handle( const item &newit, player &p ); static const trait_id trait_DEBUG_HS( "DEBUG_HS" ); -static const trait_id trait_PAWS_LARGE( "PAWS_LARGE" ); -static const trait_id trait_PAWS( "PAWS" ); static const trait_id trait_BURROW( "BURROW" ); static bool crafting_allowed( const player &p, const recipe &rec ) @@ -923,17 +922,12 @@ double player::crafting_success_roll( const recipe &making ) const // It's tough to craft with paws. Fortunately it's just a matter of grip and fine-motor, // not inability to see what you're doing - if( has_trait( trait_PAWS ) || has_trait( trait_PAWS_LARGE ) ) { - int paws_rank_penalty = 0; - if( has_trait( trait_PAWS_LARGE ) ) { - paws_rank_penalty += 1; - } - if( making.skill_used == skill_id( "electronics" ) - || making.skill_used == skill_id( "tailor" ) - || making.skill_used == skill_id( "mechanics" ) ) { - paws_rank_penalty += 1; + for( const std::pair< trait_id, trait_data > &mut : my_mutations ) { + for( const std::pair &skib : mut.first->craft_skill_bonus ) { + if( making.skill_used == skib.first ) { + skill_dice += skib.second; + } } - skill_dice -= paws_rank_penalty * 4; } // Sides on dice is 16 plus your current intelligence diff --git a/src/mutation.h b/src/mutation.h index 053738d2c38cb..ee12948f04fbb 100644 --- a/src/mutation.h +++ b/src/mutation.h @@ -146,6 +146,9 @@ struct mutation_branch { cata::optional scent_mask; int bleed_resist = 0; + /**Map of crafting skills modifiers, can be negative*/ + std::map craft_skill_bonus; + /**What do you smell like*/ cata::optional scent_typeid; diff --git a/src/mutation_data.cpp b/src/mutation_data.cpp index c7bb5dbd88ab8..f3c9209783917 100644 --- a/src/mutation_data.cpp +++ b/src/mutation_data.cpp @@ -411,6 +411,15 @@ void mutation_branch::load( const JsonObject &jo, const std::string & ) spells_learned.emplace( sp, ja.next_int() ); } + for( JsonArray ja : jo.get_array( "craft_skill_bonus" ) ) { + const skill_id skid( ja.next_string() ); + if( skid.is_valid() ) { + craft_skill_bonus.emplace( skid, ja.next_int() ); + } else { + jo.throw_error( "invalid skill_id" ); + } + } + for( JsonArray ja : jo.get_array( "lumination" ) ) { const body_part bp = get_body_part_token( ja.next_string() ); lumination.emplace( bp, ja.next_float() );