diff options
Diffstat (limited to '0.E.3.patch')
-rw-r--r-- | 0.E.3.patch | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/0.E.3.patch b/0.E.3.patch new file mode 100644 index 0000000..32ad0f0 --- /dev/null +++ b/0.E.3.patch @@ -0,0 +1,367 @@ +From 767d9c26e9a9b42c8a86ae23e6b930c627df1831 Mon Sep 17 00:00:00 2001 +From: Serhiy Zahoriya <serhiy.int@gmail.com> +Date: Mon, 15 Jun 2020 15:43:42 +0300 +Subject: [PATCH 1/5] Skip unnecessary weather calculations for root cellar + #41324 + +--- + src/item.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/item.cpp b/src/item.cpp +index 635b56c921..9dc9048a4b 100644 +--- a/src/item.cpp ++++ b/src/item.cpp +@@ -8510,7 +8510,7 @@ void item::process_temperature_rot( float insulation, const tripoint &pos, + + //Use weather if above ground, use map temp if below + double env_temperature = 0; +- if( pos.z >= 0 ) { ++ if( pos.z >= 0 && flag != TEMP_ROOT_CELLAR ) { + double weather_temperature = wgen.get_weather_temperature( pos, time, seed ); + env_temperature = weather_temperature + enviroment_mod + local_mod; + } else { +-- +2.29.2 + +From 2a6ac5bcc085f54a4e483c31f463f0e15d8abe18 Mon Sep 17 00:00:00 2001 +From: Serhiy Zahoriya <serhiy.int@gmail.com> +Date: Mon, 15 Jun 2020 15:59:53 +0300 +Subject: [PATCH 2/5] Backported fixes for ice lab spoiling #39813 + +Co-authored-by: Hirmuolio <hirmuolio@gmail.com> +--- + src/item.cpp | 3 +-- + src/map.cpp | 3 +-- + 2 files changed, 2 insertions(+), 4 deletions(-) + +diff --git a/src/item.cpp b/src/item.cpp +index 9dc9048a4b..2dcc09858e 100644 +--- a/src/item.cpp ++++ b/src/item.cpp +@@ -8486,8 +8486,7 @@ void item::process_temperature_rot( float insulation, const tripoint &pos, + + const weather_generator &wgen = g->weather.get_cur_weather_gen(); + const unsigned int seed = g->get_seed(); +- const tripoint &local = g->m.getlocal( pos ); +- int local_mod = g->new_game ? 0 : g->m.get_temperature( local ); ++ int local_mod = g->new_game ? 0 : g->m.get_temperature( pos ); + + int enviroment_mod; + // Toilets and vending machines will try to get the heat radiation and convection during mapgen and segfault. +diff --git a/src/map.cpp b/src/map.cpp +index 8a13124b4d..9cc45a6ea6 100755 +--- a/src/map.cpp ++++ b/src/map.cpp +@@ -6723,9 +6723,8 @@ bool map::has_rotten_away( item &itm, const tripoint &pnt ) const + template <typename Container> + void map::remove_rotten_items( Container &items, const tripoint &pnt ) + { +- const tripoint abs_pnt = getabs( pnt ); + for( auto it = items.begin(); it != items.end(); ) { +- if( has_rotten_away( *it, abs_pnt ) ) { ++ if( has_rotten_away( *it, pnt ) ) { + if( it->is_comestible() ) { + rotten_item_spawn( *it, pnt ); + } +-- +2.29.2 + +From ef29ca7c4bc6b9c3278e2bbca1598bdd15572d66 Mon Sep 17 00:00:00 2001 +From: Serhiy Zahoriya <serhiy.int@gmail.com> +Date: Mon, 15 Jun 2020 16:15:15 +0300 +Subject: [PATCH 3/5] Backported #39405: Update string extraction script and + fix computer translation + +Co-authored-by: Qrox <qrox@sina.com> +--- + lang/extract_json_strings.py | 18 ++++++++++++++---- + src/computer.cpp | 5 +++-- + src/mapgen.cpp | 7 ++++--- + 3 files changed, 21 insertions(+), 9 deletions(-) + +diff --git a/lang/extract_json_strings.py b/lang/extract_json_strings.py +index 92cb76fb0d..f36f705aeb 100755 +--- a/lang/extract_json_strings.py ++++ b/lang/extract_json_strings.py +@@ -64,8 +64,10 @@ ignore_files = {os.path.normpath(i) for i in { + ignorable = { + "ammo_effect", + "behavior", ++ "charge_removal_blacklist", + "city_building", + "colordef", ++ "disease_type", + "emit", + "enchantment", + "event_transformation", +@@ -93,6 +95,7 @@ ignorable = { + "region_settings", + "requirement", + "rotatable_symbol", ++ "SCENARIO_BLACKLIST", + "scent_type", + "skill_boost", + "TRAIT_BLACKLIST", +@@ -247,6 +250,9 @@ def extract_martial_art(item): + if "description" in item: + writestr(outfile, item["description"], + comment="Description for martial art '{}'".format(name)) ++ if "initiate" in item: ++ writestr(outfile, item["initiate"], format_strings=True, ++ comment="initiate message for martial art '{}'".format(name)) + onhit_buffs = item.get("onhit_buffs", list()) + static_buffs = item.get("static_buffs", list()) + onmove_buffs = item.get("onmove_buffs", list()) +@@ -641,10 +647,14 @@ def extract_missiondef(item): + def extract_mutation(item): + outfile = get_outfile("mutation") + +- item_name = found = item.get("name") ++ item_name_or_id = found = item.get("name") + if found is None: +- raise WrongJSONItem("JSON item don't contain 'name' field", item) +- writestr(outfile, found) ++ if "copy-from" in item: ++ item_name_or_id = item["id"] ++ else: ++ raise WrongJSONItem("JSON item don't contain 'name' field", item) ++ else: ++ writestr(outfile, found) + + simple_fields = [ "description" ] + +@@ -652,7 +662,7 @@ def extract_mutation(item): + found = item.get(f) + # Need that check due format string argument + if found is not None: +- writestr(outfile, found, comment="Description for {}".format(item_name)) ++ writestr(outfile, found, comment="Description for {}".format(item_name_or_id)) + + if "attacks" in item: + attacks = item.get("attacks") +diff --git a/src/computer.cpp b/src/computer.cpp +index f11ce32832..b98d2f98c9 100644 +--- a/src/computer.cpp ++++ b/src/computer.cpp +@@ -377,10 +377,11 @@ struct enum_traits<computer_failure_type> { + + computer_option computer_option::from_json( const JsonObject &jo ) + { +- const std::string name = jo.get_string( "name" ); ++ translation name; ++ jo.read( "name", name ); + const computer_action action = jo.get_enum_value<computer_action>( "action" ); + const int sec = jo.get_int( "security", 0 ); +- return computer_option( name, action, sec ); ++ return computer_option( name.translated(), action, sec ); + } + + computer_failure computer_failure::from_json( const JsonObject &jo ) +diff --git a/src/mapgen.cpp b/src/mapgen.cpp +index 0d0e8f5043..0da25ea2fb 100644 +--- a/src/mapgen.cpp ++++ b/src/mapgen.cpp +@@ -1439,14 +1439,14 @@ class jmapgen_make_rubble : public jmapgen_piece + class jmapgen_computer : public jmapgen_piece + { + public: +- std::string name; ++ translation name; + translation access_denied; + int security; + std::vector<computer_option> options; + std::vector<computer_failure> failures; + bool target; + jmapgen_computer( const JsonObject &jsi ) { +- name = jsi.get_string( "name" ); ++ jsi.read( "name", name ); + jsi.read( "access_denied", access_denied ); + security = jsi.get_int( "security", 0 ); + target = jsi.get_bool( "target", false ); +@@ -1466,7 +1466,8 @@ class jmapgen_computer : public jmapgen_piece + const int ry = y.get(); + dat.m.ter_set( point( rx, ry ), t_console ); + dat.m.furn_set( point( rx, ry ), f_null ); +- computer *cpu = dat.m.add_computer( tripoint( rx, ry, dat.m.get_abs_sub().z ), name, security ); ++ computer *cpu = dat.m.add_computer( tripoint( rx, ry, dat.m.get_abs_sub().z ), name.translated(), ++ security ); + for( const auto &opt : options ) { + cpu->add_option( opt ); + } +-- +2.29.2 + +From 3dd040eed275303c8588bb0809e738e9d327cf0a Mon Sep 17 00:00:00 2001 +From: Serhiy Zahoriya <serhiy.int@gmail.com> +Date: Mon, 15 Jun 2020 16:20:42 +0300 +Subject: [PATCH 4/5] Backported #40025: Fix a crash when npc tries to heal + horse-mounted player + +Co-authored-by: Qrox <qrox@sina.com> +--- + src/game.cpp | 18 ++++++++++++------ + src/npcmove.cpp | 24 +++++++++++++----------- + 2 files changed, 25 insertions(+), 17 deletions(-) + +diff --git a/src/game.cpp b/src/game.cpp +index 71772ae859..0b218184fe 100644 +--- a/src/game.cpp ++++ b/src/game.cpp +@@ -4538,16 +4538,22 @@ template const Creature *game::critter_at<Creature>( const tripoint &, bool ) co + template<typename T> + shared_ptr_fast<T> game::shared_from( const T &critter ) + { +- if( const shared_ptr_fast<monster> mon_ptr = critter_tracker->find( critter.pos() ) ) { +- return std::dynamic_pointer_cast<T>( mon_ptr ); +- } + if( static_cast<const Creature *>( &critter ) == static_cast<const Creature *>( &u ) ) { + // u is not stored in a shared_ptr, but it won't go out of scope anyway + return std::dynamic_pointer_cast<T>( u_shared_ptr ); + } +- for( auto &cur_npc : active_npc ) { +- if( static_cast<const Creature *>( cur_npc.get() ) == static_cast<const Creature *>( &critter ) ) { +- return std::dynamic_pointer_cast<T>( cur_npc ); ++ if( critter.is_monster() ) { ++ if( const shared_ptr_fast<monster> mon_ptr = critter_tracker->find( critter.pos() ) ) { ++ if( static_cast<const Creature *>( mon_ptr.get() ) == static_cast<const Creature *>( &critter ) ) { ++ return std::dynamic_pointer_cast<T>( mon_ptr ); ++ } ++ } ++ } ++ if( critter.is_npc() ) { ++ for( auto &cur_npc : active_npc ) { ++ if( static_cast<const Creature *>( cur_npc.get() ) == static_cast<const Creature *>( &critter ) ) { ++ return std::dynamic_pointer_cast<T>( cur_npc ); ++ } + } + } + return nullptr; +diff --git a/src/npcmove.cpp b/src/npcmove.cpp +index 822fc10a72..0a486dbe18 100644 +--- a/src/npcmove.cpp ++++ b/src/npcmove.cpp +@@ -916,7 +916,6 @@ void npc::execute_action( npc_action action ) + int oldmoves = moves; + tripoint tar = pos(); + Creature *cur = current_target(); +- player *patient = dynamic_cast<player *>( current_ally() ); + if( action == npc_flee ) { + tar = good_escape_direction( false ); + } else if( cur != nullptr ) { +@@ -1082,18 +1081,21 @@ void npc::execute_action( npc_action action ) + } + break; + +- case npc_heal_player: +- update_path( patient->pos() ); +- if( path.size() == 1 ) { // We're adjacent to u, and thus can heal u +- heal_player( *patient ); +- } else if( !path.empty() ) { +- say( _( "Hold still %s, I'm coming to help you." ), patient->disp_name() ); +- move_to_next(); +- } else { +- move_pause(); ++ case npc_heal_player: { ++ player *patient = dynamic_cast<player *>( current_ally() ); ++ if( patient ) { ++ update_path( patient->pos() ); ++ if( path.size() == 1 ) { // We're adjacent to u, and thus can heal u ++ heal_player( *patient ); ++ } else if( !path.empty() ) { ++ say( _( "Hold still %s, I'm coming to help you." ), patient->disp_name() ); ++ move_to_next(); ++ } else { ++ move_pause(); ++ } + } + break; +- ++ } + case npc_follow_player: + update_path( g->u.pos() ); + if( static_cast<int>( path.size() ) <= follow_distance() && +-- +2.29.2 + +From 61c109645a63f1bafbcaeded9da50b564e983077 Mon Sep 17 00:00:00 2001 +From: Serhiy Zahoriya <serhiy.int@gmail.com> +Date: Tue, 16 Jun 2020 10:45:42 +0300 +Subject: [PATCH 5/5] Backported #41346: fix root cellars on map load + +Co-authored-by: Hirmuolio <hirmuolio@gmail.com> +--- + src/map.cpp | 18 ++++++++++++------ + src/map.h | 2 +- + 2 files changed, 13 insertions(+), 7 deletions(-) + +diff --git a/src/map.cpp b/src/map.cpp +index 9cc45a6ea6..e789bbcff5 100755 +--- a/src/map.cpp ++++ b/src/map.cpp +@@ -6687,13 +6687,13 @@ void map::loadn( const tripoint &grid, const bool update_vehicles ) + abs_sub.z = old_abs_z; + } + +-bool map::has_rotten_away( item &itm, const tripoint &pnt ) const ++bool map::has_rotten_away( item &itm, const tripoint &pnt, const temperature_flag flag ) const + { + if( itm.is_corpse() && itm.goes_bad() ) { +- itm.process_temperature_rot( 1, pnt, nullptr ); ++ itm.process_temperature_rot( 1, pnt, nullptr, flag ); + return itm.get_rot() > 10_days && !itm.can_revive(); + } else if( itm.goes_bad() ) { +- itm.process_temperature_rot( 1, pnt, nullptr ); ++ itm.process_temperature_rot( 1, pnt, nullptr, flag ); + return itm.has_rotten_away(); + } else if( itm.type->container && itm.type->container->preserves ) { + // Containers like tin cans preserves all items inside, they do not rot at all. +@@ -6702,14 +6702,14 @@ bool map::has_rotten_away( item &itm, const tripoint &pnt ) const + // Items inside rot but do not vanish as the container seals them in. + for( auto &c : itm.contents ) { + if( c.goes_bad() ) { +- c.process_temperature_rot( 1, pnt, nullptr ); ++ c.process_temperature_rot( 1, pnt, nullptr, flag ); + } + } + return false; + } else { + // Check and remove rotten contents, but always keep the container. + for( auto it = itm.contents.begin(); it != itm.contents.end(); ) { +- if( has_rotten_away( *it, pnt ) ) { ++ if( has_rotten_away( *it, pnt, flag ) ) { + it = itm.contents.erase( it ); + } else { + ++it; +@@ -6723,8 +6723,14 @@ bool map::has_rotten_away( item &itm, const tripoint &pnt ) const + template <typename Container> + void map::remove_rotten_items( Container &items, const tripoint &pnt ) + { ++ temperature_flag flag; ++ if( ter( pnt ) == t_rootcellar ) { ++ flag = TEMP_ROOT_CELLAR; ++ } else { ++ flag = TEMP_NORMAL; ++ } + for( auto it = items.begin(); it != items.end(); ) { +- if( has_rotten_away( *it, pnt ) ) { ++ if( has_rotten_away( *it, pnt, flag ) ) { + if( it->is_comestible() ) { + rotten_item_spawn( *it, pnt ); + } +diff --git a/src/map.h b/src/map.h +index 7cdb3dcb50..48ab479d88 100644 +--- a/src/map.h ++++ b/src/map.h +@@ -1488,7 +1488,7 @@ class map + * used for rot calculation. + * @return true if the item has rotten away and should be removed, false otherwise. + */ +- bool has_rotten_away( item &itm, const tripoint &pnt ) const; ++ bool has_rotten_away( item &itm, const tripoint &pnt, temperature_flag flag = TEMP_NORMAL ) const; + /** + * Go through the list of items, update their rotten status and remove items + * that have rotten away completely. +-- +2.29.2 + |