diff --git a/code/datums/outfits/vox.dm b/code/datums/outfits/vox.dm index a658572bc3..ba5f8c583d 100644 --- a/code/datums/outfits/vox.dm +++ b/code/datums/outfits/vox.dm @@ -7,6 +7,21 @@ hierarchy_type = /decl/hierarchy/outfit/vox flags = OUTFIT_HAS_BACKPACK + var/list/consumables = list( + /obj/item/reagent_containers/food/drinks/flask/vox/protoslurry, + /obj/item/reagent_containers/food/drinks/flask/vox/repairgel, + /obj/item/reagent_containers/food/drinks/flask/vox/riaak + ) + +/decl/hierarchy/outfit/vox/equip(mob/living/carbon/human/H, rank, assignment) + . = ..() + if(istype(H) && length(consumables)) + for(var/consumable in consumables) + var/thing = new consumable + if(!H.equip_to_storage(thing)) + qdel(thing) + break + /decl/hierarchy/outfit/vox/survivor name = "Vox Survivor" belt = /obj/item/gun/launcher/spikethrower/small diff --git a/code/modules/food/food/drinks.dm b/code/modules/food/food/drinks.dm index 8741105e55..b10c95586f 100644 --- a/code/modules/food/food/drinks.dm +++ b/code/modules/food/food/drinks.dm @@ -419,3 +419,38 @@ icon_state = "vacuumflask" volume = 60 center_of_mass = list("x"=15, "y"=4) + +// Vox flasks. +/obj/item/reagent_containers/food/drinks/flask/vox + name = "vox canister" + desc = "A stubby airtight canister made from hammered plates of blue-green alloy." + icon_state = "voxflask" + volume = 30 + var/initial_reagents + +/obj/item/reagent_containers/food/drinks/flask/vox/Initialize() + . = ..() + var/largest_reagent + for(var/rid in initial_reagents) + var/amt = initial_reagents[rid] + reagents.add_reagent(rid, amt) + if(!largest_reagent || amt > initial_reagents[largest_reagent]) + largest_reagent = rid + if(largest_reagent) + for(var/datum/reagent/R in reagents.reagent_list) + if(R.id == largest_reagent) + name = "[name] ([R.name])" + break + +/obj/item/reagent_containers/food/drinks/flask/vox/protoslurry + initial_reagents = list("voxslurry" = 30) + +/obj/item/reagent_containers/food/drinks/flask/vox/repairgel + initial_reagents = list("voxmeds" = 30) + +/obj/item/reagent_containers/food/drinks/flask/vox/riaak + initial_reagents = list("voxbooze" = 30) + +// This is mainly there for debugging as there's no other way to get it atm. +/obj/item/reagent_containers/food/drinks/flask/vox/alkahest + initial_reagents = list("voxenzyme" = 30) diff --git a/code/modules/food/food/lunch.dm b/code/modules/food/food/lunch.dm index 516084b588..e199dfe1f3 100644 --- a/code/modules/food/food/lunch.dm +++ b/code/modules/food/food/lunch.dm @@ -122,7 +122,7 @@ var/global/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_ /datum/reagent/ethanol/pwine, /datum/reagent/ethanol/threemileisland, /datum/reagent/ethanol/toxins_special, - /datum/reagent/ethanol/voxdelight, + /datum/reagent/ethanol/riaaak, /datum/reagent/ethanol/soemmerfire, /datum/reagent/ethanol/slimeshot) diff --git a/code/modules/reagents/reactions/_reactions.dm b/code/modules/reagents/reactions/_reactions.dm index d63967d900..ba63b43dcf 100644 --- a/code/modules/reagents/reactions/_reactions.dm +++ b/code/modules/reagents/reactions/_reactions.dm @@ -125,4 +125,4 @@ //obtains any special data that will be provided to the reaction products //this is called just before reactants are removed. /decl/chemical_reaction/proc/send_data(var/datum/reagents/holder, var/reaction_limit) - return null \ No newline at end of file + return null diff --git a/code/modules/reagents/reactions/instant/drinks.dm b/code/modules/reagents/reactions/instant/drinks.dm index 4142f9915e..9fb804e66e 100644 --- a/code/modules/reagents/reactions/instant/drinks.dm +++ b/code/modules/reagents/reactions/instant/drinks.dm @@ -997,13 +997,6 @@ required_reagents = list("tonic" = 1, "holywater" = 1, "honey" = 1) result_amount = 3 -/decl/chemical_reaction/instant/drinks/voxdelight - name = "Vox's Delight" - id = "voxdelight" - result = "voxdelight" - required_reagents = list("phoron" = 3, "fuel" = 1, "water" = 1) - result_amount = 4 - /decl/chemical_reaction/instant/drinks/screamingviking name = "Screaming Viking" id = "screamingviking" diff --git a/code/modules/reagents/reactions/instant/vox.dm b/code/modules/reagents/reactions/instant/vox.dm new file mode 100644 index 0000000000..17f17a3788 --- /dev/null +++ b/code/modules/reagents/reactions/instant/vox.dm @@ -0,0 +1,68 @@ +/decl/chemical_reaction/instant/vox_protoslurry + name = "Vox Protoslurry" + id = "voxslurry" + result = "protoslurry" + result_amount = 4 + required_reagents = list( + "iron" = 1, + "carbon" = 1, + "protein" = 2 + ) + catalysts = list("voxenzyme" = 5) + +/decl/chemical_reaction/instant/vox_medication + name = "Vox Medication" + id = "vox_medication" + result = "voxmeds" + result_amount = 2 + required_reagents = list( + "voxslurry" = 2, + "protein" = 2, + "silicon" = 1 + ) + +/decl/chemical_reaction/instant/vox_dissolve + result_amount = 1 + catalysts = list("voxenzyme" = 1) + +/decl/chemical_reaction/instant/vox_dissolve/egg + name = "Vox Egg Dissolution" + id = "vox_dissolve_egg" + result = "protein" + required_reagents = list("egg" = 1) + +/decl/chemical_reaction/instant/vox_dissolve/woodpulp + name = "Vox Wood Pulp Dissolution" + id = "vox_dissolve_woodpulp" + result = "carbon" + required_reagents = list("woodpulp" = 1) + +/decl/chemical_reaction/instant/vox_dissolve/plasticide + name = "Vox Plasticide Dissolution" + id = "vox_dissolve_plasticide" + result = "carbon" + required_reagents = list("plasticide" = 1) + +/decl/chemical_reaction/instant/vox_dissolve/blood + name = "Vox Blood Dissolution" + id = "vox_dissolve_blood" + result = "iron" + result_amount = 0.5 + required_reagents = list("blood" = 1) + +/decl/chemical_reaction/instant/vox_dissolve/blood/on_reaction(var/datum/reagents/holder, var/created_volume) + . = ..() + if(created_volume) + holder.add_reagent("protein", created_volume) + +/decl/chemical_reaction/instant/vox_booze + name = "Riaaak" + id = "voxbooze" + result = "voxbooze" + required_reagents = list( + "voxslurry" = 5, + "fuel" = 5, + "hydrogen" = 5 + ) + catalysts = list("voxenzyme" = 5) + result_amount = 15 diff --git a/code/modules/reagents/reagents/core.dm b/code/modules/reagents/reagents/core.dm index f9375fa3c1..e3a33633c9 100644 --- a/code/modules/reagents/reagents/core.dm +++ b/code/modules/reagents/reagents/core.dm @@ -263,4 +263,3 @@ ..() if(istype(L)) L.adjust_fire_stacks(amount / 10) // Splashing people with welding fuel to make them easy to ignite! - diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm index e5013c64ab..560ee3dbe7 100644 --- a/code/modules/reagents/reagents/food_drinks.dm +++ b/code/modules/reagents/reagents/food_drinks.dm @@ -4031,26 +4031,6 @@ allergen_type = ALLERGEN_GRAINS|ALLERGEN_STIMULANT //Made from whiskey(grains), cola (caffeine) and vodka(grains) -/datum/reagent/ethanol/voxdelight - name = "Vox's Delight" - id = "voxdelight" - description = "A dangerous combination of all things flammable. Why would you drink this?" - taste_description = "corrosive death" - color = "#7c003a" // rgb(124, 0, 58) - strength = 10 - - glass_name = "Vox's Delight" - glass_desc = "Not recommended if you enjoy having organs." - -/datum/reagent/drink/voxdelight/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - ..() - if(alien == IS_DIONA) - return - if(alien == IS_VOX) - M.adjustToxLoss(-0.5 * removed) - return - M.adjustToxLoss(3 * removed) - /datum/reagent/ethanol/screamingviking name = "Screaming Viking" id = "screamingviking" diff --git a/code/modules/reagents/reagents/vox.dm b/code/modules/reagents/reagents/vox.dm new file mode 100644 index 0000000000..d4e9b9447c --- /dev/null +++ b/code/modules/reagents/reagents/vox.dm @@ -0,0 +1,106 @@ +// Solvent - used in vox chemistry and stomachs. +/datum/reagent/acid/voxenzyme + name = "alkahest" + id = "voxenzyme" + description = "A seething slurry of pseudo-living proteins, acids and enzymes, utterly alien in composition and capable of dissolving almost anything." + taste_description = "salt and burning" + reagent_state = LIQUID + color = COLOR_CYAN + power = 12 + meltdose = 1 + scannable = FALSE + +// Vox slurry - used to fuel machines, feed vox and gear, and as an ingredient in the biofoundry +/datum/reagent/toxin/voxslurry + name = "protoslurry" + id = "voxslurry" + taste_description = "coppery slime" + description = "A complex slurry of lipids, proteins, metal particulate and long polymer chains. Ubiquitous to vox-inhabited stations and equipment." + strength = 6 + scannable = FALSE + +/datum/reagent/toxin/voxslurry/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(alien != IS_VOX) + return ..() + M.adjust_nutrition(12 * removed) + M.heal_organ_damage(0.5 * removed, 0.5 * removed) + M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) + +/datum/reagent/toxin/voxslurry/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) + affect_blood(M, alien, removed) + +// General-purpose vox medication +/datum/reagent/toxin/voxmeds + name = "repair gel" + id = "voxmeds" + taste_description = "fizzing sweetness" + description = "A complex serum composed of vox-manufactured nanomachines, complex protein chains and microscopic bundles of metallic fibers." + strength = 8 + scannable = FALSE + +/datum/reagent/toxin/voxmeds/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) + affect_blood(M, alien, removed) + +/datum/reagent/toxin/voxmeds/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + + if(alien != IS_VOX) + // Mostly copied from mutagen. + . = ..() + if(!M.dna) + return + if(prob(removed * 10)) + randmuti(M) + if(prob(98)) + randmutb(M) + else + randmutg(M) + domutcheck(M, null) + M.UpdateAppearance() + if(prob(removed * 40)) + randmuti(M) + to_chat(M, SPAN_WARNING("You feel odd!")) + M.apply_effect(10 * removed, IRRADIATE, 0) + return + + M.adjustOxyLoss(-3 * removed) + M.heal_organ_damage(1.5 * removed, 1.5 * removed) + M.adjustToxLoss(-1.5 * removed) + + // Copied from peridaxon for the time being. + var/mob/living/carbon/human/H = M + for(var/obj/item/organ/I in H.internal_organs) + if(I.robotic >= ORGAN_ROBOT) + continue + if(I.damage > 0) + I.damage = max(I.damage - removed, 0) + H.Confuse(5) + if(I.damage <= 5 && I.organ_tag == O_EYES) + H.sdisabilities &= ~BLIND + +/datum/reagent/ethanol/riaaak // Vox moonshine + name = "riaaak" + id = "voxbooze" + description = "Vox clades brew this noxious concoction in half-empty fuel tanks using whatever dregs come to hand." + taste_description = "burning, acrid foulness" + taste_mult = 2.5 + color = "#22aa88" + strength = 7 + + glass_name = "riaaak" + glass_desc = "An oily green brew that will knock even a Vox on its tail." + +/datum/reagent/ethanol/riaaak/affect_ingest(mob/living/carbon/M, alien, removed) + . = ..() + if(alien != IS_VOX && alien != IS_DIONA) + handle_nonvox_effects(M, removed, CHEM_INGEST) + +/datum/reagent/ethanol/riaaak/affect_blood(mob/living/carbon/M, alien, removed) + . = ..() + if(alien != IS_VOX && alien != IS_DIONA) + handle_nonvox_effects(M, removed, CHEM_BLOOD) + +/datum/reagent/ethanol/riaaak/proc/handle_nonvox_effects(var/mob/living/carbon/M, var/removed, var/method) + // todo: eye damage, stomach damage, poisoning? + var/dam = removed * 5 * M.species.chem_strength_tox // arbitrary + if(dam) + M.adjustToxLoss(dam) diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index c138e6093e..7f7f890264 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/polaris.dme b/polaris.dme index 3038694fc1..cec4e64baa 100644 --- a/polaris.dme +++ b/polaris.dme @@ -2953,6 +2953,7 @@ #include "code\modules\reagents\reactions\instant\drinks.dm" #include "code\modules\reagents\reactions\instant\food.dm" #include "code\modules\reagents\reactions\instant\instant.dm" +#include "code\modules\reagents\reactions\instant\vox.dm" #include "code\modules\reagents\reagent_containers\_reagent_containers.dm" #include "code\modules\reagents\reagent_containers\blood_pack.dm" #include "code\modules\reagents\reagent_containers\borghypo.dm" @@ -2974,6 +2975,7 @@ #include "code\modules\reagents\reagents\modifiers.dm" #include "code\modules\reagents\reagents\other.dm" #include "code\modules\reagents\reagents\toxins.dm" +#include "code\modules\reagents\reagents\vox.dm" #include "code\modules\recycling\conveyor2.dm" #include "code\modules\recycling\disposal-construction.dm" #include "code\modules\recycling\disposal.dm"