diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index b93d72c73f..0df4174d1b 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -117,6 +117,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ var/obj/effect/overlay/aiholo/hologram = new(T)//Spawn a blank effect at the location. //VOREStation Edit to specific type for adding vars hologram.master = A //VOREStation Edit: So you can reference the master AI from in the hologram procs hologram.icon = A.holo_icon + hologram.pixel_x = 16 - round(A.holo_icon.Width() / 2) //VOREStation Edit: centers the hologram on the tile //hologram.mouse_opacity = 0//So you can't click on it. //VOREStation Removal hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. hologram.anchored = TRUE//So space wind cannot drag it. diff --git a/code/modules/mob/dead/corpse.dm b/code/modules/mob/dead/corpse.dm index 1b422aae65..b02859f451 100644 --- a/code/modules/mob/dead/corpse.dm +++ b/code/modules/mob/dead/corpse.dm @@ -26,14 +26,26 @@ var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access. var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID + var/corpsesynthtype = 0 // 0 for organic, 1 for drone, 2 for posibrain + var/corpsesynthbrand = "Unbranded" /obj/effect/landmark/mobcorpse/New() createCorpse() /obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it. var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc) - M.real_name = src.name + M.real_name = generateCorpseName() M.set_stat(DEAD) //Kills the new mob + if(corpsesynthtype > 0) + to_world("Synth") + if(!corpsesynthbrand) + corpsesynthbrand = "Unbranded" + for(var/obj/item/organ/external/O in M.organs) + switch(corpsesynthtype) + if(1) + O.digitize(corpsesynthbrand) + if(2) + O.robotize(corpsesynthbrand) if(src.corpseuniform) M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform) if(src.corpsesuit) @@ -81,7 +93,8 @@ delete_me = 1 qdel(src) - +/obj/effect/landmark/mobcorpse/proc/generateCorpseName() + return name //List of different corpse types diff --git a/code/modules/mob/dead/corpse_vr.dm b/code/modules/mob/dead/corpse_vr.dm index 82399a8328..487de64d95 100644 --- a/code/modules/mob/dead/corpse_vr.dm +++ b/code/modules/mob/dead/corpse_vr.dm @@ -1,2 +1,26 @@ /obj/effect/landmark/mobcorpse/syndicatecommando - name = "Mercenary Commando" \ No newline at end of file + name = "Mercenary Commando" + +/obj/effect/landmark/mobcorpse/syndicatesoldier/drone + name = "Mercenary Drone" + corpseidjob = "Operative" + corpsesynthtype = 1 + corpsesynthbrand = "Xion" + +/obj/effect/landmark/mobcorpse/syndicatesoldier/drone/generateCorpseName() + var/letter = pick(list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) + var/number = rand(0,999) + var/purpose = pick(list("Recon","Combat","Kill","Guard","Scout","Murder","Capture","Raid","Attack","Battle")) + return "[letter]-[number] [purpose] Droid" + +/obj/effect/landmark/mobcorpse/syndicatecommando/drone + name = "Mercenary Drone" + corpseidjob = "Operative" + corpsesynthtype = 1 + corpsesynthbrand = "Xion" + +/obj/effect/landmark/mobcorpse/syndicatecommando/drone/generateCorpseName() + var/letter = pick(list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) + var/number = rand(0,999) + var/purpose = pick(list("Recon","Combat","Kill","Guard","Scout","Murder","Capture","Raid","Attack","Battle")) + return "[letter]-[number] [purpose] Droid" diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index a21a03957c..7b3b1f5cce 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -8,6 +8,8 @@ var/organic_food_coeff = 1 var/synthetic_food_coeff = 0 + var/robo_ethanol_proc = 0 //can we get fuel from booze, as a synth? + var/robo_ethanol_drunk = 0 //can we get *drunk* from booze, as a synth? var/digestion_efficiency = 1 //VORE specific digestion var //var/vore_numbing = 0 var/metabolism = 0.0015 diff --git a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm index 89df1a0a34..649e35850a 100644 --- a/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/prommie_blob.dm @@ -63,6 +63,12 @@ /mob/living/simple_mob/slime/promethean/Destroy() humanform = null + drop_l_hand() + drop_r_hand() + mob_radio.forceMove(loc) + mob_radio = null + myid.forceMove(loc) + myid = null vore_organs = null vore_selected = null set_light(0) @@ -70,6 +76,8 @@ /mob/living/carbon/human/Destroy() if(stored_blob) + stored_blob.l_hand.forceMove(loc) + stored_blob.r_hand.forceMove(loc) stored_blob = null qdel(stored_blob) return ..() diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index 32461bad1c..279dd58f89 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -253,6 +253,22 @@ YW change end */ var_changes = list("organic_food_coeff" = 0, "synthetic_food_coeff" = 0.6) excludes = list(/datum/trait/neutral/biofuel_value_down) +/datum/trait/neutral/synth_ethanolburner + name = "Ethanol Burner" + desc = "You are able to gain energy through consuming and processing alcohol. The more alcoholic it is, the more energy you gain. Doesn't allow you to get drunk by itself (for that, take Ethanol Simulator)." + cost = 0 + custom_only = FALSE + can_take = SYNTHETICS + var_changes = list("robo_ethanol_proc" = 1) + +/datum/trait/neutral/synth_ethanol_sim + name = "Ethanol Simulator" + desc = "An unusual modification allows your synthetic body to simulate all but the lethal effects of ingested alcohols. You'll get dizzy, slur your speech, suffer temporary loss of vision and even pass out! But hey, at least you don't have a liver to destroy." + cost = 0 + custom_only = FALSE + can_take = SYNTHETICS + var_changes = list("robo_ethanol_drunk" = 1) + /datum/trait/neutral/glowing_eyes name = "Glowing Eyes" desc = "Your eyes show up above darkness. SPOOKY! And kinda edgey too." diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 39667eceda..051fe272b5 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -663,9 +663,53 @@ var/list/ai_verbs_default = list( "female skrell" ) input = tgui_input_list(usr, "Please select a hologram:", "Hologram Choice", icon_list) - - - + if(input) + qdel(holo_icon) + switch(input) + if("default") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo1")) + if("floating face") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo2")) + if("singularity") + holo_icon = getHologramIcon(icon('icons/obj/singularity.dmi',"singularity_s1")) + if("drone") + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"drone")) + if("carp") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holo4")) + if("spider") + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"nurse")) + if("bear") + holo_icon = getHologramIcon(icon('icons/mob/animal.dmi',"brownbear")) + if("slime") + holo_icon = getHologramIcon(icon('icons/mob/slimes.dmi',"cerulean adult slime")) + if("ian") + holo_icon = getHologramIcon(icon('icons/mob/pets.dmi',"corgi")) + if("runtime") + holo_icon = getHologramIcon(icon('icons/mob/pets.dmi',"cat")) + if("poly") + holo_icon = getHologramIcon(icon('icons/mob/birds.dmi',"poly-flap")) + if("pun pun") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"punpun")) + if("male human") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holohumm")) + if("female human") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holohumf")) + if("male unathi") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holounam")) + if("female unathi") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holounaf")) + if("male tajaran") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotajm")) + if("female tajaran") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotajf")) + if("male tesharii") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotesm")) + if("female tesharii") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holotesf")) + if("male skrell") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holoskrm")) + if("female skrell") + holo_icon = getHologramIcon(icon('icons/mob/AI.dmi',"holoskrf")) //Toggles the luminosity and applies it by re-entereing the camera. /mob/living/silicon/ai/proc/toggle_camera_light() diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs_vr.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs_vr.dm index 67e396fb4d..a5d0f827e2 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs_vr.dm @@ -23,3 +23,120 @@ min_n2 = 0 max_n2 = 0 minbodytemp = 0 + +/datum/say_list/merc/drone + speak = list("Area patrol in progress.", + "All systems nominal.", + "Situation analysis finalized. No hostiles detected.", + "Reporting status: all functions normal.", + "Location under control.") + emote_see = list("beeps", "pings", "twitches erratically", "looks around") + + say_understood = list("Command acknowledged.") + say_cannot = list("Command error.") + say_maybe_target = list("Please come out.", "Where did you go?", "Scanning...") + say_got_target = list("Engaging.", "Targeting.", "Combat initiated.", "Following protocol. Eliminating hostile.") + say_threaten = list("This location is under control. You have %UNDEFINED% seconds to depart.", "Your presence at these premises must be terminated.") + say_stand_down = list("Your compliance is welcome.") + say_escalate = list("Combat initiated.", "Your termination is inevitable.") + + threaten_sound = 'sound/weapons/TargetOn.ogg' + stand_down_sound = 'sound/weapons/TargetOff.ogg' + +/mob/living/simple_mob/humanoid/merc/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/melee/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/melee/sword/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/smg/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/rifle/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/rifle/mag/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/laser/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/ionrifle/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/grenadier/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/technician/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/ranged/sniper/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat armor." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier/drone + +/mob/living/simple_mob/humanoid/merc/melee/sword/space/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat spacesuit." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatecommando/drone + +/mob/living/simple_mob/humanoid/merc/ranged/space/drone + name = "combat droid" + desc = "A set of prosthetics, piloted by simplistic combat algorhithm and dressed in combat spacesuit." + tt_desc = null + say_list_type = /datum/say_list/merc/drone + corpse = /obj/effect/landmark/mobcorpse/syndicatecommando/drone \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm index c484d041c7..35753bf2ed 100644 --- a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm @@ -249,6 +249,13 @@ icon_state = "sepulchre_wingsc" do_colouration = 1 +/datum/sprite_accessory/wing/sepulchre_c_yw_w + name = "demon wings (colorable, whitescale)" + desc = "" + icon_state = "sepulchre_wingsc_w" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + /datum/sprite_accessory/wing/cyberdragon name = "Cyber dragon wing (colorable)" desc = "" diff --git a/code/modules/organs/organ_external_vr.dm b/code/modules/organs/organ_external_vr.dm index 0e3fb07d9e..a49cfca980 100644 --- a/code/modules/organs/organ_external_vr.dm +++ b/code/modules/organs/organ_external_vr.dm @@ -13,3 +13,6 @@ min_broken_damage = o_min_broken_damage else return ..() + +/obj/item/organ/external/digitize(var/company, var/skip_prosthetics = FALSE, var/keep_organs = FALSE) + robotize(company, skip_prosthetics, keep_organs) diff --git a/code/modules/reagents/reagents/dispenser.dm b/code/modules/reagents/reagents/dispenser.dm index 90d8ea9e2a..9b01836a61 100644 --- a/code/modules/reagents/reagents/dispenser.dm +++ b/code/modules/reagents/reagents/dispenser.dm @@ -106,6 +106,8 @@ glass_desc = "A well-known alcohol with a variety of applications." allergen_factor = 1 //simulates mixed drinks containing less of the allergen, as they have only a single actual reagent unlike food + affects_robots = 1 //kiss my shiny metal ass + /datum/reagent/ethanol/touch_mob(var/mob/living/L, var/amount) ..() if(istype(L)) @@ -115,83 +117,86 @@ if(issmall(M)) removed *= 2 - if(alien == IS_SLIME) - M.adjustToxLoss(removed) //Sterilizing, if only by a little bit. Also already doubled above. - var/strength_mod = 3 * M.species.chem_strength_alcohol //Alcohol is 3x stronger when injected into the veins. if(!strength_mod) return - M.add_chemical_effect(CE_ALCOHOL, 1) - var/effective_dose = dose * strength_mod * (1 + volume/60) //drinking a LOT will make you go down faster + if(!(M.isSynthetic())) + M.add_chemical_effect(CE_ALCOHOL, 1) + var/effective_dose = dose * strength_mod * (1 + volume/60) //drinking a LOT will make you go down faster - if(effective_dose >= strength) // Early warning - M.make_dizzy(18) // It is decreased at the speed of 3 per tick - if(effective_dose >= strength * 2) // Slurring - M.slurring = max(M.slurring, 90) - if(effective_dose >= strength * 3) // Confusion - walking in random directions - M.Confuse(60) - if(effective_dose >= strength * 4) // Blurry vision - M.eye_blurry = max(M.eye_blurry, 30) - if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep - M.drowsyness = max(M.drowsyness, 60) - if(effective_dose >= strength * 6) // Toxic dose - M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity*3) - if(effective_dose >= strength * 7) // Pass out - M.Paralyse(60) - M.Sleeping(90) + if(effective_dose >= strength) // Early warning + M.make_dizzy(18) // It is decreased at the speed of 3 per tick + if(effective_dose >= strength * 2) // Slurring + M.slurring = max(M.slurring, 90) + if(effective_dose >= strength * 3) // Confusion - walking in random directions + M.Confuse(60) + if(effective_dose >= strength * 4) // Blurry vision + M.eye_blurry = max(M.eye_blurry, 30) + if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep + M.drowsyness = max(M.drowsyness, 60) + if(effective_dose >= strength * 6) // Toxic dose + M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity*3) + if(effective_dose >= strength * 7) // Pass out + M.Paralyse(60) + M.Sleeping(90) - if(druggy != 0) - M.druggy = max(M.druggy, druggy*3) + if(druggy != 0) + M.druggy = max(M.druggy, druggy*3) - if(adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 - M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - if(adj_temp < 0 && M.bodytemperature > targ_temp) - M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + if(adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 + M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + if(adj_temp < 0 && M.bodytemperature > targ_temp) + M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - if(halluci) - M.hallucination = max(M.hallucination, halluci*3) + if(halluci) + M.hallucination = max(M.hallucination, halluci*3) /datum/reagent/ethanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - + var/ep_base_power = 60 //base nutrition gain for ethanol-processing synthetics, reduced by alcohol strength + var/ep_final_mod = 30 //final divisor on nutrition gain if(issmall(M)) removed *= 2 - if(!(M.species.allergens & allergen_type)) //assuming it doesn't cause a horrible reaction, we get the nutrition effects + if(!(M.species.allergens & allergen_type) && !(M.isSynthetic())) //assuming it doesn't cause a horrible reaction, we get the nutrition effects - VOREStation Edit (added synth check) M.adjust_nutrition(nutriment_factor * removed) + if(M.isSynthetic() && M.nutrition < 500 && M.species.robo_ethanol_proc) + M.adjust_nutrition(round(max(0,ep_base_power - strength) * removed)/ep_final_mod) //the stronger it is, the more juice you gain + var/effective_dose = dose * M.species.chem_strength_alcohol if(!effective_dose) return - M.add_chemical_effect(CE_ALCOHOL, 1) + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + M.add_chemical_effect(CE_ALCOHOL, 1) - if(effective_dose >= strength) // Early warning - M.make_dizzy(6) // It is decreased at the speed of 3 per tick - if(effective_dose >= strength * 2) // Slurring - M.slurring = max(M.slurring, 30) - if(effective_dose >= strength * 3) // Confusion - walking in random directions - M.Confuse(20) - if(effective_dose >= strength * 4) // Blurry vision - M.eye_blurry = max(M.eye_blurry, 10) - if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep - M.drowsyness = max(M.drowsyness, 20) - if(effective_dose >= strength * 6) // Toxic dose - M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity) - if(effective_dose >= strength * 7) // Pass out - M.Paralyse(20) - M.Sleeping(30) + if(effective_dose >= strength) // Early warning + M.make_dizzy(6) // It is decreased at the speed of 3 per tick + if(effective_dose >= strength * 2) // Slurring + M.slurring = max(M.slurring, 30) + if(effective_dose >= strength * 3) // Confusion - walking in random directions + M.Confuse(20) + if(effective_dose >= strength * 4) // Blurry vision + M.eye_blurry = max(M.eye_blurry, 10) + if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep + M.drowsyness = max(M.drowsyness, 20) + if(effective_dose >= strength * 6) // Toxic dose + M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity) + if(effective_dose >= strength * 7) // Pass out + M.Paralyse(20) + M.Sleeping(30) - if(druggy != 0) - M.druggy = max(M.druggy, druggy) + if(druggy != 0) + M.druggy = max(M.druggy, druggy) - if(adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 - M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) - if(adj_temp < 0 && M.bodytemperature > targ_temp) - M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + if(halluci) + M.hallucination = max(M.hallucination, halluci) - if(halluci) - M.hallucination = max(M.hallucination, halluci) + if(adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055 + M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) + if(adj_temp < 0 && M.bodytemperature > targ_temp) + M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT)) /datum/reagent/ethanol/touch_obj(var/obj/O) ..() diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm index d26773ecb0..c530dbc1e4 100644 --- a/code/modules/reagents/reagents/food_drinks.dm +++ b/code/modules/reagents/reagents/food_drinks.dm @@ -2577,9 +2577,10 @@ /datum/reagent/ethanol/beer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(alien == IS_DIONA) - return - M.jitteriness = max(M.jitteriness - 3, 0) + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + if(alien == IS_DIONA) + return + M.jitteriness = max(M.jitteriness - 3, 0) /datum/reagent/ethanol/beer/lite name = "Lite Beer" @@ -2639,7 +2640,8 @@ ..() if(alien == IS_DIONA) return - M.dizziness +=5 + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + M.dizziness +=5 /datum/reagent/ethanol/firepunch name = "Fire Punch" @@ -2671,18 +2673,19 @@ allergen_type = ALLERGEN_COFFEE|ALLERGEN_STIMULANT //Contains coffee or is made from coffee /datum/reagent/ethanol/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) - if(alien == IS_DIONA) - return - ..() - M.dizziness = max(0, M.dizziness - 5) - M.drowsyness = max(0, M.drowsyness - 3) - M.AdjustSleeping(-2) - if(M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if(!(M.isSynthetic())) + if(alien == IS_DIONA) + return + ..() + M.dizziness = max(0, M.dizziness - 5) + M.drowsyness = max(0, M.drowsyness - 3) + M.AdjustSleeping(-2) + if(M.bodytemperature > 310) + M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - //if(alien == IS_TAJARA) - //M.adjustToxLoss(0.5 * removed) - //M.make_jittery(4) //extra sensitive to caffine + //if(alien == IS_TAJARA) + //M.adjustToxLoss(0.5 * removed) + //M.make_jittery(4) //extra sensitive to caffine /datum/reagent/ethanol/coffee/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) //if(alien == IS_TAJARA) @@ -2696,7 +2699,8 @@ //if(alien == IS_TAJARA) //M.adjustToxLoss(4 * REM) //M.apply_effect(3, STUTTER) //VOREStation Edit end - M.make_jittery(5) + if(!(M.isSynthetic())) + M.make_jittery(5) /datum/reagent/ethanol/coffee/kahlua name = "Kahlua" @@ -2800,12 +2804,14 @@ /datum/reagent/ethanol/thirteenloko/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(alien == IS_DIONA) - return - M.drowsyness = max(0, M.drowsyness - 7) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) - M.make_jittery(5) + + if(!(M.isSynthetic())) + if(alien == IS_DIONA) + return + M.drowsyness = max(0, M.drowsyness - 7) + if (M.bodytemperature > 310) + M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + M.make_jittery(5) /datum/reagent/ethanol/vermouth name = "Vermouth" @@ -2835,7 +2841,8 @@ /datum/reagent/ethanol/vodka/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - M.apply_effect(max(M.radiation - 1 * removed, 0), IRRADIATE, check_protection = 0) + if(!(M.isSynthetic())) + M.apply_effect(max(M.radiation - 1 * removed, 0), IRRADIATE, check_protection = 0) /datum/reagent/ethanol/whiskey name = "Whiskey" @@ -2904,16 +2911,18 @@ /datum/reagent/ethanol/pwine/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(dose > 30) - M.adjustToxLoss(2 * removed) - if(dose > 60 && ishuman(M) && prob(5)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/heart/L = H.internal_organs_by_name[O_HEART] - if (L && istype(L)) - if(dose < 120) - L.take_damage(10 * removed, 0) - else - L.take_damage(100, 0) + + if(!(M.isSynthetic())) + if(dose > 30) + M.adjustToxLoss(2 * removed) + if(dose > 60 && ishuman(M) && prob(5)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/internal/heart/L = H.internal_organs_by_name[O_HEART] + if (L && istype(L)) + if(dose < 120) + L.take_damage(10 * removed, 0) + else + L.take_damage(100, 0) /datum/reagent/ethanol/wine/champagne name = "Champagne" @@ -3112,7 +3121,9 @@ /datum/reagent/ethanol/beepsky_smash/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - M.Stun(2) + + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + M.Stun(2) /datum/reagent/ethanol/bilk name = "Bilk" @@ -3549,7 +3560,9 @@ /datum/reagent/ethanol/neurotoxin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - M.Weaken(3) + + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + M.Weaken(3) /datum/reagent/ethanol/patron name = "Patron" @@ -3799,16 +3812,18 @@ /datum/reagent/ethanol/unathiliquor/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(alien == IS_DIONA) - return - var/drug_strength = 10 - if(alien == IS_SKRELL) - drug_strength = drug_strength * 0.8 + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + if(alien == IS_DIONA) + return - M.druggy = max(M.druggy, drug_strength) - if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained()) - step(M, pick(cardinal)) + var/drug_strength = 10 + if(alien == IS_SKRELL) + drug_strength = drug_strength * 0.8 + + M.druggy = max(M.druggy, drug_strength) + if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained()) + step(M, pick(cardinal)) /datum/reagent/ethanol/sakebomb name = "Sake Bomb" @@ -4337,19 +4352,21 @@ /datum/reagent/ethanol/godka/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - M.apply_effect(max(M.radiation - 5 * removed, 0), IRRADIATE, check_protection = 0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.species.has_organ[O_LIVER]) - var/obj/item/organ/L = H.internal_organs_by_name[O_LIVER] - if(!L) - return - var/adjust_liver = rand(-3, 2) - if(prob(L.damage)) - to_chat(M, "You feel woozy...") - L.damage = max(L.damage + (adjust_liver * removed), 0) - var/adjust_tox = rand(-4, 2) - M.adjustToxLoss(adjust_tox * removed) + + if(!(M.isSynthetic())) + M.apply_effect(max(M.radiation - 5 * removed, 0), IRRADIATE, check_protection = 0) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.species.has_organ[O_LIVER]) + var/obj/item/organ/L = H.internal_organs_by_name[O_LIVER] + if(!L) + return + var/adjust_liver = rand(-3, 2) + if(prob(L.damage)) + to_chat(M, "You feel woozy...") + L.damage = max(L.damage + (adjust_liver * removed), 0) + var/adjust_tox = rand(-4, 2) + M.adjustToxLoss(adjust_tox * removed) /datum/reagent/ethanol/holywine name = "Angel Ichor" diff --git a/code/modules/reagents/reagents/food_drinks_vr.dm b/code/modules/reagents/reagents/food_drinks_vr.dm index f395601c07..1f46f0cfbc 100644 --- a/code/modules/reagents/reagents/food_drinks_vr.dm +++ b/code/modules/reagents/reagents/food_drinks_vr.dm @@ -48,10 +48,11 @@ /datum/reagent/ethanol/deathbell/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(dose * strength >= strength) // Early warning - M.make_dizzy(24) // Intentionally higher than normal to compensate for it's previous effects. - if(dose * strength >= strength * 2.5) // Slurring takes longer. Again, intentional. - M.slurring = max(M.slurring, 30) + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + if(dose * strength >= strength) // Early warning + M.make_dizzy(24) // Intentionally higher than normal to compensate for it's previous effects. + if(dose * strength >= strength * 2.5) // Slurring takes longer. Again, intentional. + M.slurring = max(M.slurring, 30) /datum/reagent/ethanol/burnout name = "Burnout" @@ -70,22 +71,23 @@ /datum/reagent/ethanol/burnout/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() // Deathbell effects. - if(dose * strength >= strength) - M.make_dizzy(24) - if(dose * strength >= strength * 2.5) - M.slurring = max(M.slurring, 30) - // Simulating heat effects of spice. Without spice. - if(alien == IS_DIONA || alien == IS_ALRAUNE) - return - else if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(!H.can_feel_pain()) + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + if(dose * strength >= strength) + M.make_dizzy(24) + if(dose * strength >= strength * 2.5) + M.slurring = max(M.slurring, 30) + // Simulating heat effects of spice. Without spice. + if(alien == IS_DIONA || alien == IS_ALRAUNE) return - else - if((dose < 5) && (dose == metabolism || prob(5))) - to_chat(M, "Your insides feel uncomfortably hot!") - if(dose >= 5 && prob(5)) - M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]", pick("You feel like your insides are burning!", "You feel like your insides are on fire!", "You feel like your belly is full of lava!")) + else if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(!H.can_feel_pain()) + return + else + if((dose < 5) && (dose == metabolism || prob(5))) + to_chat(M, "Your insides feel uncomfortably hot!") + if(dose >= 5 && prob(5)) + M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]", pick("You feel like your insides are burning!", "You feel like your insides are on fire!", "You feel like your belly is full of lava!")) /datum/reagent/ethanol/monstertamer name = "Monster Tamer" @@ -159,27 +161,28 @@ /datum/reagent/ethanol/monstertamer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(M.species.organic_food_coeff) //it's still food! - switch(alien) - if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein. - if(IS_SKRELL) - M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein. - if(IS_TESHARI) - M.adjust_nutrition(alt_nutriment_factor * 1.2 * removed) //Give them the same nutrition they would get from protein. - if(IS_UNATHI) - M.adjust_nutrition(alt_nutriment_factor * 1.125 * removed) //Give them the same nutrition they would get from protein. - //Takes into account the 0.5 factor for all nutriment which is applied on top of the 2.25 factor for protein. - //Chimera don't need their own case here since their factors for nutriment and protein cancel out. - else - M.adjust_nutrition(alt_nutriment_factor * removed) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.feral > 0 && H.nutrition > 150 && H.traumatic_shock < 20 && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling - H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm. - if (H.feral <=0) //check if they're unferalled - H.feral = 0 - to_chat(H, "Your mind starts to clear, soothed into a state of clarity as your senses return.") - log_and_message_admins("is no longer feral.", H) + if(!(M.isSynthetic())) + if(M.species.organic_food_coeff) //it's still food! + switch(alien) + if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein. + if(IS_SKRELL) + M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein. + if(IS_TESHARI) + M.adjust_nutrition(alt_nutriment_factor * 1.2 * removed) //Give them the same nutrition they would get from protein. + if(IS_UNATHI) + M.adjust_nutrition(alt_nutriment_factor * 1.125 * removed) //Give them the same nutrition they would get from protein. + //Takes into account the 0.5 factor for all nutriment which is applied on top of the 2.25 factor for protein. + //Chimera don't need their own case here since their factors for nutriment and protein cancel out. + else + M.adjust_nutrition(alt_nutriment_factor * removed) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.feral > 0 && H.nutrition > 150 && H.traumatic_shock < 20 && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling + H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm. + if (H.feral <=0) //check if they're unferalled + H.feral = 0 + to_chat(H, "Your mind starts to clear, soothed into a state of clarity as your senses return.") + log_and_message_admins("is no longer feral.", H) /datum/reagent/ethanol/monstertamer/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -216,10 +219,11 @@ /datum/reagent/ethanol/galacticpanic/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(dose * strength >= strength) // Early warning - M.make_dizzy(24) // Intentionally higher than normal to compensate for it's previous effects. - if(dose * strength >= strength * 2.5) // Slurring takes longer. Again, intentional. - M.slurring = max(M.slurring, 30) + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + if(dose * strength >= strength) // Early warning + M.make_dizzy(24) // Intentionally higher than normal to compensate for it's previous effects. + if(dose * strength >= strength * 2.5) // Slurring takes longer. Again, intentional. + M.slurring = max(M.slurring, 30) /datum/reagent/ethanol/bulldog name = "Space Bulldog" @@ -309,7 +313,9 @@ /datum/reagent/ethanol/russianroulette/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - M.Stun(2) + + if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) + M.Stun(2) /datum/reagent/ethanol/lovemaker name = "The Love Maker" @@ -460,27 +466,28 @@ /datum/reagent/ethanol/hairoftherat/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() - if(M.species.organic_food_coeff) //it's still food! - switch(alien) - if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein. - if(IS_SKRELL) - M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein. - if(IS_TESHARI) - M.nutrition += (alt_nutriment_factor * 1.2 * removed) //Give them the same nutrition they would get from protein. - if(IS_UNATHI) - M.nutrition += (alt_nutriment_factor * 1.125 * removed) //Give them the same nutrition they would get from protein. - //Takes into account the 0.5 factor for all nutriment which is applied on top of the 2.25 factor for protein. - //Chimera don't need their own case here since their factors for nutriment and protein cancel out. - else - M.nutrition += (alt_nutriment_factor * removed) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) // same check as feral triggers to stop them immediately re-feralling - H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm. - if (H.feral <=0) //check if they're unferalled - H.feral = 0 - to_chat(H, "Your mind starts to clear, soothed into a state of clarity as your senses return.") - log_and_message_admins("is no longer feral.", H) + if(!(M.isSynthetic())) + if(M.species.organic_food_coeff) //it's still food! + switch(alien) + if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein. + if(IS_SKRELL) + M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein. + if(IS_TESHARI) + M.nutrition += (alt_nutriment_factor * 1.2 * removed) //Give them the same nutrition they would get from protein. + if(IS_UNATHI) + M.nutrition += (alt_nutriment_factor * 1.125 * removed) //Give them the same nutrition they would get from protein. + //Takes into account the 0.5 factor for all nutriment which is applied on top of the 2.25 factor for protein. + //Chimera don't need their own case here since their factors for nutriment and protein cancel out. + else + M.nutrition += (alt_nutriment_factor * removed) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) // same check as feral triggers to stop them immediately re-feralling + H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm. + if (H.feral <=0) //check if they're unferalled + H.feral = 0 + to_chat(H, "Your mind starts to clear, soothed into a state of clarity as your senses return.") + log_and_message_admins("is no longer feral.", H) /datum/reagent/ethanol/hairoftherat/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) ..() diff --git a/icons/mob/vore/wings_vr.dmi b/icons/mob/vore/wings_vr.dmi index 5d62b7bcd8..5edced1ac9 100644 Binary files a/icons/mob/vore/wings_vr.dmi and b/icons/mob/vore/wings_vr.dmi differ diff --git a/vorestation.dme b/vorestation.dme index efb167bc76..afb2c73f3c 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1871,7 +1871,6 @@ #include "code\modules\asset_cache\asset_list.dm" #include "code\modules\asset_cache\asset_list_items.dm" #include "code\modules\awaymissions\bluespaceartillery.dm" -#include "code\modules\awaymissions\corpse.dm" #include "code\modules\awaymissions\exile.dm" #include "code\modules\awaymissions\gateway.dm" #include "code\modules\awaymissions\gateway_vr.dm"