Merge branch 'bleeding-edge-freeze' of https://github.com/Baystation12/Baystation12 into organ

Conflicts:
	html/changelog.html
This commit is contained in:
Chinsky
2013-06-01 18:48:09 +04:00
26 changed files with 443 additions and 225 deletions

View File

@@ -53,6 +53,9 @@
#define FILE_DIR "sound/voice" #define FILE_DIR "sound/voice"
#define FILE_DIR "sound/voice/Serithi" #define FILE_DIR "sound/voice/Serithi"
#define FILE_DIR "sound/weapons" #define FILE_DIR "sound/weapons"
#define FILE_DIR "tools"
#define FILE_DIR "tools/AddToChangelog"
#define FILE_DIR "tools/AddToChangelog/AddToChangelog"
// END_FILE_DIR // END_FILE_DIR
// BEGIN_PREFERENCES // BEGIN_PREFERENCES
#define DEBUG #define DEBUG
@@ -492,6 +495,7 @@
#include "code\game\objects\items\devices\transfer_valve.dm" #include "code\game\objects\items\devices\transfer_valve.dm"
#include "code\game\objects\items\devices\uplinks.dm" #include "code\game\objects\items\devices\uplinks.dm"
#include "code\game\objects\items\devices\violin.dm" #include "code\game\objects\items\devices\violin.dm"
#include "code\game\objects\items\devices\whistle.dm"
#include "code\game\objects\items\devices\PDA\cart.dm" #include "code\game\objects\items\devices\PDA\cart.dm"
#include "code\game\objects\items\devices\PDA\chatroom.dm" #include "code\game\objects\items\devices\PDA\chatroom.dm"
#include "code\game\objects\items\devices\PDA\PDA.dm" #include "code\game\objects\items\devices\PDA\PDA.dm"

View File

@@ -89,6 +89,6 @@ Bonus
if(brute_dam < 50) if(brute_dam < 50)
M.adjustBruteLoss(3) M.adjustBruteLoss(3)
var/turf/pos = get_turf(M) var/turf/simulated/pos = get_turf(M)
pos.add_blood_floor(M) pos.add_blood_floor(M)
playsound(pos, 'sound/effects/splat.ogg', 50, 1) playsound(pos, 'sound/effects/splat.ogg', 50, 1)

View File

@@ -420,6 +420,7 @@ its easier to just keep the beam vertical.
//returns 1 if made bloody, returns 0 otherwise //returns 1 if made bloody, returns 0 otherwise
/atom/proc/add_blood(mob/living/carbon/human/M as mob) /atom/proc/add_blood(mob/living/carbon/human/M as mob)
.=1
if (!( istype(M, /mob/living/carbon/human) )) if (!( istype(M, /mob/living/carbon/human) ))
return 0 return 0
if (!istype(M.dna, /datum/dna)) if (!istype(M.dna, /datum/dna))
@@ -431,55 +432,6 @@ its easier to just keep the beam vertical.
if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it.
blood_DNA = list() blood_DNA = list()
//adding blood to items
if (istype(src, /obj/item)&&!istype(src, /obj/item/weapon/melee/energy))//Only regular items. Energy melee weapon are not affected.
var/obj/item/O = src
//if we haven't made our blood_overlay already
if( !O.blood_overlay )
var/icon/I = new /icon(O.icon, O.icon_state)
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent)
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant
//not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made.
for(var/obj/item/A in world)
if(A.type == O.type && !A.blood_overlay)
A.blood_overlay = I
//apply the blood-splatter overlay if it isn't already in there
if(!blood_DNA.len)
O.overlays += O.blood_overlay
//if this blood isn't already in the list, add it
if(blood_DNA[M.dna.unique_enzymes])
return 0 //already bloodied with this blood. Cannot add more.
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
return 1 //we applied blood to the item
//adding blood to turfs
else if (istype(src, /turf/simulated))
var/turf/simulated/T = src
//get one blood decal and infect it with virus from M.viruses
for(var/obj/effect/decal/cleanable/blood/B in T.contents)
if(!B.blood_DNA[M.dna.unique_enzymes])
B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
/*for(var/datum/disease/D in M.viruses)
var/datum/disease/newDisease = D.Copy(1)
B.viruses += newDisease
newDisease.holder = B*/
return 1 //we bloodied the floor
//if there isn't a blood decal already, make one.
var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T)
newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
/*for(var/datum/disease/D in M.viruses)
var/datum/disease/newDisease = D.Copy(1)
newblood.viruses += newDisease
newDisease.holder = newblood*/
return 1 //we bloodied the floor
//adding blood to humans //adding blood to humans
else if (istype(src, /mob/living/carbon/human)) else if (istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src var/mob/living/carbon/human/H = src
@@ -499,37 +451,6 @@ its easier to just keep the beam vertical.
if(toxvomit) if(toxvomit)
this.icon_state = "vomittox_[pick(1,4)]" this.icon_state = "vomittox_[pick(1,4)]"
/*for(var/datum/disease/D in M.viruses)
var/datum/disease/newDisease = D.Copy(1)
this.viruses += newDisease
newDisease.holder = this*/
// Only adds blood on the floor -- Skie
/atom/proc/add_blood_floor(mob/living/carbon/M as mob)
if( istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/human))
if( istype(src, /turf/simulated) )
var/turf/simulated/source1 = src
var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1)
this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
/*for(var/datum/disease/D in M.viruses)
var/datum/disease/newDisease = D.Copy(1)
this.viruses += newDisease
newDisease.holder = this*/
else if( istype(M, /mob/living/carbon/alien ))
if( istype(src, /turf/simulated) )
var/turf/simulated/source2 = src
var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(source2)
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
/*for(var/datum/disease/D in M.viruses)
var/datum/disease/newDisease = D.Copy(1)
this.viruses += newDisease
newDisease.holder = this*/
else if( istype(M, /mob/living/silicon/robot ))
if( istype(src, /turf/simulated) )
var/turf/simulated/source2 = src
new /obj/effect/decal/cleanable/oil(source2)
/atom/proc/clean_blood() /atom/proc/clean_blood()
src.germ_level = 0 src.germ_level = 0

