Cryotubes produce their message on insertion instead of removal now

Also, EMPing a cloning pod is a bit less janky, and correctly updates
icons now.
This commit is contained in:
Crazylemon64
2016-03-02 08:08:04 -08:00
parent 962490bdac
commit 85fdbb38c2
2 changed files with 120 additions and 113 deletions
+95 -93
View File
@@ -144,15 +144,15 @@
/obj/item/weapon/disk/data/New()
..()
var/diskcolor = pick(0,1,2)
src.icon_state = "datadisk[diskcolor]"
icon_state = "datadisk[diskcolor]"
/obj/item/weapon/disk/data/attack_self(mob/user as mob)
src.read_only = !src.read_only
user << "You flip the write-protect tab to [src.read_only ? "protected" : "unprotected"]."
read_only = !read_only
user << "You flip the write-protect tab to [read_only ? "protected" : "unprotected"]."
/obj/item/weapon/disk/data/examine(mob/user)
..(user)
user << "The write-protect tab is set to [src.read_only ? "protected" : "unprotected"]."
user << "The write-protect tab is set to [read_only ? "protected" : "unprotected"]."
//Health Tracker Implant
@@ -162,24 +162,26 @@
var/healthstring = ""
/obj/item/weapon/implant/health/proc/sensehealth()
if (!src.implanted)
if (!implanted)
return "ERROR"
else
if(isliving(src.implanted))
var/mob/living/L = src.implanted
src.healthstring = "[round(L.getOxyLoss())] - [round(L.getFireLoss())] - [round(L.getToxLoss())] - [round(L.getBruteLoss())]"
if (!src.healthstring)
src.healthstring = "ERROR"
return src.healthstring
if(isliving(implanted))
var/mob/living/L = implanted
healthstring = "[round(L.getOxyLoss())] - [round(L.getFireLoss())] - [round(L.getToxLoss())] - [round(L.getBruteLoss())]"
if (!healthstring)
healthstring = "ERROR"
return healthstring
/obj/machinery/clonepod/attack_ai(mob/user as mob)
return attack_hand(user)
/obj/machinery/clonepod/attack_hand(mob/user as mob)
if ((isnull(src.occupant)) || (stat & NOPOWER))
if ((isnull(occupant)) || (stat & NOPOWER))
if(mess)
go_out()
return
if ((!isnull(src.occupant)) && (src.occupant.stat != 2))
var/completion = (100 * ((src.occupant.health + 100) / (src.heal_level + 100)))
if ((!isnull(occupant)) && (occupant.stat != 2))
var/completion = (100 * ((occupant.health + 100) / (heal_level + 100)))
user << "Current clone cycle is [round(completion)]% complete."
return
@@ -210,16 +212,16 @@
return 0
if(biomass >= CLONE_BIOMASS)
src.biomass -= CLONE_BIOMASS
biomass -= CLONE_BIOMASS
else
return 0
src.attempting = 1 //One at a time!!
src.locked = 1
attempting = 1 //One at a time!!
locked = 1
src.eject_wait = 1
eject_wait = 1
spawn(30)
src.eject_wait = 0
eject_wait = 0
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species)
occupant = H
@@ -237,7 +239,6 @@
H.updatehealth()
clonemind.transfer_to(H)
H.ckey = R.ckey
H << "<span class='notice'><b>Consciousness slowly creeps over you as your body regenerates.</b><br><i>So this is what cloning feels like?</i></span>"
// -- Mode/mind specific stuff goes here
@@ -249,7 +250,7 @@
ticker.mode.update_synd_icons_added()
if (H.mind in ticker.mode.cult)
ticker.mode.add_cult_viewpoint(H)
ticker.mode.add_cultist(src.occupant.mind)
ticker.mode.add_cultist(occupant.mind)
ticker.mode.update_cult_icons_added() //So the icon actually appears
if(("\ref[H.mind]" in ticker.mode.implanter) || (H.mind in ticker.mode.implanted))
ticker.mode.update_traitor_icons_added(H.mind) //So the icon actually appears
@@ -263,9 +264,9 @@
if(!R.dna)
H.dna = new /datum/dna()
H.dna.real_name = H.real_name
H.dna.ready_dna(H)
else
H.dna=R.dna
H.UpdateAppearance()
H.dna = R.dna.Clone()
if(efficiency > 2 && efficiency < 5 && prob(25))
randmutb(H)
if(efficiency > 5 && prob(20))
@@ -275,67 +276,65 @@
H.dna.UpdateSE()
H.dna.UpdateUI()
/* //let's not make people waste even more time after being cloned.
H.f_style = "Shaved"
if(R.dna.species == "Human") //no more xenos losing ears/tentacles
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") */
H.set_species(R.dna.species)
H.sync_organ_dna(1) // It's literally a fresh body as you can get, so all organs properly belong to it
H.UpdateAppearance()
H.update_body()
update_icon()
for(var/datum/language/L in R.languages)
H.add_language(L.name)
H.suiciding = 0
src.attempting = 0
attempting = 0
return 1
//Grow clones to maturity then kick them out. FREELOADERS
/obj/machinery/clonepod/process()
if(stat & NOPOWER) //Autoeject if power is lost
if (src.occupant)
src.locked = 0
src.go_out()
if (occupant)
locked = 0
go_out()
return
if((src.occupant) && (src.occupant.loc == src))
if((src.occupant.stat == DEAD) || (src.occupant.suiciding) || !occupant.key) //Autoeject corpses and suiciding dudes.
src.locked = 0
src.go_out()
src.connected_message("Clone Rejected: Deceased.")
if((occupant) && (occupant.loc == src))
if((occupant.stat == DEAD) || (occupant.suiciding) || !occupant.key) //Autoeject corpses and suiciding dudes.
locked = 0
go_out()
connected_message("Clone Rejected: Deceased.")
return
else if(src.occupant.cloneloss > (100 - src.heal_level))
src.occupant.Paralyse(4)
else if(occupant.cloneloss > (100 - heal_level))
occupant.Paralyse(4)
//Slowly get that clone healed and finished.
src.occupant.adjustCloneLoss(-((speed_coeff/2)))
occupant.adjustCloneLoss(-((speed_coeff/2)))
//Premature clones may have brain damage.
src.occupant.adjustBrainLoss(-((speed_coeff/20)*efficiency))
occupant.adjustBrainLoss(-((speed_coeff/20)*efficiency))
//So clones don't die of oxyloss in a running pod.
if (src.occupant.reagents.get_reagent_amount("salbutamol") < 5)
src.occupant.reagents.add_reagent("salbutamol", 5)
if (occupant.reagents.get_reagent_amount("salbutamol") < 5)
occupant.reagents.add_reagent("salbutamol", 5)
//Also heal some oxyloss ourselves just in case!!
src.occupant.adjustOxyLoss(-4)
occupant.adjustOxyLoss(-4)
use_power(7500) //This might need tweaking.
return
else if((src.occupant.cloneloss <= (100 - src.heal_level)) && (!src.eject_wait))
src.connected_message("Cloning Process Complete.")
src.locked = 0
src.go_out()
else if((occupant.cloneloss <= (100 - heal_level)) && (!eject_wait))
connected_message("Cloning Process Complete.")
locked = 0
go_out()
return
else if ((!src.occupant) || (src.occupant.loc != src))
src.occupant = null
if (src.locked)
src.locked = 0
else if ((!occupant) || (occupant.loc != src))
occupant = null
if (locked)
locked = 0
//use_power(200)
return
@@ -359,16 +358,16 @@
return
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if (!src.check_access(W))
if (!check_access(W))
user << "\red Access Denied."
return
if ((!src.locked) || (isnull(src.occupant)))
if ((!locked) || (isnull(occupant)))
return
if ((src.occupant.health < -20) && (src.occupant.stat != 2))
if ((occupant.health < -20) && (occupant.stat != 2))
user << "\red Access Refused."
return
else
src.locked = 0
locked = 0
user << "System unlocked."
//Removing cloning pod biomass
@@ -379,16 +378,16 @@
qdel(W)
return
else if (istype(W, /obj/item/weapon/wrench))
if(src.locked && (src.anchored || src.occupant))
if(locked && (anchored || occupant))
user << "\red Can not do that while [src] is in use."
else
if(src.anchored)
src.anchored = 0
if(anchored)
anchored = 0
connected.pods -= src
connected = null
else
src.anchored = 1
playsound(src.loc, 'sound/items/Ratchet.ogg', 100, 1)
anchored = 1
playsound(loc, 'sound/items/Ratchet.ogg', 100, 1)
if(anchored)
user.visible_message("[user] secures [src] to the floor.", "You secure [src] to the floor.")
else
@@ -402,22 +401,22 @@
..()
/obj/machinery/clonepod/emag_act(user as mob)
if (isnull(src.occupant))
if (isnull(occupant))
return
user << "You force an emergency ejection."
src.locked = 0
src.go_out()
locked = 0
go_out()
return
//Put messages in the connected computer's temp var for display.
/obj/machinery/clonepod/proc/connected_message(var/message)
if ((isnull(src.connected)) || (!istype(src.connected, /obj/machinery/computer/cloning)))
if ((isnull(connected)) || (!istype(connected, /obj/machinery/computer/cloning)))
return 0
if (!message)
return 0
src.connected.temp = "[name] : [message]"
src.connected.updateUsrDialog()
connected.temp = "[name] : [message]"
connected.updateUsrDialog()
return 1
/obj/machinery/clonepod/verb/eject()
@@ -429,43 +428,46 @@
return
if (usr.stat != 0)
return
src.go_out(usr)
go_out(usr)
add_fingerprint(usr)
return
/obj/machinery/clonepod/proc/go_out(user)
if (src.mess) //Clean that mess and dump those gibs!
src.mess = 0
gibs(src.loc)
if (mess) //Clean that mess and dump those gibs!
if(occupant)
return
mess = 0
gibs(loc)
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
update_icon()
return
if (!(src.occupant))
if (!(occupant))
user << "<span class=\"warning\">The cloning pod is empty!</span>"
return
if (src.locked)
if (locked)
user << "<span class=\"warning\">The cloning pod is locked!</span>"
return
if (src.occupant.client)
src.occupant.client.eye = src.occupant.client.mob
src.occupant.client.perspective = MOB_PERSPECTIVE
src.occupant.forceMove(get_turf(src))
src.eject_wait = 0 //If it's still set somehow.
domutcheck(src.occupant) //Waiting until they're out before possible notransform.
src.occupant = null
if (occupant.client)
occupant.client.eye = occupant.client.mob
occupant.client.perspective = MOB_PERSPECTIVE
occupant.forceMove(get_turf(src))
eject_wait = 0 //If it's still set somehow.
domutcheck(occupant) //Waiting until they're out before possible notransform.
occupant = null
update_icon()
return
/obj/machinery/clonepod/proc/malfunction()
if(src.occupant)
src.connected_message("Critical Error!")
src.mess = 1
if(occupant)
connected_message("Critical Error!")
mess = 1
occupant.ghostize()
qdel(occupant)
occupant = null
update_icon()
src.occupant.ghostize()
spawn(5)
qdel(src.occupant)
return
/obj/machinery/clonepod/update_icon()
@@ -479,7 +481,7 @@
/obj/machinery/clonepod/relaymove(mob/user as mob)
if (user.stat)
return
src.go_out()
go_out()
return
/obj/machinery/clonepod/emp_act(severity)
@@ -490,22 +492,22 @@
switch(severity)
if(1.0)
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
A.forceMove(src.loc)
A.ex_act(severity)
qdel(src)
return
if(2.0)
if (prob(50))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
A.forceMove(src.loc)
A.ex_act(severity)
qdel(src)
return
if(3.0)
if (prob(25))
for(var/atom/movable/A as mob|obj in src)
A.loc = src.loc
ex_act(severity)
A.forceMove(src.loc)
A.ex_act(severity)
qdel(src)
return
else
+25 -20
View File
@@ -17,6 +17,8 @@
var/current_heat_capacity = 50
var/efficiency
var/running_bob_animation = 0 // This is used to prevent threads from building up if update_icons is called multiple times
light_color = LIGHT_COLOR_WHITE
power_change()
..()
@@ -327,34 +329,37 @@
overlays += pickle
overlays += "lid[on]"
if(src.on) //no bobbing if off
if(src.on && !running_bob_animation) //no bobbing if off
var/up = 0 //used to see if we are going up or down, 1 is down, 2 is up
while(occupant)
overlays -= "lid[on]" //have to remove the overlays first, to force an update- remove cloning pod overlay
overlays -= pickle //remove mob overlay
spawn(0) // Without this, the icon update will block. The new thread will die once the occupant leaves.
running_bob_animation = 1
while(occupant)
overlays -= "lid[on]" //have to remove the overlays first, to force an update- remove cloning pod overlay
overlays -= pickle //remove mob overlay
switch(pickle.pixel_y) //this looks messy as fuck but it works, switch won't call itself twice
switch(pickle.pixel_y) //this looks messy as fuck but it works, switch won't call itself twice
if(23) //inbetween state, for smoothness
switch(up) //this is set later in the switch, to keep track of where the mob is supposed to go
if(2) //2 is up
pickle.pixel_y = 24 //set to highest
if(23) //inbetween state, for smoothness
switch(up) //this is set later in the switch, to keep track of where the mob is supposed to go
if(2) //2 is up
pickle.pixel_y = 24 //set to highest
if(1) //1 is down
pickle.pixel_y = 22 //set to lowest
if(1) //1 is down
pickle.pixel_y = 22 //set to lowest
if(22) //mob is at it's lowest
pickle.pixel_y = 23 //set to inbetween
up = 2 //have to go up
if(22) //mob is at it's lowest
pickle.pixel_y = 23 //set to inbetween
up = 2 //have to go up
if(24) //mob is at it's highest
pickle.pixel_y = 23 //set to inbetween
up = 1 //have to go down
if(24) //mob is at it's highest
pickle.pixel_y = 23 //set to inbetween
up = 1 //have to go down
overlays += pickle //re-add the mob to the icon
overlays += "lid[on]" //re-add the overlay of the pod, they are inside it, not floating
overlays += pickle //re-add the mob to the icon
overlays += "lid[on]" //re-add the overlay of the pod, they are inside it, not floating
sleep(7) //don't want to jiggle violently, just slowly bob
sleep(7) //don't want to jiggle violently, just slowly bob
running_bob_animation = 0
/obj/machinery/atmospherics/unary/cryo_cell/proc/process_occupant()
if(air_contents.total_moles() < 10)