mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 05:27:01 +01:00
Merge pull request #826 from SkyMarshal/Airlocks
Fixes for a lot of implant things. Fixes some runtimes related to explosive and death alarm implants. Fixed organ based damage. Added a variable to hold the children organs of an organ, to simplify damage spread and droppage.
This commit is contained in:
+1
-1
@@ -1140,4 +1140,4 @@
|
||||
#include "code\ZAS\Variable Settings.dm"
|
||||
#include "interface\skin.dmf"
|
||||
#include "maps\tgstation.2.0.8.dmm"
|
||||
// END_INCLUDE
|
||||
// END_INCLUDE
|
||||
|
||||
@@ -377,11 +377,12 @@
|
||||
|
||||
for (var/mob/M in W)
|
||||
W |= M.contents
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/G = M
|
||||
for(var/name in G.organs)
|
||||
var/datum/organ/external/F = G.organs[name]
|
||||
W |= F.implant
|
||||
if(hasorgans(M))
|
||||
var/mob/living/carbon/G = M
|
||||
for(var/name in G:organs)
|
||||
var/datum/organ/external/F = G:organs[name]
|
||||
for(var/obj/item/weapon/implant/I in F.implant)
|
||||
W |= I
|
||||
|
||||
for (var/obj/item/device/pda/M in W)
|
||||
W |= M.contents
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
del(O.organs)
|
||||
O.organs = organs
|
||||
for(var/name in O.organs)
|
||||
var/datum/organ/external/organ = O[name]
|
||||
var/datum/organ/external/organ = O.organs[name]
|
||||
organ.owner = O
|
||||
for(var/obj/item/weapon/implant/implant in organ.implant)
|
||||
implant.imp_in = O
|
||||
|
||||
@@ -71,6 +71,8 @@
|
||||
var/revival_brain_life = -1
|
||||
var/require_heads_alive = 0 //For Rev.
|
||||
|
||||
var/appeal_address = ""
|
||||
|
||||
/datum/configuration/New()
|
||||
var/list/L = typesof(/datum/game_mode) - /datum/game_mode
|
||||
for (var/T in L)
|
||||
@@ -291,6 +293,9 @@
|
||||
if("require_heads_alive")
|
||||
config.require_heads_alive = value
|
||||
|
||||
if("appeal_address")
|
||||
config.appeal_address = value
|
||||
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
|
||||
+5
-14
@@ -509,13 +509,8 @@
|
||||
// human > monkey
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.monkeyizing = 1
|
||||
var/list/implants = list() //Try to preserve implants.
|
||||
for(var/obj/item/weapon/implant/W in H)
|
||||
implants += W
|
||||
W.loc = null
|
||||
|
||||
if(!connected)
|
||||
for(var/obj/item/W in (H.contents-implants))
|
||||
for(var/obj/item/W in (H.contents))
|
||||
if (W==H.w_uniform) // will be teared
|
||||
continue
|
||||
H.drop_from_slot(W)
|
||||
@@ -536,7 +531,7 @@
|
||||
del(O.organs)
|
||||
O.organs = H.organs
|
||||
for(var/name in O.organs)
|
||||
var/datum/organ/external/organ = O[name]
|
||||
var/datum/organ/external/organ = O.organs[name]
|
||||
organ.owner = O
|
||||
for(var/obj/item/weapon/implant/implant in organ.implant)
|
||||
implant.imp_in = O
|
||||
@@ -553,7 +548,7 @@
|
||||
M.viruses -= D
|
||||
|
||||
|
||||
for(var/obj/T in (M.contents-implants))
|
||||
for(var/obj/T in (M.contents))
|
||||
del(T)
|
||||
//for(var/R in M.organs)
|
||||
// del(M.organs[text("[]", R)])
|
||||
@@ -584,12 +579,8 @@
|
||||
// monkey > human,
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
Mo.monkeyizing = 1
|
||||
var/list/implants = list() //Still preserving implants
|
||||
for(var/obj/item/weapon/implant/W in Mo)
|
||||
implants += W
|
||||
W.loc = null
|
||||
if(!connected)
|
||||
for(var/obj/item/W in (Mo.contents-implants))
|
||||
for(var/obj/item/W in (Mo.contents))
|
||||
Mo.drop_from_slot(W)
|
||||
M.update_clothing()
|
||||
M.monkeyizing = 1
|
||||
@@ -614,7 +605,7 @@
|
||||
del(O.organs)
|
||||
O.organs = M.organs
|
||||
for(var/name in O.organs)
|
||||
var/datum/organ/external/organ = O[name]
|
||||
var/datum/organ/external/organ = O.organs[name]
|
||||
organ.owner = O
|
||||
for(var/obj/item/weapon/implant/implant in organ.implant)
|
||||
implant.imp_in = O
|
||||
|
||||
@@ -56,11 +56,11 @@
|
||||
/proc/PickObjectiveFromList(var/list/objectivesArray)
|
||||
var/list/datum/objectives = objectivesArray[1]
|
||||
var/pick_index = text2num(pickweight(objectivesArray[2]))
|
||||
|
||||
if (pick_index > objectives.len || pick_index < 1)
|
||||
log_admin("Objective picking failed. Error logged. One or more traitors will need to be manually-assigned objectives")
|
||||
log_admin("Objective picking failed. Error logged. One or more traitors will need to be manually-assigned objectives. Pick_index was [pick_index]. Tell Sky.")
|
||||
message_admins("Objective picking failed. Error logged. One or more traitors will need to be manually-assigned objectives. Pick_index was [pick_index]. Tell Sky.")
|
||||
CRASH("Objective picking failed. Pick_index was [pick_index].")
|
||||
|
||||
|
||||
return objectives[pick_index]
|
||||
|
||||
/proc/RemoveObjectiveFromList(var/list/objectiveArray, var/datum/objective/objective)
|
||||
@@ -97,7 +97,7 @@
|
||||
if(1 to 55) //Theft Objectives (55% chance)
|
||||
var/datum/objective/objective = PickObjectiveFromList(theftobjectives)
|
||||
for(1 to 10)
|
||||
if(objective.points + totalweight <= 110)
|
||||
if(objective.points + totalweight <= 100)
|
||||
break
|
||||
objective = PickObjectiveFromList(theftobjectives)
|
||||
chosenobjectives += objective
|
||||
@@ -107,7 +107,7 @@
|
||||
var/datum/objective/assassinate/objective = PickObjectiveFromList(killobjectives)
|
||||
world << objective
|
||||
for(1 to 10)
|
||||
if(objective.points + totalweight <= 110)
|
||||
if(objective.points + totalweight <= 100)
|
||||
break
|
||||
objective = PickObjectiveFromList(killobjectives)
|
||||
if(!objective)
|
||||
@@ -128,7 +128,7 @@
|
||||
if(93 to 95) //Framing Objectives (3% chance)
|
||||
var/datum/objective/objective = PickObjectiveFromList(frameobjectives)
|
||||
for(1 to 10)
|
||||
if(objective.points + totalweight <= 110)
|
||||
if(objective.points + totalweight <= 100)
|
||||
break
|
||||
objective = PickObjectiveFromList(frameobjectives)
|
||||
if(!objective)
|
||||
@@ -149,7 +149,7 @@
|
||||
if(96 to 100) //Protection Objectives (5% chance)
|
||||
var/datum/objective/protection/objective = PickObjectiveFromList(protectobjectives)
|
||||
for(1 to 10)
|
||||
if(objective.points + totalweight <= 110)
|
||||
if(objective.points + totalweight <= 100)
|
||||
break
|
||||
objective = PickObjectiveFromList(protectobjectives)
|
||||
if(!objective)
|
||||
|
||||
@@ -233,7 +233,9 @@
|
||||
synd_mob.equip_if_possible(new /obj/item/ammo_magazine/a12mm(synd_mob), synd_mob.slot_in_backpack)
|
||||
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack)
|
||||
synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/c20r(synd_mob), synd_mob.slot_belt)
|
||||
var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(synd_mob)
|
||||
var/datum/organ/external/O = pick(synd_mob.organs)
|
||||
var/obj/item/weapon/implant/dexplosive/E = new/obj/item/weapon/implant/dexplosive(O)
|
||||
O.implant += E
|
||||
E.imp_in = synd_mob
|
||||
E.implanted = 1
|
||||
|
||||
|
||||
@@ -18,7 +18,9 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/head/caphat(H), H.slot_head)
|
||||
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses(H), H.slot_glasses)
|
||||
H.equip_if_possible(new /obj/item/weapon/storage/id_kit(H), H.slot_in_backpack)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
var/datum/organ/external/O = pick(H.organs)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
|
||||
O.implant += L
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
world << "<b>[H.real_name] is the captain!</b>"
|
||||
|
||||
@@ -23,7 +23,9 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses)
|
||||
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/weapon/gun/energy/gun(H), H.slot_s_store)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
var/datum/organ/external/O = pick(H.organs)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
|
||||
O.implant += L
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
return 1
|
||||
@@ -53,7 +55,9 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/glasses/sunglasses/sechud(H), H.slot_glasses)
|
||||
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_in_backpack)
|
||||
H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
var/datum/organ/external/O = pick(H.organs)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
|
||||
O.implant += L
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
return 1
|
||||
@@ -92,7 +96,9 @@
|
||||
H.equip_if_possible(new /obj/item/weapon/zippo(H), H.slot_l_store)
|
||||
// H.equip_if_possible(new /obj/item/weapon/reagent_containers/food/snacks/candy_corn(H), H.slot_h_store)
|
||||
// No... just no. --SkyMarshal
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
var/datum/organ/external/O = pick(H.organs)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
|
||||
O.implant += L
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
return 1
|
||||
@@ -122,7 +128,9 @@
|
||||
H.equip_if_possible(new /obj/item/clothing/gloves/red(H), H.slot_gloves)
|
||||
H.equip_if_possible(new /obj/item/weapon/handcuffs(H), H.slot_s_store)
|
||||
H.equip_if_possible(new /obj/item/device/flash(H), H.slot_l_store)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H)
|
||||
var/datum/organ/external/O = pick(H.organs)
|
||||
var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(O)
|
||||
O.implant += L
|
||||
L.imp_in = H
|
||||
L.implanted = 1
|
||||
return 1
|
||||
|
||||
@@ -253,7 +253,7 @@
|
||||
AN = "[e.wound]:"
|
||||
if(e.open)
|
||||
open = "OPEN:"
|
||||
if(e.implant)
|
||||
if(e.implant && e.implant.len)
|
||||
imp = "IMPLANT:"
|
||||
if(!AN && !open && !infected & !imp)
|
||||
AN = "None"
|
||||
|
||||
@@ -395,7 +395,9 @@
|
||||
//Add an implant if needed
|
||||
var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject)
|
||||
if (isnull(imp))
|
||||
imp = new /obj/item/weapon/implant/health(subject)
|
||||
var/datum/organ/external/O = pick(subject.organs)
|
||||
imp = new /obj/item/weapon/implant/health(O)
|
||||
O.implant += imp
|
||||
imp.implanted = subject
|
||||
R.fields["imp"] = "\ref[imp]"
|
||||
//Update it if needed
|
||||
|
||||
@@ -316,8 +316,13 @@ var
|
||||
// - Just display a garbled message -
|
||||
else
|
||||
heard_garbled += R
|
||||
for(var/obj/item/weapon/implant/imp in R)
|
||||
imp.hear(message,M)
|
||||
if(hasorgans(R))
|
||||
for(var/datum/organ/external/O in R:organs)
|
||||
for(var/obj/item/weapon/implant/imp in O.implant)
|
||||
imp.hear(message,M)
|
||||
else
|
||||
for(var/obj/item/weapon/implant/imp in R)
|
||||
imp.hear(message,M)
|
||||
|
||||
|
||||
/* ###### Begin formatting and sending the message ###### */
|
||||
@@ -595,8 +600,13 @@ var
|
||||
// - Just display a garbled message -
|
||||
|
||||
heard_garbled += R
|
||||
for(var/obj/item/weapon/implant/imp in R)
|
||||
imp.hear(text,M)
|
||||
if(hasorgans(R))
|
||||
for(var/datum/organ/external/O in R:organs)
|
||||
for(var/obj/item/weapon/implant/imp in O.implant)
|
||||
imp.hear(text,M)
|
||||
else
|
||||
for(var/obj/item/weapon/implant/imp in R)
|
||||
imp.hear(text,M)
|
||||
|
||||
|
||||
/* ###### Begin formatting and sending the message ###### */
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
L[tmpname] = R
|
||||
|
||||
for (var/obj/item/weapon/implant/tracking/I in world)
|
||||
if (!I.implanted || !ismob(I.loc))
|
||||
if (!I.implanted || !(istype(I.loc,/datum/organ/external) || ismob(loc)))
|
||||
continue
|
||||
else
|
||||
var/mob/M = I.loc
|
||||
|
||||
@@ -273,9 +273,6 @@ obj/structure/closet/wardrobe/hop/New()
|
||||
new /obj/item/clothing/under/rank/bartender(src)
|
||||
new /obj/item/clothing/under/rank/bartender(src)
|
||||
new /obj/item/clothing/under/rank/bartender(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/suit/armor/vest(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
|
||||
@@ -49,10 +49,11 @@
|
||||
if(ishuman(M) && ishuman(user))
|
||||
if(user.mind in ticker.mode.head_revolutionaries)
|
||||
var/revsafe = 0
|
||||
for(var/obj/item/weapon/implant/loyalty/L in M)
|
||||
if(L && L.implanted)
|
||||
revsafe = 1
|
||||
break
|
||||
for(var/datum/organ/external/O in M.organs)
|
||||
for(var/obj/item/weapon/implant/loyalty/L in O.implant)
|
||||
if(L && L.implanted)
|
||||
revsafe = 1
|
||||
break
|
||||
if(M.mind.has_been_rev)
|
||||
revsafe = 2
|
||||
if(!revsafe)
|
||||
|
||||
@@ -249,11 +249,11 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
|
||||
msg = sanitize_simple(msg, replacechars)
|
||||
if(findtext(msg,phrase))
|
||||
if(istype(loc, /mob/))
|
||||
var/mob/T = loc
|
||||
if(istype(imp_in, /mob/))
|
||||
var/mob/T = imp_in
|
||||
T.gib()
|
||||
explosion(find_loc(src), 1, 3, 4, 6, 3)
|
||||
var/turf/t = find_loc(src)
|
||||
explosion(find_loc(imp_in), 1, 3, 4, 6, 3)
|
||||
var/turf/t = find_loc(imp_in)
|
||||
if(t)
|
||||
t.hotspot_expose(3500,125)
|
||||
del(src)
|
||||
@@ -284,17 +284,17 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
return dat
|
||||
|
||||
process()
|
||||
var/mob/M = src.loc
|
||||
|
||||
var/mob/M = imp_in
|
||||
|
||||
if(isnull(M)) // If the mob got gibbed
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
|
||||
a.autosay("states, \"[mobname] has died-zzzzt in-in-in...\"", "[mobname]'s Death Alarm")
|
||||
del(a)
|
||||
processing_objects.Remove(src)
|
||||
else if(M.stat == 2)
|
||||
var/turf/t = get_turf(M)
|
||||
var/area/t = get_area(M)
|
||||
var/obj/item/device/radio/headset/a = new /obj/item/device/radio/headset(null)
|
||||
a.autosay("states, \"[mobname] has died in [t.loc.name]!\"", "[mobname]'s Death Alarm")
|
||||
a.autosay("states, \"[mobname] has died in [t.name]!\"", "[mobname]'s Death Alarm")
|
||||
del(a)
|
||||
processing_objects.Remove(src)
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@ Frequency:
|
||||
|
||||
src.temp += "<B>Extranneous Signals:</B><BR>"
|
||||
for (var/obj/item/weapon/implant/tracking/W in world)
|
||||
if (!W.implanted || !ismob(W.loc))
|
||||
if (!W.implanted || !(istype(W.loc,/datum/organ/external) || ismob(W.loc)))
|
||||
continue
|
||||
else
|
||||
var/mob/M = W.loc
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
if (!msg)
|
||||
return
|
||||
|
||||
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>ADMIN([src.stealth ? pick("\[DATA EXPUNGED\]", "\[REDACTED\]", "¦¦¦¦¦¦¦¦¦¦") : src.key])</span> says, <span class='message'>\"[msg]\"</span></span>"
|
||||
var/rendered = "<span class='game deadsay'><span class='prefix'>DEAD:</span> <span class='name'>ADMIN([src.stealth ? pick("\[DATA EXPUNGED\]", "\[REDACTED\]", "\[O5 EYES ONLY\]") : src.key])</span> says, <span class='message'>\"[msg]\"</span></span>"
|
||||
|
||||
for (var/mob/M in world)
|
||||
if (istype(M, /mob/new_player))
|
||||
|
||||
@@ -107,10 +107,19 @@
|
||||
break
|
||||
else
|
||||
C.images += image(tempHud,perp,"hudunknown")
|
||||
for(var/obj/item/weapon/implant/I in perp)
|
||||
if(I.implanted)
|
||||
if(istype(I,/obj/item/weapon/implant/tracking))
|
||||
C.images += image(tempHud,perp,"hud_imp_tracking")
|
||||
if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||
C.images += image(tempHud,perp,"hud_imp_loyal")
|
||||
if(hasorgans(perp))
|
||||
for(var/datum/organ/external/E in perp)
|
||||
for(var/obj/item/weapon/implant/I in E.implant)
|
||||
if(I.implanted)
|
||||
if(istype(I,/obj/item/weapon/implant/tracking))
|
||||
C.images += image(tempHud,perp,"hud_imp_tracking")
|
||||
if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||
C.images += image(tempHud,perp,"hud_imp_loyal")
|
||||
else
|
||||
for(var/obj/item/weapon/implant/I in perp)
|
||||
if(I.implanted)
|
||||
if(istype(I,/obj/item/weapon/implant/tracking))
|
||||
C.images += image(tempHud,perp,"hud_imp_tracking")
|
||||
if(istype(I,/obj/item/weapon/implant/loyalty))
|
||||
C.images += image(tempHud,perp,"hud_imp_loyal")
|
||||
|
||||
|
||||
@@ -9,9 +9,11 @@
|
||||
var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle)
|
||||
//var/m_type = 1
|
||||
|
||||
for (var/obj/item/weapon/implant/I in src)
|
||||
if (I.implanted)
|
||||
I.trigger(act, src)
|
||||
for(var/named in organs)
|
||||
var/datum/organ/external/F = organs[named]
|
||||
for (var/obj/item/weapon/implant/I in F.implant)
|
||||
if (I.implanted)
|
||||
I.trigger(act, src)
|
||||
|
||||
if(src.stat == 2.0 && (act != "deathgasp"))
|
||||
return
|
||||
|
||||
@@ -83,15 +83,36 @@
|
||||
new /datum/organ/external/r_arm(src)
|
||||
new /datum/organ/external/r_leg(src)
|
||||
new /datum/organ/external/l_leg(src)
|
||||
|
||||
var/datum/organ/external/part = new /datum/organ/external/l_hand(src)
|
||||
part.parent = organs["l_arm"]
|
||||
part = new /datum/organ/external/l_foot(src)
|
||||
part.parent = organs["l_leg"]
|
||||
part = new /datum/organ/external/r_hand(src)
|
||||
part.parent = organs["r_arm"]
|
||||
part = new /datum/organ/external/r_foot(src)
|
||||
new /datum/organ/external/l_hand(src)
|
||||
new /datum/organ/external/l_foot(src)
|
||||
new /datum/organ/external/r_hand(src)
|
||||
new /datum/organ/external/r_foot(src)
|
||||
var/datum/organ/external/part = organs["chest"]
|
||||
part.children = list(organs["r_leg"],organs["l_leg"],organs["r_arm"],organs["l_arm"],organs["groin"],organs["head"])
|
||||
part = organs["head"]
|
||||
part.parent = organs["chest"]
|
||||
part = organs["groin"]
|
||||
part.parent = organs["chest"]
|
||||
part = organs["r_leg"]
|
||||
part.children = list(organs["r_foot"])
|
||||
part.parent = organs["chest"]
|
||||
part = organs["l_leg"]
|
||||
part.children = list(organs["l_foot"])
|
||||
part.parent = organs["chest"]
|
||||
part = organs["r_arm"]
|
||||
part.children = list(organs["r_hand"])
|
||||
part.parent = organs["chest"]
|
||||
part = organs["l_arm"]
|
||||
part.children = list(organs["l_hand"])
|
||||
part.parent = organs["chest"]
|
||||
part = organs["r_foot"]
|
||||
part.parent = organs["r_leg"]
|
||||
part = organs["l_foot"]
|
||||
part.parent = organs["l_leg"]
|
||||
part = organs["r_hand"]
|
||||
part.parent = organs["r_arm"]
|
||||
part = organs["l_hand"]
|
||||
part.parent = organs["l_arm"]
|
||||
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
@@ -135,9 +156,9 @@
|
||||
var/turf/T = get_turf(src)
|
||||
var/list/obj/effect/decal/cleanable/blood/drip/nums = list()
|
||||
var/list/iconL = list("1","2","3","4","5")
|
||||
|
||||
|
||||
vessel.remove_reagent("blood",amm)
|
||||
|
||||
|
||||
for(var/obj/effect/decal/cleanable/blood/drip/G in T)
|
||||
nums += G
|
||||
iconL.Remove(G.icon_state)
|
||||
@@ -148,12 +169,12 @@
|
||||
if(virus2)
|
||||
D.virus2 = virus2.getcopy()
|
||||
return
|
||||
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/drip/this = new(T)
|
||||
this.icon_state = pick(iconL)
|
||||
this.blood_DNA = list(list(dna.unique_enzymes,dna.b_type))
|
||||
this.blood_owner = src
|
||||
|
||||
|
||||
if(virus2)
|
||||
this.virus2 = virus2.getcopy()
|
||||
|
||||
|
||||
@@ -25,22 +25,43 @@
|
||||
dna.b_type = "A+"
|
||||
dna.original_name = real_name
|
||||
|
||||
new /datum/organ/external/chest(src)
|
||||
new /datum/organ/external/chest(src)
|
||||
new /datum/organ/external/groin(src)
|
||||
new /datum/organ/external/head(src)
|
||||
new /datum/organ/external/l_arm(src)
|
||||
new /datum/organ/external/r_arm(src)
|
||||
new /datum/organ/external/r_leg(src)
|
||||
new /datum/organ/external/l_leg(src)
|
||||
|
||||
var/datum/organ/external/part = new /datum/organ/external/l_hand(src)
|
||||
part.parent = organs["l_arm"]
|
||||
part = new /datum/organ/external/l_foot(src)
|
||||
part.parent = organs["l_leg"]
|
||||
part = new /datum/organ/external/r_hand(src)
|
||||
part.parent = organs["r_arm"]
|
||||
part = new /datum/organ/external/r_foot(src)
|
||||
new /datum/organ/external/l_hand(src)
|
||||
new /datum/organ/external/l_foot(src)
|
||||
new /datum/organ/external/r_hand(src)
|
||||
new /datum/organ/external/r_foot(src)
|
||||
var/datum/organ/external/part = organs["chest"]
|
||||
part.children = list(organs["r_leg"],organs["l_leg"],organs["r_arm"],organs["l_arm"],organs["groin"],organs["head"])
|
||||
part = organs["head"]
|
||||
part.parent = organs["chest"]
|
||||
part = organs["groin"]
|
||||
part.parent = organs["chest"]
|
||||
part = organs["r_leg"]
|
||||
part.children = list(organs["r_foot"])
|
||||
part.parent = organs["chest"]
|
||||
part = organs["l_leg"]
|
||||
part.children = list(organs["l_foot"])
|
||||
part.parent = organs["chest"]
|
||||
part = organs["r_arm"]
|
||||
part.children = list(organs["r_hand"])
|
||||
part.parent = organs["chest"]
|
||||
part = organs["l_arm"]
|
||||
part.children = list(organs["l_hand"])
|
||||
part.parent = organs["chest"]
|
||||
part = organs["r_foot"]
|
||||
part.parent = organs["r_leg"]
|
||||
part = organs["l_foot"]
|
||||
part.parent = organs["l_leg"]
|
||||
part = organs["r_hand"]
|
||||
part.parent = organs["r_arm"]
|
||||
part = organs["l_hand"]
|
||||
part.parent = organs["l_arm"]
|
||||
|
||||
spawn (1)
|
||||
if(!stand_icon)
|
||||
|
||||
@@ -347,11 +347,12 @@
|
||||
|
||||
for (var/mob/M in W)
|
||||
W |= M.contents
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/G = M
|
||||
for(var/name in G.organs)
|
||||
var/datum/organ/external/F = G.organs[name]
|
||||
W |= F.implant
|
||||
if(hasorgans(M))
|
||||
var/mob/living/carbon/G = M
|
||||
for(var/name in G:organs)
|
||||
var/datum/organ/external/F = G:organs[name]
|
||||
for(var/obj/item/weapon/implant/I in F.implant)
|
||||
W |= I
|
||||
|
||||
for (var/obj/item/device/pda/M in W)
|
||||
W |= M.contents
|
||||
|
||||
@@ -711,7 +711,7 @@
|
||||
if (isbanned)
|
||||
log_access("Failed Login: [src] - Banned")
|
||||
message_admins("\blue Failed Login: [src] - Banned")
|
||||
alert(src,"You have been banned.\nReason : [isbanned]","Ban","Ok")
|
||||
alert(src,"You have been banned.\nReason : [isbanned][config.appeal_address ? "\nYou may appeal this at [config.appeal_address]" : ""]","Ban","Ok")
|
||||
del(src)
|
||||
|
||||
/*
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
|
||||
proc/copy()
|
||||
var/datum/autopsy_data/W = new()
|
||||
W.weapon = src.weapon
|
||||
W.pretend_weapon = src.pretend_weapon
|
||||
W.damage = src.damage
|
||||
W.hits = src.hits
|
||||
W.time_inflicted = src.time_inflicted
|
||||
W.weapon = weapon
|
||||
W.pretend_weapon = pretend_weapon
|
||||
W.damage = damage
|
||||
W.hits = hits
|
||||
W.time_inflicted = time_inflicted
|
||||
return W
|
||||
|
||||
/****************************************************
|
||||
@@ -57,8 +57,10 @@
|
||||
tmp/destroyed = 0
|
||||
tmp/destspawn = 0 //Has it spawned the broken limb?
|
||||
tmp/gauzed = 0 //Has the missing limb been patched?
|
||||
tmp/robot = 0 //ROBOT ARM MAN!
|
||||
min_broken_damage = 30
|
||||
datum/organ/external/parent
|
||||
list/datum/organ/external/children
|
||||
damage_msg = "\red You feel a intense pain"
|
||||
|
||||
var/open = 0
|
||||
@@ -95,46 +97,61 @@
|
||||
droplimb()
|
||||
return
|
||||
else if(prob(nux))
|
||||
createwound(max(1,min(6,round(brute/10) + rand(0,2))),0,brute)
|
||||
createwound(max(1,min(6,round(brute/10) + rand(0,1))),0,brute)
|
||||
owner << "You feel something wet on your [display_name]"
|
||||
|
||||
if((brute_dam + burn_dam + brute + burn) < max_damage)
|
||||
if(brute)
|
||||
brute_dam += brute
|
||||
if(prob(brute) && brute > 20 && !sharp)
|
||||
if(prob(brute*2) && !sharp)
|
||||
createwound(rand(4,6),0,brute)
|
||||
else if(!sharp)
|
||||
createwound(max(1,min(6,round(brute/10) + rand(1,3))),1,brute)
|
||||
createwound(max(1,min(6,round(brute/10) + rand(1,2))),1,brute)
|
||||
if(burn)
|
||||
burn_dam += burn
|
||||
createwound(max(1,min(6,round(burn/10) + rand(0,2))),2,burn)
|
||||
createwound(max(1,min(6,round(burn/10) + rand(0,1))),2,burn)
|
||||
else
|
||||
var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam)
|
||||
var/can_inflict = max_damage - (brute_dam + burn_dam)
|
||||
if(can_inflict)
|
||||
if (brute > 0 && burn > 0)
|
||||
brute = can_inflict/2
|
||||
burn = can_inflict/2
|
||||
var/ratio = brute / (brute + burn)
|
||||
src.brute_dam += ratio * can_inflict
|
||||
src.burn_dam += (1 - ratio) * can_inflict
|
||||
brute_dam += ratio * can_inflict
|
||||
burn_dam += (1 - ratio) * can_inflict
|
||||
else
|
||||
if (brute > 0)
|
||||
brute = can_inflict
|
||||
src.brute_dam += brute
|
||||
if(!sharp) createwound(max(1,min(6,round(brute/10) + rand(-1,1))),1,brute)
|
||||
brute_dam += brute
|
||||
if(!sharp && !prob(brute*3)) createwound(max(1,min(6,round(brute/10) + rand(0,1))),1,brute)
|
||||
else createwound(max(1,min(6,round(brute/10) + rand(1,2))),1,brute)
|
||||
else
|
||||
burn = can_inflict
|
||||
src.burn_dam += burn
|
||||
createwound(max(1,min(6,round(burn/10) + rand(-1,1))),2,burn)
|
||||
burn_dam += burn
|
||||
createwound(max(1,min(6,round(burn/10) + rand(0,1))),2,burn)
|
||||
else
|
||||
return 0
|
||||
var/passed_dam = (brute_dam + burn_dam) - can_inflict //Getting how much overdamage we have.
|
||||
var/list/datum/organ/external/possible_points = list()
|
||||
if(parent)
|
||||
possible_points += parent
|
||||
if(children)
|
||||
possible_points += children
|
||||
if(!possible_points.len)
|
||||
message_admins("Oh god WHAT! [owner]'s [src] was unable to find an organ to pass overdamage too!")
|
||||
else
|
||||
var/datum/organ/external/target = pick(possible_points)
|
||||
if(brute)
|
||||
target.take_damage(passed_dam, 0, sharp, used_weapon)
|
||||
else
|
||||
target.take_damage(0, passed_dam, sharp, used_weapon)
|
||||
|
||||
|
||||
if(broken)
|
||||
owner.emote("scream")
|
||||
|
||||
if(used_weapon) add_wound(used_weapon, brute + burn)
|
||||
|
||||
var/result = src.update_icon()
|
||||
var/result = update_icon()
|
||||
return result
|
||||
|
||||
|
||||
@@ -250,18 +267,18 @@
|
||||
|
||||
if(burn_dam ==0)
|
||||
tburn =0
|
||||
else if (src.burn_dam < (src.max_damage * 0.25 / 2))
|
||||
else if (burn_dam < (max_damage * 0.25 / 2))
|
||||
tburn = 1
|
||||
else if (src.burn_dam < (src.max_damage * 0.75 / 2))
|
||||
else if (burn_dam < (max_damage * 0.75 / 2))
|
||||
tburn = 2
|
||||
else
|
||||
tburn = 3
|
||||
|
||||
if (src.brute_dam == 0)
|
||||
if (brute_dam == 0)
|
||||
tbrute = 0
|
||||
else if (src.brute_dam < (src.max_damage * 0.25 / 2))
|
||||
else if (brute_dam < (max_damage * 0.25 / 2))
|
||||
tbrute = 1
|
||||
else if (src.brute_dam < (src.max_damage * 0.75 / 2))
|
||||
else if (brute_dam < (max_damage * 0.75 / 2))
|
||||
tbrute = 2
|
||||
else
|
||||
tbrute = 3
|
||||
@@ -271,9 +288,9 @@
|
||||
// new damage icon system
|
||||
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
|
||||
proc/update_icon()
|
||||
var/n_is = src.damage_state_text()
|
||||
if (n_is != src.damage_state)
|
||||
src.damage_state = n_is
|
||||
var/n_is = damage_state_text()
|
||||
if (n_is != damage_state)
|
||||
damage_state = n_is
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -286,6 +303,9 @@
|
||||
del(implants)
|
||||
//owner.unlock_medal("Lost something?", 0, "Lose a limb.", "easy")
|
||||
|
||||
for(var/datum/organ/external/I in children)
|
||||
if(I && !I.destroyed)
|
||||
I.droplimb(1)
|
||||
var/obj/item/weapon/organ/H
|
||||
switch(body_part)
|
||||
if(UPPER_TORSO)
|
||||
@@ -315,34 +335,18 @@
|
||||
H = new /obj/item/weapon/organ/r_arm(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "r_arm_l"
|
||||
if(owner:organs["r_hand"])
|
||||
var/datum/organ/external/S = owner:organs["r_hand"]
|
||||
if(!S.destroyed)
|
||||
S.droplimb(1)
|
||||
if(ARM_LEFT)
|
||||
H = new /obj/item/weapon/organ/l_arm(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "l_arm_l"
|
||||
if(owner:organs["l_hand"])
|
||||
var/datum/organ/external/S = owner:organs["l_hand"]
|
||||
if(!S.destroyed)
|
||||
S.droplimb(1)
|
||||
if(LEG_RIGHT)
|
||||
H = new /obj/item/weapon/organ/r_leg(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "r_leg_l"
|
||||
if(owner:organs["r_foot"])
|
||||
var/datum/organ/external/S = owner:organs["r_foot"]
|
||||
if(!S.destroyed)
|
||||
S.droplimb(1)
|
||||
if(LEG_LEFT)
|
||||
H = new /obj/item/weapon/organ/l_leg(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "l_leg_l"
|
||||
if(owner:organs["l_foot"])
|
||||
var/datum/organ/external/S = owner:organs["l_foot"]
|
||||
if(!S.destroyed)
|
||||
S.droplimb(1)
|
||||
if(HAND_RIGHT)
|
||||
H = new /obj/item/weapon/organ/r_hand(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
@@ -377,12 +381,12 @@
|
||||
proc/createwound(var/size = 1, var/type = 0, var/damage)
|
||||
var/list/datum/organ/wound/possible_wounds = list()
|
||||
for(var/datum/organ/wound/W in wounds)
|
||||
if(W.type == type && W.wound_size < 3 && size < 3 && !W.is_healing)
|
||||
if(W.wound_type == type && W.wound_size <= 3 && size <= 3 && ((!W.is_healing && type == 1) || (!W.healing_state && type != 1)))
|
||||
possible_wounds += W
|
||||
if(ishuman(owner))
|
||||
if(!possible_wounds.len || prob(25))
|
||||
if(hasorgans(owner))
|
||||
if(!possible_wounds.len || prob(20))
|
||||
var/datum/organ/wound/W = new(src)
|
||||
bleeding = !type //Sharp objects cause bleeding.
|
||||
bleeding = max(!type,bleeding) //Sharp objects cause bleeding.
|
||||
W.bleeding = !type
|
||||
// owner:bloodloss += 10 * size
|
||||
W.damage = damage
|
||||
@@ -403,12 +407,7 @@
|
||||
// owner:bloodloss += 10 * size
|
||||
W.damage += damage
|
||||
W.initial_dmg += damage
|
||||
W.wound_size = round(sqrt(size^2 + W.wound_size^2))
|
||||
if(type == 1)
|
||||
spawn W.become_scar()
|
||||
else
|
||||
spawn W.start_close() //Let small cuts close themselves.
|
||||
wounds += W
|
||||
W.wound_size = max(1,min(6,round(damage/10) + rand(0,1)))
|
||||
|
||||
/datum/organ/wound
|
||||
name = "wound"
|
||||
@@ -459,17 +458,21 @@
|
||||
bleeding = min(bleed,bleeding)
|
||||
is_healing = 1
|
||||
slowheal = 1
|
||||
spawn become_scar() //spawn off the process of becoming a scar.
|
||||
if(!healing_state)
|
||||
spawn become_scar() //spawn off the process of becoming a scar.
|
||||
return 1
|
||||
|
||||
proc/become_scar()
|
||||
healing_state = 1 //Patched
|
||||
spawn(200*slowheal) //20 seconds
|
||||
spawn(200*slowheal) //~20-60 seconds
|
||||
update_health(5) //Heals some.
|
||||
|
||||
sleep(rand(1800,3000)*slowheal) //3-5 minutes
|
||||
|
||||
if(parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(80) && wound_size < 2) //Small cuts heal.
|
||||
update_health(1)
|
||||
@@ -480,7 +483,10 @@
|
||||
update_health(2) //Heals more.
|
||||
|
||||
sleep(rand(1800,3000)*slowheal) //3-5 minutes
|
||||
if(parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(60) && wound_size < 3) //Cuts heal up
|
||||
parent.wounds.Remove(src)
|
||||
@@ -490,14 +496,20 @@
|
||||
|
||||
|
||||
sleep(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
if(parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(80) && wound_size < 4) //Minor wounds heal up fully.
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
healing_state = 4 //Scar
|
||||
sleep(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
if(parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner || parent.owner.stat == 2)
|
||||
if(!parent || !parent.owner)
|
||||
del(parent)
|
||||
del(src)
|
||||
return
|
||||
if(prob(30) || wound_size < 4 || wound_type == 1) //Small chance for the scar to disappear, any small remaining wounds deleted.
|
||||
parent.wounds.Remove(src)
|
||||
|
||||
+4
-1
@@ -111,4 +111,7 @@ GUEST_JOBBAN 1
|
||||
# FEATURE_OBJECT_SPELL_SYSTEM
|
||||
|
||||
##Toggle for having jobs load up from the .txt
|
||||
# LOAD_JOBS_FROM_TXT
|
||||
# LOAD_JOBS_FROM_TXT
|
||||
|
||||
##What address should banned people appeal ther ban at? Remember to escape the characters, if needed!
|
||||
# APPEAL_ADDRESS -->APPEAL ADDRESS HERE<--
|
||||
Reference in New Issue
Block a user