View File

@@ -1,3 +1,4 @@
#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var)
/obj/effect/decal/cleanable/blood /obj/effect/decal/cleanable/blood
name = "blood" name = "blood"
desc = "It's red and gooey. Perhaps it's the chef's cooking?" desc = "It's red and gooey. Perhaps it's the chef's cooking?"
@@ -11,6 +12,7 @@
var/list/viruses = list() var/list/viruses = list()
blood_DNA = list() blood_DNA = list()
var/datum/disease2/disease/virus2 = null var/datum/disease2/disease/virus2 = null
var/amount = 5
/obj/effect/decal/cleanable/blood/Del() /obj/effect/decal/cleanable/blood/Del()
for(var/datum/disease/D in viruses) for(var/datum/disease/D in viruses)
@@ -25,16 +27,69 @@
if(src.loc && isturf(src.loc)) if(src.loc && isturf(src.loc))
for(var/obj/effect/decal/cleanable/blood/B in src.loc) for(var/obj/effect/decal/cleanable/blood/B in src.loc)
if(B != src) if(B != src)
if (B.blood_DNA)
blood_DNA |= B.blood_DNA.Copy()
del(B) del(B)
spawn(DRYING_TIME * (amount+1))
dry()
/obj/effect/decal/cleanable/blood/HasEntered(mob/living/carbon/human/perp)
if (!istype(perp))
return
if(amount < 1)
return
if(perp.shoes)
perp.shoes:track_blood = max(amount,perp.shoes:track_blood) //Adding blood to shoes
if(!perp.shoes.blood_overlay)
perp.shoes.generate_blood_overlay()
if(!perp.shoes.blood_DNA)
perp.shoes.blood_DNA = list()
perp.shoes.overlays += perp.shoes.blood_overlay
perp.update_inv_shoes(1)
perp.shoes.blood_DNA |= blood_DNA.Copy()
else
perp.track_blood = max(amount,perp.track_blood) //Or feet
if(!perp.feet_blood_DNA)
perp.feet_blood_DNA = list()
perp.feet_blood_DNA |= blood_DNA.Copy()
amount--
/obj/effect/decal/cleanable/blood/proc/dry()
name = "dried [src]"
desc = "It's dark red and crusty. Someone is not doing their job."
var/icon/I = icon(icon,icon_state)
I.SetIntensity(0.7)
icon = I
amount = 0
/obj/effect/decal/cleanable/blood/splatter /obj/effect/decal/cleanable/blood/splatter
random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
amount = 2
/obj/effect/decal/cleanable/blood/footprints
name = "bloody footprints"
desc = "Whoops..."
icon='icons/effects/footprints.dmi'
icon_state = "blood1"
amount = 0
random_icon_states = null
/obj/effect/decal/cleanable/blood/tracks /obj/effect/decal/cleanable/blood/tracks
icon_state = "tracks" icon_state = "tracks"
desc = "They look like tracks left by wheels." desc = "They look like tracks left by wheels."
gender = PLURAL gender = PLURAL
random_icon_states = null random_icon_states = null
amount = 0
/obj/effect/decal/cleanable/blood/drip
name = "drips of blood"
desc = "It's red."
gender = PLURAL
icon = 'drip.dmi'
icon_state = "1"
amount = 0
/obj/effect/decal/cleanable/blood/gibs /obj/effect/decal/cleanable/blood/gibs
name = "gibs" name = "gibs"
@@ -89,4 +144,4 @@
icon = 'blood.dmi' icon = 'blood.dmi'
icon_state = "mucus" icon_state = "mucus"
random_icon_states = list("mucus") random_icon_states = list("mucus")
var/datum/disease2/disease/virus2 = null var/datum/disease2/disease/virus2 = null

View File

@@ -338,8 +338,8 @@
M.take_organ_damage(power) M.take_organ_damage(power)
if (prob(33)) // Added blood for whacking non-humans too if (prob(33)) // Added blood for whacking non-humans too
var/turf/location = M.loc var/turf/simulated/location = M.loc
if (istype(location, /turf/simulated)) if (istype(location))
location.add_blood_floor(M) location.add_blood_floor(M)
if("fire") if("fire")
if (!(COLD_RESISTANCE in M.mutations)) if (!(COLD_RESISTANCE in M.mutations))
@@ -700,3 +700,39 @@
if(istype(src, /obj/item/clothing/gloves)) if(istype(src, /obj/item/clothing/gloves))
var/obj/item/clothing/gloves/G = src var/obj/item/clothing/gloves/G = src
G.transfer_blood = 0 G.transfer_blood = 0
/obj/item/add_blood(mob/living/carbon/human/M as mob)
if (!..())
return 0
if(istype(src, /obj/item/weapon/melee/energy))
return
//if we haven't made our blood_overlay already
if( !blood_overlay )
generate_blood_overlay()
//apply the blood-splatter overlay if it isn't already in there
if(!blood_DNA.len)
overlays += blood_overlay
//if this blood isn't already in the list, add it
if(blood_DNA[M.dna.unique_enzymes])
return 0 //already bloodied with this blood. Cannot add more.
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
return 1 //we applied blood to the item
/obj/item/proc/generate_blood_overlay()
if(blood_overlay)
return
var/icon/I = new /icon(icon, icon_state)
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) //fills the icon_state with white (except where it's transparent)
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) //adds blood and the remaining white areas become transparant
//not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made.
for(var/obj/item/A in world)
if(A.type == type && !A.blood_overlay)
A.blood_overlay = I

