Merge branch 'master' into VR_Avatar
@@ -1,22 +1,22 @@
|
||||
/decl/hierarchy/outfit/military/sifguard/pt
|
||||
name = OUTFIT_MILITARY("SifGuard PT")
|
||||
uniform = /obj/item/clothing/under/pt/expeditionary
|
||||
uniform = /obj/item/clothing/under/pt/sifguard
|
||||
shoes = /obj/item/clothing/shoes/black
|
||||
|
||||
/decl/hierarchy/outfit/military/sifguard/utility
|
||||
name = OUTFIT_MILITARY("SifGuard Utility")
|
||||
uniform = /obj/item/clothing/under/utility/expeditionary
|
||||
uniform = /obj/item/clothing/under/utility/sifguard
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
|
||||
/decl/hierarchy/outfit/military/sifguard/service
|
||||
name = OUTFIT_MILITARY("SifGuard Service")
|
||||
uniform = /obj/item/clothing/under/utility/expeditionary
|
||||
uniform = /obj/item/clothing/under/utility/sifguard
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
suit = /obj/item/clothing/suit/storage/service/expeditionary
|
||||
suit = /obj/item/clothing/suit/storage/service/sifguard
|
||||
|
||||
/decl/hierarchy/outfit/military/sifguard/dress
|
||||
name = OUTFIT_MILITARY("SifGuard Dress")
|
||||
uniform = /obj/item/clothing/under/mildress/expeditionary
|
||||
uniform = /obj/item/clothing/under/mildress/sifguard
|
||||
shoes = /obj/item/clothing/shoes/dress
|
||||
suit = /obj/item/clothing/suit/dress/expedition
|
||||
gloves = /obj/item/clothing/gloves/white
|
||||
|
||||
@@ -134,10 +134,12 @@ datum/supply_packs/costumes/witch
|
||||
/obj/item/clothing/head/pirate,
|
||||
/obj/item/clothing/head/hasturhood,
|
||||
/obj/item/clothing/head/powdered_wig,
|
||||
/obj/item/clothing/head/hairflower,
|
||||
/obj/item/clothing/head/hairflower/yellow,
|
||||
/obj/item/clothing/head/hairflower/blue,
|
||||
/obj/item/clothing/head/hairflower/pink,
|
||||
/obj/item/clothing/head/pin/flower,
|
||||
/obj/item/clothing/head/pin/flower/yellow,
|
||||
/obj/item/clothing/head/pin/flower/blue,
|
||||
/obj/item/clothing/head/pin/flower/pink,
|
||||
/obj/item/clothing/head/pin/clover,
|
||||
/obj/item/clothing/head/pin/butterfly,
|
||||
/obj/item/clothing/mask/gas/owl_mask,
|
||||
/obj/item/clothing/mask/gas/monkeymask,
|
||||
/obj/item/clothing/head/helmet/gladiator,
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
/obj/item/weapon/storage/box/glasses/shake,
|
||||
/obj/item/weapon/storage/box/glasses/shot,
|
||||
/obj/item/weapon/storage/box/glasses/mug,
|
||||
/obj/item/weapon/storage/box/glasses/meta,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/shaker,
|
||||
/obj/item/weapon/storage/box/glass_extras/straws,
|
||||
/obj/item/weapon/storage/box/glass_extras/sticks
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user)
|
||||
if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() )
|
||||
if( !cracked && (istype(target,/mob/living/silicon) || (istype(target,/mob/living/carbon/human) && !target.get_active_hand())) && target.stat == CONSCIOUS)
|
||||
target.visible_message("<span class='notice'>[user] and [target] pop \an [src]! *pop*</span>", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='notice'>You hear a *pop*.</span>")
|
||||
var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc)
|
||||
Joke.name = "[pick("awful","terrible","unfunny")] joke"
|
||||
|
||||
@@ -247,7 +247,7 @@
|
||||
add_fingerprint(usr)
|
||||
|
||||
/obj/machinery/sleeper/MouseDrop_T(var/mob/target, var/mob/user)
|
||||
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user)|| !ishuman(target))
|
||||
if(user.stat || user.lying || !Adjacent(user) || !target.Adjacent(user) || !ishuman(target))
|
||||
return
|
||||
go_in(target, user)
|
||||
|
||||
@@ -281,7 +281,9 @@
|
||||
if(occupant)
|
||||
to_chat(user, "<span class='warning'>\The [src] is already occupied.</span>")
|
||||
return
|
||||
|
||||
if(!ishuman(M))
|
||||
to_chat(user, "<span class='warning'>\The [src] is not designed for that organism!</span>")
|
||||
return
|
||||
if(M == user)
|
||||
visible_message("\The [user] starts climbing into \the [src].")
|
||||
else
|
||||
|
||||
@@ -39,20 +39,23 @@
|
||||
else if(istype(G, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/H = G
|
||||
if(panel_open)
|
||||
user << "<span class='notice'>Close the maintenance panel first.</span>"
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
return
|
||||
if(!ismob(H.affecting))
|
||||
return
|
||||
if(!ishuman(H.affecting))
|
||||
to_chat(user, "<span class='warning'>\The [src] is not designed for that organism!</span>")
|
||||
return
|
||||
if(occupant)
|
||||
user << "<span class='notice'>The scanner is already occupied!</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is already occupied!</span>")
|
||||
return
|
||||
for(var/mob/living/simple_animal/slime/M in range(1, H.affecting))
|
||||
if(M.victim == H.affecting)
|
||||
user << "<span class='danger'>[H.affecting.name] has a fucking slime attached to them, deal with that first.</span>"
|
||||
to_chat(user, "<span class='danger'>[H.affecting.name] has a slime attached to them, deal with that first.</span>")
|
||||
return
|
||||
var/mob/M = H.affecting
|
||||
if(M.abiotic())
|
||||
user << "<span class='notice'>Subject cannot have abiotic items on.</span>"
|
||||
to_chat(user, "<span class='notice'>Subject cannot have abiotic items on.</span>")
|
||||
return
|
||||
M.forceMove(src)
|
||||
occupant = M
|
||||
@@ -72,20 +75,20 @@
|
||||
if(!ishuman(user) && !isrobot(user))
|
||||
return 0 //not a borg or human
|
||||
if(panel_open)
|
||||
user << "<span class='notice'>Close the maintenance panel first.</span>"
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
return 0 //panel open
|
||||
if(occupant)
|
||||
user << "<span class='notice'>\The [src] is already occupied.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is already occupied.</span>")
|
||||
return 0 //occupied
|
||||
|
||||
if(O.buckled)
|
||||
return 0
|
||||
if(O.abiotic())
|
||||
user << "<span class='notice'>Subject cannot have abiotic items on.</span>"
|
||||
to_chat(user, "<span class='notice'>Subject cannot have abiotic items on.</span>")
|
||||
return 0
|
||||
for(var/mob/living/simple_animal/slime/M in range(1, O))
|
||||
if(M.victim == O)
|
||||
user << "<span class='danger'>[O] has a fucking slime attached to them, deal with that first.</span>"
|
||||
to_chat(user, "<span class='danger'>[O] has a slime attached to them, deal with that first.</span>")
|
||||
return 0
|
||||
|
||||
if(O == user)
|
||||
@@ -185,9 +188,9 @@
|
||||
var/obj/machinery/bodyscanner/C = P.connectable
|
||||
scanner = C
|
||||
C.console = src
|
||||
user << "<span class='warning'> You link the [src] to the [P.connectable]!</span>"
|
||||
to_chat(user, "<span class='warning'> You link the [src] to the [P.connectable]!</span>")
|
||||
else
|
||||
user << "<span class='warning'> You store the [src] in the [P]'s buffer!</span>"
|
||||
to_chat(user, "<span class='warning'> You store the [src] in the [P]'s buffer!</span>")
|
||||
P.connectable = src
|
||||
return
|
||||
else
|
||||
@@ -240,7 +243,7 @@
|
||||
return
|
||||
|
||||
if (scanner.panel_open)
|
||||
user << "<span class='notice'>Close the maintenance panel first.</span>"
|
||||
to_chat(user, "<span class='notice'>Close the maintenance panel first.</span>")
|
||||
return
|
||||
|
||||
if(!scanner)
|
||||
@@ -250,7 +253,7 @@
|
||||
else if(scanner)
|
||||
return ui_interact(user)
|
||||
else
|
||||
user << "<span class='warning'>Scanner not found!</span>"
|
||||
to_chat(user, "<span class='warning'>Scanner not found!</span>")
|
||||
|
||||
/obj/machinery/body_scanconsole/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
var/data[0]
|
||||
@@ -584,4 +587,4 @@
|
||||
else
|
||||
dat = "<font color='red'> Error: No Body Scanner connected.</font>"
|
||||
|
||||
printing_text = dat
|
||||
printing_text = dat
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
var/turf/Tr = null
|
||||
for(var/obj/item/weapon/implant/chem/C in world)
|
||||
Tr = get_turf(C)
|
||||
if((Tr) && (Tr.z != src.z)) continue//Out of range
|
||||
if(!Tr) continue//Out of range
|
||||
if(!C.implanted) continue
|
||||
dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: "
|
||||
dat += "<A href='?src=\ref[src];inject1=\ref[C]'>(<font color=red>(1)</font>)</A>"
|
||||
@@ -41,7 +41,7 @@
|
||||
dat += "<HR>Tracking Implants<BR>"
|
||||
for(var/obj/item/weapon/implant/tracking/T in world)
|
||||
Tr = get_turf(T)
|
||||
if((Tr) && (Tr.z != src.z)) continue//Out of range
|
||||
if(!Tr) continue//Out of range
|
||||
if(!T.implanted) continue
|
||||
var/loc_display = "Unknown"
|
||||
var/mob/living/carbon/M = T.imp_in
|
||||
|
||||
@@ -688,6 +688,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/pint = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/mug = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/glass2/wine = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/metaglass = 10,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 5,
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
equip_cooldown = 50
|
||||
var/mob/living/carbon/human/occupant = null
|
||||
var/datum/global_iterator/pr_mech_sleeper
|
||||
var/inject_amount = 10
|
||||
var/inject_amount = 5
|
||||
required_type = /obj/mecha/medical
|
||||
salvageable = 0
|
||||
|
||||
@@ -185,10 +185,14 @@
|
||||
if(!R || !occupant || !SG || !(SG in chassis.equipment))
|
||||
return 0
|
||||
var/to_inject = min(R.volume, inject_amount)
|
||||
if(to_inject && occupant.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2)
|
||||
if(to_inject && occupant.reagents.get_reagent_amount(R.id) + to_inject > inject_amount*4)
|
||||
occupant_message("Sleeper safeties prohibit you from injecting more than [inject_amount*4] units of [R.name].")
|
||||
else
|
||||
occupant_message("Injecting [occupant] with [to_inject] units of [R.name].")
|
||||
log_message("Injecting [occupant] with [to_inject] units of [R.name].")
|
||||
SG.reagents.trans_id_to(occupant,R.id,to_inject)
|
||||
//SG.reagents.trans_id_to(occupant,R.id,to_inject)
|
||||
SG.reagents.remove_reagent(R.id,to_inject)
|
||||
occupant.reagents.add_reagent(R.id,to_inject)
|
||||
update_equip_info()
|
||||
return
|
||||
|
||||
@@ -200,6 +204,19 @@
|
||||
return 1
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/sleeper/verb/eject()
|
||||
set name = "Sleeper Eject"
|
||||
set category = "Exosuit Interface"
|
||||
set src = usr.loc
|
||||
set popup_menu = 0
|
||||
if(usr!=src.occupant || usr.stat == 2)
|
||||
return
|
||||
to_chat(usr,"<span class='notice'>Release sequence activated. This will take one minute.</span>")
|
||||
sleep(600)
|
||||
if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already
|
||||
return
|
||||
go_out()//and release him from the eternal prison.
|
||||
|
||||
/datum/global_iterator/mech_sleeper
|
||||
|
||||
process(var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S)
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
/atom/movable/proc/user_buckle_mob(mob/living/M, mob/user, var/forced = FALSE, var/silent = FALSE)
|
||||
if(!ticker)
|
||||
user << "<span class='warning'>You can't buckle anyone in before the game starts.</span>"
|
||||
if(!user.Adjacent(M) || user.restrained() || user.lying || user.stat || istype(user, /mob/living/silicon/pai))
|
||||
if(!user.Adjacent(M) || user.restrained() || user.stat || istype(user, /mob/living/silicon/pai))
|
||||
return
|
||||
if(M == buckled_mob)
|
||||
return
|
||||
|
||||
@@ -7,7 +7,7 @@ var/list/GPS_list = list()
|
||||
icon_state = "gps-c"
|
||||
w_class = ITEMSIZE_TINY
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = list(TECH_MATERIALS = 2, TECH_BLUESPACE = 2, TECH_MAGNETS = 1)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 2, TECH_MAGNET = 1)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500)
|
||||
var/gps_tag = "COM0"
|
||||
var/emped = FALSE
|
||||
@@ -182,7 +182,7 @@ var/list/GPS_list = list()
|
||||
icon_state = "gps-syndie"
|
||||
gps_tag = "NULL"
|
||||
desc = "A positioning system that has extended range and can detect other GPS device signals without revealing its own. How that works is best left a mystery. Alt+click to toggle power."
|
||||
origin_tech = list(TECH_MATERIALS = 2, TECH_BLUESPACE = 3, TECH_MAGNETS = 2, TECH_ILLEGAL = 2)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
|
||||
long_range = TRUE
|
||||
hide_signal = TRUE
|
||||
can_hide_signal = TRUE
|
||||
|
||||
@@ -58,9 +58,9 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/suicide_act(mob/user)
|
||||
var/tempgender = "[user.gender == MALE ? "he's" : user.gender == FEMALE ? "she's" : "they are"]"
|
||||
if (active)
|
||||
viewers(user) << pick("<span class='danger'>\The [user] is slitting \his stomach open with \the [src]! It looks like [tempgender] trying to commit seppuku.</span>", \
|
||||
"<span class='danger'>\The [user] is falling on \the [src]! It looks like [tempgender] trying to commit suicide.</span>")
|
||||
if(active)
|
||||
user.visible_message(pick("<span class='danger'>\The [user] is slitting \his stomach open with \the [src]! It looks like [tempgender] trying to commit seppuku.</span>",\
|
||||
"<span class='danger'>\The [user] is falling on \the [src]! It looks like [tempgender] trying to commit suicide.</span>"))
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/*
|
||||
@@ -90,15 +90,15 @@
|
||||
/obj/item/weapon/melee/energy/axe/activate(mob/living/user)
|
||||
..()
|
||||
icon_state = "axe1"
|
||||
user << "<span class='notice'>\The [src] is now energised.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is now energised.</span>")
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/deactivate(mob/living/user)
|
||||
..()
|
||||
icon_state = initial(icon_state)
|
||||
user << "<span class='notice'>\The [src] is de-energised. It's just a regular axe now.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is de-energised. It's just a regular axe now.</span>")
|
||||
|
||||
/obj/item/weapon/melee/energy/axe/suicide_act(mob/user)
|
||||
viewers(user) << "<span class='warning'>\The [user] swings \the [src] towards \his head! It looks like \he's trying to commit suicide.</span>"
|
||||
visible_message("<span class='warning'>\The [user] swings \the [src] towards \his head! It looks like \he's trying to commit suicide.</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/*
|
||||
@@ -153,7 +153,7 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/activate(mob/living/user)
|
||||
if(!active)
|
||||
user << "<span class='notice'>\The [src] is now energised.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] is now energised.</span>")
|
||||
|
||||
..()
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
@@ -162,7 +162,7 @@
|
||||
|
||||
/obj/item/weapon/melee/energy/sword/deactivate(mob/living/user)
|
||||
if(active)
|
||||
user << "<span class='notice'>\The [src] deactivates!</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] deactivates!</span>")
|
||||
..()
|
||||
attack_verb = list()
|
||||
icon_state = initial(icon_state)
|
||||
@@ -294,3 +294,73 @@
|
||||
host.embedded -= src
|
||||
host.drop_from_inventory(src)
|
||||
spawn(1) if(src) qdel(src)
|
||||
|
||||
/*
|
||||
*Energy Spear
|
||||
*/
|
||||
|
||||
/obj/item/weapon/melee/energy/spear
|
||||
name = "energy spear"
|
||||
desc = "Concentrated energy forming a sharp tip at the end of a long rod."
|
||||
icon_state = "espear0"
|
||||
armor_penetration = 75
|
||||
sharp = 1
|
||||
edge = 1
|
||||
force = 5
|
||||
throwforce = 10
|
||||
throw_speed = 7
|
||||
throw_range = 11
|
||||
reach = 2
|
||||
w_class = ITEMSIZE_LARGE
|
||||
active_force = 25
|
||||
active_throwforce = 30
|
||||
active_w_class = ITEMSIZE_HUGE
|
||||
var/random_color = TRUE
|
||||
var/tip_color = ""
|
||||
var/active_state = "espear"
|
||||
|
||||
/obj/item/weapon/melee/energy/spear/New()
|
||||
if(random_color)
|
||||
tip_color = pick("red","blue","green","purple")
|
||||
lcolor = tip_color
|
||||
|
||||
/obj/item/weapon/melee/energy/spear/green/New()
|
||||
tip_color = "green"
|
||||
lcolor = "#008000"
|
||||
|
||||
/obj/item/weapon/melee/energy/spear/red/New()
|
||||
tip_color = "red"
|
||||
lcolor = "#FF0000"
|
||||
|
||||
/obj/item/weapon/melee/energy/spear/blue/New()
|
||||
tip_color = "blue"
|
||||
lcolor = "#0000FF"
|
||||
|
||||
/obj/item/weapon/melee/energy/spear/purple/New()
|
||||
tip_color = "purple"
|
||||
lcolor = "#800080"
|
||||
|
||||
/obj/item/weapon/melee/energy/spear/activate(mob/living/user)
|
||||
if(!active)
|
||||
to_chat(user, "<span class='notice'>\The [src] is now energised.</span>")
|
||||
..()
|
||||
attack_verb = list("jabbed", "stabbed", "impaled")
|
||||
icon_state = "[active_state]-[tip_color]"
|
||||
|
||||
|
||||
/obj/item/weapon/melee/energy/spear/deactivate(mob/living/user)
|
||||
if(active)
|
||||
to_chat(user, "<span class='notice'>\The [src] deactivates!</span>")
|
||||
..()
|
||||
attack_verb = list("whacked", "beat", "slapped", "thonked")
|
||||
icon_state = "espear0"
|
||||
|
||||
/obj/item/weapon/melee/energy/spear/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
|
||||
if(active && default_parry_check(user, attacker, damage_source) && prob(50))
|
||||
user.visible_message("<span class='danger'>\The [user] parries [attack_text] with \the [src]!</span>")
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, user.loc)
|
||||
spark_system.start()
|
||||
playsound(user.loc, 'sound/weapons/blade1.ogg', 50, 1)
|
||||
return 1
|
||||
return 0
|
||||
@@ -177,6 +177,7 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper)
|
||||
allow_quick_gather = 1
|
||||
allow_quick_empty = 1
|
||||
use_to_pickup = 1
|
||||
use_sound = null
|
||||
max_storage_space = ITEMSIZE_COST_TINY * 14
|
||||
@@ -186,138 +187,166 @@
|
||||
name = "bottle of Dylovene pills"
|
||||
desc = "Contains pills used to counter toxins."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox( src )
|
||||
/obj/item/weapon/storage/pill_bottle/antitox/New() //25u each
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/antitox(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/bicaridine
|
||||
name = "bottle of Bicaridine pills"
|
||||
desc = "Contains pills used to stabilize the severely injured."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/bicaridine/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dexalin_plus
|
||||
name = "bottle of Dexalin Plus pills"
|
||||
desc = "Contains pills used to treat extreme cases of oxygen deprivation."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dexalin_plus/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dermaline
|
||||
name = "bottle of Dermaline pills"
|
||||
desc = "Contains pills used to treat burn wounds."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dermaline/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dylovene
|
||||
name = "bottle of Dylovene pills"
|
||||
desc = "Contains pills used to treat toxic substances in the blood."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dylovene/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
/obj/item/weapon/storage/pill_bottle/dylovene/New() //15u each
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/inaprovaline
|
||||
name = "bottle of Inaprovaline pills"
|
||||
desc = "Contains pills used to stabilize patients."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline( src )
|
||||
/obj/item/weapon/storage/pill_bottle/inaprovaline/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/kelotane
|
||||
name = "bottle of kelotane pills"
|
||||
desc = "Contains pills used to treat burns."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
/obj/item/weapon/storage/pill_bottle/kelotane/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/spaceacillin
|
||||
name = "bottle of Spaceacillin pills"
|
||||
desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/spaceacillin/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/tramadol
|
||||
name = "bottle of Tramadol pills"
|
||||
desc = "Contains pills used to relieve pain."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol( src )
|
||||
/obj/item/weapon/storage/pill_bottle/tramadol/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/citalopram
|
||||
name = "bottle of Citalopram pills"
|
||||
desc = "Contains pills used to stabilize a patient's mood."
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram( src )
|
||||
/obj/item/weapon/storage/pill_bottle/citalopram/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/carbon
|
||||
name = "bottle of Carbon pills"
|
||||
desc = "Contains pills used to neutralise chemicals in the stomach."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/carbon/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/carbon(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/carbon(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/carbon(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/carbon(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/carbon(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/carbon(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/carbon(src)
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/iron
|
||||
name = "bottle of Iron pills"
|
||||
desc = "Contains pills used to aid in blood regeneration."
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/iron/New()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/iron(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/iron(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/iron(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/iron(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/iron(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/iron(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/iron(src)
|
||||
@@ -311,24 +311,24 @@
|
||||
return 0 //Means the item is already in the storage item
|
||||
if(storage_slots != null && contents.len >= storage_slots)
|
||||
if(!stop_messages)
|
||||
usr << "<span class='notice'>[src] is full, make some space.</span>"
|
||||
to_chat(usr, "<span class='notice'>[src] is full, make some space.</span>")
|
||||
return 0 //Storage item is full
|
||||
|
||||
if(can_hold.len && !is_type_in_list(W, can_hold))
|
||||
if(!stop_messages)
|
||||
if (istype(W, /obj/item/weapon/hand_labeler))
|
||||
return 0
|
||||
usr << "<span class='notice'>[src] cannot hold [W].</span>"
|
||||
to_chat(usr, "<span class='notice'>[src] cannot hold [W].</span>")
|
||||
return 0
|
||||
|
||||
if(cant_hold.len && is_type_in_list(W, cant_hold))
|
||||
if(!stop_messages)
|
||||
usr << "<span class='notice'>[src] cannot hold [W].</span>"
|
||||
to_chat(usr, "<span class='notice'>[src] cannot hold [W].</span>")
|
||||
return 0
|
||||
|
||||
if (max_w_class != null && W.w_class > max_w_class)
|
||||
if(!stop_messages)
|
||||
usr << "<span class='notice'>[W] is too long for \the [src].</span>"
|
||||
to_chat(usr, "<span class='notice'>[W] is too long for \the [src].</span>")
|
||||
return 0
|
||||
|
||||
var/total_storage_space = W.get_storage_cost()
|
||||
@@ -337,12 +337,12 @@
|
||||
|
||||
if(total_storage_space > max_storage_space)
|
||||
if(!stop_messages)
|
||||
usr << "<span class='notice'>[src] is too full, make some space.</span>"
|
||||
to_chat(usr, "<span class='notice'>[src] is too full, make some space.</span>")
|
||||
return 0
|
||||
|
||||
if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage)))
|
||||
if(!stop_messages)
|
||||
usr << "<span class='notice'>[src] cannot hold [W] as it's a storage item of the same size.</span>"
|
||||
to_chat(usr, "<span class='notice'>[src] cannot hold [W] as it's a storage item of the same size.</span>")
|
||||
return 0 //To prevent the stacking of same sized storage items.
|
||||
|
||||
return 1
|
||||
@@ -366,7 +366,7 @@
|
||||
if(!prevent_warning)
|
||||
for(var/mob/M in viewers(usr, null))
|
||||
if (M == usr)
|
||||
usr << "<span class='notice'>You put \the [W] into [src].</span>"
|
||||
to_chat(usr, "<span class='notice'>You put \the [W] into [src].</span>")
|
||||
else if (M in range(1)) //If someone is standing close enough, they can tell what it is...
|
||||
M.show_message("<span class='notice'>\The [usr] puts [W] into [src].</span>")
|
||||
else if (W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance...
|
||||
@@ -515,7 +515,7 @@
|
||||
set name = "Empty Contents"
|
||||
set category = "Object"
|
||||
|
||||
if((!ishuman(usr) && (src.loc != usr)) || usr.stat || usr.restrained())
|
||||
if(((!(ishuman(usr) || isrobot(usr))) && (src.loc != usr)) || usr.stat || usr.restrained())
|
||||
return
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -591,11 +591,9 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/storage/attack_self(mob/user as mob)
|
||||
//Clicking on itself will empty it, if it has the verb to do that.
|
||||
if(user.get_active_hand() == src)
|
||||
if(src.verbs.Find(/obj/item/weapon/storage/verb/quick_empty))
|
||||
src.quick_empty()
|
||||
return 1
|
||||
if((user.get_active_hand() == src) || (isrobot(user)) && allow_quick_empty)
|
||||
src.quick_empty()
|
||||
return 1 // Is this return even needed?
|
||||
|
||||
//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area).
|
||||
//Returns -1 if the atom was not found on container.
|
||||
|
||||
@@ -139,20 +139,31 @@
|
||||
|
||||
/obj/random/medical/item_to_spawn()
|
||||
return pick(prob(21);/obj/random/medical/lite,
|
||||
prob(4);/obj/item/bodybag,
|
||||
prob(4);/obj/item/weapon/storage/pill_bottle/tramadol,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin,
|
||||
prob(5);/obj/random/medical/pillbottle,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/tramadol,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/dermaline,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/dexalin_plus,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/bicaridine,
|
||||
prob(6);/obj/item/weapon/reagent_containers/syringe/antitoxin,
|
||||
prob(1);/obj/item/weapon/reagent_containers/syringe/antiviral,
|
||||
prob(6);/obj/item/weapon/reagent_containers/syringe/inaprovaline,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/antitox,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/carbon,
|
||||
prob(3);/obj/item/bodybag/cryobag,
|
||||
prob(5);/obj/item/weapon/reagent_containers/syringe/antitoxin,
|
||||
prob(3);/obj/item/weapon/reagent_containers/syringe/antiviral,
|
||||
prob(5);/obj/item/weapon/reagent_containers/syringe/inaprovaline,
|
||||
prob(1);/obj/item/weapon/reagent_containers/hypospray,
|
||||
prob(1);/obj/item/weapon/storage/box/freezer,
|
||||
prob(2);/obj/item/stack/nanopaste)
|
||||
|
||||
/obj/random/medical/pillbottle
|
||||
name = "Random Pill Bottle"
|
||||
desc = "This is a random pill bottle."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "pill_canister"
|
||||
|
||||
/obj/random/medical/pillbottle/item_to_spawn()
|
||||
return pick(prob(1);/obj/item/weapon/storage/pill_bottle/spaceacillin,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/dermaline,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/dexalin_plus,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/bicaridine,
|
||||
prob(1);/obj/item/weapon/storage/pill_bottle/iron)
|
||||
|
||||
/obj/random/medical/lite
|
||||
name = "Random Medicine"
|
||||
desc = "This is a random simple medical item."
|
||||
@@ -167,7 +178,7 @@
|
||||
prob(2);/obj/item/stack/medical/advanced/ointment,
|
||||
prob(1);/obj/item/stack/medical/splint,
|
||||
prob(4);/obj/item/device/healthanalyzer,
|
||||
prob(1);/obj/item/bodybag/cryobag,
|
||||
prob(1);/obj/item/bodybag,
|
||||
prob(3);/obj/item/weapon/reagent_containers/hypospray/autoinjector,
|
||||
prob(2);/obj/item/weapon/storage/pill_bottle/kelotane,
|
||||
prob(2);/obj/item/weapon/storage/pill_bottle/antitox)
|
||||
|
||||
@@ -20,10 +20,12 @@
|
||||
new /obj/item/clothing/head/that(src)
|
||||
new /obj/item/device/radio/headset/headset_service(src)
|
||||
new /obj/item/device/radio/headset/headset_service(src)
|
||||
new /obj/item/clothing/head/hairflower(src)
|
||||
new /obj/item/clothing/head/hairflower/pink(src)
|
||||
new /obj/item/clothing/head/hairflower/yellow(src)
|
||||
new /obj/item/clothing/head/hairflower/blue(src)
|
||||
new /obj/item/clothing/head/pin/flower(src)
|
||||
new /obj/item/clothing/head/pin/flower/pink(src)
|
||||
new /obj/item/clothing/head/pin/flower/yellow(src)
|
||||
new /obj/item/clothing/head/pin/flower/blue(src)
|
||||
new /obj/item/clothing/head/pin/pink(src)
|
||||
new /obj/item/clothing/head/pin/magnetic(src)
|
||||
new /obj/item/clothing/under/sl_suit(src)
|
||||
new /obj/item/clothing/under/sl_suit(src)
|
||||
new /obj/item/clothing/under/rank/bartender(src)
|
||||
@@ -34,6 +36,7 @@
|
||||
new /obj/item/clothing/accessory/wcoat(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/laceup(src)
|
||||
|
||||
/*
|
||||
* Chef
|
||||
@@ -70,6 +73,7 @@
|
||||
/obj/structure/closet/jcloset/New()
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/janitor(src)
|
||||
new /obj/item/clothing/under/dress/maid/janitor(src)
|
||||
new /obj/item/device/radio/headset/headset_service(src)
|
||||
new /obj/item/weapon/cartridge/janitor(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
|
||||
@@ -312,3 +312,13 @@
|
||||
icon_state = icon_closed
|
||||
else
|
||||
icon_state = icon_opened
|
||||
|
||||
/obj/structure/closet/secure_closet/medical_wall/pills
|
||||
name = "pill cabinet"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/antitox(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/carbon(src)
|
||||
new /obj/random/medical/pillbottle(src)
|
||||
@@ -95,7 +95,7 @@
|
||||
qdel(src)
|
||||
else if(istype(W,/obj/item/stack))
|
||||
if(padding_material)
|
||||
user << "\The [src] is already padded."
|
||||
to_chat(user, "\The [src] is already padded.")
|
||||
return
|
||||
var/obj/item/stack/C = W
|
||||
if(C.get_amount() < 1) // How??
|
||||
@@ -110,21 +110,21 @@
|
||||
if(M.material && (M.material.flags & MATERIAL_PADDING))
|
||||
padding_type = "[M.material.name]"
|
||||
if(!padding_type)
|
||||
user << "You cannot pad \the [src] with that."
|
||||
to_chat(user, "You cannot pad \the [src] with that.")
|
||||
return
|
||||
C.use(1)
|
||||
if(!istype(src.loc, /turf))
|
||||
user.drop_from_inventory(src)
|
||||
src.loc = get_turf(src)
|
||||
user << "You add padding to \the [src]."
|
||||
to_chat(user, "You add padding to \the [src].")
|
||||
add_padding(padding_type)
|
||||
return
|
||||
|
||||
else if (istype(W, /obj/item/weapon/wirecutters))
|
||||
if(!padding_material)
|
||||
user << "\The [src] has no padding to remove."
|
||||
to_chat(user, "\The [src] has no padding to remove.")
|
||||
return
|
||||
user << "You remove the padding from \the [src]."
|
||||
to_chat(user, "You remove the padding from \the [src].")
|
||||
playsound(src.loc, W.usesound, 100, 1)
|
||||
remove_padding()
|
||||
|
||||
@@ -132,7 +132,7 @@
|
||||
var/obj/item/weapon/grab/G = W
|
||||
var/mob/living/affecting = G.affecting
|
||||
if(buckled_mob) //Handles trying to buckle someone else to a chair when someone else is on it
|
||||
user << "<span class='notice'>\The [src] already has someone buckled to it.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] already has someone buckled to it.</span>")
|
||||
return
|
||||
user.visible_message("<span class='notice'>[user] attempts to buckle [affecting] into \the [src]!</span>")
|
||||
if(do_after(user, 20, G.affecting))
|
||||
@@ -220,7 +220,7 @@
|
||||
user_unbuckle_mob(user)
|
||||
else
|
||||
visible_message("[user] collapses \the [src.name].")
|
||||
new bedtype(get_turf(src))
|
||||
new rollertype(get_turf(src))
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -246,7 +246,7 @@
|
||||
if(istype(W,/obj/item/roller_holder))
|
||||
var/obj/item/roller_holder/RH = W
|
||||
if(!RH.held)
|
||||
user << "<span class='notice'>You collect the roller bed.</span>"
|
||||
to_chat(user, "<span class='notice'>You collect the roller bed.</span>")
|
||||
src.loc = RH
|
||||
RH.held = src
|
||||
return
|
||||
@@ -275,11 +275,11 @@
|
||||
/obj/item/roller_holder/attack_self(mob/user as mob)
|
||||
|
||||
if(!held)
|
||||
user << "<span class='notice'>The rack is empty.</span>"
|
||||
to_chat(user, "<span class='notice'>The rack is empty.</span>")
|
||||
return
|
||||
|
||||
user << "<span class='notice'>You deploy the roller bed.</span>"
|
||||
var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc)
|
||||
to_chat(user, "<span class='notice'>You deploy the roller bed.</span>")
|
||||
var/obj/structure/bed/roller/R = new held.bedtype(user.loc)
|
||||
R.add_fingerprint(user)
|
||||
qdel(held)
|
||||
held = null
|
||||
|
||||
@@ -84,6 +84,24 @@ turf/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
S.gather_all(src, user)
|
||||
return ..()
|
||||
|
||||
/turf/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
||||
var/turf/T = get_turf(user)
|
||||
var/area/A = T.loc
|
||||
if((istype(A) && !(A.has_gravity)) || (istype(T,/turf/space)))
|
||||
return
|
||||
if(istype(O, /obj/screen))
|
||||
return
|
||||
if(user.restrained() || user.stat || user.stunned || user.paralysis)
|
||||
return
|
||||
if((!(istype(O, /atom/movable)) || O.anchored || !Adjacent(user) || !Adjacent(O) || !user.Adjacent(O)))
|
||||
return
|
||||
if(!isturf(O.loc) || !isturf(user.loc))
|
||||
return
|
||||
if(isanimal(user) && O != user)
|
||||
return
|
||||
if (do_after(user, 25 + (5 * user.weakened)) && !(user.stat))
|
||||
step_towards(O, src)
|
||||
|
||||
/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
|
||||
if(movement_disabled && usr.ckey != movement_disabled_exception)
|
||||
usr << "<span class='warning'>Movement is admin-disabled.</span>" //This is to identify lag problems
|
||||
|
||||
@@ -159,12 +159,24 @@
|
||||
|
||||
/datum/gear/head/hairflower
|
||||
display_name = "hair flower pin (colorable)"
|
||||
path = /obj/item/clothing/head/hairflower/white
|
||||
path = /obj/item/clothing/head/pin/flower/white
|
||||
|
||||
/datum/gear/head/hairflower/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/head/pin
|
||||
display_name = "pin selection"
|
||||
path = /obj/item/clothing/head/pin
|
||||
|
||||
/datum/gear/head/pin/New()
|
||||
..()
|
||||
var/list/pins = list()
|
||||
for(var/pin in typesof(/obj/item/clothing/head/pin))
|
||||
var/obj/item/clothing/head/pin/pin_type = pin
|
||||
pins[initial(pin_type.name)] = pin_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pins))
|
||||
|
||||
/datum/gear/head/hardhat
|
||||
display_name = "hardhat selection"
|
||||
path = /obj/item/clothing/head/hardhat
|
||||
@@ -295,11 +307,11 @@
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/head/bow
|
||||
display_name = "hair bow"
|
||||
path = /obj/item/clothing/head/hairflower/bow
|
||||
/datum/gear/head/bow/small
|
||||
display_name = "hair bow, small (colorable)"
|
||||
path = /obj/item/clothing/head/pin/bow
|
||||
|
||||
/datum/gear/head/bow/New()
|
||||
/datum/gear/head/bow/small/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
|
||||
@@ -384,18 +384,6 @@
|
||||
display_name = "denim vest, corporate"
|
||||
path = /obj/item/clothing/suit/storage/toggle/denim_jacket/nanotrasen/sleeveless
|
||||
|
||||
/datum/gear/suit/service
|
||||
display_name = "service jacket selection"
|
||||
path = /obj/item/clothing/suit/storage/service
|
||||
|
||||
/datum/gear/suit/service/New()
|
||||
..()
|
||||
var/list/services = list()
|
||||
for(var/service_style in typesof(/obj/item/clothing/suit/storage/service))
|
||||
var/obj/item/clothing/suit/storage/service/service = service_style
|
||||
services[initial(service.name)] = service
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(services))
|
||||
|
||||
/datum/gear/suit/miscellaneous/kimono
|
||||
display_name = "kimono"
|
||||
path = /obj/item/clothing/suit/kimono
|
||||
|
||||
@@ -363,38 +363,29 @@
|
||||
display_name = "red evening gown"
|
||||
path = /obj/item/clothing/under/dress/redeveninggown
|
||||
|
||||
/datum/gear/uniform/dresses/janimaid
|
||||
display_name = "maid uniform"
|
||||
path = /obj/item/clothing/under/dress/janimaid
|
||||
/datum/gear/uniform/dresses/maid
|
||||
display_name = "maid uniform selection"
|
||||
path = /obj/item/clothing/under/dress/maid
|
||||
|
||||
/datum/gear/uniform/dresses/sexymaid
|
||||
display_name = "sexy maid uniform"
|
||||
path = /obj/item/clothing/under/dress/sexymaid
|
||||
|
||||
/datum/gear/uniform/pt
|
||||
display_name = "pt uniform"
|
||||
path = /obj/item/clothing/under/pt
|
||||
|
||||
/datum/gear/uniform/pt/expeditionary
|
||||
display_name = "pt uniform, sifguard"
|
||||
path = /obj/item/clothing/under/pt/expeditionary
|
||||
|
||||
/datum/gear/uniform/pt/fleet
|
||||
display_name = "pt uniform, fleet"
|
||||
path = /obj/item/clothing/under/pt/fleet
|
||||
/datum/gear/uniform/dresses/maid/New()
|
||||
..()
|
||||
var/list/maids = list()
|
||||
for(var/maid in typesof(/obj/item/clothing/under/dress/maid))
|
||||
var/obj/item/clothing/under/dress/maid/maid_type = maid
|
||||
maids[initial(maid_type.name)] = maid_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(maids))
|
||||
|
||||
/datum/gear/uniform/utility
|
||||
display_name = "utility, black"
|
||||
path = /obj/item/clothing/under/utility
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/utility/fleet
|
||||
display_name = "utility, navy"
|
||||
path = /obj/item/clothing/under/utility/fleet
|
||||
/datum/gear/uniform/utility/blue
|
||||
display_name = "utility, blue"
|
||||
path = /obj/item/clothing/under/utility/blue
|
||||
|
||||
/datum/gear/uniform/utility/marine
|
||||
/datum/gear/uniform/utility/grey
|
||||
display_name = "utility, grey"
|
||||
path = /obj/item/clothing/under/utility/marine
|
||||
path = /obj/item/clothing/under/utility/grey
|
||||
|
||||
/datum/gear/uniform/sweater
|
||||
display_name = "sweater, grey"
|
||||
|
||||
@@ -189,6 +189,11 @@
|
||||
desc = "Slimes are quite dangerous, but just the aspect of something being slimey is uncomfortable."
|
||||
modifier_type = /datum/modifier/trait/phobia/blennophobe
|
||||
|
||||
/datum/trait/modifier/mental/trypanophobe
|
||||
name = "Trypanophobia"
|
||||
desc = "Syringes and needles make you very distressed. You really don't want to get sick..."
|
||||
modifier_type = /datum/modifier/trait/phobia/trypanophobe
|
||||
|
||||
/*
|
||||
// Uncomment this when/if these get finished.
|
||||
/datum/trait/modifier/mental/synthphobe
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
/obj/item/clothing/head/hardhat/orange
|
||||
icon_state = "hardhat0_orange"
|
||||
name = "orange hard hat"
|
||||
|
||||
/obj/item/clothing/head/hardhat/red
|
||||
icon_state = "hardhat0_red"
|
||||
@@ -23,9 +24,11 @@
|
||||
|
||||
/obj/item/clothing/head/hardhat/white
|
||||
icon_state = "hardhat0_white"
|
||||
name = "sleek hard hat"
|
||||
item_flags = STOPPRESSUREDAMAGE
|
||||
heat_protection = HEAD
|
||||
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
|
||||
/obj/item/clothing/head/hardhat/dblue
|
||||
name = "blue hard hat"
|
||||
icon_state = "hardhat0_dblue"
|
||||
|
||||
@@ -10,39 +10,79 @@
|
||||
desc = "A formal hat for SolGov Customs Officers."
|
||||
icon_state = "customshat"
|
||||
|
||||
/obj/item/clothing/head/hairflower
|
||||
name = "hair flower pin"
|
||||
icon_state = "hairflower"
|
||||
desc = "Smells nice."
|
||||
/obj/item/clothing/head/pin
|
||||
icon_state = "pin"
|
||||
addblends = "pin_a"
|
||||
name = "hair pin"
|
||||
desc = "A nice hair pin."
|
||||
slot_flags = SLOT_HEAD | SLOT_EARS
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/hairflower/blue
|
||||
/obj/item/clothing/head/pin/pink
|
||||
icon_state = "pinkpin"
|
||||
name = "pink hair hat"
|
||||
|
||||
/obj/item/clothing/head/pin/clover
|
||||
icon_state = "cloverpin"
|
||||
name = "clover pin"
|
||||
desc = "A hair pin in the shape of a clover leaf."
|
||||
|
||||
/obj/item/clothing/head/pin/butterfly
|
||||
icon_state = "butterflypin"
|
||||
name = "butterfly pin"
|
||||
desc = "A hair pin in the shape of a bright blue butterfly."
|
||||
|
||||
/obj/item/clothing/head/pin/magnetic
|
||||
icon_state = "magnetpin"
|
||||
name = "magnetic 'pin'"
|
||||
desc = "Finally, a hair pin even a Morpheus chassis can use."
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10)
|
||||
|
||||
/obj/item/clothing/head/pin/flower
|
||||
name = "red flower pin"
|
||||
icon_state = "hairflower"
|
||||
desc = "Smells nice."
|
||||
|
||||
/obj/item/clothing/head/pin/flower/blue
|
||||
icon_state = "hairflower_blue"
|
||||
name = "blue flower pin"
|
||||
|
||||
/obj/item/clothing/head/hairflower/pink
|
||||
/obj/item/clothing/head/pin/flower/pink
|
||||
icon_state = "hairflower_pink"
|
||||
name = "pink flower pin"
|
||||
|
||||
/obj/item/clothing/head/hairflower/yellow
|
||||
/obj/item/clothing/head/pin/flower/yellow
|
||||
icon_state = "hairflower_yellow"
|
||||
name = "yellow flower pin"
|
||||
|
||||
/obj/item/clothing/head/hairflower/violet
|
||||
/obj/item/clothing/head/pin/flower/violet
|
||||
icon_state = "hairflower_violet"
|
||||
name = "violet flower pin"
|
||||
|
||||
/obj/item/clothing/head/hairflower/orange
|
||||
/obj/item/clothing/head/pin/flower/orange
|
||||
icon_state = "hairflower_orange"
|
||||
name = "orange flower pin"
|
||||
|
||||
/obj/item/clothing/head/hairflower/white
|
||||
/obj/item/clothing/head/pin/flower/white
|
||||
icon_state = "hairflower_white"
|
||||
addblends = "hairflower_white_a"
|
||||
name = "flower pin"
|
||||
|
||||
/obj/item/clothing/head/hairflower/bow
|
||||
/obj/item/clothing/head/pin/bow
|
||||
icon_state = "bow"
|
||||
addblends = "bow_a"
|
||||
name = "hair bow"
|
||||
desc = "A ribbon tied into a bow with a clip on the back to attach to hair."
|
||||
item_state_slots = list(slot_r_hand_str = "pill", slot_l_hand_str = "pill")
|
||||
|
||||
/obj/item/clothing/head/pin/bow/big
|
||||
icon_state = "whiteribbon"
|
||||
name = "ribbon"
|
||||
|
||||
/obj/item/clothing/head/pin/bow/big/red
|
||||
icon_state = "redribbon"
|
||||
name = "red ribbon"
|
||||
|
||||
/obj/item/clothing/head/powdered_wig
|
||||
name = "powdered wig"
|
||||
desc = "A powdered wig."
|
||||
@@ -356,4 +396,10 @@
|
||||
name = "sombrero"
|
||||
desc = "A wide-brimmed hat popularly worn in Mexico."
|
||||
icon_state = "sombrero"
|
||||
body_parts_covered = 0
|
||||
|
||||
/obj/item/clothing/head/headband/maid
|
||||
name = "maid headband"
|
||||
desc = "Keeps hair out of the way for important... jobs."
|
||||
icon_state = "maid"
|
||||
body_parts_covered = 0
|
||||
@@ -20,6 +20,7 @@
|
||||
name = "galoshes"
|
||||
icon_state = "galoshes"
|
||||
permeability_coefficient = 0.05
|
||||
siemens_coefficient = 0 //They're thick rubber boots! Of course they won't conduct electricity!
|
||||
item_flags = NOSLIP
|
||||
slowdown = SHOES_SLOWDOWN+1
|
||||
species_restricted = null
|
||||
@@ -153,4 +154,4 @@
|
||||
item_state = "clothwrap"
|
||||
force = 0
|
||||
w_class = ITEMSIZE_SMALL
|
||||
species_restricted = null
|
||||
species_restricted = null
|
||||
|
||||
@@ -12,47 +12,47 @@
|
||||
siemens_coefficient = 0.9
|
||||
allowed = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/device/flashlight,/obj/item/weapon/pen,/obj/item/clothing/head/soft,/obj/item/clothing/head/beret,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/analyzer,/obj/item/device/radio,/obj/item/taperoll)
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary
|
||||
/obj/item/clothing/suit/storage/service/sifguard
|
||||
name = "\improper SifGuard jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons."
|
||||
icon_state = "blackservice_crew"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/medical
|
||||
/obj/item/clothing/suit/storage/service/sifguard/medical
|
||||
name = "\improper SifGuard medical jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and blue trim."
|
||||
icon_state = "blackservice_med"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/medical/command
|
||||
/obj/item/clothing/suit/storage/service/sifguard/medical/command
|
||||
name = "\improper SifGuard medical command jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and blue trim."
|
||||
icon_state = "blackservice_medcom"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/engineering
|
||||
/obj/item/clothing/suit/storage/service/sifguard/engineering
|
||||
name = "\improper SifGuard engineering jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and orange trim."
|
||||
icon_state = "blackservice_eng"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/engineering/command
|
||||
/obj/item/clothing/suit/storage/service/sifguard/engineering/command
|
||||
name = "\improper SifGuard engineering command jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and orange trim."
|
||||
icon_state = "blackservice_engcom"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/supply
|
||||
/obj/item/clothing/suit/storage/service/sifguard/supply
|
||||
name = "\improper SifGuard supply jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and brown trim."
|
||||
icon_state = "blackservice_sup"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/security
|
||||
/obj/item/clothing/suit/storage/service/sifguard/security
|
||||
name = "\improper SifGuard security jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has silver buttons and red trim."
|
||||
icon_state = "blackservice_sec"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/security/command
|
||||
/obj/item/clothing/suit/storage/service/sifguard/security/command
|
||||
name = "\improper SifGuard security command jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and red trim."
|
||||
icon_state = "blackservice_seccom"
|
||||
|
||||
/obj/item/clothing/suit/storage/service/expeditionary/command
|
||||
/obj/item/clothing/suit/storage/service/sifguard/command
|
||||
name = "\improper SifGuard command jacket"
|
||||
desc = "A uniform service jacket belonging to the Sif Defense Force. It has gold buttons and gold trim."
|
||||
icon_state = "blackservice_com"
|
||||
|
||||
@@ -150,16 +150,16 @@
|
||||
//Decorative attachments
|
||||
/obj/item/clothing/accessory/armor/tag
|
||||
name = "\improper SCG Flag"
|
||||
desc = "An emblem depicting the Sol Central Government's flag."
|
||||
desc = "An emblem depicting the Solar Confederate Government's flag."
|
||||
icon_override = 'icons/mob/modular_armor.dmi'
|
||||
icon = 'icons/obj/clothing/modular_armor.dmi'
|
||||
// accessory_icons = list(slot_tie_str = 'icons/mob/modular_armor.dmi', slot_wear_suit_str = 'icons/mob/modular_armor.dmi')
|
||||
icon_state = "solflag"
|
||||
slot = ACCESSORY_SLOT_ARMOR_M
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/ec
|
||||
name = "\improper Expeditionary Corps crest"
|
||||
desc = "An emblem depicting the crest of the SCG Expeditionary Corps."
|
||||
/obj/item/clothing/accessory/armor/tag/sifguard
|
||||
name = "\improper Sif Defense Force crest"
|
||||
desc = "An emblem depicting the crest of the Sif Defense Force."
|
||||
icon_state = "ecflag"
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/sec
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/com
|
||||
name = "\improper SCG tag"
|
||||
desc = "An armor tag with the words SOL CENTRAL GOVERNMENT printed in gold lettering on it."
|
||||
desc = "An armor tag with the words SOLAR CONFEDERATE GOVERNMENT printed in gold lettering on it."
|
||||
icon_state = "comtag"
|
||||
|
||||
/obj/item/clothing/accessory/armor/tag/nt
|
||||
|
||||
@@ -320,13 +320,13 @@
|
||||
desc = "Maid in China."
|
||||
icon_state = "maid"
|
||||
|
||||
/obj/item/clothing/under/dress/janimaid
|
||||
/obj/item/clothing/under/dress/maid/janitor
|
||||
name = "maid uniform"
|
||||
desc = "A simple maid uniform for housekeeping."
|
||||
icon_state = "janimaid"
|
||||
|
||||
/obj/item/clothing/under/dress/sexymaid
|
||||
name = "sexy maid uniform"
|
||||
/obj/item/clothing/under/dress/maid/sexy
|
||||
name = "sexy maid costume"
|
||||
desc = "You must be a bit risque teasing all of them in a maid uniform!"
|
||||
icon_state = "sexymaid"
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
siemens_coefficient = 0.9
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/obj/item/clothing/under/pt/expeditionary
|
||||
/obj/item/clothing/under/pt/sifguard
|
||||
name = "\improper SifGuard pt uniform"
|
||||
desc = "A baggy shirt bearing the seal of the Sif Defense Force and some dorky looking blue shorts."
|
||||
icon_state = "expeditionpt"
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
|
||||
//Utility
|
||||
|
||||
//These are just colored
|
||||
/obj/item/clothing/under/utility
|
||||
name = "utility uniform"
|
||||
desc = "A comfortable turtleneck and black utility trousers."
|
||||
@@ -39,56 +39,69 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary
|
||||
/obj/item/clothing/under/utility/blue
|
||||
name = "utility uniform"
|
||||
desc = "A comfortable blue utility jumpsuit."
|
||||
icon_state = "navyutility"
|
||||
worn_state = "navyutility"
|
||||
|
||||
/obj/item/clothing/under/utility/grey
|
||||
name = "utility uniform"
|
||||
desc = "A comfortable grey utility jumpsuit."
|
||||
icon_state = "greyutility"
|
||||
worn_state = "greyutility"
|
||||
|
||||
//Here's the real ones
|
||||
/obj/item/clothing/under/utility/sifguard
|
||||
name = "\improper SifGuard uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim."
|
||||
icon_state = "blackutility_crew"
|
||||
worn_state = "blackutility_crew"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/medical
|
||||
/obj/item/clothing/under/utility/sifguard/medical
|
||||
name = "\improper SifGuard medical uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and blue blazes."
|
||||
icon_state = "blackutility_med"
|
||||
worn_state = "blackutility_med"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/medical/command
|
||||
/obj/item/clothing/under/utility/sifguard/medical/command
|
||||
name = "\improper SifGuard medical command uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and blue blazes."
|
||||
icon_state = "blackutility_medcom"
|
||||
worn_state = "blackutility_medcom"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/engineering
|
||||
/obj/item/clothing/under/utility/sifguard/engineering
|
||||
name = "\improper SifGuard engineering uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and organge blazes."
|
||||
icon_state = "blackutility_eng"
|
||||
worn_state = "blackutility_eng"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/engineering/command
|
||||
/obj/item/clothing/under/utility/sifguard/engineering/command
|
||||
name = "\improper SifGuard engineering command uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and organge blazes."
|
||||
icon_state = "blackutility_engcom"
|
||||
worn_state = "blackutility_engcom"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/supply
|
||||
/obj/item/clothing/under/utility/sifguard/supply
|
||||
name = "\improper SifGuard supply uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and brown blazes."
|
||||
icon_state = "blackutility_sup"
|
||||
worn_state = "blackutility_sup"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/security
|
||||
/obj/item/clothing/under/utility/sifguard/security
|
||||
name = "\improper SifGuard security uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has silver trim and red blazes."
|
||||
icon_state = "blackutility_sec"
|
||||
worn_state = "blackutility_sec"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/security/command
|
||||
/obj/item/clothing/under/utility/sifguard/security/command
|
||||
name = "\improper SifGuard security command uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and red blazes."
|
||||
icon_state = "blackutility_seccom"
|
||||
worn_state = "blackutility_seccom"
|
||||
|
||||
/obj/item/clothing/under/utility/expeditionary/command
|
||||
/obj/item/clothing/under/utility/sifguard/command
|
||||
name = "\improper SifGuard command uniform"
|
||||
desc = "The utility uniform of the Sif Defense Force, made from biohazard resistant material. This one has gold trim and gold blazes."
|
||||
icon_state = "blackutility_com"
|
||||
@@ -220,13 +233,13 @@
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
siemens_coefficient = 0.9
|
||||
|
||||
/obj/item/clothing/under/mildress/expeditionary
|
||||
/obj/item/clothing/under/mildress/sifguard
|
||||
name = "\improper SifGuard dress uniform"
|
||||
desc = "The dress uniform of the Sif Defense Force in silver trim."
|
||||
icon_state = "greydress"
|
||||
worn_state = "greydress"
|
||||
|
||||
/obj/item/clothing/under/mildress/expeditionary/command
|
||||
/obj/item/clothing/under/mildress/sifguard/command
|
||||
name = "\improper SifGuard command dress uniform"
|
||||
desc = "The dress uniform of the Sif Defense Force in gold trim."
|
||||
icon_state = "greydress_com"
|
||||
|
||||
@@ -65,7 +65,11 @@
|
||||
..()
|
||||
|
||||
/obj/item/weapon/deck/attack_hand(mob/user as mob)
|
||||
draw_card()
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(src.loc, /obj/item/weapon/storage) || src == H.r_store || src == H.l_store || src.loc == user) // so objects can be removed from storage containers or pockets. also added a catch-all, so if it's in the mob you'll pick it up.
|
||||
..()
|
||||
else // but if they're not, or are in your hands, you can still draw cards.
|
||||
draw_card()
|
||||
|
||||
/obj/item/weapon/deck/verb/draw_card()
|
||||
|
||||
|
||||
@@ -441,6 +441,96 @@
|
||||
return
|
||||
return fear_amount
|
||||
|
||||
/datum/modifier/trait/phobia/trypanophobe
|
||||
name = "trypanophobia"
|
||||
desc = "Syringes and needles make you very distressed. You really don't want to get sick..."
|
||||
fear_decay_rate = 100
|
||||
|
||||
on_created_text = "<span class='warning'>You are terrified by needles.</span>"
|
||||
on_expired_text = "<span class='notice'>You feel better about being near needles..</span>"
|
||||
|
||||
|
||||
zero_fear_up = list(
|
||||
"<span class='warning'><font size='3'>That's a needle!</font></span>",
|
||||
"<span class='warning'><font size='3'>There's a needle right there!</font></span>"
|
||||
)
|
||||
zero_fear_down = list(
|
||||
"<span class='notice'>The needle is gone, no need to worry.</span>",
|
||||
"<span class='notice'>No more needle.</span>"
|
||||
)
|
||||
|
||||
half_fear_up = list(
|
||||
"<span class='danger'><font size='3'>The needle could get you at any time!</font></span>",
|
||||
"<span class='danger'><font size='3'>The needle is still there!</font></span>"
|
||||
)
|
||||
half_fear_down = list(
|
||||
"<span class='warning'>There are no more needles... right?</span>",
|
||||
"<span class='warning'>You don't see any more needles... But you can never be sure.</span>"
|
||||
)
|
||||
|
||||
full_fear_up = list(
|
||||
"<span class='danger'><font size='4'>The needles are going to pierce you!</font></span>",
|
||||
"<span class='danger'><font size='4'>They could get you any second!</font></span>"
|
||||
)
|
||||
full_fear_down = list(
|
||||
"<span class='danger'>There are more needles around, you can feel it...</span>",
|
||||
"<span class='danger'>No more needles, please...</span>"
|
||||
)
|
||||
|
||||
/datum/modifier/trait/phobia/trypanophobe/should_fear()
|
||||
if(holder.blinded)
|
||||
return 0 //Cannot feareth what cannot beest seen
|
||||
|
||||
var/fear_amount = 0
|
||||
|
||||
for(var/atom/thing in view(5, holder)) // See haemophobia for why this is 5.
|
||||
|
||||
if(istype(thing, /obj/item/weapon/reagent_containers/syringe))
|
||||
fear_amount += 4
|
||||
|
||||
if(istype(thing, /obj/machinery/iv_drip))
|
||||
var/obj/machinery/iv_drip/I = thing
|
||||
if(I.beaker)
|
||||
fear_amount += 8
|
||||
else
|
||||
fear_amount += 6
|
||||
|
||||
if(istype(thing, /obj/item/weapon/reagent_containers/hypospray))
|
||||
fear_amount += 2 //Needle doesn't look as intimidating.
|
||||
|
||||
if(istype(thing, /obj/item/weapon/reagent_containers/hypospray/autoinjector)) //Don't know if I need to define autoinjectors too. Meh.
|
||||
fear_amount += 3
|
||||
|
||||
if(istype(thing, /obj/item/rig_module/chem_dispenser))
|
||||
fear_amount += 5
|
||||
|
||||
if(istype(thing, /obj/item/weapon/storage/box/syringes))
|
||||
fear_amount += 2
|
||||
|
||||
if(istype(thing, /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun))
|
||||
fear_amount += 8 //Syringe gun for a big ass mech.
|
||||
|
||||
if(istype(thing, /obj/machinery/sleep_console)) //Sleepers got them needles in them.
|
||||
fear_amount += 4
|
||||
|
||||
if(istype(thing, /obj/item/weapon/implanter))
|
||||
fear_amount += 8 //Very big needle.
|
||||
|
||||
if(istype(thing, /obj/item/weapon/gun/launcher/syringe))
|
||||
fear_amount += 6
|
||||
|
||||
if(istype(thing, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = thing
|
||||
if(H.l_hand && istype(H.l_hand, /obj/item/weapon/reagent_containers/syringe) || H.r_hand && istype(H.r_hand, /obj/item/weapon/reagent_containers/syringe))
|
||||
fear_amount += 10
|
||||
|
||||
if(H.l_ear && istype(H.l_ear, /obj/item/weapon/reagent_containers/syringe) || H.r_ear && istype(H.r_ear, /obj/item/weapon/reagent_containers/syringe))
|
||||
fear_amount +=10
|
||||
|
||||
|
||||
return fear_amount
|
||||
|
||||
|
||||
// Note for the below 'phobias' are of the xeno-phobic variety, and are less centered on pure fear as above, and more on a mix of distrust, fear, and disdainfulness.
|
||||
// As such, they are mechanically different than the fear-based phobias, in that instead of a buildup of fearful messages, it does intermittent messages specific to what holder sees.
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ var/global/list/damage_icon_parts = list()
|
||||
var/damage_appearance = ""
|
||||
|
||||
for(var/obj/item/organ/external/O in organs)
|
||||
if(O.is_stump())
|
||||
if(isnull(O) || O.is_stump())
|
||||
continue
|
||||
damage_appearance += O.damage_state
|
||||
|
||||
@@ -209,7 +209,7 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
// blend the individual damage states with our icons
|
||||
for(var/obj/item/organ/external/O in organs)
|
||||
if(O.is_stump())
|
||||
if(isnull(O) || O.is_stump())
|
||||
continue
|
||||
|
||||
O.update_icon()
|
||||
@@ -1267,7 +1267,7 @@ var/global/list/damage_icon_parts = list()
|
||||
var/image/total = new
|
||||
for(var/obj/item/organ/external/E in organs)
|
||||
if(E.open)
|
||||
var/image/I = image("icon"='icons/mob/surgery.dmi', "icon_state"="[E.name][round(E.open)]", "layer"=-SURGERY_LEVEL)
|
||||
var/image/I = image("icon"='icons/mob/surgery.dmi', "icon_state"="[E.icon_name][round(E.open)]", "layer"=-SURGERY_LEVEL)
|
||||
total.overlays += I
|
||||
overlays_standing[SURGERY_LEVEL] = total
|
||||
if(update_icons) update_icons()
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
wrapped = null
|
||||
return
|
||||
|
||||
src.loc << "<span class='danger'>You drop \the [wrapped].</span>"
|
||||
to_chat(src.loc, "<span class='danger'>You drop \the [wrapped].</span>")
|
||||
wrapped.loc = get_turf(src)
|
||||
wrapped = null
|
||||
//update_icon()
|
||||
@@ -202,11 +202,14 @@
|
||||
if(wrapped) //The force of the wrapped obj gets set to zero during the attack() and afterattack().
|
||||
force_holder = wrapped.force
|
||||
wrapped.force = 0.0
|
||||
wrapped.attack(M,user)
|
||||
M.attackby(wrapped, user) //attackby reportedly gets procced by being clicked on, at least according to Anewbe.
|
||||
if(QDELETED(wrapped) || wrapped.loc != src.loc)
|
||||
if(QDELETED(wrapped) || wrapped.loc != src.loc) //qdel check here so it doesn't duplicate/spawn ghost items
|
||||
wrapped = null
|
||||
return 1
|
||||
else
|
||||
wrapped.attack(M,user)
|
||||
M.attackby(wrapped, user) //attackby reportedly gets procced by being clicked on, at least according to Anewbe.
|
||||
if(QDELETED(wrapped) || wrapped.loc != src.loc)
|
||||
wrapped = null
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gripper/afterattack(var/atom/target, var/mob/living/user, proximity, params)
|
||||
@@ -256,12 +259,12 @@
|
||||
|
||||
//We can grab the item, finally.
|
||||
if(grab)
|
||||
user << "You collect \the [I]."
|
||||
to_chat(user, "You collect \the [I].")
|
||||
I.loc = src
|
||||
wrapped = I
|
||||
return
|
||||
else
|
||||
user << "<span class='danger'>Your gripper cannot hold \the [target].</span>"
|
||||
to_chat(user, "<span class='danger'>Your gripper cannot hold \the [target].</span>")
|
||||
|
||||
else if(istype(target,/obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/A = target
|
||||
@@ -342,15 +345,15 @@
|
||||
if(!istype(D))
|
||||
return
|
||||
|
||||
D << "<span class='danger'>You begin decompiling [M].</span>"
|
||||
to_chat(D, "<span class='danger'>You begin decompiling [M].</span>")
|
||||
|
||||
if(!do_after(D,50))
|
||||
D << "<span class='danger'>You need to remain still while decompiling such a large object.</span>"
|
||||
to_chat(D, "<span class='danger'>You need to remain still while decompiling such a large object.</span>")
|
||||
return
|
||||
|
||||
if(!M || !D) return
|
||||
|
||||
D << "<span class='danger'>You carefully and thoroughly decompile [M], storing as much of its resources as you can within yourself.</span>"
|
||||
to_chat(D, "<span class='danger'>You carefully and thoroughly decompile [M], storing as much of its resources as you can within yourself.</span>")
|
||||
qdel(M)
|
||||
new/obj/effect/decal/cleanable/blood/oil(get_turf(src))
|
||||
|
||||
@@ -423,16 +426,16 @@
|
||||
grabbed_something = 1
|
||||
|
||||
if(grabbed_something)
|
||||
user << "<span class='notice'>You deploy your decompiler and clear out the contents of \the [T].</span>"
|
||||
to_chat(user, "<span class='notice'>You deploy your decompiler and clear out the contents of \the [T].</span>")
|
||||
else
|
||||
user << "<span class='danger'>Nothing on \the [T] is useful to you.</span>"
|
||||
to_chat(user, "<span class='danger'>Nothing on \the [T] is useful to you.</span>")
|
||||
return
|
||||
|
||||
//PRETTIER TOOL LIST.
|
||||
/mob/living/silicon/robot/drone/installed_modules()
|
||||
|
||||
if(weapon_lock)
|
||||
src << "<span class='danger'>Weapon lock active, unable to use modules! Count:[weaponlock_time]</span>"
|
||||
to_chat(src, "<span class='danger'>Weapon lock active, unable to use modules! Count:[weaponlock_time]</span>")
|
||||
return
|
||||
|
||||
if(!module)
|
||||
|
||||
@@ -94,12 +94,18 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
icon = 'icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_main.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/cybersolutions_alt1
|
||||
/datum/robolimb/cybersolutions_alt2
|
||||
company = "Cyber Solutions - Array"
|
||||
desc = "This limb is simple and functional; array of sensors on a featureless case."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt1.dmi'
|
||||
icon = 'icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt2.dmi'
|
||||
unavailable_to_build = 1
|
||||
parts = list(BP_HEAD)
|
||||
|
||||
/datum/robolimb/cybersolutions_alt1
|
||||
company = "Cyber Solutions - Wight"
|
||||
desc = "This limb has cheap plastic panels mounted on grey metal."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt1.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/grayson
|
||||
company = "Grayson"
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/ionrifle/pistol
|
||||
name = "ion pistol"
|
||||
desc = "The NT Mk63 EW Pan is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. This model sacrifices capacity for portability.."
|
||||
desc = "The NT Mk63 EW Pan is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. This model sacrifices capacity for portability."
|
||||
icon_state = "ionpistol"
|
||||
item_state = null
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
@@ -127,7 +127,7 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/staff
|
||||
name = "staff of change"
|
||||
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself"
|
||||
desc = "An artifact that spits bolts of coruscating energy which cause the target's very form to reshape itself."
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
item_icons = null
|
||||
icon_state = "staffofchange"
|
||||
@@ -144,7 +144,7 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/staff/special_check(var/mob/user)
|
||||
if((user.mind && !wizards.is_antagonist(user.mind)))
|
||||
usr << "<span class='warning'>You focus your mind on \the [src], but nothing happens!</span>"
|
||||
to_chat(usr, "<span class='warning'>You focus your mind on \the [src], but nothing happens!</span>")
|
||||
return 0
|
||||
|
||||
return ..()
|
||||
@@ -158,13 +158,13 @@
|
||||
|
||||
/obj/item/weapon/gun/energy/staff/animate
|
||||
name = "staff of animation"
|
||||
desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
|
||||
desc = "An artifact that spits bolts of life force, which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
|
||||
projectile_type = /obj/item/projectile/animate
|
||||
charge_cost = 240
|
||||
|
||||
obj/item/weapon/gun/energy/staff/focus
|
||||
name = "mental focus"
|
||||
desc = "An artefact that channels the will of the user into destructive bolts of force. If you aren't careful with it, you might poke someone's brain out."
|
||||
desc = "An artifact that channels the will of the user into destructive bolts of force. If you aren't careful with it, you might poke someone's brain out."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "focus"
|
||||
slot_flags = SLOT_BACK
|
||||
@@ -173,17 +173,17 @@ obj/item/weapon/gun/energy/staff/focus
|
||||
attack_self(mob/living/user as mob)
|
||||
if(projectile_type == "/obj/item/projectile/forcebolt")
|
||||
charge_cost = 400
|
||||
user << "<span class='warning'>The [src.name] will now strike a small area.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name] will now strike a small area.</span>")
|
||||
projectile_type = "/obj/item/projectile/forcebolt/strong"
|
||||
else
|
||||
charge_cost = 200
|
||||
user << "<span class='warning'>The [src.name] will now strike only a single person.</span>"
|
||||
to_chat(user, "<span class='warning'>The [src.name] will now strike only a single person.</span>")
|
||||
projectile_type = "/obj/item/projectile/forcebolt"
|
||||
*/
|
||||
|
||||
/obj/item/weapon/gun/energy/dakkalaser
|
||||
name = "suppression gun"
|
||||
desc = "A massive weapon, designed to pressure the opposition by raining down a torrent of energy pellets."
|
||||
desc = "A massive weapon designed to pressure the opposition by raining down a torrent of energy pellets."
|
||||
icon_state = "dakkalaser"
|
||||
item_state = "dakkalaser"
|
||||
fire_sound = 'sound/weapons/Laser.ogg'
|
||||
@@ -200,4 +200,4 @@ obj/item/weapon/gun/energy/staff/focus
|
||||
list(mode_name="single shot", burst = 1, burst_accuracy = list(5), dispersion = list(0), charge_cost = 24),
|
||||
list(mode_name="five shot burst", burst = 5, burst_accuracy = list(5,5,5,5,5), dispersion = list(1,1,1,1,1)),
|
||||
list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(5,5,5,5,5,5,5,5,5,5), dispersion = list(2,2,2,2,2,2,2,2,2,2)),
|
||||
)
|
||||
)
|
||||
|
||||
@@ -288,14 +288,20 @@
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/limit = 10
|
||||
var/list/holdingitems = list()
|
||||
var/list/sheet_reagents = list(
|
||||
/obj/item/stack/material/iron = "iron",
|
||||
/obj/item/stack/material/uranium = "uranium",
|
||||
/obj/item/stack/material/phoron = "phoron",
|
||||
/obj/item/stack/material/gold = "gold",
|
||||
/obj/item/stack/material/silver = "silver",
|
||||
/obj/item/stack/material/platinum = "platinum",
|
||||
/obj/item/stack/material/mhydrogen = "hydrogen"
|
||||
var/list/sheet_reagents = list( //have a number of reageents divisible by REAGENTS_PER_SHEET (default 20) unless you like decimals,
|
||||
/obj/item/stack/material/iron = list("iron"),
|
||||
/obj/item/stack/material/uranium = list("uranium"),
|
||||
/obj/item/stack/material/phoron = list("phoron"),
|
||||
/obj/item/stack/material/gold = list("gold"),
|
||||
/obj/item/stack/material/silver = list("silver"),
|
||||
/obj/item/stack/material/platinum = list("platinum"),
|
||||
/obj/item/stack/material/mhydrogen = list("hydrogen"),
|
||||
/obj/item/stack/material/steel = list("iron", "carbon"),
|
||||
/obj/item/stack/material/plasteel = list("iron", "iron", "carbon", "carbon", "platinum"), //8 iron, 8 carbon, 4 platinum,
|
||||
/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/glass/phoronglass = list("platinum", "silicon", "silicon", "silicon"), //5 platinum, 15 silicon,
|
||||
)
|
||||
|
||||
/obj/machinery/reagentgrinder/New()
|
||||
@@ -497,12 +503,18 @@
|
||||
if(sheet_reagents[O.type])
|
||||
var/obj/item/stack/stack = O
|
||||
if(istype(stack))
|
||||
var/list/sheet_components = sheet_reagents[stack.type]
|
||||
var/amount_to_take = max(0,min(stack.amount,round(remaining_volume/REAGENTS_PER_SHEET)))
|
||||
if(amount_to_take)
|
||||
stack.use(amount_to_take)
|
||||
if(QDELETED(stack))
|
||||
holdingitems -= stack
|
||||
beaker.reagents.add_reagent(sheet_reagents[stack.type], (amount_to_take*REAGENTS_PER_SHEET))
|
||||
if(islist(sheet_components))
|
||||
amount_to_take = (amount_to_take/(sheet_components.len))
|
||||
for(var/i in sheet_components)
|
||||
beaker.reagents.add_reagent(i, (amount_to_take*REAGENTS_PER_SHEET))
|
||||
else
|
||||
beaker.reagents.add_reagent(sheet_components, (amount_to_take*REAGENTS_PER_SHEET))
|
||||
continue
|
||||
|
||||
if(O.reagents)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/pint(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/mug(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/glass2/wine(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/metaglass(src)
|
||||
|
||||
/obj/item/weapon/storage/box/glasses
|
||||
name = "box of glasses"
|
||||
@@ -55,6 +56,10 @@
|
||||
name = "box of wine glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/glass2/wine
|
||||
|
||||
/obj/item/weapon/storage/box/glasses/meta
|
||||
name = "box of half-pint metamorphic glasses"
|
||||
glass_type = /obj/item/weapon/reagent_containers/food/drinks/metaglass
|
||||
|
||||
/obj/item/weapon/storage/box/glass_extras
|
||||
name = "box of cocktail garnishings"
|
||||
var/extra_type = /obj/item/weapon/glass_extra
|
||||
|
||||
@@ -0,0 +1,502 @@
|
||||
/obj/item/weapon/reagent_containers/food/drinks/metaglass
|
||||
name = "metamorphic glass"
|
||||
desc = "This glass changes shape and form depending on the drink inside... fancy!"
|
||||
icon_state = "glass_empty"
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 30
|
||||
unacidable = 1 //glass
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
matter = list("glass" = 500)
|
||||
icon = 'icons/obj/drinks.dmi'
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/metaglass/on_reagent_change()
|
||||
if (reagents.reagent_list.len > 0)
|
||||
var/datum/reagent/R = reagents.get_master_reagent()
|
||||
|
||||
if(R.glass_icon_state)
|
||||
icon_state = R.glass_icon_state
|
||||
else
|
||||
icon_state = "glass_brown"
|
||||
|
||||
if(R.glass_name)
|
||||
name = R.glass_name
|
||||
else
|
||||
name = "Glass of.. what?"
|
||||
|
||||
if(R.glass_desc)
|
||||
desc = R.glass_desc
|
||||
else
|
||||
desc = "You can't really tell what this is."
|
||||
|
||||
if(R.glass_center_of_mass)
|
||||
center_of_mass = R.glass_center_of_mass
|
||||
else
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
|
||||
if(R.price_tag)
|
||||
price_tag = R.price_tag
|
||||
else
|
||||
price_tag = null
|
||||
else
|
||||
icon_state = "glass_empty"
|
||||
name = "metamorphic glass"
|
||||
desc = "This glass changes shape and form depending on the drink inside... fancy!"
|
||||
center_of_mass = list("x"=16, "y"=10)
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
Drinks Data
|
||||
*/
|
||||
|
||||
/datum/reagent
|
||||
var/glass_icon_state = null
|
||||
var/glass_center_of_mass = null
|
||||
|
||||
/datum/reagent/adminordrazine
|
||||
glass_icon_state = "golden_cup"
|
||||
|
||||
/datum/reagent/chloralhydrate/beer2
|
||||
glass_icon_state = "beerglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/blood
|
||||
glass_icon_state = "glass_red"
|
||||
|
||||
/datum/reagent/water
|
||||
glass_icon_state = "glass_clear"
|
||||
|
||||
/datum/reagent/fuel
|
||||
glass_icon_state = "dr_gibb_glass"
|
||||
|
||||
/datum/reagent/ethanol
|
||||
glass_icon_state = "glass_clear"
|
||||
|
||||
/datum/reagent/sugar
|
||||
glass_icon_state = "iceglass"
|
||||
|
||||
/datum/reagent/drink/juice/banana
|
||||
glass_icon_state = "banana"
|
||||
|
||||
/datum/reagent/drink/juice/berry
|
||||
glass_icon_state = "berryjuice"
|
||||
|
||||
/datum/reagent/drink/juice/carrot
|
||||
glass_icon_state = "carrotjuice"
|
||||
|
||||
/datum/reagent/drink/juice/
|
||||
glass_icon_state = "grapejuice"
|
||||
|
||||
/datum/reagent/drink/juice/lemon
|
||||
glass_icon_state = "lemonjuice"
|
||||
|
||||
/datum/reagent/drink/juice/lime
|
||||
glass_icon_state = "glass_green"
|
||||
|
||||
/datum/reagent/drink/juice/orange
|
||||
glass_icon_state = "glass_orange"
|
||||
|
||||
/datum/reagent/toxin/poisonberryjuice
|
||||
glass_icon_state = "poisonberryjuice"
|
||||
|
||||
/datum/reagent/drink/juice/potato
|
||||
glass_icon_state = "glass_brown"
|
||||
|
||||
/datum/reagent/drink/juice/tomato
|
||||
glass_icon_state = "glass_red"
|
||||
|
||||
/datum/reagent/drink/juice/watermelon
|
||||
glass_icon_state = "glass_red"
|
||||
|
||||
/datum/reagent/drink/milk
|
||||
glass_icon_state = "glass_white"
|
||||
|
||||
/datum/reagent/drink/chocolate
|
||||
glass_icon_state = "glass_brown"
|
||||
|
||||
/datum/reagent/drink/tea
|
||||
glass_icon_state = "bigteacup"
|
||||
|
||||
/datum/reagent/drink/tea/icetea
|
||||
glass_icon_state = "icedteaglass"
|
||||
glass_center_of_mass = list("x"=15, "y"=10)
|
||||
|
||||
/datum/reagent/drink/coffee
|
||||
glass_icon_state = "hot_coffee"
|
||||
|
||||
/datum/reagent/drink/icecoffee
|
||||
glass_icon_state = "icedcoffeeglass"
|
||||
|
||||
/datum/reagent/drink/soy_latte
|
||||
glass_icon_state = "soy_latte"
|
||||
glass_center_of_mass = list("x"=15, "y"=9)
|
||||
|
||||
/datum/reagent/drink/cafe_latte
|
||||
glass_icon_state = "cafe_latte"
|
||||
glass_center_of_mass = list("x"=15, "y"=9)
|
||||
|
||||
/datum/reagent/drink/hot_coco
|
||||
glass_icon_state = "chocolateglass"
|
||||
|
||||
/datum/reagent/drink/soda/sodawater
|
||||
glass_icon_state = "glass_clear"
|
||||
|
||||
/datum/reagent/drink/soda/grapesoda
|
||||
glass_icon_state = "gsodaglass"
|
||||
|
||||
/datum/reagent/drink/soda/tonic
|
||||
glass_icon_state = "glass_clear"
|
||||
|
||||
/datum/reagent/drink/soda/lemonade
|
||||
glass_icon_state = "lemonadeglass"
|
||||
|
||||
/datum/reagent/drink/soda/kiraspecial
|
||||
glass_icon_state = "kiraspecial"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/drink/soda/brownstar
|
||||
glass_icon_state = "brownstar"
|
||||
|
||||
/datum/reagent/drink/milkshake
|
||||
glass_icon_state = "milkshake"
|
||||
glass_center_of_mass = list("x"=16, "y"=7)
|
||||
|
||||
/datum/reagent/drink/rewriter
|
||||
glass_icon_state = "rewriter"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/drink/soda/nuka_cola
|
||||
glass_icon_state = "nuka_colaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/datum/reagent/drink/grenadine
|
||||
glass_icon_state = "grenadineglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=6)
|
||||
|
||||
/datum/reagent/drink/soda/space_cola
|
||||
glass_icon_state = "glass_brown"
|
||||
|
||||
/datum/reagent/drink/soda/spacemountainwind
|
||||
glass_icon_state = "Space_mountain_wind_glass"
|
||||
|
||||
/datum/reagent/drink/soda/dr_gibb
|
||||
glass_icon_state = "dr_gibb_glass"
|
||||
|
||||
/datum/reagent/drink/soda/space_up
|
||||
glass_icon_state = "space-up_glass"
|
||||
|
||||
/datum/reagent/drink/soda/lemon_lime
|
||||
glass_icon_state = "lemonlime"
|
||||
|
||||
/datum/reagent/drink/doctor_delight
|
||||
glass_icon_state = "doctorsdelightglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/drink/ice
|
||||
glass_icon_state = "iceglass"
|
||||
|
||||
/datum/reagent/drink/nothing
|
||||
glass_icon_state = "nothing"
|
||||
|
||||
/datum/reagent/ethanol/absinthe
|
||||
glass_icon_state = "absintheglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=5)
|
||||
|
||||
/datum/reagent/ethanol/ale
|
||||
glass_icon_state = "aleglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/beer
|
||||
glass_icon_state = "beerglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/bluecuracao
|
||||
glass_icon_state = "curacaoglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=5)
|
||||
|
||||
/datum/reagent/ethanol/cognac
|
||||
glass_icon_state = "cognacglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=6)
|
||||
|
||||
/datum/reagent/ethanol/deadrum
|
||||
glass_icon_state = "rumglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/gin
|
||||
glass_icon_state = "ginvodkaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/coffee/kahlua
|
||||
glass_icon_state = "kahluaglass"
|
||||
glass_center_of_mass = list("x"=15, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/melonliquor
|
||||
glass_icon_state = "emeraldglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=5)
|
||||
|
||||
/datum/reagent/ethanol/rum
|
||||
glass_icon_state = "rumglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/sake
|
||||
glass_icon_state = "ginvodkaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/tequila
|
||||
glass_icon_state = "tequillaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/thirteenloko
|
||||
glass_icon_state = "thirteen_loko_glass"
|
||||
|
||||
/datum/reagent/ethanol/vermouth
|
||||
glass_icon_state = "vermouthglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/vodka
|
||||
glass_icon_state = "ginvodkaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/whiskey
|
||||
glass_icon_state = "whiskeyglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/wine
|
||||
glass_icon_state = "wineglass"
|
||||
glass_center_of_mass = list("x"=15, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/acid_spit
|
||||
glass_icon_state = "acidspitglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/alliescocktail
|
||||
glass_icon_state = "alliescocktail"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/aloe
|
||||
glass_icon_state = "aloe"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/amasec
|
||||
glass_icon_state = "amasecglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/andalusia
|
||||
glass_icon_state = "andalusia"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/antifreeze
|
||||
glass_icon_state = "antifreeze"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/atomicbomb
|
||||
glass_icon_state = "atomicbombglass"
|
||||
glass_center_of_mass = list("x"=15, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/b52
|
||||
glass_icon_state = "b52glass"
|
||||
|
||||
/datum/reagent/ethanol/bahama_mama
|
||||
glass_icon_state = "bahama_mama"
|
||||
glass_center_of_mass = list("x"=16, "y"=5)
|
||||
|
||||
/datum/reagent/ethanol/bananahonk
|
||||
glass_icon_state = "bananahonkglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/barefoot
|
||||
glass_icon_state = "b&p"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/beepsky_smash
|
||||
glass_icon_state = "beepskysmashglass"
|
||||
glass_center_of_mass = list("x"=18, "y"=10)
|
||||
|
||||
/datum/reagent/ethanol/bilk
|
||||
glass_icon_state = "glass_brown"
|
||||
|
||||
/datum/reagent/ethanol/black_russian
|
||||
glass_icon_state = "blackrussianglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/bloody_mary
|
||||
glass_icon_state = "bloodymaryglass"
|
||||
|
||||
/datum/reagent/ethanol/booger
|
||||
glass_icon_state = "booger"
|
||||
|
||||
/datum/reagent/ethanol/coffee/brave_bull
|
||||
glass_icon_state = "bravebullglass"
|
||||
glass_center_of_mass = list("x"=15, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/changelingsting
|
||||
glass_icon_state = "changelingsting"
|
||||
|
||||
/datum/reagent/ethanol/martini
|
||||
glass_icon_state = "martiniglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/cuba_libre
|
||||
glass_icon_state = "cubalibreglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/demonsblood
|
||||
glass_icon_state = "demonsblood"
|
||||
glass_center_of_mass = list("x"=16, "y"=2)
|
||||
|
||||
/datum/reagent/ethanol/devilskiss
|
||||
glass_icon_state = "devilskiss"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/driestmartini
|
||||
glass_icon_state = "driestmartiniglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/ginfizz
|
||||
glass_icon_state = "ginfizzglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/grog
|
||||
glass_icon_state = "grogglass"
|
||||
|
||||
/datum/reagent/ethanol/erikasurprise
|
||||
glass_icon_state = "erikasurprise"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/gargle_blaster
|
||||
glass_icon_state = "gargleblasterglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=6)
|
||||
|
||||
/datum/reagent/ethanol/gintonic
|
||||
glass_icon_state = "gintonicglass"
|
||||
|
||||
/datum/reagent/ethanol/goldschlager
|
||||
glass_icon_state = "ginvodkaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
|
||||
/datum/reagent/ethanol/hippies_delight
|
||||
glass_icon_state = "hippiesdelightglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/hooch
|
||||
glass_icon_state = "glass_brown2"
|
||||
|
||||
/datum/reagent/ethanol/iced_beer
|
||||
glass_icon_state = "iced_beerglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/irishcarbomb
|
||||
glass_icon_state = "irishcarbomb"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/coffee/irishcoffee
|
||||
glass_icon_state = "irishcoffeeglass"
|
||||
glass_center_of_mass = list("x"=15, "y"=10)
|
||||
|
||||
/datum/reagent/ethanol/irish_cream
|
||||
glass_icon_state = "irishcreamglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/longislandicedtea
|
||||
glass_icon_state = "longislandicedteaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/manhattan
|
||||
glass_icon_state = "manhattanglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/manhattan_proj
|
||||
glass_icon_state = "proj_manhattanglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/manly_dorf
|
||||
glass_icon_state = "manlydorfglass"
|
||||
|
||||
/datum/reagent/ethanol/margarita
|
||||
glass_icon_state = "margaritaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/mead
|
||||
glass_icon_state = "meadglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=10)
|
||||
|
||||
/datum/reagent/ethanol/moonshine
|
||||
glass_icon_state = "glass_clear"
|
||||
|
||||
/datum/reagent/ethanol/neurotoxin
|
||||
glass_icon_state = "neurotoxinglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/patron
|
||||
glass_icon_state = "patronglass"
|
||||
glass_center_of_mass = list("x"=7, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/pwine
|
||||
glass_icon_state = "pwineglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=5)
|
||||
|
||||
/datum/reagent/ethanol/red_mead
|
||||
glass_icon_state = "red_meadglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=10)
|
||||
|
||||
/datum/reagent/ethanol/sbiten
|
||||
glass_icon_state = "sbitenglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/screwdrivercocktail
|
||||
glass_icon_state = "screwdriverglass"
|
||||
glass_center_of_mass = list("x"=15, "y"=10)
|
||||
|
||||
/datum/reagent/ethanol/silencer
|
||||
glass_icon_state = "silencerglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/singulo
|
||||
glass_icon_state = "singulo"
|
||||
glass_center_of_mass = list("x"=17, "y"=4)
|
||||
|
||||
/datum/reagent/ethanol/snowwhite
|
||||
glass_icon_state = "snowwhite"
|
||||
glass_center_of_mass = list("x"=16, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/suidream
|
||||
glass_icon_state = "sdreamglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=5)
|
||||
|
||||
/datum/reagent/ethanol/syndicatebomb
|
||||
glass_icon_state = "syndicatebomb"
|
||||
glass_center_of_mass = list("x"=16, "y"=4)
|
||||
|
||||
/datum/reagent/ethanol/tequilla_sunrise
|
||||
glass_icon_state = "tequillasunriseglass"
|
||||
|
||||
/datum/reagent/ethanol/threemileisland
|
||||
glass_icon_state = "threemileislandglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=2)
|
||||
|
||||
/datum/reagent/ethanol/toxins_special
|
||||
glass_icon_state = "toxinsspecialglass"
|
||||
|
||||
/datum/reagent/ethanol/vodkamartini
|
||||
glass_icon_state = "martiniglass"
|
||||
glass_center_of_mass = list("x"=17, "y"=8)
|
||||
|
||||
/datum/reagent/ethanol/vodkatonic
|
||||
glass_icon_state = "vodkatonicglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=7)
|
||||
|
||||
/datum/reagent/ethanol/white_russian
|
||||
glass_icon_state = "whiterussianglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/whiskey_cola
|
||||
glass_icon_state = "whiskeycolaglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/whiskeysoda
|
||||
glass_icon_state = "whiskeysodaglass2"
|
||||
glass_center_of_mass = list("x"=16, "y"=9)
|
||||
|
||||
/datum/reagent/ethanol/specialwhiskey
|
||||
glass_icon_state = "whiskeyglass"
|
||||
glass_center_of_mass = list("x"=16, "y"=12)
|
||||
@@ -24,29 +24,29 @@
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? You don't have a mouth!"
|
||||
to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!")
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
user << "<span class='warning'>\The [blocked] is in the way!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>")
|
||||
return
|
||||
|
||||
M << "<span class='notice'>You swallow \the [src].</span>"
|
||||
M.drop_from_inventory(src) //icon update
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
return 1
|
||||
to_chat(M, "<span class='notice'>You swallow \the [src].</span>")
|
||||
M.drop_from_inventory(src) //icon update
|
||||
if(reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
return 1
|
||||
|
||||
else if(istype(M, /mob/living/carbon/human))
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!H.check_has_mouth())
|
||||
user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
|
||||
to_chat(user, "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!")
|
||||
return
|
||||
var/obj/item/blocked = H.check_mouth_coverage()
|
||||
if(blocked)
|
||||
user << "<span class='warning'>\The [blocked] is in the way!</span>"
|
||||
to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<span class='warning'>[user] attempts to force [M] to swallow \the [src].</span>")
|
||||
@@ -63,7 +63,7 @@
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Fed [name] to [key_name(M)] Reagents: [contained]</font>")
|
||||
msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
|
||||
if(reagents.total_volume)
|
||||
if(reagents && reagents.total_volume)
|
||||
reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
|
||||
qdel(src)
|
||||
|
||||
@@ -76,9 +76,9 @@
|
||||
|
||||
if(target.is_open_container() && target.reagents)
|
||||
if(!target.reagents.total_volume)
|
||||
user << "<span class='notice'>[target] is empty. Can't dissolve \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>[target] is empty. Can't dissolve \the [src].</span>")
|
||||
return
|
||||
user << "<span class='notice'>You dissolve \the [src] in [target].</span>"
|
||||
to_chat(user, "<span class='notice'>You dissolve \the [src] in [target].</span>")
|
||||
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Spiked \a [target] with a pill. Reagents: [reagentlist()]</font>")
|
||||
msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
@@ -98,7 +98,7 @@
|
||||
//Pills
|
||||
/obj/item/weapon/reagent_containers/pill/antitox
|
||||
name = "Anti-toxins pill"
|
||||
desc = "Neutralizes many common toxins."
|
||||
desc = "Neutralizes many common toxins. Contains 25 units of Dylovene."
|
||||
icon_state = "pill17"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/antitox/New()
|
||||
@@ -108,7 +108,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tox
|
||||
name = "Toxins pill"
|
||||
desc = "Highly toxic."
|
||||
desc = "Highly toxic." //this is cooler without "contains 50u toxin"
|
||||
icon_state = "pill5"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tox/New()
|
||||
@@ -118,7 +118,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/cyanide
|
||||
name = "Cyanide pill"
|
||||
desc = "Don't swallow this."
|
||||
desc = "Don't swallow this." //this is cooler without "contains 50u cyanide"
|
||||
icon_state = "pill5"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/cyanide/New()
|
||||
@@ -128,7 +128,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine
|
||||
name = "Adminordrazine pill"
|
||||
desc = "It's magic. We don't have to explain it."
|
||||
desc = "It's magic. We don't have to explain it." //it's space magic you don't need the quantity
|
||||
icon_state = "pill16"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/adminordrazine/New()
|
||||
@@ -137,7 +137,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/stox
|
||||
name = "Sleeping pill"
|
||||
desc = "Commonly used to treat insomnia."
|
||||
desc = "Commonly used to treat insomnia. Contains 15 units of Soporific."
|
||||
icon_state = "pill8"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/stox/New()
|
||||
@@ -147,7 +147,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/kelotane
|
||||
name = "Kelotane pill"
|
||||
desc = "Used to treat burns."
|
||||
desc = "Used to treat burns. Contains 15 units of Kelotane."
|
||||
icon_state = "pill11"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/kelotane/New()
|
||||
@@ -157,7 +157,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paracetamol
|
||||
name = "Paracetamol pill"
|
||||
desc = "Tylenol! A painkiller for the ages. Chewables!"
|
||||
desc = "Paracetamol! A painkiller for the ages. Chewables! Contains 15 units of Paracetamol."
|
||||
icon_state = "pill8"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/paracetamol/New()
|
||||
@@ -167,7 +167,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol
|
||||
name = "Tramadol pill"
|
||||
desc = "A simple painkiller."
|
||||
desc = "A simple painkiller. Contains 15 units of Tramadol."
|
||||
icon_state = "pill8"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/tramadol/New()
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methylphenidate
|
||||
name = "Methylphenidate pill"
|
||||
desc = "Improves the ability to concentrate."
|
||||
desc = "Improves the ability to concentrate. Contains 15 units of Methylphenidate."
|
||||
icon_state = "pill8"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/methylphenidate/New()
|
||||
@@ -187,7 +187,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/citalopram
|
||||
name = "Citalopram pill"
|
||||
desc = "Mild anti-depressant."
|
||||
desc = "Mild anti-depressant. Contains 15 units of Citalopram."
|
||||
icon_state = "pill8"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/citalopram/New()
|
||||
@@ -195,19 +195,9 @@
|
||||
reagents.add_reagent("citalopram", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline
|
||||
name = "Inaprovaline pill"
|
||||
desc = "Used to stabilize patients."
|
||||
icon_state = "pill20"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline/New()
|
||||
..()
|
||||
reagents.add_reagent("inaprovaline", 30)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin
|
||||
name = "Dexalin pill"
|
||||
desc = "Used to treat oxygen deprivation."
|
||||
desc = "Used to treat oxygen deprivation. Contains 15 units of Dexalin."
|
||||
icon_state = "pill16"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin/New()
|
||||
@@ -217,7 +207,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin_plus
|
||||
name = "Dexalin Plus pill"
|
||||
desc = "Used to treat extreme oxygen deprivation."
|
||||
desc = "Used to treat extreme oxygen deprivation. Contains 15 units of Dexalin Plus."
|
||||
icon_state = "pill8"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dexalin_plus/New()
|
||||
@@ -227,7 +217,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dermaline
|
||||
name = "Dermaline pill"
|
||||
desc = "Used to treat burn wounds."
|
||||
desc = "Used to treat burn wounds. Contains 15 units of Dermaline."
|
||||
icon_state = "pill12"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dermaline/New()
|
||||
@@ -237,7 +227,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dylovene
|
||||
name = "Dylovene pill"
|
||||
desc = "A broad-spectrum anti-toxin."
|
||||
desc = "A broad-spectrum anti-toxin. Contains 15 units of Dylovene."
|
||||
icon_state = "pill13"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/dylovene/New()
|
||||
@@ -247,7 +237,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline
|
||||
name = "Inaprovaline pill"
|
||||
desc = "Used to stabilize patients."
|
||||
desc = "Used to stabilize patients. Contains 30 units of Inaprovaline."
|
||||
icon_state = "pill20"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/inaprovaline/New()
|
||||
@@ -257,7 +247,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/bicaridine
|
||||
name = "Bicaridine pill"
|
||||
desc = "Used to treat physical injuries."
|
||||
desc = "Used to treat physical injuries. Contains 20 units of Bicaridine."
|
||||
icon_state = "pill18"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/bicaridine/New()
|
||||
@@ -265,9 +255,39 @@
|
||||
reagents.add_reagent("bicaridine", 20)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin
|
||||
name = "Spaceacillin pill"
|
||||
desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space. Contains 15 units of Spaceacillin."
|
||||
icon_state = "pill19"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin/New()
|
||||
..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/carbon
|
||||
name = "Carbon pill"
|
||||
desc = "Used to neutralise chemicals in the stomach. Contains 15 units of Carbon."
|
||||
icon_state = "pill7"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/carbon/New()
|
||||
..()
|
||||
reagents.add_reagent("carbon", 15)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/iron
|
||||
name = "Iron pill"
|
||||
desc = "Used to aid in blood regeneration after bleeding. Contains 15 units of Iron."
|
||||
icon_state = "pill4"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/iron/New()
|
||||
..()
|
||||
reagents.add_reagent("iron", 15)
|
||||
|
||||
//Not-quite-medicine
|
||||
/obj/item/weapon/reagent_containers/pill/happy
|
||||
name = "Happy pill"
|
||||
desc = "Happy happy joy joy!"
|
||||
desc = "Happy happy joy joy!" //we're not giving quantities for shady maint drugs
|
||||
icon_state = "pill18"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/happy/New()
|
||||
@@ -287,16 +307,6 @@
|
||||
reagents.add_reagent("synaptizine", 5)
|
||||
reagents.add_reagent("hyperzine", 5)
|
||||
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin
|
||||
name = "Spaceacillin pill"
|
||||
desc = "Contains antiviral agents."
|
||||
icon_state = "pill19"
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/spaceacillin/New()
|
||||
..()
|
||||
reagents.add_reagent("spaceacillin", 15)
|
||||
|
||||
/obj/item/weapon/reagent_containers/pill/diet
|
||||
name = "diet pill"
|
||||
desc = "Guaranteed to get you slim!"
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
// BONE SURGERY //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Bone Glue Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/glue_bone
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgical/bonegel = 100, \
|
||||
@@ -14,30 +18,34 @@
|
||||
min_duration = 50
|
||||
max_duration = 60
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
/datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message("<font color='blue'>[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].</font>" , \
|
||||
"<font color='blue'>You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].</font>")
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
/datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message("<font color='blue'>[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].</font>" , \
|
||||
"<font color='blue'>You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].</font>")
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] applies some [tool] to [target]'s bone in [affected.name]</font>", \
|
||||
"<font color='blue'>You apply some [tool] to [target]'s bone in [affected.name] with \the [tool].</font>")
|
||||
affected.stage = 1
|
||||
/datum/surgery_step/glue_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] applies some [tool] to [target]'s bone in [affected.name]</font>", \
|
||||
"<font color='blue'>You apply some [tool] to [target]'s bone in [affected.name] with \the [tool].</font>")
|
||||
affected.stage = 1
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>" , \
|
||||
"<font color='red'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>")
|
||||
/datum/surgery_step/glue_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>" , \
|
||||
"<font color='red'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>")
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Bone Setting Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/set_bone
|
||||
allowed_tools = list(
|
||||
@@ -48,35 +56,39 @@
|
||||
min_duration = 60
|
||||
max_duration = 70
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.organ_tag != BP_HEAD && !(affected.robotic >= ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
|
||||
/datum/surgery_step/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.organ_tag != BP_HEAD && !(affected.robotic >= ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool].</font>" , \
|
||||
"<font color='blue'>You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].</font>")
|
||||
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
||||
..()
|
||||
/datum/surgery_step/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool].</font>" , \
|
||||
"<font color='blue'>You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].</font>")
|
||||
target.custom_pain("The pain in your [affected.name] is going to make you pass out!", 50)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.status & ORGAN_BROKEN)
|
||||
user.visible_message("<font color='blue'>[user] sets the bone in [target]'s [affected.name] in place with \the [tool].</font>", \
|
||||
"<font color='blue'>You set the bone in [target]'s [affected.name] in place with \the [tool].</font>")
|
||||
affected.stage = 2
|
||||
else
|
||||
user.visible_message("[user] sets the bone in [target]'s [affected.name]<font color='red'> in the WRONG place with \the [tool].</font>", \
|
||||
"You set the bone in [target]'s [affected.name]<font color='red'> in the WRONG place with \the [tool].</font>")
|
||||
affected.fracture()
|
||||
/datum/surgery_step/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.status & ORGAN_BROKEN)
|
||||
user.visible_message("<font color='blue'>[user] sets the bone in [target]'s [affected.name] in place with \the [tool].</font>", \
|
||||
"<font color='blue'>You set the bone in [target]'s [affected.name] in place with \the [tool].</font>")
|
||||
affected.stage = 2
|
||||
else
|
||||
user.visible_message("[user] sets the bone in [target]'s [affected.name]<font color='red'> in the WRONG place with \the [tool].</font>", \
|
||||
"You set the bone in [target]'s [affected.name]<font color='red'> in the WRONG place with \the [tool].</font>")
|
||||
affected.fracture()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(BRUISE, 5)
|
||||
/datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(BRUISE, 5)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Skull Mending Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/mend_skull
|
||||
allowed_tools = list(
|
||||
@@ -87,30 +99,34 @@
|
||||
min_duration = 60
|
||||
max_duration = 70
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.organ_tag == BP_HEAD && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
|
||||
/datum/surgery_step/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.organ_tag == BP_HEAD && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] is beginning to piece together [target]'s skull with \the [tool].</font>" , \
|
||||
"<font color='blue'>You are beginning to piece together [target]'s skull with \the [tool].</font>")
|
||||
..()
|
||||
/datum/surgery_step/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] is beginning to piece together [target]'s skull with \the [tool].</font>" , \
|
||||
"<font color='blue'>You are beginning to piece together [target]'s skull with \the [tool].</font>")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] sets [target]'s skull with \the [tool].</font>" , \
|
||||
"<font color='blue'>You set [target]'s skull with \the [tool].</font>")
|
||||
affected.stage = 2
|
||||
/datum/surgery_step/mend_skull/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] sets [target]'s skull with \the [tool].</font>" , \
|
||||
"<font color='blue'>You set [target]'s skull with \the [tool].</font>")
|
||||
affected.stage = 2
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, damaging [target]'s face with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, damaging [target]'s face with \the [tool]!</font>")
|
||||
var/obj/item/organ/external/head/h = affected
|
||||
h.createwound(BRUISE, 10)
|
||||
h.disfigured = 1
|
||||
/datum/surgery_step/mend_skull/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, damaging [target]'s face with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, damaging [target]'s face with \the [tool]!</font>")
|
||||
var/obj/item/organ/external/head/h = affected
|
||||
h.createwound(BRUISE, 10)
|
||||
h.disfigured = 1
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Bone Fixing Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/finish_bone
|
||||
allowed_tools = list(
|
||||
@@ -123,31 +139,33 @@
|
||||
min_duration = 50
|
||||
max_duration = 60
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open >= 2 && !(affected.robotic >= ORGAN_ROBOT) && affected.stage == 2
|
||||
/datum/surgery_step/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open >= 2 && !(affected.robotic >= ORGAN_ROBOT) && affected.stage == 2
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].</font>")
|
||||
..()
|
||||
/datum/surgery_step/finish_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].</font>")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has mended the damaged bones in [target]'s [affected.name] with \the [tool].</font>" , \
|
||||
"<font color='blue'>You have mended the damaged bones in [target]'s [affected.name] with \the [tool].</font>" )
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
affected.stage = 0
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>" , \
|
||||
"<font color='red'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>")
|
||||
/datum/surgery_step/finish_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has mended the damaged bones in [target]'s [affected.name] with \the [tool].</font>" , \
|
||||
"<font color='blue'>You have mended the damaged bones in [target]'s [affected.name] with \the [tool].</font>" )
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
affected.stage = 0
|
||||
|
||||
/datum/surgery_step/finish_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>" , \
|
||||
"<font color='red'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>")
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Bone Clamp Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/clamp_bone
|
||||
allowed_tools = list(
|
||||
@@ -159,28 +177,28 @@
|
||||
min_duration = 70
|
||||
max_duration = 90
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
/datum/surgery_step/clamp_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && (affected.robotic < ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message("<font color='blue'>[user] starts repairing the damaged bones in [target]'s [affected.name] with \the [tool].</font>" , \
|
||||
"<font color='blue'>You starts repairing the damaged bones in [target]'s [affected.name] with \the [tool].</font>")
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
/datum/surgery_step/clamp_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected.stage == 0)
|
||||
user.visible_message("<font color='blue'>[user] starts repairing the damaged bones in [target]'s [affected.name] with \the [tool].</font>" , \
|
||||
"<font color='blue'>You starts repairing the damaged bones in [target]'s [affected.name] with \the [tool].</font>")
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] sets the bone in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You sets [target]'s bone in [affected.name] with \the [tool].</font>")
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
/datum/surgery_step/clamp_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] sets the bone in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You sets [target]'s bone in [affected.name] with \the [tool].</font>")
|
||||
affected.status &= ~ORGAN_BROKEN
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(BRUISE, 5)
|
||||
/datum/surgery_step/clamp_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(BRUISE, 5)
|
||||
@@ -6,14 +6,17 @@
|
||||
priority = 2
|
||||
can_infect = 1
|
||||
blood_level = 1
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
/datum/surgery_step/open_encased/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= 2
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && !(affected.robotic >= ORGAN_ROBOT) && affected.encased && affected.open >= 2
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Rib Sawing Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/open_encased/saw
|
||||
allowed_tools = list(
|
||||
@@ -24,45 +27,45 @@
|
||||
min_duration = 50
|
||||
max_duration = 70
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open == 2
|
||||
/datum/surgery_step/open_encased/saw/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open == 2
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/open_encased/saw/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \
|
||||
"You begin to cut through [target]'s [affected.encased] with \the [tool].")
|
||||
target.custom_pain("Something hurts horribly in your [affected.name]!", 60)
|
||||
..()
|
||||
|
||||
user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \
|
||||
"You begin to cut through [target]'s [affected.encased] with \the [tool].")
|
||||
target.custom_pain("Something hurts horribly in your [affected.name]!", 60)
|
||||
..()
|
||||
/datum/surgery_step/open_encased/saw/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] has cut [target]'s [affected.encased] open with \the [tool].</font>", \
|
||||
"<font color='blue'>You have cut [target]'s [affected.encased] open with \the [tool].</font>")
|
||||
affected.open = 2.5
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/open_encased/saw/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
user.visible_message("<font color='blue'>[user] has cut [target]'s [affected.encased] open with \the [tool].</font>", \
|
||||
"<font color='blue'>You have cut [target]'s [affected.encased] open with \the [tool].</font>")
|
||||
affected.open = 2.5
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!</font>" )
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!</font>" )
|
||||
|
||||
affected.createwound(CUT, 20)
|
||||
affected.fracture()
|
||||
affected.createwound(CUT, 20)
|
||||
affected.fracture()
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Rib Opening Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/open_encased/retract
|
||||
allowed_tools = list(
|
||||
@@ -73,53 +76,53 @@
|
||||
min_duration = 30
|
||||
max_duration = 40
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open == 2.5
|
||||
/datum/surgery_step/open_encased/retract/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open == 2.5
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/open_encased/retract/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
var/msg = "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]."
|
||||
var/self_msg = "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]."
|
||||
user.visible_message(msg, self_msg)
|
||||
target.custom_pain("Something hurts horribly in your [affected.name]!", 40)
|
||||
..()
|
||||
|
||||
var/msg = "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]."
|
||||
var/self_msg = "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]."
|
||||
user.visible_message(msg, self_msg)
|
||||
target.custom_pain("Something hurts horribly in your [affected.name]!", 40)
|
||||
..()
|
||||
/datum/surgery_step/open_encased/retract/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
var/msg = "<font color='blue'>[user] forces open [target]'s [affected.encased] with \the [tool].</font>"
|
||||
var/self_msg = "<font color='blue'>You force open [target]'s [affected.encased] with \the [tool].</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
affected.open = 3
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/msg = "<font color='blue'>[user] forces open [target]'s [affected.encased] with \the [tool].</font>"
|
||||
var/self_msg = "<font color='blue'>You force open [target]'s [affected.encased] with \the [tool].</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
affected.open = 3
|
||||
|
||||
// Whoops!
|
||||
if(prob(10))
|
||||
affected.fracture()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/msg = "<font color='red'>[user]'s hand slips, cracking [target]'s [affected.encased]!</font>"
|
||||
var/self_msg = "<font color='red'>Your hand slips, cracking [target]'s [affected.encased]!</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
affected.createwound(BRUISE, 20)
|
||||
// Whoops!
|
||||
if(prob(10))
|
||||
affected.fracture()
|
||||
|
||||
/datum/surgery_step/open_encased/retract/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/msg = "<font color='red'>[user]'s hand slips, cracking [target]'s [affected.encased]!</font>"
|
||||
var/self_msg = "<font color='red'>Your hand slips, cracking [target]'s [affected.encased]!</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
affected.createwound(BRUISE, 20)
|
||||
affected.fracture()
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Rib Closing Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/open_encased/close
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgical/retractor = 100, \
|
||||
@@ -129,53 +132,53 @@
|
||||
min_duration = 20
|
||||
max_duration = 40
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/open_encased/close/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open == 3
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open == 3
|
||||
/datum/surgery_step/open_encased/close/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]."
|
||||
var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]."
|
||||
user.visible_message(msg, self_msg)
|
||||
target.custom_pain("Something hurts horribly in your [affected.name]!", 100)
|
||||
..()
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/open_encased/close/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]."
|
||||
var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]."
|
||||
user.visible_message(msg, self_msg)
|
||||
target.custom_pain("Something hurts horribly in your [affected.name]!", 100)
|
||||
..()
|
||||
var/msg = "<font color='blue'>[user] bends [target]'s [affected.encased] back into place with \the [tool].</font>"
|
||||
var/self_msg = "<font color='blue'>You bend [target]'s [affected.encased] back into place with \the [tool].</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
affected.open = 2.5
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/open_encased/close/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/msg = "<font color='blue'>[user] bends [target]'s [affected.encased] back into place with \the [tool].</font>"
|
||||
var/self_msg = "<font color='blue'>You bend [target]'s [affected.encased] back into place with \the [tool].</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
var/msg = "<font color='red'>[user]'s hand slips, bending [target]'s [affected.encased] the wrong way!</font>"
|
||||
var/self_msg = "<font color='red'>Your hand slips, bending [target]'s [affected.encased] the wrong way!</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
affected.open = 2.5
|
||||
affected.createwound(BRUISE, 20)
|
||||
affected.fracture()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/*if (prob(40)) //TODO: ORGAN REMOVAL UPDATE.
|
||||
user.visible_message("<font color='red'> A rib pierces the lung!</font>")
|
||||
target.rupture_lung()*/
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/msg = "<font color='red'>[user]'s hand slips, bending [target]'s [affected.encased] the wrong way!</font>"
|
||||
var/self_msg = "<font color='red'>Your hand slips, bending [target]'s [affected.encased] the wrong way!</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
affected.createwound(BRUISE, 20)
|
||||
affected.fracture()
|
||||
|
||||
/*if (prob(40)) //TODO: ORGAN REMOVAL UPDATE.
|
||||
user.visible_message("<font color='red'> A rib pierces the lung!</font>")
|
||||
target.rupture_lung()*/
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Rib Mending Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/open_encased/mend
|
||||
allowed_tools = list(
|
||||
@@ -186,33 +189,30 @@
|
||||
min_duration = 20
|
||||
max_duration = 40
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/open_encased/mend/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open == 2.5
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return ..() && affected && affected.open == 2.5
|
||||
/datum/surgery_step/open_encased/mend/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/msg = "[user] starts applying \the [tool] to [target]'s [affected.encased]."
|
||||
var/self_msg = "You start applying \the [tool] to [target]'s [affected.encased]."
|
||||
user.visible_message(msg, self_msg)
|
||||
target.custom_pain("Something hurts horribly in your [affected.name]!", 100)
|
||||
..()
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/open_encased/mend/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/msg = "[user] starts applying \the [tool] to [target]'s [affected.encased]."
|
||||
var/self_msg = "You start applying \the [tool] to [target]'s [affected.encased]."
|
||||
user.visible_message(msg, self_msg)
|
||||
target.custom_pain("Something hurts horribly in your [affected.name]!", 100)
|
||||
..()
|
||||
var/msg = "<font color='blue'>[user] applied \the [tool] to [target]'s [affected.encased].</font>"
|
||||
var/self_msg = "<font color='blue'>You applied \the [tool] to [target]'s [affected.encased].</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/msg = "<font color='blue'>[user] applied \the [tool] to [target]'s [affected.encased].</font>"
|
||||
var/self_msg = "<font color='blue'>You applied \the [tool] to [target]'s [affected.encased].</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
|
||||
affected.open = 2
|
||||
affected.open = 2
|
||||
@@ -7,13 +7,18 @@
|
||||
priority = 2
|
||||
req_open = 0
|
||||
can_infect = 0
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (!affected || (affected.robotic >= ORGAN_ROBOT))
|
||||
return 0
|
||||
return target_zone == O_MOUTH
|
||||
|
||||
/datum/surgery_step/face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (!affected || (affected.robotic >= ORGAN_ROBOT))
|
||||
return 0
|
||||
return target_zone == O_MOUTH
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Face Opening Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/cut_face
|
||||
allowed_tools = list(
|
||||
@@ -25,25 +30,29 @@
|
||||
min_duration = 90
|
||||
max_duration = 110
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == O_MOUTH && target.op_stage.face == 0
|
||||
/datum/surgery_step/generic/cut_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target_zone == O_MOUTH && target.op_stage.face == 0
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts to cut open [target]'s face and neck with \the [tool].", \
|
||||
"You start to cut open [target]'s face and neck with \the [tool].")
|
||||
..()
|
||||
/datum/surgery_step/generic/cut_face/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts to cut open [target]'s face and neck with \the [tool].", \
|
||||
"You start to cut open [target]'s face and neck with \the [tool].")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] has cut open [target]'s face and neck with \the [tool].</font>" , \
|
||||
"<font color='blue'> You have cut open[target]'s face and neck with \the [tool].</font>",)
|
||||
target.op_stage.face = 1
|
||||
/datum/surgery_step/generic/cut_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] has cut open [target]'s face and neck with \the [tool].</font>" , \
|
||||
"<font color='blue'> You have cut open[target]'s face and neck with \the [tool].</font>",)
|
||||
target.op_stage.face = 1
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, slicing [target]'s throat wth \the [tool]!</font>" )
|
||||
affected.createwound(CUT, 60)
|
||||
target.AdjustLosebreath(10)
|
||||
/datum/surgery_step/generic/cut_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, slicing [target]'s throat wth \the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, slicing [target]'s throat wth \the [tool]!</font>" )
|
||||
affected.createwound(CUT, 60)
|
||||
target.AdjustLosebreath(10)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Vocal Cord/Face Repair Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/face/mend_vocal
|
||||
allowed_tools = list(
|
||||
@@ -55,23 +64,27 @@
|
||||
min_duration = 70
|
||||
max_duration = 90
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target.op_stage.face == 1
|
||||
/datum/surgery_step/face/mend_vocal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target.op_stage.face == 1
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts mending [target]'s vocal cords with \the [tool].", \
|
||||
"You start mending [target]'s vocal cords with \the [tool].")
|
||||
..()
|
||||
/datum/surgery_step/face/mend_vocal/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts mending [target]'s vocal cords with \the [tool].", \
|
||||
"You start mending [target]'s vocal cords with \the [tool].")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] mends [target]'s vocal cords with \the [tool].</font>", \
|
||||
"<font color='blue'>You mend [target]'s vocal cords with \the [tool].</font>")
|
||||
target.op_stage.face = 2
|
||||
/datum/surgery_step/face/mend_vocal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] mends [target]'s vocal cords with \the [tool].</font>", \
|
||||
"<font color='blue'>You mend [target]'s vocal cords with \the [tool].</font>")
|
||||
target.op_stage.face = 2
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!</font>")
|
||||
target.AdjustLosebreath(10)
|
||||
/datum/surgery_step/face/mend_vocal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!</font>")
|
||||
target.AdjustLosebreath(10)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Face Fixing Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/face/fix_face
|
||||
allowed_tools = list(
|
||||
@@ -82,24 +95,28 @@
|
||||
min_duration = 80
|
||||
max_duration = 100
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target.op_stage.face == 2
|
||||
/datum/surgery_step/face/fix_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target.op_stage.face == 2
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts pulling the skin on [target]'s face back in place with \the [tool].", \
|
||||
"You start pulling the skin on [target]'s face back in place with \the [tool].")
|
||||
..()
|
||||
/datum/surgery_step/face/fix_face/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts pulling the skin on [target]'s face back in place with \the [tool].", \
|
||||
"You start pulling the skin on [target]'s face back in place with \the [tool].")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] pulls the skin on [target]'s face back in place with \the [tool].</font>", \
|
||||
"<font color='blue'>You pull the skin on [target]'s face back in place with \the [tool].</font>")
|
||||
target.op_stage.face = 3
|
||||
/datum/surgery_step/face/fix_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] pulls the skin on [target]'s face back in place with \the [tool].</font>", \
|
||||
"<font color='blue'>You pull the skin on [target]'s face back in place with \the [tool].</font>")
|
||||
target.op_stage.face = 3
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, tearing skin on [target]'s face with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, tearing skin on [target]'s face with \the [tool]!</font>")
|
||||
target.apply_damage(10, BRUTE, affected, sharp=1, sharp=1)
|
||||
/datum/surgery_step/face/fix_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, tearing skin on [target]'s face with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, tearing skin on [target]'s face with \the [tool]!</font>")
|
||||
target.apply_damage(10, BRUTE, affected, sharp=1, sharp=1)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Face Cauterizing Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/face/cauterize
|
||||
allowed_tools = list(
|
||||
@@ -112,27 +129,27 @@
|
||||
min_duration = 70
|
||||
max_duration = 100
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target.op_stage.face > 0
|
||||
/datum/surgery_step/face/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
return ..() && target.op_stage.face > 0
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] is beginning to cauterize the incision on [target]'s face and neck with \the [tool].</font>" , \
|
||||
"<font color='blue'>You are beginning to cauterize the incision on [target]'s face and neck with \the [tool].</font>")
|
||||
..()
|
||||
/datum/surgery_step/face/cauterize/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] is beginning to cauterize the incision on [target]'s face and neck with \the [tool].</font>" , \
|
||||
"<font color='blue'>You are beginning to cauterize the incision on [target]'s face and neck with \the [tool].</font>")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] cauterizes the incision on [target]'s face and neck with \the [tool].</font>", \
|
||||
"<font color='blue'>You cauterize the incision on [target]'s face and neck with \the [tool].</font>")
|
||||
affected.open = 0
|
||||
affected.status &= ~ORGAN_BLEEDING
|
||||
if (target.op_stage.face == 3)
|
||||
var/obj/item/organ/external/head/h = affected
|
||||
h.disfigured = 0
|
||||
target.op_stage.face = 0
|
||||
/datum/surgery_step/face/cauterize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] cauterizes the incision on [target]'s face and neck with \the [tool].</font>", \
|
||||
"<font color='blue'>You cauterize the incision on [target]'s face and neck with \the [tool].</font>")
|
||||
affected.open = 0
|
||||
affected.status &= ~ORGAN_BLEEDING
|
||||
if (target.op_stage.face == 3)
|
||||
var/obj/item/organ/external/head/h = affected
|
||||
h.disfigured = 0
|
||||
target.op_stage.face = 0
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, leaving a small burn on [target]'s face with \the [tool]!</font>")
|
||||
target.apply_damage(4, BURN, affected)
|
||||
/datum/surgery_step/face/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, leaving a small burn on [target]'s face with \the [tool]!</font>")
|
||||
target.apply_damage(4, BURN, affected)
|
||||
@@ -5,21 +5,70 @@
|
||||
|
||||
/datum/surgery_step/generic/
|
||||
can_infect = 1
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (isslime(target))
|
||||
return 0
|
||||
if (target_zone == O_EYES) //there are specific steps for eye surgery
|
||||
return 0
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
|
||||
/datum/surgery_step/generic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (isslime(target))
|
||||
return 0
|
||||
if (target_zone == O_EYES) //there are specific steps for eye surgery
|
||||
return 0
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected == null)
|
||||
return 0
|
||||
if (affected.is_stump())
|
||||
return 0
|
||||
if (affected.robotic >= ORGAN_ROBOT)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Scalpel Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/cut_open
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgical/scalpel = 100, \
|
||||
/obj/item/weapon/material/knife = 75, \
|
||||
/obj/item/weapon/material/shard = 50, \
|
||||
)
|
||||
req_open = 0
|
||||
|
||||
min_duration = 90
|
||||
max_duration = 110
|
||||
|
||||
/datum/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected == null)
|
||||
return 0
|
||||
if (affected.is_stump())
|
||||
return 0
|
||||
if (affected.robotic >= ORGAN_ROBOT)
|
||||
return 0
|
||||
return 1
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
|
||||
/datum/surgery_step/generic/cut_open/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts the incision on [target]'s [affected.name] with \the [tool].", \
|
||||
"You start the incision on [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("You feel a horrible pain as if from a sharp knife in your [affected.name]!", 40)
|
||||
..()
|
||||
|
||||
/datum/surgery_step/generic/cut_open/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has made an incision on [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have made an incision on [target]'s [affected.name] with \the [tool].</font>",)
|
||||
affected.open = 1
|
||||
|
||||
if(istype(target) && target.should_have_organ(O_HEART))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
|
||||
/datum/surgery_step/generic/cut_open/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 10)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Laser Scalpel Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/cut_with_laser
|
||||
allowed_tools = list(
|
||||
@@ -33,35 +82,39 @@
|
||||
min_duration = 90
|
||||
max_duration = 110
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts the bloodless incision on [target]'s [affected.name] with \the [tool].", \
|
||||
"You start the bloodless incision on [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("You feel a horrible, searing pain in your [affected.name]!", 50)
|
||||
..()
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have made a bloodless incision on [target]'s [affected.name] with \the [tool].</font>",)
|
||||
//Could be cleaner ...
|
||||
affected.open = 1
|
||||
/datum/surgery_step/generic/cut_with_laser/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts the bloodless incision on [target]'s [affected.name] with \the [tool].", \
|
||||
"You start the bloodless incision on [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("You feel a horrible, searing pain in your [affected.name]!", 50)
|
||||
..()
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
affected.clamp()
|
||||
spread_germs_to_organ(affected, user)
|
||||
/datum/surgery_step/generic/cut_with_laser/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has made a bloodless incision on [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have made a bloodless incision on [target]'s [affected.name] with \the [tool].</font>",)
|
||||
//Could be cleaner ...
|
||||
affected.open = 1
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 7.5)
|
||||
affected.createwound(BURN, 12.5)
|
||||
affected.createwound(CUT, 1)
|
||||
affected.clamp()
|
||||
spread_germs_to_organ(affected, user)
|
||||
|
||||
/datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 7.5)
|
||||
affected.createwound(BURN, 12.5)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Incision Management Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/incision_manager
|
||||
allowed_tools = list(
|
||||
@@ -72,77 +125,41 @@
|
||||
min_duration = 80
|
||||
max_duration = 120
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].", \
|
||||
"You start to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("You feel a horrible, searing pain in your [affected.name] as it is pushed apart!", 50)
|
||||
..()
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].</font>",)
|
||||
affected.open = 1
|
||||
/datum/surgery_step/generic/incision_manager/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].", \
|
||||
"You start to construct a prepared incision on and within [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("You feel a horrible, searing pain in your [affected.name] as it is pushed apart!", 50)
|
||||
..()
|
||||
|
||||
if(istype(target) && target.should_have_organ(O_HEART))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
/datum/surgery_step/generic/incision_manager/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have constructed a prepared incision on and within [target]'s [affected.name] with \the [tool].</font>",)
|
||||
affected.open = 1
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
affected.clamp()
|
||||
affected.open = 2
|
||||
if(istype(target) && target.should_have_organ(O_HEART))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 20)
|
||||
affected.createwound(BURN, 15)
|
||||
affected.createwound(CUT, 1)
|
||||
affected.clamp()
|
||||
affected.open = 2
|
||||
|
||||
/datum/surgery_step/generic/cut_open
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgical/scalpel = 100, \
|
||||
/obj/item/weapon/material/knife = 75, \
|
||||
/obj/item/weapon/material/shard = 50, \
|
||||
)
|
||||
req_open = 0
|
||||
/datum/surgery_step/generic/incision_manager/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 20)
|
||||
affected.createwound(BURN, 15)
|
||||
|
||||
min_duration = 90
|
||||
max_duration = 110
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts the incision on [target]'s [affected.name] with \the [tool].", \
|
||||
"You start the incision on [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("You feel a horrible pain as if from a sharp knife in your [affected.name]!", 40)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has made an incision on [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have made an incision on [target]'s [affected.name] with \the [tool].</font>",)
|
||||
affected.open = 1
|
||||
|
||||
if(istype(target) && target.should_have_organ(O_HEART))
|
||||
affected.status |= ORGAN_BLEEDING
|
||||
|
||||
affected.createwound(CUT, 1)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, slicing open [target]'s [affected.name] in the wrong place with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 10)
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Hemostat Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/clamp_bleeders
|
||||
allowed_tools = list(
|
||||
@@ -154,30 +171,34 @@
|
||||
min_duration = 40
|
||||
max_duration = 60
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open && (affected.status & ORGAN_BLEEDING)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/generic/clamp_bleeders/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts clamping bleeders in [target]'s [affected.name] with \the [tool].", \
|
||||
"You start clamping bleeders in [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("The pain in your [affected.name] is maddening!", 40)
|
||||
..()
|
||||
return affected && affected.open && (affected.status & ORGAN_BLEEDING)
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] clamps bleeders in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You clamp bleeders in [target]'s [affected.name] with \the [tool].</font>")
|
||||
affected.clamp()
|
||||
spread_germs_to_organ(affected, user)
|
||||
/datum/surgery_step/generic/clamp_bleeders/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts clamping bleeders in [target]'s [affected.name] with \the [tool].", \
|
||||
"You start clamping bleeders in [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("The pain in your [affected.name] is maddening!", 40)
|
||||
..()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!</font>",)
|
||||
affected.createwound(CUT, 10)
|
||||
/datum/surgery_step/generic/clamp_bleeders/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] clamps bleeders in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You clamp bleeders in [target]'s [affected.name] with \the [tool].</font>")
|
||||
affected.clamp()
|
||||
spread_germs_to_organ(affected, user)
|
||||
|
||||
/datum/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!</font>",)
|
||||
affected.createwound(CUT, 10)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Retractor Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/retract_skin
|
||||
allowed_tools = list(
|
||||
@@ -189,50 +210,54 @@
|
||||
min_duration = 30
|
||||
max_duration = 40
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 1 //&& !(affected.status & ORGAN_BLEEDING)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/generic/retract_skin/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
var/msg = "[user] starts to pry open the incision on [target]'s [affected.name] with \the [tool]."
|
||||
var/self_msg = "You start to pry open the incision on [target]'s [affected.name] with \the [tool]."
|
||||
if (target_zone == BP_TORSO)
|
||||
msg = "[user] starts to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]."
|
||||
self_msg = "You start to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]."
|
||||
if (target_zone == BP_GROIN)
|
||||
msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
|
||||
self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
|
||||
user.visible_message(msg, self_msg)
|
||||
target.custom_pain("It feels like the skin on your [affected.name] is on fire!", 40)
|
||||
..()
|
||||
return affected && affected.open == 1 //&& !(affected.status & ORGAN_BLEEDING)
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
var/msg = "<font color='blue'>[user] keeps the incision open on [target]'s [affected.name] with \the [tool].</font>"
|
||||
var/self_msg = "<font color='blue'>You keep the incision open on [target]'s [affected.name] with \the [tool].</font>"
|
||||
if (target_zone == BP_TORSO)
|
||||
msg = "<font color='blue'>[user] keeps the ribcage open on [target]'s torso with \the [tool].</font>"
|
||||
self_msg = "<font color='blue'>You keep the ribcage open on [target]'s torso with \the [tool].</font>"
|
||||
if (target_zone == BP_GROIN)
|
||||
msg = "<font color='blue'>[user] keeps the incision open on [target]'s lower abdomen with \the [tool].</font>"
|
||||
self_msg = "<font color='blue'>You keep the incision open on [target]'s lower abdomen with \the [tool].</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
affected.open = 2
|
||||
/datum/surgery_step/generic/retract_skin/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
var/msg = "[user] starts to pry open the incision on [target]'s [affected.name] with \the [tool]."
|
||||
var/self_msg = "You start to pry open the incision on [target]'s [affected.name] with \the [tool]."
|
||||
if (target_zone == BP_TORSO)
|
||||
msg = "[user] starts to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]."
|
||||
self_msg = "You start to separate the ribcage and rearrange the organs in [target]'s torso with \the [tool]."
|
||||
if (target_zone == BP_GROIN)
|
||||
msg = "[user] starts to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
|
||||
self_msg = "You start to pry open the incision and rearrange the organs in [target]'s lower abdomen with \the [tool]."
|
||||
user.visible_message(msg, self_msg)
|
||||
target.custom_pain("It feels like the skin on your [affected.name] is on fire!", 40)
|
||||
..()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
var/msg = "<font color='red'>[user]'s hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!</font>"
|
||||
var/self_msg = "<font color='red'>Your hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!</font>"
|
||||
if (target_zone == BP_TORSO)
|
||||
msg = "<font color='red'>[user]'s hand slips, damaging several organs in [target]'s torso with \the [tool]!</font>"
|
||||
self_msg = "<font color='red'>Your hand slips, damaging several organs in [target]'s torso with \the [tool]!</font>"
|
||||
if (target_zone == BP_GROIN)
|
||||
msg = "<font color='red'>[user]'s hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]!</font>"
|
||||
self_msg = "<font color='red'>Your hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]!</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
target.apply_damage(12, BRUTE, affected, sharp=1)
|
||||
/datum/surgery_step/generic/retract_skin/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
var/msg = "<font color='blue'>[user] keeps the incision open on [target]'s [affected.name] with \the [tool].</font>"
|
||||
var/self_msg = "<font color='blue'>You keep the incision open on [target]'s [affected.name] with \the [tool].</font>"
|
||||
if (target_zone == BP_TORSO)
|
||||
msg = "<font color='blue'>[user] keeps the ribcage open on [target]'s torso with \the [tool].</font>"
|
||||
self_msg = "<font color='blue'>You keep the ribcage open on [target]'s torso with \the [tool].</font>"
|
||||
if (target_zone == BP_GROIN)
|
||||
msg = "<font color='blue'>[user] keeps the incision open on [target]'s lower abdomen with \the [tool].</font>"
|
||||
self_msg = "<font color='blue'>You keep the incision open on [target]'s lower abdomen with \the [tool].</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
affected.open = 2
|
||||
|
||||
/datum/surgery_step/generic/retract_skin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
var/msg = "<font color='red'>[user]'s hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!</font>"
|
||||
var/self_msg = "<font color='red'>Your hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!</font>"
|
||||
if (target_zone == BP_TORSO)
|
||||
msg = "<font color='red'>[user]'s hand slips, damaging several organs in [target]'s torso with \the [tool]!</font>"
|
||||
self_msg = "<font color='red'>Your hand slips, damaging several organs in [target]'s torso with \the [tool]!</font>"
|
||||
if (target_zone == BP_GROIN)
|
||||
msg = "<font color='red'>[user]'s hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]!</font>"
|
||||
self_msg = "<font color='red'>Your hand slips, damaging several organs in [target]'s lower abdomen with \the [tool]!</font>"
|
||||
user.visible_message(msg, self_msg)
|
||||
target.apply_damage(12, BRUTE, affected, sharp=1)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Cauterize Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/cauterize
|
||||
allowed_tools = list(
|
||||
@@ -245,31 +270,35 @@
|
||||
min_duration = 70
|
||||
max_duration = 100
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/generic/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] is beginning to cauterize the incision on [target]'s [affected.name] with \the [tool]." , \
|
||||
"You are beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("Your [affected.name] is being burned!", 40)
|
||||
..()
|
||||
return affected && affected.open && target_zone != O_MOUTH
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] cauterizes the incision on [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You cauterize the incision on [target]'s [affected.name] with \the [tool].</font>")
|
||||
affected.open = 0
|
||||
affected.germ_level = 0
|
||||
affected.status &= ~ORGAN_BLEEDING
|
||||
/datum/surgery_step/generic/cauterize/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] is beginning to cauterize the incision on [target]'s [affected.name] with \the [tool]." , \
|
||||
"You are beginning to cauterize the incision on [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("Your [affected.name] is being burned!", 40)
|
||||
..()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!</font>")
|
||||
target.apply_damage(3, BURN, affected)
|
||||
/datum/surgery_step/generic/cauterize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] cauterizes the incision on [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You cauterize the incision on [target]'s [affected.name] with \the [tool].</font>")
|
||||
affected.open = 0
|
||||
affected.germ_level = 0
|
||||
affected.status &= ~ORGAN_BLEEDING
|
||||
|
||||
/datum/surgery_step/generic/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!</font>")
|
||||
target.apply_damage(3, BURN, affected)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Amputation Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/generic/amputate
|
||||
allowed_tools = list(
|
||||
@@ -281,32 +310,32 @@
|
||||
min_duration = 110
|
||||
max_duration = 160
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (target_zone == O_EYES) //there are specific steps for eye surgery
|
||||
return 0
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected == null)
|
||||
return 0
|
||||
return !affected.cannot_amputate
|
||||
/datum/surgery_step/generic/amputate/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (target_zone == O_EYES) //there are specific steps for eye surgery
|
||||
return 0
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected == null)
|
||||
return 0
|
||||
return !affected.cannot_amputate
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] is beginning to amputate [target]'s [affected.name] with \the [tool]." , \
|
||||
"You are beginning to cut through [target]'s [affected.amputation_point] with \the [tool].")
|
||||
target.custom_pain("Your [affected.amputation_point] is being ripped apart!", 100)
|
||||
..()
|
||||
/datum/surgery_step/generic/amputate/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] is beginning to amputate [target]'s [affected.name] with \the [tool]." , \
|
||||
"You are beginning to cut through [target]'s [affected.amputation_point] with \the [tool].")
|
||||
target.custom_pain("Your [affected.amputation_point] is being ripped apart!", 100)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].</font>", \
|
||||
"<font color='blue'>You amputate [target]'s [affected.name] with \the [tool].</font>")
|
||||
affected.droplimb(1,DROPLIMB_EDGE)
|
||||
/datum/surgery_step/generic/amputate/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].</font>", \
|
||||
"<font color='blue'>You amputate [target]'s [affected.name] with \the [tool].</font>")
|
||||
affected.droplimb(1,DROPLIMB_EDGE)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 30)
|
||||
affected.fracture()
|
||||
/datum/surgery_step/generic/amputate/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 30)
|
||||
affected.fracture()
|
||||
|
||||
@@ -38,6 +38,10 @@
|
||||
"<font color='red'>Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 20)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Space Making Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/cavity/make_space
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgical/surgicaldrill = 100, \
|
||||
@@ -66,6 +70,10 @@
|
||||
user.visible_message("<font color='blue'>[user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].</font>", \
|
||||
"<font color='blue'>You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].</font>" )
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Cavity Closing Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/cavity/close_space
|
||||
priority = 2
|
||||
allowed_tools = list(
|
||||
@@ -78,23 +86,27 @@
|
||||
min_duration = 60
|
||||
max_duration = 80
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.cavity
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/cavity/close_space/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", \
|
||||
"You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." )
|
||||
target.custom_pain("The pain in your chest is living hell!",1)
|
||||
affected.cavity = 0
|
||||
..()
|
||||
return affected && affected.cavity
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].</font>", \
|
||||
"<font color='blue'> You mend[target]'s [get_cavity(affected)] cavity walls with \the [tool].</font>" )
|
||||
/datum/surgery_step/cavity/close_space/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts mending [target]'s [get_cavity(affected)] cavity wall with \the [tool].", \
|
||||
"You start mending [target]'s [get_cavity(affected)] cavity wall with \the [tool]." )
|
||||
target.custom_pain("The pain in your chest is living hell!",1)
|
||||
affected.cavity = 0
|
||||
..()
|
||||
|
||||
/datum/surgery_step/cavity/close_space/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].</font>", \
|
||||
"<font color='blue'> You mend[target]'s [get_cavity(affected)] cavity walls with \the [tool].</font>" )
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Item Implantation Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/cavity/place_item
|
||||
priority = 0
|
||||
@@ -103,43 +115,43 @@
|
||||
min_duration = 80
|
||||
max_duration = 100
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
return
|
||||
if(affected && affected.cavity)
|
||||
var/total_volume = tool.w_class
|
||||
for(var/obj/item/I in affected.implants)
|
||||
if(istype(I,/obj/item/weapon/implant))
|
||||
continue
|
||||
total_volume += I.w_class
|
||||
return total_volume <= get_max_wclass(affected)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/cavity/place_item/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.</font>", \
|
||||
"<font color='blue'>You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.</font>" ) //Nobody will probably ever see this, but I made these two blue. ~CK
|
||||
target.custom_pain("The pain in your chest is living hell!",1)
|
||||
..()
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
return
|
||||
if(affected && affected.cavity)
|
||||
var/total_volume = tool.w_class
|
||||
for(var/obj/item/I in affected.implants)
|
||||
if(istype(I,/obj/item/weapon/implant))
|
||||
continue
|
||||
total_volume += I.w_class
|
||||
return total_volume <= get_max_wclass(affected)
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/cavity/place_item/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.</font>", \
|
||||
"<font color='blue'>You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.</font>" ) //Nobody will probably ever see this, but I made these two blue. ~CK
|
||||
target.custom_pain("The pain in your chest is living hell!",1)
|
||||
..()
|
||||
|
||||
user.visible_message("<font color='blue'>[user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.</font>", \
|
||||
"<font color='blue'>You put \the [tool] inside [target]'s [get_cavity(affected)] cavity.</font>" )
|
||||
if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && (affected.robotic < ORGAN_ROBOT))
|
||||
user << "<font color='red'> You tear some blood vessels trying to fit such a big object in this cavity.</font>"
|
||||
var/datum/wound/internal_bleeding/I = new (10)
|
||||
affected.wounds += I
|
||||
affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1)
|
||||
user.drop_item()
|
||||
affected.implants += tool
|
||||
tool.loc = affected
|
||||
affected.cavity = 0
|
||||
/datum/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
|
||||
user.visible_message("<font color='blue'>[user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.</font>", \
|
||||
"<font color='blue'>You put \the [tool] inside [target]'s [get_cavity(affected)] cavity.</font>" )
|
||||
if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && (affected.robotic < ORGAN_ROBOT))
|
||||
user << "<font color='red'> You tear some blood vessels trying to fit such a big object in this cavity.</font>"
|
||||
var/datum/wound/internal_bleeding/I = new (10)
|
||||
affected.wounds += I
|
||||
affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1)
|
||||
user.drop_item()
|
||||
affected.implants += tool
|
||||
tool.loc = affected
|
||||
affected.cavity = 0
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// IMPLANT/ITEM REMOVAL SURGERY //
|
||||
// IMPLANT/ITEM REMOVAL SURGERY
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/cavity/implant_removal
|
||||
@@ -152,78 +164,77 @@
|
||||
min_duration = 80
|
||||
max_duration = 100
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(affected.organ_tag == BP_HEAD)
|
||||
var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"]
|
||||
return ..() && (!sponge || !sponge.damage)
|
||||
else
|
||||
return ..()
|
||||
/datum/surgery_step/cavity/implant_removal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(affected.organ_tag == BP_HEAD)
|
||||
var/obj/item/organ/internal/brain/sponge = target.internal_organs_by_name["brain"]
|
||||
return ..() && (!sponge || !sponge.damage)
|
||||
else
|
||||
return ..()
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] starts poking around inside [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You start poking around inside [target]'s [affected.name] with \the [tool].</font>" )
|
||||
target.custom_pain("The pain in your [affected.name] is living hell!",1)
|
||||
..()
|
||||
/datum/surgery_step/cavity/implant_removal/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] starts poking around inside [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You start poking around inside [target]'s [affected.name] with \the [tool].</font>" )
|
||||
target.custom_pain("The pain in your [affected.name] is living hell!",1)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
|
||||
var/find_prob = 0
|
||||
var/find_prob = 0
|
||||
|
||||
if (affected.implants.len)
|
||||
if (affected.implants.len)
|
||||
|
||||
var/obj/item/obj = pick(affected.implants)
|
||||
var/obj/item/obj = pick(affected.implants)
|
||||
|
||||
if(istype(obj,/obj/item/weapon/implant))
|
||||
var/obj/item/weapon/implant/imp = obj
|
||||
if (imp.islegal())
|
||||
find_prob +=60
|
||||
else
|
||||
find_prob +=40
|
||||
if(istype(obj,/obj/item/weapon/implant))
|
||||
var/obj/item/weapon/implant/imp = obj
|
||||
if (imp.islegal())
|
||||
find_prob +=60
|
||||
else
|
||||
find_prob +=50
|
||||
|
||||
if (prob(find_prob))
|
||||
user.visible_message("<font color='blue'>[user] takes something out of incision on [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='blue'>You take [obj] out of incision on [target]'s [affected.name]s with \the [tool]!</font>" )
|
||||
affected.implants -= obj
|
||||
|
||||
BITSET(target.hud_updateflag, IMPLOYAL_HUD)
|
||||
|
||||
//Handle possessive brain borers.
|
||||
if(istype(obj,/mob/living/simple_animal/borer))
|
||||
var/mob/living/simple_animal/borer/worm = obj
|
||||
if(worm.controlling)
|
||||
target.release_control()
|
||||
worm.detatch()
|
||||
worm.leave_host()
|
||||
else
|
||||
obj.loc = get_turf(target)
|
||||
obj.add_blood(target)
|
||||
obj.update_icon()
|
||||
if(istype(obj,/obj/item/weapon/implant))
|
||||
var/obj/item/weapon/implant/imp = obj
|
||||
imp.imp_in = null
|
||||
imp.implanted = 0
|
||||
else
|
||||
user.visible_message("<font color='blue'>[user] removes \the [tool] from [target]'s [affected.name].</font>", \
|
||||
"<font color='blue'>There's something inside [target]'s [affected.name], but you just missed it this time.</font>" )
|
||||
find_prob +=40
|
||||
else
|
||||
user.visible_message("<font color='blue'>[user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.</font>", \
|
||||
"<font color='blue'>You could not find anything inside [target]'s [affected.name].</font>" )
|
||||
find_prob +=50
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
..()
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
if (affected.implants.len)
|
||||
var/fail_prob = 10
|
||||
fail_prob += 100 - tool_quality(tool)
|
||||
if (prob(fail_prob))
|
||||
var/obj/item/weapon/implant/imp = affected.implants[1]
|
||||
user.visible_message("<font color='red'> Something beeps inside [target]'s [affected.name]!</font>")
|
||||
playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3)
|
||||
spawn(25)
|
||||
imp.activate()
|
||||
if (prob(find_prob))
|
||||
user.visible_message("<font color='blue'>[user] takes something out of incision on [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='blue'>You take [obj] out of incision on [target]'s [affected.name]s with \the [tool]!</font>" )
|
||||
affected.implants -= obj
|
||||
|
||||
BITSET(target.hud_updateflag, IMPLOYAL_HUD)
|
||||
|
||||
//Handle possessive brain borers.
|
||||
if(istype(obj,/mob/living/simple_animal/borer))
|
||||
var/mob/living/simple_animal/borer/worm = obj
|
||||
if(worm.controlling)
|
||||
target.release_control()
|
||||
worm.detatch()
|
||||
worm.leave_host()
|
||||
else
|
||||
obj.loc = get_turf(target)
|
||||
obj.add_blood(target)
|
||||
obj.update_icon()
|
||||
if(istype(obj,/obj/item/weapon/implant))
|
||||
var/obj/item/weapon/implant/imp = obj
|
||||
imp.imp_in = null
|
||||
imp.implanted = 0
|
||||
else
|
||||
user.visible_message("<font color='blue'>[user] removes \the [tool] from [target]'s [affected.name].</font>", \
|
||||
"<font color='blue'>There's something inside [target]'s [affected.name], but you just missed it this time.</font>" )
|
||||
else
|
||||
user.visible_message("<font color='blue'>[user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.</font>", \
|
||||
"<font color='blue'>You could not find anything inside [target]'s [affected.name].</font>" )
|
||||
|
||||
/datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
..()
|
||||
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
|
||||
if (affected.implants.len)
|
||||
var/fail_prob = 10
|
||||
fail_prob += 100 - tool_quality(tool)
|
||||
if (prob(fail_prob))
|
||||
var/obj/item/weapon/implant/imp = affected.implants[1]
|
||||
user.visible_message("<font color='red'> Something beeps inside [target]'s [affected.name]!</font>")
|
||||
playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3)
|
||||
spawn(25)
|
||||
imp.activate()
|
||||
|
||||
@@ -7,14 +7,19 @@
|
||||
priority = 3 // Must be higher than /datum/surgery_step/internal
|
||||
req_open = 0
|
||||
can_infect = 0
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected)
|
||||
return 0
|
||||
var/list/organ_data = target.species.has_limbs["[target_zone]"]
|
||||
return !isnull(organ_data)
|
||||
|
||||
/datum/surgery_step/limb/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected)
|
||||
return 0
|
||||
var/list/organ_data = target.species.has_limbs["[target_zone]"]
|
||||
return !isnull(organ_data)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Limb Attachment Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/limb/attach
|
||||
allowed_tools = list(/obj/item/organ/external = 100)
|
||||
@@ -22,45 +27,49 @@
|
||||
min_duration = 50
|
||||
max_duration = 70
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ]
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected)
|
||||
to_chat(user, "<span class='warning'>Something is in the way! You can't attach [E] here!</span>")
|
||||
return 0
|
||||
if(!P)
|
||||
to_chat(user, "<span class='warning'>There's nothing to attach [E] to!</span>")
|
||||
return 0
|
||||
else if((P.robotic >= ORGAN_ROBOT) && (E.robotic < ORGAN_ROBOT))
|
||||
to_chat(user, "<span class='warning'>Attaching [E] to [P] wouldn't work well.</span>")
|
||||
return 0
|
||||
else if(istype(E, /obj/item/organ/external/head) && E.robotic >= ORGAN_ROBOT && P.robotic < ORGAN_ROBOT)
|
||||
to_chat(user, "<span class='warning'>Attaching [E] to [P] might break [E].</span>")
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
/datum/surgery_step/limb/attach/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
var/obj/item/organ/external/P = target.organs_by_name[E.parent_organ]
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected)
|
||||
to_chat(user, "<span class='warning'>Something is in the way! You can't attach [E] here!</span>")
|
||||
return 0
|
||||
if(!P)
|
||||
to_chat(user, "<span class='warning'>There's nothing to attach [E] to!</span>")
|
||||
return 0
|
||||
else if((P.robotic >= ORGAN_ROBOT) && (E.robotic < ORGAN_ROBOT))
|
||||
to_chat(user, "<span class='warning'>Attaching [E] to [P] wouldn't work well.</span>")
|
||||
return 0
|
||||
else if(istype(E, /obj/item/organ/external/head) && E.robotic >= ORGAN_ROBOT && P.robotic < ORGAN_ROBOT)
|
||||
to_chat(user, "<span class='warning'>Attaching [E] to [P] might break [E].</span>")
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \
|
||||
"You start attaching [E.name] to [target]'s [E.amputation_point].")
|
||||
/datum/surgery_step/limb/attach/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \
|
||||
"You start attaching [E.name] to [target]'s [E.amputation_point].")
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("<span class='notice'>[user] has attached [target]'s [E.name] to the [E.amputation_point].</span>", \
|
||||
"<span class='notice'>You have attached [target]'s [E.name] to the [E.amputation_point].</span>")
|
||||
user.drop_from_inventory(E)
|
||||
E.replaced(target)
|
||||
target.update_body()
|
||||
target.updatehealth()
|
||||
target.UpdateDamageIcon()
|
||||
/datum/surgery_step/limb/attach/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("<span class='notice'>[user] has attached [target]'s [E.name] to the [E.amputation_point].</span>", \
|
||||
"<span class='notice'>You have attached [target]'s [E.name] to the [E.amputation_point].</span>")
|
||||
user.drop_from_inventory(E)
|
||||
E.replaced(target)
|
||||
target.update_body()
|
||||
target.updatehealth()
|
||||
target.UpdateDamageIcon()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("<span class='warning'> [user]'s hand slips, damaging [target]'s [E.amputation_point]!</span>", \
|
||||
"<span class='warning'> Your hand slips, damaging [target]'s [E.amputation_point]!</span>")
|
||||
target.apply_damage(10, BRUTE, null, sharp=1)
|
||||
/datum/surgery_step/limb/attach/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("<span class='warning'> [user]'s hand slips, damaging [target]'s [E.amputation_point]!</span>", \
|
||||
"<span class='warning'> Your hand slips, damaging [target]'s [E.amputation_point]!</span>")
|
||||
target.apply_damage(10, BRUTE, null, sharp=1)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Limb Connection Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/limb/connect
|
||||
allowed_tools = list(
|
||||
@@ -73,32 +82,36 @@
|
||||
min_duration = 100
|
||||
max_duration = 120
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = target.get_organ(target_zone)
|
||||
return E && !E.is_stump() && (E.status & ORGAN_DESTROYED)
|
||||
/datum/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = target.get_organ(target_zone)
|
||||
return E && !E.is_stump() && (E.status & ORGAN_DESTROYED)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
|
||||
"You start connecting tendons and muscle in [target]'s [E.amputation_point].")
|
||||
/datum/surgery_step/limb/connect/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
|
||||
"You start connecting tendons and muscle in [target]'s [E.amputation_point].")
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].</span>", \
|
||||
"<span class='notice'>You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].</span>")
|
||||
E.status &= ~ORGAN_DESTROYED
|
||||
if(E.children)
|
||||
for(var/obj/item/organ/external/C in E.children)
|
||||
C.status &= ~ORGAN_DESTROYED
|
||||
target.update_body()
|
||||
target.updatehealth()
|
||||
target.UpdateDamageIcon()
|
||||
/datum/surgery_step/limb/connect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].</span>", \
|
||||
"<span class='notice'>You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].</span>")
|
||||
E.status &= ~ORGAN_DESTROYED
|
||||
if(E.children)
|
||||
for(var/obj/item/organ/external/C in E.children)
|
||||
C.status &= ~ORGAN_DESTROYED
|
||||
target.update_body()
|
||||
target.updatehealth()
|
||||
target.UpdateDamageIcon()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("<span class='warning'> [user]'s hand slips, damaging [target]'s [E.amputation_point]!</span>", \
|
||||
"<span class='warning'> Your hand slips, damaging [target]'s [E.amputation_point]!</span>")
|
||||
target.apply_damage(10, BRUTE, null, sharp=1)
|
||||
/datum/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/E = tool
|
||||
user.visible_message("<span class='warning'> [user]'s hand slips, damaging [target]'s [E.amputation_point]!</span>", \
|
||||
"<span class='warning'> Your hand slips, damaging [target]'s [E.amputation_point]!</span>")
|
||||
target.apply_damage(10, BRUTE, null, sharp=1)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Robolimb Attachment Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/limb/mechanize
|
||||
allowed_tools = list(/obj/item/robot_parts = 100)
|
||||
@@ -106,43 +119,43 @@
|
||||
min_duration = 80
|
||||
max_duration = 100
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/robot_parts/p = tool
|
||||
if (p.part)
|
||||
if (!(target_zone in p.part))
|
||||
return 0
|
||||
return isnull(target.get_organ(target_zone))
|
||||
/datum/surgery_step/limb/mechanize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/robot_parts/p = tool
|
||||
if (p.part)
|
||||
if (!(target_zone in p.part))
|
||||
return 0
|
||||
return isnull(target.get_organ(target_zone))
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts attaching \the [tool] to [target].", \
|
||||
"You start attaching \the [tool] to [target].")
|
||||
/datum/surgery_step/limb/mechanize/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts attaching \the [tool] to [target].", \
|
||||
"You start attaching \the [tool] to [target].")
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/robot_parts/L = tool
|
||||
user.visible_message("<span class='notice'>[user] has attached \the [tool] to [target].</span>", \
|
||||
"<span class='notice'>You have attached \the [tool] to [target].</span>")
|
||||
/datum/surgery_step/limb/mechanize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/robot_parts/L = tool
|
||||
user.visible_message("<span class='notice'>[user] has attached \the [tool] to [target].</span>", \
|
||||
"<span class='notice'>You have attached \the [tool] to [target].</span>")
|
||||
|
||||
if(L.part)
|
||||
for(var/part_name in L.part)
|
||||
if(!isnull(target.get_organ(part_name)))
|
||||
continue
|
||||
var/list/organ_data = target.species.has_limbs["[part_name]"]
|
||||
if(!organ_data)
|
||||
continue
|
||||
var/new_limb_type = organ_data["path"]
|
||||
var/obj/item/organ/external/new_limb = new new_limb_type(target)
|
||||
new_limb.robotize(L.model_info)
|
||||
if(L.sabotaged)
|
||||
new_limb.sabotaged = 1
|
||||
if(L.part)
|
||||
for(var/part_name in L.part)
|
||||
if(!isnull(target.get_organ(part_name)))
|
||||
continue
|
||||
var/list/organ_data = target.species.has_limbs["[part_name]"]
|
||||
if(!organ_data)
|
||||
continue
|
||||
var/new_limb_type = organ_data["path"]
|
||||
var/obj/item/organ/external/new_limb = new new_limb_type(target)
|
||||
new_limb.robotize(L.model_info)
|
||||
if(L.sabotaged)
|
||||
new_limb.sabotaged = 1
|
||||
|
||||
target.update_body()
|
||||
target.updatehealth()
|
||||
target.UpdateDamageIcon()
|
||||
target.update_body()
|
||||
target.updatehealth()
|
||||
target.UpdateDamageIcon()
|
||||
|
||||
qdel(tool)
|
||||
qdel(tool)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'> [user]'s hand slips, damaging [target]'s flesh!</span>", \
|
||||
"<span class='warning'> Your hand slips, damaging [target]'s flesh!</span>")
|
||||
target.apply_damage(10, BRUTE, null, sharp=1)
|
||||
/datum/surgery_step/limb/mechanize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'> [user]'s hand slips, damaging [target]'s flesh!</span>", \
|
||||
"<span class='warning'> Your hand slips, damaging [target]'s flesh!</span>")
|
||||
target.apply_damage(10, BRUTE, null, sharp=1)
|
||||
|
||||
@@ -65,86 +65,87 @@
|
||||
min_duration = 70
|
||||
max_duration = 90
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/internal/fix_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!affected)
|
||||
return
|
||||
var/is_organ_damaged = 0
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I.damage > 0)
|
||||
is_organ_damaged = 1
|
||||
break
|
||||
return ..() && is_organ_damaged
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!affected)
|
||||
return
|
||||
var/is_organ_damaged = 0
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I.damage > 0)
|
||||
is_organ_damaged = 1
|
||||
break
|
||||
return ..() && is_organ_damaged
|
||||
/datum/surgery_step/internal/fix_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/tool_name = "\the [tool]"
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
tool_name = "regenerative membrane"
|
||||
else if (istype(tool, /obj/item/stack/medical/bruise_pack))
|
||||
tool_name = "the bandaid"
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/tool_name = "\the [tool]"
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
tool_name = "regenerative membrane"
|
||||
else if (istype(tool, /obj/item/stack/medical/bruise_pack))
|
||||
tool_name = "the bandaid"
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(!(I.robotic >= ORGAN_ROBOT))
|
||||
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
|
||||
"You start treating damage to [target]'s [I.name] with [tool_name]." )
|
||||
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(!(I.robotic >= ORGAN_ROBOT))
|
||||
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
|
||||
"You start treating damage to [target]'s [I.name] with [tool_name]." )
|
||||
target.custom_pain("The pain in your [affected.name] is living hell!", 100)
|
||||
..()
|
||||
|
||||
target.custom_pain("The pain in your [affected.name] is living hell!", 100)
|
||||
..()
|
||||
/datum/surgery_step/internal/fix_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/tool_name = "\the [tool]"
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
tool_name = "regenerative membrane"
|
||||
if (istype(tool, /obj/item/stack/medical/bruise_pack))
|
||||
tool_name = "the bandaid"
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/tool_name = "\the [tool]"
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
tool_name = "regenerative membrane"
|
||||
if (istype(tool, /obj/item/stack/medical/bruise_pack))
|
||||
tool_name = "the bandaid"
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(!(I.robotic >= ORGAN_ROBOT))
|
||||
user.visible_message("<span class='notice'>[user] treats damage to [target]'s [I.name] with [tool_name].</span>", \
|
||||
"<span class='notice'>You treat damage to [target]'s [I.name] with [tool_name].</span>" )
|
||||
I.damage = 0
|
||||
if(I.organ_tag == O_EYES)
|
||||
target.sdisabilities &= ~BLIND
|
||||
if(I.organ_tag == O_LUNGS)
|
||||
target.SetLosebreath(0)
|
||||
|
||||
for(var/obj/item/organ/internal/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(!(I.robotic >= ORGAN_ROBOT))
|
||||
user.visible_message("<span class='notice'>[user] treats damage to [target]'s [I.name] with [tool_name].</span>", \
|
||||
"<span class='notice'>You treat damage to [target]'s [I.name] with [tool_name].</span>" )
|
||||
I.damage = 0
|
||||
if(I.organ_tag == O_EYES)
|
||||
target.sdisabilities &= ~BLIND
|
||||
if(I.organ_tag == O_LUNGS)
|
||||
target.SetLosebreath(0)
|
||||
/datum/surgery_step/internal/fix_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!</span>")
|
||||
var/dam_amt = 2
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
target.adjustToxLoss(5)
|
||||
else if (istype(tool, /obj/item/stack/medical/bruise_pack))
|
||||
dam_amt = 5
|
||||
target.adjustToxLoss(10)
|
||||
affected.createwound(CUT, 5)
|
||||
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!</span>")
|
||||
var/dam_amt = 2
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
I.take_damage(dam_amt,0)
|
||||
|
||||
if (istype(tool, /obj/item/stack/medical/advanced/bruise_pack))
|
||||
target.adjustToxLoss(5)
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Organ Detaching Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
else if (istype(tool, /obj/item/stack/medical/bruise_pack))
|
||||
dam_amt = 5
|
||||
target.adjustToxLoss(10)
|
||||
affected.createwound(CUT, 5)
|
||||
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
I.take_damage(dam_amt,0)
|
||||
|
||||
/datum/surgery_step/internal/detatch_organ
|
||||
/datum/surgery_step/internal/detatch_organ/
|
||||
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgical/scalpel = 100, \
|
||||
@@ -155,54 +156,56 @@
|
||||
min_duration = 90
|
||||
max_duration = 110
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/internal/detatch_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!..())
|
||||
return 0
|
||||
|
||||
if (!..())
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && !(affected.robotic >= ORGAN_ROBOT)))
|
||||
return 0
|
||||
|
||||
if(!(affected && !(affected.robotic >= ORGAN_ROBOT)))
|
||||
return 0
|
||||
target.op_stage.current_organ = null
|
||||
|
||||
target.op_stage.current_organ = null
|
||||
var/list/attached_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||
if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
|
||||
attached_organs |= organ
|
||||
|
||||
var/list/attached_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||
if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
|
||||
attached_organs |= organ
|
||||
var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
|
||||
if(!organ_to_remove)
|
||||
return 0
|
||||
|
||||
var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
|
||||
if(!organ_to_remove)
|
||||
return 0
|
||||
target.op_stage.current_organ = organ_to_remove
|
||||
|
||||
target.op_stage.current_organ = organ_to_remove
|
||||
return ..() && organ_to_remove
|
||||
|
||||
return ..() && organ_to_remove
|
||||
/datum/surgery_step/internal/detatch_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." )
|
||||
target.custom_pain("The pain in your [affected.name] is living hell!", 100)
|
||||
..()
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/internal/detatch_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has separated [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have separated [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
user.visible_message("[user] starts to separate [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start to separate [target]'s [target.op_stage.current_organ] with \the [tool]." )
|
||||
target.custom_pain("The pain in your [affected.name] is living hell!", 100)
|
||||
..()
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status |= ORGAN_CUT_AWAY
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has separated [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have separated [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
/datum/surgery_step/internal/detatch_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(CUT, rand(30,50), 1)
|
||||
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status |= ORGAN_CUT_AWAY
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(CUT, rand(30,50), 1)
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Organ Removal Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/internal/remove_organ
|
||||
|
||||
@@ -215,48 +218,51 @@
|
||||
min_duration = 60
|
||||
max_duration = 80
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/internal/remove_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!..())
|
||||
return 0
|
||||
|
||||
if (!..())
|
||||
return 0
|
||||
target.op_stage.current_organ = null
|
||||
|
||||
var/list/removable_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/internal/I = target.internal_organs_by_name[organ]
|
||||
if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
|
||||
removable_organs |= organ
|
||||
|
||||
var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs
|
||||
if(!organ_to_remove)
|
||||
return 0
|
||||
|
||||
target.op_stage.current_organ = organ_to_remove
|
||||
return ..()
|
||||
|
||||
/datum/surgery_step/internal/remove_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start removing [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!", 100)
|
||||
..()
|
||||
|
||||
/datum/surgery_step/internal/remove_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].</span>", \
|
||||
"<span class='notice'>You have removed [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
// Extract the organ!
|
||||
if(target.op_stage.current_organ)
|
||||
var/obj/item/organ/O = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(O && istype(O))
|
||||
O.removed(user)
|
||||
target.op_stage.current_organ = null
|
||||
|
||||
var/list/removable_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/internal/I = target.internal_organs_by_name[organ]
|
||||
if(istype(I) && (I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
|
||||
removable_organs |= organ
|
||||
/datum/surgery_step/internal/remove_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(BRUISE, 20)
|
||||
|
||||
var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs
|
||||
if(!organ_to_remove)
|
||||
return 0
|
||||
|
||||
target.op_stage.current_organ = organ_to_remove
|
||||
return ..()
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts removing [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start removing [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
target.custom_pain("Someone's ripping out your [target.op_stage.current_organ]!", 100)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has removed [target]'s [target.op_stage.current_organ] with \the [tool].</span>", \
|
||||
"<span class='notice'>You have removed [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
// Extract the organ!
|
||||
if(target.op_stage.current_organ)
|
||||
var/obj/item/organ/O = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(O && istype(O))
|
||||
O.removed(user)
|
||||
target.op_stage.current_organ = null
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(BRUISE, 20)
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Organ Replacement Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/internal/replace_organ
|
||||
allowed_tools = list(
|
||||
@@ -266,70 +272,76 @@
|
||||
min_duration = 60
|
||||
max_duration = 80
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/internal/replace_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/internal/O = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
var/obj/item/organ/internal/O = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!affected) return
|
||||
var/organ_compatible
|
||||
var/organ_missing
|
||||
if(!affected)
|
||||
return
|
||||
|
||||
if(!istype(O))
|
||||
return 0
|
||||
var/organ_compatible
|
||||
var/organ_missing
|
||||
|
||||
if((affected.robotic >= ORGAN_ROBOT) && !(O.robotic >= ORGAN_ROBOT))
|
||||
user << "<span class='danger'>You cannot install a naked organ into a robotic body.</span>"
|
||||
return SURGERY_FAILURE
|
||||
if(!istype(O))
|
||||
return 0
|
||||
|
||||
if(!target.species)
|
||||
user << "<span class='danger'>You have no idea what species this person is. Report this on the bug tracker.</span>"
|
||||
return SURGERY_FAILURE
|
||||
if((affected.robotic >= ORGAN_ROBOT) && !(O.robotic >= ORGAN_ROBOT))
|
||||
user << "<span class='danger'>You cannot install a naked organ into a robotic body.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
var/o_is = (O.gender == PLURAL) ? "are" : "is"
|
||||
var/o_a = (O.gender == PLURAL) ? "" : "a "
|
||||
var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't"
|
||||
if(!target.species)
|
||||
user << "<span class='danger'>You have no idea what species this person is. Report this on the bug tracker.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(O.damage > (O.max_damage * 0.75))
|
||||
user << "<span class='warning'>\The [O.organ_tag] [o_is] in no state to be transplanted.</span>"
|
||||
return SURGERY_FAILURE
|
||||
var/o_is = (O.gender == PLURAL) ? "are" : "is"
|
||||
var/o_a = (O.gender == PLURAL) ? "" : "a "
|
||||
var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't"
|
||||
|
||||
if(!target.internal_organs_by_name[O.organ_tag])
|
||||
organ_missing = 1
|
||||
else
|
||||
user << "<span class='warning'>\The [target] already has [o_a][O.organ_tag].</span>"
|
||||
return SURGERY_FAILURE
|
||||
if(O.damage > (O.max_damage * 0.75))
|
||||
user << "<span class='warning'>\The [O.organ_tag] [o_is] in no state to be transplanted.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(O && affected.organ_tag == O.parent_organ)
|
||||
organ_compatible = 1
|
||||
if(!target.internal_organs_by_name[O.organ_tag])
|
||||
organ_missing = 1
|
||||
else
|
||||
user << "<span class='warning'>\The [target] already has [o_a][O.organ_tag].</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
else
|
||||
user << "<span class='warning'>\The [O.organ_tag] [o_do] normally go in \the [affected.name].</span>"
|
||||
return SURGERY_FAILURE
|
||||
if(O && affected.organ_tag == O.parent_organ)
|
||||
organ_compatible = 1
|
||||
|
||||
return ..() && organ_missing && organ_compatible
|
||||
else
|
||||
user << "<span class='warning'>\The [O.organ_tag] [o_do] normally go in \the [affected.name].</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \
|
||||
"You start transplanting \the [tool] into [target]'s [affected.name].")
|
||||
target.custom_pain("Someone's rooting around in your [affected.name]!", 100)
|
||||
..()
|
||||
return ..() && organ_missing && organ_compatible
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has transplanted \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You have transplanted \the [tool] into [target]'s [affected.name].</span>")
|
||||
var/obj/item/organ/O = tool
|
||||
if(istype(O))
|
||||
user.remove_from_mob(O)
|
||||
O.replaced(target,affected)
|
||||
/datum/surgery_step/internal/replace_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \
|
||||
"You start transplanting \the [tool] into [target]'s [affected.name].")
|
||||
target.custom_pain("Someone's rooting around in your [affected.name]!", 100)
|
||||
..()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging \the [tool]!</span>")
|
||||
var/obj/item/organ/I = tool
|
||||
if(istype(I))
|
||||
I.take_damage(rand(3,5),0)
|
||||
/datum/surgery_step/internal/replace_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has transplanted \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You have transplanted \the [tool] into [target]'s [affected.name].</span>")
|
||||
var/obj/item/organ/O = tool
|
||||
if(istype(O))
|
||||
user.remove_from_mob(O)
|
||||
O.replaced(target,affected)
|
||||
|
||||
/datum/surgery_step/internal/replace_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging \the [tool]!</span>")
|
||||
var/obj/item/organ/I = tool
|
||||
if(istype(I))
|
||||
I.take_damage(rand(3,5),0)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Organ Attaching Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/internal/attach_organ
|
||||
allowed_tools = list(
|
||||
@@ -340,45 +352,44 @@
|
||||
min_duration = 100
|
||||
max_duration = 120
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/internal/attach_organ/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!..())
|
||||
return 0
|
||||
|
||||
if (!..())
|
||||
return 0
|
||||
target.op_stage.current_organ = null
|
||||
|
||||
target.op_stage.current_organ = null
|
||||
var/list/removable_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||
if(istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.robotic >= ORGAN_ROBOT) && I.parent_organ == target_zone)
|
||||
removable_organs |= organ
|
||||
|
||||
var/list/removable_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||
if(istype(I) && (I.status & ORGAN_CUT_AWAY) && !(I.robotic >= ORGAN_ROBOT) && I.parent_organ == target_zone)
|
||||
removable_organs |= organ
|
||||
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
|
||||
if(!organ_to_replace)
|
||||
return 0
|
||||
|
||||
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
|
||||
if(!organ_to_replace)
|
||||
return 0
|
||||
target.op_stage.current_organ = organ_to_replace
|
||||
return ..()
|
||||
|
||||
target.op_stage.current_organ = organ_to_replace
|
||||
return ..()
|
||||
/datum/surgery_step/internal/attach_organ/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!", 100)
|
||||
..()
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
target.custom_pain("Someone's digging needles into your [target.op_stage.current_organ]!", 100)
|
||||
..()
|
||||
/datum/surgery_step/internal/attach_organ/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status &= ~ORGAN_CUT_AWAY
|
||||
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status &= ~ORGAN_CUT_AWAY
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(BRUISE, 20)
|
||||
/datum/surgery_step/internal/attach_organ/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!</span>")
|
||||
affected.createwound(BRUISE, 20)
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
// HEART SURGERY //
|
||||
@@ -394,5 +405,5 @@
|
||||
// min_duration = 30
|
||||
// max_duration = 40
|
||||
|
||||
// can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
// /datum/surgery_step/ribcage/heart/cut/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
// return ..() && target.op_stage.ribcage == 2
|
||||
@@ -3,6 +3,9 @@
|
||||
// INTERNAL WOUND PATCHING //
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Internal Bleeding Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/fix_vein
|
||||
priority = 2
|
||||
@@ -16,85 +19,45 @@
|
||||
min_duration = 70
|
||||
max_duration = 90
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!hasorgans(target))
|
||||
return 0
|
||||
/datum/surgery_step/fix_vein/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!hasorgans(target))
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!affected) return
|
||||
var/internal_bleeding = 0
|
||||
for(var/datum/wound/W in affected.wounds) if(W.internal)
|
||||
internal_bleeding = 1
|
||||
break
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!affected) return
|
||||
var/internal_bleeding = 0
|
||||
for(var/datum/wound/W in affected.wounds) if(W.internal)
|
||||
internal_bleeding = 1
|
||||
break
|
||||
|
||||
return affected.open == (affected.encased ? 3 : 2) && internal_bleeding
|
||||
return affected.open == (affected.encased ? 3 : 2) && internal_bleeding
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \
|
||||
"You start patching the damaged vein in [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("The pain in [affected.name] is unbearable!", 100)
|
||||
..()
|
||||
/datum/surgery_step/fix_vein/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \
|
||||
"You start patching the damaged vein in [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("The pain in [affected.name] is unbearable!", 100)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have patched the damaged vein in [target]'s [affected.name] with \the [tool].</font>")
|
||||
/datum/surgery_step/fix_vein/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have patched the damaged vein in [target]'s [affected.name] with \the [tool].</font>")
|
||||
|
||||
for(var/datum/wound/W in affected.wounds) if(W.internal)
|
||||
affected.wounds -= W
|
||||
affected.update_damages()
|
||||
if (ishuman(user) && prob(40)) user:bloody_hands(target, 0)
|
||||
for(var/datum/wound/W in affected.wounds) if(W.internal)
|
||||
affected.wounds -= W
|
||||
affected.update_damages()
|
||||
if (ishuman(user) && prob(40)) user:bloody_hands(target, 0)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>" , \
|
||||
"<font color='red'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>")
|
||||
affected.take_damage(5, 0)
|
||||
/datum/surgery_step/fix_vein/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>" , \
|
||||
"<font color='red'>Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!</font>")
|
||||
affected.take_damage(5, 0)
|
||||
|
||||
/datum/surgery_step/fix_dead_tissue //Debridement
|
||||
priority = 2
|
||||
allowed_tools = list(
|
||||
/obj/item/weapon/surgical/scalpel = 100, \
|
||||
/obj/item/weapon/material/knife = 75, \
|
||||
/obj/item/weapon/material/shard = 50, \
|
||||
)
|
||||
|
||||
can_infect = 1
|
||||
blood_level = 1
|
||||
|
||||
min_duration = 110
|
||||
max_duration = 160
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!hasorgans(target))
|
||||
return 0
|
||||
|
||||
if (target_zone == O_MOUTH || target_zone == O_EYES)
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
return affected && affected.open >= 2 && (affected.status & ORGAN_DEAD)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." , \
|
||||
"You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("The pain in [affected.name] is unbearable!", 100)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='blue'>[user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].</font>", \
|
||||
"<font color='blue'>You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].</font>")
|
||||
affected.open = 3
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!</font>")
|
||||
affected.createwound(CUT, 20, 1)
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Necrosis Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/treat_necrosis
|
||||
priority = 2
|
||||
@@ -112,60 +75,64 @@
|
||||
min_duration = 50
|
||||
max_duration = 60
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!istype(tool, /obj/item/weapon/reagent_containers))
|
||||
return 0
|
||||
/datum/surgery_step/treat_necrosis/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!istype(tool, /obj/item/weapon/reagent_containers))
|
||||
return 0
|
||||
|
||||
var/obj/item/weapon/reagent_containers/container = tool
|
||||
if(!container.reagents.has_reagent("peridaxon"))
|
||||
return 0
|
||||
var/obj/item/weapon/reagent_containers/container = tool
|
||||
if(!container.reagents.has_reagent("peridaxon"))
|
||||
return 0
|
||||
|
||||
if(!hasorgans(target))
|
||||
return 0
|
||||
if(!hasorgans(target))
|
||||
return 0
|
||||
|
||||
if (target_zone == O_MOUTH || target_zone == O_EYES)
|
||||
return 0
|
||||
if (target_zone == O_MOUTH || target_zone == O_EYES)
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 3 && (affected.status & ORGAN_DEAD)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 3 && (affected.status & ORGAN_DEAD)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \
|
||||
"You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
/datum/surgery_step/treat_necrosis/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \
|
||||
"You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].")
|
||||
target.custom_pain("Something in your [affected.name] is causing you a lot of pain!", 50)
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/treat_necrosis/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if (!istype(tool, /obj/item/weapon/reagent_containers))
|
||||
return
|
||||
if (!istype(tool, /obj/item/weapon/reagent_containers))
|
||||
return
|
||||
|
||||
var/obj/item/weapon/reagent_containers/container = tool
|
||||
var/obj/item/weapon/reagent_containers/container = tool
|
||||
|
||||
var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD) //technically it's contact, but the reagents are being applied to internal tissue
|
||||
if (trans > 0)
|
||||
affected.status &= ~ORGAN_DEAD
|
||||
affected.owner.update_body(1)
|
||||
var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD) //technically it's contact, but the reagents are being applied to internal tissue
|
||||
if (trans > 0)
|
||||
affected.status &= ~ORGAN_DEAD
|
||||
affected.owner.update_body(1)
|
||||
|
||||
user.visible_message("<font color='blue'>[user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name].</font>", \
|
||||
"<font color='blue'>You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].</font>")
|
||||
user.visible_message("<font color='blue'>[user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name].</font>", \
|
||||
"<font color='blue'>You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].</font>")
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
/datum/surgery_step/treat_necrosis/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if (!istype(tool, /obj/item/weapon/reagent_containers))
|
||||
return
|
||||
if (!istype(tool, /obj/item/weapon/reagent_containers))
|
||||
return
|
||||
|
||||
var/obj/item/weapon/reagent_containers/container = tool
|
||||
var/obj/item/weapon/reagent_containers/container = tool
|
||||
|
||||
var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD)
|
||||
var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD)
|
||||
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!</font>")
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!</font>" , \
|
||||
"<font color='red'>Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!</font>")
|
||||
|
||||
//no damage or anything, just wastes medicine
|
||||
//no damage or anything, just wastes medicine
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Hardsuit Removal Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/hardsuit
|
||||
allowed_tools = list(
|
||||
@@ -181,29 +148,28 @@
|
||||
min_duration = 120
|
||||
max_duration = 180
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!istype(target))
|
||||
/datum/surgery_step/hardsuit/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(!istype(target))
|
||||
return 0
|
||||
if(istype(tool,/obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/welder = tool
|
||||
if(!welder.isOn() || !welder.remove_fuel(1,user))
|
||||
return 0
|
||||
if(istype(tool,/obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/welder = tool
|
||||
if(!welder.isOn() || !welder.remove_fuel(1,user))
|
||||
return 0
|
||||
return (target_zone == BP_TORSO) && istype(target.back, /obj/item/weapon/rig) && !(target.back.canremove)
|
||||
return (target_zone == BP_TORSO) && istype(target.back, /obj/item/weapon/rig) && !(target.back.canremove)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts cutting through the support systems of [target]'s [target.back] with \the [tool]." , \
|
||||
"You start cutting through the support systems of [target]'s [target.back] with \the [tool].")
|
||||
..()
|
||||
/datum/surgery_step/hardsuit/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts cutting through the support systems of [target]'s [target.back] with \the [tool]." , \
|
||||
"You start cutting through the support systems of [target]'s [target.back] with \the [tool].")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/hardsuit/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/weapon/rig/rig = target.back
|
||||
if(!istype(rig))
|
||||
return
|
||||
rig.reset()
|
||||
user.visible_message("<span class='notice'>[user] has cut through the support systems of [target]'s [rig] with \the [tool].</span>", \
|
||||
"<span class='notice'>You have cut through the support systems of [target]'s [rig] with \the [tool].</span>")
|
||||
|
||||
var/obj/item/weapon/rig/rig = target.back
|
||||
if(!istype(rig))
|
||||
return
|
||||
rig.reset()
|
||||
user.visible_message("<span class='notice'>[user] has cut through the support systems of [target]'s [rig] with \the [tool].</span>", \
|
||||
"<span class='notice'>You have cut through the support systems of [target]'s [rig] with \the [tool].</span>")
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='danger'>[user]'s [tool] can't quite seem to get through the metal...</span>", \
|
||||
"<span class='danger'>Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.</span>")
|
||||
/datum/surgery_step/hardsuit/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='danger'>[user]'s [tool] can't quite seem to get through the metal...</span>", \
|
||||
"<span class='danger'>Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.</span>")
|
||||
|
||||
@@ -5,21 +5,26 @@
|
||||
|
||||
/datum/surgery_step/robotics/
|
||||
can_infect = 0
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (isslime(target))
|
||||
return 0
|
||||
if (target_zone == O_EYES) //there are specific steps for eye surgery
|
||||
return 0
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected == null)
|
||||
return 0
|
||||
if (affected.status & ORGAN_DESTROYED)
|
||||
return 0
|
||||
if (!(affected.robotic >= ORGAN_ROBOT))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/datum/surgery_step/robotics/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (isslime(target))
|
||||
return 0
|
||||
if (target_zone == O_EYES) //there are specific steps for eye surgery
|
||||
return 0
|
||||
if (!hasorgans(target))
|
||||
return 0
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if (affected == null)
|
||||
return 0
|
||||
if (affected.status & ORGAN_DESTROYED)
|
||||
return 0
|
||||
if (!(affected.robotic >= ORGAN_ROBOT))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Unscrew Hatch Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/unscrew_hatch
|
||||
allowed_tools = list(
|
||||
@@ -32,27 +37,31 @@
|
||||
min_duration = 90
|
||||
max_duration = 110
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/robotics/unscrew_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
|
||||
"You start to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].")
|
||||
..()
|
||||
return affected && affected.open == 0 && target_zone != O_MOUTH
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>",)
|
||||
affected.open = 1
|
||||
/datum/surgery_step/robotics/unscrew_hatch/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
|
||||
"You start to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].")
|
||||
..()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].</span>", \
|
||||
"<span class='warning'>Your [tool] slips, failing to unscrew [target]'s [affected.name].</span>")
|
||||
/datum/surgery_step/robotics/unscrew_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>",)
|
||||
affected.open = 1
|
||||
|
||||
/datum/surgery_step/robotics/unscrew_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].</span>", \
|
||||
"<span class='warning'>Your [tool] slips, failing to unscrew [target]'s [affected.name].</span>")
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Open Hatch Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/open_hatch
|
||||
allowed_tools = list(
|
||||
@@ -64,27 +73,31 @@
|
||||
min_duration = 30
|
||||
max_duration = 40
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open == 1
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/robotics/open_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].",
|
||||
"You start to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].")
|
||||
..()
|
||||
return affected && affected.open == 1
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You open the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.open = 3
|
||||
/datum/surgery_step/robotics/open_hatch/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].",
|
||||
"You start to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].")
|
||||
..()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool] slips, failing to open the hatch on [target]'s [affected.name].</span>")
|
||||
/datum/surgery_step/robotics/open_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You open the maintenance hatch on [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.open = 3
|
||||
|
||||
/datum/surgery_step/robotics/open_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool] slips, failing to open the hatch on [target]'s [affected.name].</span>")
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Close Hatch Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/close_hatch
|
||||
allowed_tools = list(
|
||||
@@ -96,28 +109,32 @@
|
||||
min_duration = 70
|
||||
max_duration = 100
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
return affected && affected.open && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/robotics/close_hatch/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \
|
||||
"You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].")
|
||||
..()
|
||||
return affected && affected.open && target_zone != O_MOUTH
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You close and secure the hatch on [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.open = 0
|
||||
affected.germ_level = 0
|
||||
/datum/surgery_step/robotics/close_hatch/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \
|
||||
"You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].")
|
||||
..()
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].</span>")
|
||||
/datum/surgery_step/robotics/close_hatch/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You close and secure the hatch on [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.open = 0
|
||||
affected.germ_level = 0
|
||||
|
||||
/datum/surgery_step/robotics/close_hatch/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].</span>")
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Brute Repair Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/repair_brute
|
||||
allowed_tools = list(
|
||||
@@ -128,32 +145,37 @@
|
||||
min_duration = 50
|
||||
max_duration = 60
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(istype(tool,/obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/welder = tool
|
||||
if(!welder.isOn() || !welder.remove_fuel(1,user))
|
||||
return 0
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.brute_dam > 0) && target_zone != O_MOUTH
|
||||
/datum/surgery_step/robotics/repair_brute/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(istype(tool,/obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/welder = tool
|
||||
if(!welder.isOn() || !welder.remove_fuel(1,user))
|
||||
return 0
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.brute_dam > 0) && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] begins to patch damage to [target]'s [affected.name]'s support structure with \the [tool]." , \
|
||||
"You begin to patch damage to [target]'s [affected.name]'s support structure with \the [tool].")
|
||||
..()
|
||||
/datum/surgery_step/robotics/repair_brute/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] begins to patch damage to [target]'s [affected.name]'s support structure with \the [tool]." , \
|
||||
"You begin to patch damage to [target]'s [affected.name]'s support structure with \the [tool].")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] finishes patching damage to [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You finish patching damage to [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.heal_damage(rand(30,50),0,1,1)
|
||||
affected.disfigured = 0
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].</span>")
|
||||
target.apply_damage(rand(5,10), BURN, affected)
|
||||
/datum/surgery_step/robotics/repair_brute/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] finishes patching damage to [target]'s [affected.name] with \the [tool].</span>", \
|
||||
"<span class='notice'>You finish patching damage to [target]'s [affected.name] with \the [tool].</span>")
|
||||
affected.heal_damage(rand(30,50),0,1,1)
|
||||
affected.disfigured = 0
|
||||
|
||||
/datum/surgery_step/robotics/repair_brute/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].</span>",
|
||||
"<span class='warning'>Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].</span>")
|
||||
target.apply_damage(rand(5,10), BURN, affected)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Burn Repair Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/repair_burn
|
||||
allowed_tools = list(
|
||||
@@ -163,41 +185,45 @@
|
||||
min_duration = 50
|
||||
max_duration = 60
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(istype(tool,/obj/item/stack/cable_coil/))
|
||||
var/obj/item/stack/cable_coil/C = tool
|
||||
if(affected.burn_dam == 0)
|
||||
to_chat(user, "<span class='notice'>There are no burnt wires here!</span>")
|
||||
/datum/surgery_step/robotics/repair_burn/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(..())
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(istype(tool,/obj/item/stack/cable_coil/))
|
||||
var/obj/item/stack/cable_coil/C = tool
|
||||
if(affected.burn_dam == 0)
|
||||
to_chat(user, "<span class='notice'>There are no burnt wires here!</span>")
|
||||
return SURGERY_FAILURE
|
||||
else
|
||||
if(!C.can_use(5))
|
||||
to_chat(user, "<span class='danger'>You need at least five cable pieces to repair this part.</span>") //usage amount made more consistent with regular cable repair
|
||||
return SURGERY_FAILURE
|
||||
else
|
||||
if(!C.can_use(5))
|
||||
to_chat(user, "<span class='danger'>You need at least five cable pieces to repair this part.</span>") //usage amount made more consistent with regular cable repair
|
||||
return SURGERY_FAILURE
|
||||
else
|
||||
C.use(5)
|
||||
C.use(5)
|
||||
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH
|
||||
return affected && affected.open == 3 && (affected.disfigured || affected.burn_dam > 0) && target_zone != O_MOUTH
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] begins to splice new cabling into [target]'s [affected.name]." , \
|
||||
"You begin to splice new cabling into [target]'s [affected.name].")
|
||||
..()
|
||||
/datum/surgery_step/robotics/repair_burn/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] begins to splice new cabling into [target]'s [affected.name]." , \
|
||||
"You begin to splice new cabling into [target]'s [affected.name].")
|
||||
..()
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] finishes splicing cable into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You finishes splicing new cable into [target]'s [affected.name].</span>")
|
||||
affected.heal_damage(0,rand(30,50),1,1)
|
||||
affected.disfigured = 0
|
||||
/datum/surgery_step/robotics/repair_burn/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] finishes splicing cable into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You finishes splicing new cable into [target]'s [affected.name].</span>")
|
||||
affected.heal_damage(0,rand(30,50),1,1)
|
||||
affected.disfigured = 0
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user] causes a short circuit in [target]'s [affected.name]!</span>",
|
||||
"<span class='warning'>You cause a short circuit in [target]'s [affected.name]!</span>")
|
||||
target.apply_damage(rand(5,10), BURN, affected)
|
||||
/datum/surgery_step/robotics/repair_burn/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user] causes a short circuit in [target]'s [affected.name]!</span>",
|
||||
"<span class='warning'>You cause a short circuit in [target]'s [affected.name]!</span>")
|
||||
target.apply_damage(rand(5,10), BURN, affected)
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Robot Organ Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/fix_organ_robotic //For artificial organs
|
||||
allowed_tools = list(
|
||||
@@ -209,65 +235,64 @@
|
||||
min_duration = 70
|
||||
max_duration = 90
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/robotics/fix_organ_robotic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!affected) return
|
||||
var/is_organ_damaged = 0
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I.damage > 0 && (I.robotic >= ORGAN_ROBOT))
|
||||
is_organ_damaged = 1
|
||||
break
|
||||
return affected.open == 3 && is_organ_damaged
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!affected) return
|
||||
var/is_organ_damaged = 0
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I.damage > 0 && (I.robotic >= ORGAN_ROBOT))
|
||||
is_organ_damaged = 1
|
||||
break
|
||||
return affected.open == 3 && is_organ_damaged
|
||||
/datum/surgery_step/robotics/fix_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(I.robotic >= ORGAN_ROBOT)
|
||||
user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \
|
||||
"You start mending the damage to [target]'s [I.name]'s mechanisms." )
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
target.custom_pain("The pain in your [affected.name] is living hell!",1)
|
||||
..()
|
||||
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(I.robotic >= ORGAN_ROBOT)
|
||||
user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \
|
||||
"You start mending the damage to [target]'s [I.name]'s mechanisms." )
|
||||
/datum/surgery_step/robotics/fix_organ_robotic/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
target.custom_pain("The pain in your [affected.name] is living hell!",1)
|
||||
..()
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I && I.damage > 0)
|
||||
if(I.robotic >= ORGAN_ROBOT)
|
||||
user.visible_message("<span class='notice'>[user] repairs [target]'s [I.name] with [tool].</span>", \
|
||||
"<span class='notice'>You repair [target]'s [I.name] with [tool].</span>" )
|
||||
I.damage = 0
|
||||
if(I.organ_tag == O_EYES)
|
||||
target.sdisabilities &= ~BLIND
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/robotics/fix_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!</span>")
|
||||
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
target.adjustToxLoss(5)
|
||||
affected.createwound(CUT, 5)
|
||||
|
||||
if(I && I.damage > 0)
|
||||
if(I.robotic >= ORGAN_ROBOT)
|
||||
user.visible_message("<span class='notice'>[user] repairs [target]'s [I.name] with [tool].</span>", \
|
||||
"<span class='notice'>You repair [target]'s [I.name] with [tool].</span>" )
|
||||
I.damage = 0
|
||||
if(I.organ_tag == O_EYES)
|
||||
target.sdisabilities &= ~BLIND
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I)
|
||||
I.take_damage(rand(3,5),0)
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
if (!hasorgans(target))
|
||||
return
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!</span>", \
|
||||
"<span class='warning'>Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!</span>")
|
||||
|
||||
target.adjustToxLoss(5)
|
||||
affected.createwound(CUT, 5)
|
||||
|
||||
for(var/obj/item/organ/I in affected.internal_organs)
|
||||
if(I)
|
||||
I.take_damage(rand(3,5),0)
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Robot Organ Detaching Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/detatch_organ_robotic
|
||||
|
||||
@@ -278,46 +303,49 @@
|
||||
min_duration = 90
|
||||
max_duration = 110
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/robotics/detatch_organ_robotic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && (affected.robotic >= ORGAN_ROBOT)))
|
||||
return 0
|
||||
if(affected.open < 3)
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && (affected.robotic >= ORGAN_ROBOT)))
|
||||
return 0
|
||||
if(affected.open < 3)
|
||||
return 0
|
||||
target.op_stage.current_organ = null
|
||||
|
||||
target.op_stage.current_organ = null
|
||||
var/list/attached_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||
if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
|
||||
attached_organs |= organ
|
||||
|
||||
var/list/attached_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||
if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
|
||||
attached_organs |= organ
|
||||
var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
|
||||
if(!organ_to_remove)
|
||||
return 0
|
||||
|
||||
var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
|
||||
if(!organ_to_remove)
|
||||
return 0
|
||||
target.op_stage.current_organ = organ_to_remove
|
||||
|
||||
target.op_stage.current_organ = organ_to_remove
|
||||
return ..() && organ_to_remove
|
||||
|
||||
return ..() && organ_to_remove
|
||||
/datum/surgery_step/robotics/detatch_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts to decouple [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start to decouple [target]'s [target.op_stage.current_organ] with \the [tool]." )
|
||||
..()
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts to decouple [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start to decouple [target]'s [target.op_stage.current_organ] with \the [tool]." )
|
||||
..()
|
||||
/datum/surgery_step/robotics/detatch_organ_robotic/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status |= ORGAN_CUT_AWAY
|
||||
|
||||
var/obj/item/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status |= ORGAN_CUT_AWAY
|
||||
/datum/surgery_step/robotics/detatch_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, disconnecting \the [tool].</span>", \
|
||||
"<span class='warning'>Your hand slips, disconnecting \the [tool].</span>")
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, disconnecting \the [tool].</span>", \
|
||||
"<span class='warning'>Your hand slips, disconnecting \the [tool].</span>")
|
||||
///////////////////////////////////////////////////////////////
|
||||
// Robot Organ Attaching Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/attach_organ_robotic
|
||||
allowed_tools = list(
|
||||
@@ -327,45 +355,48 @@
|
||||
min_duration = 100
|
||||
max_duration = 120
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/robotics/attach_organ_robotic/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && (affected.robotic >= ORGAN_ROBOT)))
|
||||
return 0
|
||||
if(affected.open < 3)
|
||||
return 0
|
||||
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && (affected.robotic >= ORGAN_ROBOT)))
|
||||
return 0
|
||||
if(affected.open < 3)
|
||||
return 0
|
||||
target.op_stage.current_organ = null
|
||||
|
||||
target.op_stage.current_organ = null
|
||||
var/list/removable_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||
if(I && (I.status & ORGAN_CUT_AWAY) && (I.robotic >= ORGAN_ROBOT) && I.parent_organ == target_zone)
|
||||
removable_organs |= organ
|
||||
|
||||
var/list/removable_organs = list()
|
||||
for(var/organ in target.internal_organs_by_name)
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[organ]
|
||||
if(I && (I.status & ORGAN_CUT_AWAY) && (I.robotic >= ORGAN_ROBOT) && I.parent_organ == target_zone)
|
||||
removable_organs |= organ
|
||||
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
|
||||
if(!organ_to_replace)
|
||||
return 0
|
||||
|
||||
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
|
||||
if(!organ_to_replace)
|
||||
return 0
|
||||
target.op_stage.current_organ = organ_to_replace
|
||||
return ..()
|
||||
|
||||
target.op_stage.current_organ = organ_to_replace
|
||||
return ..()
|
||||
/datum/surgery_step/robotics/attach_organ_robotic/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
..()
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \
|
||||
"You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].")
|
||||
..()
|
||||
/datum/surgery_step/robotics/attach_organ_robotic/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='notice'>[user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>" , \
|
||||
"<span class='notice'>You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].</span>")
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status &= ~ORGAN_CUT_AWAY
|
||||
|
||||
var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
if(I && istype(I))
|
||||
I.status &= ~ORGAN_CUT_AWAY
|
||||
/datum/surgery_step/robotics/attach_organ_robotic/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, disconnecting \the [tool].</span>", \
|
||||
"<span class='warning'>Your hand slips, disconnecting \the [tool].</span>")
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips, disconnecting \the [tool].</span>", \
|
||||
"<span class='warning'>Your hand slips, disconnecting \the [tool].</span>")
|
||||
///////////////////////////////////////////////////////////////
|
||||
// MMI Insertion Surgery
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/surgery_step/robotics/install_mmi
|
||||
allowed_tools = list(
|
||||
@@ -375,74 +406,73 @@
|
||||
min_duration = 60
|
||||
max_duration = 80
|
||||
|
||||
can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
/datum/surgery_step/robotics/install_mmi/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
if(target_zone != BP_HEAD)
|
||||
return
|
||||
|
||||
if(target_zone != BP_HEAD)
|
||||
return
|
||||
var/obj/item/device/mmi/M = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && affected.open == 3))
|
||||
return 0
|
||||
|
||||
var/obj/item/device/mmi/M = tool
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
if(!(affected && affected.open == 3))
|
||||
return 0
|
||||
if(!istype(M))
|
||||
return 0
|
||||
|
||||
if(!istype(M))
|
||||
return 0
|
||||
if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD)
|
||||
user << "<span class='danger'>That brain is not usable.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD)
|
||||
user << "<span class='danger'>That brain is not usable.</span>"
|
||||
return SURGERY_FAILURE
|
||||
if(!(affected.robotic >= ORGAN_ROBOT))
|
||||
user << "<span class='danger'>You cannot install a computer brain into a meat skull.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!(affected.robotic >= ORGAN_ROBOT))
|
||||
user << "<span class='danger'>You cannot install a computer brain into a meat skull.</span>"
|
||||
return SURGERY_FAILURE
|
||||
if(!target.should_have_organ("brain"))
|
||||
user << "<span class='danger'>You're pretty sure [target.species.name_plural] don't normally have a brain.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!target.should_have_organ("brain"))
|
||||
user << "<span class='danger'>You're pretty sure [target.species.name_plural] don't normally have a brain.</span>"
|
||||
return SURGERY_FAILURE
|
||||
if(!isnull(target.internal_organs["brain"]))
|
||||
user << "<span class='danger'>Your subject already has a brain.</span>"
|
||||
return SURGERY_FAILURE
|
||||
|
||||
if(!isnull(target.internal_organs["brain"]))
|
||||
user << "<span class='danger'>Your subject already has a brain.</span>"
|
||||
return SURGERY_FAILURE
|
||||
return 1
|
||||
|
||||
return 1
|
||||
/datum/surgery_step/robotics/install_mmi/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \
|
||||
"You start installing \the [tool] into [target]'s [affected.name].")
|
||||
..()
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \
|
||||
"You start installing \the [tool] into [target]'s [affected.name].")
|
||||
..()
|
||||
/datum/surgery_step/robotics/install_mmi/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has installed \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You have installed \the [tool] into [target]'s [affected.name].</span>")
|
||||
|
||||
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
user.visible_message("<span class='notice'>[user] has installed \the [tool] into [target]'s [affected.name].</span>", \
|
||||
"<span class='notice'>You have installed \the [tool] into [target]'s [affected.name].</span>")
|
||||
var/obj/item/device/mmi/M = tool
|
||||
var/obj/item/organ/internal/mmi_holder/holder = new(target, 1)
|
||||
target.internal_organs_by_name["brain"] = holder
|
||||
user.drop_from_inventory(tool)
|
||||
tool.loc = holder
|
||||
holder.stored_mmi = tool
|
||||
holder.update_from_mmi()
|
||||
|
||||
var/obj/item/device/mmi/M = tool
|
||||
var/obj/item/organ/internal/mmi_holder/holder = new(target, 1)
|
||||
target.internal_organs_by_name["brain"] = holder
|
||||
user.drop_from_inventory(tool)
|
||||
tool.loc = holder
|
||||
holder.stored_mmi = tool
|
||||
holder.update_from_mmi()
|
||||
if(M.brainmob && M.brainmob.mind)
|
||||
M.brainmob.mind.transfer_to(target)
|
||||
target.languages = M.brainmob.languages
|
||||
|
||||
if(M.brainmob && M.brainmob.mind)
|
||||
M.brainmob.mind.transfer_to(target)
|
||||
target.languages = M.brainmob.languages
|
||||
spawn(0) //Name yourself on your own damn time
|
||||
var/new_name = ""
|
||||
while(!new_name)
|
||||
if(!target) return
|
||||
var/try_name = input(target,"Pick a name for your new form!", "New Name", target.name)
|
||||
var/clean_name = sanitizeName(try_name)
|
||||
if(clean_name)
|
||||
var/okay = alert(target,"New name will be '[clean_name]', ok?", "Cancel", "Ok")
|
||||
if(okay == "Ok")
|
||||
new_name = clean_name
|
||||
|
||||
spawn(0) //Name yourself on your own damn time
|
||||
var/new_name = ""
|
||||
while(!new_name)
|
||||
if(!target) return
|
||||
var/try_name = input(target,"Pick a name for your new form!", "New Name", target.name)
|
||||
var/clean_name = sanitizeName(try_name)
|
||||
if(clean_name)
|
||||
var/okay = alert(target,"New name will be '[clean_name]', ok?", "Cancel", "Ok")
|
||||
if(okay == "Ok")
|
||||
new_name = clean_name
|
||||
target.name = new_name
|
||||
target.real_name = target.name
|
||||
|
||||
target.name = new_name
|
||||
target.real_name = target.name
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
|
||||
"<span class='warning'>Your hand slips.</span>")
|
||||
/datum/surgery_step/robotics/install_mmi/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='warning'>[user]'s hand slips.</span>", \
|
||||
"<span class='warning'>Your hand slips.</span>")
|
||||
|
||||
@@ -6,8 +6,10 @@
|
||||
is_valid_target(mob/living/simple_animal/slime/target)
|
||||
return istype(target, /mob/living/simple_animal/slime/)
|
||||
|
||||
can_use(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
return target.stat == 2
|
||||
/datum/surgery_step/slime/can_use(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
return target.stat == 2
|
||||
|
||||
|
||||
|
||||
/datum/surgery_step/slime/cut_flesh
|
||||
allowed_tools = list(
|
||||
@@ -19,21 +21,23 @@
|
||||
min_duration = 30
|
||||
max_duration = 50
|
||||
|
||||
can_use(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
return ..() && istype(target) && target.core_removal_stage == 0
|
||||
/datum/surgery_step/slime/cut_flesh/can_use(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
return ..() && istype(target) && target.core_removal_stage == 0
|
||||
|
||||
begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", \
|
||||
"You start cutting through [target]'s flesh with \the [tool].")
|
||||
/datum/surgery_step/slime/cut_flesh/begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", \
|
||||
"You start cutting through [target]'s flesh with \the [tool].")
|
||||
|
||||
/datum/surgery_step/slime/cut_flesh/end_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] cuts through [target]'s flesh with \the [tool].</font>", \
|
||||
"<font color='blue'>You cut through [target]'s flesh with \the [tool], revealing its silky innards.</font>")
|
||||
target.core_removal_stage = 1
|
||||
|
||||
/datum/surgery_step/slime/cut_flesh/fail_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, tearing [target]'s flesh with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, tearing [target]'s flesh with \the [tool]!</font>")
|
||||
|
||||
end_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] cuts through [target]'s flesh with \the [tool].</font>", \
|
||||
"<font color='blue'>You cut through [target]'s flesh with \the [tool], revealing its silky innards.</font>")
|
||||
target.core_removal_stage = 1
|
||||
|
||||
fail_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, tearing [target]'s flesh with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, tearing [target]'s flesh with \the [tool]!</font>")
|
||||
|
||||
/datum/surgery_step/slime/cut_innards
|
||||
allowed_tools = list(
|
||||
@@ -45,21 +49,23 @@
|
||||
min_duration = 30
|
||||
max_duration = 50
|
||||
|
||||
can_use(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
return ..() && istype(target) && target.core_removal_stage == 1
|
||||
/datum/surgery_step/slime/cut_innards/can_use(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
return ..() && istype(target) && target.core_removal_stage == 1
|
||||
|
||||
begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts cutting [target]'s silky innards apart with \the [tool].", \
|
||||
"You start cutting [target]'s silky innards apart with \the [tool].")
|
||||
/datum/surgery_step/slime/cut_innards/begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts cutting [target]'s silky innards apart with \the [tool].", \
|
||||
"You start cutting [target]'s silky innards apart with \the [tool].")
|
||||
|
||||
/datum/surgery_step/slime/cut_innards/end_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] cuts [target]'s innards apart with \the [tool], exposing the cores.</font>", \
|
||||
"<font color='blue'>You cut [target]'s innards apart with \the [tool], exposing the cores.</font>")
|
||||
target.core_removal_stage = 2
|
||||
|
||||
/datum/surgery_step/slime/cut_innards/fail_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, tearing [target]'s innards with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, tearing [target]'s innards with \the [tool]!</font>")
|
||||
|
||||
end_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='blue'>[user] cuts [target]'s innards apart with \the [tool], exposing the cores.</font>", \
|
||||
"<font color='blue'>You cut [target]'s innards apart with \the [tool], exposing the cores.</font>")
|
||||
target.core_removal_stage = 2
|
||||
|
||||
fail_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, tearing [target]'s innards with \the [tool]!</font>", \
|
||||
"<font color='red'>Your hand slips, tearing [target]'s innards with \the [tool]!</font>")
|
||||
|
||||
/datum/surgery_step/slime/saw_core
|
||||
allowed_tools = list(
|
||||
@@ -70,24 +76,24 @@
|
||||
min_duration = 50
|
||||
max_duration = 70
|
||||
|
||||
can_use(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
return ..() && (istype(target) && target.core_removal_stage == 2 && target.cores > 0) //This is being passed a human as target, unsure why.
|
||||
/datum/surgery_step/slime/saw_core/can_use(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
return ..() && (istype(target) && target.core_removal_stage == 2 && target.cores > 0) //This is being passed a human as target, unsure why.
|
||||
|
||||
begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts cutting out one of [target]'s cores with \the [tool].", \
|
||||
"You start cutting out one of [target]'s cores with \the [tool].")
|
||||
/datum/surgery_step/slime/saw_core/begin_step(mob/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("[user] starts cutting out one of [target]'s cores with \the [tool].", \
|
||||
"You start cutting out one of [target]'s cores with \the [tool].")
|
||||
|
||||
end_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
target.cores--
|
||||
user.visible_message("<font color='blue'>[user] cuts out one of [target]'s cores with \the [tool].</font>",, \
|
||||
"<font color='blue'>You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.</font>")
|
||||
/datum/surgery_step/slime/saw_core/end_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
target.cores--
|
||||
user.visible_message("<font color='blue'>[user] cuts out one of [target]'s cores with \the [tool].</font>",, \
|
||||
"<font color='blue'>You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.</font>")
|
||||
|
||||
if(target.cores >= 0)
|
||||
new target.coretype(target.loc)
|
||||
if(target.cores <= 0)
|
||||
target.icon_state = "slime extracted"
|
||||
if(target.cores >= 0)
|
||||
new target.coretype(target.loc)
|
||||
if(target.cores <= 0)
|
||||
target.icon_state = "slime extracted"
|
||||
|
||||
|
||||
fail_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, causing \him to miss the core!</font>", \
|
||||
"<font color='red'>Your hand slips, causing you to miss the core!</font>")
|
||||
/datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<font color='red'>[user]'s hand slips, causing \him to miss the core!</font>", \
|
||||
"<font color='red'>Your hand slips, causing you to miss the core!</font>")
|
||||
@@ -756,7 +756,7 @@
|
||||
result_amount = 1
|
||||
required = /obj/item/slime_extract/cerulean
|
||||
|
||||
/datum/chemical_reaction/slime/cerulean_enhance/on_reaction(var/datum/reagents/holder)
|
||||
/datum/chemical_reaction/slime/cerulean_enhancer/on_reaction(var/datum/reagents/holder)
|
||||
new /obj/item/slimepotion/enhancer(get_turf(holder.my_atom))
|
||||
..()
|
||||
|
||||
|
||||
5
html/changelogs/PrismaticGynoid-crawl.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
author: PrismaticGynoid
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Adds the ability to 'crawl' to an adjacent turf by click-dragging yourself to it, after a delay. This can be used to move while unable to stand. You can also do this with other movable objects, if you really wanted to."
|
||||
- tweak: "Conscious mobs lying on the ground can now buckle themselves to chairs/beds. This includes people missing legs."
|
||||
|
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 603 B |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 93 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 42 KiB |
@@ -3120,7 +3120,7 @@
|
||||
"bhZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
|
||||
"bia" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
|
||||
"bib" = (/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/structure/table/standard,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
|
||||
"bic" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_y = -32},/obj/effect/floor_decal/corner/pink/full,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
"bic" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/pink/full,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/closet/secure_closet/medical_wall/pills{pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
"bid" = (/obj/effect/floor_decal/corner/pink{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
"bie" = (/obj/structure/bed/padded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
"bif" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
@@ -3906,7 +3906,7 @@
|
||||
"bxf" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/o2{pixel_x = 0; pixel_y = 0},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
|
||||
"bxg" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
|
||||
"bxh" = (/obj/structure/bed/chair/wheelchair,/obj/machinery/camera/network/medbay{c_tag = "MED - Equipment Storage"; dir = 8},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
|
||||
"bxi" = (/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_x = -32; pixel_y = 0},/obj/structure/table/glass,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"bxi" = (/obj/structure/table/glass,/obj/structure/closet/secure_closet/medical_wall/pills{pixel_x = -32},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"bxj" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"bxk" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"bxl" = (/obj/machinery/sleep_console,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
@@ -4677,7 +4677,7 @@
|
||||
"bLW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
|
||||
"bLX" = (/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
|
||||
"bLY" = (/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice)
|
||||
"bLZ" = (/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = -32},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/camera/network/research{c_tag = "SCI - Robotics Port"; dir = 4},/obj/structure/table/standard,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bLZ" = (/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = -32},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/camera/network/research{c_tag = "SCI - Robotics Port"; dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/table/standard,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMa" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bMc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
@@ -4888,7 +4888,7 @@
|
||||
"bPZ" = (/obj/machinery/computer/mecha,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/ai_status_display{pixel_y = -32},/obj/machinery/camera/network/research{c_tag = "SCI - RD's Office"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
|
||||
"bQa" = (/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/mob/living/simple_animal/slime/rainbow/kendrick,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
|
||||
"bQb" = (/obj/structure/table/rack,/obj/item/weapon/rig/hazmat/equipped,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice)
|
||||
"bQc" = (/obj/structure/table/standard,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bQc" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bQd" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/corner/pink{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
|
||||
"bQe" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
|
||||
"bQf" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
|
||||
|
||||
@@ -6672,7 +6672,7 @@
|
||||
"cyp" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/pink/border{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay)
|
||||
"cyq" = (/obj/structure/table/steel,/obj/item/device/multitool,/obj/item/weapon/deck/cards,/obj/machinery/camera/network/medbay{c_tag = "MED - EMT Bay"; dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay)
|
||||
"cyr" = (/turf/simulated/wall,/area/medical/medbay_emt_bay)
|
||||
"cys" = (/obj/structure/table/glass,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_x = -32; pixel_y = 0},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/pink/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
"cys" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/pink/border{dir = 8},/obj/structure/closet/secure_closet/medical_wall/pills{pixel_x = -32},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
"cyt" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
"cyu" = (/obj/structure/bed/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/medbay{c_tag = "MED - Examination Room"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/pink/border{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/exam_room)
|
||||
"cyv" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/reception)
|
||||
@@ -7598,7 +7598,7 @@
|
||||
"cQf" = (/obj/structure/closet/secure_closet/medical1,/obj/item/device/radio/intercom/department/medbay{dir = 1; pixel_x = 0; pixel_y = -21},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"cQg" = (/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"cQh" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 2; pixel_y = 2},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = -2; pixel_y = -2},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/camera/network/medbay{c_tag = "MED - Acute"; dir = 1},/obj/item/device/defib_kit/loaded,/obj/item/device/defib_kit/loaded,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"cQi" = (/obj/structure/table/glass,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_x = 32; pixel_y = 0},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"cQi" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/structure/closet/secure_closet/medical_wall/pills{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"cQj" = (/obj/structure/table/glass,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/pink/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"cQk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
"cQl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/medbay{c_tag = "MED - Diagnostics"; dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/obj/effect/floor_decal/corner/pink/bordercorner2,/obj/effect/floor_decal/corner/pink/bordercorner2{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
|
||||
|
||||
@@ -2122,6 +2122,7 @@
|
||||
#include "code\modules\reagents\reagent_containers\drinkingglass\extras.dm"
|
||||
#include "code\modules\reagents\reagent_containers\drinkingglass\glass_boxes.dm"
|
||||
#include "code\modules\reagents\reagent_containers\drinkingglass\glass_types.dm"
|
||||
#include "code\modules\reagents\reagent_containers\drinkingglass\metaglass.dm"
|
||||
#include "code\modules\reagents\reagent_containers\drinkingglass\shaker.dm"
|
||||
#include "code\modules\reagents\reagent_containers\food\cans.dm"
|
||||
#include "code\modules\reagents\reagent_containers\food\condiment.dm"
|
||||
|
||||