From 15e302bafef9497ba81672cb6d28074c9ee22a95 Mon Sep 17 00:00:00 2001 From: jc_gargma Date: Sun, 13 Dec 2020 13:12:57 -0800 Subject: Updated to official 0.E.3 release Fix npc inability to install Soporific Inducer Fix npc inability to install Gasoline Fuel Cell --- 0.E.3.patch | 367 --------------------------------------- 0011-npc-can-use-soporific.patch | 10 ++ 0012-npc-can-use-gas-fuel.patch | 11 ++ PKGBUILD | 26 +-- 4 files changed, 34 insertions(+), 380 deletions(-) delete mode 100644 0.E.3.patch create mode 100644 0011-npc-can-use-soporific.patch create mode 100644 0012-npc-can-use-gas-fuel.patch diff --git a/0.E.3.patch b/0.E.3.patch deleted file mode 100644 index 32ad0f0..0000000 --- a/0.E.3.patch +++ /dev/null @@ -1,367 +0,0 @@ -From 767d9c26e9a9b42c8a86ae23e6b930c627df1831 Mon Sep 17 00:00:00 2001 -From: Serhiy Zahoriya -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 -Date: Mon, 15 Jun 2020 15:59:53 +0300 -Subject: [PATCH 2/5] Backported fixes for ice lab spoiling #39813 - -Co-authored-by: Hirmuolio ---- - 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 - 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 -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 ---- - 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_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( "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 options; - std::vector 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 -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 ---- - 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( const tripoint &, bool ) co - template - shared_ptr_fast game::shared_from( const T &critter ) - { -- if( const shared_ptr_fast mon_ptr = critter_tracker->find( critter.pos() ) ) { -- return std::dynamic_pointer_cast( mon_ptr ); -- } - if( static_cast( &critter ) == static_cast( &u ) ) { - // u is not stored in a shared_ptr, but it won't go out of scope anyway - return std::dynamic_pointer_cast( u_shared_ptr ); - } -- for( auto &cur_npc : active_npc ) { -- if( static_cast( cur_npc.get() ) == static_cast( &critter ) ) { -- return std::dynamic_pointer_cast( cur_npc ); -+ if( critter.is_monster() ) { -+ if( const shared_ptr_fast mon_ptr = critter_tracker->find( critter.pos() ) ) { -+ if( static_cast( mon_ptr.get() ) == static_cast( &critter ) ) { -+ return std::dynamic_pointer_cast( mon_ptr ); -+ } -+ } -+ } -+ if( critter.is_npc() ) { -+ for( auto &cur_npc : active_npc ) { -+ if( static_cast( cur_npc.get() ) == static_cast( &critter ) ) { -+ return std::dynamic_pointer_cast( 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( 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( 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( path.size() ) <= follow_distance() && --- -2.29.2 - -From 61c109645a63f1bafbcaeded9da50b564e983077 Mon Sep 17 00:00:00 2001 -From: Serhiy Zahoriya -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 ---- - 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 - 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 - diff --git a/0011-npc-can-use-soporific.patch b/0011-npc-can-use-soporific.patch new file mode 100644 index 0000000..ea0f8db --- /dev/null +++ b/0011-npc-can-use-soporific.patch @@ -0,0 +1,10 @@ +--- a/data/json/bionics.json ++++ b/data/json/bionics.json +@@ -1196,6 +1196,6 @@ + "name": { "str": "Soporific Induction" }, + "description": "An electrode has been implanted into your brain's ventrolateral preoptic nucleus. It turns on whenever you're trying to fall asleep, creating an artificial but effective sensation of fatigue.", + "occupied_bodyparts": [ [ "HEAD", 1 ] ], +- "flags": [ "BIONIC_TOGGLED" ] ++ "flags": [ "BIONIC_TOGGLED", "BIONIC_NPC_USABLE" ] + } + ] diff --git a/0012-npc-can-use-gas-fuel.patch b/0012-npc-can-use-gas-fuel.patch new file mode 100644 index 0000000..f7fc958 --- /dev/null +++ b/0012-npc-can-use-gas-fuel.patch @@ -0,0 +1,11 @@ +--- a/data/json/items/bionics.json ++++ b/data/json/items/bionics.json +@@ -741,7 +741,7 @@ + }, + { + "id": "bio_fuel_cell_gasoline", +- "copy-from": "bionic_general", ++ "copy-from": "bionic_general_npc_usable", + "type": "BIONIC_ITEM", + "name": { "str": "Gasoline Fuel Cell CBM" }, + "looks_like": "bio_int_enhancer", diff --git a/PKGBUILD b/PKGBUILD index a0ecedd..4087f4c 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -12,8 +12,8 @@ pkgbase=cataclysm-dda pkgname=(cataclysm-dda cataclysm-dda-tiles) pkgname=cataclysm-dda pkgver=0.E.3 -_pkgver=0.E-2 -pkgrel=1.7 +_pkgver=0.E-3 +pkgrel=1.9 pkgdesc="A post-apocalyptic roguelike." #url="http://cataclysmrl.blogspot.com/" #url="http://www.cataclysm.glyphgryph.com/" @@ -26,7 +26,6 @@ makedepends=('sdl2_image' 'sdl2_ttf' 'sdl2_mixer' 'freetype2' 'astyle') source=("$pkgname-$_pkgver.tar.gz::https://github.com/CleverRaven/Cataclysm-DDA/archive/$_pkgver.tar.gz" "cataclysm-dda.desktop" "cataclysm-dda-tiles.desktop" - "0.E.3.patch" "0.F-backport-vehicle-heater-cooler-intensity-reduced.patch" "0.F-backport-tacoma-barn-door-position.patch" "0.F-backport-make-firestation-shelter-wells-npc-drinkable.patch" @@ -40,14 +39,15 @@ source=("$pkgname-$_pkgver.tar.gz::https://github.com/CleverRaven/Cataclysm-DDA/ "0008-community-garden-fertilizer-not-spilled.patch" "0009-oxyacetylene-from-oxygen.patch" "0010-ammo-loudness-ap-times-2.patch" + "0011-npc-can-use-soporific.patch" + "0012-npc-can-use-gas-fuel.patch" "cataclysm-dda-tileset_undeadpeople-legacy.tar.xz::https://library.iserlohn-fortress.net/cataclysm-dda-tileset_undeadpeople-legacy.git/snapshot/cataclysm-dda-tileset_undeadpeople-legacy-master.tar.xz" "cataclysm-dda-soundpack_jcsoundpack.tar.xz::https://library.iserlohn-fortress.net/cataclysm-dda-soundpack_jcsoundpack.git/snapshot/cataclysm-dda-soundpack_jcsoundpack-master.tar.xz" "cataclysm-dda-musicpack_coag-musicpack.tar.xz::https://library.iserlohn-fortress.net/cataclysm-dda-musicpack_coag-musicpack.git/snapshot/cataclysm-dda-musicpack_coag-musicpack-master.tar.xz" ) -b2sums=('a2aa335a762573a8d41f0d0a908ffa16e5b3156aab29062a5e47a1a45d9d3ff793870c5565c86a4efc528f8b6a429a2e9ca6b3a905d5877a3edb4cd150c50638' +b2sums=('7a825d8ce8827ccb45afb6005d4f33c6810e33e2fa375f2f7d1c878565fd61e00362e0dd45e3d81a46b908b08e07b58a11a42ece4dd306f3e282805da121299f' '8cff87d80bf30b86f995f77a97cc1ddb7b809148d100f3c0d74e706fe59eac52de55710fb7aed1abd59836c05f2474c7d68455736aac4f229d1cdf806d7240a1' '8ffff827ed464af678497da5129eb69d3d1a4c6994bbcc00ef7f7b240cd04e7961c3c0ac52d6940252241406c04e647fac19c9327847afced33988eb15973ba8' - '7d5a74fa2edb4c89e664419d818650ec45b6a3efde3617a49737af014b0aa438ff3bdb06b87f6d31ef1851cafdffa5f4c3947f104127d376c6ea4806190676ae' '3659d59eec3167bdb647cb622f15fe899516980ac92972393589574db23a580368b449812ec75ec74cfb86082a1c12896fc9f26b7c16c36ed9ad8506d41eac67' 'ce0dd5121e814e0fcd79d68362c80a83bfe70f970be9d5d6f6fe5f6a56ed3f041be4d560aaf02225c3ce7c457dc63bc3adf0709d4b89a81c18184ff5341eb5d3' '2cdcf9ab03eb92f384caf1a2d90f82c75f880cb6286811e83217c883e421c116e7844ca193a010dc35e12eec46ede3663171a2f45f660ef5a8be95c474f61bfc' @@ -61,14 +61,12 @@ b2sums=('a2aa335a762573a8d41f0d0a908ffa16e5b3156aab29062a5e47a1a45d9d3ff793870c5 '58a94409205f7b670ab5745b8cbc234a38efd6a6217cef4efb7e397f091092e3e0c7790706b0a42accaa83d7509b8e244a98b9f0ba78349ee85f3164745c3501' 'd34d673fe04d4317ef3c1ac3f088b6614f7c20414cfe44aa0ff71bdc932c517c4e6295492f158ced84232af8f54d1672ae56078b156593d58bf8fe7ffc3d475d' '92cde696eec00e6758b58e73e8bc60ad1a73bb2a18d4fdfd24a19b5be715305a047943a02d94a9703c101ca0c769dbeb816f1f28809345bae0fec42fbc27bb34' + '9cf47504583e16ba2a826bf9431f83ffd57121becb7980bbfb6996929a6bbb5a872cd2c310c4e1d457d59205b0abac306291722aba27ab7fa5a0bf45314d8b56' + '20fbcff9879bdc06a40f56289396a03a9d6fad8aaa7ade0154c6397c0e842d0d4e12aa05fa305153bab0cffdaea670cc91882b8def07f5f422bf010c7fbbc806' '7238e8642bbe469ecf68c577d96a772545f3a8c0917219cc18e952e2bce649a5412f77207103fb6865f4d2f34ae4d3034baf5f8adef160d4cd0402ea2d67c7b7' '5747de68a01cb9c3e9654f7a9ef2cd3bf6fe996a92b6908b962fd0ebd97fd2f31d670ef8575f27adc72efa57bfeee396e1c554594bf9ed285d3d4f51c62ce4d1' 'b9309da09b165fb57e83f84e3584d2479bd3336ed86e181e5df2d27daa92bd55d03d7f3fc226f03696af5f0f32d8e0e7ecd26ae7e50eed0200d0b0feaad07efb') -# official docs say to use lua51 -# but makefile supports lua52? -# lua53 works, but git HEAD detects/uses lua51? - prepare() { cd "Cataclysm-DDA-$_pkgver" sed -i 's/-Werror//' Makefile @@ -78,10 +76,6 @@ prepare() { sed -i 's/-Os/-O3/' Makefile - # Apply the 0.E.3 changes that never had a formal release - patch -Np1 -i "$srcdir"/0.E.3.patch - - # Backports from 0.F # Fix Vehicle Heater and Cooler to be less severe patch -Np1 -i "$srcdir"/0.F-backport-vehicle-heater-cooler-intensity-reduced.patch @@ -123,6 +117,12 @@ prepare() { # Fix ammo loudness mulitplying by six instead of two patch -Np1 -i "$srcdir"/0010-ammo-loudness-ap-times-2.patch + + # Fix npc not being able to install soporific inducer + patch -Np1 -i "$srcdir"/0011-npc-can-use-soporific.patch + + # Fix npc not being able to install gasoline fuel cell + patch -Np1 -i "$srcdir"/0012-npc-can-use-gas-fuel.patch } build() { -- cgit v1.2.1