View File

@@ -0,0 +1,21 @@
/obj/item/device/hailer
name = "hailer"
desc = "Used by obese officers to save their breath for running."
icon_state = "voice0"
item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang)
w_class = 1.0
flags = FPRINT | TABLEPASS| CONDUCT
var/spamcheck = 0
/obj/item/device/hailer/attack_self(mob/living/carbon/user as mob)
if (spamcheck)
return
playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0)
user.visible_message("<span class='warning'>[user]'s [name] rasps, \"Halt! Security!\"</span>")
spamcheck = 1
spawn(20)
spamcheck = 0

View File

@@ -186,6 +186,7 @@
new /obj/item/weapon/gun/energy/taser(src) new /obj/item/weapon/gun/energy/taser(src)
new /obj/item/clothing/glasses/sunglasses/sechud(src) new /obj/item/clothing/glasses/sunglasses/sechud(src)
new /obj/item/taperoll/police(src) new /obj/item/taperoll/police(src)
new /obj/item/device/hailer
return return

View File

@@ -34,6 +34,31 @@
else else
playsound(src, "clownstep", 20, 1) playsound(src, "clownstep", 20, 1)
var/list/bloodDNA = null
if(H.shoes)
var/obj/item/clothing/shoes/S = H.shoes
if(S.track_blood && S.blood_DNA)
bloodDNA = S.blood_DNA
S.track_blood--
else
if(H.track_blood && H.feet_blood_DNA)
bloodDNA = H.feet_blood_DNA
H.track_blood--
if (bloodDNA)
var/obj/effect/decal/cleanable/blood/footprints/here = new(src)
here.icon_state = "blood1"
here.dir = H.dir
here.blood_DNA |= bloodDNA.Copy()
var/turf/simulated/from = get_step(H,reverse_direction(H.dir))
if(from)
var/obj/effect/decal/cleanable/blood/footprints/there = new(from)
there.icon_state = "blood2"
there.dir = H.dir
there.blood_DNA |= bloodDNA.Copy()
bloodDNA = null
switch (src.wet) switch (src.wet)
if(1) if(1)
if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes
@@ -72,4 +97,33 @@
playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3)
M.Weaken(10) M.Weaken(10)
..() ..()
//returns 1 if made bloody, returns 0 otherwise
/turf/simulated/add_blood(mob/living/carbon/human/M as mob)
if (!..())
return 0
for(var/obj/effect/decal/cleanable/blood/B in contents)
if(!B.blood_DNA[M.dna.unique_enzymes])
B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
return 1 //we bloodied the floor
//if there isn't a blood decal already, make one.
var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src)
newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
return 1 //we bloodied the floor
// Only adds blood on the floor -- Skie
/turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob)
if( istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/human))
var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(src)
this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
else if( istype(M, /mob/living/carbon/alien ))
var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(src)
this.blood_DNA["UNKNOWN BLOOD"] = "X*"
else if( istype(M, /mob/living/silicon/robot ))
new /obj/effect/decal/cleanable/oil(src)

View File

@@ -1,33 +1,16 @@
/mob /mob
var/bloody_hands = 0 var/bloody_hands = 0
var/mob/living/carbon/human/bloody_hands_mob var/mob/living/carbon/human/bloody_hands_mob
var/track_blood var/track_blood = 0
var/mob/living/carbon/human/track_blood_mob var/list/feet_blood_DNA
var/track_blood_type var/track_blood_type
/obj/item/clothing/gloves /obj/item/clothing/gloves
var/transfer_blood = 0 var/transfer_blood = 0
var/mob/living/carbon/human/bloody_hands_mob var/mob/living/carbon/human/bloody_hands_mob
proc/blood_incompatible(donor,receiver) /obj/item/clothing/shoes/
if(!donor || !receiver) return 0 var/track_blood = 0
var
donor_antigen = copytext(donor,1,lentext(donor))
receiver_antigen = copytext(receiver,1,lentext(receiver))
donor_rh = (findtext(donor,"+")>0)
receiver_rh = (findtext(receiver,"+")>0)
if(donor_rh && !receiver_rh) return 1
switch(receiver_antigen)
if("A")
if(donor_antigen != "A" && donor_antigen != "O") return 1
if("B")
if(donor_antigen != "B" && donor_antigen != "O") return 1
if("O")
if(donor_antigen != "O") return 1
//AB is a universal receiver.
return 0
/obj/item/weapon/reagent_containers/glass/rag /obj/item/weapon/reagent_containers/glass/rag
name = "damp rag" name = "damp rag"

View File

