From 820df61c108b8afedf05535ea2bb2449413dd00d Mon Sep 17 00:00:00 2001 From: LyleSY Date: Mon, 2 Dec 2024 19:59:51 -0500 Subject: [PATCH 01/69] more dusted zombie variants --- data/json/monsters/fungus_zombie.json | 156 ++++++++++++++++++++++++-- 1 file changed, 147 insertions(+), 9 deletions(-) diff --git a/data/json/monsters/fungus_zombie.json b/data/json/monsters/fungus_zombie.json index f31ced62122bd..d68d570b1fbfb 100644 --- a/data/json/monsters/fungus_zombie.json +++ b/data/json/monsters/fungus_zombie.json @@ -42,6 +42,36 @@ "relative": { "melee_dice_sides": 3, "armor": { "bash": 1, "electric": 2 } }, "extend": { "species": [ "FUNGUS" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_gasbag_dusted", + "type": "MONSTER", + "name": { "str": "dusted gasbag zombie" }, + "description": "This grotesquely swollen corpse has been heavily dusted with a thick gray powder.", + "copy-from": "mon_zombie_gasbag", + "default_faction": "zombie_dusted", + "color": "black_yellow", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_gasbag_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_gasbag_fungalize", + "type": "MONSTER", + "name": { "str": "bloated fungal stalk zombie" }, + "description": "This grotesquely swollen corpse has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_gasbag", + "default_faction": "fungus", + "color": "black_yellow", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "upgrades": { "age_grow": 1, "into": "mon_zombie_gasbag_fungus" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_gasbag_fungus", "type": "MONSTER", @@ -61,6 +91,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ] } }, + { + "id": "mon_zombie_smoker_dusted", + "type": "MONSTER", + "name": { "str": "dusted smoker zombie" }, + "description": "This smoke-shrouded corpse has been heavily dusted with a thick gray powder lighter in color than smoke and ash.", + "copy-from": "mon_zombie_smoker", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_smoker_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_smoker_fungalize", + "type": "MONSTER", + "name": { "str": "smoking fungal stalk zombie" }, + "description": "This smoke-shrouded corpse has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_smoker", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_smoker_fungus" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_smoker_fungus", "type": "MONSTER", @@ -80,6 +141,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ] } }, + { + "id": "mon_skeleton_dusted", + "type": "MONSTER", + "name": { "str": "dusted skeletal zombie" }, + "description": "This moving corpse covered in knobby bone growths has been heavily dusted with a thick gray powder.", + "copy-from": "mon_skeleton", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_skeleton_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_skeleton_fungalize", + "type": "MONSTER", + "name": { "str": "skeletal fungal stalk zombie" }, + "description": "This already horrific moving corpse covered in bony growths has also grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_skeleton", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "moldy_bones", + "upgrades": { "age_grow": 1, "into": "mon_skeleton_fungus" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "type": "MONSTER", "id": "mon_skeleton_fungus", @@ -97,20 +189,35 @@ "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, { + "id": "mon_skeleton_hulk_dusted", "type": "MONSTER", - "id": "mon_skeleton_brute_fungus", - "name": { "str": "fungal skeletal brute" }, - "copy-from": "mon_skeleton_brute", - "description": "Fungi bloom from the crevices in the twisted bone growths that cover this creature. Spores linger in the air around it.", + "name": { "str": "dusted skeletal hulk" }, + "description": "This towering creature covered in plated bone has been heavily dusted with a thick gray powder.", + "copy-from": "mon_skeleton_hulk", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_skeleton_hulk_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_skeleton_hulk_fungalize", + "type": "MONSTER", + "name": { "str": "fungal stalk skeletal hulk" }, + "description": "Layers of plates of bone rise high above, ending in a short stalk of gray fungus bursting from the enormous bulging skull.", + "copy-from": "mon_skeleton_hulk", "default_faction": "fungus", - "bleed_rate": 0, + "color": "light_gray", + "bleed_rate": 50, "vision_day": 5, "vision_night": 5, "harvest": "moldy_bones", - "upgrades": false, - "proportional": { "hp": 0.75, "speed": 0.55 }, - "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "electric": 4 } }, - "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } + "upgrades": { "age_grow": 2, "into": "mon_skeleton_hulk_fungus" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } }, { "id": "mon_skeleton_hulk_fungus", @@ -128,6 +235,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_zombie_child_dusted", + "type": "MONSTER", + "name": { "str": "dusted zombie child", "str_pl": "dusted zombie children" }, + "description": "This small, stumbling child has been dusted with a thick gray powder. Something about the way it moves is uncanny.", + "copy-from": "mon_zombie_child_base", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_child_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_child_fungalize", + "type": "MONSTER", + "name": { "str": "fungal stalk child", "str_pl": "fungal stalk children" }, + "description": "This child moves slowly, as though sleepy. A short stalk of gray fungus has burst from the top of the little head.", + "copy-from": "mon_zombie_child_base", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_child_fungus" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_child_fungus", "type": "MONSTER", From cf681b6283702c5ca4fe705c40b4849c7a06d5b9 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Tue, 3 Dec 2024 19:26:01 -0500 Subject: [PATCH 02/69] more mushroom --- data/json/monsters/fungus_zombie.json | 137 ++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/data/json/monsters/fungus_zombie.json b/data/json/monsters/fungus_zombie.json index d68d570b1fbfb..e46590a6cab2d 100644 --- a/data/json/monsters/fungus_zombie.json +++ b/data/json/monsters/fungus_zombie.json @@ -188,6 +188,53 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_skeleton_brute_dusted", + "type": "MONSTER", + "name": { "str": "dusted skeletal brute" }, + "description": "This moving corpse covered in twisted bone growths has been heavily dusted with a thick gray powder.", + "copy-from": "mon_skeleton_brute", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_skeleton_brute_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_skeleton_brute_fungalize", + "type": "MONSTER", + "name": { "str": "skeletal fungal stalk brute" }, + "description": "This already horrific moving corpse covered in twisted bony growths has also grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_skeleton_brute", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "moldy_bones", + "upgrades": { "age_grow": 1, "into": "mon_skeleton_brute_fungus" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "type": "MONSTER", + "id": "mon_skeleton_brute_fungus", + "name": { "str": "fungal skeletal brute" }, + "copy-from": "mon_skeleton_brute", + "description": "Fungi bloom from the crevices in the twisted bone growths that cover this creature. Spores linger in the air around it.", + "default_faction": "fungus", + "bleed_rate": 0, + "vision_day": 5, + "vision_night": 5, + "harvest": "moldy_bones", + "upgrades": false, + "proportional": { "hp": 0.75, "speed": 0.55 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "electric": 4 } }, + "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } + }, { "id": "mon_skeleton_hulk_dusted", "type": "MONSTER", @@ -283,6 +330,36 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_boomer_dusted", + "type": "MONSTER", + "name": { "str": "dusted boomer" }, + "description": "This rotund and bloated corpse has been heavily dusted with a thick gray powder.", + "copy-from": "mon_boomer", + "default_faction": "zombie_dusted", + "color": "light_gray_magenta", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_gasbag_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_boomer_fungalize", + "type": "MONSTER", + "name": { "str": "fungal stalk boomer" }, + "description": "This rotund and bloated corpse has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_boomer", + "default_faction": "fungus", + "color": "light_gray_magenta", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "upgrades": { "age_grow": 1, "into": "mon_zombie_gasbag_fungus" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_boomer_fungus", "type": "MONSTER", @@ -301,6 +378,35 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 100 ] ] } }, + { + "id": "mon_zombie_wretch_dusted", + "type": "MONSTER", + "name": { "str": "dusted zombie wretch", "str_pl": "dusted zombie wretches" }, + "description": "This small child lies on the ground shaking gently, dusted with a thick gray powder. The chest of the child appears to have broken open like a gory flower and there is strange pulsing movement and also unpleasant wet sounds within.", + "copy-from": "mon_zombie_wretch", + "default_faction": "zombie_dusted", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_wretch_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_wretch_fungalize", + "type": "MONSTER", + "name": { "str": "fungal stalk wretch", "str_pl": "fungal stalk wretches" }, + "description": "This small child lies on the ground smiling serenely, a short stalk of gray fungus bursting triumphantly from the top of the little head. The chest of the child appears to have broken open like a gory flower and there is strange pulsing movement and also unpleasant wet sounds within.", + "copy-from": "mon_zombie_wretch", + "default_faction": "fungus", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_fungal_wretch" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_fungal_wretch", "type": "MONSTER", @@ -327,6 +433,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ] } }, + { + "id": "mon_spawn_raptor_dusted", + "type": "MONSTER", + "name": { "str": "dusted raptor" }, + "description": "Heavily dusted with a thick gray powder, this small, winged predator darts through the air on three spongy wings that look like stretched human hands. A sheer, jagged spike juts out from the point where the wings meet.", + "copy-from": "mon_spawn_raptor", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_spawn_raptor_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_spawn_raptor_fungalize", + "type": "MONSTER", + "name": { "str": "fungal stalk raptor" }, + "description": "This small, winged predator darts through the air on three spongy wings that look like stretched human hands. A sheer, jagged spike juts out from the point where the wings meet, joined by a short stalk of gray fungus reaching upward.", + "copy-from": "mon_spawn_raptor", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_fungal_raptor" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_fungal_raptor", "type": "MONSTER", From 45fe831b4e3a4934719efa2cdb69c95cca6dec67 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Tue, 3 Dec 2024 20:30:23 -0500 Subject: [PATCH 03/69] smalll fixes --- data/json/monsters/fungus_zombie.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/data/json/monsters/fungus_zombie.json b/data/json/monsters/fungus_zombie.json index e46590a6cab2d..d2d24074d8ef5 100644 --- a/data/json/monsters/fungus_zombie.json +++ b/data/json/monsters/fungus_zombie.json @@ -300,7 +300,7 @@ "id": "mon_zombie_child_fungalize", "type": "MONSTER", "name": { "str": "fungal stalk child", "str_pl": "fungal stalk children" }, - "description": "This child moves slowly, as though sleepy. A short stalk of gray fungus has burst from the top of the little head.", + "description": "This child moves slowly, as though sleepy. A short stalk of gray fungus has burst from the top of the little head.", "copy-from": "mon_zombie_child_base", "default_faction": "fungus", "color": "light_gray", @@ -457,7 +457,6 @@ "color": "light_gray", "bleed_rate": 50, "vision_day": 5, - "vision_night": 5, "harvest": "zombie_humanoid_mushroom", "upgrades": { "age_grow": 1, "into": "mon_fungal_raptor" }, "proportional": { "speed": 0.3 }, From 64d2be7d1bec558598d99f2b083b0b79fe5c394f Mon Sep 17 00:00:00 2001 From: LyleSY Date: Wed, 4 Dec 2024 19:44:45 -0500 Subject: [PATCH 04/69] more --- data/json/monsters/fungus_zombie.json | 93 +++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/data/json/monsters/fungus_zombie.json b/data/json/monsters/fungus_zombie.json index d2d24074d8ef5..b61a5f0bc036c 100644 --- a/data/json/monsters/fungus_zombie.json +++ b/data/json/monsters/fungus_zombie.json @@ -474,6 +474,37 @@ "upgrades": false, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ] } }, + { + "id": "mon_zombie_runner_dusted", + "type": "MONSTER", + "name": { "str": "dusted zombie runner" }, + "description": "This recently-risen body has been heavily dusted with a thick gray powder, but still moves quickly.", + "copy-from": "mon_zombie_runner", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_runner_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_runner_fungalize", + "type": "MONSTER", + "name": { "str": "fungal stalk zombie runner" }, + "description": "This recently-risen body has grown a short stalk of gray fungus bursting from the skull. This appears to slow it down in some way.", + "copy-from": "mon_zombie_runner", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_runner_fungal" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_runner_fungal", "type": "MONSTER", @@ -491,6 +522,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_zombie_rot_dusted", + "type": "MONSTER", + "name": { "str": "dusted decayed zombie" }, + "description": "This badly decayed corpse has been heavily dusted with a thick gray powder.", + "copy-from": "mon_zombie_rot", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_rot_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_rot_fungalize", + "type": "MONSTER", + "name": { "str": "decayed fungal stalk zombie" }, + "description": "This badly decayed corpse has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_rot", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_rot_fungal" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_rot_fungal", "type": "MONSTER", @@ -508,6 +570,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_zombie_tough_dusted", + "type": "MONSTER", + "name": { "str": "dusted tough zombie" }, + "description": "This muscular moving corpse has been heavily dusted with a thick gray powder.", + "copy-from": "mon_zombie_tough", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_tough_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_tough_fungalize", + "type": "MONSTER", + "name": { "str": "tough fungal stalk zombie" }, + "description": "This muscular corpse has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_tough", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_tough_fungal" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_tough_fungal", "type": "MONSTER", From 794198919ed020a60ec9e5970137d8433449f30c Mon Sep 17 00:00:00 2001 From: David Seguin Date: Mon, 9 Dec 2024 03:09:17 +0000 Subject: [PATCH 05/69] Weekly Changelog 2024-12-02 to 2024-12-09 --- data/changelog.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/data/changelog.txt b/data/changelog.txt index e7102d754a9c1..7a03b8ab35f0c 100644 --- a/data/changelog.txt +++ b/data/changelog.txt @@ -192,6 +192,7 @@ Items salvaged from cutting will now be placed in vehicle, if you're cutting the tile layering supports item variants Some herbivore threshold mutants can now eat usually unpalatable raw fruit and vegetables Query the player on whether they really want to cut up other people's stuff +Updates the long pole ## Content: @@ -407,6 +408,15 @@ Wildlife foods adjust morale Add dormant zombies to more locations Add tupelo and nannyberry, hobblebush and autumn olive trees New exodii rifle +Remade the 3x3 hospital +Some houses are under construction +Tiny acetylene tank, a new default magazine for acetylene lamps +combines all four previous fursuits into one item through variants +Convert star vampire blood-drinking attack to EoC +Add water pipe and spawns +Added tucked pocket to leather backpack +Make hiking backpack sheaths hold a single item +Make Pulp Fiction pawnshop unique ## Interface: @@ -532,6 +542,8 @@ shorten `memorize` hint in crafting GUI search some little improvements to the AIM drop menu Allow fine user customization of ImGui colors Migrate scores window to imgui +Audit `satiety` +Crafting GUI filter: by bodypart coverage; Add filter by layer (for crafting GUI, AIM, inventory etc.);;; make them two lines in the changelog, please ## Mods: @@ -873,6 +885,24 @@ Mods can add categories to the help menu Martial Mastery: Insight is cleared when using other martial arts [MoM] Change id of Sense Minds sensing effect to use new tileset sprite [MoM/XE] Add deactivate_conditions to recurring EoCs that don't need to recur for everyone +[Xedra Evolved] Add new time related powers for each default dream class +[Xedra Evolved] Add Commanding the Grasses as an intro trait for Arvore, make Hungry Thirsty Roots require leveling other spells +[Xedra Evolved] Fix seedbearer trait +[Xedra Evolved] Add UNCANNY_DODGE hidden trait to appropriate Paraclesian effect + use new enchant +Aftershock: Replace exosuit forcefield with backpack generator +[MoM] Extend Nether Attunement widget to other sidebars +[Innawoods] Delays the shadow lieutenant boss spawn (and its warnings) by three seasons (mid winter by default). Innawoods only. +[MoM] Add new `u_cancel_activity` to unlocking new power/wakeful rest +[Xedra Evolved] Add The Root of the Mountain trait for Ierde +[DinoMod] nedcolbertia +[Xedra Evolved] Arvore One with the Forest + the Forest's Warning updates +[MoM] Feral vitakinetics can drain your weariness +[DinoMod] shady rework +[Xedra Evolved] Reasonable Werewolf nerfs +[DinoMod] pluralize CBM dino names +[Xedra Evolved] Fix sylph translocate text +[Xedra Evolved] Add Viridescent Vessel spell to Arvore +[Xedra Evolved] Add treesung gear ## Balance: @@ -1371,6 +1401,19 @@ fix limb drying rate and related test data crash on keybind reset in UILIST Fix broken macOS build due removed folder Fix an EOC that was looping infinitely and starting more loops as you travel +[Xedra Evolved] Fix Ruach sidebar descriptions +makes batons with plastic grips not shock you +Allow attacking with CANNOT_MOVE flag +Added ownership to several places of Tacoma Commune ranch camp +[MoM] Fix In the Zone perk +Forbid learning spells from spellbooks with low morale +Stop item spawning magic from putting items on ground when a player is available +Fixes to scores menu +Fix standing tank deconstruction +Fix mutations with `remove_rigid` removing `INTEGRATED` armor +Appliance interaction menu is no longer cut off at the bottom +[Xedra Evolved] Fix lilit ruach draining crash +Fix invalid dereference when construction pre_terrain is empty ## Performance: From 0dac5048168c82ef9b650ad6ab983183c814fdaf Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:18:59 -0500 Subject: [PATCH 06/69] rest of human zombies --- data/json/monsters/fungus_zombie.json | 186 ++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) diff --git a/data/json/monsters/fungus_zombie.json b/data/json/monsters/fungus_zombie.json index b61a5f0bc036c..7e985122ccbd9 100644 --- a/data/json/monsters/fungus_zombie.json +++ b/data/json/monsters/fungus_zombie.json @@ -618,6 +618,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_zombie_brute_dusted", + "type": "MONSTER", + "name": { "str": "dusted brute zombie" }, + "description": "This zombie's entire body bulges with distended muscles heavily dusted with a thick gray powder.", + "copy-from": "mon_zombie_brute", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_brute_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_brute_fungalize", + "type": "MONSTER", + "name": { "str": "fungal stalk brute" }, + "description": "This inhumanly muscular corpse has numerous festering wounds and has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_brute", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_brute_fungal" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_brute_fungal", "type": "MONSTER", @@ -635,6 +666,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_zombie_hulk_dusted", + "type": "MONSTER", + "name": { "str": "dusted zombie hulk" }, + "description": "This zombie's muscular body has swollen to six times the size of an average person and has been heavily dusted with a thick gray powder.", + "copy-from": "mon_zombie_hulk", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_hulk_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_hulk_fungalize", + "type": "MONSTER", + "name": { "str": "fungal stalk hulk" }, + "description": "This enormous muscular corpse has swollen six times larger and has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_hulk", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_hulk_fungal" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_hulk_fungal", "type": "MONSTER", @@ -652,6 +714,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_zombie_crawler_dusted", + "type": "MONSTER", + "name": { "str": "dusted crawling zombie" }, + "description": "This moving corpse with badly damaged legs has been heavily dusted with a thick gray powder.", + "copy-from": "mon_zombie_crawler", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_crawler_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_crawler_fungalize", + "type": "MONSTER", + "name": { "str": "crawling fungal stalk zombie" }, + "description": "This moving corpse with badly damaged legs has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_crawler", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_crawler_fungal" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_crawler_fungal", "type": "MONSTER", @@ -669,6 +762,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_zombie_fat_dusted", + "type": "MONSTER", + "name": { "str": "dusted fat zombie" }, + "description": "This heavy moving corpse has been heavily dusted with a thick gray powder.", + "copy-from": "mon_zombie_fat", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_fat_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_fat_fungalize", + "type": "MONSTER", + "name": { "str": "fat fungal stalk zombie" }, + "description": "This heavy corpse has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_fat", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_fat_fungus" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_fat_fungus", "type": "MONSTER", @@ -686,6 +810,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_beekeeper_dusted", + "type": "MONSTER", + "name": { "str": "dusted scarred zombie" }, + "description": "This heavily scarred moving corpse has been covered with a thick gray powder.", + "copy-from": "mon_beekeeper", + "default_faction": "zombie_dusted", + "color": "light_gray", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_beekeeper_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_beekeeper_fungalize", + "type": "MONSTER", + "name": { "str": "scarred fungal stalk zombie" }, + "description": "This heavily scarred moving corpse has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_beekeeper", + "default_faction": "fungus", + "color": "light_gray", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_beekeeper_fungal" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_beekeeper_fungal", "type": "MONSTER", @@ -703,6 +858,37 @@ "relative": { "melee_skill": -1, "melee_dice": -1, "melee_dice_sides": 3, "armor": { "bash": 2, "electric": 4 } }, "extend": { "species": [ "FUNGUS" ], "flags": [ "NO_FUNG_DMG" ], "special_attacks": [ [ "FUNGUS", 200 ] ] } }, + { + "id": "mon_zombie_acidic_dusted", + "type": "MONSTER", + "name": { "str": "dusted acidic zombie" }, + "description": "This acrid smelling moving corpse has been covered with a thick gray powder.", + "copy-from": "mon_zombie_acidic", + "default_faction": "zombie_dusted", + "color": "light_gray_yellow", + "vision_day": 10, + "upgrades": { "age_grow": 1, "into": "mon_zombie_acidic_fungalize" }, + "proportional": { "speed": 0.6 }, + "relative": { "melee_skill": -1, "melee_dice": -1 }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, + { + "id": "mon_zombie_acidic_fungalize", + "type": "MONSTER", + "name": { "str": "acidic fungal stalk zombie" }, + "description": "This sickly looking moving corpse with prominent yellow veins has grown a short stalk of gray fungus bursting from the skull.", + "copy-from": "mon_zombie_acidic", + "default_faction": "fungus", + "color": "light_gray_yellow", + "bleed_rate": 50, + "vision_day": 5, + "vision_night": 5, + "harvest": "zombie_humanoid_mushroom", + "upgrades": { "age_grow": 1, "into": "mon_zombie_fungus_acidic" }, + "proportional": { "speed": 0.3 }, + "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, + "extend": { "flags": [ "NO_FUNG_DMG" ] } + }, { "id": "mon_zombie_fungus_acidic", "type": "MONSTER", From af827a85bd8e4d56efc059961ab593f8ce3f0a1e Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:23:48 -0500 Subject: [PATCH 07/69] fungalize classics --- data/json/monsters/zed-classic.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/data/json/monsters/zed-classic.json b/data/json/monsters/zed-classic.json index b0df3271b1d49..46fe530dcb289 100644 --- a/data/json/monsters/zed-classic.json +++ b/data/json/monsters/zed-classic.json @@ -66,7 +66,7 @@ "melee_dice_sides": 4, "melee_damage": [ { "damage_type": "cut", "amount": 2 } ], "death_drops": { "subtype": "collection", "groups": [ [ "default_zombie_clothes", 100 ], [ "hive", 80 ] ] }, - "fungalize_into": "mon_beekeeper_fungal", + "fungalize_into": "mon_beekeeper_dusted", "upgrades": false, "armor": { "bash": 6, "cut": 8, "bullet": 6, "electric": 1 }, "extend": { "weakpoint_sets": [ "wps_natural_armor" ], "families": [ "prof_wp_nat_armored" ] } @@ -109,7 +109,7 @@ { "id": "bite_humanoid", "attack_upper": false, "cooldown": 5 }, { "id": "scratch_humanoid", "attack_upper": false } ], - "fungalize_into": "mon_zombie_crawler_fungal", + "fungalize_into": "mon_zombie_crawler_dusted", "upgrades": { "half_life": 30, "into_group": "GROUP_ZOMBIE_CRAWLER_UPGRADE" }, "extend": { "flags": [ "ATTACK_LOWER", "GEN_DORMANT" ] }, "delete": { "flags": [ "PUSH_MON" ] } @@ -126,7 +126,7 @@ "color": "green", "melee_skill": 3, "melee_dice_sides": 4, - "fungalize_into": "mon_zombie_fat_fungus", + "fungalize_into": "mon_zombie_fat_dusted", "upgrades": { "half_life": 32, "into_group": "GROUP_ZOMBIE_FAT" }, "armor": { "bash": 5, "cut": 3, "bullet": 2, "electric": 2 }, "extend": { "weakpoint_sets": [ "wps_humanoid_head_small" ], "flags": [ "GEN_DORMANT" ] } @@ -186,7 +186,7 @@ "melee_skill": 1, "melee_dice_sides": 2, "grab_strength": 15, - "fungalize_into": "mon_zombie_rot_fungal", + "fungalize_into": "mon_zombie_rot_dusted", "upgrades": { "half_life": 43, "into": "mon_devourer" }, "extend": { "flags": [ "GEN_DORMANT" ] } }, @@ -224,7 +224,7 @@ { "id": "bite_humanoid", "cooldown": 5, "min_mul": 0.7 }, { "id": "scratch_humanoid" } ], - "fungalize_into": "mon_zombie_tough_fungal", + "fungalize_into": "mon_zombie_tough_dusted", "armor": { "bash": 2, "cut": 1, "bullet": 1, "electric": 2 }, "extend": { "weakpoint_sets": [ "wps_humanoid_head_small" ], "flags": [ "GEN_DORMANT" ] } }, From 995b705e6b9c67ef1121a840f727a26e1401a5e4 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:26:27 -0500 Subject: [PATCH 08/69] fungalize raptor --- data/json/monsters/zed-winged.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/json/monsters/zed-winged.json b/data/json/monsters/zed-winged.json index 3c46e3d866dfc..6cf6ebfd8fa53 100644 --- a/data/json/monsters/zed-winged.json +++ b/data/json/monsters/zed-winged.json @@ -107,7 +107,7 @@ "decay": "zombie_decay_bone", "special_attacks": [ { "id": "impale", "damage_max_instance": [ { "damage_type": "stab", "amount": 15, "armor_multiplier": 0.6 } ] } ], "upgrades": { "half_life": 42, "into_group": "GROUP_ZOMBIE_RAPTOR_UPGRADES" }, - "fungalize_into": "mon_fungal_raptor", + "fungalize_into": "mon_spawn_raptor_dusted", "flags": [ "SEES", "HEARS", From 120dfdccd21c5403ab8e559e6fc72c52bd641f15 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:27:58 -0500 Subject: [PATCH 09/69] fungalize acid man --- data/json/monsters/zed_acid.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/json/monsters/zed_acid.json b/data/json/monsters/zed_acid.json index 21275451ff34f..7838261a5a50e 100644 --- a/data/json/monsters/zed_acid.json +++ b/data/json/monsters/zed_acid.json @@ -12,7 +12,7 @@ "harvest": "zombie_humanoid_acid", "death_function": { "message": "The %s's body leaks acid.", "effect": { "id": "death_acid", "hit_self": true } }, "upgrades": { "half_life": 30, "into": "mon_zombie_spitter" }, - "fungalize_into": "mon_zombie_fungus_acidic", + "fungalize_into": "mon_zombie_acidic_dusted", "extend": { "flags": [ "ACIDPROOF", "ACID_BLOOD" ], "special_attacks": [ [ "ACID_BARF", 10 ] ] } }, { @@ -56,7 +56,7 @@ ], "special_when_hit": [ "ACIDSPLASH", 100 ], "death_function": { "message": "The %s's body leaks acid.", "effect": { "id": "death_acid", "hit_self": true } }, - "fungalize_into": "mon_zombie_fungus_acidic", + "fungalize_into": "mon_zombie_acidic_dusted", "upgrades": false, "armor": { "bash": 10, "cut": 2, "stab": 12, "bullet": 2, "electric": 2 }, "extend": { @@ -83,7 +83,7 @@ "special_attacks": [ [ "ACID", 20 ] ], "death_function": { "message": "The %s's body leaks acid.", "effect": { "id": "death_acid", "hit_self": true } }, "upgrades": { "half_life": 42, "into": "mon_zombie_corrosive" }, - "fungalize_into": "mon_zombie_fungus_acidic", + "fungalize_into": "mon_zombie_acidic_dusted", "extend": { "flags": [ "ACIDPROOF", "ACID_BLOOD", "RANGED_ATTACKER" ], "weakpoint_sets": [ "wps_humanoid_head_big" ] } }, { From 42abe5f06f36acbdc86312d8854287f991068515 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:30:14 -0500 Subject: [PATCH 10/69] fungalize the children --- data/json/monsters/zed_children.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/monsters/zed_children.json b/data/json/monsters/zed_children.json index 36064420b0276..56403555525a4 100644 --- a/data/json/monsters/zed_children.json +++ b/data/json/monsters/zed_children.json @@ -25,7 +25,7 @@ "//": "default zombie children clothing (always), additional items from child_items_pockets (sometimes)" }, "burn_into": "mon_zombie_child_scorched", - "fungalize_into": "mon_zombie_child_fungus", + "fungalize_into": "mon_zombie_child_dusted", "upgrades": { "half_life": 30, "into_group": "GROUP_CHILD_ZOMBIE_UPGRADE" }, "extend": { "weakpoint_sets": [ "wps_humanoid_child_body", "wps_humanoid_head_big" ], "families": [ "prof_wp_child" ] }, "delete": { "flags": [ "PUSH_MON" ] } @@ -171,7 +171,7 @@ "monster_message": "Ripping and tearing, a small beast burrows free of the wretch's abdomen!" } ], - "fungalize_into": "mon_fungal_wretch", + "fungalize_into": "mon_zombie_wretch_dusted", "upgrades": false, "flags": [ "SEES", "HEARS", "IMMOBILE", "WARM", "POISON", "NO_BREATHE", "FILTHY" ] } From 6469a647e3235ddebd5699d418654cc68c6d5d91 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:34:34 -0500 Subject: [PATCH 11/69] fungal fixes for bony liches --- data/json/monsters/zed_command.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/data/json/monsters/zed_command.json b/data/json/monsters/zed_command.json index 5b6df50f79fc6..8f9e1ab06eef6 100644 --- a/data/json/monsters/zed_command.json +++ b/data/json/monsters/zed_command.json @@ -16,6 +16,7 @@ "vision_day": 30, "vision_night": 3, "harvest": "mr_bones", + "fungalize_into": "mon_skeleton_dusted", "armor": { "cut": 15, "stab": 30, "acid": 3, "bullet": 24, "electric": 3 }, "extend": { "weakpoint_sets": [ "wps_bone_armor" ], "families": [ "prof_wp_skeleton" ] } }, @@ -32,6 +33,7 @@ "vision_day": 30, "vision_night": 3, "harvest": "mr_bones", + "fungalize_into": "mon_skeleton_brute_dusted", "armor": { "cut": 15, "stab": 30, "acid": 3, "bullet": 24, "electric": 3 }, "extend": { "weakpoint_sets": [ "wps_bone_armor" ], "families": [ "prof_wp_skeleton" ] } } From 527f48c628c13327a94651a36a7350a9a7251f48 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:37:11 -0500 Subject: [PATCH 12/69] fungal boomers --- data/json/monsters/zed_explosive.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/json/monsters/zed_explosive.json b/data/json/monsters/zed_explosive.json index 00a5b1ed88fd7..86b339542cdff 100644 --- a/data/json/monsters/zed_explosive.json +++ b/data/json/monsters/zed_explosive.json @@ -18,7 +18,7 @@ "death_drops": { "subtype": "collection", "groups": [ [ "default_zombie_death_drops", 100 ], [ "explode_zed", 100 ] ] }, "death_function": { "effect": { "id": "death_boomer", "hit_self": true }, "message": "The %s explodes!", "corpse_type": "NO_CORPSE" }, "upgrades": { "half_life": 42, "into_group": "GROUP_ZOMBIE_BOOMER_UPGRADE" }, - "fungalize_into": "mon_boomer_fungus", + "fungalize_into": "mon_boomer_dusted", "armor": { "electric": 2 }, "extend": { "flags": [ "BILE_BLOOD" ], "weakpoint_sets": [ "wps_humanoid_head_small" ], "special_attacks": [ [ "BOOMER", 20 ] ] } }, @@ -80,7 +80,7 @@ "emit_fields": [ { "emit_id": "emit_toxic_leak", "delay": "1 s" } ], "special_attacks": [ [ "SUICIDE", 20 ], [ "scratch", 15 ] ], "death_function": { "message": "The %s explodes!", "effect": { "id": "death_gas", "hit_self": true }, "corpse_type": "NO_CORPSE" }, - "fungalize_into": "mon_zombie_gasbag_fungus", + "fungalize_into": "mon_gasbag_dusted", "armor": { "electric": 1 }, "delete": { "flags": [ "BILE_BLOOD", "BASHES", "GROUP_BASH" ], "special_attacks": [ "BOOMER" ] } }, From 3ffdef22cbaf8f360c9d39c4bc8d9473291ac1f2 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:41:44 -0500 Subject: [PATCH 13/69] fungalize misc --- data/json/monsters/zed_misc.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/data/json/monsters/zed_misc.json b/data/json/monsters/zed_misc.json index 34207ff7ccd29..2bf82c9007275 100644 --- a/data/json/monsters/zed_misc.json +++ b/data/json/monsters/zed_misc.json @@ -104,7 +104,7 @@ "bleed_rate": 80, "grab_strength": 15, "upgrades": { "half_life": 24, "into": "mon_zombie_brute" }, - "fungalize_into": "mon_zombie_tough_fungal", + "fungalize_into": "mon_zombie_tough_dusted", "armor": { "bash": 3, "cut": 2, "bullet": 2, "electric": 2 }, "extend": { "flags": [ "SMELLS", "PUSH_VEH" ], @@ -138,7 +138,7 @@ "grab_strength": 30, "burn_into": "mon_zombie_scorched_brute", "upgrades": { "half_life": 42, "into_group": "GROUP_ZOMBIE_BRUTE" }, - "fungalize_into": "mon_zombie_brute_fungal", + "fungalize_into": "mon_zombie_brute_dusted", "armor": { "bash": 4, "cut": 6, "bullet": 5, "electric": 2 }, "extend": { "flags": [ "SMELLS", "PUSH_VEH" ], @@ -292,7 +292,7 @@ "death_function": { "eoc": "EOC_NEMESIS_DIED" }, "upgrades": false, "armor": { "bash": 15, "cut": 15, "bullet": 15, "electric": 6 }, - "fungalize_into": "mon_zombie_hulk_fungal", + "fungalize_into": "mon_zombie_hulk_dusted", "extend": { "flags": [ "ALL_SEEING", "GOODHEARING", "SMELLS", "KEENNOSE", "DESTROYS", "PUSH_VEH", "NEMESIS", "LOUDMOVES" ], "weakpoint_sets": [ "wps_humanoid_head_small" ], @@ -406,7 +406,7 @@ "special_attacks": [ { "id": "grab" }, { "id": "scratch_humanoid" }, { "id": "bite_humanoid" }, { "id": "smash", "throw_strength": 96 } ], "death_drops": "mon_zombie_hulk_death_drops", "burn_into": "mon_zombie_fiend", - "fungalize_into": "mon_zombie_hulk_fungal", + "fungalize_into": "mon_zombie_hulk_dusted", "upgrades": false, "armor": { "bash": 8, "cut": 12, "bullet": 10, "electric": 5 }, "extend": { @@ -580,7 +580,7 @@ } ], "upgrades": { "half_life": 35, "into": "mon_zombie_hunter" }, - "fungalize_into": "mon_zombie_runner_fungal" + "fungalize_into": "mon_zombie_runner_dusted" }, { "id": "mon_zombie_regenerating", @@ -799,7 +799,7 @@ "vision_day": 50, "emit_fields": [ { "emit_id": "emit_smoke_stream", "delay": "1 s" } ], "death_function": { "effect": { "id": "death_smokeburst", "hit_self": true }, "message": "The %s explodes!" }, - "fungalize_into": "mon_zombie_smoker_fungus", + "fungalize_into": "mon_zombie_smoker_dusted", "upgrades": { "half_life": 30, "into": "mon_smoker_brute" }, "armor": { "heat": 5, "electric": 1 }, "extend": { "flags": [ "HARDTOSHOOT" ] } From 0fcd2c841c6dfcbcd06c0a728c2f128a8adbfd79 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:45:27 -0500 Subject: [PATCH 14/69] fungalize skeletals --- data/json/monsters/zed_skeletal.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/data/json/monsters/zed_skeletal.json b/data/json/monsters/zed_skeletal.json index ec99179734ddf..931e304b400c0 100644 --- a/data/json/monsters/zed_skeletal.json +++ b/data/json/monsters/zed_skeletal.json @@ -15,7 +15,7 @@ "harvest": "mr_bones", "special_attacks": [ { "id": "grab", "cooldown": 21 }, { "id": "scratch_humanoid" }, { "id": "bite_humanoid", "cooldown": 5 } ], "upgrades": { "half_life": 32, "into_group": "GROUP_SKELETON_UPGRADE" }, - "fungalize_into": "mon_skeleton_fungus", + "fungalize_into": "mon_skeleton_dusted", "armor": { "cut": 15, "stab": 30, "acid": 3, "bullet": 24, "electric": 3 }, "extend": { "weakpoint_sets": [ "wps_bone_armor" ], "families": [ "prof_wp_skeleton" ] } }, @@ -48,7 +48,7 @@ } ], "upgrades": { "half_life": 45, "into": "mon_skeleton_hulk" }, - "fungalize_into": "mon_skeleton_brute_fungus", + "fungalize_into": "mon_skeleton_brute_dusted", "armor": { "bash": 12, "cut": 30, "acid": 1, "bullet": 30, "electric": 4 }, "extend": { "weakpoint_sets": [ "wps_bone_armor" ], "families": [ "prof_wp_skeleton" ] } }, @@ -74,7 +74,7 @@ [ "PARROT", 8 ] ], "special_when_hit": [ "ZAPBACK", 100 ], - "fungalize_into": "mon_skeleton_fungus", + "fungalize_into": "mon_skeleton_dusted", "upgrades": false, "armor": { "cut": 15, "stab": 30, "acid": 3, "bullet": 30 }, "extend": { @@ -109,7 +109,7 @@ "damage_max_instance": [ { "damage_type": "cut", "amount": 23, "armor_multiplier": 0.8 } ] } ], - "fungalize_into": "mon_skeleton_hulk_fungus", + "fungalize_into": "mon_skeleton_hulk_dusted", "armor": { "bash": 20, "cut": 45, "bullet": 36, "electric": 8 }, "extend": { "weakpoint_sets": [ "wps_bone_armor" ], "families": [ "prof_wp_skeleton" ] } }, @@ -163,7 +163,7 @@ "scents_tracked": [ "sc_human", "sc_fetid" ], "special_attacks": [ { "id": "cut_throat", "damage_max_instance": [ { "damage_type": "cut", "amount": 40 } ], "cooldown": 15 } ], "upgrades": { "half_life": 32, "into": "mon_skeleton_reaper" }, - "fungalize_into": "mon_skeleton_brute_fungus", + "fungalize_into": "mon_skeleton_brute_dusted", "burn_into": "mon_zombie_scorched_brute", "armor": { "bash": 10, "cut": 35, "stab": 30, "acid": 4, "bullet": 25, "electric": 5 }, "extend": { "flags": [ "SMELLS" ] }, @@ -190,7 +190,7 @@ { "id": "impale", "damage_max_instance": [ { "damage_type": "stab", "amount": 40 } ], "cooldown": 20 } ], "upgrades": false, - "fungalize_into": "mon_skeleton_brute_fungus", + "fungalize_into": "mon_skeleton_brute_dusted", "burn_into": "mon_zombie_scorched_brute", "armor": { "bash": 15, "cut": 35, "stab": 35, "acid": 4, "bullet": 30, "electric": 5 }, "extend": { "flags": [ "PUSH_VEH" ] }, From f4c075e396ed5dcffff7eedc851b39cff6d81652 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Sun, 8 Dec 2024 23:48:01 -0500 Subject: [PATCH 15/69] small fixes --- data/json/monsters/fungus_zombie.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/json/monsters/fungus_zombie.json b/data/json/monsters/fungus_zombie.json index 7e985122ccbd9..696b54b92b2ce 100644 --- a/data/json/monsters/fungus_zombie.json +++ b/data/json/monsters/fungus_zombie.json @@ -339,7 +339,7 @@ "default_faction": "zombie_dusted", "color": "light_gray_magenta", "vision_day": 10, - "upgrades": { "age_grow": 1, "into": "mon_gasbag_fungalize" }, + "upgrades": { "age_grow": 1, "into": "mon_boomer_fungalize" }, "proportional": { "speed": 0.6 }, "relative": { "melee_skill": -1, "melee_dice": -1 }, "extend": { "flags": [ "NO_FUNG_DMG" ] } @@ -355,7 +355,7 @@ "bleed_rate": 50, "vision_day": 5, "vision_night": 5, - "upgrades": { "age_grow": 1, "into": "mon_zombie_gasbag_fungus" }, + "upgrades": { "age_grow": 1, "into": "mon_boomer_fungus" }, "proportional": { "speed": 0.3 }, "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, "extend": { "flags": [ "NO_FUNG_DMG" ] } @@ -692,7 +692,7 @@ "vision_day": 5, "vision_night": 5, "harvest": "zombie_humanoid_mushroom", - "upgrades": { "age_grow": 1, "into": "mon_zombie_hulk_fungal" }, + "upgrades": { "age_grow": 2, "into": "mon_zombie_hulk_fungal" }, "proportional": { "speed": 0.3 }, "relative": { "melee_skill": -1, "melee_dice": -1, "armor": { "bash": 1, "electric": 2 } }, "extend": { "flags": [ "NO_FUNG_DMG" ] } From 894442c477c24442d3847fe0392f49b993a3df8a Mon Sep 17 00:00:00 2001 From: Anton Simakov <67688115+GuardianDll@users.noreply.github.com> Date: Mon, 9 Dec 2024 09:09:51 +0100 Subject: [PATCH 16/69] Additional info for batteries and electricity document --- doc/batteries_and_electricity.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/batteries_and_electricity.md b/doc/batteries_and_electricity.md index 7d2a80ec9dd69..cbd898e6fe8e6 100644 --- a/doc/batteries_and_electricity.md +++ b/doc/batteries_and_electricity.md @@ -12,4 +12,19 @@ Likewise, many electronic devices accept some number of standard sized battery c In order to make reasoning about cells a bit easier, the capacities and dimensions of cells correlate with standard battery form factors when appropriate and they have comments indicating this relationship, but the ids, names and descriptions of the items do not because indicating that a particular battery is similar to for exampe an AA cell would be more confusing than informative since they are not used in the same way. Using a small LED flashlight as an example, it is likely to have a battery compartment that accepts three AAA battery cells, but in-game we would not use 3 AAA cells but rather a single cell about the size of a C or D battery. If we called that battery a D cell, it's quite likely that players would ignore it because IRL D cells are relatively niche, while in DDA they would be extremely common. ## Matching batteries to devices -When adding a battery powered device to the game, the most important aspect to get right for representativeness is overall runtime. Get an estimate for how long the device would be able to operate on standard batteries and try to set the power consumption and battery type it accepts to roughly match that runtime. This is a highly subjective process because device manufacturers are highly incentivised to be misleading when they make claims about battery life, so be skeptical of manufacturer claims, but if they aren't too out there or if it's not that impactful, don't worry about it too much. Generally higher draw and shorter the battery life of a device is an indication to be more careful about accuracy, if it's very low draw and/or the IRL device legitimately has much greater capacity than it needs, tolerances are very loose, but if the device chronically runs out of power quicky IRL it becomes more important to not under- or over- estimate how long it will be able to operate. \ No newline at end of file +When adding a battery powered device to the game, the most important aspect to get right for representativeness is overall runtime. Get an estimate for how long the device would be able to operate on standard batteries and try to set the power consumption and battery type it accepts to roughly match that runtime. This is a highly subjective process because device manufacturers are highly incentivised to be misleading when they make claims about battery life, so be skeptical of manufacturer claims, but if they aren't too out there or if it's not that impactful, don't worry about it too much. Generally higher draw and shorter the battery life of a device is an indication to be more careful about accuracy, if it's very low draw and/or the IRL device legitimately has much greater capacity than it needs, tolerances are very loose, but if the device chronically runs out of power quicky IRL it becomes more important to not under- or over- estimate how long it will be able to operate. + +Table of currently existing batteries + +| ID | IRL Counterpart | Type | Energy | +|-----------------------------|----------------------|----------------------|--------| +| light_minus_battery_cell | Button | BATTERY_ULTRA_LIGHT | 2 kJ | +| light_minus_disposable_cell | Button | BATTERY_ULTRA_LIGHT | 2 kJ | +| light_cell_rechargeable | AA | BATTERY_LIGHT | 10 kJ | +| light_battery_cell | AA | BATTERY_LIGHT | 16 kJ | +| medium_battery_cell | 18650 | BATTERY_MEDIUM | 56 kJ | +| heavy_battery_cell | Small makita battery | BATTERY_HEAVY | 259 kJ | +| heavy_plus_battery_cell | Big makita battery | BATTERY_HEAVY | 503 kJ | + +As you can see, each battery level is roughly five times more energy dense than previous one, meaning if your tool require, for example, 5 AA batteries, the game would represent it as having a single medium battery. Edge cases should be resolved in the next way: if irl counterpart require two AA battery, just use a single light battery, and decrease power consumption to match expected work duration; if irl counterpart require three or four AA batteries, use medium battery and increase power consumption to, again, match expected work duration. +Alternatively, you can try to find a counterpart that uses amount of batteries that are easier to match in each particular case. \ No newline at end of file From 7494378836ca46e18197b01aba658a0494aef838 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Mon, 9 Dec 2024 07:05:02 -0500 Subject: [PATCH 17/69] dedupe vision for dusted crawler --- data/json/monsters/fungus_zombie.json | 1 - 1 file changed, 1 deletion(-) diff --git a/data/json/monsters/fungus_zombie.json b/data/json/monsters/fungus_zombie.json index 696b54b92b2ce..e546274ef79a6 100644 --- a/data/json/monsters/fungus_zombie.json +++ b/data/json/monsters/fungus_zombie.json @@ -722,7 +722,6 @@ "copy-from": "mon_zombie_crawler", "default_faction": "zombie_dusted", "color": "light_gray", - "vision_day": 10, "upgrades": { "age_grow": 1, "into": "mon_zombie_crawler_fungalize" }, "proportional": { "speed": 0.6 }, "relative": { "melee_skill": -1, "melee_dice": -1 }, From 70f0208d53bc0c88c11609df27d9c83c740dec10 Mon Sep 17 00:00:00 2001 From: Brambor Date: Tue, 10 Dec 2024 00:21:21 +0100 Subject: [PATCH 18/69] Migrate popups in pocket settings menu to ImGui --- src/item_contents.cpp | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/src/item_contents.cpp b/src/item_contents.cpp index 04d25575a16cd..884095ec1c2ea 100644 --- a/src/item_contents.cpp +++ b/src/item_contents.cpp @@ -17,6 +17,7 @@ #include "flat_set.h" #include "imgui/imgui.h" #include "input.h" +#include "input_popup.h" #include "input_context.h" #include "inventory.h" #include "item.h" @@ -32,7 +33,6 @@ #include "output.h" #include "point.h" #include "string_formatter.h" -#include "string_input_popup.h" #include "translations.h" #include "ui.h" #include "units.h" @@ -306,11 +306,9 @@ bool pocket_favorite_callback::key( const input_context &ctxt, const input_event whitelist = false; return true; } else if( action == "FAV_PRIORITY" ) { - string_input_popup popup; - popup.title( string_format( _( "Enter Priority (current priority %d)" ), - selected_pocket->settings.priority() ) ); - const int ret = popup.query_int(); - if( popup.confirmed() ) { + number_input_popup popup( 34, selected_pocket->settings.priority(), _( "Enter Priority" ) ); + const int ret = popup.query(); + if( !popup.cancelled() ) { selected_pocket->settings.set_priority( ret ); selected_pocket->settings.set_was_edited(); } @@ -434,16 +432,10 @@ bool pocket_favorite_callback::key( const input_context &ctxt, const input_event } return true; } else if( action == "FAV_SAVE_PRESET" ) { - string_input_popup custom_preset_popup; - custom_preset_popup - .title( _( "Enter a preset name:" ) ) - .width( 25 ); - if( selected_pocket->settings.get_preset_name().has_value() ) { - custom_preset_popup.text( selected_pocket->settings.get_preset_name().value() ); - } - custom_preset_popup.query_string(); - if( !custom_preset_popup.canceled() ) { - const std::string &rval = custom_preset_popup.text(); + string_input_popup_imgui popup( 34, selected_pocket->settings.get_preset_name().value_or( "" ), + _( "Enter a preset name:" ) ); + const std::string &rval = popup.query(); + if( !popup.cancelled() ) { // Check if already exists item_pocket::load_presets(); if( item_pocket::has_preset( rval ) ) { From 7727abba88f78683c317bcfb5b27bb39ca096800 Mon Sep 17 00:00:00 2001 From: Anton Simakov <67688115+GuardianDll@users.noreply.github.com> Date: Tue, 10 Dec 2024 11:47:26 +0100 Subject: [PATCH 19/69] combine snippets into single array --- data/core/tips.json | 824 +++++----------------------- data/json/snippets/health_msgs.json | 572 +++++-------------- 2 files changed, 266 insertions(+), 1130 deletions(-) diff --git a/data/core/tips.json b/data/core/tips.json index 7edb9e5ab0c61..d2418ea9da64d 100644 --- a/data/core/tips.json +++ b/data/core/tips.json @@ -1,694 +1,146 @@ [ - { - "type": "snippet", - "category": "tip", - "text": [ "Fires can spread easily, especially with abundance of fuel." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Even without electricity, ovens can be useful fire containers." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Light itself doesn't draw zombies, it's sight, noise, or smell." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Moose may not be your friend." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Turnout gear protects from fire but not from overheating." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Peek around corners, when crouching, or up/down stairs to check for enemies." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Cold food lasts longer. Find a cool basement or make a root cellar." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Dying is part of the experience. Try again with what you've learned." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Frozen food? Put it by a fire or heat it up in a pan." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Underground spaces like basements or caves stay cool year-round." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Afraid of wildlife? Yell until it goes away. But beware of what comes instead." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Animals and zombies are not friends. You can take advantage of that." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "A door is not the only way in or out of most places." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Don't fight against the odds. There's no shame in running to survive." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You don't have to sit right next to fire to use it." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Many items have special actions. Try to find out what they do." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Just because a place is dangerous doesn't mean it's worth looting." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "If you're breaking in, be sure you also know how to get back out." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "There's usually more than one way to do things. Think outside the box." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Survival order: shelter, water, food, then everything else." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Balance armor versus encumbrance. Even dropping a backpack can help in melee." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Scared of melee? Throw some things at enemies and use reach weapons like spears." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Makeshift weapons can break easily, but they are weapons, and can be made again." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Not much survives a car at 120mph. Can you?" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Drugs are great for quick morale boosts and more, but be aware of addiction and overdose." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Use your map wisely. Prioritize looting places that will get you what you need." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Wounds heal over time. Bandages and antiseptic speeds that up." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Don't get grabbed by zombies. Their bites can be infectious." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Feeling odd after waking up? Try eating healthier and your health may improve." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Eat well or your health might suffer. Fast food is only good in a pinch." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Nature can provide. You can live off the land if you learn how." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Raw food and water from unsafe sources can't be healthy. Right?" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Why walk when you can use a car? Or a bike? Or rollerblades?" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Food from before the Cataclysm won't last forever. Keep that in mind." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can make unusual things from usual stuff. Go full MacGyver style if needed." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "There are fungi you want to eat, and those you want to burn. You'll know the difference." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Having a backup weapon is wise. So is having a backup plan." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Wet and angry? A dry towel will bring your smile back." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Like to gamble? Use mutagen! Be a winner today!" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Smoking and napping is asking for more than a hole in your shirt." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You're on fire? Stop and wait to put it out." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Routine kills. Stay alert! Don't let your guard down." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Most medicine doesn't work instantly, so don't swallow a whole bottle of pills." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Famous last words: Let's poke this electric zombie with a metal stick." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "A full stomach will not solve your starvation. Give it time and eat regularly." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Be mindful of the environmental protection of your gear. It can take you places." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Don't overlook protective gear, like gas masks or turnout gear. You never know." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Out of resources? Breaking or disassembling stuff can yield interesting components." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Temperature affects the shelf life of foods. The colder, the better." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Frozen food doesn't rot, but may be inedible if not defrosted." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Some dry foods can be eaten frozen. Some foods become mushy after defrosting." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Thirsty on a long winter journey? Take a thermos with you." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "'Tis but a scratch?' Bandage and disinfect it anyway to speed up healing." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Broken limb? Improvised splints are ok, but hospitals might have better tech for it." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Don't be afraid to make the game easier on yourself. Worlds can be made to spawn with more resources." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Terrain that slows you down will also slow down your enemies." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "When the whole town is one big supermarket, a shopping cart becomes your best friend." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Different characters, professions, hobbies, and scenarios can spice up your game. Roleplay!" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "A survivor saved is a friend earned. Most of the time…" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Learning how to play? Visit the keybindings menu and learn your ropes." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Expect the unexpected, even if it's the Spanish Inquisition." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can throw things while peeking around corners. Perfect for taking down gun turrets." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Nobody told the vending machines that the world ended. Save those cash cards!" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "There's got to be some cool stuff in those top-secret underground labs, right?" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Put a funnel over a jug or barrel to collect rainwater over time." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "The number of zombies in a city is large but finite. You can (eventually) kill them all." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Did you *only* take everything not nailed down? Go back for the nails!" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can make your own safe mode rules in the pause menu." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "The best gun in the world is useless without ammo." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Most zombies go through cars, not around them. Remember that when running away." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "If you're stuck inside with a broken leg, read some books to pass the time." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Don't be too greedy. Loot doesn't matter if you're dead." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "The floor is too hard to sleep on? Try gathering a pile of leaves." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Too cold to sleep well at night? A pile of clothes will make it better." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Major blood loss? Drink plenty, supplement iron, and rest to regenerate your red blood cells." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Arterial bleeding from a gunshot? A tourniquet can save you from death." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "No bandages nearby? Empty your hands and let the time pass to apply pressure to the wound." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Tis but a scratch? Minor bleeding does not require any dressing. A Bandaid is sufficient enough." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Zone activity manager can make your life easier. Do more in one go." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Want less micro-management? Zone manager can change your game." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Every sensei was once a student. NPCs can teach you and vice versa." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Length matters… at least when it comes to shoving a shovel in your backpack." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Where did my lighter go again? Manage your containers to store specific items in them." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Keep essentials in your clothing pockets in case you have to ditch your backpack." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Exercising and being active increases your cardio and therefore your stamina pool." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Long trip ahead? Auto travel and auto drive to your desired destination." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can automate repetitive tasks such as foraging, mining, or mopping for your convenience." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can crouch or go prone to hide behind objects and reduce the sound you make when you move." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "When you are prone, you use the bipod of your rifle for better accuracy." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Dissecting bodies will help in gaining knowledge about the weaknesses of the opponents." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "An armored enemy? Don't give up, maybe it has some weaknesses that can be exploited." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Need experience with crafting and such? Use the training recipes to master the ins and outs." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Remember that the sidebar is customizable and widgets can be added and removed from it." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Power move. You can take control and play as your NPC follower." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Your skills can rust, but you'll learn them faster when you pick them up again." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Save time. Instead of using a recipe, place water in a container on a fire to boil it." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Knowledge can't replace practical skill and experience, but it will help you get them faster." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Books carry knowledge and often recipes. You need practical skills to utilize them. Practice." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Being skilled does not mean being proficient. Gain proficiency to become a master in specific areas." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Prolonged physical exhaustion results in weariness. Overworking causes loss of productivity." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Mark the items you carry as favorites so you can easily identify new items and drop them in bulk." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Verticality is a thing. If you can get to a roof somehow, it may save your life." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Your enemy is often slower than you. Walk to conserve stamina and run only when you must." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Fight on your conditions whenever you can. Use terrain, traps, and fire to your advantage." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Pick your fights and don't let them pick you. Don't bite what you can't chew." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Learn to use zone sorting to sort your loot in one go. Y to set up zones, O to sort items." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Want to loot everything not nailed down in one go? Use zone manager to fill your hoard." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can view local keybindings in most sub-menus by pressing the question mark (?) key." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "There are some unbound keybindings that might prove useful for your needs. Check them out." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Check what you can craft from time to time, even if you don't have components right now." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Where applicable, use blacklists, whitelists, and filters for a better quality of life." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Many items have contextual uses. Use the item action menu to find out what you can do with them." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "The action menu can help you determine what you can do. There are also some rare actions there." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Auto-pickup settings can save you time when you need it. It's fully customizable too." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Feeling unwell? Allow yourself to rest, even for a few days as needed. Heal now, explore later." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Overconfidence is a treacherous killer. Leave yourself some leeway for unforeseen circumstances." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Be mindful of what, when, and how much you eat. A balanced diet is crucial in the long run." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Skillful management of your stamina is crucial for your survival. Conserve it when you can." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "For free in the construction menu: a crafting spot, a firewood source, and a practice target." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "When looking around, use T to move to a destination or item automatically." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can use your mouse to move to a destination by double-clicking it." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can use your mouse in your inventory and few other menus." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Crafting is faster if you have an actual place for it, preferably a workshop bench." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Hope for the best but prepare for the worst. A backup stash of necessities can save the day." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Pain can drastically slow you down and reduces your stats. Check your speed in the character menu." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Winners don't do drugs. They're too valuable. Winners trade drugs for more bullets." ] - }, { "type": "snippet", "category": "tip", "text": [ - "If you don't have a certain proficiency, having a related book is a good idea. More books make you less likely to fail, but not as good as knowing the subject for yourself." + "Fires can spread easily, especially with abundance of fuel.", + "Even without electricity, ovens can be useful fire containers.", + "Light itself doesn't draw zombies, it's sight, noise, or smell.", + "Moose may not be your friend.", + "Turnout gear protects from fire but not from overheating.", + "Peek around corners, when crouching, or up/down stairs to check for enemies.", + "Cold food lasts longer. Find a cool basement or make a root cellar.", + "Dying is part of the experience. Try again with what you've learned.", + "Frozen food? Put it by a fire or heat it up in a pan.", + "Underground spaces like basements or caves stay cool year-round.", + "Afraid of wildlife? Yell until it goes away. But beware of what comes instead.", + "Animals and zombies are not friends. You can take advantage of that.", + "A door is not the only way in or out of most places.", + "Don't fight against the odds. There's no shame in running to survive.", + "You don't have to sit right next to fire to use it.", + "Many items have special actions. Try to find out what they do.", + "Just because a place is dangerous doesn't mean it's worth looting.", + "If you're breaking in, be sure you also know how to get back out.", + "There's usually more than one way to do things. Think outside the box.", + "Survival order: shelter, water, food, then everything else.", + "Balance armor versus encumbrance. Even dropping a backpack can help in melee.", + "Scared of melee? Throw some things at enemies and use reach weapons like spears.", + "Makeshift weapons can break easily, but they are weapons, and can be made again.", + "Not much survives a car at 120mph. Can you?", + "Drugs are great for quick morale boosts and more, but be aware of addiction and overdose.", + "Use your map wisely. Prioritize looting places that will get you what you need.", + "Wounds heal over time. Bandages and antiseptic speeds that up.", + "Don't get grabbed by zombies. Their bites can be infectious.", + "Feeling odd after waking up? Try eating healthier and your health may improve.", + "Eat well or your health might suffer. Fast food is only good in a pinch.", + "Nature can provide. You can live off the land if you learn how.", + "Raw food and water from unsafe sources can't be healthy. Right?", + "Why walk when you can use a car? Or a bike? Or rollerblades?", + "Food from before the Cataclysm won't last forever. Keep that in mind.", + "You can make unusual things from usual stuff. Go full MacGyver style if needed.", + "There are fungi you want to eat, and those you want to burn. You'll know the difference.", + "Having a backup weapon is wise. So is having a backup plan.", + "Wet and angry? A dry towel will bring your smile back.", + "Like to gamble? Use mutagen! Be a winner today!", + "Smoking and napping is asking for more than a hole in your shirt.", + "You're on fire? Stop and wait to put it out.", + "Routine kills. Stay alert! Don't let your guard down.", + "Most medicine doesn't work instantly, so don't swallow a whole bottle of pills.", + "Famous last words: Let's poke this electric zombie with a metal stick.", + "A full stomach will not solve your starvation. Give it time and eat regularly.", + "Be mindful of the environmental protection of your gear. It can take you places.", + "Don't overlook protective gear, like gas masks or turnout gear. You never know.", + "Out of resources? Breaking or disassembling stuff can yield interesting components.", + "Temperature affects the shelf life of foods. The colder, the better.", + "Frozen food doesn't rot, but may be inedible if not defrosted.", + "Some dry foods can be eaten frozen. Some foods become mushy after defrosting.", + "Thirsty on a long winter journey? Take a thermos with you.", + "'Tis but a scratch?' Bandage and disinfect it anyway to speed up healing.", + "Broken limb? Improvised splints are ok, but hospitals might have better tech for it.", + "Don't be afraid to make the game easier on yourself. Worlds can be made to spawn with more resources.", + "Terrain that slows you down will also slow down your enemies.", + "When the whole town is one big supermarket, a shopping cart becomes your best friend.", + "Different characters, professions, hobbies, and scenarios can spice up your game. Roleplay!", + "A survivor saved is a friend earned. Most of the time…", + "Learning how to play? Visit the keybindings menu and learn your ropes.", + "Expect the unexpected, even if it's the Spanish Inquisition.", + "You can throw things while peeking around corners. Perfect for taking down gun turrets.", + "Nobody told the vending machines that the world ended. Save those cash cards!", + "There's got to be some cool stuff in those top-secret underground labs, right?", + "Put a funnel over a jug or barrel to collect rainwater over time.", + "The number of zombies in a city is large but finite. You can (eventually) kill them all.", + "Did you *only* take everything not nailed down? Go back for the nails!", + "You can make your own safe mode rules in the pause menu.", + "The best gun in the world is useless without ammo.", + "Most zombies go through cars, not around them. Remember that when running away.", + "If you're stuck inside with a broken leg, read some books to pass the time.", + "Don't be too greedy. Loot doesn't matter if you're dead.", + "The floor is too hard to sleep on? Try gathering a pile of leaves.", + "Too cold to sleep well at night? A pile of clothes will make it better.", + "Major blood loss? Drink plenty, supplement iron, and rest to regenerate your red blood cells.", + "Arterial bleeding from a gunshot? A tourniquet can save you from death.", + "No bandages nearby? Empty your hands and let the time pass to apply pressure to the wound.", + "Tis but a scratch? Minor bleeding does not require any dressing. A Bandaid is sufficient enough.", + "Zone activity manager can make your life easier. Do more in one go.", + "Want less micro-management? Zone manager can change your game.", + "Every sensei was once a student. NPCs can teach you and vice versa.", + "Length matters… at least when it comes to shoving a shovel in your backpack.", + "Where did my lighter go again? Manage your containers to store specific items in them.", + "Keep essentials in your clothing pockets in case you have to ditch your backpack.", + "Exercising and being active increases your cardio and therefore your stamina pool.", + "Long trip ahead? Auto travel and auto drive to your desired destination.", + "You can automate repetitive tasks such as foraging, mining, or mopping for your convenience.", + "You can crouch or go prone to hide behind objects and reduce the sound you make when you move.", + "When you are prone, you use the bipod of your rifle for better accuracy.", + "Dissecting bodies will help in gaining knowledge about the weaknesses of the opponents.", + "An armored enemy? Don't give up, maybe it has some weaknesses that can be exploited.", + "Need experience with crafting and such? Use the training recipes to master the ins and outs.", + "Remember that the sidebar is customizable and widgets can be added and removed from it.", + "Power move. You can take control and play as your NPC follower.", + "Your skills can rust, but you'll learn them faster when you pick them up again.", + "Save time. Instead of using a recipe, place water in a container on a fire to boil it.", + "Knowledge can't replace practical skill and experience, but it will help you get them faster.", + "Books carry knowledge and often recipes. You need practical skills to utilize them. Practice.", + "Being skilled does not mean being proficient. Gain proficiency to become a master in specific areas.", + "Prolonged physical exhaustion results in weariness. Overworking causes loss of productivity.", + "Mark the items you carry as favorites so you can easily identify new items and drop them in bulk.", + "Verticality is a thing. If you can get to a roof somehow, it may save your life.", + "Your enemy is often slower than you. Walk to conserve stamina and run only when you must.", + "Fight on your conditions whenever you can. Use terrain, traps, and fire to your advantage.", + "Pick your fights and don't let them pick you. Don't bite what you can't chew.", + "Learn to use zone sorting to sort your loot in one go. Y to set up zones, O to sort items.", + "Want to loot everything not nailed down in one go? Use zone manager to fill your hoard.", + "You can view local keybindings in most sub-menus by pressing the question mark (?) key.", + "There are some unbound keybindings that might prove useful for your needs. Check them out.", + "Check what you can craft from time to time, even if you don't have components right now.", + "Where applicable, use blacklists, whitelists, and filters for a better quality of life.", + "Many items have contextual uses. Use the item action menu to find out what you can do with them.", + "The action menu can help you determine what you can do. There are also some rare actions there.", + "Auto-pickup settings can save you time when you need it. It's fully customizable too.", + "Feeling unwell? Allow yourself to rest, even for a few days as needed. Heal now, explore later.", + "Overconfidence is a treacherous killer. Leave yourself some leeway for unforeseen circumstances.", + "Be mindful of what, when, and how much you eat. A balanced diet is crucial in the long run.", + "Skillful management of your stamina is crucial for your survival. Conserve it when you can.", + "For free in the construction menu: a crafting spot, a firewood source, and a practice target.", + "When looking around, use T to move to a destination or item automatically.", + "You can use your mouse to move to a destination by double-clicking it.", + "You can use your mouse in your inventory and few other menus.", + "Crafting is faster if you have an actual place for it, preferably a workshop bench.", + "Hope for the best but prepare for the worst. A backup stash of necessities can save the day.", + "Pain can drastically slow you down and reduces your stats. Check your speed in the character menu.", + "Winners don't do drugs. They're too valuable. Winners trade drugs for more bullets.", + "If you don't have a certain proficiency, having a related book is a good idea. More books make you less likely to fail, but not as good as knowing the subject for yourself.", + "You can set priority levels for pockets in your inventory, letting you decide where your loot goes.", + "Face masks can help protect from smoke and disease, but make it harder to breathe, affecting stamina.", + "The burglar alarm for a store won't go off if you break through the wall.", + "You can keep a diary if you set the keybinding. Use it to roleplay, take notes, and keep score.", + "Some weapons have techniques that let you do things like hit faster, block attacks, or stun opponents.", + "If brute force isn't working, you're not using enough of it.", + "Sweat is simulated in Cataclysm. Excessive sweating will dehydrate you quickly but keep you cool.", + "Feral humans are smarter than zombies. They throw rocks and can even open doors. Watch out!", + "If you want something to stop existing, setting it on fire is a tried and true method.", + "The higher up you are, the farther you can see on the overmap.", + "Nobody wants to buy filthy underwear. Wash your clothes to get a better price for them." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can set priority levels for pockets in your inventory, letting you decide where your loot goes." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Face masks can help protect from smoke and disease, but make it harder to breathe, affecting stamina." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "The burglar alarm for a store won't go off if you break through the wall." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "You can keep a diary if you set the keybinding. Use it to roleplay, take notes, and keep score." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Some weapons have techniques that let you do things like hit faster, block attacks, or stun opponents." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "If brute force isn't working, you're not using enough of it." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Sweat is simulated in Cataclysm. Excessive sweating will dehydrate you quickly but keep you cool." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Feral humans are smarter than zombies. They throw rocks and can even open doors. Watch out!" ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "If you want something to stop existing, setting it on fire is a tried and true method." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "The higher up you are, the farther you can see on the overmap." ] - }, - { - "type": "snippet", - "category": "tip", - "text": [ "Nobody wants to buy filthy underwear. Wash your clothes to get a better price for them." ] } ] diff --git a/data/json/snippets/health_msgs.json b/data/json/snippets/health_msgs.json index 96347d46adc2a..10adaf460c962 100644 --- a/data/json/snippets/health_msgs.json +++ b/data/json/snippets/health_msgs.json @@ -2,501 +2,185 @@ { "type": "snippet", "category": "health_great", - "text": "You feel great! It doesn't seem like wounds could even slow you down for more than a day." - }, - { - "type": "snippet", - "category": "health_great", - "text": "Within moments you're ready and up. You don't feel like anything could stop you today!" - }, - { - "type": "snippet", - "category": "health_great", - "text": "Your eyes open and your entire body feels like it is just bursting with energy to burn!" - }, - { - "type": "snippet", - "category": "health_great", - "text": "You feel like a rubber ball; whatever hits you, you'll just bounce back!" - }, - { - "type": "snippet", - "category": "health_great", - "text": "You're up and you feel fantastic. No sickness is going to keep you down today!" - }, - { - "type": "snippet", - "category": "health_great", - "text": "You wake up feeling invincible, ready to take on any challenge that comes your way." - }, - { - "type": "snippet", - "category": "health_great", - "text": "Your body feels as light as a feather, every movement effortless and smooth." - }, - { - "type": "snippet", - "category": "health_great", - "text": "You wake up with a smile, knowing today is going to be a great day." - }, - { - "type": "snippet", - "category": "health_great", - "text": "Strength and vitality surge through you, making you feel unstoppable." - }, - { - "type": "snippet", - "category": "health_great", - "text": "You feel a powerful sense of well-being, as if every cell in your body is thriving." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "You're up and going rather quickly, and all the little aches from yesterday are gone." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "You get up feeling pretty good, as if all your little aches were fading faster." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "Getting up comes easy to you, your muscles revitalized after your rest." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "You're up and your little pains from before seem to have faded away rather quickly." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "Awareness comes fast, your body coming quickly to attention after your rest." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "You feel refreshed and ready to start the day with enthusiasm." + "text": [ + "You feel great! It doesn't seem like wounds could even slow you down for more than a day.", + "Within moments you're ready and up. You don't feel like anything could stop you today!", + "Your eyes open and your entire body feels like it is just bursting with energy to burn!", + "You feel like a rubber ball; whatever hits you, you'll just bounce back!", + "You're up and you feel fantastic. No sickness is going to keep you down today!", + "You wake up feeling invincible, ready to take on any challenge that comes your way.", + "Your body feels as light as a feather, every movement effortless and smooth.", + "You wake up with a smile, knowing today is going to be a great day.", + "Strength and vitality surge through you, making you feel unstoppable.", + "You feel a powerful sense of well-being, as if every cell in your body is thriving." + ] }, { "type": "snippet", "category": "health_very_good", - "text": "Your body feels rejuvenated, as if you've been given a new lease on life." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "You wake up feeling revitalized, your energy levels high and stable." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "Any lingering fatigue from yesterday has vanished, leaving you feeling strong and capable." - }, - { - "type": "snippet", - "category": "health_very_good", - "text": "You stretch and feel a wonderful sense of vitality coursing through your body." - }, - { - "type": "snippet", - "category": "health_good", - "text": "You feel good. Healthy living does seem to have some rewards." - }, - { - "type": "snippet", - "category": "health_good", - "text": "Getting out of bed doesn't seem too hard today. You could get used to this!" - }, - { - "type": "snippet", - "category": "health_good", - "text": "Alertness comes somewhat fast, and your muscles stretch easier than before you went to bed." - }, - { - "type": "snippet", - "category": "health_good", - "text": "You feel extra alert, and your body feels ready to go." - }, - { - "type": "snippet", - "category": "health_good", - "text": "Your body stretches with ease, and you feel ready to take on the world." - }, - { - "type": "snippet", - "category": "health_good", - "text": "You wake up feeling clear-headed and ready to tackle the day ahead." - }, - { - "type": "snippet", - "category": "health_good", - "text": "Your body feels responsive and agile, making movement a pleasure." - }, - { - "type": "snippet", - "category": "health_good", - "text": "You stretch and feel a pleasant sense of readiness in your muscles." - }, - { - "type": "snippet", - "category": "health_good", - "text": "You feel energized and alert, ready to face whatever the day throws at you." + "text": [ + "You're up and going rather quickly, and all the little aches from yesterday are gone.", + "You get up feeling pretty good, as if all your little aches were fading faster.", + "Getting up comes easy to you, your muscles revitalized after your rest.", + "You're up and your little pains from before seem to have faded away rather quickly.", + "Awareness comes fast, your body coming quickly to attention after your rest.", + "You feel refreshed and ready to start the day with enthusiasm.", + "Your body feels rejuvenated, as if you've been given a new lease on life.", + "You wake up feeling revitalized, your energy levels high and stable.", + "Any lingering fatigue from yesterday has vanished, leaving you feeling strong and capable.", + "You stretch and feel a wonderful sense of vitality coursing through your body." + ] }, { "type": "snippet", "category": "health_good", - "text": "You wake up with a sense of purpose, feeling good about the day ahead." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "You feel cruddy. Maybe you should consider eating a bit healthier." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "You get up with a bit of a scratch in your throat." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "You stretch, but your muscles don't seem to be doing so good today." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "Your stomach gurgles. It's probably nothing, but maybe you should look into eating something healthy." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "You struggle to awareness. Being awake seems somewhat harder to reach today." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "You wake up feeling a bit off, as if something is not quite right." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "Your body feels sluggish, making every movement an effort." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "You get up feeling like you didn't get enough rest, even if you slept for hours." + "text": [ + "You feel good. Healthy living does seem to have some rewards.", + "Getting out of bed doesn't seem too hard today. You could get used to this!", + "Alertness comes somewhat fast, and your muscles stretch easier than before you went to bed.", + "You feel extra alert, and your body feels ready to go.", + "Your body stretches with ease, and you feel ready to take on the world.", + "You wake up feeling clear-headed and ready to tackle the day ahead.", + "Your body feels responsive and agile, making movement a pleasure.", + "You stretch and feel a pleasant sense of readiness in your muscles.", + "You feel energized and alert, ready to face whatever the day throws at you.", + "You wake up with a sense of purpose, feeling good about the day ahead." + ] }, { "type": "snippet", "category": "health_bad", - "text": "There's a nagging discomfort in your body, making it hard to focus on anything else." - }, - { - "type": "snippet", - "category": "health_bad", - "text": "You feel a general sense of malaise, as if something is draining your energy." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "Getting out of bed only comes with great difficulty, and your muscles resist the movement." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "Getting up seems like it should be easy, but all you want to do is go back to bed." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "Tired hands rub at your eyes, the little aches of yesterday protesting your stretches." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "Alertness seems flighty today, and your body argues when you move towards it." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "You're up, but your body seems like it would rather stay in bed." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "You wake up feeling drained, as if you haven't slept at all." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "Every movement feels like a chore, your muscles aching with every step." + "text": [ + "You feel cruddy. Maybe you should consider eating a bit healthier.", + "You get up with a bit of a scratch in your throat.", + "You stretch, but your muscles don't seem to be doing so good today.", + "Your stomach gurgles. It's probably nothing, but maybe you should look into eating something healthy.", + "You struggle to awareness. Being awake seems somewhat harder to reach today.", + "You wake up feeling a bit off, as if something is not quite right.", + "Your body feels sluggish, making every movement an effort.", + "You get up feeling like you didn't get enough rest, even if you slept for hours.", + "There's a nagging discomfort in your body, making it hard to focus on anything else.", + "You feel a general sense of malaise, as if something is draining your energy." + ] }, { "type": "snippet", "category": "health_very_bad", - "text": "You feel a pervasive sense of exhaustion, making it hard to even think clearly." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "Your body feels heavy and uncooperative, resisting every effort to get up." - }, - { - "type": "snippet", - "category": "health_very_bad", - "text": "You wake up with a sense of dread, knowing today will be a struggle." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "You get up feeling horrible, as if something was messing with your body." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "You feel awful, and every ache from yesterday is still there." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "Your eyes struggle to open, and your muscles ache like you didn't sleep at all." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "Bleary-eyed and half-asleep, you consider why you are doing this to yourself." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "Awareness seems to only come with a battle… and your body seems to be on its side." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "You wake up feeling like you've been hit by a truck, every part of your body protesting." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "A deep, bone-weary exhaustion fills you, making it hard to even lift your head." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "You feel a persistent ache in your body, as if you were fighting off a severe illness." - }, - { - "type": "snippet", - "category": "health_horrible", - "text": "Every joint and muscle screams in protest as you try to get up." + "text": [ + "Getting out of bed only comes with great difficulty, and your muscles resist the movement.", + "Getting up seems like it should be easy, but all you want to do is go back to bed.", + "Tired hands rub at your eyes, the little aches of yesterday protesting your stretches.", + "Alertness seems flighty today, and your body argues when you move towards it.", + "You're up, but your body seems like it would rather stay in bed.", + "You wake up feeling drained, as if you haven't slept at all.", + "Every movement feels like a chore, your muscles aching with every step.", + "You feel a pervasive sense of exhaustion, making it hard to even think clearly.", + "Your body feels heavy and uncooperative, resisting every effort to get up.", + "You wake up with a sense of dread, knowing today will be a struggle." + ] }, { "type": "snippet", "category": "health_horrible", - "text": "You wake up feeling completely depleted, with no energy to face the day." - }, - { - "type": "snippet", - "category": "empty_starving", - "text": "You're too weak to be hungry anymore. Is this what starving to death feels like?" - }, - { - "type": "snippet", - "category": "empty_starving", - "text": "Your body feels like it's eating itself from the inside out." - }, - { - "type": "snippet", - "category": "empty_starving", - "text": "Every movement feels like a monumental effort, your limbs trembling from weakness." - }, - { - "type": "snippet", - "category": "empty_starving", - "text": "You can't remember the last time you had a proper meal, and it's starting to take its toll." + "text": [ + "You get up feeling horrible, as if something was messing with your body.", + "You feel awful, and every ache from yesterday is still there.", + "Your eyes struggle to open, and your muscles ache like you didn't sleep at all.", + "Bleary-eyed and half-asleep, you consider why you are doing this to yourself.", + "Awareness seems to only come with a battle… and your body seems to be on its side.", + "You wake up feeling like you've been hit by a truck, every part of your body protesting.", + "A deep, bone-weary exhaustion fills you, making it hard to even lift your head.", + "You feel a persistent ache in your body, as if you were fighting off a severe illness.", + "Every joint and muscle screams in protest as you try to get up.", + "You wake up feeling completely depleted, with no energy to face the day." + ] }, { "type": "snippet", "category": "empty_starving", - "text": "You feel a deep, gnawing emptiness in your stomach that never goes away." + "text": [ + "You're too weak to be hungry anymore. Is this what starving to death feels like?", + "Your body feels like it's eating itself from the inside out.", + "Every movement feels like a monumental effort, your limbs trembling from weakness.", + "You can't remember the last time you had a proper meal, and it's starting to take its toll.", + "You feel a deep, gnawing emptiness in your stomach that never goes away." + ] }, { "type": "snippet", "category": "starving", - "text": "Even though you've eaten not too long ago you still feel drained of energy. It will take more than that to get you back up." - }, - { - "type": "snippet", - "category": "starving", - "text": "You feel like a bottomless pit, no amount of food seems to satisfy your hunger." - }, - { - "type": "snippet", - "category": "starving", - "text": "Your body is crying out for nourishment, every cell feeling the lack of sustenance." - }, - { - "type": "snippet", - "category": "starving", - "text": "You feel dizzy and lightheaded from the constant hunger." - }, - { - "type": "snippet", - "category": "starving", - "text": "Your hands tremble as you try to find something, anything, to eat." - }, - { - "type": "snippet", - "category": "empty_emaciated", - "text": "Your empty stomach gnaws at you. You really need something to eat." - }, - { - "type": "snippet", - "category": "empty_emaciated", - "text": "You feel like a shadow of your former self, your body wasting away." - }, - { - "type": "snippet", - "category": "empty_emaciated", - "text": "Every rib is visible, your skin stretched thin over your bones." - }, - { - "type": "snippet", - "category": "empty_emaciated", - "text": "You feel a deep, bone-deep weariness, as if your body is giving up." + "text": [ + "Even though you've eaten not too long ago you still feel drained of energy. It will take more than that to get you back up.", + "You feel like a bottomless pit, no amount of food seems to satisfy your hunger.", + "Your body is crying out for nourishment, every cell feeling the lack of sustenance.", + "You feel dizzy and lightheaded from the constant hunger.", + "Your hands tremble as you try to find something, anything, to eat." + ] }, { "type": "snippet", "category": "empty_emaciated", - "text": "Your muscles are wasting away, leaving you feeling weak and frail." - }, - { - "type": "snippet", - "category": "emaciated", - "text": "You are EMACIATED!" - }, - { - "type": "snippet", - "category": "emaciated", - "text": "Your body is little more than skin and bones." - }, - { - "type": "snippet", - "category": "emaciated", - "text": "You feel a constant, gnawing hunger that never seems to go away." - }, - { - "type": "snippet", - "category": "emaciated", - "text": "Every movement is an effort, your body weak and frail." + "text": [ + "Your empty stomach gnaws at you. You really need something to eat.", + "You feel like a shadow of your former self, your body wasting away.", + "Every rib is visible, your skin stretched thin over your bones.", + "You feel a deep, bone-deep weariness, as if your body is giving up.", + "Your muscles are wasting away, leaving you feeling weak and frail." + ] }, { "type": "snippet", "category": "emaciated", - "text": "You feel like you're wasting away, your body slowly consuming itself." + "text": [ + "You are EMACIATED!", + "Your body is little more than skin and bones.", + "You feel a constant, gnawing hunger that never seems to go away.", + "Every movement is an effort, your body weak and frail.", + "You feel like you're wasting away, your body slowly consuming itself." + ] }, { "type": "snippet", "category": "empty_malnutrition", - "text": "You feel weak due to malnutrition." - }, - { - "type": "snippet", - "category": "empty_malnutrition", - "text": "Your body feels starved of essential nutrients, leaving you feeling weak and sick." - }, - { - "type": "snippet", - "category": "empty_malnutrition", - "text": "You feel a persistent ache in your bones, a sign of severe malnutrition." - }, - { - "type": "snippet", - "category": "empty_malnutrition", - "text": "Your skin is pale and sallow, a sign of your body's desperate need for nutrients." - }, - { - "type": "snippet", - "category": "empty_malnutrition", - "text": "You feel a constant sense of fatigue, your body struggling to function." - }, - { - "type": "snippet", - "category": "malnutrition", - "text": "Despite having something in your stomach, you still feel like you haven't eaten in days…" - }, - { - "type": "snippet", - "category": "malnutrition", - "text": "You feel a persistent sense of hunger, even after eating." - }, - { - "type": "snippet", - "category": "malnutrition", - "text": "Your body feels weak and frail, a sign of severe malnutrition." - }, - { - "type": "snippet", - "category": "malnutrition", - "text": "You feel a constant sense of fatigue, your body struggling to function." + "text": [ + "You feel weak due to malnutrition.", + "Your body feels starved of essential nutrients, leaving you feeling weak and sick.", + "You feel a persistent ache in your bones, a sign of severe malnutrition.", + "Your skin is pale and sallow, a sign of your body's desperate need for nutrients.", + "You feel a constant sense of fatigue, your body struggling to function." + ] }, { "type": "snippet", "category": "malnutrition", - "text": "You feel a persistent ache in your bones, a sign of severe malnutrition." + "text": [ + "Despite having something in your stomach, you still feel like you haven't eaten in days…", + "You feel a persistent sense of hunger, even after eating.", + "Your body feels weak and frail, a sign of severe malnutrition.", + "You feel a constant sense of fatigue, your body struggling to function.", + "You feel a persistent ache in your bones, a sign of severe malnutrition." + ] }, { "type": "snippet", "category": "empty_low_cal", - "text": "You've lost quite a bit of weight recently. You might want to eat more food." - }, - { - "type": "snippet", - "category": "empty_low_cal", - "text": "Your clothes hang loosely on your frame, a sign of your recent weight loss." - }, - { - "type": "snippet", - "category": "empty_low_cal", - "text": "You feel a persistent sense of fatigue, your body struggling to function." - }, - { - "type": "snippet", - "category": "empty_low_cal", - "text": "Your body feels weak and frail, a sign of your recent weight loss." - }, - { - "type": "snippet", - "category": "empty_low_cal", - "text": "You feel a constant sense of hunger, your body desperate for calories." - }, - { - "type": "snippet", - "category": "low_cal", - "text": "You feel that you need to consume more calories." - }, - { - "type": "snippet", - "category": "low_cal", - "text": "Your body feels weak and frail, a sign of your recent weight loss." - }, - { - "type": "snippet", - "category": "low_cal", - "text": "You feel a persistent sense of fatigue, your body struggling to function." - }, - { - "type": "snippet", - "category": "low_cal", - "text": "Your clothes hang loosely on your frame, a sign of your recent weight loss." + "text": [ + "You've lost quite a bit of weight recently. You might want to eat more food.", + "Your clothes hang loosely on your frame, a sign of your recent weight loss.", + "You feel a persistent sense of fatigue, your body struggling to function.", + "Your body feels weak and frail, a sign of your recent weight loss.", + "You feel a constant sense of hunger, your body desperate for calories." + ] }, { "type": "snippet", "category": "low_cal", - "text": "You feel a constant sense of hunger, your body desperate for calories." + "text": [ + "You feel that you need to consume more calories.", + "Your body feels weak and frail, a sign of your recent weight loss.", + "You feel a persistent sense of fatigue, your body struggling to function.", + "Your clothes hang loosely on your frame, a sign of your recent weight loss.", + "You feel a constant sense of hunger, your body desperate for calories." + ] } ] From 3e92df97462b316c110dd8b02d0c94c262410db5 Mon Sep 17 00:00:00 2001 From: Brambor Date: Sun, 8 Dec 2024 16:57:45 +0100 Subject: [PATCH 20/69] crafting GUI add filters L: V: M: (lenght, volume, mass) Co-authored-by: Anton Burmistrov --- data/json/items/fake.json | 8 +++++ src/crafting_gui.cpp | 18 ++++++++++ src/recipe_dictionary.cpp | 76 +++++++++++++++++++++++++++++++++++++++ src/recipe_dictionary.h | 3 ++ 4 files changed, 105 insertions(+) diff --git a/data/json/items/fake.json b/data/json/items/fake.json index e5fe774e18031..a79fd041d2d19 100644 --- a/data/json/items/fake.json +++ b/data/json/items/fake.json @@ -481,6 +481,14 @@ "copy-from": "fake_appliance_tool", "charges_per_use": 20 }, + { + "id": "debug_item_search", + "name": { "str": "debug item search", "//~": "NO_I18N" }, + "type": "GENERIC", + "symbol": "?", + "description": { "str": "This is a dummy item used by item search. You should never see it outside of debug.", "//~": "NO_I18N" }, + "flags": [ "TRADER_AVOID", "ZERO_WEIGHT" ] + }, { "id": "fake_dynamite_50lbs", "//": "This is used exclusively in the rescue mission for Barry to blow a hole in the scout tower.", diff --git a/src/crafting_gui.cpp b/src/crafting_gui.cpp index bfe122f4b9a5c..0a6f4fbecfd45 100644 --- a/src/crafting_gui.cpp +++ b/src/crafting_gui.cpp @@ -985,6 +985,21 @@ static recipe_subset filter_recipes( const recipe_subset &available_recipes, recipe_subset::search_type::quality_result, progress_callback ); break; + case 'L': + filtered_recipes = filtered_recipes.reduce( qry_filter_str.substr( 2 ), + recipe_subset::search_type::length, progress_callback ); + break; + + case 'V': + filtered_recipes = filtered_recipes.reduce( qry_filter_str.substr( 2 ), + recipe_subset::search_type::volume, progress_callback ); + break; + + case 'M': + filtered_recipes = filtered_recipes.reduce( qry_filter_str.substr( 2 ), + recipe_subset::search_type::mass, progress_callback ); + break; + case 'v': filtered_recipes = filtered_recipes.reduce( qry_filter_str.substr( 2 ), recipe_subset::search_type::covers, progress_callback ); @@ -1079,6 +1094,9 @@ static const std::vector prefixes = { { 'P', to_translation( "Blacksmithing" ), to_translation( "proficiency used to craft" ) }, { 'l', to_translation( "5" ), to_translation( "difficulty of the recipe as a number or range" ) }, { 'r', to_translation( "buttermilk" ), to_translation( "recipe's (by)products; use * as wildcard" ) }, + { 'L', to_translation( "122 cm" ), to_translation( "result can contain item of length" ) }, + { 'V', to_translation( "450 ml" ), to_translation( "result can contain item of volume" ) }, + { 'M', to_translation( "250 kg" ), to_translation( "result can contain item of mass" ) }, { 'v', to_translation( "head" ), to_translation( "body part the result covers" ) }, { 'e', to_translation( "close to skin" ), to_translation( "layer the result covers" ) }, { 'a', to_translation( "brisk" ), to_translation( "recipe's activity level" ) } diff --git a/src/recipe_dictionary.cpp b/src/recipe_dictionary.cpp index ade093351fefe..550edc6568868 100644 --- a/src/recipe_dictionary.cpp +++ b/src/recipe_dictionary.cpp @@ -12,6 +12,7 @@ #include "crafting_gui.h" #include "display.h" #include "debug.h" +#include "flag.h" #include "init.h" #include "input.h" #include "item.h" @@ -19,6 +20,7 @@ #include "itype.h" #include "make_static.h" #include "mapgen.h" +#include "math_parser.h" #include "mod_manager.h" #include "output.h" #include "requirements.h" @@ -27,6 +29,7 @@ #include "units.h" #include "value_ptr.h" +static const itype_id itype_debug_item_search( "debug_item_search" ); static const requirement_id requirement_data_uncraft_book( "uncraft_book" ); recipe_dictionary recipe_dict; @@ -186,6 +189,8 @@ static std::string cached_item_info( const itype_id &item_type ) } // keep data for one search cycle +static itype filtered_fake_itype; +static item filtered_fake_item; static std::unordered_set filtered_bodyparts; static std::unordered_set filtered_sub_bodyparts; static std::unordered_set filtered_layers; @@ -231,6 +236,11 @@ std::vector recipe_subset::search( return item::find_type( r->result() )->has_any_quality( txt ); } + case search_type::length: + case search_type::volume: + case search_type::mass: + return item( r->result() ).can_contain( filtered_fake_item ).success(); + case search_type::covers: { const item result_item( r->result() ); return std::any_of( filtered_bodyparts.begin(), filtered_bodyparts.end(), @@ -328,6 +338,72 @@ std::vector recipe_subset::search( // prepare search switch( key ) { + case search_type::length: { + auto const error = [txt]( char const *, size_t /* offset */ ) { + // Showcase in the examples that the spacing doesn't matter. + throw math::runtime_error( _( string_format( + "Failed to convert '%s' to length.\nValid examples:\n122 cm\n1101mm\n2 meter", + txt ) ) ); + }; + // Start at max. On convert failure: results are empty and user knows it is unusable. + units::length len = units::length_max; + try { + len = detail::read_from_json_string_common( txt, units::length_units, error ); + } catch( math::runtime_error &err ) { + popup( err.what() ); + } + // copy the debug item template (itype) + filtered_fake_itype = itype( *( item_controller->find( []( const itype & i ) { + return i.get_id() == itype_debug_item_search; + } )[0] ) ); + filtered_fake_itype.longest_side = len; + filtered_fake_item = item( &filtered_fake_itype ); + // make the item hard, otherwise longest_side is ignored + filtered_fake_item.set_flag( flag_HARD ); + break; + } + case search_type::volume: { + auto const error = [txt]( char const *, size_t /* offset */ ) { + throw math::runtime_error( _( string_format( + "Failed to convert '%s' to volume.\nValid examples:\n750 ml\n4L", + txt ) ) ); + }; + // Start at max. On convert failure: results are empty and user knows it is unusable. + units::volume vol = units::volume_max; + try { + vol = detail::read_from_json_string_common( txt, units::volume_units, error ); + } catch( math::runtime_error &err ) { + popup( err.what() ); + } + // copy the debug item template (itype) + filtered_fake_itype = itype( *( item_controller->find( []( const itype & i ) { + return i.get_id() == itype_debug_item_search; + } )[0] ) ); + filtered_fake_itype.volume = vol; + filtered_fake_item = item( &filtered_fake_itype ); + break; + } + case search_type::mass: { + auto const error = [txt]( char const *, size_t /* offset */ ) { + throw math::runtime_error( _( string_format( + "Failed to convert '%s' to mass.\nValid examples:\n12 mg\n400g\n25 kg", + txt ) ) ); + }; + // Start at max. On convert failure: results are empty and user knows it is unusable. + units::mass mas = units::mass_max; + try { + mas = detail::read_from_json_string_common( txt, units::mass_units, error ); + } catch( math::runtime_error &err ) { + popup( err.what() ); + } + // copy the debug item template (itype) + filtered_fake_itype = itype( *( item_controller->find( []( const itype & i ) { + return i.get_id() == itype_debug_item_search; + } )[0] ) ); + filtered_fake_itype.weight = mas; + filtered_fake_item = item( &filtered_fake_itype ); + break; + } case search_type::covers: { filtered_bodyparts.clear(); filtered_sub_bodyparts.clear(); diff --git a/src/recipe_dictionary.h b/src/recipe_dictionary.h index 60bb7d99ccfe8..9e71de5cf9f77 100644 --- a/src/recipe_dictionary.h +++ b/src/recipe_dictionary.h @@ -149,6 +149,9 @@ class recipe_subset tool, quality, quality_result, + length, + volume, + mass, covers, layer, description_result, From fd79c257ee5c2df4c3b3d4ea09ea8a7bedee3938 Mon Sep 17 00:00:00 2001 From: Brambor Date: Sun, 8 Dec 2024 21:05:55 +0100 Subject: [PATCH 21/69] fix units::mass_max * 1.0, which results in -units::mass_max --- src/item.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/item.cpp b/src/item.cpp index 607694cc5cb22..560438f559d05 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -7206,7 +7206,10 @@ units::mass item::weight( bool include_contents, bool integral ) const } - ret *= ret_mul; + // prevent units::mass_max * 1.0, which results in -units::mass_max + if( ret_mul != 1 ) { + ret *= ret_mul; + } // if it has additional pockets include the mass of those if( contents.has_additional_pockets() ) { From 5609fd729fadfef9424a0db688f332cb01a83567 Mon Sep 17 00:00:00 2001 From: Standing-Storm <120433252+Standing-Storm@users.noreply.github.com> Date: Tue, 10 Dec 2024 10:33:47 -0600 Subject: [PATCH 22/69] Magiclysm version --- .../shapeshifting_restrictions.json | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 data/mods/Magiclysm/effect_on_conditions/shapeshifting_restrictions.json diff --git a/data/mods/Magiclysm/effect_on_conditions/shapeshifting_restrictions.json b/data/mods/Magiclysm/effect_on_conditions/shapeshifting_restrictions.json new file mode 100644 index 0000000000000..9e8b13e36b9ab --- /dev/null +++ b/data/mods/Magiclysm/effect_on_conditions/shapeshifting_restrictions.json @@ -0,0 +1,106 @@ +[ + { + "type": "effect_on_condition", + "id": "EOC_MAGICLYSM_SHAPESHIFTED_ANIMALS_CANT_DO_THAT", + "eoc_type": "EVENT", + "required_event": "character_starts_activity", + "condition": { + "and": [ + { + "u_has_any_trait": [ + "DRUID_SHIFTER_BEAR_FORM_TRAITS", + "DRUID_SHIFTER_COUGAR_FORM_TRAITS", + "DRUID_SHIFTER_DEER_FORM_TRAITS", + "DRUID_SHIFTER_RAVEN_FORM_TRAITS" + ] + }, + { + "or": [ + { "compare_string": [ "ACT_LOCKPICK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_REPAIR_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MEND_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_REPAIR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_RELOAD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FIRSTAID", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MILK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HACKSAW", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BOLTCUTTING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HAIRCUT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SHAVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CRACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_READ", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_EBOOKSAVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TIDY_UP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MOP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_DECONSTRUCTION", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_FOLD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_UNFOLD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BIKERACK_UNRACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BIKERACK_RACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_DIS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_FISH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CRAFT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CHOP_PLANKS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CHOP_TREES", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_MINE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CONSTRUCTION", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_MOP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_READ", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FISH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_GENERIC_GAME", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_GAME", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DISASSEMBLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_FARM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HARVEST", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FIELD_DRESS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SKIN", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_QUARTER", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DISSECT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_LONGSALVAGE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BUILD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKAXE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HAND_CRANK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKUP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_AUTODRIVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FERTILIZE_PLOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MOVE_LOOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_UNLOAD_LOOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_INSERT_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_START_FIRE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_OPEN_GATE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FILL_LIQUID", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SHEARING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HOTWIRE_CAR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_AIM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_ATM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_START_ENGINES", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_OXYTORCH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TOOLMOD_ADD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CLEAR_RUBBLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WASH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PRYING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHOP_LOGS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHOP_PLANKS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_JACKHAMMER", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHURN", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PLANT_SEED", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WEAR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKUP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WIELD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BINDER_COPY_RECIPE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DATA_HANDLING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FURNITURE_MOVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TENT_PLACE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TENT_DECONSTRUCT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_REEL_CABLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SALINE_INFUSE", { "context_val": "activity" } ] } + ] + } + ] + }, + "effect": [ + "u_cancel_activity", + { "u_message": "You can't perform that activity while in the form of an animal.", "type": "bad" } + ] + } +] From 76b08d4c73689d688b33f570d6294f445daf0c16 Mon Sep 17 00:00:00 2001 From: Standing-Storm <120433252+Standing-Storm@users.noreply.github.com> Date: Tue, 10 Dec 2024 10:41:09 -0600 Subject: [PATCH 23/69] Xedra Evolved version --- .../Xedra_Evolved/eocs/shapeshifter_eocs.json | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/data/mods/Xedra_Evolved/eocs/shapeshifter_eocs.json b/data/mods/Xedra_Evolved/eocs/shapeshifter_eocs.json index eab055f2cdc4f..099ed6630a63c 100644 --- a/data/mods/Xedra_Evolved/eocs/shapeshifter_eocs.json +++ b/data/mods/Xedra_Evolved/eocs/shapeshifter_eocs.json @@ -1,4 +1,110 @@ [ + { + "type": "effect_on_condition", + "id": "EOC_XE_SHAPESHIFTED_ANIMALS_CANT_DO_THAT", + "eoc_type": "EVENT", + "required_event": "character_starts_activity", + "condition": { + "and": [ + { + "u_has_any_trait": [ + "VAMPIRE_WOLF_FORM_TRAITS", + "TURN_INTO_BEAR_TRAITS", + "TURN_INTO_DEER_TRAITS", + "TURN_INTO_COUGAR_TRAITS", + "TURN_INTO_OWL_TRAITS", + "TURN_INTO_RAVEN_TRAITS" + ] + }, + { + "or": [ + { "compare_string": [ "ACT_LOCKPICK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_REPAIR_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MEND_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_REPAIR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_RELOAD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FIRSTAID", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MILK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HACKSAW", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BOLTCUTTING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HAIRCUT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SHAVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CRACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_READ", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_EBOOKSAVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TIDY_UP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MOP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_DECONSTRUCTION", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_FOLD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_UNFOLD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BIKERACK_UNRACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BIKERACK_RACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_DIS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_FISH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CRAFT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CHOP_PLANKS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CHOP_TREES", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_MINE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CONSTRUCTION", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_MOP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_READ", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FISH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_GENERIC_GAME", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_GAME", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DISASSEMBLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_FARM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HARVEST", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FIELD_DRESS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SKIN", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_QUARTER", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DISSECT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_LONGSALVAGE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BUILD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKAXE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HAND_CRANK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKUP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_AUTODRIVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FERTILIZE_PLOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MOVE_LOOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_UNLOAD_LOOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_INSERT_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_START_FIRE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_OPEN_GATE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FILL_LIQUID", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SHEARING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HOTWIRE_CAR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_AIM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_ATM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_START_ENGINES", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_OXYTORCH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TOOLMOD_ADD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CLEAR_RUBBLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WASH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PRYING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHOP_LOGS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHOP_PLANKS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_JACKHAMMER", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHURN", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PLANT_SEED", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WEAR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKUP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WIELD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BINDER_COPY_RECIPE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DATA_HANDLING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FURNITURE_MOVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TENT_PLACE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TENT_DECONSTRUCT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_REEL_CABLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SALINE_INFUSE", { "context_val": "activity" } ] } + ] + } + ] + }, + "effect": [ + "u_cancel_activity", + { "u_message": "You can't perform that activity while in the form of an animal.", "type": "bad" } + ] + }, { "type": "effect_on_condition", "id": "EOC_WEREWOLF_WOLF_FORM_activated", From 666f309562c379d600c1c309086f08079b80e090 Mon Sep 17 00:00:00 2001 From: Brambor Date: Tue, 10 Dec 2024 16:46:40 +0100 Subject: [PATCH 24/69] AIM: upgrade filter function cache --- src/advanced_inv.cpp | 12 ++++++------ src/advanced_inv_pane.cpp | 15 +++------------ src/advanced_inv_pane.h | 16 +++++++++------- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index 5a9c44e9a658f..8319a07215b84 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -866,9 +866,10 @@ void advanced_inventory::redraw_pane( side p ) } std::string fprefix = string_format( _( "[%s] Filter" ), ctxt.get_desc( "FILTER" ) ); + const std::string &filter = pane.get_filter(); if( !filter_edit ) { - if( !pane.filter.empty() ) { - mvwprintw( w, point( 2, getmaxy( w ) - 1 ), "< %s: %s >", fprefix, pane.filter ); + if( !filter.empty() ) { + mvwprintw( w, point( 2, getmaxy( w ) - 1 ), "< %s: %s >", fprefix, filter ); } else { mvwprintw( w, point( 2, getmaxy( w ) - 1 ), "< %s >", fprefix ); } @@ -876,10 +877,9 @@ void advanced_inventory::redraw_pane( side p ) if( active ) { wattroff( w, c_white ); } - if( !filter_edit && !pane.filter.empty() ) { + if( !filter_edit && !filter.empty() ) { std::string fsuffix = string_format( _( "[%s] Reset" ), ctxt.get_desc( "RESET_FILTER" ) ); - mvwprintz( w, point( 6 + utf8_width( fprefix ), getmaxy( w ) - 1 ), c_white, - pane.filter ); + mvwprintz( w, point( 6 + utf8_width( fprefix ), getmaxy( w ) - 1 ), c_white, filter ); mvwprintz( w, point( getmaxx( w ) - utf8_width( fsuffix ) - 2, getmaxy( w ) - 1 ), c_white, "%s", fsuffix ); } @@ -1956,7 +1956,7 @@ void advanced_inventory::display() recalc = true; } } else if( action == "FILTER" ) { - std::string filter = spane.filter; + const std::string &filter = spane.get_filter(); filter_edit = true; if( ui ) { spopup = std::make_unique(); diff --git a/src/advanced_inv_pane.cpp b/src/advanced_inv_pane.cpp index 780f0c93991db..792d9a7c9b315 100644 --- a/src/advanced_inv_pane.cpp +++ b/src/advanced_inv_pane.cpp @@ -81,7 +81,7 @@ void advanced_inventory_pane::load_settings( int saved_area_idx, set_area( square, show_vehicle ); sortby = static_cast( save_state->sort_idx ); index = save_state->selected_idx; - filter = save_state->filter; + set_filter( save_state->filter ); if( area == AIM_CONTAINER ) { container = save_state->container; } @@ -101,16 +101,7 @@ bool advanced_inventory_pane::is_filtered( const item &it ) const if( filter.empty() ) { return false; } - - const std::string str = it.tname(); - if( filtercache.find( str ) == filtercache.end() ) { - const auto filter_fn = item_filter_from_string( filter ); - filtercache[str] = filter_fn; - - return !filter_fn( it ); - } - - return !filtercache[str]( it ); + return !filter_function( it ); } /** converts a raw list of items to "stacks" - items that are not count_by_charges that otherwise stack go into one stack */ @@ -480,6 +471,6 @@ void advanced_inventory_pane::set_filter( const std::string &new_filter ) return; } filter = new_filter; - filtercache.clear(); + filter_function = item_filter_from_string( filter ); recalc = true; } diff --git a/src/advanced_inv_pane.h b/src/advanced_inv_pane.h index 7de001f5b8a04..6b818dd94e852 100644 --- a/src/advanced_inv_pane.h +++ b/src/advanced_inv_pane.h @@ -70,10 +70,6 @@ class advanced_inventory_pane advanced_inv_sortby sortby = advanced_inv_sortby::SORTBY_NONE; catacurses::window window; std::vector items; - /** - * The current filter string. - */ - std::string filter; /** * Whether to recalculate the content of this pane. */ @@ -139,13 +135,19 @@ class advanced_inventory_pane */ units::mass free_weight_capacity() const; /** - * Set the filter string, disables filtering when the filter string is empty. + * Set the filter string and update filter_function. */ void set_filter( const std::string &new_filter ); + std::string get_filter() const { + return filter; + }; private: + /** + * The current filter string. And function representing that filter. + */ + std::string filter; + std::function filter_function; /** Only add offset to index, but wrap around! */ void mod_index( int offset ); - - mutable std::map> filtercache; }; #endif // CATA_SRC_ADVANCED_INV_PANE_H From 6a0957551b14a65cc91de8b25f0207d2c184298d Mon Sep 17 00:00:00 2001 From: George Kightly Date: Tue, 10 Dec 2024 19:32:13 +0000 Subject: [PATCH 25/69] Check first item volume instead of stack volume --- src/advanced_inv.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/advanced_inv.cpp b/src/advanced_inv.cpp index 5a9c44e9a658f..178e651f8475f 100644 --- a/src/advanced_inv.cpp +++ b/src/advanced_inv.cpp @@ -655,9 +655,9 @@ struct advanced_inv_sorter { break; case SORTBY_PRICEPERVOLUME: { const double price_density1 = static_cast( d1.items.front()->price( true ) ) / - static_cast( std::max( 1, d1.volume.value() ) ); + static_cast( std::max( 1, d1.items.front()->volume().value() ) ); const double price_density2 = static_cast( d2.items.front()->price( true ) ) / - static_cast( std::max( 1, d2.volume.value() ) ); + static_cast( std::max( 1, d2.items.front()->volume().value() ) ); if( price_density1 != price_density2 ) { return price_density1 > price_density2; } From 7b09ca89837babb42153d9fa862d4ac2be55545b Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Tue, 10 Dec 2024 15:34:38 -0800 Subject: [PATCH 26/69] Apply suggestions from code review Co-authored-by: Brambor --- data/changelog.txt | 38 ++------------------------------------ 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/data/changelog.txt b/data/changelog.txt index 7a03b8ab35f0c..57f958a6b8edb 100644 --- a/data/changelog.txt +++ b/data/changelog.txt @@ -192,7 +192,6 @@ Items salvaged from cutting will now be placed in vehicle, if you're cutting the tile layering supports item variants Some herbivore threshold mutants can now eat usually unpalatable raw fruit and vegetables Query the player on whether they really want to cut up other people's stuff -Updates the long pole ## Content: @@ -410,13 +409,6 @@ Add tupelo and nannyberry, hobblebush and autumn olive trees New exodii rifle Remade the 3x3 hospital Some houses are under construction -Tiny acetylene tank, a new default magazine for acetylene lamps -combines all four previous fursuits into one item through variants -Convert star vampire blood-drinking attack to EoC -Add water pipe and spawns -Added tucked pocket to leather backpack -Make hiking backpack sheaths hold a single item -Make Pulp Fiction pawnshop unique ## Interface: @@ -543,7 +535,8 @@ some little improvements to the AIM drop menu Allow fine user customization of ImGui colors Migrate scores window to imgui Audit `satiety` -Crafting GUI filter: by bodypart coverage; Add filter by layer (for crafting GUI, AIM, inventory etc.);;; make them two lines in the changelog, please +Add filter for body part coverage to the crafting GUI +Add filter for clothing layer to the crafting GUI, AIM, inventory etc. ## Mods: @@ -886,23 +879,8 @@ Martial Mastery: Insight is cleared when using other martial arts [MoM] Change id of Sense Minds sensing effect to use new tileset sprite [MoM/XE] Add deactivate_conditions to recurring EoCs that don't need to recur for everyone [Xedra Evolved] Add new time related powers for each default dream class -[Xedra Evolved] Add Commanding the Grasses as an intro trait for Arvore, make Hungry Thirsty Roots require leveling other spells -[Xedra Evolved] Fix seedbearer trait -[Xedra Evolved] Add UNCANNY_DODGE hidden trait to appropriate Paraclesian effect + use new enchant Aftershock: Replace exosuit forcefield with backpack generator -[MoM] Extend Nether Attunement widget to other sidebars -[Innawoods] Delays the shadow lieutenant boss spawn (and its warnings) by three seasons (mid winter by default). Innawoods only. [MoM] Add new `u_cancel_activity` to unlocking new power/wakeful rest -[Xedra Evolved] Add The Root of the Mountain trait for Ierde -[DinoMod] nedcolbertia -[Xedra Evolved] Arvore One with the Forest + the Forest's Warning updates -[MoM] Feral vitakinetics can drain your weariness -[DinoMod] shady rework -[Xedra Evolved] Reasonable Werewolf nerfs -[DinoMod] pluralize CBM dino names -[Xedra Evolved] Fix sylph translocate text -[Xedra Evolved] Add Viridescent Vessel spell to Arvore -[Xedra Evolved] Add treesung gear ## Balance: @@ -1401,19 +1379,7 @@ fix limb drying rate and related test data crash on keybind reset in UILIST Fix broken macOS build due removed folder Fix an EOC that was looping infinitely and starting more loops as you travel -[Xedra Evolved] Fix Ruach sidebar descriptions -makes batons with plastic grips not shock you Allow attacking with CANNOT_MOVE flag -Added ownership to several places of Tacoma Commune ranch camp -[MoM] Fix In the Zone perk -Forbid learning spells from spellbooks with low morale -Stop item spawning magic from putting items on ground when a player is available -Fixes to scores menu -Fix standing tank deconstruction -Fix mutations with `remove_rigid` removing `INTEGRATED` armor -Appliance interaction menu is no longer cut off at the bottom -[Xedra Evolved] Fix lilit ruach draining crash -Fix invalid dereference when construction pre_terrain is empty ## Performance: From 29bc831edbc81b0eb19e528c82855418e5eed152 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Tue, 10 Dec 2024 20:09:53 -0600 Subject: [PATCH 27/69] Lint --- .../shapeshifting_restrictions.json | 212 +++++++++--------- 1 file changed, 106 insertions(+), 106 deletions(-) diff --git a/data/mods/Magiclysm/effect_on_conditions/shapeshifting_restrictions.json b/data/mods/Magiclysm/effect_on_conditions/shapeshifting_restrictions.json index 9e8b13e36b9ab..e6019db3a0d2e 100644 --- a/data/mods/Magiclysm/effect_on_conditions/shapeshifting_restrictions.json +++ b/data/mods/Magiclysm/effect_on_conditions/shapeshifting_restrictions.json @@ -1,106 +1,106 @@ -[ - { - "type": "effect_on_condition", - "id": "EOC_MAGICLYSM_SHAPESHIFTED_ANIMALS_CANT_DO_THAT", - "eoc_type": "EVENT", - "required_event": "character_starts_activity", - "condition": { - "and": [ - { - "u_has_any_trait": [ - "DRUID_SHIFTER_BEAR_FORM_TRAITS", - "DRUID_SHIFTER_COUGAR_FORM_TRAITS", - "DRUID_SHIFTER_DEER_FORM_TRAITS", - "DRUID_SHIFTER_RAVEN_FORM_TRAITS" - ] - }, - { - "or": [ - { "compare_string": [ "ACT_LOCKPICK", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_REPAIR_ITEM", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MEND_ITEM", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_VEHICLE_REPAIR", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_RELOAD", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_FIRSTAID", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MILK", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_HACKSAW", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_BOLTCUTTING", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_HAIRCUT", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_SHAVE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_CRACKING", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_READ", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_EBOOKSAVE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_TIDY_UP", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MOP", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_VEHICLE_DECONSTRUCTION", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_VEHICLE_FOLD", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_VEHICLE_UNFOLD", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_BIKERACK_UNRACKING", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_BIKERACK_RACKING", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_DIS", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_FISH", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_CRAFT", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_CHOP_PLANKS", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_CHOP_TREES", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_MINE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_CONSTRUCTION", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_MOP", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_READ", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_FISH", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_GENERIC_GAME", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_GAME", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_DISASSEMBLE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MULTIPLE_FARM", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_HARVEST", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_FIELD_DRESS", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_SKIN", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_QUARTER", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_DISSECT", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_LONGSALVAGE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_BUILD", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_PICKAXE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_HAND_CRANK", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_PICKUP", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_AUTODRIVE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_FERTILIZE_PLOT", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_MOVE_LOOT", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_UNLOAD_LOOT", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_INSERT_ITEM", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_START_FIRE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_OPEN_GATE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_FILL_LIQUID", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_SHEARING", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_HOTWIRE_CAR", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_AIM", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_ATM", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_START_ENGINES", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_OXYTORCH", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_TOOLMOD_ADD", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_CLEAR_RUBBLE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_WASH", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_PRYING", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_CHOP_LOGS", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_CHOP_PLANKS", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_JACKHAMMER", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_CHURN", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_PLANT_SEED", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_WEAR", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_PICKUP", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_WIELD", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_BINDER_COPY_RECIPE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_DATA_HANDLING", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_FURNITURE_MOVE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_TENT_PLACE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_TENT_DECONSTRUCT", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_REEL_CABLE", { "context_val": "activity" } ] }, - { "compare_string": [ "ACT_SALINE_INFUSE", { "context_val": "activity" } ] } - ] - } - ] - }, - "effect": [ - "u_cancel_activity", - { "u_message": "You can't perform that activity while in the form of an animal.", "type": "bad" } - ] - } -] +[ + { + "type": "effect_on_condition", + "id": "EOC_MAGICLYSM_SHAPESHIFTED_ANIMALS_CANT_DO_THAT", + "eoc_type": "EVENT", + "required_event": "character_starts_activity", + "condition": { + "and": [ + { + "u_has_any_trait": [ + "DRUID_SHIFTER_BEAR_FORM_TRAITS", + "DRUID_SHIFTER_COUGAR_FORM_TRAITS", + "DRUID_SHIFTER_DEER_FORM_TRAITS", + "DRUID_SHIFTER_RAVEN_FORM_TRAITS" + ] + }, + { + "or": [ + { "compare_string": [ "ACT_LOCKPICK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_REPAIR_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MEND_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_REPAIR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_RELOAD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FIRSTAID", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MILK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HACKSAW", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BOLTCUTTING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HAIRCUT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SHAVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CRACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_READ", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_EBOOKSAVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TIDY_UP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MOP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_DECONSTRUCTION", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_FOLD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_VEHICLE_UNFOLD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BIKERACK_UNRACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BIKERACK_RACKING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_DIS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_FISH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CRAFT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CHOP_PLANKS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CHOP_TREES", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_MINE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_CONSTRUCTION", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_MOP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_READ", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FISH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_GENERIC_GAME", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_GAME", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DISASSEMBLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MULTIPLE_FARM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HARVEST", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FIELD_DRESS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SKIN", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_QUARTER", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DISSECT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_LONGSALVAGE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BUILD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKAXE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HAND_CRANK", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKUP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_AUTODRIVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FERTILIZE_PLOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_MOVE_LOOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_UNLOAD_LOOT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_INSERT_ITEM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_START_FIRE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_OPEN_GATE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FILL_LIQUID", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SHEARING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_HOTWIRE_CAR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_AIM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_ATM", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_START_ENGINES", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_OXYTORCH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TOOLMOD_ADD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CLEAR_RUBBLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WASH", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PRYING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHOP_LOGS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHOP_PLANKS", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_JACKHAMMER", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_CHURN", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PLANT_SEED", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WEAR", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_PICKUP", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_WIELD", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_BINDER_COPY_RECIPE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_DATA_HANDLING", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_FURNITURE_MOVE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TENT_PLACE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_TENT_DECONSTRUCT", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_REEL_CABLE", { "context_val": "activity" } ] }, + { "compare_string": [ "ACT_SALINE_INFUSE", { "context_val": "activity" } ] } + ] + } + ] + }, + "effect": [ + "u_cancel_activity", + { "u_message": "You can't perform that activity while in the form of an animal.", "type": "bad" } + ] + } +] From 57e3cf4777ec47378cf04159634df9a46dbe0351 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Fri, 6 Sep 2024 23:56:21 -0500 Subject: [PATCH 28/69] Stomachs --- .../harvest_monster_hunter_gracken.json | 176 ++++++++++++- data/mods/Xedra_Evolved/items/carnivore.json | 53 ++++ .../monsters/monster_overrides.json | 232 ++++++++++++++++++ 3 files changed, 450 insertions(+), 11 deletions(-) create mode 100644 data/mods/Xedra_Evolved/monsters/monster_overrides.json diff --git a/data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json b/data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json index 0dd090641f67e..421882969dfb3 100644 --- a/data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json +++ b/data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json @@ -3,16 +3,170 @@ "id": "zombie_grabber", "//": "zombie with long gangly arms", "type": "harvest", - "message": "", - "entries": [ - { "drop": "skull_human_tainted", "type": "bone", "scale_num": [ 1, 1 ], "max": 1 }, - { "drop": "meat_tainted", "type": "flesh", "mass_ratio": 0.25 }, - { "drop": "blood_tainted", "type": "blood", "mass_ratio": 0.1 }, - { "drop": "fat_tainted", "type": "flesh", "mass_ratio": 0.08 }, - { "drop": "tainted_innards", "type": "offal", "mass_ratio": 0.15 }, - { "drop": "tainted_marrow", "type": "bone", "mass_ratio": 0.005 }, - { "drop": "bone_tainted", "type": "bone", "mass_ratio": 0.1 }, - { "drop": "grappler_sinew", "mass_ratio": 0.00035 } - ] + "copy-from": "zombie_grabber", + "delete": { "entries": [ { "drop": "sinew", "mass_ratio": 0.00035 } ] }, + "extend": { + "entries": [ + { "drop": "grappler_sinew", "mass_ratio": 0.00035 } + ] + } + }, + { + "id": "pig_with_skull", + "type": "harvest", + "copy-from": "pig_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "omnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "boar_with_skull", + "type": "harvest", + "copy-from": "boar_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "omnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "sheep_with_skull", + "type": "harvest", + "copy-from": "sheep_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "ruminant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "goat_with_skull", + "type": "harvest", + "copy-from": "goat_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "ruminant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "cow_with_skull", + "type": "harvest", + "copy-from": "cow_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "ruminant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "horse_with_skull", + "type": "harvest", + "copy-from": "horse_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "herbivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "deer_with_skull", + "type": "harvest", + "copy-from": "deer_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "ruminant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "moose_with_skull", + "type": "harvest", + "copy-from": "moose_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "ruminant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "tusked_moose_with_skull", + "type": "harvest", + "copy-from": "tusked_moose_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "ruminant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "dog_with_skull_fur", + "type": "harvest", + "copy-from": "dog_with_skull_fur", + "extend": { "entries": [ { "drop": "carnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "dog_with_skull_fur_mutant", + "type": "harvest", + "copy-from": "dog_with_skull_fur_mutant", + "extend": { "entries": [ { "drop": "carnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "dog_with_skull_leather", + "type": "harvest", + "copy-from": "dog_with_skull_leather", + "extend": { "entries": [ { "drop": "carnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "cougar_with_skull", + "type": "harvest", + "copy-from": "cougar_with_skull", + "extend": { "entries": [ { "drop": "carnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "raccoon_with_skull", + "type": "harvest", + "copy-from": "raccoon_with_skull", + "extend": { "entries": [ { "drop": "small_omnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "raccoon_with_skull_mutant", + "type": "harvest", + "copy-from": "raccoon_with_skull_mutant", + "extend": { "entries": [ { "drop": "small_omnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "bear_with_skull", + "type": "harvest", + "copy-from": "bear_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "omnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "opossum_with_skull", + "type": "harvest", + "copy-from": "opossum_with_skull", + "extend": { "entries": [ { "drop": "small_omnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "skunk_with_skull", + "type": "harvest", + "copy-from": "skunk_with_skull", + "extend": { "entries": [ { "drop": "small_omnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "beaver_with_skull", + "type": "harvest", + "copy-from": "beaver_with_skull", + "extend": { "entries": [ { "drop": "small_herbivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "dog_triclopean_with_skull", + "type": "harvest", + "copy-from": "dog_triclopean_with_skull", + "extend": { "entries": [ { "drop": "small_carnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "spideer_with_skull", + "type": "harvest", + "copy-from": "spideer_with_skull", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "ruminant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "cerbearus_with_skulls", + "type": "harvest", + "copy-from": "cerbearus_with_skulls", + "delete": { "entries": [ { "drop": "stomach_large", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] }, + "extend": { "entries": [ { "drop": "omnivore_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "giant_ant", + "type": "harvest", + "message": "", + "copy-from": "arachnid", + "extend": { "entries": [ { "drop": "ant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } + }, + { + "id": "giant_acid_ant", + "type": "harvest", + "message": "", + "copy-from": "arachnid_acid", + "extend": { "entries": [ { "drop": "ant_stomach", "scale_num": [ 1, 1 ], "max": 1, "type": "offal" } ] } } ] diff --git a/data/mods/Xedra_Evolved/items/carnivore.json b/data/mods/Xedra_Evolved/items/carnivore.json index 9d21ac23a2cc3..cb07194296ef1 100644 --- a/data/mods/Xedra_Evolved/items/carnivore.json +++ b/data/mods/Xedra_Evolved/items/carnivore.json @@ -126,5 +126,58 @@ "fun": 5, "flags": [ "EATEN_HOT", "SMOKED", "SMOKABLE" ], "smoking_result": "dry_meat" + }, + { + "id": "omnivore_stomach", + "copy-from": "stomach", + "type": "COMESTIBLE", + "name": { "str": "omnivore stomach" }, + "description": "The stomach of an omnivorous creature. It is surprisingly durable." + }, + { + "id": "ruminant_stomach", + "copy-from": "stomach", + "type": "COMESTIBLE", + "name": { "str": "ruminant stomach" }, + "description": "The four stomachs of a grazing creature. It is surprisingly durable.", + "proportional": { "weight": 2.0, "volume": 2.0, "price": 1.5, "calories": 2.0 } + }, + { + "id": "herbivore_stomach", + "copy-from": "stomach", + "type": "COMESTIBLE", + "name": { "str": "herbivore stomach" }, + "description": "The stomach of a herbivore. It is surprisingly durable." + }, + { + "id": "carnivore_stomach", + "copy-from": "stomach", + "type": "COMESTIBLE", + "name": { "str": "carnivore stomach" }, + "description": "The stomach of an carnivorous creature. It is surprisingly durable." + }, + { + "id": "small_omnivore_stomach", + "copy-from": "stomach", + "type": "COMESTIBLE", + "name": { "str": "small omnivore stomach" }, + "description": "The stomach of a small omnivorous creature. It is surprisingly durable.", + "proportional": { "weight": 0.5, "volume": 0.5, "price": 0.5, "calories": 0.5 } + }, + { + "id": "small_herbivore_stomach", + "copy-from": "stomach", + "type": "COMESTIBLE", + "name": { "str": "small herbivore stomach" }, + "description": "The stomach of a small herbivore. It is surprisingly durable.", + "proportional": { "weight": 0.5, "volume": 0.5, "price": 0.5, "calories": 0.5 } + }, + { + "id": "ant_stomach", + "copy-from": "stomach", + "type": "COMESTIBLE", + "name": { "str": "ant stomach" }, + "description": "The two stomachs of a giant ant. One stomach is for digestion and one stomach is for storing food for the colony.", + "proportional": { "weight": 1.5, "volume": 1.5, "calories": 1.25 } } ] diff --git a/data/mods/Xedra_Evolved/monsters/monster_overrides.json b/data/mods/Xedra_Evolved/monsters/monster_overrides.json new file mode 100644 index 0000000000000..e10c85085eca8 --- /dev/null +++ b/data/mods/Xedra_Evolved/monsters/monster_overrides.json @@ -0,0 +1,232 @@ +[ + { + "id": "mon_bear_cub", + "type": "MONSTER", + "copy-from": "mon_bear", + "name": { "str": "black bear cub" }, + "description": "A juvenile American black bear. This one isn't much of a threat, but be wary of its parent; black bears are known for their protectiveness.", + "volume": "40750 ml", + "weight": "40750 g", + "hp": 20, + "speed": 90, + "symbol": "b", + "morale": 30, + "melee_skill": 2, + "melee_dice": 2, + "melee_dice_sides": 3, + "stomach_size": 500, + "melee_damage": [ { "damage_type": "cut", "amount": 2 } ], + "dodge": 2, + "harvest": "mammal_fur", + "dissect": "dissect_ursine_sample_single", + "special_attacks": [ [ "EAT_FOOD", 60 ], { "type": "bite", "cooldown": 30, "infection_chance": 44 } ], + "upgrades": { "age_grow": 480, "into": "mon_bear" } + }, + { + "id": "mon_bear", + "type": "MONSTER", + "name": { "str": "black bear" }, + "description": "The American black bear. A large omnivorous scavenger, it has powerful claws and jaws, and is an effective ambush hunter. Most individuals are shy around humans, but they're fiercely protective of their cubs.", + "default_faction": "bear", + "bodytype": "bear", + "categories": [ "WILDLIFE" ], + "species": [ "MAMMAL" ], + "volume": "154250 ml", + "weight": "154250 g", + "hp": 100, + "speed": 140, + "material": [ "flesh" ], + "symbol": "B", + "color": "dark_gray", + "aggression": -10, + "morale": 60, + "aggro_character": false, + "melee_skill": 6, + "melee_dice": 4, + "melee_dice_sides": 6, + "melee_damage": [ { "damage_type": "cut", "amount": 4 } ], + "dodge": 3, + "vision_day": 30, + "stomach_size": 3000, + "vision_night": 10, + "path_settings": { "max_dist": 10 }, + "anger_triggers": [ "HURT", "PLAYER_NEAR_BABY" ], + "fear_triggers": [ "SOUND" ], + "zombify_into": "mon_zombear", + "harvest": "bear_with_skull", + "dissect": "dissect_ursine_sample_small", + "families": [ "prof_gross_anatomy", "prof_intro_biology", "prof_physiology" ], + "reproduction": { "baby_monster": "mon_bear_cub", "baby_count": 1, "baby_timer": 700 }, + "//": "220 days gestation period, the mother and cubs remain together for 16-17 months.", + "baby_flags": [ "SPRING" ], + "special_attacks": [ [ "EAT_FOOD", 20 ], { "type": "bite", "cooldown": 15, "infection_chance": 44 }, [ "BROWSE", 40 ] ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER", "WARM", "BASHES", "PUSH_MON", "CORNERED_FIGHTER", "EATS" ], + "armor": { "bash": 2, "electric": 1 } + }, + { + "id": "mon_beaver", + "type": "MONSTER", + "name": { "str": "beaver" }, + "description": "The North American beaver, the continent's largest rodent. Its paddle-shaped tail helps ferry it through the water, and its prominent teeth can chew through wood, which it uses to build dam-like nests in lakes and streams.", + "default_faction": "herbivore", + "bodytype": "bear", + "categories": [ "WILDLIFE" ], + "species": [ "MAMMAL" ], + "volume": "20250 ml", + "weight": "20250 g", + "hp": 16, + "speed": 90, + "material": [ "flesh" ], + "symbol": "r", + "color": "brown", + "aggression": -35, + "morale": 15, + "aggro_character": false, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_damage": [ { "damage_type": "cut", "amount": 6 } ], + "dodge": 2, + "harvest": "beaver_with_skull", + "dissect": "dissect_mouse_sample_small", + "families": [ "prof_gross_anatomy", "prof_intro_biology", "prof_physiology" ], + "anger_triggers": [ "PLAYER_CLOSE", "HURT" ], + "fear_triggers": [ "SOUND" ], + "zombify_into": "mon_zombeaver", + "special_attacks": [ { "type": "bite", "cooldown": 15 } ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER", "SWIMS", "WARM", "WATER_CAMOUFLAGE" ] + }, + { + "id": "mon_boar_wild_piglet", + "type": "MONSTER", + "name": { "str": "wild boar piglet" }, + "description": "Originally not native in the U.S., this wild omnivore is a crossbreed between the Eurasian wild boar escaped from hunting reserves and the domesticated pig gone feral in the wilderness. This one is just a baby, and is surprisingly cute.", + "default_faction": "pig", + "bodytype": "pig", + "categories": [ "WILDLIFE" ], + "species": [ "MAMMAL" ], + "volume": "10 L", + "weight": "10 kg", + "hp": 5, + "speed": 90, + "material": [ "flesh" ], + "symbol": "b", + "color": "brown", + "looks_like": "mon_pig_piglet", + "aggression": -10, + "morale": 10, + "aggro_character": false, + "melee_skill": 1, + "melee_dice": 1, + "melee_dice_sides": 2, + "melee_damage": [ { "damage_type": "cut", "amount": 1 } ], + "dodge": 4, + "stomach_size": 300, + "harvest": "mammal_small_boar", + "weakpoint_sets": [ "wps_animal_quadruped" ], + "families": [ "prof_gross_anatomy", "prof_intro_biology", "prof_physiology", "prof_wp_ungulate" ], + "path_settings": { "max_dist": 10 }, + "fear_triggers": [ "SOUND", "PLAYER_CLOSE" ], + "upgrades": { "age_grow": 38, "into": "mon_boar_wild" }, + "biosignature": { "biosig_item": "feces_manure", "biosig_timer": 7 }, + "special_attacks": [ [ "EAT_FOOD", 40 ], [ "EAT_CARRION", 60 ] ], + "flags": [ "SEES", "HEARS", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER", "WARM", "KEENNOSE", "EATS", "SMALL_HIDER" ] + }, + { + "id": "mon_boar_wild", + "type": "MONSTER", + "name": { "str": "wild boar" }, + "description": "Originally not native in the U.S., this wild omnivore is a crossbreed between the Eurasian wild boar escaped from hunting reserves and the domesticated pig gone feral in the wilderness. Its population has skyrocketed during the last few decades.", + "looks_like": "mon_pig", + "default_faction": "pig", + "bodytype": "pig", + "categories": [ "WILDLIFE" ], + "species": [ "MAMMAL" ], + "volume": "108500 ml", + "weight": "100 kg", + "hp": 60, + "speed": 110, + "material": [ "flesh" ], + "symbol": "b", + "color": "brown", + "aggression": 20, + "morale": 20, + "aggro_character": false, + "melee_skill": 5, + "melee_dice": 2, + "melee_dice_sides": 8, + "melee_damage": [ { "damage_type": "cut", "amount": 5 } ], + "dodge": 2, + "stomach_size": 1700, + "harvest": "boar_with_skull", + "weakpoint_sets": [ "wps_animal_quadruped" ], + "families": [ "prof_gross_anatomy", "prof_intro_biology", "prof_physiology", "prof_wp_ungulate" ], + "reproduction": { "baby_monster": "mon_boar_wild_piglet", "baby_count": 8, "baby_timer": 154 }, + "baby_flags": [ "SPRING", "SUMMER", "AUTUMN", "WINTER" ], + "biosignature": { "biosig_item": "feces_manure", "biosig_timer": 2 }, + "path_settings": { "max_dist": 10 }, + "anger_triggers": [ "PLAYER_WEAK", "FRIEND_ATTACKED", "HURT" ], + "fear_triggers": [ "SOUND", "PLAYER_CLOSE" ], + "zombify_into": "mon_zpig_brute", + "special_attacks": [ [ "EAT_FOOD", 20 ], [ "EAT_CARRION", 60 ] ], + "flags": [ + "SEES", + "HEARS", + "SMELLS", + "PET_MOUNTABLE", + "ANIMAL", + "PATH_AVOID_DANGER", + "WARM", + "KEENNOSE", + "CORNERED_FIGHTER", + "EATS" + ], + "armor": { "bash": 2, "cut": 1 } + }, + { + "id": "mon_bobcat", + "type": "MONSTER", + "name": { "str": "bobcat" }, + "description": "A spotted wild cat living across much of North America. It is not a serious threat to humans, but it can be aggressive when threatened.", + "default_faction": "cat", + "bodytype": "dog", + "categories": [ "WILDLIFE" ], + "species": [ "MAMMAL" ], + "volume": "8600 ml", + "weight": "8600 g", + "hp": 16, + "speed": 150, + "material": [ "flesh" ], + "symbol": "c", + "color": "brown", + "aggression": -25, + "morale": 1, + "aggro_character": false, + "melee_skill": 6, + "melee_dice": 1, + "melee_dice_sides": 6, + "melee_damage": [ { "damage_type": "cut", "amount": 2 } ], + "dodge": 8, + "vision_night": 20, + "fear_triggers": [ "SOUND", "PLAYER_CLOSE" ], + "harvest": "cat_medium_with_skull", + "families": [ "prof_gross_anatomy", "prof_intro_biology", "prof_physiology" ], + "dissect": "dissect_feline_sample_single", + "flags": [ "SEES", "HEARS", "GOODHEARING", "SMELLS", "ANIMAL", "PATH_AVOID_DANGER", "WARM", "HIT_AND_RUN", "SMALL_HIDER" ] + }, + { + "id": "mon_ant", + "type": "MONSTER", + "name": { "str": "giant ant" }, + "description": "An enormous red ant covered in chitinous plates. She possesses a pair of wriggling antennae and vicious-looking mandibles.", + "copy-from": "mon_ant", + "harvest": "giant_ant" + }, + { + "id": "mon_ant_acid", + "type": "MONSTER", + "name": { "str": "giant acidic ant" }, + "description": "A monstrous brown ant with a swollen abdomen that ends with a small orifice at the tip. Glistening liquid seems to drip out periodically.", + "copy-from": "mon_ant_acid", + "harvest": "giant_acid_ant" + } +] \ No newline at end of file From 9b410e6892e18775499413612330d91b34a7de92 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 11:06:50 -0500 Subject: [PATCH 29/69] Update xe_playable_gracken.json --- .../mutations/xe_playable_gracken.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json index fe179bf81a8c0..6f5897d81d099 100644 --- a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json +++ b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json @@ -22,6 +22,7 @@ "SHADE_SKIN", "SHADE_LEGS", "SHADE_ARMS", + "SHADE_EYES", "SHADE_HANDS", "SHADE_FEET", "SHADE_STOMACH", @@ -57,6 +58,21 @@ "purifiable": false, "threshold": true }, + { + "type": "mutation", + "id": "SHADE_EYES", + "name": { "str": "Shade Eyes" }, + "description": "Bright yellow eyes shine out from the shadowy crevices of your face.", + "//": "This is the baseline Gracken eyes mutation. TODO: Jsonify nightvision so you can ditch the NIGHTVISION trait.", + "types": [ "EYES" ], + "purifiable": false, + "mixed_effect": true, + "points": 1, + "visibility": 4, + "ugliness": 1, + "category": [ "GRACKEN" ], + "threshreq": [ "THRESH_SPECIES_GRACKEN" ] + }, { "type": "mutation", "id": "NIGHTVISION", From 4c24c4c91876b8d2ed26c44cc9419fa04fa3b2ee Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 08:00:15 -0500 Subject: [PATCH 30/69] Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json | 6 +----- data/mods/Xedra_Evolved/monsters/monster_overrides.json | 4 ++-- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json b/data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json index 421882969dfb3..94c192afa9e21 100644 --- a/data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json +++ b/data/mods/Xedra_Evolved/harvest_monster_hunter_gracken.json @@ -5,11 +5,7 @@ "type": "harvest", "copy-from": "zombie_grabber", "delete": { "entries": [ { "drop": "sinew", "mass_ratio": 0.00035 } ] }, - "extend": { - "entries": [ - { "drop": "grappler_sinew", "mass_ratio": 0.00035 } - ] - } + "extend": { "entries": [ { "drop": "grappler_sinew", "mass_ratio": 0.00035 } ] } }, { "id": "pig_with_skull", diff --git a/data/mods/Xedra_Evolved/monsters/monster_overrides.json b/data/mods/Xedra_Evolved/monsters/monster_overrides.json index e10c85085eca8..a4ddc832cd55f 100644 --- a/data/mods/Xedra_Evolved/monsters/monster_overrides.json +++ b/data/mods/Xedra_Evolved/monsters/monster_overrides.json @@ -1,5 +1,5 @@ [ - { + { "id": "mon_bear_cub", "type": "MONSTER", "copy-from": "mon_bear", @@ -229,4 +229,4 @@ "copy-from": "mon_ant_acid", "harvest": "giant_acid_ant" } -] \ No newline at end of file +] From 18f4028d506232b5bca80148a9af4c36f045c4ab Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 14:56:32 -0500 Subject: [PATCH 31/69] Gracken Eyes --- data/mods/Xedra_Evolved/body_parts.json | 43 +++++++++++++++++++ .../mutations/xe_playable_gracken.json | 3 +- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/data/mods/Xedra_Evolved/body_parts.json b/data/mods/Xedra_Evolved/body_parts.json index 2cb2d08576892..14e39acdff215 100644 --- a/data/mods/Xedra_Evolved/body_parts.json +++ b/data/mods/Xedra_Evolved/body_parts.json @@ -135,6 +135,49 @@ "name": "stalker eye", "name_multiple": "stalker eyes" }, + { + "id": "gracken_eyes", + "type": "body_part", + "name": "gracken's eyes", + "accusative": { "ctxt": "bodypart_accusative", "str": "gracken's eyes" }, + "heading": "s. eyes", + "heading_multiple": "s. eyes", + "encumbrance_text": "Ranged combat is hampered.", + "encumbrance_limit": 60, + "main_part": "head", + "opposite_part": "gracken_eyes", + "hit_size": 0.5, + "hit_difficulty": 1.15, + "limb_type": "sensor", + "limb_score_mods": [ { "limb_score": "vision", "modifier": 1 }, { "limb_score": "night_vis", "modifier": 1.5 } ], + "side": "both", + "base_hp": 60, + "drench_capacity": 0, + "flags": [ "IGNORE_TEMP", "LIMB_UPPER", "BIONIC_LIMB" ], + "smash_message": "You use your flippin' face to smash the %s. EXTREME.", + "sub_parts": [ "stalker_eye", "stalker_eye" ], + "effects_on_hit": [ + { + "id": "blind", + "dmg_threshold": 3, + "dmg_scale_increment": 3, + "chance": 50, + "chance_dmg_scaling": 5, + "duration": 1, + "duration_dmg_scaling": 0.5 + } + ] + }, + { + "id": "gracken_eye", + "type": "sub_body_part", + "max_coverage": 10, + "parent": "bp_null", + "side": 2, + "opposite": "gracken_eye", + "name": "gracken eye", + "name_multiple": "gracken eyes" + }, { "id": "devil_tail", "type": "body_part", diff --git a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json index 6f5897d81d099..2853195e3bca5 100644 --- a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json +++ b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json @@ -71,7 +71,8 @@ "visibility": 4, "ugliness": 1, "category": [ "GRACKEN" ], - "threshreq": [ "THRESH_SPECIES_GRACKEN" ] + "threshreq": [ "THRESH_SPECIES_GRACKEN" ], + "enchantments": [ { "condition": "ALWAYS", "modified_bodyparts": [ { "lose": "eyes" }, { "gain": "gracken_eyes" } ] } ] }, { "type": "mutation", From dd3d4a4d5edfc5761ad0190f7ce0f270b49e8421 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 20:06:47 -0500 Subject: [PATCH 32/69] Flagify Carnivore Update consumption.cpp --- data/json/mutations/mutations.json | 1 + .../mutations/xe_playable_gracken.json | 44 ++++++++++++++++++- src/consumption.cpp | 12 ++--- src/item.cpp | 3 +- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/data/json/mutations/mutations.json b/data/json/mutations/mutations.json index ede2f6249c9ad..34a725a882c4e 100644 --- a/data/json/mutations/mutations.json +++ b/data/json/mutations/mutations.json @@ -7888,6 +7888,7 @@ "types": [ "DIET" ], "cancels": [ "VEGAN" ], "category": [ "LIZARD", "SPIDER", "CHIMERA", "RAPTOR", "FELINE", "BATRACHIAN", "BEAST", "LUPINE" ], + "flags": [ "CARNIVORE_DIET" ], "vitamin_rates": [ [ "vitC", -1200 ] ] }, { diff --git a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json index 2853195e3bca5..e917b0507d80d 100644 --- a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json +++ b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json @@ -245,7 +245,7 @@ "name": { "str": "Shade Stomach" }, "description": "Your dietary needs are so minimized that you could travel months or years without eating. There are consequences to this. One is an inability to process normal food. Another is a pretty constant state of weariness, but this is the best way to handle interdimensional travel until you are able to develop an organ to consume local foods. The ambient energies here are much weaker than what you normally encounter out in the Nether between universes, you need exposure to nuclear radiation to gain calories on this planet, for now.", "//": "This is the baseline Gracken stomach mutation.", - "types": [ "STOMACH" ], + "types": [ "DIET" ], "purifiable": false, "mixed_effect": true, "points": 1, @@ -261,6 +261,47 @@ "category": [ "GRACKEN" ], "threshreq": [ "THRESH_SPECIES_GRACKEN" ] }, + { + "type": "mutation", + "id": "SHADE_OMNIVORE", + "name": { "str": "Omnivorous Stomach" }, + "description": "You eat a wide variety of foods native to this world that would be appropriate for the dominant species.", + "//": "This is one path of Gracken stomach mutations.", + "types": [ "DIET" ], + "purifiable": false, + "mixed_effect": true, + "points": 1, + "category": [ "GRACKEN" ], + "threshreq": [ "THRESH_SPECIES_GRACKEN" ] + }, + { + "type": "mutation", + "id": "SHADE_CARNIVORE", + "name": { "str": "Carnivorous Stomach" }, + "description": "You eat an exclusively meat based diet as befits an apex predator of this planet.", + "//": "This is one path of Gracken stomach mutations.", + "types": [ "DIET" ], + "purifiable": false, + "mixed_effect": true, + "points": 1, + "category": [ "GRACKEN" ], + "threshreq": [ "THRESH_SPECIES_GRACKEN" ], + "flags": [ "CARNIVORE_DIET" ], + "vitamin_rates": [ [ "vitC", -1200 ] ] + }, + { + "type": "mutation", + "id": "SHADE_HERBIVORE", + "name": { "str": "Carnivorous Stomach" }, + "description": "You eat a herbivorous diet. The benefit of this is you never have to kill for your food. Unless the plants were trying to kill you first.", + "//": "This is one path of Gracken stomach mutations.", + "types": [ "DIET" ], + "purifiable": false, + "mixed_effect": true, + "points": 1, + "category": [ "GRACKEN" ], + "threshreq": [ "THRESH_SPECIES_GRACKEN" ] + }, { "type": "mutation", "id": "SHADE_EVOLUTION_GLAND", @@ -276,7 +317,6 @@ "type": "mutation", "id": "RADIOTROPHIC", "name": { "str": "Radiotrophic" }, - "types": [ "DIET" ], "points": 3, "vitamin_cost": 160, "description": "Your system has adapted to radiation. While irradiated, you will convert the radiation into calories.", diff --git a/src/consumption.cpp b/src/consumption.cpp index 3bd4d698c16e7..b9d04a1a05109 100644 --- a/src/consumption.cpp +++ b/src/consumption.cpp @@ -116,6 +116,7 @@ static const json_character_flag json_flag_HEMOVORE( "HEMOVORE" ); static const json_character_flag json_flag_IMMUNE_SPOIL( "IMMUNE_SPOIL" ); static const json_character_flag json_flag_NUMB( "NUMB" ); static const json_character_flag json_flag_PARAIMMUNE( "PARAIMMUNE" ); +static const json_character_flag json_flag_CARNIVORE_DIET( "CARNIVORE_DIET" ); static const json_character_flag json_flag_PRED1( "PRED1" ); static const json_character_flag json_flag_PRED2( "PRED2" ); static const json_character_flag json_flag_PRED3( "PRED3" ); @@ -156,7 +157,6 @@ static const trait_id trait_AMORPHOUS( "AMORPHOUS" ); static const trait_id trait_ANTIFRUIT( "ANTIFRUIT" ); static const trait_id trait_ANTIJUNK( "ANTIJUNK" ); static const trait_id trait_ANTIWHEAT( "ANTIWHEAT" ); -static const trait_id trait_CARNIVORE( "CARNIVORE" ); static const trait_id trait_EATDEAD( "EATDEAD" ); static const trait_id trait_EATHEALTH( "EATHEALTH" ); static const trait_id trait_GOURMAND( "GOURMAND" ); @@ -232,7 +232,7 @@ static int compute_default_effective_kcal( const item &comest, const Character & kcal *= 0.75f; } - if( you.has_trait( trait_CARNIVORE ) && comest.has_flag( flag_CARNIVORE_OK ) && + if( you.has_flag( flag_CARNIVORE_DIET ) && comest.has_flag( flag_CARNIVORE_OK ) && comest.has_any_vitamin( carnivore_blacklist ) ) { // TODO: Comment pizza scrapping kcal *= 0.5f; @@ -918,7 +918,7 @@ ret_val Character::can_eat( const item &food ) const return ret_val::make_failure( INEDIBLE_MUTATION, _( "Ugh, you can't drink that!" ) ); } - if( has_trait( trait_CARNIVORE ) && compute_effective_nutrients( food ).kcal() > 0 && + if( has_flag( flag_CARNIVORE_DIET ) && compute_effective_nutrients( food ).kcal() > 0 && food.has_any_vitamin( carnivore_blacklist ) && !food.has_flag( flag_CARNIVORE_OK ) ) { return ret_val::make_failure( INEDIBLE_MUTATION, _( "Eww. Inedible plant stuff!" ) ); @@ -993,7 +993,7 @@ ret_val Character::will_eat( const item &food, bool interactive ) } } - const bool carnivore = has_trait( trait_CARNIVORE ); + const bool carnivore = has_flag( flag_CARNIVORE_DIET ); const bool food_is_human_flesh = food.has_vitamin( vitamin_human_flesh_vitamin ) || ( food.has_flag( flag_STRICT_HUMANITARIANISM ) && !has_flag( json_flag_STRICT_HUMANITARIAN ) ); @@ -1432,7 +1432,7 @@ void Character::modify_morale( item &food, const int nutr ) // Organs are still usually negative due to fun values as low as -35. // The PREDATOR_FUN flag shouldn't be on human flesh, to not interfere with sapiovores/cannibalism. if( food.has_flag( flag_PREDATOR_FUN ) ) { - const bool carnivore = has_trait( trait_CARNIVORE ); + const bool carnivore = has_flag( flag_CARNIVORE_DIET ); const bool culler = has_flag( json_flag_PRED1 ); const bool hunter = has_flag( json_flag_PRED2 ); const bool predator = has_flag( json_flag_PRED3 ); @@ -1477,7 +1477,7 @@ void Character::modify_morale( item &food, const int nutr ) } // Carnivores CAN eat junk food, but they won't like it much. // Pizza-scraping happens in consume_effects. - if( has_trait( trait_CARNIVORE ) && !food.has_flag( flag_CARNIVORE_OK ) ) { + if( has_flag( flag_CARNIVORE_DIET ) && !food.has_flag( flag_CARNIVORE_OK ) ) { add_msg_if_player( m_bad, _( "Your stomach begins gurgling and you feel bloated and ill." ) ); add_morale( morale_no_digest, -25, -125, 30_minutes, 24_minutes ); } diff --git a/src/item.cpp b/src/item.cpp index 607694cc5cb22..384dd67a82a6a 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -216,7 +216,6 @@ static const species_id species_ROBOT( "ROBOT" ); static const sub_bodypart_str_id sub_body_part_torso_lower( "torso_lower" ); static const sub_bodypart_str_id sub_body_part_torso_upper( "torso_upper" ); -static const trait_id trait_CARNIVORE( "CARNIVORE" ); static const trait_id trait_JITTERY( "JITTERY" ); static const trait_id trait_LIGHTWEIGHT( "LIGHTWEIGHT" ); static const trait_id trait_TOLERANCE( "TOLERANCE" ); @@ -2756,7 +2755,7 @@ void item::food_info( const item *food_item, std::vector &info, std::abs( static_cast( food_item->count() ) * batch ) ); } if( food_item->corpse != nullptr && parts->test( iteminfo_parts::FOOD_SMELL ) && - ( debug || ( g != nullptr && player_character.has_trait( trait_CARNIVORE ) ) ) ) { + ( debug || ( g != nullptr && player_character.has_flag( flag_CARNIVORE_DIET ) ) ) ) { info.emplace_back( "FOOD", _( "Smells like: " ) + food_item->corpse->nname() ); } From d72ee161ecea5e33dd33bd289839ab8f1b1beb8d Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 21:01:23 -0500 Subject: [PATCH 33/69] Apply suggestions from code review Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json index e917b0507d80d..601f24b41eb4b 100644 --- a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json +++ b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json @@ -267,7 +267,7 @@ "name": { "str": "Omnivorous Stomach" }, "description": "You eat a wide variety of foods native to this world that would be appropriate for the dominant species.", "//": "This is one path of Gracken stomach mutations.", - "types": [ "DIET" ], + "types": [ "DIET" ], "purifiable": false, "mixed_effect": true, "points": 1, @@ -280,7 +280,7 @@ "name": { "str": "Carnivorous Stomach" }, "description": "You eat an exclusively meat based diet as befits an apex predator of this planet.", "//": "This is one path of Gracken stomach mutations.", - "types": [ "DIET" ], + "types": [ "DIET" ], "purifiable": false, "mixed_effect": true, "points": 1, @@ -295,7 +295,7 @@ "name": { "str": "Carnivorous Stomach" }, "description": "You eat a herbivorous diet. The benefit of this is you never have to kill for your food. Unless the plants were trying to kill you first.", "//": "This is one path of Gracken stomach mutations.", - "types": [ "DIET" ], + "types": [ "DIET" ], "purifiable": false, "mixed_effect": true, "points": 1, From 4e10abc69e6fc8ad0ffe292fc2c75f99c8ec2b59 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:07:39 -0500 Subject: [PATCH 34/69] Update flags.json --- data/json/flags.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/json/flags.json b/data/json/flags.json index 9ad8ad6c6b3e1..9ff0b5ab373dc 100644 --- a/data/json/flags.json +++ b/data/json/flags.json @@ -1341,6 +1341,10 @@ "id": "CANNIBAL", "type": "json_flag" }, + { + "id": "CARNIVORE_DIET", + "type": "json_flag" + }, { "id": "CARNIVORE_OK", "type": "json_flag" From 149a34118b413d3a0d07e65da2549aabf37482b4 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:15:39 -0500 Subject: [PATCH 35/69] Revert "Update flags.json" This reverts commit b98cd498a113d6cd5cb1ad0a2f15b261e2dd0bbf. --- data/json/flags.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/data/json/flags.json b/data/json/flags.json index 9ff0b5ab373dc..9ad8ad6c6b3e1 100644 --- a/data/json/flags.json +++ b/data/json/flags.json @@ -1341,10 +1341,6 @@ "id": "CANNIBAL", "type": "json_flag" }, - { - "id": "CARNIVORE_DIET", - "type": "json_flag" - }, { "id": "CARNIVORE_OK", "type": "json_flag" From 11114945d59dbbb0c45f35677319432360e05d84 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:17:02 -0500 Subject: [PATCH 36/69] Update consumption.cpp --- src/consumption.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/consumption.cpp b/src/consumption.cpp index b9d04a1a05109..aadc2d67b15bf 100644 --- a/src/consumption.cpp +++ b/src/consumption.cpp @@ -232,7 +232,7 @@ static int compute_default_effective_kcal( const item &comest, const Character & kcal *= 0.75f; } - if( you.has_flag( flag_CARNIVORE_DIET ) && comest.has_flag( flag_CARNIVORE_OK ) && + if( you.has_flag( json_flag_CARNIVORE_DIET ) && comest.has_flag( flag_CARNIVORE_OK ) && comest.has_any_vitamin( carnivore_blacklist ) ) { // TODO: Comment pizza scrapping kcal *= 0.5f; @@ -918,7 +918,7 @@ ret_val Character::can_eat( const item &food ) const return ret_val::make_failure( INEDIBLE_MUTATION, _( "Ugh, you can't drink that!" ) ); } - if( has_flag( flag_CARNIVORE_DIET ) && compute_effective_nutrients( food ).kcal() > 0 && + if( has_flag( json_flag_CARNIVORE_DIET ) && compute_effective_nutrients( food ).kcal() > 0 && food.has_any_vitamin( carnivore_blacklist ) && !food.has_flag( flag_CARNIVORE_OK ) ) { return ret_val::make_failure( INEDIBLE_MUTATION, _( "Eww. Inedible plant stuff!" ) ); @@ -993,7 +993,7 @@ ret_val Character::will_eat( const item &food, bool interactive ) } } - const bool carnivore = has_flag( flag_CARNIVORE_DIET ); + const bool carnivore = has_flag( json_flag_CARNIVORE_DIET ); const bool food_is_human_flesh = food.has_vitamin( vitamin_human_flesh_vitamin ) || ( food.has_flag( flag_STRICT_HUMANITARIANISM ) && !has_flag( json_flag_STRICT_HUMANITARIAN ) ); @@ -1432,7 +1432,7 @@ void Character::modify_morale( item &food, const int nutr ) // Organs are still usually negative due to fun values as low as -35. // The PREDATOR_FUN flag shouldn't be on human flesh, to not interfere with sapiovores/cannibalism. if( food.has_flag( flag_PREDATOR_FUN ) ) { - const bool carnivore = has_flag( flag_CARNIVORE_DIET ); + const bool carnivore = has_flag( json_flag_CARNIVORE_DIET ); const bool culler = has_flag( json_flag_PRED1 ); const bool hunter = has_flag( json_flag_PRED2 ); const bool predator = has_flag( json_flag_PRED3 ); @@ -1477,7 +1477,7 @@ void Character::modify_morale( item &food, const int nutr ) } // Carnivores CAN eat junk food, but they won't like it much. // Pizza-scraping happens in consume_effects. - if( has_flag( flag_CARNIVORE_DIET ) && !food.has_flag( flag_CARNIVORE_OK ) ) { + if( has_flag( json_flag_CARNIVORE_DIET ) && !food.has_flag( flag_CARNIVORE_OK ) ) { add_msg_if_player( m_bad, _( "Your stomach begins gurgling and you feel bloated and ill." ) ); add_morale( morale_no_digest, -25, -125, 30_minutes, 24_minutes ); } From 75a4c3250440172a0a869052a4053c897e99e77e Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 22:54:58 -0500 Subject: [PATCH 37/69] Update item.cpp --- src/item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/item.cpp b/src/item.cpp index 384dd67a82a6a..a112691029e94 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -2755,7 +2755,7 @@ void item::food_info( const item *food_item, std::vector &info, std::abs( static_cast( food_item->count() ) * batch ) ); } if( food_item->corpse != nullptr && parts->test( iteminfo_parts::FOOD_SMELL ) && - ( debug || ( g != nullptr && player_character.has_flag( flag_CARNIVORE_DIET ) ) ) ) { + ( debug || ( g != nullptr && player_character.has_flag( json_flag_CARNIVORE_DIET ) ) ) ) { info.emplace_back( "FOOD", _( "Smells like: " ) + food_item->corpse->nname() ); } From cdbb848486e63c8f7609f1d648b6340a8d4d7c8d Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 23:00:51 -0500 Subject: [PATCH 38/69] Update flag.h --- src/flag.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/flag.h b/src/flag.h index 75932914c8681..f281506dcae1f 100644 --- a/src/flag.h +++ b/src/flag.h @@ -69,6 +69,7 @@ extern const flag_id flag_CAMERA_PRO; extern const flag_id flag_CANNIBAL; extern const flag_id flag_CANT_HEAL_EVERYONE; extern const flag_id flag_CANT_WEAR; +extern const flag_id flag_CARNIVORE_DIET; extern const flag_id flag_CARNIVORE_OK; extern const flag_id flag_CASING; extern const flag_id flag_CATTLE; From 6784cef7a1ec197d9cea604fdd7254e480174883 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sat, 7 Sep 2024 23:46:29 -0500 Subject: [PATCH 39/69] Update item.cpp --- src/item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/item.cpp b/src/item.cpp index a112691029e94..384dd67a82a6a 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -2755,7 +2755,7 @@ void item::food_info( const item *food_item, std::vector &info, std::abs( static_cast( food_item->count() ) * batch ) ); } if( food_item->corpse != nullptr && parts->test( iteminfo_parts::FOOD_SMELL ) && - ( debug || ( g != nullptr && player_character.has_flag( json_flag_CARNIVORE_DIET ) ) ) ) { + ( debug || ( g != nullptr && player_character.has_flag( flag_CARNIVORE_DIET ) ) ) ) { info.emplace_back( "FOOD", _( "Smells like: " ) + food_item->corpse->nname() ); } From de308c238aee1dccb471c16f9c1b2f2a5e16889b Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sun, 8 Dec 2024 01:27:40 -0600 Subject: [PATCH 40/69] Update data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json Co-authored-by: Anton Burmistrov --- data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json index 601f24b41eb4b..575e63b12ebaf 100644 --- a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json +++ b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json @@ -292,7 +292,7 @@ { "type": "mutation", "id": "SHADE_HERBIVORE", - "name": { "str": "Carnivorous Stomach" }, + "name": { "str": "Herbivore Stomach" }, "description": "You eat a herbivorous diet. The benefit of this is you never have to kill for your food. Unless the plants were trying to kill you first.", "//": "This is one path of Gracken stomach mutations.", "types": [ "DIET" ], From af2ba230d9ac00ec61bf615f509ebf6d3cf009ef Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sun, 8 Dec 2024 01:27:48 -0600 Subject: [PATCH 41/69] Update data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json Co-authored-by: Anton Burmistrov --- data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json index 575e63b12ebaf..5a4da2b2a4ace 100644 --- a/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json +++ b/data/mods/Xedra_Evolved/mutations/xe_playable_gracken.json @@ -278,7 +278,7 @@ "type": "mutation", "id": "SHADE_CARNIVORE", "name": { "str": "Carnivorous Stomach" }, - "description": "You eat an exclusively meat based diet as befits an apex predator of this planet.", + "description": "You eat an exclusively meat-based diet as befits an apex predator of this planet.", "//": "This is one path of Gracken stomach mutations.", "types": [ "DIET" ], "purifiable": false, From 0ad395d1a0345fedea3c1d4e8c8116f8d5d3edff Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Sun, 8 Dec 2024 09:11:07 -0600 Subject: [PATCH 42/69] Update consumption.cpp --- src/consumption.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/consumption.cpp b/src/consumption.cpp index aadc2d67b15bf..306f0df1acfec 100644 --- a/src/consumption.cpp +++ b/src/consumption.cpp @@ -112,11 +112,11 @@ static const itype_id itype_syringe( "syringe" ); static const json_character_flag json_flag_BLOODFEEDER( "BLOODFEEDER" ); static const json_character_flag json_flag_CANNIBAL( "CANNIBAL" ); +static const json_character_flag json_flag_CARNIVORE_DIET( "CARNIVORE_DIET" ); static const json_character_flag json_flag_HEMOVORE( "HEMOVORE" ); static const json_character_flag json_flag_IMMUNE_SPOIL( "IMMUNE_SPOIL" ); static const json_character_flag json_flag_NUMB( "NUMB" ); static const json_character_flag json_flag_PARAIMMUNE( "PARAIMMUNE" ); -static const json_character_flag json_flag_CARNIVORE_DIET( "CARNIVORE_DIET" ); static const json_character_flag json_flag_PRED1( "PRED1" ); static const json_character_flag json_flag_PRED2( "PRED2" ); static const json_character_flag json_flag_PRED3( "PRED3" ); From 1ab3d0323b5cf31c64eed1bf0ef49df24989cf97 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Mon, 9 Dec 2024 21:28:42 -0600 Subject: [PATCH 43/69] Update item.cpp --- src/item.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/item.cpp b/src/item.cpp index 384dd67a82a6a..37fa2815b18dd 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -187,6 +187,7 @@ static const itype_id itype_water_clean( "water_clean" ); static const itype_id itype_waterproof_gunmod( "waterproof_gunmod" ); static const json_character_flag json_flag_CANNIBAL( "CANNIBAL" ); +static const json_character_flag json_flag_CARNIVORE_DIET( "CARNIVORE_DIET" ); static const json_character_flag json_flag_IMMUNE_SPOIL( "IMMUNE_SPOIL" ); static const json_character_flag json_flag_PSYCHOPATH( "PSYCHOPATH" ); static const json_character_flag json_flag_SAPIOVORE( "SAPIOVORE" ); From a3e97c7335b4dc322d3528033d98b4e3d0fa552d Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Mon, 9 Dec 2024 23:34:51 -0600 Subject: [PATCH 44/69] Update src/item.cpp --- src/item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/item.cpp b/src/item.cpp index 37fa2815b18dd..4389bd437e75a 100644 --- a/src/item.cpp +++ b/src/item.cpp @@ -2756,7 +2756,7 @@ void item::food_info( const item *food_item, std::vector &info, std::abs( static_cast( food_item->count() ) * batch ) ); } if( food_item->corpse != nullptr && parts->test( iteminfo_parts::FOOD_SMELL ) && - ( debug || ( g != nullptr && player_character.has_flag( flag_CARNIVORE_DIET ) ) ) ) { + ( debug || ( g != nullptr && player_character.has_flag( json_flag_CARNIVORE_DIET ) ) ) ) { info.emplace_back( "FOOD", _( "Smells like: " ) + food_item->corpse->nname() ); } From 4aed9af969a2e607b2e0f852e0c29624f9581e62 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Tue, 10 Dec 2024 21:27:22 -0600 Subject: [PATCH 45/69] Ravenfolk tweaks --- .../Magiclysm/mutations/fantasy_species.json | 12 +++++++++--- data/mods/Magiclysm/mutations/mutation_eocs.json | 16 ++++++++++++++++ .../Magiclysm/mutations/mutation_spells.json | 14 ++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/data/mods/Magiclysm/mutations/fantasy_species.json b/data/mods/Magiclysm/mutations/fantasy_species.json index 298c3cfab687e..e1157a8745cf1 100644 --- a/data/mods/Magiclysm/mutations/fantasy_species.json +++ b/data/mods/Magiclysm/mutations/fantasy_species.json @@ -748,7 +748,8 @@ "category": [ "SPECIES_RAVENFOLK" ], "purifiable": false, "extend": { "prereqs": [ "RAVEN_BONES" ] }, - "threshreq": [ "THRESH_SPECIES_RAVENFOLK" ] + "threshreq": [ "THRESH_SPECIES_RAVENFOLK" ], + "active": false }, { "type": "mutation", @@ -769,6 +770,7 @@ "flags": [ "WINGS_2", "WING_GLIDE" ], "active": true, "activated_is_setup": false, + "activation_msg": "", "activated_eocs": [ "EOC_RAVENFOLK_LEAP" ] }, { @@ -778,7 +780,7 @@ "points": 0, "visibility": 10, "ugliness": 5, - "description": "Your large beak allows you to imitate nearly every sound humans can make. And also rip into flesh, if it comes to that.", + "description": "Your large beak allows you to imitate nearly every sound humans can make, as well as let out very loud screeches. And also rip into flesh, if it comes to that.", "purifiable": false, "types": [ "TEETH", "MUZZLE" ], "cancels": [ "MOUTH_TENTACLES" ], @@ -795,7 +797,11 @@ "chance": 15, "base_damage": { "damage_type": "stab", "amount": 12 } } - ] + ], + "active": true, + "activated_is_setup": false, + "activation_msg": "", + "activated_eocs": [ "EOC_RAVENFOLK_SCREECH" ] }, { "type": "mutation", diff --git a/data/mods/Magiclysm/mutations/mutation_eocs.json b/data/mods/Magiclysm/mutations/mutation_eocs.json index a7ff330d9e5e0..15f35d3431b35 100644 --- a/data/mods/Magiclysm/mutations/mutation_eocs.json +++ b/data/mods/Magiclysm/mutations/mutation_eocs.json @@ -96,5 +96,21 @@ } } ] + }, + { + "type": "effect_on_condition", + "id": "EOC_RAVENFOLK_SCREECH", + "effect": [ + { + "run_eocs": "EOC_GENERIC_SPELL_MUTATION", + "variables": { + "energy_amount": "0", + "prep_time": "0", + "spell_to_cast": "spell_ravenfolk_screech", + "message_success": { "i18n": true, "str": "You let out a piercing cry!" }, + "message_fail": { "i18n": true, "str": "You change your mind about screeching." } + } + } + ] } ] diff --git a/data/mods/Magiclysm/mutations/mutation_spells.json b/data/mods/Magiclysm/mutations/mutation_spells.json index b2e1479161ae7..9dd32feebf4d0 100644 --- a/data/mods/Magiclysm/mutations/mutation_spells.json +++ b/data/mods/Magiclysm/mutations/mutation_spells.json @@ -13,5 +13,19 @@ "damage_type": "bash", "min_range": 6, "max_range": 6 + }, + { + "type": "SPELL", + "id": "spell_ravenfolk_screech", + "name": { "str": "Ravenfolk Screech", "//~": "NO_I18N" }, + "description": { "str": "You let out a loud raven's cry.", "//~": "NO_I18N" }, + "message": "", + "valid_targets": [ "ground" ], + "flags": [ "SILENT", "NO_LEGS", "NO_HANDS", "NO_EXPLOSION_SFX" ], + "effect": "noise", + "shape": "blast", + "min_damage": 30, + "max_damage": 30, + "damage_type": "bash" } ] From 3e2628de2a59b5da3beee47d5962f8b06384fc03 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Tue, 10 Dec 2024 21:31:04 -0600 Subject: [PATCH 46/69] Clarify what Ravenfolk legs being active does --- data/mods/Magiclysm/mutations/fantasy_species.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/data/mods/Magiclysm/mutations/fantasy_species.json b/data/mods/Magiclysm/mutations/fantasy_species.json index e1157a8745cf1..4db9d2f896ce5 100644 --- a/data/mods/Magiclysm/mutations/fantasy_species.json +++ b/data/mods/Magiclysm/mutations/fantasy_species.json @@ -744,12 +744,11 @@ "id": "RAVENFOLK_LEGS", "copy-from": "BIRD_LEGS", "name": { "str": "Ravenfolk Legs" }, - "description": "Your legs and feet are those of a raven, with three long talons at the front and one at the back, ending in wicked claws and preventing you from wearing shoes. Fortunately they don't impede your movement.", + "description": "Your legs and feet are those of a raven, with three long talons at the front and one at the back, ending in wicked claws and preventing you from wearing shoes. Fortunately they don't impede your movement, and you could use them as part of a leaping attack.", "category": [ "SPECIES_RAVENFOLK" ], "purifiable": false, "extend": { "prereqs": [ "RAVEN_BONES" ] }, - "threshreq": [ "THRESH_SPECIES_RAVENFOLK" ], - "active": false + "threshreq": [ "THRESH_SPECIES_RAVENFOLK" ] }, { "type": "mutation", From dbd27a067b90161ef63927eb6fe1e4eb75c61a16 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Tue, 10 Dec 2024 21:32:33 -0600 Subject: [PATCH 47/69] null activation_msg for Ravenfolk Legs --- data/mods/Magiclysm/mutations/fantasy_species.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/mutations/fantasy_species.json b/data/mods/Magiclysm/mutations/fantasy_species.json index 4db9d2f896ce5..5134eb1941869 100644 --- a/data/mods/Magiclysm/mutations/fantasy_species.json +++ b/data/mods/Magiclysm/mutations/fantasy_species.json @@ -748,7 +748,8 @@ "category": [ "SPECIES_RAVENFOLK" ], "purifiable": false, "extend": { "prereqs": [ "RAVEN_BONES" ] }, - "threshreq": [ "THRESH_SPECIES_RAVENFOLK" ] + "threshreq": [ "THRESH_SPECIES_RAVENFOLK" ], + "activation_msg": "" }, { "type": "mutation", From d1ee9f42a2c8b5695ae31313168bc76e70629f52 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Tue, 10 Dec 2024 21:54:08 -0600 Subject: [PATCH 48/69] Kick tests From cf12c2f60caa24fd8d35b514e0897f1d45ff61db Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Tue, 10 Dec 2024 22:03:44 -0600 Subject: [PATCH 49/69] Initial commit --- data/mods/Magiclysm/monsters/zombified_fantasy_species.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/monsters/zombified_fantasy_species.json b/data/mods/Magiclysm/monsters/zombified_fantasy_species.json index ef3f68c2d6542..9633386fc8549 100644 --- a/data/mods/Magiclysm/monsters/zombified_fantasy_species.json +++ b/data/mods/Magiclysm/monsters/zombified_fantasy_species.json @@ -5,7 +5,8 @@ "name": { "str": "zombie dwarf", "str_pl": "zombie dwarves" }, "copy-from": "mon_zombie_tough", "description": "Once a dwarf, this zombie now has rent flesh and a beard in tatters. Its face is twisted in an expression of rage.", - "proportional": { "speed": 0.9, "volume": 0.7, "weight": 0.9 }, + "proportional": { "volume": 0.7, "weight": 0.9 }, + "speed": 65, "//": "Better night vision than default zombies, but not as good as living dwarves, and worse day vision.", "vision_day": 15, "vision_night": 8, From b6346376784e9817a83352bfc2b7a1a45282ca4f Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Tue, 10 Dec 2024 22:45:37 -0600 Subject: [PATCH 50/69] Apply suggestions from code review --- data/mods/Xedra_Evolved/body_parts.json | 2 +- data/mods/Xedra_Evolved/monsters/monster_overrides.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/mods/Xedra_Evolved/body_parts.json b/data/mods/Xedra_Evolved/body_parts.json index 14e39acdff215..bea58ec29a783 100644 --- a/data/mods/Xedra_Evolved/body_parts.json +++ b/data/mods/Xedra_Evolved/body_parts.json @@ -149,7 +149,7 @@ "hit_size": 0.5, "hit_difficulty": 1.15, "limb_type": "sensor", - "limb_score_mods": [ { "limb_score": "vision", "modifier": 1 }, { "limb_score": "night_vis", "modifier": 1.5 } ], + "limb_scores": [ [ "vision", 1.0 ], [ "night_vis", 1.5 ], [ "reaction", 1 ] ], "side": "both", "base_hp": 60, "drench_capacity": 0, diff --git a/data/mods/Xedra_Evolved/monsters/monster_overrides.json b/data/mods/Xedra_Evolved/monsters/monster_overrides.json index a4ddc832cd55f..264daa76306db 100644 --- a/data/mods/Xedra_Evolved/monsters/monster_overrides.json +++ b/data/mods/Xedra_Evolved/monsters/monster_overrides.json @@ -56,7 +56,7 @@ "harvest": "bear_with_skull", "dissect": "dissect_ursine_sample_small", "families": [ "prof_gross_anatomy", "prof_intro_biology", "prof_physiology" ], - "reproduction": { "baby_monster": "mon_bear_cub", "baby_count": 1, "baby_timer": 700 }, + "reproduction": { "baby_type": { "baby_monster": "mon_bear_cub" }, "baby_count": 1, "baby_timer": 700 }, "//": "220 days gestation period, the mother and cubs remain together for 16-17 months.", "baby_flags": [ "SPRING" ], "special_attacks": [ [ "EAT_FOOD", 20 ], { "type": "bite", "cooldown": 15, "infection_chance": 44 }, [ "BROWSE", 40 ] ], @@ -160,7 +160,7 @@ "harvest": "boar_with_skull", "weakpoint_sets": [ "wps_animal_quadruped" ], "families": [ "prof_gross_anatomy", "prof_intro_biology", "prof_physiology", "prof_wp_ungulate" ], - "reproduction": { "baby_monster": "mon_boar_wild_piglet", "baby_count": 8, "baby_timer": 154 }, + "reproduction": { "baby_type": { "baby_monster": "mon_boar_wild_piglet" }, "baby_count": 8, "baby_timer": 154 }, "baby_flags": [ "SPRING", "SUMMER", "AUTUMN", "WINTER" ], "biosignature": { "biosig_item": "feces_manure", "biosig_timer": 2 }, "path_settings": { "max_dist": 10 }, From 174308b10d7a90c1c52e748e78d1c47a8fdb5834 Mon Sep 17 00:00:00 2001 From: Zhilkin Serg Date: Wed, 11 Dec 2024 09:22:25 +0300 Subject: [PATCH 51/69] Use enums instead of bool for ImGui::BeginChild --- src/magic.cpp | 4 ++-- src/ui.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/magic.cpp b/src/magic.cpp index 96038ff396141..a5e591525165c 100644 --- a/src/magic.cpp +++ b/src/magic.cpp @@ -2529,7 +2529,7 @@ class spellcasting_callback : public uilist_callback ImGui::SameLine( 0.0, -1.0 ); ImVec2 info_size = ImGui::GetContentRegionAvail(); info_size.y -= ImGui::GetTextLineHeightWithSpacing(); - if( ImGui::BeginChild( "spell info", info_size, false, + if( ImGui::BeginChild( "spell info", info_size, ImGuiChildFlags_None, ImGuiWindowFlags_AlwaysVerticalScrollbar ) ) { if( menu->previewing >= 0 && static_cast( menu->previewing ) < known_spells.size() ) { display_spell_info( menu->previewing ); @@ -3194,7 +3194,7 @@ void spellbook_callback::refresh( uilist *menu ) { ImGui::TableSetColumnIndex( 2 ); ImVec2 info_size = ImGui::GetContentRegionAvail(); - if( ImGui::BeginChild( "spellbook info", info_size, false, + if( ImGui::BeginChild( "spellbook info", info_size, ImGuiChildFlags_None, ImGuiWindowFlags_AlwaysAutoResize ) ) { if( menu->selected >= 0 && static_cast( menu->selected ) < spells.size() ) { draw_spellbook_info( spells[menu->selected] ); diff --git a/src/ui.cpp b/src/ui.cpp index cf40a62beccee..ffea7d42958e3 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -109,7 +109,7 @@ void uilist_impl::draw_controls() float entry_height = ImGui::GetTextLineHeightWithSpacing(); ImGuiStyle &style = ImGui::GetStyle(); - if( ImGui::BeginChild( "scroll", parent.calculated_menu_size, false ) ) { + if( ImGui::BeginChild( "scroll", parent.calculated_menu_size ) ) { if( ImGui::BeginTable( "menu items", 3, ImGuiTableFlags_SizingFixedFit ) ) { ImGui::TableSetupColumn( "hotkey", ImGuiTableColumnFlags_WidthFixed, parent.calculated_hotkey_width ); From 4ecc467f7c38eb2dd3c5e123b89dc49b5504f248 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Wed, 11 Dec 2024 00:30:57 -0600 Subject: [PATCH 52/69] Update data/mods/Xedra_Evolved/items/carnivore.json --- data/mods/Xedra_Evolved/items/carnivore.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/data/mods/Xedra_Evolved/items/carnivore.json b/data/mods/Xedra_Evolved/items/carnivore.json index cb07194296ef1..11c1835f1f6c7 100644 --- a/data/mods/Xedra_Evolved/items/carnivore.json +++ b/data/mods/Xedra_Evolved/items/carnivore.json @@ -155,6 +155,14 @@ "type": "COMESTIBLE", "name": { "str": "carnivore stomach" }, "description": "The stomach of an carnivorous creature. It is surprisingly durable." + }, + { + "id": "small_carnivore_stomach", + "copy-from": "stomach", + "type": "COMESTIBLE", + "name": { "str": "small carnivore stomach" }, + "description": "The stomach of a small carnivorous creature. It is surprisingly durable.", + "proportional": { "weight": 0.5, "volume": 0.5, "price": 0.5, "calories": 0.5 } }, { "id": "small_omnivore_stomach", From d5a09b7ea3fdcfa0b40e6a82ada120d37ad67f92 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Wed, 11 Dec 2024 00:41:21 -0600 Subject: [PATCH 53/69] Update gracken_trait_improvements.json --- .../items/gracken_trait_improvements.json | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/data/mods/Xedra_Evolved/items/gracken_trait_improvements.json b/data/mods/Xedra_Evolved/items/gracken_trait_improvements.json index 879c117e29faf..15bb79fed32af 100644 --- a/data/mods/Xedra_Evolved/items/gracken_trait_improvements.json +++ b/data/mods/Xedra_Evolved/items/gracken_trait_improvements.json @@ -120,5 +120,59 @@ } ] } + }, + { + "id": "gracken_herbivorous_stomach", + "copy-from": "gracken_improvement_general", + "type": "COMESTIBLE", + "name": { "str_sp": "Gracken Herbivorous Stomach" }, + "looks_like": "offal", + "description": "An organ that allows a mature Gracken to convert their diet to an herbivorous one.", + "use_action": { + "type": "effect_on_conditions", + "description": "Changed your diet to eating only plants.", + "effect_on_conditions": [ + { + "id": "herbivorous_stomach", + "effect": [ { "u_message": "You exchanged your previous stomach for this." }, { "u_add_trait": "SHADE_HERBIVORE" } ] + } + ] + } + }, + { + "id": "gracken_omnivorous_stomach", + "copy-from": "gracken_improvement_general", + "type": "COMESTIBLE", + "name": { "str_sp": "Gracken Dextrous Hands" }, + "looks_like": "offal", + "description": "An organ that allows a mature Gracken to convert their diet to an omnivorous one.", + "use_action": { + "type": "effect_on_conditions", + "description": "Changed your diet to eating most things.", + "effect_on_conditions": [ + { + "id": "omnivorous_stomach", + "effect": [ { "u_message": "You exchanged your previous stomach for this." }, { "u_add_trait": "SHADE_OMNIVORE" } ] + } + ] + } + }, + { + "id": "gracken_carnivorous_stomach", + "copy-from": "gracken_improvement_general", + "type": "COMESTIBLE", + "name": { "str_sp": "Gracken Dextrous Hands" }, + "looks_like": "offal", + "description": "An organ that allows a mature Gracken to convert their diet to an carnivorous one.", + "use_action": { + "type": "effect_on_conditions", + "description": "Changed your diet to meat eating.", + "effect_on_conditions": [ + { + "id": "carnivorous_stomach", + "effect": [ { "u_message": "You exchanged your previous stomach for this." }, { "u_add_trait": "SHADE_CARNIVORE" } ] + } + ] + } } ] From a26e5bfa72d0bacc3d3c5322a386b96e1fb8aa76 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Wed, 11 Dec 2024 08:20:55 -0500 Subject: [PATCH 54/69] names no more than three words --- data/json/monsters/fungus_zombie.json | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/data/json/monsters/fungus_zombie.json b/data/json/monsters/fungus_zombie.json index e546274ef79a6..a6abc861b3c5d 100644 --- a/data/json/monsters/fungus_zombie.json +++ b/data/json/monsters/fungus_zombie.json @@ -59,8 +59,8 @@ { "id": "mon_gasbag_fungalize", "type": "MONSTER", - "name": { "str": "bloated fungal stalk zombie" }, - "description": "This grotesquely swollen corpse has grown a short stalk of gray fungus bursting from the skull.", + "name": { "str": "fungal cherry bomb" }, + "description": "This grotesquely swollen corpse has grown a short stalk of gray fungus bursting from the skull. The overall visual effect is similar to a cherry or upside down lollipop.", "copy-from": "mon_zombie_gasbag", "default_faction": "fungus", "color": "black_yellow", @@ -108,7 +108,7 @@ { "id": "mon_zombie_smoker_fungalize", "type": "MONSTER", - "name": { "str": "smoking fungal stalk zombie" }, + "name": { "str": "fungal stalk smoker" }, "description": "This smoke-shrouded corpse has grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_zombie_smoker", "default_faction": "fungus", @@ -158,7 +158,7 @@ { "id": "mon_skeleton_fungalize", "type": "MONSTER", - "name": { "str": "skeletal fungal stalk zombie" }, + "name": { "str": "fungal stalk skeleton" }, "description": "This already horrific moving corpse covered in bony growths has also grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_skeleton", "default_faction": "fungus", @@ -205,7 +205,7 @@ { "id": "mon_skeleton_brute_fungalize", "type": "MONSTER", - "name": { "str": "skeletal fungal stalk brute" }, + "name": { "str": "fungalizing bone brute" }, "description": "This already horrific moving corpse covered in twisted bony growths has also grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_skeleton_brute", "default_faction": "fungus", @@ -222,7 +222,7 @@ { "type": "MONSTER", "id": "mon_skeleton_brute_fungus", - "name": { "str": "fungal skeletal brute" }, + "name": { "str": "fungal bone brute" }, "copy-from": "mon_skeleton_brute", "description": "Fungi bloom from the crevices in the twisted bone growths that cover this creature. Spores linger in the air around it.", "default_faction": "fungus", @@ -252,7 +252,7 @@ { "id": "mon_skeleton_hulk_fungalize", "type": "MONSTER", - "name": { "str": "fungal stalk skeletal hulk" }, + "name": { "str": "fungal stalk juggernaut" }, "description": "Layers of plates of bone rise high above, ending in a short stalk of gray fungus bursting from the enormous bulging skull.", "copy-from": "mon_skeleton_hulk", "default_faction": "fungus", @@ -491,7 +491,7 @@ { "id": "mon_zombie_runner_fungalize", "type": "MONSTER", - "name": { "str": "fungal stalk zombie runner" }, + "name": { "str": "fungal stalk runner" }, "description": "This recently-risen body has grown a short stalk of gray fungus bursting from the skull. This appears to slow it down in some way.", "copy-from": "mon_zombie_runner", "default_faction": "fungus", @@ -539,7 +539,7 @@ { "id": "mon_zombie_rot_fungalize", "type": "MONSTER", - "name": { "str": "decayed fungal stalk zombie" }, + "name": { "str": "fungal stalk rotter" }, "description": "This badly decayed corpse has grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_zombie_rot", "default_faction": "fungus", @@ -587,7 +587,7 @@ { "id": "mon_zombie_tough_fungalize", "type": "MONSTER", - "name": { "str": "tough fungal stalk zombie" }, + "name": { "str": "fungal stalk bulk" }, "description": "This muscular corpse has grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_zombie_tough", "default_faction": "fungus", @@ -730,7 +730,7 @@ { "id": "mon_zombie_crawler_fungalize", "type": "MONSTER", - "name": { "str": "crawling fungal stalk zombie" }, + "name": { "str": "fungal stalk crawler" }, "description": "This moving corpse with badly damaged legs has grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_zombie_crawler", "default_faction": "fungus", @@ -778,7 +778,7 @@ { "id": "mon_zombie_fat_fungalize", "type": "MONSTER", - "name": { "str": "fat fungal stalk zombie" }, + "name": { "str": "fungal stalk feeder" }, "description": "This heavy corpse has grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_zombie_fat", "default_faction": "fungus", @@ -826,7 +826,7 @@ { "id": "mon_beekeeper_fungalize", "type": "MONSTER", - "name": { "str": "scarred fungal stalk zombie" }, + "name": { "str": "fungalizing scarred zombie" }, "description": "This heavily scarred moving corpse has grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_beekeeper", "default_faction": "fungus", @@ -874,7 +874,7 @@ { "id": "mon_zombie_acidic_fungalize", "type": "MONSTER", - "name": { "str": "acidic fungal stalk zombie" }, + "name": { "str": "fungalizing acid zombie" }, "description": "This sickly looking moving corpse with prominent yellow veins has grown a short stalk of gray fungus bursting from the skull.", "copy-from": "mon_zombie_acidic", "default_faction": "fungus", From aa4c2c81b32414a3a9476e0fa6338da457b05962 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Wed, 11 Dec 2024 08:24:07 -0500 Subject: [PATCH 55/69] document monster name length --- doc/MONSTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/MONSTERS.md b/doc/MONSTERS.md index 2ebd973ae3312..6e46a007cce01 100644 --- a/doc/MONSTERS.md +++ b/doc/MONSTERS.md @@ -21,7 +21,7 @@ These properties are required for all monsters: Property | Description --- | --- -`name` | (string or object) Monster name, and optional plural name and translation context +`name` | (string or object) Monster name, and optional plural name and translation context. Three words maximum. `description` | (string) In-game description of the monster, in one or two sentences `hp` | (integer) Hit points. Also see [monster HP scaling in GAME_BALANCE.md](GAME_BALANCE.md#monster-hp-scaling) `volume` | (string) Volume of the creature's body, as an integer with metric units, ex. `"35 L"` or `"1500 ml"`. Used to calculate monster size, size influences melee hit chances on different-sized targets. From 37e57a41a9513a51b8dd91b8da28826ef26e89d8 Mon Sep 17 00:00:00 2001 From: LyleSY Date: Wed, 11 Dec 2024 08:26:04 -0500 Subject: [PATCH 56/69] Update dictionary.txt --- tools/spell_checker/dictionary.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/spell_checker/dictionary.txt b/tools/spell_checker/dictionary.txt index ae4d71f44128f..6a1c8cb8f9e49 100644 --- a/tools/spell_checker/dictionary.txt +++ b/tools/spell_checker/dictionary.txt @@ -2163,6 +2163,7 @@ Fuji fulleroclathrate fullscreen fumarolic +fungalizing fungaloid fungaloids fungideer From 88b2832b63d2caa54a369e9eb1397cddec238ba9 Mon Sep 17 00:00:00 2001 From: Maleclypse <54345792+Maleclypse@users.noreply.github.com> Date: Wed, 11 Dec 2024 08:44:31 -0600 Subject: [PATCH 57/69] Update data/mods/Xedra_Evolved/items/carnivore.json Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- data/mods/Xedra_Evolved/items/carnivore.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/mods/Xedra_Evolved/items/carnivore.json b/data/mods/Xedra_Evolved/items/carnivore.json index 11c1835f1f6c7..ed10863f7f016 100644 --- a/data/mods/Xedra_Evolved/items/carnivore.json +++ b/data/mods/Xedra_Evolved/items/carnivore.json @@ -156,7 +156,7 @@ "name": { "str": "carnivore stomach" }, "description": "The stomach of an carnivorous creature. It is surprisingly durable." }, - { + { "id": "small_carnivore_stomach", "copy-from": "stomach", "type": "COMESTIBLE", From b408dd34c00bae67b784704af13ee06d5bd2de30 Mon Sep 17 00:00:00 2001 From: strategictraveler Date: Sat, 7 Dec 2024 22:05:19 +0000 Subject: [PATCH 58/69] Update Gentoo dependencies --- doc/COMPILING/COMPILING.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/doc/COMPILING/COMPILING.md b/doc/COMPILING/COMPILING.md index 846d04d380764..ff9f5cfd303e3 100644 --- a/doc/COMPILING/COMPILING.md +++ b/doc/COMPILING/COMPILING.md @@ -167,12 +167,10 @@ The -j2 flag means it will compile with two parallel processes. It can be omitte If you want sound and graphics, make sure to emerge with the following: ```bash -USE="flac fluidsynth mad midi mod modplug mp3 playtools vorbis wav png" \ +USE="vorbis png" \ emerge -1va emerge media-libs/libsdl2 media-libs/sdl2-gfx media-libs/sdl2-image media-libs/sdl2-mixer media-libs/sdl2-ttf ``` -It may also be possible to get away with fewer dependencies, but this set has been tested. - Once the above libraries are installed, compile with: make -j$(nproc) TILES=1 SOUND=1 RELEASE=1 From e929afadc6c825cdfc9f08e58ca10d6eefeeec92 Mon Sep 17 00:00:00 2001 From: Standing-Storm <120433252+Standing-Storm@users.noreply.github.com> Date: Wed, 11 Dec 2024 14:00:29 -0600 Subject: [PATCH 59/69] Initial commit --- data/mods/MindOverMatter/mutations/temporary.json | 10 ++++++++++ .../mods/MindOverMatter/powers/clairsentience_eoc.json | 2 ++ 2 files changed, 12 insertions(+) diff --git a/data/mods/MindOverMatter/mutations/temporary.json b/data/mods/MindOverMatter/mutations/temporary.json index cc5e9deffa108..a322867151c3e 100644 --- a/data/mods/MindOverMatter/mutations/temporary.json +++ b/data/mods/MindOverMatter/mutations/temporary.json @@ -227,6 +227,16 @@ [ "fabrication", 6 ] ] }, + { + "type": "mutation", + "id": "CLAIR_ASTRAL_PROJECTION_APPEARANCE", + "name": { "str": "Astral Form", "//~": "NO_I18N" }, + "description": { "str": "You're a disembodied mind so you're all glowy and blue. Spooky!", "//~": "NO_I18N" }, + "points": 0, + "valid": false, + "player_display": false, + "override_look": { "id": "mon_hologram", "tile_category": "monster" } + }, { "type": "mutation", "id": "TELEKINETIC_LIFTER_1", diff --git a/data/mods/MindOverMatter/powers/clairsentience_eoc.json b/data/mods/MindOverMatter/powers/clairsentience_eoc.json index af625623e51f7..10cbc6084fbab 100644 --- a/data/mods/MindOverMatter/powers/clairsentience_eoc.json +++ b/data/mods/MindOverMatter/powers/clairsentience_eoc.json @@ -190,6 +190,7 @@ { "u_add_effect": "effect_clair_astral_projection", "duration": "PERMANENT" }, { "u_add_effect": "incorporeal", "duration": "PERMANENT" }, { "u_message": "As you meditate, you feel your spirit slipping free from your body.", "type": "good" }, + { "u_add_trait": "CLAIR_ASTRAL_PROJECTION_APPEARANCE" }, { "u_spawn_item": "body_astral_projection", "suppress_message": true }, { "u_spawn_item": "item_clair_astral_projection_cord", "suppress_message": true, "force_equip": true }, { "math": [ "u_spell_level('clair_astral_projection_return') = 0" ] } @@ -202,6 +203,7 @@ { "u_remove_item_with": "item_clair_astral_projection_cord" }, { "u_lose_effect": "effect_clair_astral_projection" }, { "u_lose_effect": "incorporeal" }, + { "u_lose_trait": "CLAIR_ASTRAL_PROJECTION_APPEARANCE" }, { "math": [ "u_spell_level('clair_astral_projection_passwall') = -1" ] }, { "math": [ "u_spell_level('clair_astral_projection_return') = -1" ] }, { From 8c952b07253196a6ce0ad791ce0e15ef4a7f24a2 Mon Sep 17 00:00:00 2001 From: Zhilkin Serg Date: Wed, 11 Dec 2024 23:06:19 +0300 Subject: [PATCH 60/69] Fix executable name for notiles targets --- msvc-full-features/Cataclysm-vcpkg-static.vcxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/msvc-full-features/Cataclysm-vcpkg-static.vcxproj b/msvc-full-features/Cataclysm-vcpkg-static.vcxproj index 2bded692dcdaf..3300a63d0f803 100644 --- a/msvc-full-features/Cataclysm-vcpkg-static.vcxproj +++ b/msvc-full-features/Cataclysm-vcpkg-static.vcxproj @@ -115,7 +115,7 @@ false - cataclysm-tiles + cataclysm-notiles false @@ -123,7 +123,7 @@ false - cataclysm-tiles + cataclysm-notiles false @@ -135,11 +135,11 @@ false - cataclysm-tiles + cataclysm-notiles false - cataclysm-tiles + cataclysm-notiles false @@ -151,11 +151,11 @@ false - cataclysm-tiles + cataclysm-notiles false - cataclysm-tiles + cataclysm-notiles From 3c595363e32db1f7ae4ec1e70593ebdfaab7a074 Mon Sep 17 00:00:00 2001 From: Karol1223 <68503002+Karol1223@users.noreply.github.com> Date: Wed, 11 Dec 2024 21:13:51 +0100 Subject: [PATCH 61/69] desk fan --- data/json/items/generic.json | 9 +++++---- data/json/uncraft/recipe_deconstruction.json | 6 +++--- data/mods/TEST_DATA/known_bad_density.json | 1 - 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/data/json/items/generic.json b/data/json/items/generic.json index 0afcebabe6959..922303b85f988 100644 --- a/data/json/items/generic.json +++ b/data/json/items/generic.json @@ -2142,16 +2142,17 @@ "name": { "str": "desk fan" }, "description": "A small fan, used to propel air around a room.", "color": "light_gray", - "price": "10 USD", + "price": "25 USD", "price_postapoc": "10 cent", "material": [ "aluminum", "plastic" ], - "flags": [ "WATER_BREAK" ], + "flags": [ "WATER_BREAK", "FRAGILE_MELEE" ], "ammo": [ "battery" ], "charges_per_use": 4, "use_action": [ { "type": "link_up", "cable_length": 3, "charge_rate": "35 W" } ], "charged_qualities": [ [ "WINNOW", 1 ] ], - "weight": "2857 g", - "volume": "1 L", + "weight": "1588 g", + "volume": "19265 ml", + "//": "Based on https://www.amazon.com/dp/B000U9WXEC, although the volume calculated from package dimensions has been multiplied by 0.5 because there really is not a reasonable way to calculate fan volume without the numbers going into extremes", "to_hit": { "grip": "none", "length": "short", "surface": "any", "balance": "clumsy" }, "melee_damage": { "bash": 4 } }, diff --git a/data/json/uncraft/recipe_deconstruction.json b/data/json/uncraft/recipe_deconstruction.json index 769b90b58e025..19bba557da2ef 100644 --- a/data/json/uncraft/recipe_deconstruction.json +++ b/data/json/uncraft/recipe_deconstruction.json @@ -2561,9 +2561,9 @@ "result": "fan", "type": "uncraft", "activity_level": "LIGHT_EXERCISE", - "time": "2 m", - "qualities": [ { "id": "SCREW", "level": 1 } ], - "components": [ [ [ "scrap_aluminum", 1 ] ], [ [ "plastic_chunk", 3 ] ], [ [ "motor_micro", 1 ] ], [ [ "cable", 2 ] ] ] + "time": "5 m", + "qualities": [ { "id": "SCREW", "level": 1 }, { "id": "SAW_M", "level": 1 } ], + "components": [ [ [ "scrap_aluminum", 10 ] ], [ [ "plastic_chunk", 15 ] ], [ [ "motor_micro", 1 ] ], [ [ "cable", 30 ] ] ] }, { "result": "fancy_sunglasses", diff --git a/data/mods/TEST_DATA/known_bad_density.json b/data/mods/TEST_DATA/known_bad_density.json index 91ecb0dddefd6..14696cf01656c 100644 --- a/data/mods/TEST_DATA/known_bad_density.json +++ b/data/mods/TEST_DATA/known_bad_density.json @@ -43,7 +43,6 @@ "vortex", "wasp_sting", "hotdogs_cooked", - "fan", "poppysyrup", "broken_lab_security_drone_BM2", "bot_lab_security_drone_BS", From 9866a698467da12c80a8acb1c344874041b086f4 Mon Sep 17 00:00:00 2001 From: Standing-Storm <120433252+Standing-Storm@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:07:51 -0600 Subject: [PATCH 62/69] Initial commit --- .../Magiclysm/itemgroups/death_drops.json | 122 ++++++++++++++++++ data/mods/Magiclysm/monsters/goblin.json | 86 +----------- 2 files changed, 127 insertions(+), 81 deletions(-) diff --git a/data/mods/Magiclysm/itemgroups/death_drops.json b/data/mods/Magiclysm/itemgroups/death_drops.json index 8d29adc804a9d..bb03402dd878c 100644 --- a/data/mods/Magiclysm/itemgroups/death_drops.json +++ b/data/mods/Magiclysm/itemgroups/death_drops.json @@ -244,6 +244,128 @@ } ] }, + { + "id": "goblin_warrior_death_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "feral_goblin_death_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "goblin_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "item": "cudgel", "prob": 95, "damage": [ 1, 4 ] } + ] + }, + { + "id": "goblin_slinger_death_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "feral_goblin_death_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "goblin_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "item": "sling", "prob": 95, "damage": [ 1, 4 ] } + ] + }, + { + "id": "goblin_chieftan_death_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "feral_goblin_death_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "goblin_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "goblin_chieftan_weapon_drops", "prob": 95, "damage": [ 1, 4 ] } + ] + }, + { + "id": "goblin_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "helmet_scrap_xs", "prob": 40, "damage": [ 1, 4 ] }, + { "item": "xs_legguard_scrap", "prob": 40, "damage": [ 1, 4 ] }, + { "item": "xs_boots_scrap", "prob": 40, "damage": [ 1, 4 ] }, + { "item": "xs_armguard_scrap", "prob": 40, "damage": [ 1, 4 ] }, + { "item": "xs_cuirass_scrap", "prob": 40, "damage": [ 1, 4 ] } + ] + }, + { + "id": "goblin_chieftan_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "group": "survivor_stabbing", "prob": 96, "damage": [ 1, 4 ] }, + { "item": "spear_steel_plus_one", "prob": 3, "damage": [ 1, 4 ] }, + { "item": "rune_biomancer_weapon", "prob": 1, "damage": [ 1, 4 ] } + ] + }, + { + "id": "goblin_bugbear_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "bugbear_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "bugbear_clothing_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "bugbear_weapon_drops", "prob": 95, "damage": [ 1, 4 ] } + ] + }, + { + "id": "goblin_bugbear_stalker_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "bugbear_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "bugbear_clothing_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "bugbear_stalker_weapon_drops", "prob": 95, "damage": [ 1, 4 ] } + ] + }, + { + "id": "bugbear_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "item": "survivor_machete", "prob": 98 }, { "item": "broadsword_plus_one", "prob": 2 } ] + }, + { + "id": "bugbear_stalker_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "group": "survivor_stabbing", "prob": 97 }, { "item": "spear_steel_plus_one", "prob": 3 } ] + }, + { + "id": "bugbear_clothing_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "loincloth_fur", "prob": 75 }, + { "item": "footrags_fur", "prob": 25 }, + { "item": "gloves_wraps_fur", "prob": 25 }, + { "item": "bellywrap_fur", "prob": 10 }, + { "item": "chestwrap_fur", "prob": 25 } + ] + }, + { + "id": "bugbear_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "xl_helmet_larmor", "prob": 20 }, + { "item": "xl_gauntlets_larmor", "prob": 20 }, + { "item": "xl_boots_larmor", "prob": 20 }, + { "item": "xl_armguard_larmor", "prob": 20 }, + { "item": "xl_armor_larmor_chest", "prob": 10 } + ] + }, + { + "id": "orc_warrior_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "bugbear_armor_drops", "prob": 96 }, + { "item": "loincloth_fur", "prob": 10 }, + { "item": "footrags_fur", "prob": 10 }, + { "item": "gloves_wraps_fur", "prob": 10 }, + { "item": "bellywrap_fur", "prob": 5 }, + { "item": "chestwrap_fur", "prob": 5 }, + { "group": "bugbear_stalker_drops", "prob": 95 } + ] + }, { "id": "mossling_drops", "type": "item_group", diff --git a/data/mods/Magiclysm/monsters/goblin.json b/data/mods/Magiclysm/monsters/goblin.json index 38bfa11d342c2..0cb7bb81aad0c 100644 --- a/data/mods/Magiclysm/monsters/goblin.json +++ b/data/mods/Magiclysm/monsters/goblin.json @@ -45,18 +45,7 @@ "no_dmg_msg_npc": "%1$s hits 's %2$s without penetrating their armor." } ], - "death_drops": { - "subtype": "collection", - "items": [ - { "group": "feral_goblin_death_drops", "prob": 100 }, - { "item": "helmet_scrap_xs", "prob": 40 }, - { "item": "xs_legguard_scrap", "prob": 40 }, - { "item": "xs_boots_scrap", "prob": 40 }, - { "item": "xs_armguard_scrap", "prob": 40 }, - { "item": "xs_cuirass_scrap", "prob": 40 }, - { "item": "cudgel", "prob": 95 } - ] - }, + "death_drops": "goblin_warrior_death_drops", "armor": { "bash": 12, "cut": 12, "bullet": 4 }, "zombify_into": "mon_zombie_goblin", "flags": [ "SEES", "HEARS", "HAS_MIND", "WARM", "BASHES", "PATH_AVOID_DANGER", "REVIVES", "GROUP_MORALE", "WIELDED_WEAPON" ] @@ -68,18 +57,7 @@ "description": "A goblin, but like something out of history. Over the dirty, tattered remnants of their street clothes, they're wearing improvised armor and carrying a sling with a pouch for extra stones. They look at you like a wolf seeing a particularly juicy hunk of lamb.", "copy-from": "mon_goblin_warrior", "melee_skill": 2, - "death_drops": { - "subtype": "collection", - "items": [ - { "group": "feral_goblin_death_drops", "prob": 100 }, - { "item": "helmet_scrap", "prob": 40 }, - { "item": "legguard_scrap", "prob": 40 }, - { "item": "boots_scrap", "prob": 40 }, - { "item": "armguard_scrap", "prob": 40 }, - { "item": "cuirass_scrap", "prob": 40 }, - { "item": "sling", "prob": 95 } - ] - }, + "death_drops": "goblin_slinger_death_drops", "starting_ammo": { "pebble": 30 }, "extend": { "special_attacks": [ @@ -129,25 +107,7 @@ "no_dmg_msg_npc": "%1$s hits 's %2$s without penetrating their armor." } ], - "death_drops": { - "subtype": "collection", - "items": [ - { "group": "feral_goblin_death_drops", "prob": 100 }, - { "item": "helmet_scrap", "prob": 40 }, - { "item": "legguard_scrap", "prob": 40 }, - { "item": "boots_scrap", "prob": 40 }, - { "item": "armguard_scrap", "prob": 40 }, - { "item": "cuirass_scrap", "prob": 40 }, - { - "distribution": [ - { "group": "survivor_stabbing", "prob": 96 }, - { "item": "spear_steel_plus_one", "prob": 3 }, - { "item": "rune_biomancer_weapon", "prob": 1 } - ], - "prob": 100 - } - ] - } + "death_drops": "goblin_chieftan_death_drops" }, { "type": "MONSTER", @@ -324,25 +284,7 @@ } ], "path_settings": { "avoid_traps": true, "avoid_sharp": true }, - "death_drops": { - "subtype": "collection", - "items": [ - { "item": "xl_helmet_larmor", "prob": 20 }, - { "item": "xl_gauntlets_larmor", "prob": 20 }, - { "item": "xl_boots_larmor", "prob": 20 }, - { "item": "xl_armguard_larmor", "prob": 20 }, - { "item": "xl_armor_larmor_chest", "prob": 10 }, - { "item": "loincloth_fur", "prob": 10 }, - { "item": "footrags_fur", "prob": 10 }, - { "item": "gloves_wraps_fur", "prob": 10 }, - { "item": "bellywrap_fur", "prob": 5 }, - { "item": "chestwrap_fur", "prob": 5 }, - { - "distribution": [ { "item": "survivor_machete", "prob": 98 }, { "item": "broadsword_plus_one", "prob": 2 } ], - "prob": 100 - } - ] - }, + "death_drops": "goblin_bugbear_death_drops", "armor": { "bash": 4, "cut": 12, "bullet": 8 }, "flags": [ "SEES", @@ -384,25 +326,7 @@ "no_dmg_msg_npc": "%1$s hits 's %2$s without penetrating their armor." } ], - "death_drops": { - "subtype": "collection", - "items": [ - { "item": "xl_helmet_larmor", "prob": 20 }, - { "item": "xl_gauntlets_larmor", "prob": 20 }, - { "item": "xl_boots_larmor", "prob": 20 }, - { "item": "xl_armguard_larmor", "prob": 20 }, - { "item": "xl_armor_larmor_chest", "prob": 10 }, - { "item": "loincloth_fur", "prob": 10 }, - { "item": "footrags_fur", "prob": 10 }, - { "item": "gloves_wraps_fur", "prob": 10 }, - { "item": "bellywrap_fur", "prob": 5 }, - { "item": "chestwrap_fur", "prob": 5 }, - { - "distribution": [ { "group": "survivor_stabbing", "prob": 97 }, { "item": "spear_steel_plus_one", "prob": 3 } ], - "prob": 100 - } - ] - }, + "death_drops": "goblin_bugbear_stalker_drops", "extend": { "flags": [ "CAMOUFLAGE", "SILENTMOVES" ] } } ] From 9981d11b9efcbb55303ab3b92cdb56354d5effe4 Mon Sep 17 00:00:00 2001 From: Standing-Storm <120433252+Standing-Storm@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:20:05 -0600 Subject: [PATCH 63/69] Add orcs --- .../Magiclysm/itemgroups/death_drops.json | 88 +++++++++++++++++-- data/mods/Magiclysm/monsters/orcs.json | 84 +----------------- 2 files changed, 84 insertions(+), 88 deletions(-) diff --git a/data/mods/Magiclysm/itemgroups/death_drops.json b/data/mods/Magiclysm/itemgroups/death_drops.json index bb03402dd878c..ebba5261b7e70 100644 --- a/data/mods/Magiclysm/itemgroups/death_drops.json +++ b/data/mods/Magiclysm/itemgroups/death_drops.json @@ -353,17 +353,89 @@ ] }, { - "id": "orc_warrior_drops", + "id": "orc_warrior_death_drops", "type": "item_group", "subtype": "collection", "entries": [ - { "group": "bugbear_armor_drops", "prob": 96 }, - { "item": "loincloth_fur", "prob": 10 }, - { "item": "footrags_fur", "prob": 10 }, - { "item": "gloves_wraps_fur", "prob": 10 }, - { "item": "bellywrap_fur", "prob": 5 }, - { "item": "chestwrap_fur", "prob": 5 }, - { "group": "bugbear_stalker_drops", "prob": 95 } + { "group": "orc_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "bugbear_clothing_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "orc_warrior_weapon_drops", "prob": 95, "damage": [ 1, 4 ] } + ] + }, + { + "id": "orc_archer_death_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "orc_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "bugbear_clothing_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "orc_archer_melee_weapon_drops", "prob": 50, "damage": [ 1, 4 ] }, + { "group": "orc_archer_ranged_weapon_drops", "prob": 50, "damage": [ 1, 4 ] } + ] + }, + { + "id": "orc_blood_warrior_death_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "orc_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "bugbear_clothing_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "orc_blood_warrior_weapon_drops", "prob": 95, "damage": [ 1, 4 ] } + ] + }, + { + "id": "orc_blood_mage_death_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "group": "orc_armor_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "bugbear_clothing_drops", "prob": 100, "damage": [ 1, 4 ] }, + { "group": "magic_plants_common", "prob": 10 }, + { "group": "magic_plants_uncommon", "prob": 1 } + ] + }, + { + "id": "orc_warrior_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "survivor_machete", "prob": 96 }, + { "item": "arming_sword_plus_one", "prob": 2 }, + { "item": "broadsword_plus_one", "prob": 2 } + ] + }, + { + "id": "orc_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "helmet_scrap", "prob": 20 }, + { "item": "armguard_scrap", "prob": 20 }, + { "item": "boots_scrap", "prob": 20 }, + { "item": "legguard_scrap", "prob": 20 }, + { "item": "cuirass_scrap", "prob": 10 } + ] + }, + { + "id": "orc_archer_melee_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "item": "sheath", "contents-item": "knife_combat", "prob": 100 } ] + }, + { + "id": "orc_archer_ranged_weapon_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ { "item": "longbow", "prob": 85 }, { "item": "quiver_large", "contents-group": "quiver_orc_archer", "prob": 50 } ] + }, + { + "id": "orc_blood_warrior_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "mace_pipe_large", "prob": 96 }, + { "item": "mace_plus_one", "prob": 2 }, + { "item": "warhammer_plus_one", "prob": 2 } ] }, { diff --git a/data/mods/Magiclysm/monsters/orcs.json b/data/mods/Magiclysm/monsters/orcs.json index 7f7772bada1f3..42e96804fa402 100644 --- a/data/mods/Magiclysm/monsters/orcs.json +++ b/data/mods/Magiclysm/monsters/orcs.json @@ -71,29 +71,7 @@ ], "path_settings": { "avoid_traps": true, "avoid_sharp": true }, "zombify_into": "mon_zorc", - "death_drops": { - "subtype": "collection", - "items": [ - { "item": "helmet_scrap", "prob": 20 }, - { "item": "legguard_scrap", "prob": 20 }, - { "item": "boots_scrap", "prob": 20 }, - { "item": "armguard_scrap", "prob": 20 }, - { "item": "cuirass_scrap", "prob": 10 }, - { "item": "loincloth_fur", "prob": 10 }, - { "item": "footrags_fur", "prob": 10 }, - { "item": "gloves_wraps_fur", "prob": 10 }, - { "item": "bellywrap_fur", "prob": 5 }, - { "item": "chestwrap_fur", "prob": 5 }, - { - "distribution": [ - { "item": "survivor_machete", "prob": 96 }, - { "item": "arming_sword_plus_one", "prob": 2 }, - { "item": "broadsword_plus_one", "prob": 2 } - ], - "prob": 100 - } - ] - }, + "death_drops": "orc_warrior_death_drops", "flags": [ "SEES", "HEARS", "HAS_MIND", "WARM", "BASHES", "PATH_AVOID_DANGER", "SWARMS", "GROUP_MORALE", "WIELDED_WEAPON" ] }, { @@ -103,24 +81,7 @@ "description": "Like a goblin, but stretched and exaggerated until they're as tall as a human but much more heavily muscled, wearing improvised armor and carrying a bow. They smile silently, baring a set of sharp teeth, as they aim at you.", "copy-from": "mon_orc_warrior", "melee_skill": 2, - "death_drops": { - "subtype": "collection", - "items": [ - { "item": "helmet_scrap", "prob": 40 }, - { "item": "legguard_scrap", "prob": 40 }, - { "item": "boots_scrap", "prob": 40 }, - { "item": "armguard_scrap", "prob": 40 }, - { "item": "cuirass_scrap", "prob": 40 }, - { "item": "loincloth_fur", "prob": 10 }, - { "item": "footrags_fur", "prob": 10 }, - { "item": "gloves_wraps_fur", "prob": 10 }, - { "item": "bellywrap_fur", "prob": 5 }, - { "item": "chestwrap_fur", "prob": 5 }, - { "item": "longbow", "prob": 100 }, - { "item": "sheath", "contents-item": "knife_combat", "prob": 50 }, - { "item": "quiver_large", "contents-group": "quiver_orc_archer", "prob": 100 } - ] - }, + "death_drops": "orc_archer_death_drops", "starting_ammo": { "arrow_wood_heavy": 60 }, "extend": { "special_attacks": [ @@ -175,29 +136,7 @@ "no_dmg_msg_npc": "%1$s hits 's %2$s without penetrating their armor." } ], - "death_drops": { - "subtype": "collection", - "items": [ - { "item": "helmet_scrap", "prob": 20 }, - { "item": "legguard_scrap", "prob": 10 }, - { "item": "boots_scrap", "prob": 10 }, - { "item": "armguard_scrap", "prob": 30 }, - { "item": "cuirass_scrap", "prob": 20 }, - { "item": "loincloth_fur", "prob": 10 }, - { "item": "footrags_fur", "prob": 10 }, - { "item": "gloves_wraps_fur", "prob": 10 }, - { "item": "bellywrap_fur", "prob": 5 }, - { "item": "chestwrap_fur", "prob": 5 }, - { - "distribution": [ - { "item": "mace_pipe_large", "prob": 96 }, - { "item": "mace_plus_one", "prob": 2 }, - { "item": "warhammer_plus_one", "prob": 2 } - ], - "prob": 100 - } - ] - } + "death_drops": "orc_blood_warrior_death_drops" }, { "id": "mon_orc_mage_blood", @@ -240,21 +179,6 @@ "monster_message": "%1$s makes a frenzied cry and as they point, %3$s is surrounded by a red glow." } ], - "death_drops": { - "subtype": "collection", - "items": [ - { "item": "helmet_scrap", "prob": 20 }, - { "item": "legguard_scrap", "prob": 10 }, - { "item": "boots_scrap", "prob": 10 }, - { "item": "cuirass_scrap", "prob": 20 }, - { "item": "loincloth_fur", "prob": 10 }, - { "item": "footrags_fur", "prob": 10 }, - { "item": "gloves_wraps_fur", "prob": 10 }, - { "item": "bellywrap_fur", "prob": 5 }, - { "item": "chestwrap_fur", "prob": 5 }, - { "group": "magic_plants_common", "prob": 10 }, - { "group": "magic_plants_uncommon", "prob": 1 } - ] - } + "death_drops": "orc_blood_mage_death_drops" } ] From 613fa375e1c80d712723f3a700bf79bf4837e09a Mon Sep 17 00:00:00 2001 From: Standing-Storm <120433252+Standing-Storm@users.noreply.github.com> Date: Wed, 11 Dec 2024 15:37:38 -0600 Subject: [PATCH 64/69] Add Innawood integration --- .../Magiclysm/itemgroups/death_drops.json | 1 + .../innawood/orc_goblin_lootgroups.json | 93 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json diff --git a/data/mods/Magiclysm/itemgroups/death_drops.json b/data/mods/Magiclysm/itemgroups/death_drops.json index ebba5261b7e70..9a0307a0282f1 100644 --- a/data/mods/Magiclysm/itemgroups/death_drops.json +++ b/data/mods/Magiclysm/itemgroups/death_drops.json @@ -349,6 +349,7 @@ { "item": "xl_gauntlets_larmor", "prob": 20 }, { "item": "xl_boots_larmor", "prob": 20 }, { "item": "xl_armguard_larmor", "prob": 20 }, + { "item": "xl_legguard_larmor", "prob": 20 }, { "item": "xl_armor_larmor_chest", "prob": 10 } ] }, diff --git a/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json b/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json new file mode 100644 index 0000000000000..c755853fbceb5 --- /dev/null +++ b/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json @@ -0,0 +1,93 @@ +[ + { + "id": "goblin_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "helmet_larmor_xs", "prob": 40 }, + { "item": "xs_legguard_larmor", "prob": 40 }, + { "item": "xs_boots_larmor", "prob": 40 }, + { "item": "xs_armguard_larmor", "prob": 40 }, + { "item": "xs_gauntlets_larmor", "prob": 40 }, + { "item": "armor_larmor_chest_xs", "prob": 40 } + ] + }, + { + "id": "goblin_chieftan_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "group": "survivor_stabbing", "prob": 99 }, { "item": "rune_biomancer_weapon", "prob": 1 } ] + }, + { + "id": "bugbear_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "item": "survivor_cutting", "prob": 100 } ] + }, + { + "id": "bugbear_stalker_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "group": "survivor_stabbing", "prob": 100 } ] + }, + { + "id": "bugbear_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "xl_helmet_larmor", "prob": 20 }, + { "item": "xl_gauntlets_larmor", "prob": 20 }, + { "item": "xl_boots_larmor", "prob": 20 }, + { "item": "xl_armguard_larmor", "prob": 20 }, + { "item": "xl_legguard_larmor", "prob": 20 }, + { "item": "xl_armor_larmor_chest", "prob": 10 } + ] + }, + { + "id": "orc_warrior_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "survivor_machete", "prob": 96 }, + { "item": "arming_sword_plus_one", "prob": 2 }, + { "item": "broadsword_plus_one", "prob": 2 } + ] + }, + { + "id": "orc_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "helmet_larmor", "prob": 40 }, + { "item": "legguard_larmor", "prob": 40 }, + { "item": "boots_larmor", "prob": 40 }, + { "item": "armguard_larmor", "prob": 40 }, + { "item": "gauntlets_larmor", "prob": 40 }, + { "item": "armor_larmor_chest", "prob": 40 } + ] + }, + { + "id": "orc_archer_melee_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "item": "sheath", "contents-item": "primitive_knife", "prob": 100 } ] + }, + { + "id": "orc_archer_ranged_weapon_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ { "item": "longbow", "prob": 85 }, { "item": "quiver_large", "contents-group": "quiver_orc_archer", "prob": 50 } ] + }, + { + "id": "orc_blood_warrior_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "item": "lizardfolk_club", "prob": 100 } ] + }, + { + "type": "item_group", + "subtype": "collection", + "id": "quiver_orc_archer", + "entries": [ { "item": "arrow_heavy_fire_hardened_fletched", "count": [ 1, 6 ], "charges": [ 1, 10 ] } ] + } +] From b2d480904cfa5a8c48ddbafef3f79ca390e9ab40 Mon Sep 17 00:00:00 2001 From: Zhilkin Serg Date: Wed, 11 Dec 2024 19:55:04 +0300 Subject: [PATCH 65/69] Migrate ma details menu to imgui --- data/raw/keybindings.json | 28 ++++ src/martialarts.cpp | 323 +++++++++++++++++++++++++------------- 2 files changed, 240 insertions(+), 111 deletions(-) diff --git a/data/raw/keybindings.json b/data/raw/keybindings.json index 4d005f545b637..c917de2aa789d 100644 --- a/data/raw/keybindings.json +++ b/data/raw/keybindings.json @@ -4875,6 +4875,34 @@ "name": "Toggle NPC group", "bindings": [ { "input_method": "keyboard_any", "key": "n" } ] }, + { + "type": "keybinding", + "id": "TOGGLE_GENERAL_INFO_GROUP", + "category": "MA_DETAILS_UI", + "name": "Toggle general info group", + "bindings": [ { "input_method": "keyboard_any", "key": "g" } ] + }, + { + "type": "keybinding", + "id": "TOGGLE_BUFFS_GROUP", + "category": "MA_DETAILS_UI", + "name": "Toggle buffs group", + "bindings": [ { "input_method": "keyboard_any", "key": "b" } ] + }, + { + "type": "keybinding", + "id": "TOGGLE_TECHNIQUES_GROUP", + "category": "MA_DETAILS_UI", + "name": "Toggle techniques group", + "bindings": [ { "input_method": "keyboard_any", "key": "t" } ] + }, + { + "type": "keybinding", + "id": "TOGGLE_WEAPONS_GROUP", + "category": "MA_DETAILS_UI", + "name": "Toggle weapons group", + "bindings": [ { "input_method": "keyboard_any", "key": "w" } ] + }, { "type": "keybinding", "id": "HELP_KEYBINDINGS", diff --git a/src/martialarts.cpp b/src/martialarts.cpp index 08f0e89a9e8e7..32db72ba66598 100644 --- a/src/martialarts.cpp +++ b/src/martialarts.cpp @@ -2182,79 +2182,141 @@ std::string ma_technique::get_description() const return dump; } -bool ma_style_callback::key( const input_context &ctxt, const input_event &event, int entnum, - uilist * ) +class ma_details_ui { - const std::string &action = ctxt.input_to_action( event ); - if( action != "SHOW_DESCRIPTION" ) { - return false; - } - matype_id style_selected; - const size_t index = entnum; - if( index >= offset && index - offset < styles.size() ) { - style_selected = styles[index - offset]; + friend class ma_details_ui_impl; + public: + void draw_ma_details_ui( const matype_id &style_selected ); +}; + +class ma_details_ui_impl : public cataimgui::window +{ + public: + std::string last_action; + explicit ma_details_ui_impl( const matype_id &style_selected ) : cataimgui::window( + string_format( _( "Martial art style details - %s" ), + style_selected.obj().name.translated().c_str() ), + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoNav ) { + ma_style = style_selected; + }; + void init_data(); + + private: + void draw_ma_details_text() const; + + size_t window_width = ImGui::GetMainViewport()->Size.x * 8 / 9; + size_t window_height = ImGui::GetMainViewport()->Size.y * 8 / 9; + + bool general_info_group_collapsed = false; + bool buffs_group_collapsed = false; + bool techniques_group_collapsed = false; + bool weapons_group_collapsed = false; + + matype_id ma_style; + std::vector general_info_text; + std::map buffs_text; + std::map techniques_text; + std::map weapons_text; + int buffs_total = 0; + int weapons_total = 0; + + protected: + void draw_controls() override; +}; + +void ma_details_ui::draw_ma_details_ui( const matype_id &style_selected ) +{ + input_context ctxt( "MA_DETAILS_UI" ); + ma_details_ui_impl p_impl( style_selected ); + + p_impl.init_data(); + + ctxt.register_navigate_ui_list(); + ctxt.register_leftright(); + ctxt.register_action( "TOGGLE_GENERAL_INFO_GROUP" ); + ctxt.register_action( "TOGGLE_BUFFS_GROUP" ); + ctxt.register_action( "TOGGLE_TECHNIQUES_GROUP" ); + ctxt.register_action( "TOGGLE_WEAPONS_GROUP" ); + ctxt.register_action( "SELECT" ); + ctxt.register_action( "MOUSE_MOVE" ); + ctxt.register_action( "HELP_KEYBINDINGS" ); + ctxt.register_action( "QUIT" ); + // Smooths out our handling, makes tabs load immediately after input instead of waiting for next. + ctxt.set_timeout( 10 ); + + while( true ) { + ui_manager::redraw_invalidated(); + + p_impl.last_action = ctxt.handle_input(); + + if( p_impl.last_action == "QUIT" || !p_impl.get_is_open() ) { + break; + } } - if( !style_selected.str().empty() ) { - const martialart &ma = style_selected.obj(); +} + +void ma_details_ui_impl::init_data() +{ + general_info_text.clear(); + buffs_text.clear(); + techniques_text.clear(); + weapons_text.clear(); + + buffs_total = 0; + weapons_total = 0; - std::string buffer; + if( !ma_style.str().empty() ) { + + const martialart &ma = ma_style.obj(); if( ma.force_unarmed ) { - buffer += _( "This style forces you to use unarmed strikes, even if wielding a weapon." ); - buffer += "\n"; + general_info_text.emplace_back( + _( "This style forces you to use unarmed strikes, even if wielding a weapon." ) ); } else if( ma.allow_all_weapons ) { - buffer += _( "This style can be used with all weapons." ); - buffer += "\n"; + general_info_text.emplace_back( _( "This style can be used with all weapons." ) ); } else if( ma.strictly_melee ) { - buffer += _( "This is an armed combat style." ); - buffer += "\n"; + general_info_text.emplace_back( _( "This is an armed combat style." ) ); } - buffer += "--\n"; - if( ma.arm_block_with_bio_armor_arms || ma.arm_block != 99 || - ma.leg_block_with_bio_armor_legs || ma.leg_block != 99 || + ma.leg_block_with_bio_armor_legs || ma.leg_block != 99 || ma.nonstandard_block != 99 ) { Character &u = get_player_character(); - int unarmed_skill = u.get_skill_level( skill_unarmed ); + int unarmed_skill = u.get_skill_level( skill_unarmed ); if( u.has_active_bionic( bio_cqb ) ) { unarmed_skill = BIO_CQB_LEVEL; } if( ma.arm_block_with_bio_armor_arms ) { - buffer += _( "You can arm block by installing the Arms Alloy Plating CBM" ); - buffer += "\n"; + general_info_text.emplace_back( + _( "You can arm block by installing the Arms Alloy Plating CBM" ) ); } else if( ma.arm_block != 99 ) { - buffer += string_format( - _( "You can arm block at unarmed combat: %s/%s" ), - unarmed_skill, ma.arm_block ) + "\n"; + general_info_text.emplace_back( string_format( + _( "You can arm block at unarmed combat: %s/%s" ), + unarmed_skill, ma.arm_block ) ); } if( ma.leg_block_with_bio_armor_legs ) { - buffer += _( "You can leg block by installing the Legs Alloy Plating CBM" ); - buffer += "\n"; + general_info_text.emplace_back( + _( "You can leg block by installing the Legs Alloy Plating CBM" ) ); } else if( ma.leg_block != 99 ) { - buffer += string_format( - _( "You can leg block at unarmed combat: %s/%s" ), - unarmed_skill, ma.leg_block ); - buffer += "\n"; - } - if( ma.nonstandard_block != 99 ) { - buffer += string_format( - _( "You can block with mutated limbs at unarmed combat: %s/%s" ), - unarmed_skill, ma.nonstandard_block ); - buffer += "\n"; + general_info_text.emplace_back( string_format( + _( "You can leg block at unarmed combat: %s/%s" ), + unarmed_skill, ma.leg_block ) ); + if( ma.nonstandard_block != 99 ) { + general_info_text.emplace_back( string_format( + _( "You can block with mutated limbs at unarmed combat: %s/%s" ), + unarmed_skill, ma.nonstandard_block ) ); + } } - buffer += "--\n"; } auto buff_desc = [&]( const std::string & title, const std::vector &buffs, bool passive = false ) { if( !buffs.empty() ) { - buffer += string_format( _( "
%s buffs:
" ), title ); for( const auto &buff : buffs ) { - buffer += "\n" + buff->get_description( passive ); + buffs_total++; + buffs_text[ title ] = buff->get_description( passive ); } - buffer += "--\n"; } }; @@ -2271,9 +2333,7 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event buff_desc( _( "Get hit" ), ma.ongethit_buffs ); for( const auto &tech : ma.techniques ) { - buffer += string_format( _( "
Technique:
%s " ), - tech.obj().name ) + "\n"; - buffer += tech.obj().get_description() + "--\n"; + techniques_text[ tech.obj().name.translated() ] = tech.obj().get_description(); } // Copy set to vector for sorting @@ -2281,7 +2341,7 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event std::copy( ma.weapons.begin(), ma.weapons.end(), std::back_inserter( valid_ma_weapons ) ); for( const itype *itp : item_controller->all() ) { const itype_id &weap_id = itp->get_id(); - if( ma.has_weapon( weap_id ) ) { + if( ma.has_weapon( weap_id ) ) { valid_ma_weapons.emplace_back( weap_id ); } } @@ -2314,9 +2374,9 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event // Weapons that are uncategorized or not in the martial art's weapon categories weaps_by_cat[weapon_category_OTHER_INVALID_WEAP_CAT].push_back( wname ); } + weapons_total++; } - buffer += std::string( "" ) + _( "Weapons" ) + std::string( "" ) + "\n"; bool has_other_cat = false; for( auto &weaps : weaps_by_cat ) { if( weaps.first == weapon_category_OTHER_INVALID_WEAP_CAT ) { @@ -2333,83 +2393,124 @@ bool ma_style_callback::key( const input_context &ctxt, const input_event &event w_cat = weaps.first.str() + " - MISSING JSON DEFINITION"; } - buffer += std::string( "
" ) + w_cat + std::string( ":
" ); - buffer += enumerate_as_string( weaps.second ) + "\n"; + weapons_text.emplace( w_cat, enumerate_as_string( weaps.second ) ); } if( has_other_cat ) { std::vector &weaps = weaps_by_cat[weapon_category_OTHER_INVALID_WEAP_CAT]; weaps.erase( std::unique( weaps.begin(), weaps.end() ), weaps.end() ); - buffer += std::string( "
" ) + _( "OTHER" ) + std::string( ":
" ); - buffer += enumerate_as_string( weaps ) + "\n"; + weapons_text.emplace( _( "OTHER" ), enumerate_as_string( weaps ) ); } - buffer += "--\n"; } + } +} - catacurses::window w; +void ma_details_ui_impl::draw_ma_details_text() const +{ + // TODO: Need to make proper width calculations + const float window_width_in_chars = window_width * 0.4; - const std::string text = replace_colors( buffer ); - int width = 0; - int height = 0; - int iLines = 0; - int selected = 0; + if( !general_info_text.empty() && + ImGui::CollapsingHeader( _( "General info" ), + general_info_group_collapsed ? ImGuiTreeNodeFlags_None : ImGuiTreeNodeFlags_DefaultOpen ) ) { + for( const auto &entry : general_info_text ) { + cataimgui::draw_colored_text( entry, window_width_in_chars ); + ImGui::NewLine(); + } + } - ui_adaptor ui; - ui.on_screen_resize( [&]( ui_adaptor & ui ) { - w = catacurses::newwin( TERMY * 0.9, FULL_SCREEN_WIDTH, - point( TERMX - FULL_SCREEN_WIDTH, TERMY * 0.1 ) / 2 ); + if( !buffs_text.empty() && + ImGui::CollapsingHeader( string_format( _( "Buffs (%d in %d categories)" ), + buffs_total, buffs_text.size() ).c_str(), + buffs_group_collapsed ? ImGuiTreeNodeFlags_None : ImGuiTreeNodeFlags_DefaultOpen ) ) { + for( const auto &entry : buffs_text ) { + cataimgui::draw_colored_text( string_format( _( "
%s buffs:
" ), entry.first ) ); + ImGui::NewLine(); + cataimgui::draw_colored_text( entry.second, window_width_in_chars ); + ImGui::Separator(); + } + } - width = catacurses::getmaxx( w ) - 4; - height = catacurses::getmaxy( w ) - 2; + if( !techniques_text.empty() && + ImGui::CollapsingHeader( string_format( _( "Techniques (%d)" ), techniques_text.size() ).c_str(), + techniques_group_collapsed ? ImGuiTreeNodeFlags_None : ImGuiTreeNodeFlags_DefaultOpen ) ) { + for( const auto &entry : techniques_text ) { + cataimgui::draw_colored_text( string_format( _( "
Technique:
%s" ), + entry.first ) ); + ImGui::NewLine(); + cataimgui::draw_colored_text( entry.second, window_width_in_chars ); + ImGui::Separator(); + } + } - const auto vFolded = foldstring( text, width ); - iLines = vFolded.size(); + if( !weapons_text.empty() && + ImGui::CollapsingHeader( string_format( _( "Weapons (%d in %d categories)" ), + weapons_total, weapons_text.size() ).c_str(), + weapons_group_collapsed ? ImGuiTreeNodeFlags_None : ImGuiTreeNodeFlags_DefaultOpen ) ) { + for( const auto &entry : weapons_text ) { + cataimgui::draw_colored_text( string_format( _( "
%s
" ), entry.first ) ); + ImGui::NewLine(); + cataimgui::draw_colored_text( entry.second, window_width_in_chars ); + ImGui::Separator(); + } + } +} - if( iLines < height ) { - selected = 0; - } else if( selected >= iLines - height ) { - selected = iLines - height; - } +void ma_details_ui_impl::draw_controls() +{ + ImGui::SetWindowSize( ImVec2( window_width, window_height ), ImGuiCond_Once ); - ui.position_from_window( w ); - } ); - ui.mark_resize(); - - scrollbar sb; - - input_context ctxt; - sb.set_draggable( ctxt ); - ctxt.register_navigate_ui_list(); - ctxt.register_action( "QUIT" ); - ctxt.register_action( "HELP_KEYBINDINGS" ); - - ui.on_redraw( [&]( const ui_adaptor & ) { - werase( w ); - fold_and_print_from( w, point( 2, 1 ), width, selected, c_light_gray, text ); - draw_border( w, BORDER_COLOR, string_format( _( " Style: %s " ), ma.name ) ); - sb.offset_x( 0 ) - .offset_y( 1 ) - .content_size( iLines ) - .viewport_pos( selected ) - .viewport_size( height ) - .slot_color( BORDER_COLOR ) - .scroll_to_last( false ) - .apply( w ); - wnoutrefresh( w ); - } ); + if( last_action == "QUIT" ) { + return; + } else if( last_action == "TOGGLE_GENERAL_INFO_GROUP" ) { + general_info_group_collapsed = !general_info_group_collapsed; + } else if( last_action == "TOGGLE_BUFFS_GROUP" ) { + buffs_group_collapsed = !buffs_group_collapsed; + } else if( last_action == "TOGGLE_TECHNIQUES_GROUP" ) { + techniques_group_collapsed = !techniques_group_collapsed; + } else if( last_action == "TOGGLE_WEAPONS_GROUP" ) { + weapons_group_collapsed = !weapons_group_collapsed; + } else if( last_action == "UP" ) { + ImGui::SetScrollY( ImGui::GetScrollY() - ImGui::GetTextLineHeightWithSpacing() ); + } else if( last_action == "DOWN" ) { + ImGui::SetScrollY( ImGui::GetScrollY() + ImGui::GetTextLineHeightWithSpacing() ); + } else if( last_action == "LEFT" ) { + ImGui::SetScrollX( ImGui::GetScrollX() - ImGui::CalcTextSize( "x" ).x ); + } else if( last_action == "RIGHT" ) { + ImGui::SetScrollX( ImGui::GetScrollX() + ImGui::CalcTextSize( "x" ).x ); + } else if( last_action == "PAGE_UP" ) { + ImGui::SetScrollY( ImGui::GetScrollY() - window_height ); + } else if( last_action == "PAGE_DOWN" ) { + ImGui::SetScrollY( ImGui::GetScrollY() + window_height ); + } else if( last_action == "HOME" ) { + ImGui::SetScrollY( 0 ); + } else if( last_action == "END" ) { + ImGui::SetScrollY( ImGui::GetScrollMaxY() ); + } + + draw_ma_details_text(); +} + +static void show_ma_details_ui( const matype_id &style_selected ) +{ + ma_details_ui new_instance; + new_instance.draw_ma_details_ui( style_selected ); +} - do { - ui_manager::redraw(); - const size_t scroll_lines = catacurses::getmaxy( w ) - 3; - std::string action = ctxt.handle_input(); +bool ma_style_callback::key( const input_context &ctxt, const input_event &event, int entnum, + uilist * ) +{ + const std::string &action = ctxt.input_to_action( event ); + if( entnum == 0 || action != "SHOW_DESCRIPTION" ) { + return false; + } - if( action == "QUIT" ) { - break; - } else if( sb.handle_dragging( action, ctxt.get_coordinates_text( catacurses::stdscr ), - selected ) - || navigate_ui_list( action, selected, scroll_lines, iLines - height + 1, false ) ) { - // NO FURTHER ACTION REQUIRED - } - } while( true ); + matype_id style_selected; + const size_t index = entnum; + if( index >= offset && index - offset < styles.size() ) { + style_selected = styles[index - offset]; } + + show_ma_details_ui( style_selected ); + return true; } From 5cbe014f7a76755dd7a5a8e8c3c54fbde48edaa0 Mon Sep 17 00:00:00 2001 From: Brambor Date: Fri, 6 Dec 2024 15:32:14 +0100 Subject: [PATCH 66/69] lcmatch instead of wildcard_match for (by)product filter `r:` --- src/crafting_gui.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/crafting_gui.cpp b/src/crafting_gui.cpp index 0a6f4fbecfd45..c6049894b9731 100644 --- a/src/crafting_gui.cpp +++ b/src/crafting_gui.cpp @@ -1043,7 +1043,7 @@ static recipe_subset filter_recipes( const recipe_subset &available_recipes, case 'r': { recipe_subset result; for( const itype *e : item_controller->all() ) { - if( wildcard_match( e->nname( 1 ), qry_filter_str.substr( 2 ) ) ) { + if( lcmatch( e->nname( 1 ), qry_filter_str.substr( 2 ) ) ) { result.include( recipe_subset( available_recipes, available_recipes.recipes_that_produce( e->get_id() ) ) ); } @@ -1093,7 +1093,7 @@ static const std::vector prefixes = { { 'm', to_translation( "yes" ), to_translation( "recipe memorized (or not)" ) }, { 'P', to_translation( "Blacksmithing" ), to_translation( "proficiency used to craft" ) }, { 'l', to_translation( "5" ), to_translation( "difficulty of the recipe as a number or range" ) }, - { 'r', to_translation( "buttermilk" ), to_translation( "recipe's (by)products; use * as wildcard" ) }, + { 'r', to_translation( "buttermilk" ), to_translation( "recipe's (by)products" ) }, { 'L', to_translation( "122 cm" ), to_translation( "result can contain item of length" ) }, { 'V', to_translation( "450 ml" ), to_translation( "result can contain item of volume" ) }, { 'M', to_translation( "250 kg" ), to_translation( "result can contain item of mass" ) }, From 74b7dba2dd0ea4d5273f971d53c0692a401b9657 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Wed, 11 Dec 2024 20:47:20 -0600 Subject: [PATCH 67/69] Fixes --- .../Magiclysm/itemgroups/death_drops.json | 4 +- .../innawood/orc_goblin_lootgroups.json | 202 ++++++++++-------- data/mods/Magiclysm/monsters/goblin.json | 2 +- 3 files changed, 112 insertions(+), 96 deletions(-) diff --git a/data/mods/Magiclysm/itemgroups/death_drops.json b/data/mods/Magiclysm/itemgroups/death_drops.json index 9a0307a0282f1..f58777b089ba8 100644 --- a/data/mods/Magiclysm/itemgroups/death_drops.json +++ b/data/mods/Magiclysm/itemgroups/death_drops.json @@ -297,7 +297,7 @@ ] }, { - "id": "goblin_bugbear_drops", + "id": "goblin_bugbear_death_drops", "type": "item_group", "subtype": "collection", "entries": [ @@ -307,7 +307,7 @@ ] }, { - "id": "goblin_bugbear_stalker_drops", + "id": "goblin_bugbear_stalker_death_drops", "type": "item_group", "subtype": "collection", "entries": [ diff --git a/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json b/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json index c755853fbceb5..e378aaa341908 100644 --- a/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json +++ b/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json @@ -1,93 +1,109 @@ -[ - { - "id": "goblin_armor_drops", - "type": "item_group", - "subtype": "collection", - "entries": [ - { "item": "helmet_larmor_xs", "prob": 40 }, - { "item": "xs_legguard_larmor", "prob": 40 }, - { "item": "xs_boots_larmor", "prob": 40 }, - { "item": "xs_armguard_larmor", "prob": 40 }, - { "item": "xs_gauntlets_larmor", "prob": 40 }, - { "item": "armor_larmor_chest_xs", "prob": 40 } - ] - }, - { - "id": "goblin_chieftan_weapon_drops", - "type": "item_group", - "subtype": "distribution", - "entries": [ { "group": "survivor_stabbing", "prob": 99 }, { "item": "rune_biomancer_weapon", "prob": 1 } ] - }, - { - "id": "bugbear_weapon_drops", - "type": "item_group", - "subtype": "distribution", - "entries": [ { "item": "survivor_cutting", "prob": 100 } ] - }, - { - "id": "bugbear_stalker_weapon_drops", - "type": "item_group", - "subtype": "distribution", - "entries": [ { "group": "survivor_stabbing", "prob": 100 } ] - }, - { - "id": "bugbear_armor_drops", - "type": "item_group", - "subtype": "collection", - "entries": [ - { "item": "xl_helmet_larmor", "prob": 20 }, - { "item": "xl_gauntlets_larmor", "prob": 20 }, - { "item": "xl_boots_larmor", "prob": 20 }, - { "item": "xl_armguard_larmor", "prob": 20 }, - { "item": "xl_legguard_larmor", "prob": 20 }, - { "item": "xl_armor_larmor_chest", "prob": 10 } - ] - }, - { - "id": "orc_warrior_weapon_drops", - "type": "item_group", - "subtype": "distribution", - "entries": [ - { "item": "survivor_machete", "prob": 96 }, - { "item": "arming_sword_plus_one", "prob": 2 }, - { "item": "broadsword_plus_one", "prob": 2 } - ] - }, - { - "id": "orc_armor_drops", - "type": "item_group", - "subtype": "collection", - "entries": [ - { "item": "helmet_larmor", "prob": 40 }, - { "item": "legguard_larmor", "prob": 40 }, - { "item": "boots_larmor", "prob": 40 }, - { "item": "armguard_larmor", "prob": 40 }, - { "item": "gauntlets_larmor", "prob": 40 }, - { "item": "armor_larmor_chest", "prob": 40 } - ] - }, - { - "id": "orc_archer_melee_weapon_drops", - "type": "item_group", - "subtype": "distribution", - "entries": [ { "item": "sheath", "contents-item": "primitive_knife", "prob": 100 } ] - }, - { - "id": "orc_archer_ranged_weapon_drops", - "type": "item_group", - "subtype": "collection", - "entries": [ { "item": "longbow", "prob": 85 }, { "item": "quiver_large", "contents-group": "quiver_orc_archer", "prob": 50 } ] - }, - { - "id": "orc_blood_warrior_weapon_drops", - "type": "item_group", - "subtype": "distribution", - "entries": [ { "item": "lizardfolk_club", "prob": 100 } ] - }, - { - "type": "item_group", - "subtype": "collection", - "id": "quiver_orc_archer", - "entries": [ { "item": "arrow_heavy_fire_hardened_fletched", "count": [ 1, 6 ], "charges": [ 1, 10 ] } ] - } -] +[ + { + "type": "item_group", + "subtype": "collection", + "id": "feral_goblin_death_drops", + "entries": [ + { "group": "shoes_unisex", "prob": 40, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, + { "group": "npc_hat", "prob": 10, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, + { "group": "male_underwear_bottom", "prob": 100, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, + { "group": "female_underwear_top", "prob": 100, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, + { "item": "chestwrap_leather", "prob": 20, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, + { "group": "pants_male", "prob": 75, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, + { "group": "npc_coat", "prob": 2, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, + { "group": "npc_gloves", "prob": 50, "damage": [ 1, 4 ] }, + { "item": "wicker_backpack", "prob": 1, "damage": [ 1, 4 ] } + ] + }, + { + "id": "goblin_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "helmet_larmor_xs", "prob": 40 }, + { "item": "xs_legguard_larmor", "prob": 40 }, + { "item": "xs_boots_larmor", "prob": 40 }, + { "item": "xs_armguard_larmor", "prob": 40 }, + { "item": "xs_gauntlets_larmor", "prob": 40 }, + { "item": "armor_larmor_chest_xs", "prob": 40 } + ] + }, + { + "id": "goblin_chieftan_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "group": "survivor_stabbing", "prob": 99 }, { "item": "rune_biomancer_weapon", "prob": 1 } ] + }, + { + "id": "bugbear_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "group": "survivor_cutting", "prob": 100 } ] + }, + { + "id": "bugbear_stalker_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "group": "survivor_stabbing", "prob": 100 } ] + }, + { + "id": "bugbear_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "xl_helmet_larmor", "prob": 20 }, + { "item": "xl_gauntlets_larmor", "prob": 20 }, + { "item": "xl_boots_larmor", "prob": 20 }, + { "item": "xl_armguard_larmor", "prob": 20 }, + { "item": "xl_legguard_larmor", "prob": 20 }, + { "item": "xl_armor_larmor_chest", "prob": 10 } + ] + }, + { + "id": "orc_warrior_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ + { "item": "survivor_machete", "prob": 96 }, + { "item": "arming_sword_plus_one", "prob": 2 }, + { "item": "broadsword_plus_one", "prob": 2 } + ] + }, + { + "id": "orc_armor_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ + { "item": "helmet_larmor", "prob": 40 }, + { "item": "legguard_larmor", "prob": 40 }, + { "item": "boots_larmor", "prob": 40 }, + { "item": "armguard_larmor", "prob": 40 }, + { "item": "gauntlets_larmor", "prob": 40 }, + { "item": "armor_larmor_chest", "prob": 40 } + ] + }, + { + "id": "orc_archer_melee_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "item": "sheath", "contents-item": "primitive_knife", "prob": 100 } ] + }, + { + "id": "orc_archer_ranged_weapon_drops", + "type": "item_group", + "subtype": "collection", + "entries": [ { "item": "longbow", "prob": 85 }, { "item": "quiver_large", "contents-group": "quiver_orc_archer", "prob": 50 } ] + }, + { + "id": "orc_blood_warrior_weapon_drops", + "type": "item_group", + "subtype": "distribution", + "entries": [ { "item": "lizardfolk_club", "prob": 100 } ] + }, + { + "type": "item_group", + "subtype": "collection", + "id": "quiver_orc_archer", + "entries": [ { "item": "arrow_heavy_fire_hardened_fletched", "count": [ 1, 6 ], "charges": [ 1, 10 ] } ] + } +] diff --git a/data/mods/Magiclysm/monsters/goblin.json b/data/mods/Magiclysm/monsters/goblin.json index 0cb7bb81aad0c..5772f94ab9d9c 100644 --- a/data/mods/Magiclysm/monsters/goblin.json +++ b/data/mods/Magiclysm/monsters/goblin.json @@ -326,7 +326,7 @@ "no_dmg_msg_npc": "%1$s hits 's %2$s without penetrating their armor." } ], - "death_drops": "goblin_bugbear_stalker_drops", + "death_drops": "goblin_bugbear_stalker_death_drops", "extend": { "flags": [ "CAMOUFLAGE", "SILENTMOVES" ] } } ] From dfa3de4508017d5b8848e42498359c4f07742101 Mon Sep 17 00:00:00 2001 From: "Standing-StormStanding-Storm git config --global user.name Standing-Storm git config --global user.name Standing-Storm" Date: Wed, 11 Dec 2024 21:01:22 -0600 Subject: [PATCH 68/69] Fix encampment itemgroups --- .../innawood/orc_goblin_lootgroups.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json b/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json index e378aaa341908..daf849678e367 100644 --- a/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json +++ b/data/mods/Magiclysm/mod_interactions/innawood/orc_goblin_lootgroups.json @@ -1,4 +1,21 @@ [ + { + "type": "item_group", + "id": "bed", + "subtype": "distribution", + "entries": [ { "item": "grass_blanket", "prob": 2500 } ] + }, + { + "type": "item_group", + "id": "midden_heap", + "//": "a large pile of trash, made for goblin encampments.", + "subtype": "collection", + "items": [ + { "group": "trash_forest", "prob": 95 }, + { "group": "trash_forest", "prob": 70 }, + { "group": "trash_forest", "prob": 25 } + ] + }, { "type": "item_group", "subtype": "collection", @@ -11,7 +28,7 @@ { "item": "chestwrap_leather", "prob": 20, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, { "group": "pants_male", "prob": 75, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, { "group": "npc_coat", "prob": 2, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, - { "group": "npc_gloves", "prob": 50, "damage": [ 1, 4 ] }, + { "group": "npc_gloves", "prob": 50, "damage": [ 1, 4 ], "custom-flags": [ "UNDERSIZE" ] }, { "item": "wicker_backpack", "prob": 1, "damage": [ 1, 4 ] } ] }, From 39a3e408e486450a37eec82f341211e34a7ae5b6 Mon Sep 17 00:00:00 2001 From: Kevin Granade Date: Wed, 11 Dec 2024 22:26:15 -0800 Subject: [PATCH 69/69] Remove mingw cross build (#78495) We don't ship cross compiles anymore and there really isn't a place for it since we do have native builds. --- .github/workflows/matrix.yml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/.github/workflows/matrix.yml b/.github/workflows/matrix.yml index 868d8893b4588..baaa6eb3b6b70 100644 --- a/.github/workflows/matrix.yml +++ b/.github/workflows/matrix.yml @@ -166,25 +166,6 @@ jobs: ccache_limit: 4G ccache_key: linux-gcc-11-asan - - compiler: g++ - os: ubuntu-latest - cmake: 0 - native: - pch: 1 - tiles: 1 - sound: 1 - localize: 1 - libbacktrace: 1 - title: GCC 12, Ubuntu cross-compile to MinGW-Win64, Tiles, Sound - ldflags: -static-libgcc -static-libstdc++ - mxe_target: x86_64-w64-mingw32.static.gcc12 - wine: wine - # ~285MB in a clean build - # ~36MB compressed - # observed usage: 3.0GB -> 350MB - ccache_limit: 2G - ccache_key: mingw-gcc-12 - - compiler: g++-9 os: ubuntu-latest cmake: 1