diff --git a/citadel.dme b/citadel.dme
index a2a60b2f8eb..eab88b2c4a6 100644
--- a/citadel.dme
+++ b/citadel.dme
@@ -3811,6 +3811,7 @@
#include "code\modules\materials\definitions\misc\wax.dm"
#include "code\modules\materials\definitions\organic\algae.dm"
#include "code\modules\materials\definitions\organic\bone.dm"
+#include "code\modules\materials\definitions\organic\shell.dm"
#include "code\modules\materials\definitions\organic\chitin.dm"
#include "code\modules\materials\definitions\organic\cotton.dm"
#include "code\modules\materials\definitions\organic\diona.dm"
@@ -4486,6 +4487,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\illusion\illusion.dm"
#include "code\modules\mob\living\simple_mob\subtypes\lavaland\goliath.dm"
#include "code\modules\mob\living\simple_mob\subtypes\lavaland\gutshank.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\lavaland\sandsifter.dm"
#include "code\modules\mob\living\simple_mob\subtypes\lavaland\stormdrifter.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\combat_drone.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\corrupt_maint_drone_vr.dm"
diff --git a/code/__DEFINES/chemistry.dm b/code/__DEFINES/chemistry.dm
index d2104e187d0..cffa43f28fa 100644
--- a/code/__DEFINES/chemistry.dm
+++ b/code/__DEFINES/chemistry.dm
@@ -49,6 +49,7 @@
#define IS_XENOHYBRID 16
#define IS_MOTH 17
#define IS_NARAMADI 18
+#define IS_SCORI 19
/// Inaprovaline
#define CE_STABLE "stable"
diff --git a/code/__DEFINES/recipes.dm b/code/__DEFINES/recipes.dm
index cc10541145c..be6c95f2f28 100644
--- a/code/__DEFINES/recipes.dm
+++ b/code/__DEFINES/recipes.dm
@@ -24,6 +24,7 @@
#define CAT_PIE "Pies & Sweets"
#define CAT_PIZZA "Pizzas"
#define CAT_PRIMAL "Tribal"
+#define CAT_ALCHEMY "Alchemy"
#define CAT_ROBOT "Robots"
#define CAT_SALAD "Salads"
#define CAT_SANDWICH "Sandwiches"
diff --git a/code/datums/recipe/crafting_recipes/recipes_misc.dm b/code/datums/recipe/crafting_recipes/recipes_misc.dm
index 826864a8021..44242459fde 100644
--- a/code/datums/recipe/crafting_recipes/recipes_misc.dm
+++ b/code/datums/recipe/crafting_recipes/recipes_misc.dm
@@ -435,7 +435,7 @@
/datum/crafting_recipe/soak_hide
name = "Soak Hairless Hide"
- result = list(/obj/item/stack/wetleather = 1)
+ result = /obj/item/stack/wetleather
time = 10
reqs = list(/obj/item/stack/hairlesshide = 1,
/datum/reagent/water = 5)
diff --git a/code/datums/recipe/crafting_recipes/recipes_primal.dm b/code/datums/recipe/crafting_recipes/recipes_primal.dm
index 19aa27b20cc..9e0225f0a09 100644
--- a/code/datums/recipe/crafting_recipes/recipes_primal.dm
+++ b/code/datums/recipe/crafting_recipes/recipes_primal.dm
@@ -509,16 +509,6 @@
category = CAT_PRIMAL
always_available = FALSE
-/datum/crafting_recipe/charcoal_stick
- name = "Charcoal Stick"
- result = /obj/item/pen/charcoal
- time = 80
- reqs = list(/obj/item/stack/material/bone = 1
- )
- category = CAT_PRIMAL
- always_available = FALSE
- tools = list(TOOL_WELDER)
-
/datum/crafting_recipe/stone_dropper
name = "Primitive Dropper"
result = /obj/item/reagent_containers/dropper/ashlander
@@ -629,17 +619,18 @@
name = "Coarse Tunic"
result = /obj/item/clothing/under/tribal_tunic/ashlander
time = 60
- reqs = list(/obj/item/stack/animalhide/goliath_hide = 4
- )
+ reqs = list(/obj/item/stack/animalhide/goliath_hide = 2,
+ /datum/reagent/shimashpulp = 30)
category = CAT_PRIMAL
always_available = FALSE
+ tools = list(TOOL_WIRECUTTER) // todo: add weaving tools
/datum/crafting_recipe/ashlander_tunic_fem
name = "Coarse Tunic (female)"
result = /obj/item/clothing/under/tribal_tunic_fem/ashlander
time = 60
- reqs = list(/obj/item/stack/animalhide/goliath_hide = 4
- )
+ reqs = list(/obj/item/stack/animalhide/goliath_hide = 2,
+ /datum/reagent/shimashpulp = 30)
category = CAT_PRIMAL
always_available = FALSE
tools = list(TOOL_WIRECUTTER)
@@ -705,7 +696,7 @@
reqs = list(/obj/item/reagent_containers/glass/bucket/sandstone = 1,
/obj/item/condensedphlogiston = 3,
/obj/item/elderstone = 1)
- category = CAT_PRIMAL
+ category = CAT_ALCHEMY
always_available = FALSE
/datum/crafting_recipe/heaven_shaker_frag
@@ -716,7 +707,7 @@
/obj/item/condensedphlogiston = 3,
/obj/item/stack/ore/slag = 2,
/obj/item/elderstone = 1)
- category = CAT_PRIMAL
+ category = CAT_ALCHEMY
always_available = FALSE
/datum/crafting_recipe/goliathcowl
@@ -789,11 +780,51 @@
tools = list(TOOL_WIRECUTTER)
//Make this one cloth once I give Ashies a cloth plant? If I do??
+//Using shimash pulp as standin for cloth
/datum/crafting_recipe/ashlander_wraps
name = "Hide Footwraps"
result = /obj/item/clothing/shoes/footwraps
time = 10
- reqs = list(/obj/item/stack/animalhide/goliath_hide = 2)
+ reqs = list(/datum/reagent/shimashpulp = 15)
category = CAT_PRIMAL
always_available = FALSE
- tools = list(TOOL_WIRECUTTER)
+
+/datum/crafting_recipe/primitivesoap
+ name = "Primitive Soap"
+ result = /obj/item/soap/primitive
+ time = 10
+ reqs = list(/datum/reagent/nutriment/triglyceride/oil/tallow = 1, /datum/reagent/water = 1, /datum/reagent/ash_powder = 1)
+ category = CAT_ALCHEMY
+ always_available = FALSE
+
+/datum/crafting_recipe/condensedphlogiston
+ name = "Condensed Phlogiston"
+ result = /obj/item/condensedphlogiston
+ time = 10
+ reqs = list(/datum/reagent/phlogiston = 5, /datum/reagent/ash_powder = 5, /datum/reagent/alchemybase = 3)
+ category = CAT_ALCHEMY
+ always_available = FALSE
+
+/datum/crafting_recipe/bitterash
+ name = "Bitter Ash Poultice"
+ result = /obj/item/bitterash
+ time = 10
+ reqs = list(/datum/reagent/nicotine = 5, /datum/reagent/ash_powder = 5, /datum/reagent/alchemybase = 3)
+ category = CAT_ALCHEMY
+ always_available = FALSE
+
+/datum/crafting_recipe/charcoal_stick
+ name = "Charcoal Stick"
+ result = /obj/item/pen/charcoal
+ time = 10
+ reqs = list(/datum/reagent/nutriment/triglyceride/oil/tallow = 1, /datum/reagent/alchemybase = 1, /datum/reagent/ash_powder = 1) // Changing to refliect original recipe better
+ category = CAT_ALCHEMY
+ always_available = FALSE
+
+/datum/crafting_recipe/ritual_chalk
+ name = "Chalk"
+ result = /obj/item/pen/crayon/chalk
+ time = 10
+ reqs = list(/datum/reagent/nutriment/triglyceride/oil/tallow = 1, /datum/reagent/alchemybase = 1, /datum/reagent/calcium = 1)
+ category = CAT_ALCHEMY
+ always_available = FALSE
diff --git a/code/game/objects/items/stacks/subtypes/material.dm b/code/game/objects/items/stacks/subtypes/material.dm
index 3ad883ac40f..993956c97ba 100644
--- a/code/game/objects/items/stacks/subtypes/material.dm
+++ b/code/game/objects/items/stacks/subtypes/material.dm
@@ -580,6 +580,18 @@
drop_sound = 'sound/items/drop/leather.ogg'
pickup_sound = 'sound/items/pickup/leather.ogg'
+/obj/item/stack/material/shell
+ name = "shell shards"
+ desc = "Shards of animal shell."
+ singular_name = "shell shard"
+ icon_state = "chitin"
+ material = /datum/prototype/material/bone
+ no_variants = FALSE
+ pass_color = TRUE
+ strict_color_stacking = TRUE
+ drop_sound = 'sound/items/drop/glass.ogg'
+ pickup_sound = 'sound/items/pickup/glass.ogg'
+
/obj/item/stack/material/glass
name = "glass"
icon_state = "sheet-glass"
diff --git a/code/game/objects/mob_spawner.dm b/code/game/objects/mob_spawner.dm
index cfd2ce83797..09e85a37cd2 100644
--- a/code/game/objects/mob_spawner.dm
+++ b/code/game/objects/mob_spawner.dm
@@ -159,6 +159,21 @@ It also makes it so a ghost wont know where all the goodies/mobs are.
/mob/living/simple_mob/animal/stormdrifter/bull = 30
)
+/obj/structure/mob_spawner/sandsifter
+ name = "Sand Sifter Colony"
+ desc = "A pile of rocks and other debris sand sifters often nest in."
+ icon_state = "boulder1"
+ spawn_delay = 5 MINUTES
+ simultaneous_spawns = 8
+ mob_faction = MOB_IFF_FACTION_BIND_TO_MAP
+ total_spawns = 36
+ anchored = 1
+ integrity_flags = NONE
+ integrity = 100
+ spawn_types = list(
+ /mob/living/simple_mob/animal/sandsifter = 100
+ )
+
//Scanners
/obj/structure/mob_spawner/scanner/corgi
name = "Corgi Lazy Spawner"
diff --git a/code/game/objects/structures/ashlander.dm b/code/game/objects/structures/ashlander.dm
index c5400be1e04..80762f658da 100644
--- a/code/game/objects/structures/ashlander.dm
+++ b/code/game/objects/structures/ashlander.dm
@@ -295,6 +295,28 @@
playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 50, 1)
beaker.reagents.add_reagent("ash", 10)
+ if(istype(I,/obj/item/stack/material/shell))
+ if(!beaker)
+ return
+ else
+ var/obj/item/stack/material/shell/W = I
+ if(W.get_amount() < 1)
+ return
+ else if(do_after(user, 10))
+ W.use(1)
+ user.visible_message("[user] feeds \the [W] into \the [src].","You reduce \the [W] using \the [src].")
+ playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 50, 1)
+ beaker.reagents.add_reagent("calcium", 10)
+
+ if(istype(I,/obj/item/elderstone))
+ if(!beaker)
+ return
+ else if(do_after(user, 10))
+ qdel(I)
+ user.visible_message("[user] feeds \the [I] into \the [src].","You reduce \the [I] using \the [src].")
+ playsound(loc, 'sound/weapons/gun_flamethrower3.ogg', 50, 1)
+ beaker.reagents.add_reagent("catalyst", 10)
+
src.updateUsrDialog()
return 0
diff --git a/code/modules/food/food/snacks/meat.dm b/code/modules/food/food/snacks/meat.dm
index 3877bf37714..c6bf8bf7805 100644
--- a/code/modules/food/food/snacks/meat.dm
+++ b/code/modules/food/food/snacks/meat.dm
@@ -60,6 +60,16 @@
reagents.remove_reagent("triglyceride", INFINITY)
//Chicken is low fat. Less total calories than other meats
+/obj/item/reagent_containers/food/snacks/meat/sandsifter
+ icon = 'icons/obj/food.dmi'
+ icon_state = "chickenbreast"
+ cooked_icon = "chickenbreast_cooked"
+ filling_color = "#AE625F"
+
+/obj/item/reagent_containers/food/snacks/meat/sandsifter/Initialize(mapload)
+ . = ..()
+ reagents.remove_reagent("triglyceride", INFINITY)
+
/obj/item/reagent_containers/food/snacks/meat/chicken/penguin
name = "meat"
desc = "Tastes like chicken? Or fish? Fishy chicken? Strange."
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index 2ee053bd281..a7ed2c70ee5 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -1666,7 +1666,7 @@
seed_name = "pyrrhlea"
display_name = "pyrrhlea"
kitchen_tag = "pyrrhlea"
- chems = list("nutriment" = list(1,5), "kelotane" = list(1,10), "inaprovaline" = list(1,10))
+ chems = list("nutriment" = list(1,5), "pyrrhleanectar" = list(1,10), "inaprovaline" = list(1,10)) // tried to make the nectar replace both medicines but I don't think reactions can have two outcomes for splitting it later
/datum/seed/flower/pyrrhlea/New()
..()
@@ -1687,7 +1687,7 @@
seed_name = "bentar"
display_name = "bentars"
kitchen_tag = "bentars"
- chems = list("sugar" = list(1,5), "anti_toxin" = list(1,10))
+ chems = list("sugar" = list(1,5), "bentarjuice" = list(1,10))
/datum/seed/bentars/New()
..()
@@ -1709,7 +1709,7 @@
seed_name = "juhtak"
display_name = "juhtak"
kitchen_tag = "juhtak"
- chems = list("nutriment" = list(1,5), "bicaridine" = list(1,10))
+ chems = list("nutriment" = list(1,5), "juhtakpulp" = list(1,10))
/datum/seed/juhtak/New()
..()
@@ -1731,7 +1731,7 @@
seed_name = "cersut"
display_name = "cersut"
kitchen_tag = "cersut"
- chems = list("sacid" = list(5,10))
+ chems = list("cersutpaste" = list(5,10))
/datum/seed/cersut/New()
..()
@@ -1753,7 +1753,7 @@
seed_name = "shimash"
display_name = "shimash"
kitchen_tag = "shimash"
- chems = list("tramadol" = list(5,10))
+ chems = list("shismashpulp" = list(5,10))
/datum/seed/shimash/New()
..()
@@ -1775,7 +1775,7 @@
seed_name = "pokalea"
display_name = "pokalea"
kitchen_tag = "pokalea"
- chems = list("nicotine" = list(5,10), "leporazine" = list(5,10))
+ chems = list("nicotine" = list(5,10), "pokaleapaste" = list(5,10))
/datum/seed/pokalea/New()
..()
diff --git a/code/modules/materials/definitions/organic/shell.dm b/code/modules/materials/definitions/organic/shell.dm
new file mode 100644
index 00000000000..5a831ce277f
--- /dev/null
+++ b/code/modules/materials/definitions/organic/shell.dm
@@ -0,0 +1,28 @@
+/datum/prototype/material/shell
+ id = "shell"
+ name = "shell"
+ icon_colour = "#BCB7B5"
+ stack_type = /obj/item/stack/material/shell
+ icon_base = 'icons/turf/walls/stone_wall.dmi'
+ icon_reinf = 'icons/turf/walls/reinforced_mesh.dmi'
+ melting_point = T0C+300
+ sheet_singular_name = "shard"
+ sheet_plural_name = "shards"
+ explosion_resistance = 60
+ stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 7)
+ door_icon_base = "stone"
+ table_icon_base = "stone"
+
+ relative_integrity = 0.75
+ weight_multiplier = 0.75
+ density = 8 * 1
+ relative_conductivity = 0.1
+ relative_permeability = 0.07
+ relative_reactivity = 1
+ hardness = MATERIAL_RESISTANCE_MODERATE
+ toughness = MATERIAL_RESISTANCE_MODERATE
+ refraction = MATERIAL_RESISTANCE_NONE
+ absorption = MATERIAL_RESISTANCE_MODERATE
+ nullification = MATERIAL_RESISTANCE_NONE
+
+ material_constraints = MATERIAL_CONSTRAINT_RIGID
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index e07175ac73f..7f966fc044b 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -157,6 +157,10 @@
/obj/item/holder/mouse
w_class = WEIGHT_CLASS_TINY
+/obj/item/holder/sandsifter
+ w_class = WEIGHT_CLASS_TINY
+ origin_tech = list(TECH_BIO = 3)
+
/obj/item/holder/borer
origin_tech = list(TECH_BIO = 6)
diff --git a/code/modules/mob/living/simple_mob/subtypes/lavaland/goliath.dm b/code/modules/mob/living/simple_mob/subtypes/lavaland/goliath.dm
index 60324a4b248..f40eaf2a8dd 100644
--- a/code/modules/mob/living/simple_mob/subtypes/lavaland/goliath.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/lavaland/goliath.dm
@@ -149,7 +149,7 @@
var/obj/item/reagent_containers/glass/G = O
if(stat == CONSCIOUS && istype(G) && G.is_open_container())
user.visible_message("[user] drains the sac of the [src] using \the [O].")
- var/transfered = goliath_sac.trans_id_to(G, "gunpowder", rand(15,30))
+ var/transfered = goliath_sac.trans_id_to(G, "phosphorus", rand(15,30))
if(G.reagents.total_volume >= G.volume)
to_chat(user, "The [O] is full.")
if(!transfered)
@@ -193,7 +193,7 @@
if(stat != DEAD)
if(goliath_sac && prob(5))
- goliath_sac.add_reagent("gunpowder", rand(5, 10))
+ goliath_sac.add_reagent("phosphorus", rand(5, 10))
/mob/living/simple_mob/animal/goliath/death()
STOP_PROCESSING(SSobj, src)
diff --git a/code/modules/mob/living/simple_mob/subtypes/lavaland/sandsifter.dm b/code/modules/mob/living/simple_mob/subtypes/lavaland/sandsifter.dm
new file mode 100644
index 00000000000..19159267c87
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/lavaland/sandsifter.dm
@@ -0,0 +1,63 @@
+/datum/category_item/catalogue/fauna/sandsifter
+ name = "Sand Sifters"
+ desc = "Sand Sifters are a species native to KT-943, known commonly as Surt. \
+ Largely inconsequential to Nanotrasen's interests on the planet, the sand sifter is \
+ akin to bottom feeders found within other ecosystems; continuously crawling through the ash \
+ sands that blanket the planet for base nutrients and rotting organic material. \
+ Hence the common name the species is known by."
+ value = CATALOGUER_REWARD_TRIVIAL
+
+/mob/living/simple_mob/animal/sandsifter
+ name = "sand sifter"
+ desc = "A small snail-like creature that feeds on minerals and organic matter it finds in ash sand."
+ icon = 'icons/mob/lavaland/lavaland_mobs.dmi'
+ icon_state = "lavasnail"
+ icon_living = "lavasnail"
+ icon_dead = "lavasnail-dead"
+ catalogue_data = list(/datum/category_item/catalogue/fauna/sandsifter)
+
+ maxHealth = 20
+ health = 20
+ min_oxy = 0
+ min_co2 = 5
+ max_co2 = 0
+ minbodytemp = 0
+ maxbodytemp = 700
+ heat_resist = 1
+
+ mob_size = MOB_MINISCULE
+ pass_flags = ATOM_PASS_TABLE
+ can_pull_size = WEIGHT_CLASS_TINY
+ can_pull_mobs = MOB_PULL_NONE
+ layer = MOB_LAYER
+ density = 0
+
+ response_help = "pets"
+ response_disarm = "nudges"
+ response_harm = "crushes"
+
+ mob_class = MOB_CLASS_ANIMAL
+ taser_kill = FALSE
+
+ bone_type = /obj/item/stack/material/shell
+ meat_type = /obj/item/reagent_containers/food/snacks/meat/sandsifter
+ meat_amount = 2
+ bone_amount = 4
+ exotic_amount = 0
+
+ holder_type = /obj/item/holder/sandsifter
+
+ iff_factions = MOB_IFF_FACTION_BIND_TO_MAP
+
+ speak_emote = list("burbles")
+ say_list_type = /datum/say_list/sandsifter
+ ai_holder_type = /datum/ai_holder/polaris/simple_mob/melee/sandsifter
+
+/datum/ai_holder/polaris/simple_mob/melee/sandsifter
+ hostile = FALSE
+ retaliate = FALSE
+ mauling = FALSE
+
+/datum/say_list/sandsifter
+ emote_hear = list("crunches on some sand","suddenly drops its shell to the ground")
+ emote_see = list("sinks their underbelly into the sand", "slowly inches along", "pokes its radula at something")
diff --git a/code/modules/reagents/chemistry/machinery.dm b/code/modules/reagents/chemistry/machinery.dm
index 80d91f73fb1..19c82fa3272 100644
--- a/code/modules/reagents/chemistry/machinery.dm
+++ b/code/modules/reagents/chemistry/machinery.dm
@@ -30,8 +30,21 @@
/obj/item/stack/material/snow = list("water"),
/obj/item/stack/material/sandstone = list("silicon", "oxygen"),
/obj/item/stack/material/glass = list("silicon"),
+ /obj/item/stack/material/lead = list("lead"),
+ /obj/item/stack/material/copper = list("copper"),
/obj/item/stack/material/glass/phoronglass = list("platinum", "silicon", "silicon", "silicon"), //5 platinum, 15 silicon,
/obj/item/stack/material/silencium = list("nothing"),
+ /obj/item/stack/material/bone = list("bonemeal"),
+ /obj/item/stack/material/shell = list("calciumcarbonate"),
+ /obj/item/stack/ore/gold = list ("gold"), // Native gold means it's pure crystalline gold
+ /obj/item/stack/ore/silver = list ("silver"), // ditto for native silver
+ /obj/item/stack/ore/copper = list ("copper"),
+ /obj/item/stack/ore/lead = list ("galena"),
+ /obj/item/stack/ore/iron = list ("hematite"),
+ /obj/item/stack/ore/coal = list ("carbon", "carbon", "carbon", "carbon", "sulfur"),
+ /obj/item/stack/ore/phoron = list ("phoronite"),
+ /obj/item/stack/ore/hydrogen = list ("hydronite"),
+ /obj/item/stack/ore/uranium = list ("uraninite")
)
var/static/radial_examine = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_examine")
var/static/radial_eject = image(icon = 'icons/mob/radial.dmi', icon_state = "radial_eject")
diff --git a/code/modules/reagents/chemistry/reactions/Drink-Recipes.dm b/code/modules/reagents/chemistry/reactions/Drink-Recipes.dm
index 989b400f53c..09c51f37fb9 100644
--- a/code/modules/reagents/chemistry/reactions/Drink-Recipes.dm
+++ b/code/modules/reagents/chemistry/reactions/Drink-Recipes.dm
@@ -134,6 +134,14 @@
catalysts = list("enzyme" = 5)
result_amount = 10
+/datum/chemical_reaction/drinks/bentarwine
+ name = "Sirim-Bentar"
+ id = "bentarwine"
+ result = "bentarwine"
+ required_reagents = list("bentarjuice" = 10)
+ catalysts = list("enzyme" = 5)
+ result_amount = 10
+
/datum/chemical_reaction/drinks/pwine
name = "Poison Wine"
id = "pwine"
diff --git a/code/modules/reagents/chemistry/reactions/Misc-Recipes.dm b/code/modules/reagents/chemistry/reactions/Misc-Recipes.dm
index 4241a2c7ad4..87d45f5eedb 100644
--- a/code/modules/reagents/chemistry/reactions/Misc-Recipes.dm
+++ b/code/modules/reagents/chemistry/reactions/Misc-Recipes.dm
@@ -249,7 +249,10 @@
required_reagents = list("triglyceride" = 1, "protein" = 1, "alchemybase" = 1)
result_amount = 3
-/datum/chemical_reaction/soap
+// Replacing (most) reactions that produce items with a crafting recipe. Less janky
+
+/*
+ /datum/chemical_reaction/soap
name = "Soap"
id = "soap"
required_reagents = list("tallow" = 1, "water" = 1, "ash" = 1)
@@ -258,8 +261,12 @@
. = ..()
new /obj/item/soap/primitive(get_turf(holder.my_atom))
+*/
+
// todo: why is this a chemical reaction? make a chalkcrafting system or something...
+// chalk crafting system is in now kinda
+
// you know what fuck you; this trips up unit tests. i'm just commenting it out.
// /datum/chemical_reaction/charcoal_stick
// name = "Charcoal Stick"
@@ -306,6 +313,7 @@
required_reagents = list("gunpowder" = 2, "alchemybase" = 1)
result_amount = 3
+/*
/datum/chemical_reaction/condensedphlogiston
name = "Condensed Phlogiston"
id = "condensedphlogiston"
@@ -325,6 +333,124 @@
. = ..()
for(var/i in 1 to multiplier)
new /obj/item/bitterash(get_turf(holder.my_atom))
+*/
+
+/datum/chemical_reaction/alchemizebentar
+ name = "Alchemize Bentar"
+ id = "alchemizebentar"
+ result = "anti_toxin"
+ required_reagents = list("bentarjuice" = 1, "catalyst" = 0.1)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/alchemizeshimash
+ name = "Alchemize Shimash"
+ id = "alchemizeshimash"
+ result = "tramadol"
+ required_reagents = list("shimashpulp" = 1, "catalyst" = 0.1)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/alchemizepokalea
+ name = "Alchemize Pokalea"
+ id = "alchemizepokalea"
+ result = "leporazine"
+ required_reagents = list("pokaleapaste" = 1, "catalyst" = 0.1)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/alchemizejuhtak
+ name = "Alchemize Juhtak"
+ id = "alchemizejuhtak"
+ result = "bicaridine"
+ required_reagents = list("juhtakpulp" = 1, "catalyst" = 0.1)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/alchemizepyrrhlea
+ name = "Alchemize Pyrrhlea"
+ id = "alchemizepyrrhlea"
+ result = "kelotane"
+ required_reagents = list("pyrrhleanectar" = 1, "catalyst" = 0.1)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/alchemizebanana
+ name = "Alchemize Banana Juice"
+ id = "alchemizebanana"
+ result = "potassium"
+ required_reagents = list("banana" = 1, "catalyst" = 0.1)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/alchemizebonemeal
+ name = "Alchemize Bonemeal"
+ id = "alchemizebonemeal"
+ result = "phosphorus"
+ required_reagents = list("bonemeal" = 1, "catalyst" = 0.1)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/dilutecersut
+ name = "Dilute Cersut"
+ id = "dilutecersut"
+ result = "sacid"
+ required_reagents = list("cersutpaste" = 1, "water" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/purifyiron
+ name = "Purify Hematite"
+ id = "purifyiron"
+ result = "iron"
+ required_reagents = list("hematite" = 1, "catalyst" = 0.5)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/purifyuranium
+ name = "Purify Uraninite"
+ id = "purifyuranium"
+ result = "uranium"
+ required_reagents = list("uraninite" = 1, "catalyst" = 0.5)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/purifylead
+ name = "Purify Galena"
+ id = "purifylead"
+ result = "lead"
+ required_reagents = list("galena" = 1, "catalyst" = 0.1)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/purifyphoron
+ name = "Purify Phoronite"
+ id = "purifyphoron"
+ result = "phoron"
+ required_reagents = list("phoronite" = 1, "catalyst" = 0.5)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/releasehydrogen
+ name = "Release Hydrogen"
+ id = "releasehydrogen"
+ result = "hydrogen"
+ required_reagents = list("hydronite" = 1, "sacid" = 2, "catalyst" = 0.5)
+ catalysts = list("catalyst" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/cersutsauce
+ name = "Siishma-Cersut"
+ id = "cersutsauce"
+ result = "cersutsauce"
+ required_reagents = list("cersutpaste" = 1, "sugar" = 1, "pyrrhleanectar" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/gunpowder
+ name = "Gunpowder"
+ id = "gunpowder"
+ result = "gunpowder"
+ required_reagents = list("phosphorus" = 1, "carbon" = 1, "sulfur" = 1)
+ result_amount = 3
//Slime related
/datum/chemical_reaction/slimeify
diff --git a/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Food-Drinks.dm
index 92781cf3ea2..daa1b9b8777 100644
--- a/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -5460,3 +5460,40 @@
glass_name = "Halloween Punch"
glass_desc = "It's staring at you!"
+
+/datum/reagent/ethanol/bentarwine
+ name = "Sirim-Bentar"
+ id = "bentarwine"
+ description = "A type of wine made of fermented bentar juice."
+ reagent_state = REAGENT_LIQUID
+ proof = WINE
+ color = "#9d23aa"
+ taste_description = "slightly medicinal wine"
+
+/datum/reagent/ethanol/bentarwine/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.75
+ if(alien != IS_DIONA)
+ M.adjustToxLoss(-1 * removed * chem_effective)//Keeps some of the medicinal properties, but reduced.
+
+/datum/reagent/cersutsauce
+ name = "Siishma-Cersut"
+ id = "cersutsauce"
+ description = "Acidic cersut paste tempered by some other medium to create a sauce."
+ reagent_state = REAGENT_LIQUID
+ color = "#e0f569"
+ taste_description = "your tongue tingling"
+
+/datum/reagent/cersutsauce/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ var/potency = 2
+ if(alien == IS_XENOHYBRID)
+ return
+ if(alien != IS_SCORI)
+ potency = 4
+ if(metabolism.total_processed_dose < 5 && (metabolism.cycles_so_far == 1 || prob(5)))
+ to_chat(M,"You feel like your insides are going numb!")
+ if(metabolism.total_processed_dose >= 5)
+ M.apply_effect(potency, AGONY, 0)
+ if(prob(5))
+ M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]")
diff --git a/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Other.dm
index f84ea963eaf..29655a60b3b 100644
--- a/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Other.dm
+++ b/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Other.dm
@@ -189,6 +189,52 @@
color = "#464650"
taste_description = "salt"
+/datum/reagent/galena
+ name = "Galena"
+ id = "galena"
+ description = "Powdered unprocessed lead."
+ reagent_state = REAGENT_SOLID
+ color = "#273956"
+ taste_description = "metal"
+
+/datum/reagent/hematite
+ name = "Hematite"
+ id = "hematite"
+ description = "Powdered unprocessed iron. It's mostly iron oxide."
+ reagent_state = REAGENT_SOLID
+ color = "#353535"
+ taste_description = "rust"
+
+/datum/reagent/uraninite
+ name = "Uraninite"
+ id = "uraninite"
+ description = "Powdered unprocessed uranium."
+ reagent_state = REAGENT_SOLID
+ color = "#B8B8C0"
+ taste_description = "metal"
+
+/datum/reagent/uraninite/legacy_affect_touch(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ legacy_affect_ingest(M, alien, removed, metabolism)
+
+/datum/reagent/uraninite/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ M.apply_effect(5 * removed, IRRADIATE, 0)
+
+/datum/reagent/phoronite
+ name = "Phoronite"
+ id = "phoronite"
+ description = "Powdered unprocessed phoron. The crystals haven't been forced into their reactive form."
+ reagent_state = REAGENT_SOLID
+ color = "#9D14DB"
+ taste_description = "tingly sand"
+
+/datum/reagent/hydronite
+ name = "Hydronite"
+ id = "hydronite"
+ description = "Powdered unprocessed metallic hydrogen."
+ reagent_state = REAGENT_SOLID
+ color = "#808080"
+ taste_mult = 0
+
//Ashlander Alchemy!
/datum/reagent/alchemybase
name = "Alchemical Base"
@@ -213,3 +259,114 @@
reagent_state = REAGENT_SOLID
color = "#302f2f"
taste_description = "sour wax and sulphur"
+
+/datum/reagent/bentarjuice
+ name = "Bentar Juice"
+ id = "bentarjuice"
+ description = "The sickly sweet juice of the bentar plant."
+ reagent_state = REAGENT_LIQUID
+ color = "#9d23aa"
+ taste_description = "sweetness with a medicinal aftertaste"
+
+/datum/reagent/bentarjuice/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.75
+ if(alien != IS_DIONA)
+ M.adjustToxLoss(-2 * removed * chem_effective)// Herbal Dylovene. Heals less toxin and loses other benefits.
+
+/datum/reagent/cersutpaste
+ name = "Cersut Paste"
+ id = "cersutpaste"
+ description = "Ground up paste of a cersut leaf. It's highly acidic."
+ reagent_state = REAGENT_LIQUID
+ color = "#e0f569"
+ taste_description = "your tongue melting and teeth falling out"
+
+/datum/reagent/cersutpaste/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ if(alien == IS_XENOHYBRID)
+ return
+ if(alien != IS_SCORI)
+ M.take_random_targeted_damage(burn = 0, burn = removed * 4)
+ if(prob(50))
+ M.apply_effect(4, AGONY, 0)
+ if(prob(20))
+ to_chat(M,"You feel like your insides are melting!")
+ else if(prob(20))
+ M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]")
+
+
+
+/datum/reagent/juhtakpulp
+ name = "Juhtak Pulp"
+ id = "juhtakpulp"
+ description = "Pulp extracted from a juhtak plant."
+ reagent_state = REAGENT_LIQUID
+ color = "#684f32"
+ taste_description = "bitter plant grit"
+
+/datum/reagent/juhtakpulp/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.75
+ if(alien != IS_DIONA)
+ M.heal_organ_damage(2 * removed * chem_effective, 0) // Herbal Bicaridine, less effective. Use alchemy to make it better.
+
+/datum/reagent/pokaleapaste
+ name = "Pokalea Paste"
+ id = "pokaleapaste"
+ description = "Ground up pokalea leaves."
+ reagent_state = REAGENT_LIQUID
+ color = "#684c34"
+ taste_description = "bitterness"
+
+/datum/reagent/pokaleapaste/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ if(alien == IS_DIONA)
+ return
+ if(M.bodytemperature > 310)
+ M.bodytemperature = max(310, M.bodytemperature - (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) // Herbal Leporazine, less effective.
+ else if(M.bodytemperature < 311)
+ M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
+
+/datum/reagent/pyrrhleanectar
+ name = "Pyrrhlea Nectar"
+ id = "pyrrhleanectar"
+ description = "The nectar of a pyrrhlea flower."
+ reagent_state = REAGENT_LIQUID
+ color = "#f0d74c"
+ taste_description = "bitter nectar"
+
+/datum/reagent/pyrrhleanectar/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ if(alien != IS_DIONA)
+ M.add_chemical_effect(CE_STABLE, 7) // Herbal kelotane. Less effective
+ M.heal_organ_damage(0, 2 * removed)
+
+/datum/reagent/shimashpulp
+ name = "Shimash Pulp"
+ id = "shimashpulp"
+ description = "Pulp extracted from a shimash plant."
+ reagent_state = REAGENT_LIQUID
+ color = "#f2f0ef"
+ taste_description = "sour plant grit"
+
+/datum/reagent/shimashpulp/legacy_affect_blood(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.75
+ M.ceiling_chemical_effect(CE_PAINKILLER, 20 * chem_effective) //Herbal tramadol, much less effective.
+
+/datum/reagent/bonemeal
+ name = "Bonemeal"
+ id = "bonemeal"
+ description = "Ground up bones."
+ reagent_state = REAGENT_SOLID
+ color = "#f2f0ef"
+ taste_description = "gritty sand"
+
+/datum/reagent/catalyst
+ name = "Catalyst"
+ id = "catalyst"
+ description = "Semi-anomalous powder. Properties unknown." // Powdered Elder Stone, for use in more advanced alchemy.
+ reagent_state = REAGENT_SOLID
+ color = "#9D14DB"
+ taste_description = "forever"
diff --git a/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Toxins.dm
index c083542d263..6c305353fd4 100644
--- a/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/chemistry/reagents/Chemistry-Reagents-Toxins.dm
@@ -1067,6 +1067,9 @@
* Now scannable! Removed with shockchems!
*/
+/datum/reagent/nanite
+ abstract_type = /datum/reagent/nanite
+
/datum/reagent/nanite/shredding
name = "Shredding Nanites"
id = "shredding_nanites"
diff --git a/code/modules/reagents/chemistry/reagents/core/elements.dm b/code/modules/reagents/chemistry/reagents/core/elements.dm
index cfee51c01a9..8bf5c7149d7 100644
--- a/code/modules/reagents/chemistry/reagents/core/elements.dm
+++ b/code/modules/reagents/chemistry/reagents/core/elements.dm
@@ -69,6 +69,10 @@
taste_description = "pennies"
color = "#6E3B08"
+/datum/reagent/copper/legacy_affect_ingest(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
+ if(alien == IS_SCORI)
+ M.add_chemical_effect(CE_BLOODRESTORE, 8 * removed)
+
/datum/reagent/fluorine
name = "Fluorine"
id = "fluorine"
@@ -108,9 +112,17 @@
color = "#353535"
/datum/reagent/iron/legacy_affect_ingest(mob/living/carbon/M, alien, removed, datum/reagent_metabolism/metabolism)
- if(alien != IS_DIONA)
+ if(alien != IS_DIONA && alien != IS_SCORI)
M.add_chemical_effect(CE_BLOODRESTORE, 8 * removed)
+/datum/reagent/lead
+ name = "Lead"
+ id = "lead"
+ description = "A particularly heavy metal."
+ taste_description = "metal"
+ reagent_state = REAGENT_SOLID
+ color = "#273956"
+
/datum/reagent/lithium
name = "Lithium"
id = "lithium"
diff --git a/code/modules/roles/ghostroles/roles/ashlander.dm b/code/modules/roles/ghostroles/roles/ashlander.dm
index 304528f3af4..08ceabe4425 100644
--- a/code/modules/roles/ghostroles/roles/ashlander.dm
+++ b/code/modules/roles/ghostroles/roles/ashlander.dm
@@ -89,7 +89,8 @@
/datum/crafting_recipe/goliathcowl, /datum/crafting_recipe/primitive_splint, /datum/crafting_recipe/bone_pipe, /datum/crafting_recipe/spark_striker, /datum/crafting_recipe/skull_mask,
/datum/crafting_recipe/alchemy_bandolier, /datum/crafting_recipe/saddle_stormdrifter, /datum/crafting_recipe/ashlander_sandals, /datum/crafting_recipe/ashlander_wraps,
/datum/crafting_recipe/musket_ashlander, /datum/crafting_recipe/flintlock_ashlander, /datum/crafting_recipe/drying_kiln, /datum/crafting_recipe/primitive_press, /datum/crafting_recipe/advanced_alchemy_station,
- /datum/crafting_recipe/charcoal_stick, /datum/crafting_recipe/brick_press
+ /datum/crafting_recipe/charcoal_stick, /datum/crafting_recipe/brick_press, /datum/crafting_recipe/primitivesoap, /datum/crafting_recipe/condensedphlogiston, /datum/crafting_recipe/bitterash,
+ /datum/crafting_recipe/ritual_chalk
)
/datum/ghostrole_instantiator/human/player_static/ashlander/GetOutfit(client/C, mob/M, list/params)
diff --git a/code/modules/species/outsider/scori.dm b/code/modules/species/outsider/scori.dm
index 60b54734f4c..f2c7814d653 100644
--- a/code/modules/species/outsider/scori.dm
+++ b/code/modules/species/outsider/scori.dm
@@ -24,6 +24,8 @@
base_color = "#373652"
blood_color = "#3c6d45"
+ reagent_tag = IS_SCORI
+
max_age = 200
galactic_language = FALSE
diff --git a/icons/mob/lavaland/lavaland_mobs.dmi b/icons/mob/lavaland/lavaland_mobs.dmi
index 5d936508fdc..a15c6d10ac6 100644
Binary files a/icons/mob/lavaland/lavaland_mobs.dmi and b/icons/mob/lavaland/lavaland_mobs.dmi differ