@@ -1084,4 +1084,21 @@
if (germs == 2500) if (germs == 2500)
world << "Reached stage 3 in [ticks] ticks" world << "Reached stage 3 in [ticks] ticks"
world << "Mob took [tdamage] tox damage" world << "Mob took [tdamage] tox damage"
*/ */
//returns 1 if made bloody, returns 0 otherwise
/mob/living/carbon/human/add_blood(mob/living/carbon/human/M as mob)
if (!..())
return 0
//if this blood isn't already in the list, add it
if(blood_DNA[M.dna.unique_enzymes])
return 0 //already bloodied with this blood. Cannot add more.
blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
src.update_inv_gloves() //handles bloody hands overlays and updating
return 1 //we applied blood to the item
/mob/living/carbon/human/clean_blood()
.=..()
if(istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
del(feet_blood_DNA)
return 1

View File

@@ -198,6 +198,15 @@
m_type = 2 m_type = 2
else else
src << "You are not THE LAW, pal." src << "You are not THE LAW, pal."
if("halt")
if (istype(module,/obj/item/weapon/robot_module/security))
message = "<B>[src]</B>'s speakers skreech, \"Halt! Security!\"."
playsound(src.loc, 'sound/voice/halt.ogg', 50, 0)
m_type = 2
else
src << "You are not security."
else else
src << text("Invalid Emote: []", act) src << text("Invalid Emote: []", act)
if ((message && src.stat == 0)) if ((message && src.stat == 0))

View File

@@ -218,4 +218,22 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
for(var/datum/reagent/blood/D in container.reagent_list) for(var/datum/reagent/blood/D in container.reagent_list)
if(D.data["donor"] == src) if(D.data["donor"] == src)
return D return D
return res return res
proc/blood_incompatible(donor,receiver)
if(!donor || !receiver) return 0
var
donor_antigen = copytext(donor,1,lentext(donor))
receiver_antigen = copytext(receiver,1,lentext(receiver))
donor_rh = (findtext(donor,"+")>0)
receiver_rh = (findtext(receiver,"+")>0)
if(donor_rh && !receiver_rh) return 1
switch(receiver_antigen)
if("A")
if(donor_antigen != "A" && donor_antigen != "O") return 1
if("B")
if(donor_antigen != "B" && donor_antigen != "O") return 1
if("O")
if(donor_antigen != "O") return 1
//AB is a universal receiver.
return 0

View File

@@ -1328,13 +1328,3 @@
dirs = alldirs.Copy() dirs = alldirs.Copy()
src.streak(dirs) src.streak(dirs)
/obj/effect/decal/cleanable/blood/drip
name = "drips of blood"
desc = "It's red."
gender = PLURAL
density = 0
anchored = 1
layer = 2
icon = 'drip.dmi'
icon_state = "1"

View File

@@ -18,8 +18,11 @@
return 1 return 1
/datum/surgery_step/appendectomy/cut_appendix /datum/surgery_step/appendectomy/cut_appendix
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 70 min_duration = 70
max_duration = 90 max_duration = 90
@@ -45,8 +48,11 @@
groin.createwound(CUT, 50, 1) groin.createwound(CUT, 50, 1)
/datum/surgery_step/appendectomy/remove_appendix /datum/surgery_step/appendectomy/remove_appendix
required_tool = /obj/item/weapon/hemostat allowed_tools = list(
allowed_tools = list(/obj/item/weapon/wirecutters) /obj/item/weapon/hemostat = 100, \
/obj/item/weapon/wirecutters = 75, \
/obj/item/weapon/kitchen/utensil/fork = 20
)
min_duration = 60 min_duration = 60
max_duration = 80 max_duration = 80

View File

@@ -4,9 +4,10 @@
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
/datum/surgery_step/glue_bone /datum/surgery_step/glue_bone
priority = 2 allowed_tools = list(
required_tool = /obj/item/weapon/bonegel /obj/item/weapon/bonegel = 100, \
allowed_tools = list(/obj/item/weapon/screwdriver) /obj/item/weapon/screwdriver = 75
)
can_infect = 1 can_infect = 1
blood_level = 1 blood_level = 1
@@ -37,8 +38,10 @@
"\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.display_name]!") "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.display_name]!")
/datum/surgery_step/set_bone /datum/surgery_step/set_bone
required_tool = /obj/item/weapon/bonesetter allowed_tools = list(
allowed_tools = list(/obj/item/weapon/wrench) /obj/item/weapon/bonesetter = 100, \
/obj/item/weapon/wrench = 75 \
)
min_duration = 60 min_duration = 60
max_duration = 70 max_duration = 70
@@ -72,8 +75,10 @@
affected.createwound(BRUISE, 5) affected.createwound(BRUISE, 5)
/datum/surgery_step/mend_skull /datum/surgery_step/mend_skull
required_tool = /obj/item/weapon/bonesetter allowed_tools = list(
allowed_tools = list(/obj/item/weapon/wrench) /obj/item/weapon/bonesetter = 100, \
/obj/item/weapon/wrench = 75 \
)
min_duration = 60 min_duration = 60
max_duration = 70 max_duration = 70
@@ -102,8 +107,10 @@
h.disfigured = 1 h.disfigured = 1
/datum/surgery_step/finish_bone /datum/surgery_step/finish_bone
required_tool = /obj/item/weapon/bonegel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/screwdriver) /obj/item/weapon/bonegel = 100, \
/obj/item/weapon/screwdriver = 75
)
can_infect = 1 can_infect = 1
blood_level = 1 blood_level = 1

View File

