diff --git a/baystation12.dme b/baystation12.dme index af20b5bf301..a1637015425 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -314,6 +314,7 @@ #include "code\game\machinery\newscaster.dm" #include "code\game\machinery\OpTable.dm" #include "code\game\machinery\overview.dm" +#include "code\game\machinery\podmen.dm" #include "code\game\machinery\portable_turret.dm" #include "code\game\machinery\recharger.dm" #include "code\game\machinery\rechargestation.dm" diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm index 9e26cb48fdb..bfea9a3b22b 100644 --- a/code/defines/obj/hydro.dm +++ b/code/defines/obj/hydro.dm @@ -81,30 +81,6 @@ plant_type = 2 growthstages = 3 -/obj/item/seeds/replicapod - name = "pack of replica pod seeds" - desc = "These seeds grow into replica pods. They say these are used to harvest humans." - icon_state = "seed-replicapod" - mypath = "/obj/item/seeds/replicapod" - species = "replicapod" - plantname = "Replica Pod" - productname = "/mob/living/carbon/human" //verrry special -- Urist - lifespan = 50 //no idea what those do - endurance = 8 - maturation = 10 - production = 10 - yield = 1 //seeds if there isn't a dna inside - oneharvest = 1 - potency = 30 - plant_type = 0 - growthstages = 6 - var/ui = null //for storing the guy - var/se = null - var/ckey = null - var/realName = null - var/datum/mind/mind = null - gender = MALE - /obj/item/seeds/grapeseed name = "pack of grape seeds" desc = "These seeds grow into grape vines." diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm index 5d187b337c7..a0f8c371e41 100644 --- a/code/game/machinery/hydroponics.dm +++ b/code/game/machinery/hydroponics.dm @@ -915,115 +915,13 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob) parent.update_tray() -/obj/item/seeds/replicapod/harvest(mob/user = usr) //now that one is fun -- Urist - var/obj/machinery/hydroponics/parent = loc - var/make_podman = 0 - var/mob/ghost - if(ckey && config.revival_pod_plants) - ghost = find_dead_player("[ckey]") - if(ismob(ghost)) - if(istype(ghost,/mob/dead/observer)) - var/mob/dead/observer/O = ghost - if(istype(mind,/datum/mind)) - if(O.can_reenter_corpse) - make_podman = 1 - else - make_podman = 1 - - if(make_podman) //all conditions met! - var/mob/living/carbon/human/podman = new /mob/living/carbon/human(parent.loc) - if(realName) - podman.real_name = realName - else - podman.real_name = "Pod Person [rand(0,999)]" - var/oldactive = mind.active - mind.active = 1 - mind.transfer_to(podman) - mind.active = oldactive - // -- Mode/mind specific stuff goes here. TODO! Broken :( Should be merged into mob/living/Login - switch(ticker.mode.name) - if ("revolution") - if (podman.mind in ticker.mode:revolutionaries) - ticker.mode:add_revolutionary(podman.mind) - ticker.mode:update_all_rev_icons() //So the icon actually appears - if (podman.mind in ticker.mode:head_revolutionaries) - ticker.mode:update_all_rev_icons() - if ("nuclear emergency") - if (podman.mind in ticker.mode:syndicates) - ticker.mode:update_all_synd_icons() - if ("cult") - if (podman.mind in ticker.mode:cult) - ticker.mode:add_cultist(podman.mind) - ticker.mode:update_all_cult_icons() //So the icon actually appears - - // -- End mode specific stuff - - podman.gender = ghost.gender - if(podman.gender in list(NEUTER, PLURAL)) //Sanity check, which should never actually happen. - podman.gender = pick(MALE,FEMALE) - - if(!podman.dna) - podman.dna = new /datum/dna() - podman.dna.real_name = podman.real_name - if(ui) - podman.dna.uni_identity = ui - updateappearance(podman, ui) - if(se) - podman.dna.struc_enzymes = se - if(!prob(potency)) //if it fails, plantman! - if(podman) -// podman.dna.mutantrace = "plant" - podman.mutations.Add(PLANT) - podman.update_mutantrace() - - else //else, one packet of seeds. maybe two - var/seed_count = 1 - if(prob(yield * parent.yieldmod * 20)) - seed_count++ - for(var/i=0,iYour blood has been placed into a replica pod seed. Return to your body if you want to be returned to life as a pod person! (Verbs -> Ghost -> Re-enter corpse)" + break + else + user << "Nothing happens." + return + + if (!istype(source)) + return + + if(source.ckey) + realName = source.real_name + ckey = source.ckey + + W:reagents.clear_reagents() + return + + return ..() + +/obj/item/seeds/replicapod/harvest(mob/user = usr) + + var/obj/machinery/hydroponics/parent = loc + var/mob/ghost + var/list/candidates = list() + + user.visible_message("\blue You carefully begin to open the pod..."."[user] carefully begins to open the pod..." + + //If a sample is injected (and revival is allowed) the plant will be controlled by the original donor. + if(source && source.mind && source.ckey && config.revival_pod_plants) + ghost = source + else // If no sample was injected or revival is not allowed, we grab an interested observer. + for(var/mob/dead/observer/O in player_list) + if(O.client) + var/response = alert(O, "Someone is harvesting a replica pod. Would you like to play as a Dionaea?", "Replica pod harvest", "Yes", "No") + if(response == "Yes") + candidates += O + + if(!do_after(user, 100)) + return + + if(!src || !user) + return + + if(candidates.len) + ghost = pick(candidates) + + //If we don't have a ghost or the ghost is now unplayed, we just give the harvester some seeds. + if(!ghost || !(ghost.ckey)) + user << "The pod has formed badly, and all you can do is salvage some of the seeds." + var/seed_count = 1 + + if(prob(yield * parent.yieldmod * 20)) + seed_count++ + + for(var/i=0,iYou awaken slowly, feeling your sap stir into sluggish motion as the warm air caresses your bark." + if(source && ckey && podman.ckey == ckey) + podman << "Memories of a life as [source] drift oddly through a mind unsuited for them, like a skin of oil over a fathomless lake." + podman << "You are now one of the Dionaea, a race of drifting interstellar plantlike creatures that sometimes share their seeds with human traders." + podman << "Too much darkness will send you into shock and starve you, but light will help you heal." + + if(!realName) + var/newname = input(podman,"Enter a name, or leave blank for the default name.", "Name change","") as text + if (newname != "") + podman.real_name = newname + parent.update_tray() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 1a7f5def825..96a9c4394a6 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -10,7 +10,7 @@ emp_act /mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) -//Old taser nerf. +// BEGIN TASER NERF /* Commenting out new-old taser nerf. if(C.siemens_coefficient == 0) //If so, is that clothing shock proof? if(prob(deflectchance)) @@ -50,23 +50,6 @@ emp_act P.xo = new_x - curloc.x return -1 // complete projectile permutation -//Book's taser nerf. - if(istype(P, /obj/item/projectile/energy/electrode)) - var/datum/organ/external/select_area = get_organ(def_zone) // We're checking the outside, buddy! - var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? - // var/deflectchance=90 //Is it a CRITICAL HIT with that taser? - for(var/bp in body_parts) //Make an unregulated var to pass around. - if(!bp) - continue //Does this thing we're shooting even exist? - if(bp && istype(bp ,/obj/item/clothing)) // If it exists, and it's clothed - var/obj/item/clothing/C = bp // Then call an argument C to be that clothing! - if(C.body_parts_covered & select_area.body_part) // Is that body part being targeted covered? - P.agony=P.agony*C.siemens_coefficient - apply_effect(P.agony,AGONY,0) - flash_pain() - src <<"\red You have been shot!" - del P -//End taser nerf. //BEGIN BOOK'S TASER NERF. if(istype(P, /obj/item/projectile/energy/electrode)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 205dcf5b34e..45164ff77d3 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -841,8 +841,7 @@ if(status_flags & GODMODE) return 0 //godmode adjustToxLoss(total_plasmaloss) -// if(dna && dna.mutantrace == "plant") //couldn't think of a better place to place it, since it handles nutrition -- Urist - if(PLANT in mutations) + if(PLANT in mutations || (dna && dna.mutantrace == "plant")) var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing if(isturf(loc)) //else, there's considered to be no light var/turf/T = loc @@ -900,8 +899,7 @@ if(overeatduration > 1) overeatduration -= 2 //doubled the unfat rate -// if(dna && dna.mutantrace == "plant") - if(PLANT in mutations) + if(PLANT in mutations || (dna && dna.mutantrace == "plant")) if(nutrition < 200) take_overall_damage(2,0) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e947f30a967..eed0e94f1ef 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -220,14 +220,14 @@ proc/get_damage_icon_part(damage_state, body_part) var/husk_color_mod = rgb(96,88,80) var/hulk_color_mod = rgb(48,224,40) - var/plant_color_mod = rgb(144,224,144) + //var/plant_color_mod = rgb(144,224,144) var/necrosis_color_mod = rgb(10,50,0) var/husk = (HUSK in src.mutations) //100% unnecessary -Agouri //nope, do you really want to iterate through src.mutations repeatedly? -Pete var/fat = (FAT in src.mutations) var/hulk = (HULK in src.mutations) var/skeleton = (SKELETON in src.mutations) - var/plant = (PLANT in src.mutations) + var/plant = (PLANT in src.mutations || (dna && dna.mutantrace == "plant")) var/g = "m" if(gender == FEMALE) g = "f" @@ -240,8 +240,8 @@ proc/get_damage_icon_part(damage_state, body_part) else if(hulk) var/list/TONE = ReadRGB(hulk_color_mod) stand_icon.MapColors(rgb(TONE[1],0,0),rgb(0,TONE[2],0),rgb(0,0,TONE[3])) - else if(plant) - stand_icon.ColorTone(plant_color_mod) + //else if(plant) + // stand_icon.ColorTone(plant_color_mod) var/datum/organ/external/head = get_organ("head") var/has_head = 0 @@ -269,8 +269,8 @@ proc/get_damage_icon_part(damage_state, body_part) else if(hulk) var/list/TONE = ReadRGB(hulk_color_mod) temp.MapColors(rgb(TONE[1],0,0),rgb(0,TONE[2],0),rgb(0,0,TONE[3])) - else if(plant) - temp.ColorTone(plant_color_mod) + //else if(plant) + // temp.ColorTone(plant_color_mod) //That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST //And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part) @@ -320,7 +320,7 @@ proc/get_damage_icon_part(damage_state, body_part) stand_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[lip_style]_s"), ICON_OVERLAY) //Underwear - if(underwear >0 && underwear < 12 && (src.dna.mutantrace != "vox" && src.dna.mutantrace != "kidan")) + if(underwear >0 && underwear < 12 && (src.dna.mutantrace != "vox" && src.dna.mutantrace != "plant" && src.dna.mutantrace != "kidan")) if(!fat && !skeleton) stand_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY) @@ -440,11 +440,12 @@ proc/get_damage_icon_part(damage_state, body_part) if("skrell") race_icon = 'icons/mob/human_races/r_skrell.dmi' deform_icon = 'icons/mob/human_races/r_def_skrell.dmi' - if("vox") race_icon = 'icons/mob/human_races/r_vox.dmi' deform_icon = 'icons/mob/human_races/r_def_vox.dmi' - + if("plant") + race_icon = 'icons/mob/human_races/r_plant.dmi' + deform_icon = 'icons/mob/human_races/r_def_plant.dmi' else race_icon = 'icons/mob/human_races/r_human.dmi' deform_icon = 'icons/mob/human_races/r_def_human.dmi' @@ -459,12 +460,12 @@ proc/get_damage_icon_part(damage_state, body_part) // if("lizard","tajaran","skrell") // overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[gender]_l") // overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/species.dmi', "icon_state" = "[dna.mutantrace]_[gender]_s") - if("plant") - if(stat == DEAD) //TODO - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_d") - else - overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l") - overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s") + // if("plant") + // if(stat == DEAD) //TODO + // overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace]_d") + // else + // overlays_lying[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_l") + // overlays_standing[MUTANTRACE_LAYER] = image("icon" = 'icons/effects/genetics.dmi', "icon_state" = "[dna.mutantrace][fat]_[gender]_s") else overlays_lying[MUTANTRACE_LAYER] = null overlays_standing[MUTANTRACE_LAYER] = null diff --git a/icons/mob/human_races/r_def_plant.dmi b/icons/mob/human_races/r_def_plant.dmi new file mode 100644 index 00000000000..1fe04e70ff2 Binary files /dev/null and b/icons/mob/human_races/r_def_plant.dmi differ diff --git a/icons/mob/human_races/r_plant.dmi b/icons/mob/human_races/r_plant.dmi new file mode 100644 index 00000000000..1fe04e70ff2 Binary files /dev/null and b/icons/mob/human_races/r_plant.dmi differ