Merge branch 'master' of git://github.com/Baystation12/Baystation12 into TGUpdates

Conflicts:
	code/modules/mob/mob_defines.dm
	icons/mob/items_lefthand.dmi
	icons/mob/items_righthand.dmi
	icons/obj/storage.dmi
	maps/tgstation.2.0.8.dmm
This commit is contained in:
Ren Erthilo
2012-04-02 00:37:54 +01:00
46 changed files with 8113 additions and 6467 deletions
+27 -29
View File
@@ -103,16 +103,16 @@
/atom/proc/add_fingerprint(mob/living/M as mob)
if(isnull(M)) return
if(isnull(M.key)) return
if (!( src.flags ) & 256)
if (!( flags ) & 256)
return
if (ishuman(M))
if(!fingerprintshidden)
fingerprintshidden = list()
add_fibers(M)
if (M.mutations2 & mFingerprints)
if(src.fingerprintslast != M.key)
src.fingerprintshidden += "(Has no fingerprints) Real name: [M.real_name], Key: [M.key]"
src.fingerprintslast = M.key
if(fingerprintslast != M.key)
fingerprintshidden += "(Has no fingerprints) Real name: [M.real_name], Key: [M.key]"
fingerprintslast = M.key
return 0
var/mob/living/carbon/human/H = M
if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32))
@@ -120,24 +120,24 @@
H.dna = new /datum/dna(null)
H.check_dna()
if (H.gloves && H.gloves != src)
if(src.fingerprintslast != H.key)
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
src.fingerprintslast = H.key
if(fingerprintslast != H.key)
fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
fingerprintslast = H.key
H.gloves.add_fingerprint(M)
if(H.gloves != src)
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
return 0
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex))
return 0
if(src.fingerprintslast != H.key)
src.fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
src.fingerprintslast = H.key
if(fingerprintslast != H.key)
fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
fingerprintslast = H.key
if(!fingerprints)
fingerprints = list()
var/new_prints = 0
var/prints
for(var/i = 1, i <= src.fingerprints.len, i++)
var/list/L = params2list(src.fingerprints[i])
for(var/i = 1, i <= fingerprints.len, i++)
var/list/L = params2list(fingerprints[i])
if(L[num2text(1)] == md5(H.dna.uni_identity))
new_prints = i
prints = L[num2text(2)]
@@ -145,30 +145,28 @@
else
var/test_print = stars(L[num2text(2)], rand(80,90))
if(stringpercent(test_print) == 32)
if(src.fingerprints.len == 1)
src.fingerprints = list()
if(fingerprints.len == 1)
fingerprints = list()
else
for(var/j = i, j < (src.fingerprints.len), j++)
src.fingerprints[j] = src.fingerprints[j+1]
src.fingerprints.len--
fingerprints.Cut(i,i+1)
else
src.fingerprints[i] = "1=[L[num2text(1)]]&2=[test_print]"
fingerprints[i] = "1=[L[num2text(1)]]&2=[test_print]"
if(new_prints)
src.fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
else if(new_prints == 0)
if(!src.fingerprints || !src.fingerprints.len)
src.fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
else
if(!fingerprints || !fingerprints.len)
fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
else
src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
for(var/i = 1, i <= src.fingerprints.len, i++)
if(length(src.fingerprints[i]) != 69)
src.fingerprints.Remove(src.fingerprints[i])
fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
for(var/i = 1, i <= fingerprints.len, i++)
if(length(fingerprints[i]) != 69)
fingerprints.Remove(fingerprints[i])
if(fingerprints && !fingerprints.len) del(fingerprints)
return 1
else
if(src.fingerprintslast != M.key)
src.fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
src.fingerprintslast = M.key
if(fingerprintslast != M.key)
fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
fingerprintslast = M.key
return
//returns 1 if made bloody, returns 0 otherwise
+238 -60
View File
@@ -1,48 +1,81 @@
/proc/GenerateTheft(var/job,var/datum/mind/traitor)
var/list/datum/objective/objectives = list()
var/list/weight = list()
var/index = 1
for(var/o in typesof(/datum/objective/steal))
if(o != /datum/objective/steal) //Make sure not to get a blank steal objective.
objectives += new o(null,job)
//objectives += GenerateAssassinate(job,traitor)
return objectives
var/datum/objective/target = new o(null,job)
weight += list("[index]" = target.weight)
objectives += target
index++
return list(objectives, weight)
/proc/GenerateAssassinate(var/job,var/datum/mind/traitor)
var/list/datum/objective/assassinate/missions = list()
var/list/weight = list()
var/index = 1
for(var/datum/mind/target in ticker.minds)
if((target != traitor) && istype(target.current, /mob/living/carbon/human))
if(target && target.current)
missions += new /datum/objective/assassinate(null,job,target)
return missions
var/datum/objective/target_obj = new /datum/objective/assassinate(null,job,target)
weight += list("[index]" = target_obj.weight)
missions += target_obj
index++
return list(missions, weight)
/proc/GenerateFrame(var/job,var/datum/mind/traitor)
var/list/datum/objective/frame/missions = list()
var/list/weight = list()
var/index = 1
for(var/datum/mind/target in ticker.minds)
if((target != traitor) && istype(target.current, /mob/living/carbon/human))
if(target && target.current)
missions += new /datum/objective/frame(null,job,target)
return missions
var/datum/objective/target_obj = new /datum/objective/frame(null,job,target)
weight += list("[index]" = target_obj.weight)
missions += target_obj
index++
return list(missions, weight)
/proc/GenerateProtection(var/job,var/datum/mind/traitor)
var/list/datum/objective/frame/missions = list()
var/list/weight = list()
var/index = 1
for(var/datum/mind/target in ticker.minds)
if((target != traitor) && istype(target.current, /mob/living/carbon/human))
if(target && target.current)
missions += new /datum/objective/protection(null,job,target)
return missions
var/datum/objective/target_obj = new /datum/objective/protection(null,job,target)
weight += list("[index]" = target_obj.weight)
missions += target_obj
index++
return list(missions, weight)
/proc/PickObjectiveFromList(var/list/objectivesArray)
var/list/datum/objectives = objectivesArray[1]
var/pick_index = text2num(pickweight(objectivesArray[2]))
return objectives[pick_index]
/proc/RemoveObjectiveFromList(var/list/objectiveArray, var/datum/objective/objective)
var/list/datum/objective/temp = objectiveArray[1]
var/list/weight = objectiveArray[2]
var/index = temp.Find(objective)
if(index == temp.len)
temp.Cut(index)
weight.Cut(index)
else
temp.Cut(index, index+1)
weight.Cut(index, index+1)
return list(temp,weight)
/proc/SelectObjectives(var/job,var/datum/mind/traitor,var/hijack = 0)
var/list/datum/objective/chosenobjectives = list()
var/list/datum/objective/theftobjectives = GenerateTheft(job,traitor) //Separated all the objective types so they can be picked independantly of each other.
var/list/datum/objective/killobjectives = GenerateAssassinate(job,traitor)
var/list/datum/objective/frameobjectives = GenerateFrame(job,traitor)
var/list/datum/objective/protectobjectives = GenerateProtection(job,traitor)
var/list/chosenobjectives = list()
var/list/theftobjectives = GenerateTheft(job,traitor) //Separated all the objective types so they can be picked independantly of each other.
var/list/killobjectives = GenerateAssassinate(job,traitor)
var/list/frameobjectives = GenerateFrame(job,traitor)
var/list/protectobjectives = GenerateProtection(job,traitor)
//var/points
var/totalweight
var/selectobj
@@ -50,27 +83,30 @@
while(totalweight < 100)
selectobj = rand(1,100) //Randomly determine the type of objective to be given.
if(!length(killobjectives) || !length(protectobjectives)) //If any of these lists are empty, just give them theft objectives.
var/datum/objective/objective = pick(theftobjectives)
if(!length(killobjectives[1]) || !length(protectobjectives[1])|| !length(frameobjectives[1])) //If any of these lists are empty, just give them theft objectives.
var/datum/objective/objective = PickObjectiveFromList(theftobjectives)
chosenobjectives += objective
totalweight += objective.weight
theftobjectives -= objective
totalweight += objective.points
theftobjectives = RemoveObjectiveFromList(theftobjectives, objective)
else switch(selectobj)
if(1 to 55) //Theft Objectives (55% chance)
var/datum/objective/objective = pick(theftobjectives)
var/datum/objective/objective = PickObjectiveFromList(theftobjectives)
for(1 to 10)
if(objective.weight + totalweight <= 110)
if(objective.points + totalweight <= 110)
break
objective = pick(theftobjectives)
objective = PickObjectiveFromList(theftobjectives)
chosenobjectives += objective
totalweight += objective.weight
theftobjectives -= objective
totalweight += objective.points
theftobjectives = RemoveObjectiveFromList(theftobjectives, objective)
if(56 to 92) //Assassination Objectives (37% chance)
var/datum/objective/assassinate/objective = pick(killobjectives)
var/datum/objective/assassinate/objective = PickObjectiveFromList(killobjectives)
world << objective
for(1 to 10)
if(objective.weight + totalweight <= 110)
if(objective.points + totalweight <= 110)
break
objective = pick(killobjectives)
objective = PickObjectiveFromList(killobjectives)
if(!objective)
continue
for(var/datum/objective/protection/conflicttest in chosenobjectives) //Check to make sure we aren't telling them to Assassinate somebody they need to Protect.
if(conflicttest.target == objective.target)
conflict = 1
@@ -81,24 +117,38 @@
break
if(!conflict)
chosenobjectives += objective
totalweight += objective.weight
killobjectives -= objective
totalweight += objective.points
killobjectives = RemoveObjectiveFromList(killobjectives, objective)
conflict = 0
if(93 to 95) //Framing Objectives (3% chance)
var/datum/objective/objective = pick(frameobjectives)
var/datum/objective/objective = PickObjectiveFromList(frameobjectives)
for(1 to 10)
if(objective.weight + totalweight <= 110)
if(objective.points + totalweight <= 110)
break
objective = pick(frameobjectives)
chosenobjectives += objective
totalweight += objective.weight
frameobjectives -= objective
objective = PickObjectiveFromList(frameobjectives)
if(!objective)
continue
for(var/datum/objective/protection/conflicttest in chosenobjectives) //Check to make sure we aren't telling them to Assassinate somebody they need to Protect.
if(conflicttest.target == objective.target)
conflict = 1
break
for(var/datum/objective/assassinate/conflicttest in chosenobjectives) //Check to make sure we aren't telling them to Protect somebody they need to Assassinate.
if(conflicttest.target == objective.target)
conflict = 1
break
if(!conflict)
chosenobjectives += objective
totalweight += objective.points
frameobjectives = RemoveObjectiveFromList(frameobjectives, objective)
conflict = 0
if(96 to 100) //Protection Objectives (5% chance)
var/datum/objective/protection/objective = pick(protectobjectives)
var/datum/objective/protection/objective = PickObjectiveFromList(protectobjectives)
for(1 to 10)
if(objective.weight + totalweight <= 110)
if(objective.points + totalweight <= 110)
break
objective = pick(protectobjectives)
objective = PickObjectiveFromList(protectobjectives)
if(!objective)
continue
for(var/datum/objective/assassinate/conflicttest in chosenobjectives) //Check to make sure we aren't telling them to Protect somebody they need to Assassinate.
if(conflicttest.target == objective.target)
conflict = 1
@@ -109,8 +159,8 @@
break
if(!conflict)
chosenobjectives += objective
totalweight += objective.weight
protectobjectives -= objective
totalweight += objective.points
protectobjectives = RemoveObjectiveFromList(protectobjectives, objective)
conflict = 0
var/hasendgame = 0
@@ -134,19 +184,22 @@ datum
var/datum/mind/target
var/explanation_text = "text not set"
var/job
// var/points = INFINITY //If this isn't set to something else, the objective is bugged and should be ignored
var/points = INFINITY //If this isn't set to something else, the objective is bugged and should be ignored
var/weight = INFINITY
New(var/text,var/joba)
if(text)
src.explanation_text = text
job=joba
weight = get_points(job)
weight = get_weight(job)
points = get_points(job)
proc/check_completion()
return 1
proc/get_points(var/job)
return INFINITY
proc/get_weight(var/job)
return INFINITY
proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned.
for(var/datum/mind/possible_target in ticker.minds)
if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) )
@@ -179,20 +232,26 @@ datum
get_points()
if(target)
var/difficulty = GetRank(target.assigned_role) + 1
switch(GetRank(job))
if(4)
return 30
return 20*difficulty
if(3)
return 40
return 30*difficulty
if(2)
return 50
return 40*difficulty
if(1)
return 55
return 55*difficulty
if(0)
return 60
return 60*difficulty
else
return INFINITY
get_weight()
if(target)
return 1
return 0
protection
New(var/text,var/joba,var/datum/mind/targeta)
@@ -218,7 +277,15 @@ datum
return 0
get_points()
return 30
if(target)
return 30
else
return INFINITY
get_weight()
if(target)
return 1
return 0
find_target_by_role(role, role_type=0)
..(role, role_type)
@@ -247,20 +314,26 @@ datum
return 1
get_points()
if(target)
var/difficulty = GetRank(target.assigned_role) + 1
switch(GetRank(job))
if(4)
return 30
return 20*difficulty
if(3)
return 40
return 30*difficulty
if(2)
return 50
return 40*difficulty
if(1)
return 55
return 55*difficulty
if(0)
return 60
return 60*difficulty
else
return 0
get_weight()
if(target)
return 1
return 0
find_target_by_role(var/role)
for(var/datum/mind/possible_target in ticker.minds)
if((possible_target != owner) && istype(possible_target.current, /mob/living/carbon/human) && (possible_target.assigned_role == role))
@@ -327,19 +400,25 @@ datum
get_points()
if(target)
switch(GetRank(owner.assigned_role))
var/difficulty = GetRank(target.assigned_role) + 1
switch(GetRank(job))
if(4)
return 30
return 20*difficulty
if(3)
return 40
return 30*difficulty
if(2)
return 50
return 40*difficulty
if(1)
return 55
return 55*difficulty
if(0)
return 60
return 60*difficulty
else
return 0
return INFINITY
get_weight()
if(target)
return 1
return 0
hijack
@@ -374,6 +453,8 @@ datum
if(4)
return 35
get_weight(var/job)
return 1
escape
explanation_text = "Escape on the shuttle alive, without being arrested."
@@ -399,6 +480,9 @@ datum
get_points()
return INFINITY
get_weight(var/job)
return 1
survive
explanation_text = "Stay alive."
@@ -411,6 +495,9 @@ datum
get_points()
return INFINITY
get_weight(var/job)
return 1
steal
var/obj/item/steal_target
@@ -441,6 +528,12 @@ datum
if(4)
return 20
get_weight(var/job)
if(GetRank(job) == 4)
return 10
else
return 20
plasmatank
steal_target = /obj/item/weapon/tank/plasma
@@ -452,6 +545,16 @@ datum
return 20
return 40
get_weight(var/job)
return 20
check_completion()
var/list/all_items = owner.current.get_contents()
for(var/obj/item/I in all_items)
if(!istype(I, steal_target)) continue//If it's not actually that item.
if(I:air_contents:toxins) return 1 //If they got one with plasma
return 0
/*Removing this as an objective. Not necessary to have two theft objectives in the same room.
steal/captainssuit
@@ -492,6 +595,12 @@ datum
if(4)
return 20
get_weight(var/job)
if(GetRank(job) == 4)
return 10
else
return 20
RCD
steal_target = /obj/item/weapon/rcd
@@ -511,6 +620,12 @@ datum
if(4)
return 20
get_weight(var/job)
if(GetRank(job) == 4)
return 10
else
return 20
/*burger
steal_target = /obj/item/weapon/reagent_containers/food/snacks/human/burger
@@ -549,6 +664,12 @@ datum
if(4)
return 20
get_weight(var/job)
if(GetRank(job) == 4)
return 10
else
return 20
magboots
steal_target = /obj/item/clothing/shoes/magboots
@@ -568,6 +689,12 @@ datum
if(4)
return 20
get_weight(var/job)
if(GetRank(job) == 4)
return 10
else
return 20
blueprints
steal_target = /obj/item/blueprints
@@ -587,6 +714,12 @@ datum
if(4)
return 20
get_weight(var/job)
if(GetRank(job) == 4)
return 10
else
return 20
voidsuit
steal_target = /obj/item/clothing/suit/space/nasavoid
@@ -606,6 +739,9 @@ datum
if(4)
return 20
get_weight(var/job)
return 20
nuke_disk
steal_target = /obj/item/weapon/disk/nuclear
@@ -625,6 +761,12 @@ datum
if(4)
return 25
get_weight(var/job)
if(GetRank(job) == 4)
return 10
else
return 20
nuke_gun
steal_target = /obj/item/weapon/gun/energy/gun/nuclear
explanation_text = "Steal a nuclear powered gun."
@@ -643,6 +785,9 @@ datum
if(4)
return 75
get_weight(var/job)
return 2
diamond_drill
steal_target = /obj/item/weapon/pickaxe/diamonddrill
explanation_text = "Steal a diamond drill."
@@ -661,6 +806,9 @@ datum
if(4)
return 75
get_weight(var/job)
return 2
boh
steal_target = /obj/item/weapon/storage/backpack/holding
explanation_text = "Steal a \"bag of holding.\""
@@ -679,6 +827,9 @@ datum
if(4)
return 75
get_weight(var/job)
return 2
hyper_cell
steal_target = /obj/item/weapon/cell/hyper
explanation_text = "Steal a hyper capacity power cell."
@@ -697,6 +848,9 @@ datum
if(4)
return 75
get_weight(var/job)
return 2
lucy
steal_target = /obj/item/stack/sheet/diamond
explanation_text = "Steal 10 diamonds."
@@ -715,6 +869,9 @@ datum
if(4)
return 75
get_weight(var/job)
return 2
check_completion()
var/target_amount = 10
var/found_amount = 0.0//Always starts as zero.
@@ -741,6 +898,9 @@ datum
if(4)
return 70
get_weight(var/job)
return 2
check_completion()
var/target_amount = 50
var/found_amount = 0.0//Always starts as zero.
@@ -767,6 +927,9 @@ datum
if(4)
return 70
get_weight(var/job)
return 2
check_completion()
var/target_amount = 25
var/found_amount = 0.0//Always starts as zero.
@@ -819,6 +982,9 @@ datum
if(istype(objective,/obj/item/robot_parts/robot_suit) && objective.check_completion())
return 1
return 0
get_weight(var/job)
return 20
AI
steal_target = /obj/structure/AIcore
explanation_text = "Steal a finished AI, either by intellicard or stealing the whole construct."
@@ -837,6 +1003,9 @@ datum
if(4)
return 20
get_weight(var/job)
return 15
check_completion()
if(steal_target)
for(var/obj/item/device/aicard/C in owner.current.get_contents())
@@ -878,6 +1047,9 @@ datum
else
return 0
get_weight(var/job)
return 20
pacid
steal_target = /datum/reagent/pacid
@@ -904,6 +1076,9 @@ datum
else
return 0
get_weight(var/job)
return 20
reagent
var/target_name
@@ -957,6 +1132,9 @@ datum
else
return 0
get_weight(var/job)
return 20
nuclear
explanation_text = "Destroy the station with a nuclear device."
+2
View File
@@ -538,6 +538,8 @@
A.skin = "tox"
else if(istype(src,/obj/item/weapon/storage/firstaid/o2))
A.skin = "o2"
else if(istype(src,/obj/item/weapon/storage/firstaid/adv))
A.skin = "adv"
A.loc = user
if (user.r_hand == S)
+4
View File
@@ -203,7 +203,11 @@
if (src.density)
open()
else
var/holdopen_old = holdopen
holdopen = 0
close()
spawn(1)
holdopen = holdopen_old
else if (src.density)
flick("door_deny", src)
return
+22 -22
View File
@@ -195,26 +195,26 @@ FINGERPRINT CARD
return "<B>There are no fingerprints on this card.</B>"
return
/obj/item/weapon/f_card/attack_hand(mob/user as mob)
///obj/item/weapon/f_card/attack_hand(mob/user as mob)
if ((user.r_hand == src || user.l_hand == src))
src.add_fingerprint(user)
var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user )
F.amount = 1
src.amount--
if (user.hand)
user.l_hand = F
else
user.r_hand = F
F.layer = 20
F.add_fingerprint(user)
if (src.amount < 1)
//SN src = null
del(src)
return
else
..()
return
// if ((user.r_hand == src || user.l_hand == src))
// add_fingerprint(user)
// var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card( user )
// F.amount = 1
// src.amount--
// if (user.hand)
// user.l_hand = F
// else
// user.r_hand = F
// F.layer = 20
// F.add_fingerprint(user)
// if (src.amount < 1)
// //SN src = null
// del(src)
// return
// else
// ..()
// return
/obj/item/weapon/f_card/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
@@ -253,10 +253,10 @@ FINGERPRINT CARD
..()
if (!istype(usr, /mob/living/silicon))
if (src.fingerprints)
if (fingerprints)
if (src.amount > 1)
var/obj/item/weapon/f_card/F = new /obj/item/weapon/f_card(get_turf(src))
F.amount = --src.amount
src.amount = 1
src.icon_state = "fingerprint1"
amount = 1
icon_state = "fingerprint1"
return
@@ -12,6 +12,8 @@ BIKE HORN
var/mob/M = AM
if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP))
return
if (istype(M, /mob/living/carbon/metroid)) //I mean they float, seriously. - Erthilo
return
M.pulling = null
M << "\blue You slipped on the [name]!"
@@ -24,6 +26,8 @@ BIKE HORN
var/mob/M = AM
if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP))
return
if (istype(M, /mob/living/carbon/metroid))
return
M.pulling = null
M << "\blue You slipped on the [name]!"
@@ -36,6 +40,8 @@ BIKE HORN
var/mob/M = AM
if (istype(M, /mob/living/carbon/human) && (isobj(M:shoes) && M:shoes.flags&NOSLIP))
return
if (istype(M, /mob/living/carbon/metroid))
return
M.pulling = null
M << "\blue You slipped on the [name]!"
+15 -10
View File
@@ -38,31 +38,36 @@ MEDICAL
if(!istype(affecting, /datum/organ/external) || affecting:burn_dam <= 0)
affecting = H.get_organ("head")
if(affecting.destroyed && !affecting.gauzed)
H.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does their best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
user.visible_message("\red You do your best to stop the bleeding from [H]'s stump.", "\red [user] does [user.gender == MALE? "his" : "her"] best to stem [H]'s bleeding from [H.gender == MALE? "his" : "her"] stump.", "\red You hear something like gauze being ripped.")
affecting.gauzed = 1
use(1)
return
for(var/datum/organ/wound/W in affecting.wounds)
if(W.bleeding || !W.healing_state)
if(W.bleeding || !W.is_healing)
if(heal_brute && W.wound_type == 2)
continue
if(heal_burn && W.wound_type < 2)
continue
if(stoppedblood)
stoppedblood++
break
if(W.wound_size > 3)
if(W.wound_size > 3 && (W.bleeding || !W.is_healing))
if(stoppedblood)
stoppedblood += 1
break
W.bleeding = 0
else
W.is_healing = 1
stoppedblood = 1
else if(W.wound_size <= 3)
if(stoppedblood)
stoppedblood += 1
break
W.stopbleeding()
stoppedblood = 1
stoppedblood = 1
if (user && stoppedblood)
if (M != user)
H.visible_message("\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts", "\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src]", "\red You hear something like gauze being ripped.")
user.visible_message("\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts with [src]", "\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] [H]'s cuts", "\red You hear something like gauze being ripped.")
else
H.visible_message("\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] your cuts", "\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] their own cuts with [src]", "\red You hear something like gauze being ripped.")
user.visible_message("\red [user] bandages [stoppedblood - 1 ? "some of" : "the last of"] [user.gender == MALE? "his" : "her"] own cuts with [src]", "\red You bandage up [stoppedblood - 1 ? "some of" : "the last of"] your cuts", "\red You hear something like gauze being ripped.")
else if(user)
user << "\red Nothing to patch up!"
return
File diff suppressed because it is too large Load Diff
+7 -3
View File
@@ -167,14 +167,18 @@ SHARDS
/obj/item/weapon/shard/HasEntered(AM as mob|obj)
if(ismob(AM))
var/mob/M = AM
if (istype(M, /mob/living/carbon/metroid)) //I mean they float, seriously. - Erthilo
return
M << "\red <B>You step in the broken glass!</B>"
playsound(src.loc, 'glass_step.ogg', 50, 1)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(!H.shoes)
var/datum/organ/external/affecting = H.get_organ(pick("l_leg", "r_leg"))
if(!((H.shoes) || (H.wear_suit && H.wear_suit.body_parts_covered & FEET)))
var/datum/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot"))
H.Weaken(3)
affecting.take_damage(5, 0)
H.UpdateDamageIcon()
H.updatehealth()
..()
..()
//&& H.wear_suit.body_parts_covered&FEET)))
+12
View File
@@ -64,6 +64,18 @@
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
return
/obj/item/weapon/storage/firstaid/adv/New()
..()
if (empty) return
new /obj/item/weapon/reagent_containers/syringe/inaprovaline( src )
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/ointment(src)
new /obj/item/stack/medical/advanced/ointment(src)
new /obj/item/stack/medical/advanced/ointment(src)
return
/obj/item/weapon/storage/pill_bottle/kelotane
name = "Pill bottle (kelotane)"
desc = "Contains pills used to treat burns."
+9
View File
@@ -3,6 +3,15 @@
name = "shuttle"
icon = 'shuttle.dmi'
/obj/structure/shuttle/window
name = "shuttle window"
icon = 'podwindows.dmi'
icon_state = "1"
density = 1
opacity = 0
anchored = 1
/obj/structure/shuttle/engine
name = "engine"
density = 1
+7
View File
@@ -142,6 +142,7 @@
W.sd_SetOpacity(0)
//This is probably gonna make lighting go a bit wonky in bombed areas, but sd_SetOpacity was the primary reason bombs have been so laggy. --NEO
W.levelupdate()
air_master.tiles_to_update += W
return W
/turf/proc/ReplaceWithPlating()
@@ -158,6 +159,7 @@
W.opacity = 1
W.sd_SetOpacity(0)
W.levelupdate()
air_master.tiles_to_update += W
return W
/turf/proc/ReplaceWithEngineFloor()
@@ -170,6 +172,7 @@
E.dir = old_dir
E.icon_state = "engine"
E.levelupdate()
air_master.tiles_to_update += E
return E
/turf/simulated/Entered(atom/A, atom/OL)
@@ -231,6 +234,7 @@
var/old_dir = dir
var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
S.dir = old_dir
air_master.tiles_to_update += S
return S
/turf/proc/ReplaceWithLattice()
@@ -238,6 +242,7 @@
var/turf/space/S = new /turf/space( locate(src.x, src.y, src.z) )
S.dir = old_dir
new /obj/structure/lattice( locate(src.x, src.y, src.z) )
air_master.tiles_to_update += S
return S
/turf/proc/ReplaceWithWall()
@@ -247,6 +252,7 @@
S.opacity = 0
S.sd_NewOpacity(1)
levelupdate()
air_master.tiles_to_update += S
return S
/turf/proc/ReplaceWithRWall()
@@ -256,6 +262,7 @@
S.opacity = 0
S.sd_NewOpacity(1)
levelupdate()
air_master.tiles_to_update += S
return S
/turf/simulated/wall/New()