@@ -10,7 +10,10 @@
return target_zone == "head" && hasorgans(target) return target_zone == "head" && hasorgans(target)
/datum/surgery_step/brain/saw_skull /datum/surgery_step/brain/saw_skull
required_tool = /obj/item/weapon/circular_saw allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
/obj/item/weapon/hatchet = 75
)
min_duration = 50 min_duration = 50
max_duration = 70 max_duration = 70
@@ -31,11 +34,14 @@
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("\red [user]'s hand slips, cracking [target]'s skull with \the [tool]!" , \ user.visible_message("\red [user]'s hand slips, cracking [target]'s skull with \the [tool]!" , \
"\red Your hand slips, cracking [target]'s skull with \the [tool]!" ) "\red Your hand slips, cracking [target]'s skull with \the [tool]!" )
target.apply_damage(10, BRUTE, "head") target.apply_damage(max(10, tool.force), BRUTE, "head")
/datum/surgery_step/brain/cut_brain /datum/surgery_step/brain/cut_brain
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 80 min_duration = 80
max_duration = 100 max_duration = 100
@@ -59,7 +65,10 @@
target.apply_damage(50, BRUTE, "head", 1) target.apply_damage(50, BRUTE, "head", 1)
/datum/surgery_step/brain/saw_spine /datum/surgery_step/brain/saw_spine
required_tool = /obj/item/weapon/circular_saw allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
/obj/item/weapon/hatchet = 75
)
min_duration = 50 min_duration = 50
max_duration = 70 max_duration = 70
@@ -103,8 +112,11 @@
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
/datum/surgery_step/brain/bone_chips /datum/surgery_step/brain/bone_chips
required_tool = /obj/item/weapon/hemostat allowed_tools = list(
allowed_tools = list(/obj/item/weapon/wirecutters, /obj/item/weapon/kitchen/utensil/fork) /obj/item/weapon/hemostat = 100, \
/obj/item/weapon/wirecutters = 75, \
/obj/item/weapon/kitchen/utensil/fork = 20
)
min_duration = 80 min_duration = 80
max_duration = 100 max_duration = 100
@@ -129,8 +141,10 @@
target.apply_damage(30, BRUTE, "head", 1) target.apply_damage(30, BRUTE, "head", 1)
/datum/surgery_step/brain/hematoma /datum/surgery_step/brain/hematoma
required_tool = /obj/item/weapon/FixOVein allowed_tools = list(
allowed_tools = list(/obj/item/weapon/cable_coil) /obj/item/weapon/FixOVein , \
/obj/item/weapon/cable_coil
)
min_duration = 90 min_duration = 90
max_duration = 110 max_duration = 110
@@ -165,8 +179,11 @@
return istype(target, /mob/living/carbon/slime/) && target.stat == 2 return istype(target, /mob/living/carbon/slime/) && target.stat == 2
/datum/surgery_step/slime/cut_flesh /datum/surgery_step/slime/cut_flesh
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 30 min_duration = 30
max_duration = 50 max_duration = 50
@@ -188,8 +205,11 @@
"\red Your hand slips, tearing [target]'s flesh with \the [tool]!") "\red Your hand slips, tearing [target]'s flesh with \the [tool]!")
/datum/surgery_step/slime/cut_innards /datum/surgery_step/slime/cut_innards
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 30 min_duration = 30
max_duration = 50 max_duration = 50
@@ -211,7 +231,10 @@
"\red Your hand slips, tearing [target]'s innards with \the [tool]!") "\red Your hand slips, tearing [target]'s innards with \the [tool]!")
/datum/surgery_step/slime/saw_core /datum/surgery_step/slime/saw_core
required_tool = /obj/item/weapon/circular_saw allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
/obj/item/weapon/hatchet = 75
)
min_duration = 50 min_duration = 50
max_duration = 70 max_duration = 70

View File

@@ -15,8 +15,11 @@
return target_zone == "eyes" return target_zone == "eyes"
/datum/surgery_step/eye/cut_open /datum/surgery_step/eye/cut_open
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 90 min_duration = 90
max_duration = 110 max_duration = 110
@@ -41,8 +44,10 @@
affected.createwound(CUT, 10) affected.createwound(CUT, 10)
/datum/surgery_step/eye/lift_eyes /datum/surgery_step/eye/lift_eyes
required_tool = /obj/item/weapon/retractor allowed_tools = list(
allowed_tools = list(/obj/item/weapon/kitchen/utensil/fork) /obj/item/weapon/retractor = 100, \
/obj/item/weapon/kitchen/utensil/fork = 50
)
min_duration = 30 min_duration = 30
max_duration = 40 max_duration = 40
@@ -67,8 +72,11 @@
target.apply_damage(10, BRUTE, affected) target.apply_damage(10, BRUTE, affected)
/datum/surgery_step/eye/mend_eyes /datum/surgery_step/eye/mend_eyes
required_tool = /obj/item/weapon/hemostat allowed_tools = list(
allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap) /obj/item/weapon/hemostat = 100, \
/obj/item/weapon/cable_coil = 75, \
/obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity.
)
min_duration = 80 min_duration = 80
max_duration = 100 max_duration = 100
@@ -93,8 +101,12 @@
target.apply_damage(10, BRUTE, affected) target.apply_damage(10, BRUTE, affected)
/datum/surgery_step/eye/cauterize /datum/surgery_step/eye/cauterize
required_tool = /obj/item/weapon/cautery allowed_tools = list(
allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) /obj/item/weapon/cautery = 100, \
/obj/item/clothing/mask/cigarette = 75, \
/obj/item/weapon/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
min_duration = 70 min_duration = 70
max_duration = 100 max_duration = 100

View File

@@ -15,8 +15,11 @@
return target_zone == "mouth" return target_zone == "mouth"
/datum/surgery_step/generic/cut_face /datum/surgery_step/generic/cut_face
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 90 min_duration = 90
max_duration = 110 max_duration = 110
@@ -42,8 +45,11 @@
target.losebreath += 10 target.losebreath += 10
/datum/surgery_step/face/mend_vocal /datum/surgery_step/face/mend_vocal
required_tool = /obj/item/weapon/hemostat allowed_tools = list(
allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap) /obj/item/weapon/hemostat = 100, \
/obj/item/weapon/cable_coil = 75, \
/obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity.
)
min_duration = 70 min_duration = 70
max_duration = 90 max_duration = 90
@@ -67,8 +73,10 @@
target.losebreath += 10 target.losebreath += 10
/datum/surgery_step/face/fix_face /datum/surgery_step/face/fix_face
required_tool = /obj/item/weapon/retractor allowed_tools = list(
allowed_tools = list(/obj/item/weapon/kitchen/utensil/fork) /obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 55, \
/obj/item/weapon/kitchen/utensil/fork = 75)
min_duration = 80 min_duration = 80
max_duration = 100 max_duration = 100
@@ -93,8 +101,12 @@
target.apply_damage(10, BRUTE, affected) target.apply_damage(10, BRUTE, affected)
/datum/surgery_step/face/cauterize /datum/surgery_step/face/cauterize
required_tool = /obj/item/weapon/cautery allowed_tools = list(
allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) /obj/item/weapon/cautery = 100, \
/obj/item/clothing/mask/cigarette = 75, \
/obj/item/weapon/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
min_duration = 70 min_duration = 70
max_duration = 100 max_duration = 100

View File

@@ -20,8 +20,11 @@
return 1 return 1
/datum/surgery_step/generic/cut_open /datum/surgery_step/generic/cut_open
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 90 min_duration = 90
max_duration = 110 max_duration = 110
@@ -42,6 +45,7 @@
user.visible_message("\blue [user] has made an incision on [target]'s [affected.display_name] with \the [tool].", \ user.visible_message("\blue [user] has made an incision on [target]'s [affected.display_name] with \the [tool].", \
"\blue You have made an incision on [target]'s [affected.display_name] with \the [tool].",) "\blue You have made an incision on [target]'s [affected.display_name] with \the [tool].",)
affected.open = 1 affected.open = 1
affected.status |= ORGAN_BLEEDING
affected.createwound(CUT, 1) affected.createwound(CUT, 1)
if (target_zone == "head") if (target_zone == "head")
target.brain_op_stage = 1 target.brain_op_stage = 1
@@ -53,8 +57,11 @@
affected.createwound(CUT, 10) affected.createwound(CUT, 10)
/datum/surgery_step/generic/clamp_bleeders /datum/surgery_step/generic/clamp_bleeders
required_tool = /obj/item/weapon/hemostat allowed_tools = list(
allowed_tools = list(/obj/item/weapon/cable_coil, /obj/item/device/assembly/mousetrap) /obj/item/weapon/hemostat = 100, \
/obj/item/weapon/cable_coil = 75, \
/obj/item/device/assembly/mousetrap = 20
)
min_duration = 40 min_duration = 40
max_duration = 60 max_duration = 60
@@ -84,8 +91,11 @@
affected.createwound(CUT, 10) affected.createwound(CUT, 10)
/datum/surgery_step/generic/retract_skin /datum/surgery_step/generic/retract_skin
required_tool = /obj/item/weapon/retractor allowed_tools = list(
allowed_tools = list(/obj/item/weapon/crowbar,/obj/item/weapon/kitchen/utensil/fork) /obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 75, \
/obj/item/weapon/kitchen/utensil/fork = 50
)
min_duration = 30 min_duration = 30
max_duration = 40 max_duration = 40
@@ -135,8 +145,12 @@
target.apply_damage(12, BRUTE, affected) target.apply_damage(12, BRUTE, affected)
/datum/surgery_step/generic/cauterize /datum/surgery_step/generic/cauterize
required_tool = /obj/item/weapon/cautery allowed_tools = list(
allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) /obj/item/weapon/cautery = 100, \
/obj/item/clothing/mask/cigarette = 75, \
/obj/item/weapon/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
min_duration = 70 min_duration = 70
max_duration = 100 max_duration = 100
@@ -167,7 +181,10 @@
target.apply_damage(3, BURN, affected) target.apply_damage(3, BURN, affected)
/datum/surgery_step/generic/cut_limb /datum/surgery_step/generic/cut_limb
required_tool = /obj/item/weapon/circular_saw allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
/obj/item/weapon/hatchet = 75
)
min_duration = 110 min_duration = 110
max_duration = 160 max_duration = 160

View File

@@ -31,8 +31,11 @@
return "" return ""
/datum/surgery_step/cavity/make_space /datum/surgery_step/cavity/make_space
required_tool = /obj/item/weapon/surgicaldrill allowed_tools = list(
allowed_tools = list(/obj/item/weapon/pen,/obj/item/stack/rods) /obj/item/weapon/surgicaldrill = 100, \
/obj/item/weapon/pen = 75, \
/obj/item/stack/rods = 50
)
min_duration = 60 min_duration = 60
max_duration = 80 max_duration = 80
@@ -62,8 +65,12 @@
/datum/surgery_step/cavity/close_space /datum/surgery_step/cavity/close_space
priority = 2 priority = 2
required_tool = /obj/item/weapon/cautery allowed_tools = list(
allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) /obj/item/weapon/cautery = 100, \
/obj/item/clothing/mask/cigarette = 75, \
/obj/item/weapon/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
min_duration = 60 min_duration = 60
max_duration = 80 max_duration = 80
@@ -93,7 +100,7 @@
/datum/surgery_step/cavity/place_item /datum/surgery_step/cavity/place_item
priority = 0 priority = 0
required_tool = /obj/item allowed_tools = list(/obj/item = 100)
min_duration = 80 min_duration = 80
max_duration = 100 max_duration = 100
@@ -136,8 +143,11 @@
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
/datum/surgery_step/cavity/implant_removal /datum/surgery_step/cavity/implant_removal
required_tool = /obj/item/weapon/hemostat allowed_tools = list(
allowed_tools = list(/obj/item/weapon/wirecutters, /obj/item/weapon/kitchen/utensil/fork) /obj/item/weapon/hemostat = 100, \
/obj/item/weapon/wirecutters = 75, \
/obj/item/weapon/kitchen/utensil/fork = 20
)
min_duration = 80 min_duration = 80
max_duration = 100 max_duration = 100
@@ -159,8 +169,6 @@
find_prob +=60 find_prob +=60
else else
find_prob +=40 find_prob +=40
if (isright(tool))
find_prob +=20
if (prob(find_prob)) if (prob(find_prob))
user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.display_name] with \the [tool].", \ user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.display_name] with \the [tool].", \
"\blue You take something out of incision on [target]'s [affected.display_name]s with \the [tool]." ) "\blue You take something out of incision on [target]'s [affected.display_name]s with \the [tool]." )
@@ -189,8 +197,7 @@
affected.createwound(CUT, 20) affected.createwound(CUT, 20)
if (affected.implants.len) if (affected.implants.len)
var/fail_prob = 10 var/fail_prob = 10
if (!isright(tool)) fail_prob += 100 - tool_quality(tool)
fail_prob += 30
if (prob(fail_prob)) if (prob(fail_prob))
var/obj/item/weapon/implant/imp = affected.implants[1] var/obj/item/weapon/implant/imp = affected.implants[1]
user.visible_message("\red Something beeps inside [target]'s [affected.display_name]!") user.visible_message("\red Something beeps inside [target]'s [affected.display_name]!")

View File

@@ -6,8 +6,10 @@
/datum/surgery_step/fix_vein /datum/surgery_step/fix_vein
priority = 2 priority = 2
required_tool = /obj/item/weapon/FixOVein allowed_tools = list(
allowed_tools = list(/obj/item/weapon/cable_coil) /obj/item/weapon/circular_saw = 100, \
/obj/item/weapon/hatchet = 75
)
can_infect = 1 can_infect = 1
blood_level = 1 blood_level = 1

View File

@@ -10,7 +10,10 @@
return target_zone == "chest" return target_zone == "chest"
/datum/surgery_step/ribcage/saw_ribcage /datum/surgery_step/ribcage/saw_ribcage
required_tool = /obj/item/weapon/circular_saw allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
/obj/item/weapon/hatchet = 75
)
min_duration = 50 min_duration = 50
max_duration = 70 max_duration = 70
@@ -41,8 +44,11 @@
/datum/surgery_step/ribcage/retract_ribcage /datum/surgery_step/ribcage/retract_ribcage
required_tool = /obj/item/weapon/retractor allowed_tools = list(
allowed_tools = list(/obj/item/weapon/crowbar) /obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 75, \
/obj/item/weapon/kitchen/utensil/fork = 20
)
min_duration = 30 min_duration = 30
max_duration = 40 max_duration = 40
@@ -77,8 +83,12 @@
affected.fracture() affected.fracture()
/datum/surgery_step/ribcage/close_ribcage /datum/surgery_step/ribcage/close_ribcage
required_tool = /obj/item/weapon/retractor allowed_tools = list(
allowed_tools = list(/obj/item/weapon/crowbar) /obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 75, \
/obj/item/weapon/kitchen/utensil/fork = 20
)
min_duration = 20 min_duration = 20
max_duration = 40 max_duration = 40
@@ -112,7 +122,10 @@
target.rupture_lung() target.rupture_lung()
/datum/surgery_step/ribcage/mend_ribcage /datum/surgery_step/ribcage/mend_ribcage
required_tool = /obj/item/weapon/bonegel allowed_tools = list(
/obj/item/weapon/bonegel = 100, \
/obj/item/weapon/screwdriver = 75
)
min_duration = 20 min_duration = 20
max_duration = 40 max_duration = 40
@@ -127,7 +140,6 @@
target.custom_pain("Something hurts horribly in your chest!",1) target.custom_pain("Something hurts horribly in your chest!",1)
..() ..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/msg = "\blue [user] applied \the [tool] to [target]'s ribcage." var/msg = "\blue [user] applied \the [tool] to [target]'s ribcage."
var/self_msg = "\blue You applied \the [tool] to [target]'s ribcage." var/self_msg = "\blue You applied \the [tool] to [target]'s ribcage."
@@ -139,7 +151,11 @@
// ALIEN EMBRYO SURGERY // // ALIEN EMBRYO SURGERY //
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
/datum/surgery_step/ribcage/remove_embryo /datum/surgery_step/ribcage/remove_embryo
required_tool = /obj/item/weapon/hemostat allowed_tools = list(
/obj/item/weapon/hemostat = 100, \
/obj/item/weapon/wirecutters = 75, \
/obj/item/weapon/kitchen/utensil/fork = 20
)
blood_level = 2 blood_level = 2
min_duration = 80 min_duration = 80
@@ -171,8 +187,11 @@
// CHEST INTERNAL ORGAN SURGERY // // CHEST INTERNAL ORGAN SURGERY //
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
/datum/surgery_step/ribcage/fix_chest_internal /datum/surgery_step/ribcage/fix_chest_internal
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 70 min_duration = 70
max_duration = 90 max_duration = 90

View File

@@ -20,8 +20,11 @@
/datum/surgery_step/limb/cut /datum/surgery_step/limb/cut
required_tool = /obj/item/weapon/scalpel allowed_tools = list(
allowed_tools = list(/obj/item/weapon/shard, /obj/item/weapon/kitchenknife) /obj/item/weapon/scalpel = 100, \
/obj/item/weapon/kitchenknife = 75, \
/obj/item/weapon/shard = 50, \
)
min_duration = 80 min_duration = 80
max_duration = 100 max_duration = 100
@@ -48,8 +51,10 @@
/datum/surgery_step/limb/mend /datum/surgery_step/limb/mend
required_tool = /obj/item/weapon/retractor allowed_tools = list(
allowed_tools = list(/obj/item/weapon/kitchen/utensil/fork) /obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 75, \
/obj/item/weapon/kitchen/utensil/fork = 50)
min_duration = 80 min_duration = 80
max_duration = 100 max_duration = 100
@@ -80,8 +85,12 @@
/datum/surgery_step/limb/prepare /datum/surgery_step/limb/prepare
required_tool = /obj/item/weapon/cautery allowed_tools = list(
allowed_tools = list(/obj/item/weapon/weldingtool, /obj/item/clothing/mask/cigarette, /obj/item/weapon/lighter) /obj/item/weapon/cautery = 100, \
/obj/item/clothing/mask/cigarette = 75, \
/obj/item/weapon/lighter = 50, \
/obj/item/weapon/weldingtool = 25
)
min_duration = 60 min_duration = 60
max_duration = 70 max_duration = 70
@@ -115,7 +124,7 @@
/datum/surgery_step/limb/attach /datum/surgery_step/limb/attach
required_tool = /obj/item/robot_parts allowed_tools = list(/obj/item/robot_parts = 100)
can_infect = 0 can_infect = 0
min_duration = 80 min_duration = 80

View File

@@ -2,10 +2,8 @@
/datum/surgery_step /datum/surgery_step
var/priority = 0 //steps with higher priority would be attempted first var/priority = 0 //steps with higher priority would be attempted first
// type path referencing the required tool for this step
var/required_tool = null
// type path referencing tools that can be used as substitude for this step // type path referencing tools that can be used for this step, and how well are they suited for it
var/list/allowed_tools = null var/list/allowed_tools = null
// duration of the step // duration of the step
@@ -17,16 +15,11 @@
//How much blood this step can get on surgeon. 1 - hands, 2 - full body. //How much blood this step can get on surgeon. 1 - hands, 2 - full body.
var/blood_level = 0 var/blood_level = 0
//is it is a required surgical tool for this step //returns how well tool is suited for this step
proc/isright(obj/item/tool) proc/tool_quality(obj/item/tool)
return (istype(tool,required_tool)) for (var/T in allowed_tools)
if (istype(tool,T))
//is it is an accepted replacement tool for this step return allowed_tools[T]
proc/isacceptable(obj/item/tool)
if (allowed_tools)
for (var/T in allowed_tools)
if (istype(tool,T))
return 1
return 0 return 0
// checks whether this step can be applied with the given user and target // checks whether this step can be applied with the given user and target
@@ -69,10 +62,11 @@ proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool)
if (user.a_intent == "harm") //check for Hippocratic Oath if (user.a_intent == "harm") //check for Hippocratic Oath
return 0 return 0
for(var/datum/surgery_step/S in surgery_steps) for(var/datum/surgery_step/S in surgery_steps)
if( (S.isright(tool) || S.isacceptable(tool)) && \ //check if tool is right or close enough and if this step is possible
S.can_use(user, M, user.zone_sel.selecting, tool)) //check if tool is right or close enough and if this step is possible if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool))
S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it
if(do_mob(user, M, rand(S.min_duration, S.max_duration))) //if user did nto move or changed hands //We had proper tools! (or RNG smiled.) and User did not move or change hands.
if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully
else //or else //or
S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~ S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~

View File

@@ -1,4 +1,4 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <html>
<head> <head>
<title>Baystation 12 Changelog</title> <title>Baystation 12 Changelog</title>
@@ -58,16 +58,17 @@ Stuff which is in development and not yet visible to players or just code relate
should be listed in the changelog upon commit though. Thanks. --> should be listed in the changelog upon commit though. Thanks. -->
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here --> <!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
<div class="commit sansserif"> <div class='commit sansserif'>
<h2 class="date">1.06.2013</h2> <h2 class='date'>1.06.2013</h2>
<h3 class="author">Chinsky updated:</h3> <h3 class='author'>Chinsky updated:</h3>
<ul class="changes bgimages16"> <ul class='changes bgimages16'>
<li class='rscadd'>Bloody footprints! Now stepping in the puddle will dirty your shoes/feet and make you leave bloody footprints for a bit.</li>
<li class='rscadd'>Blood now dries up after some time. Puddles take ~30 minutes, small things 5 minutes.</li>
<li class="bugfix">Untreated wounds now heal. No more toe stubs spamming you with pain messages for the rest of the shift.</li> <li class="bugfix">Untreated wounds now heal. No more toe stubs spamming you with pain messages for the rest of the shift.</li>
<li class="experiment">On the other side, everything is healed slowly. Maximum you cna squeeze out of first aid is 0.5 health per tick per organ. Lying down makes it faster too, by 1.5x factor.</li> <li class="experiment">On the other side, everything is healed slowly. Maximum you cna squeeze out of first aid is 0.5 health per tick per organ. Lying down makes it faster too, by 1.5x factor.</li>
<li class="experiment">Fractured ribs and skull will now damage internal organs once in a while, if you run around. Either get someone to roll you around, or move carefully. [does NOT cause internal bleeding].</li>
</ul>
</div>
</ul>
</div>
<div class="commit sansserif"> <div class="commit sansserif">
<h2 class="date">31.05.2013</h2> <h2 class="date">31.05.2013</h2>

BIN
sound/voice/halt.ogg Normal file

Binary file not shown.