mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Committed for Sieve:
Reverted dismemberment - This is the majority of the files Reverted the gun change - You wont shoot yourself putting your gun away - You don't have to fire off all of your shots before hitting someone with your gun Reverted Tarajans - As requested Hotfix for the Holodeck. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3574 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -34,7 +34,6 @@
|
||||
var/popup_admin_pm = 0 //adminPMs to non-admins show in a pop-up 'reply' window when set to 1.
|
||||
var/Ticklag = 0.9
|
||||
var/Tickcomp = 0
|
||||
var/no_taj = 0
|
||||
|
||||
var/list/mode_names = list()
|
||||
var/list/modes = list() // allowed modes
|
||||
@@ -306,9 +305,6 @@
|
||||
if("tickcomp")
|
||||
Tickcomp = 1
|
||||
|
||||
if("no_taj")
|
||||
no_taj = 1
|
||||
|
||||
else
|
||||
diary << "Unknown setting in configuration: '[name]'"
|
||||
|
||||
|
||||
@@ -71,18 +71,6 @@
|
||||
if(B != src)
|
||||
del(B)
|
||||
|
||||
|
||||
/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"
|
||||
// track_amt = 0
|
||||
|
||||
/obj/effect/decal/cleanable/blood/splatter
|
||||
random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5")
|
||||
|
||||
|
||||
@@ -244,7 +244,7 @@ proc/isInSight(var/atom/A, var/atom/B)
|
||||
return 0
|
||||
|
||||
|
||||
proc/doafterattack(obj/target , obj/source)
|
||||
/*proc/doafterattack(obj/target , obj/source)
|
||||
|
||||
if (istype(target, /obj/item/weapon/storage/ ))
|
||||
return 0
|
||||
@@ -256,4 +256,5 @@ proc/doafterattack(obj/target , obj/source)
|
||||
return 0
|
||||
|
||||
else
|
||||
return 1
|
||||
return 1
|
||||
{R}*/
|
||||
@@ -644,25 +644,6 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
||||
if ( !animal.restrained() )
|
||||
attack_animal(animal)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/atom/DblClick(location, control, params) //TODO: DEFERRED: REWRITE
|
||||
// world << "checking if this shit gets called at all"
|
||||
|
||||
@@ -935,18 +916,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
|
||||
// ------- YOU DO NOT HAVE AN ITEM IN YOUR HAND -------
|
||||
if (istype(usr, /mob/living/carbon/human))
|
||||
// ------- YOU ARE HUMAN -------
|
||||
if(usr.hand) // if he's using his left hand.
|
||||
var/datum/organ/external/temp = usr:get_organ("l_hand")
|
||||
if(temp.destroyed)
|
||||
usr << "\blue You look at your stump."
|
||||
return
|
||||
else
|
||||
var/datum/organ/external/temp = usr:get_organ("r_hand")
|
||||
if(temp.destroyed)
|
||||
usr << "\blue You look at your stump."
|
||||
return
|
||||
src.attack_hand(usr, usr.hand)
|
||||
usr:afterattack(src, usr, (t5 ? 1 : 0), params)
|
||||
else
|
||||
// ------- YOU ARE NOT HUMAN. WHAT ARE YOU - DETERMINED HERE AND PROPER ATTACK_MOBTYPE CALLED -------
|
||||
if (istype(usr, /mob/living/carbon/monkey))
|
||||
|
||||
@@ -429,7 +429,7 @@
|
||||
flick("h2monkey", animation)
|
||||
sleep(48)
|
||||
//animation = null
|
||||
var/mob/living/carbon/human/tajaran/Emissary/O = new /mob/living/carbon/human/tajaran/Emissary( src )
|
||||
var/mob/living/carbon/human/O = new /mob/living/carbon/human( src )//Removed Emissary shit -Sieve{R}
|
||||
del(animation)
|
||||
|
||||
O.real_name = usr.real_name
|
||||
@@ -495,7 +495,7 @@
|
||||
new_objective.owner = O.mind
|
||||
O.mind.objectives += new_objective
|
||||
|
||||
spawn(0)
|
||||
/* spawn(0)
|
||||
while(emergency_shuttle.online == 0)
|
||||
sleep(10)
|
||||
command_alert("Authorization codes recieved, confirming hostile entity terminated. The emergancy shuttle is now departing.")
|
||||
@@ -512,7 +512,7 @@
|
||||
sleep(10)
|
||||
if((locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/shuttle/escape/centcom)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/evac)) || (locate(/mob/living/carbon/human/tajaran/Emissary) in locate(/area/centcom/control) ) )
|
||||
command_alert("What the fu- Shoot it! SHOOT IT! CENTRAL COMMAND TRANSMITTING DIST- *static* Nevermind previous transmission, Nanotrasen. We're all good here. Subject contained. Standing down alert status.")
|
||||
|
||||
Tarjan shit, not recoding this -Sieve{R}*/
|
||||
|
||||
/client/proc/changeling_fakedeath()
|
||||
set category = "Changeling"
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
dat += text("Dermaline: [] units<BR>", occupant.reagents.get_reagent_amount("dermaline"))
|
||||
dat += text("Bicaridine: [] units<BR>", occupant.reagents.get_reagent_amount("bicaridine"))
|
||||
dat += text("Dexalin: [] units<BR>", occupant.reagents.get_reagent_amount("dexalin"))
|
||||
dat += text("<HR><A href='?src=\ref[];refresh=1'>Refresh meter readings each second</A><BR><A href='?src=\ref[];inap=1'>Inject Inaprovaline</A><BR><A href='?src=\ref[];stox=1'>Inject Soporific</A><BR><A href='?src=\ref[];derm=1'>Inject Dermaline</A><BR><A href='?src=\ref[];bic=1'>Inject Bicaridine</A><BR><A href='?src=\ref[];dex=1'>Inject Dexalin</A><BR><A href='?src=\ref[];organ=1'>Regenerate Organs</A>", src, src, src, src, src, src,src)
|
||||
dat += text("<HR><A href='?src=\ref[];refresh=1'>Refresh meter readings each second</A><BR><A href='?src=\ref[];inap=1'>Inject Inaprovaline</A><BR><A href='?src=\ref[];stox=1'>Inject Soporific</A><BR><A href='?src=\ref[];derm=1'>Inject Dermaline</A><BR><A href='?src=\ref[];bic=1'>Inject Bicaridine</A><BR><A href='?src=\ref[];dex=1'>Inject Dexalin</A>", src, src, src, src, src, src)
|
||||
else
|
||||
dat += "The sleeper is empty."
|
||||
dat += text("<BR><BR><A href='?src=\ref[];mach_close=sleeper'>Close</A>", user)
|
||||
@@ -98,43 +98,11 @@
|
||||
src.connected.inject_bicaridine(usr)
|
||||
if (href_list["dex"])
|
||||
src.connected.inject_dexalin(usr)
|
||||
if (href_list["organ"])
|
||||
if(istype(src.connected.occupant,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src.connected.occupant
|
||||
for(var/datum/organ/external/e in H.organs)
|
||||
if(e.destroyed)
|
||||
usr << "Please wait, regenerating limb. Administring nanite-bath. Do not eject occupant until told to."
|
||||
sleep(100)
|
||||
if(!src.connected.occupant)
|
||||
return
|
||||
e.destroyed = 0
|
||||
// e.brute_dam = 0.0
|
||||
// e.burn_dam = 0.0
|
||||
e.bandaged = 0.0
|
||||
e.max_damage = initial(e.max_damage)
|
||||
e.bleeding = 0
|
||||
e.open = 0
|
||||
e.broken = 0
|
||||
e.destroyed = 0
|
||||
e.perma_injury = 0
|
||||
|
||||
if(e.wounds)
|
||||
for(var/datum/organ/wound/W in e.wounds)
|
||||
del(W)
|
||||
e.update_icon()
|
||||
|
||||
H.vessel.clear_reagents()
|
||||
H.vessel.add_reagent("blood",560)
|
||||
H.update_body()
|
||||
H.update_face()
|
||||
H.UpdateDamageIcon()
|
||||
usr << "Run complete. Limbs regenerated. Additional healing may be required."
|
||||
else
|
||||
if(src.connected.occupant.health > -100)
|
||||
if (href_list["inap"])
|
||||
src.connected.inject_inap(usr)
|
||||
else
|
||||
//if (href_list["stox"] || href_list["derm"] || href_list["bic"] || href_list["dex"])
|
||||
if (href_list["stox"] || href_list["derm"] || href_list["bic"] || href_list["dex"])
|
||||
usr << "\red \b this person is not in good enough condition for sleepers to be effective! Use another means of treatment, such as cryogenics!"
|
||||
else
|
||||
usr << "\red \b This person has no life for to preserve anymore. Take them to a department capable of reanimating them."
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
var/active = 0
|
||||
var/list/holographic_items = list()
|
||||
var/damaged = 0
|
||||
var/last_change = 0
|
||||
|
||||
|
||||
attack_ai(var/mob/user as mob)
|
||||
@@ -233,6 +234,15 @@
|
||||
|
||||
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
|
||||
|
||||
if(world.time < (last_change + 25))
|
||||
if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
|
||||
return
|
||||
for(var/mob/M in range(3,src))
|
||||
M.show_message("\b ERROR. Recalibrating projetion apparatus.")
|
||||
last_change = world.time
|
||||
return
|
||||
|
||||
last_change = world.time
|
||||
active = 1
|
||||
|
||||
for(var/item in holographic_items)
|
||||
|
||||
@@ -93,18 +93,6 @@
|
||||
|
||||
/obj/item/attack_hand(mob/user as mob)
|
||||
if (!user) return
|
||||
if (user.hand)
|
||||
if(ishuman(user))
|
||||
var/datum/organ/external/temp = user:get_organ("l_hand")
|
||||
if(temp.destroyed)
|
||||
user << "\blue You look at your stump."
|
||||
return
|
||||
else
|
||||
if(ishuman(user))
|
||||
var/datum/organ/external/temp = user:get_organ("r_hand")
|
||||
if(temp.destroyed)
|
||||
user << "\blue You look at your stump."
|
||||
|
||||
if (istype(src.loc, /obj/item/weapon/storage))
|
||||
for(var/mob/M in range(1, src.loc))
|
||||
if (M.s_active == src.loc)
|
||||
|
||||
@@ -189,7 +189,6 @@
|
||||
verbs += /client/proc/toggleadminhelpsound
|
||||
verbs += /proc/possess
|
||||
verbs += /proc/release
|
||||
verbs += /client/proc/make_tajaran
|
||||
|
||||
|
||||
else return
|
||||
@@ -420,7 +419,6 @@
|
||||
verbs -= /client/proc/togglebuildmodeself
|
||||
verbs -= /client/proc/kill_airgroup
|
||||
verbs -= /client/proc/debug_master_controller
|
||||
verbs -= /client/proc/make_tajaran
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -661,7 +661,6 @@ datum
|
||||
affecting.take_damage(25, 0)
|
||||
M:UpdateDamageIcon()
|
||||
M:emote("scream")
|
||||
M:disfigure_face()
|
||||
else
|
||||
M.take_organ_damage(min(15, volume * 2)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
|
||||
else
|
||||
@@ -712,8 +711,6 @@ datum
|
||||
affecting.take_damage(15, 0)
|
||||
M:UpdateDamageIcon()
|
||||
M:emote("scream")
|
||||
if(prob(15))
|
||||
M:disfigure_face()
|
||||
else
|
||||
if(istype(M, /mob/living/carbon/monkey) && M:wear_mask)
|
||||
del (M:wear_mask)
|
||||
@@ -730,8 +727,6 @@ datum
|
||||
affecting.take_damage(15, 0)
|
||||
M:UpdateDamageIcon()
|
||||
M:emote("scream")
|
||||
if(prob(15))
|
||||
M:disfigure_face()
|
||||
else
|
||||
M.take_organ_damage(min(15, volume * 4))
|
||||
|
||||
|
||||
@@ -22,12 +22,7 @@ Contains the procs that control attacking critters
|
||||
if (user.a_intent == "hurt")
|
||||
TakeDamage(rand(1,2) * brutevuln)
|
||||
|
||||
if(istajaran(user))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red <B>[user] has slashed at [src]!</B>", 1)
|
||||
playsound(src.loc, 'slice.ogg', 25, 1, -1)
|
||||
|
||||
else if(istype(user, /mob/living/carbon/human))
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red <B>[user] has punched [src]!</B>", 1)
|
||||
playsound(src.loc, pick('punch1.ogg','punch2.ogg','punch3.ogg','punch4.ogg'), 100, 1)
|
||||
@@ -37,8 +32,6 @@ Contains the procs that control attacking critters
|
||||
O.show_message("\red <B>[user] has slashed at [src]!</B>", 1)
|
||||
playsound(src.loc, 'slice.ogg', 25, 1, -1)
|
||||
|
||||
|
||||
|
||||
else
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message("\red <B>[user] has bit [src]!</B>", 1)
|
||||
|
||||
@@ -188,9 +188,6 @@
|
||||
status += "blistered"
|
||||
else if(burndamage > 0)
|
||||
status += "numb"
|
||||
if(org.destroyed)
|
||||
status = "MISSING!"
|
||||
|
||||
if(status == "")
|
||||
status = "OK"
|
||||
src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.getDisplayName(),status),1)
|
||||
|
||||
@@ -99,11 +99,8 @@
|
||||
/mob/living/carbon/human/proc/ChangeToHusk()
|
||||
if(mutations & HUSK)
|
||||
return
|
||||
var/datum/organ/external/head/head = get_organ("head")
|
||||
if(head)
|
||||
head.disfigured = 1
|
||||
name = get_visible_name()
|
||||
mutations |= HUSK
|
||||
real_name = "Unknown"
|
||||
update_body()
|
||||
return
|
||||
|
||||
|
||||
@@ -221,18 +221,7 @@
|
||||
msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n"
|
||||
else
|
||||
msg += "[t_He] [t_is] quite chubby.\n"
|
||||
/*
|
||||
if(src.bloodloss)
|
||||
msg += "[t_He] [t_is] bleeding profusely!"
|
||||
|
||||
for(var/datum/organ/external/organ in organs)
|
||||
if(!temp.bleeding || temp.robot) //THAT WAS DUMB.
|
||||
continue
|
||||
if(temp.wounds)
|
||||
for(var/datum/organ/wound/W in temp.wounds)
|
||||
if(W.wound_size && W.bleeding)
|
||||
blood_max += W.wound_size
|
||||
*/
|
||||
msg += "</span>"
|
||||
|
||||
if (src.stat == UNCONSCIOUS)
|
||||
|
||||
@@ -54,9 +54,6 @@
|
||||
var/mutantrace = null
|
||||
|
||||
var/list/organs = list()
|
||||
var/bloodloss = 0
|
||||
var/datum/reagents/vessel
|
||||
var/pale = 0
|
||||
|
||||
|
||||
/mob/living/carbon/human/dummy
|
||||
@@ -67,9 +64,6 @@
|
||||
|
||||
/mob/living/carbon/human/New()
|
||||
|
||||
..()
|
||||
|
||||
|
||||
|
||||
var/datum/reagents/R = new/datum/reagents(1000)
|
||||
reagents = R
|
||||
@@ -78,7 +72,24 @@
|
||||
if(!dna)
|
||||
dna = new /datum/dna(null)
|
||||
|
||||
make_human_organs()
|
||||
var/datum/organ/external/chest/chest = new /datum/organ/external/chest(src)
|
||||
var/datum/organ/external/head/head = new /datum/organ/external/head(src)
|
||||
var/datum/organ/external/l_arm/l_arm = new /datum/organ/external/l_arm(src)
|
||||
var/datum/organ/external/r_arm/r_arm = new /datum/organ/external/r_arm(src)
|
||||
var/datum/organ/external/r_leg/r_leg = new /datum/organ/external/r_leg(src)
|
||||
var/datum/organ/external/l_leg/l_leg = new /datum/organ/external/l_leg(src)
|
||||
chest.owner = src
|
||||
head.owner = src
|
||||
r_arm.owner = src
|
||||
l_arm.owner = src
|
||||
r_leg.owner = src
|
||||
l_leg.owner = src
|
||||
organs += chest
|
||||
organs += head
|
||||
organs += r_arm
|
||||
organs += l_arm
|
||||
organs += r_leg
|
||||
organs += l_leg
|
||||
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
@@ -90,60 +101,16 @@
|
||||
g = "m"
|
||||
|
||||
spawn(1)
|
||||
stand_icon = new /icon('human.dmi', "body_[g]_s")
|
||||
lying_icon = new /icon('human.dmi', "body_[g]_l")
|
||||
if(!stand_icon)
|
||||
stand_icon = new /icon('human.dmi', "body_[g]_s")
|
||||
if(!lying_icon)
|
||||
lying_icon = new /icon('human.dmi', "body_[g]_l")
|
||||
icon = stand_icon
|
||||
update_clothing()
|
||||
|
||||
src << "\blue Your icons have been generated!"
|
||||
|
||||
|
||||
spawn(10) // Failsafe for.. weirdness.
|
||||
update_clothing()
|
||||
update_body()
|
||||
|
||||
vessel = new/datum/reagents(600)
|
||||
vessel.my_atom = src
|
||||
vessel.add_reagent("blood",560)
|
||||
spawn(1)
|
||||
fixblood()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/fixblood()
|
||||
for(var/datum/reagent/blood/B in vessel.reagent_list)
|
||||
if(B.id == "blood")
|
||||
B.data = list("donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.b_type,"resistances"=null,"trace_chem"=null)
|
||||
|
||||
/mob/living/carbon/human/proc/drip(var/amt as num)
|
||||
if(!amt)
|
||||
return
|
||||
|
||||
var/amm = 0.1 * amt
|
||||
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)
|
||||
if(nums.len >= 3)
|
||||
var/obj/effect/decal/cleanable/blood/drip/D = pick(nums)
|
||||
D.blood_DNA.len++
|
||||
D.blood_DNA[D.blood_DNA.len] = list(dna.unique_enzymes,dna.b_type)
|
||||
// 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()
|
||||
|
||||
..()
|
||||
|
||||
// organStructure = new /obj/effect/organstructure/human(src)
|
||||
|
||||
@@ -235,14 +202,6 @@
|
||||
var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80
|
||||
if (hungry >= 70) tally += hungry/50
|
||||
|
||||
|
||||
for(var/organ in list("l_leg","l_foot","r_leg","r_foot"))
|
||||
var/datum/organ/external/o = get_organ(organ)
|
||||
if(o.broken)
|
||||
tally += 6
|
||||
if(o.destroyed)
|
||||
tally += 12
|
||||
|
||||
if(wear_suit)
|
||||
tally += wear_suit.slowdown
|
||||
|
||||
@@ -1236,104 +1195,39 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
#define BS12TEST 1
|
||||
/mob/living/carbon/human/proc/update_body()
|
||||
if(stand_icon)
|
||||
del(stand_icon)
|
||||
if(lying_icon)
|
||||
del(lying_icon)
|
||||
|
||||
if(!BS12TEST)
|
||||
if (mutantrace)
|
||||
return
|
||||
|
||||
if(stand_icon)
|
||||
del(stand_icon)
|
||||
if(lying_icon)
|
||||
del(lying_icon)
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
g = "m"
|
||||
else if (gender == FEMALE)
|
||||
g = "f"
|
||||
|
||||
if (mutantrace)
|
||||
return
|
||||
stand_icon = new /icon('human.dmi', "blank")
|
||||
lying_icon = new /icon('human.dmi', "blank")
|
||||
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
g = "m"
|
||||
else if (gender == FEMALE)
|
||||
g = "f"
|
||||
var/husk = (mutations & HUSK)
|
||||
var/obese = (mutations & FAT)
|
||||
|
||||
stand_icon = new /icon('human.dmi', "blank")
|
||||
lying_icon = new /icon('human.dmi', "blank")
|
||||
|
||||
var/husk = (mutations & HUSK)
|
||||
var/obese = (mutations & FAT)
|
||||
|
||||
if (husk)
|
||||
stand_icon.Blend(new /icon('human.dmi', "husk_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "husk_l"), ICON_OVERLAY)
|
||||
else if(obese)
|
||||
stand_icon.Blend(new /icon('human.dmi', "fatbody_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "fatbody_l"), ICON_OVERLAY)
|
||||
else
|
||||
stand_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "chest_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
for (var/part in list("head", "arm_left", "arm_right", "hand_left", "hand_right", "leg_left", "leg_right", "foot_left", "foot_right"))
|
||||
stand_icon.Blend(new /icon('human.dmi', "[part]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "[part]_l"), ICON_OVERLAY)
|
||||
|
||||
stand_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "groin_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
// Skin tone
|
||||
if (s_tone >= 0)
|
||||
stand_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
lying_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
else
|
||||
stand_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
lying_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
|
||||
if (underwear < 6 && underwear > 0)
|
||||
if(!obese)
|
||||
stand_icon.Blend(new /icon('human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "underwear[underwear]_[g]_l"), ICON_OVERLAY)
|
||||
if (husk)
|
||||
stand_icon.Blend(new /icon('human.dmi', "husk_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "husk_l"), ICON_OVERLAY)
|
||||
|
||||
else if(obese)
|
||||
stand_icon.Blend(new /icon('human.dmi', "fatbody_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "fatbody_l"), ICON_OVERLAY)
|
||||
/*
|
||||
else
|
||||
if(stand_icon)
|
||||
del(stand_icon)
|
||||
if(lying_icon)
|
||||
del(lying_icon)
|
||||
|
||||
if (mutantrace)
|
||||
return
|
||||
|
||||
var/g = "m"
|
||||
if (gender == MALE)
|
||||
g = "m"
|
||||
else if (gender == FEMALE)
|
||||
g = "f"
|
||||
|
||||
stand_icon = new /icon('human.dmi', "torso_[g]_s")
|
||||
lying_icon = new /icon('human.dmi', "torso_[g]_l")
|
||||
|
||||
var/husk = (mutations & HUSK)
|
||||
var/obese = (mutations & FAT)
|
||||
|
||||
stand_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "chest_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
var/datum/organ/external/head = get_organ("head")
|
||||
if(!head.destroyed)
|
||||
stand_icon.Blend(new /icon('human.dmi', "head_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "head_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
for(var/datum/organ/external/part in organs)
|
||||
if(!istype(part, /datum/organ/external/groin) \
|
||||
&& !istype(part, /datum/organ/external/chest) \
|
||||
&& !istype(part, /datum/organ/external/head) \
|
||||
&& !part.destroyed)
|
||||
var/icon/temp = new /icon('human.dmi', "[part.icon_name]_s")
|
||||
if(part.robot)
|
||||
temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
stand_icon.Blend(temp, ICON_OVERLAY)
|
||||
temp = new /icon('human.dmi', "[part.icon_name]_l")
|
||||
if(part.robot)
|
||||
temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
lying_icon.Blend(temp , ICON_OVERLAY)
|
||||
|
||||
stand_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "groin_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
@@ -1341,30 +1235,31 @@
|
||||
var/icon/husk_s = new /icon('human.dmi', "husk_s")
|
||||
var/icon/husk_l = new /icon('human.dmi', "husk_l")
|
||||
|
||||
for(var/datum/organ/external/part in organs)
|
||||
if(!istype(part, /datum/organ/external/groin) \
|
||||
&& !istype(part, /datum/organ/external/chest) \
|
||||
&& !istype(part, /datum/organ/external/head) \
|
||||
&& part.destroyed)
|
||||
husk_s.Blend(new /icon('dam_mask.dmi', "[part.icon_name]"), ICON_SUBTRACT)
|
||||
husk_l.Blend(new /icon('dam_mask.dmi', "[part.icon_name]2"), ICON_SUBTRACT)
|
||||
|
||||
stand_icon.Blend(husk_s, ICON_OVERLAY)
|
||||
lying_icon.Blend(husk_l, ICON_OVERLAY)
|
||||
else if(obese)
|
||||
stand_icon.Blend(new /icon('human.dmi', "fatbody_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "fatbody_l"), ICON_OVERLAY)
|
||||
{R}*/
|
||||
else
|
||||
stand_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "chest_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
// Skin tone
|
||||
if (s_tone >= 0)
|
||||
stand_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
lying_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
else
|
||||
stand_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
lying_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
// if(pale)
|
||||
// stand_icon.Blend(rgb(100,100,100))
|
||||
// lying_icon.Blend(rgb(100,100,100))
|
||||
for (var/part in list("arm_left", "arm_right", "hand_left", "hand_right", "leg_left", "leg_right", "foot_left", "foot_right"))
|
||||
stand_icon.Blend(new /icon('human.dmi', "[part]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "[part]_l"), ICON_OVERLAY)
|
||||
|
||||
for(var/part in list("head","groin"))
|
||||
stand_icon.Blend(new /icon('human.dmi', "[part]_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "[part]_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
// Skin tone
|
||||
if (s_tone >= 0)
|
||||
stand_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
lying_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
else
|
||||
stand_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
lying_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
|
||||
if (underwear < 6 && underwear > 0)
|
||||
if(!obese)
|
||||
@@ -1375,13 +1270,7 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/update_face()
|
||||
if(organs)
|
||||
var/datum/organ/external/head = get_organ("head")
|
||||
if(head)
|
||||
if(head.destroyed)
|
||||
del(face_standing)
|
||||
del(face_lying)
|
||||
return
|
||||
|
||||
if(!facial_hair_style || !hair_style) return//Seems people like to lose their icons, this should stop the runtimes for now
|
||||
del(face_standing)
|
||||
del(face_lying)
|
||||
@@ -2181,7 +2070,7 @@ It can still be worn/put on as normal.
|
||||
|
||||
//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a seperate proc as it'll be useful elsewhere
|
||||
/mob/living/carbon/human/proc/get_visible_name()
|
||||
if ((wear_mask && !(wear_mask.see_face)) || (head && !(head.see_face))) // can't see their face
|
||||
if ((wear_mask && !(wear_mask.see_face))) //Making this work -Sieve
|
||||
return get_id_name("Unknown")
|
||||
else
|
||||
var/face_name = get_face_name()
|
||||
@@ -2193,7 +2082,7 @@ It can still be worn/put on as normal.
|
||||
//Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when polyacided or when updating a human's name variable
|
||||
/mob/living/carbon/human/proc/get_face_name()
|
||||
var/datum/organ/external/head/head = get_organ("head")
|
||||
if(!head || head.disfigured) //no face!
|
||||
if(!head) //no face!
|
||||
return "Unknown"
|
||||
else
|
||||
return "[real_name]"
|
||||
|
||||
@@ -101,6 +101,7 @@
|
||||
if("hurt")
|
||||
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Punched [src.name] ([src.ckey])</font>")
|
||||
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been punched by [M.name] ([M.ckey])</font>")
|
||||
|
||||
log_attack("<font color='red'>[M.name] ([M.ckey]) punched [src.name] ([src.ckey])</font>")
|
||||
|
||||
|
||||
@@ -113,8 +114,6 @@
|
||||
else
|
||||
attack_verb = "punch"
|
||||
|
||||
if(istajaran(M))
|
||||
attack_verb = "slash"
|
||||
|
||||
var/damage = rand(0, 9)
|
||||
if(!damage)
|
||||
|
||||
@@ -1,12 +1,3 @@
|
||||
//Instead of setting real_name = "Unknown", use this when necessary.
|
||||
//It will prevent the cloned-as-unknown bug and various other derpy things.
|
||||
/mob/living/carbon/human/proc/disfigure_face()
|
||||
var/datum/organ/external/head/head = get_organ("head")
|
||||
if(head && !head.disfigured)
|
||||
head.disfigured = 1
|
||||
name = get_visible_name()
|
||||
src << "\red Your face has become disfigured."
|
||||
|
||||
/mob/living/carbon/human/proc/HealDamage(zone, brute, burn)
|
||||
var/datum/organ/external/E = get_organ(zone)
|
||||
if(istype(E, /datum/organ/external))
|
||||
@@ -36,37 +27,33 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_organ(var/zone)
|
||||
if(!zone)
|
||||
zone = "chest"
|
||||
if(!zone) zone = "chest"
|
||||
for(var/datum/organ/external/O in organs)
|
||||
if(O.name == zone)
|
||||
return O
|
||||
return null
|
||||
|
||||
|
||||
/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0 , var/weapon = null)
|
||||
/mob/living/carbon/human/apply_damage(var/damage = 0,var/damagetype = BRUTE, var/def_zone = null, var/blocked = 0)
|
||||
if((damagetype != BRUTE) && (damagetype != BURN))
|
||||
..(damage, damagetype, def_zone, blocked)
|
||||
return 1
|
||||
|
||||
if(blocked >= 2)
|
||||
return 0
|
||||
if(blocked >= 2) return 0
|
||||
|
||||
var/datum/organ/external/organ = null
|
||||
if(isorgan(def_zone))
|
||||
organ = def_zone
|
||||
else
|
||||
if(!def_zone)
|
||||
def_zone = ran_zone(def_zone)
|
||||
if(!def_zone) def_zone = ran_zone(def_zone)
|
||||
organ = get_organ(check_zone(def_zone))
|
||||
if(!organ)
|
||||
return 0
|
||||
if(!organ) return 0
|
||||
if(blocked)
|
||||
damage = (damage/(blocked+1))
|
||||
|
||||
switch(damagetype)
|
||||
if(BRUTE)
|
||||
organ.take_damage(damage, 0, is_sharp(weapon), weapon)
|
||||
organ.take_damage(damage, 0)
|
||||
if(BURN)
|
||||
organ.take_damage(0, damage)
|
||||
UpdateDamageIcon()
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
fire_alert = 0
|
||||
|
||||
temperature_alert = 0
|
||||
organDelay = 0
|
||||
|
||||
|
||||
/mob/living/carbon/human/Life()
|
||||
@@ -719,58 +718,6 @@
|
||||
handle_regular_status_updates()
|
||||
|
||||
// health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
|
||||
if(!organDelay)
|
||||
var/leg_tally = 2
|
||||
for(var/datum/organ/external/E in organs)
|
||||
|
||||
E.process()
|
||||
|
||||
if(E.robot && prob(E.brute_dam + E.burn_dam))
|
||||
if(E.name == "l_hand" || E.name == "l_arm")
|
||||
if(hand && equipped())
|
||||
drop_item()
|
||||
emote("custom v drops what they were holding, their limb malfunctioning!")
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src)
|
||||
spark_system.attach(src)
|
||||
spark_system.start()
|
||||
spawn(10)
|
||||
del(spark_system)
|
||||
else if(E.name == "r_hand" || E.name == "r_arm")
|
||||
if(!hand && equipped())
|
||||
drop_item()
|
||||
emote("custom v drops what they were holding, their limb malfunctioning!")
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src)
|
||||
spark_system.attach(src)
|
||||
spark_system.start()
|
||||
spawn(10)
|
||||
del(spark_system)
|
||||
else if(E.name == "l_leg" || E.name == "l_foot" \
|
||||
|| E.name == "r_leg" || E.name == "r_foot" && !lying)
|
||||
leg_tally-- // let it fail even if just foot&leg
|
||||
if(E.broken || E.destroyed)
|
||||
if(E.name == "l_hand" || E.name == "l_arm")
|
||||
if(hand && equipped())
|
||||
drop_item()
|
||||
emote("scream")
|
||||
else if(E.name == "r_hand" || E.name == "r_arm")
|
||||
if(!hand && equipped())
|
||||
drop_item()
|
||||
emote("scream")
|
||||
else if(E.name == "l_leg" || E.name == "l_foot" \
|
||||
|| E.name == "r_leg" || E.name == "r_foot" && !lying)
|
||||
leg_tally-- // let it fail even if just foot&leg
|
||||
|
||||
// can't stand
|
||||
if(leg_tally == 0 && !weakened && !(lying || resting))
|
||||
emote("scream")
|
||||
emote("collapse")
|
||||
weakened = 10
|
||||
|
||||
organDelay = 5
|
||||
else
|
||||
organDelay--
|
||||
|
||||
if(getOxyLoss() > 50) Paralyse(3)
|
||||
|
||||
@@ -786,38 +733,6 @@
|
||||
Paralyse(5)
|
||||
|
||||
if (stat != 2) //Alive.
|
||||
/*
|
||||
var/blood_volume = round(vessel.get_reagent_amount("blood"))
|
||||
if(bloodloss)
|
||||
drip(bloodloss)
|
||||
if(!blood_volume)
|
||||
bloodloss = 0
|
||||
else if(blood_volume > 448)
|
||||
if(pale)
|
||||
pale = 0
|
||||
update_body()
|
||||
else if(blood_volume <= 448 && blood_volume > 336)
|
||||
adjustToxLoss(1)
|
||||
if(!pale)
|
||||
pale = 1
|
||||
update_body()
|
||||
var/word = pick("dizzy","woosey","faint")
|
||||
src << "\red You feel [word]"
|
||||
if(prob(1))
|
||||
var/word = pick("dizzy","woosey","faint")
|
||||
src << "\red You feel [word]"
|
||||
else if(blood_volume <= 336 && blood_volume > 244)
|
||||
adjustToxLoss(5)
|
||||
if(!pale)
|
||||
pale = 1
|
||||
update_body()
|
||||
eye_blurry += 6
|
||||
if(prob(15))
|
||||
paralysis += rand(1,3)
|
||||
else if(blood_volume <= 244 && blood_volume > 122)
|
||||
if(toxloss <= 101)
|
||||
toxloss = 101
|
||||
*/
|
||||
if (silent)
|
||||
silent--
|
||||
|
||||
@@ -869,33 +784,6 @@
|
||||
|
||||
if (stuttering) stuttering--
|
||||
|
||||
|
||||
//Carn: marker 4#
|
||||
var/datum/organ/external/head/head = get_organ("head")
|
||||
if(head && !head.disfigured)
|
||||
if(head.brute_dam >= 45 || head.burn_dam >= 45)
|
||||
emote("scream")
|
||||
disfigure_face()
|
||||
// face_op_stage = 0.0
|
||||
/*
|
||||
var/blood_max = 0
|
||||
for(var/datum/organ/external/temp in organs)
|
||||
if(!temp.bleeding || temp.robot) //THAT WAS DUMB.
|
||||
continue
|
||||
// else
|
||||
// if(prob(35))
|
||||
// bloodloss += rand(1,10)
|
||||
if(temp.wounds)
|
||||
for(var/datum/organ/wound/W in temp.wounds)
|
||||
if(W.wound_size && W.bleeding)
|
||||
blood_max += W.wound_size
|
||||
if(temp.destroyed && !temp.gauzed)
|
||||
blood_max += 50 //Yer missing a fucking limb.
|
||||
bloodloss = min(bloodloss+1,(blood_max))
|
||||
*/
|
||||
|
||||
|
||||
|
||||
if (eye_blind)
|
||||
eye_blind--
|
||||
blinded = 1
|
||||
@@ -994,10 +882,6 @@
|
||||
if (mutantrace == "lizard" || mutantrace == "metroid")
|
||||
see_in_dark = 3
|
||||
see_invisible = 1
|
||||
|
||||
else if (istajaran(src))
|
||||
see_in_dark = 8
|
||||
|
||||
else if (druggy) // If drugged~
|
||||
see_in_dark = 2
|
||||
//see_invisible regulated by drugs themselves.
|
||||
|
||||
@@ -88,6 +88,4 @@
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/metroid))
|
||||
return 1
|
||||
if (istype(other, /mob/living/carbon/human/tajaran))
|
||||
return 1
|
||||
return ..()
|
||||
@@ -161,37 +161,10 @@
|
||||
src.nutrition = 400
|
||||
src.bodytemperature = 310
|
||||
//src.health = 100
|
||||
if(ishuman(src))
|
||||
var/mob/living/carbon/human/H = src
|
||||
for(var/datum/organ/external/e in src:organs)
|
||||
if(e.destroyed)
|
||||
e.destroyed = 0
|
||||
e.brute_dam = 0.0
|
||||
e.burn_dam = 0.0
|
||||
e.bandaged = 0.0
|
||||
e.max_damage = initial(e.max_damage)
|
||||
e.bleeding = 0
|
||||
e.open = 0
|
||||
e.broken = 0
|
||||
e.destroyed = 0
|
||||
e.perma_injury = 0
|
||||
|
||||
if(e.wounds)
|
||||
for(var/datum/organ/wound/W in e.wounds)
|
||||
del(W)
|
||||
e.update_icon()
|
||||
src:update_body()
|
||||
src:update_face()
|
||||
src:UpdateDamageIcon()
|
||||
|
||||
H.vessel:clear_reagents()
|
||||
H.vessel:add_reagent("blood",560)
|
||||
|
||||
src.heal_overall_damage(1000, 1000)
|
||||
src.buckled = initial(src.buckled)
|
||||
src.handcuffed = initial(src.handcuffed)
|
||||
if(src.stat > 1)
|
||||
src.stat = CONSCIOUS
|
||||
if(src.stat > 1) src.stat = CONSCIOUS
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
@@ -615,19 +615,6 @@
|
||||
|
||||
if ( !usr || usr==src || !istype(src.loc,/turf) ) //if there's no person pulling OR the person is pulling themself OR the object being pulled is inside something: abort!
|
||||
return
|
||||
|
||||
if(ishuman(usr))
|
||||
if(usr.hand) // if he's using his left hand.
|
||||
var/datum/organ/external/temp = usr:get_organ("l_hand")
|
||||
if(temp.destroyed)
|
||||
usr << "\blue You look at your stump."
|
||||
return
|
||||
else
|
||||
var/datum/organ/external/temp = usr:get_organ("r_hand")
|
||||
if(temp.destroyed)
|
||||
usr << "\blue You look at your stump."
|
||||
return
|
||||
|
||||
if (!( anchored ))
|
||||
usr.pulling = src
|
||||
if(ismob(src))
|
||||
|
||||
@@ -243,7 +243,6 @@
|
||||
|
||||
var/robot_talk_understand = 0
|
||||
var/alien_talk_understand = 0
|
||||
var/taj_talk_understand = 0
|
||||
|
||||
//You can guess what these are for. --SkyMarshal
|
||||
var/list/atom/hallucinations = list()
|
||||
|
||||
@@ -60,11 +60,6 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/istajaran(A)
|
||||
if(istype(A, /mob/living/carbon/human/tajaran))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/*proc/ishivebot(A)
|
||||
if(A && istype(A, /mob/living/silicon/hivebot))
|
||||
return 1
|
||||
@@ -110,21 +105,12 @@ proc/isorgan(A)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
proc/hasorgans(A)
|
||||
if(ishuman(A) || ismonkey(A))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
|
||||
/proc/hsl2rgb(h, s, l)
|
||||
return
|
||||
|
||||
|
||||
/proc/check_zone(zone)
|
||||
if(!zone)
|
||||
return "chest"
|
||||
if(!zone) return "chest"
|
||||
switch(zone)
|
||||
if("eyes")
|
||||
zone = "head"
|
||||
|
||||
@@ -1,83 +1,17 @@
|
||||
/datum/organ
|
||||
|
||||
|
||||
/datum/organ/var
|
||||
name = "organ"
|
||||
mob/living/carbon/human/owner = null
|
||||
|
||||
list/datum/autopsy_data/autopsy_data = list()
|
||||
list/trace_chemicals = list() // traces of chemicals in the organ,
|
||||
// links chemical IDs to number of ticks for which they'll stay in the blood
|
||||
|
||||
|
||||
/datum/organ/proc/process()
|
||||
return 0
|
||||
|
||||
/datum/organ/proc/receive_chem(chemical as obj)
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/make_human_organs()
|
||||
|
||||
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)
|
||||
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 = get_organ("chest")
|
||||
part.children = list(get_organ("r_leg"),get_organ("l_leg"),get_organ("r_arm"),get_organ("l_arm"),get_organ("groin"),get_organ("head"))
|
||||
part = get_organ("head")
|
||||
part.parent = get_organ("chest")
|
||||
part = get_organ("groin")
|
||||
part.parent = get_organ("chest")
|
||||
part = get_organ("r_leg")
|
||||
part.children = list(get_organ("r_foot"))
|
||||
part.parent = get_organ("chest")
|
||||
part = get_organ("l_leg")
|
||||
part.children = list(get_organ("l_foot"))
|
||||
part.parent = get_organ("chest")
|
||||
part = get_organ("r_arm")
|
||||
part.children = list(get_organ("r_hand"))
|
||||
part.parent = get_organ("chest")
|
||||
part = get_organ("l_arm")
|
||||
part.children = list(get_organ("l_hand"))
|
||||
part.parent = get_organ("chest")
|
||||
part = get_organ("r_foot")
|
||||
part.parent = get_organ("r_leg")
|
||||
part = get_organ("l_foot")
|
||||
part.parent = get_organ("l_leg")
|
||||
part = get_organ("r_hand")
|
||||
part.parent = get_organ("r_arm")
|
||||
part = get_organ("l_hand")
|
||||
part.parent = get_organ("l_arm")
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/autopsy_data
|
||||
var
|
||||
weapon = null
|
||||
pretend_weapon = null
|
||||
damage = 0
|
||||
hits = 0
|
||||
time_inflicted = 0
|
||||
name = "organ"
|
||||
owner = null
|
||||
|
||||
|
||||
proc/process()
|
||||
return 0
|
||||
|
||||
|
||||
proc/receive_chem(chemical as obj)
|
||||
return 0
|
||||
|
||||
|
||||
proc/copy()
|
||||
var/datum/autopsy_data/W = new()
|
||||
W.weapon = weapon
|
||||
W.pretend_weapon = pretend_weapon
|
||||
W.damage = damage
|
||||
W.hits = hits
|
||||
W.time_inflicted = time_inflicted
|
||||
return W
|
||||
|
||||
/****************************************************
|
||||
EXTERNAL ORGANS
|
||||
@@ -93,230 +27,47 @@
|
||||
burn_dam = 0
|
||||
bandaged = 0
|
||||
max_damage = 0
|
||||
wound_size = 0
|
||||
max_size = 0
|
||||
tmp/list/obj/item/weapon/implant/implant = list()
|
||||
|
||||
display_name
|
||||
tmp/list/wounds = list()
|
||||
tmp/bleeding = 0
|
||||
tmp/perma_injury = 0
|
||||
tmp/perma_dmg = 0
|
||||
tmp/broken = 0
|
||||
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!
|
||||
tmp/cutaway = 0 //First part of limb reattachment.
|
||||
tmp/attachable = 0 //Can limb be attached?
|
||||
min_broken_damage = 30
|
||||
datum/organ/external/parent
|
||||
list/datum/organ/external/children
|
||||
damage_msg = "\red You feel a intense pain"
|
||||
|
||||
var/open = 0
|
||||
var/stage = 0
|
||||
var/wound = 0
|
||||
|
||||
New(mob/living/carbon/H)
|
||||
..(H)
|
||||
if(!display_name)
|
||||
display_name = name
|
||||
if(istype(H))
|
||||
owner = H
|
||||
H:organs.Add(src)
|
||||
|
||||
Del()
|
||||
for(var/datum/organ/wound/W in wounds)
|
||||
del(W)
|
||||
..()
|
||||
|
||||
proc/take_damage(brute, burn, sharp, used_weapon = null, spread=0)
|
||||
if((brute <= 0) && (burn <= 0))
|
||||
return 0
|
||||
if(destroyed)
|
||||
return 0
|
||||
if(robot)
|
||||
brute *= 0.66 //~2/3 damage for ROBOLIMBS
|
||||
burn *= 0.66 //~2/3 damage for ROBOLIMBS
|
||||
|
||||
if(owner && !robot)
|
||||
owner.pain(display_name, (brute+burn)*3, 1)
|
||||
if(sharp)
|
||||
var/nux = brute * rand(10,15)
|
||||
if(brute_dam >= max_damage)
|
||||
if(prob(5 * brute))
|
||||
// for(var/mob/M in viewers(owner))
|
||||
// M.show_message("\red [owner.name]'s [display_name] flies off.")
|
||||
destroyed = 1
|
||||
droplimb()
|
||||
return
|
||||
else if(prob(nux))
|
||||
createwound(max(1,min(6,round(brute/10) + rand(0,1))),0,brute)
|
||||
if(!robot) 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*2) && !sharp)
|
||||
createwound(rand(4,6),0,brute)
|
||||
else if(!sharp)
|
||||
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,1))),2,burn)
|
||||
proc/take_damage(brute, burn)
|
||||
if((brute <= 0) && (burn <= 0)) return 0
|
||||
if((src.brute_dam + src.burn_dam + brute + burn) < src.max_damage)
|
||||
src.brute_dam += brute
|
||||
src.burn_dam += burn
|
||||
else
|
||||
var/can_inflict = max_damage - (brute_dam + burn_dam)
|
||||
var/can_inflict = src.max_damage - (src.brute_dam + src.burn_dam)
|
||||
if(can_inflict)
|
||||
if (brute > 0 && burn > 0)
|
||||
brute = can_inflict/2
|
||||
burn = can_inflict/2
|
||||
var/ratio = brute / (brute + burn)
|
||||
brute_dam += ratio * can_inflict
|
||||
burn_dam += (1 - ratio) * can_inflict
|
||||
src.brute_dam += ratio * can_inflict
|
||||
src.burn_dam += (1 - ratio) * can_inflict
|
||||
else
|
||||
if (brute > 0)
|
||||
brute = can_inflict
|
||||
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)
|
||||
src.brute_dam += brute
|
||||
else
|
||||
burn = can_inflict
|
||||
burn_dam += burn
|
||||
createwound(max(1,min(6,round(burn/10) + rand(0,1))),2,burn)
|
||||
else if(!robot)
|
||||
var/passed_dam = (brute + burn) - 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
|
||||
if(!spread)
|
||||
var/datum/organ/external/target = pick(possible_points)
|
||||
if(brute)
|
||||
target.take_damage(passed_dam, 0, sharp, used_weapon,1)
|
||||
else
|
||||
target.take_damage(0, passed_dam, sharp, used_weapon,1)
|
||||
src.burn_dam += burn
|
||||
else
|
||||
droplimb(1) //Robot limbs just kinda fail at full damage.
|
||||
return 0
|
||||
|
||||
|
||||
if(broken)
|
||||
owner.emote("scream")
|
||||
|
||||
if(used_weapon) add_wound(used_weapon, brute + burn)
|
||||
|
||||
var/result = update_icon()
|
||||
var/result = src.update_icon()
|
||||
return result
|
||||
|
||||
|
||||
proc/heal_damage(brute, burn, internal = 0, robo_repair = 0)
|
||||
if(robot && !robo_repair)
|
||||
return
|
||||
var/brute_to_heal = 0
|
||||
var/brute_wounds = list()
|
||||
var/burn_to_heal = 0
|
||||
var/burn_wounds = list()
|
||||
for(var/datum/organ/wound/W in wounds)
|
||||
if(W.wound_type > 1 && W.damage)
|
||||
burn_to_heal += W.damage
|
||||
burn_wounds += W
|
||||
else if(W.damage)
|
||||
brute_to_heal += W.damage
|
||||
brute_wounds += W
|
||||
if(brute && brute <= brute_to_heal)
|
||||
for(var/datum/organ/wound/W in brute_wounds)
|
||||
if(brute >= W.damage)
|
||||
brute_dam -= W.damage
|
||||
brute -= W.damage
|
||||
W.damage = 0
|
||||
W.initial_dmg = 0
|
||||
W.stopbleeding(1)
|
||||
else
|
||||
W.damage -= brute
|
||||
W.initial_dmg -= brute
|
||||
W.stopbleeding()
|
||||
else if(brute)
|
||||
for(var/datum/organ/wound/W in brute_wounds)
|
||||
W.damage = 0
|
||||
W.initial_dmg = 0
|
||||
W.stopbleeding(1)
|
||||
brute_dam = 0
|
||||
if(burn && burn <= burn_to_heal)
|
||||
for(var/datum/organ/wound/W in burn_wounds)
|
||||
if(burn >= W.damage)
|
||||
burn_dam -= W.damage
|
||||
burn -= W.damage
|
||||
W.damage = 0
|
||||
W.initial_dmg = 0
|
||||
W.stopbleeding()
|
||||
else
|
||||
W.damage -= burn
|
||||
W.initial_dmg -= burn
|
||||
W.stopbleeding()
|
||||
else if(burn)
|
||||
for(var/datum/organ/wound/W in burn_wounds)
|
||||
W.damage = 0
|
||||
W.initial_dmg = 0
|
||||
W.stopbleeding()
|
||||
burn_dam = 0
|
||||
if(internal)
|
||||
broken = 0
|
||||
perma_injury = 0
|
||||
// if all damage is healed, replace the wounds with scars
|
||||
if(brute_dam + burn_dam == 0)
|
||||
for(var/V in autopsy_data)
|
||||
var/datum/autopsy_data/W = autopsy_data[V]
|
||||
del W
|
||||
autopsy_data = list()
|
||||
proc/heal_damage(brute, burn)
|
||||
src.brute_dam = max(0, src.brute_dam - brute)
|
||||
src.burn_dam = max(0, src.burn_dam - burn)
|
||||
return update_icon()
|
||||
|
||||
proc/add_wound(var/used_weapon, var/damage)
|
||||
var/datum/autopsy_data/W = autopsy_data[used_weapon]
|
||||
if(!W)
|
||||
W = new()
|
||||
W.weapon = used_weapon
|
||||
autopsy_data[used_weapon] = W
|
||||
|
||||
W.hits += 1
|
||||
W.damage += damage
|
||||
W.time_inflicted = world.time
|
||||
|
||||
|
||||
|
||||
proc/get_damage() //returns total damage
|
||||
return max(brute_dam + burn_dam - perma_injury,perma_injury) //could use health?
|
||||
return src.brute_dam + src.burn_dam //could use src.health?
|
||||
|
||||
proc/get_damage_brute()
|
||||
return max(brute_dam+perma_injury,perma_injury)
|
||||
|
||||
proc/get_damage_fire()
|
||||
return burn_dam
|
||||
|
||||
process()
|
||||
if(destroyed)
|
||||
if(!destspawn)
|
||||
droplimb()
|
||||
return
|
||||
if(broken == 0)
|
||||
perma_dmg = 0
|
||||
if(parent)
|
||||
if(parent.destroyed)
|
||||
destroyed = 1
|
||||
owner:update_body()
|
||||
return
|
||||
if(brute_dam > min_broken_damage && !robot)
|
||||
if(broken == 0)
|
||||
//owner.unlock_medal("Broke Yarrr Bones!", 0, "Break a bone.", "easy")
|
||||
owner.visible_message("\red You hear a loud cracking sound coming from [owner.name].","\red <b>Something feels like it shattered in your [display_name]!</b>","You hear a sickening crack.")
|
||||
owner.emote("scream")
|
||||
broken = 1
|
||||
wound = pick("broken","fracture","hairline fracture") //Randomise in future. Edit: Randomized. --SkyMarshal
|
||||
perma_injury = brute_dam
|
||||
return
|
||||
return
|
||||
|
||||
// new damage icon system
|
||||
// returns just the brute/burn damage code
|
||||
@@ -326,18 +77,18 @@
|
||||
|
||||
if(burn_dam ==0)
|
||||
tburn =0
|
||||
else if (burn_dam < (max_damage * 0.25 / 2))
|
||||
else if (src.burn_dam < (src.max_damage * 0.25 / 2))
|
||||
tburn = 1
|
||||
else if (burn_dam < (max_damage * 0.75 / 2))
|
||||
else if (src.burn_dam < (src.max_damage * 0.75 / 2))
|
||||
tburn = 2
|
||||
else
|
||||
tburn = 3
|
||||
|
||||
if (brute_dam == 0)
|
||||
if (src.brute_dam == 0)
|
||||
tbrute = 0
|
||||
else if (brute_dam < (max_damage * 0.25 / 2))
|
||||
else if (src.brute_dam < (src.max_damage * 0.25 / 2))
|
||||
tbrute = 1
|
||||
else if (brute_dam < (max_damage * 0.75 / 2))
|
||||
else if (src.brute_dam < (src.max_damage * 0.75 / 2))
|
||||
tbrute = 2
|
||||
else
|
||||
tbrute = 3
|
||||
@@ -347,148 +98,13 @@
|
||||
// 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 = damage_state_text()
|
||||
if (n_is != damage_state)
|
||||
damage_state = n_is
|
||||
var/n_is = src.damage_state_text()
|
||||
if (n_is != src.damage_state)
|
||||
src.damage_state = n_is
|
||||
return 1
|
||||
return 0
|
||||
|
||||
proc/droplimb(var/override = 0,var/no_explode = 0)
|
||||
if(override)
|
||||
destroyed = 1
|
||||
if(destroyed)
|
||||
if(implant)
|
||||
for(var/implants in implant)
|
||||
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,1)
|
||||
var/obj/item/weapon/organ/H
|
||||
switch(body_part)
|
||||
if(UPPER_TORSO)
|
||||
owner.gib()
|
||||
if(LOWER_TORSO)
|
||||
owner << "\red You are now sterile."
|
||||
if(HEAD)
|
||||
H = new /obj/item/weapon/organ/head(owner.loc, owner)
|
||||
if(ishuman(owner))
|
||||
if(owner.gender == FEMALE)
|
||||
H.icon_state = "head_f_l"
|
||||
H.overlays += owner.face_lying
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "head_l"
|
||||
//H.overlays += owner.face_lying
|
||||
H:transfer_identity(owner)
|
||||
H.pixel_x = -10
|
||||
H.pixel_y = 6
|
||||
if(!owner.original_name)
|
||||
owner.original_name = owner.real_name
|
||||
H.name = "[owner.original_name]'s head"
|
||||
|
||||
owner.update_face()
|
||||
owner.update_body()
|
||||
owner.death()
|
||||
if(ARM_RIGHT)
|
||||
H = new /obj/item/weapon/organ/r_arm(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "r_arm_l"
|
||||
if(ARM_LEFT)
|
||||
H = new /obj/item/weapon/organ/l_arm(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "l_arm_l"
|
||||
if(LEG_RIGHT)
|
||||
H = new /obj/item/weapon/organ/r_leg(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "r_leg_l"
|
||||
if(LEG_LEFT)
|
||||
H = new /obj/item/weapon/organ/l_leg(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "l_leg_l"
|
||||
if(HAND_RIGHT)
|
||||
H = new /obj/item/weapon/organ/r_hand(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "r_hand_l"
|
||||
if(HAND_LEFT)
|
||||
H = new /obj/item/weapon/organ/l_hand(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "l_hand_l"
|
||||
if(FOOT_RIGHT)
|
||||
H = new /obj/item/weapon/organ/r_foot/(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "r_foot_l"
|
||||
if(FOOT_LEFT)
|
||||
H = new /obj/item/weapon/organ/l_foot(owner.loc, owner)
|
||||
if(ismonkey(owner))
|
||||
H.icon_state = "l_foot_l"
|
||||
if(ismonkey(owner))
|
||||
H.icon = 'monkey.dmi'
|
||||
if(istajaran(owner))
|
||||
H.icon = 'tajaran.dmi'
|
||||
var/lol = pick(cardinal)
|
||||
step(H,lol)
|
||||
destspawn = 1
|
||||
if(!robot)
|
||||
owner.visible_message("\red [owner.name]'s [display_name] flies off in an arc.",\
|
||||
"<span class='moderate'><b>Your [display_name] goes flying off!</b></span>",\
|
||||
"You hear a terrible sound of ripping tendons and flesh.")
|
||||
else
|
||||
owner.visible_message("\red [owner.name]'s [display_name] explodes violently!",\
|
||||
"\red <b>Your [display_name] explodes!</b>",\
|
||||
"You hear an explosion followed by a scream!")
|
||||
if(!no_explode)
|
||||
explosion(get_turf(owner),-1,-1,2,3)
|
||||
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
|
||||
spark_system.set_up(5, 0, src)
|
||||
spark_system.attach(src)
|
||||
spark_system.start()
|
||||
spawn(10)
|
||||
del(spark_system)
|
||||
for(var/datum/organ/wound/W in wounds)
|
||||
W.update_health()
|
||||
del(W)
|
||||
owner.update_body()
|
||||
owner.update_clothing()
|
||||
|
||||
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.wound_type == type && W.wound_size <= 3 && size <= 3 && ((!W.is_healing && type == 1) || (!W.healing_state && type != 1)))
|
||||
possible_wounds += W
|
||||
if(hasorgans(owner))
|
||||
if(!possible_wounds.len || prob(20))
|
||||
var/datum/organ/wound/W = new(src)
|
||||
bleeding = max(!type,bleeding) //Sharp objects cause bleeding.
|
||||
W.bleeding = !type
|
||||
// owner:bloodloss += 10 * size
|
||||
W.damage = damage
|
||||
W.initial_dmg = damage
|
||||
W.wound_type = type
|
||||
W.wound_size = size
|
||||
W.owner = owner
|
||||
W.parent = src
|
||||
if(type == 1)
|
||||
spawn W.become_scar()
|
||||
else
|
||||
spawn W.start_close() //Let small cuts close themselves.
|
||||
wounds += W
|
||||
else
|
||||
var/datum/organ/wound/W = pick(possible_wounds)
|
||||
bleeding = max(!type,bleeding) //Sharp objects cause bleeding.
|
||||
W.bleeding = max(!type,W.bleeding)
|
||||
// owner:bloodloss += 10 * size
|
||||
W.damage += damage
|
||||
W.initial_dmg += damage
|
||||
W.wound_size = max(1,min(6,round(W.damage/10) + rand(0,1)))
|
||||
|
||||
proc/emp_act(severity)
|
||||
if(!robot) return
|
||||
if(prob(30*severity))
|
||||
take_damage(4(4-severity), 0, 1, used_weapon = "EMP")
|
||||
else
|
||||
droplimb(1)
|
||||
|
||||
|
||||
|
||||
proc/getDisplayName()
|
||||
switch(src.name)
|
||||
if("l_leg")
|
||||
@@ -499,141 +115,9 @@
|
||||
return "left arm"
|
||||
if("r_arm")
|
||||
return "right arm"
|
||||
if("l_foot")
|
||||
return "left foot"
|
||||
if("r_foot")
|
||||
return "right foot"
|
||||
if("l_hand")
|
||||
return "left hand"
|
||||
if("r_hand")
|
||||
return "right hand"
|
||||
else
|
||||
return src.name
|
||||
|
||||
/datum/organ/wound
|
||||
name = "wound"
|
||||
var/wound_type = 0 //0 = cut, 1 = bruise, 2 = burn
|
||||
var/damage = 0 //How much damage it caused.
|
||||
var/initial_dmg = 0
|
||||
var/wound_size = 1
|
||||
var/datum/organ/external/parent
|
||||
var/bleeding = 0 //You got wounded, of course it's bleeding. -- Scratch that. Rewrote it.
|
||||
var/healing_state = 0
|
||||
var/is_healing = 0
|
||||
var/slowheal = 3
|
||||
|
||||
proc/start_close()
|
||||
if(parent.robot)
|
||||
return
|
||||
sleep(rand(1800,3000)) //3-5 minutes
|
||||
if(prob(50) && wound_size == 1)
|
||||
parent.wounds.Remove(src)
|
||||
update_health(1)
|
||||
del(src)
|
||||
else if(prob(33) && wound_size < 3)
|
||||
stopbleeding()
|
||||
return
|
||||
sleep(rand(1800,3000))
|
||||
if(wound_size == 1) //Small cuts heal in 6-10 minutes.
|
||||
parent.wounds.Remove(src)
|
||||
update_health(1)
|
||||
del(src)
|
||||
else if(prob(50) && wound_size < 5 && bleeding)
|
||||
stopbleeding()
|
||||
return
|
||||
if(wound_size < 5 && bleeding) //Give it a chance to stop bleeding on it's own.
|
||||
spawn while(1)
|
||||
sleep(1200)
|
||||
if(prob(50))
|
||||
stopbleeding()
|
||||
return
|
||||
return
|
||||
|
||||
proc/stopbleeding(var/bleed = 0)
|
||||
if(is_healing)
|
||||
return 0
|
||||
// owner:bloodloss -= 10 * src.wound_size
|
||||
parent.bleeding = min(bleed,bleeding)
|
||||
for(var/datum/organ/wound/W in parent)
|
||||
if(W.bleeding && W != src)
|
||||
parent.bleeding = 1
|
||||
break
|
||||
bleeding = min(bleed,bleeding)
|
||||
is_healing = 1
|
||||
slowheal = 1
|
||||
if(!healing_state)
|
||||
spawn become_scar() //spawn off the process of becoming a scar.
|
||||
return 1
|
||||
|
||||
proc/become_scar()
|
||||
if(parent.robot)
|
||||
return
|
||||
healing_state = 1 //Patched
|
||||
spawn(200*slowheal) //~20-60 seconds
|
||||
update_health(5) //Heals some.
|
||||
|
||||
sleep(rand(1800,3000)*slowheal) //3-5 minutes
|
||||
|
||||
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)
|
||||
parent.wounds.Remove(src)
|
||||
del(src)
|
||||
|
||||
healing_state = 2 //Noticibly healing.
|
||||
update_health(2) //Heals more.
|
||||
|
||||
sleep(rand(1800,3000)*slowheal) //3-5 minutes
|
||||
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)
|
||||
del(src)
|
||||
healing_state = 3 //Angry red scar
|
||||
update_health(1) //Heals the rest of the way.
|
||||
|
||||
|
||||
sleep(rand(6000,9000)*slowheal) //10-15 minutes
|
||||
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 || !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)
|
||||
del(src)
|
||||
healing_state = 5 //Faded scar
|
||||
return
|
||||
|
||||
proc/update_health(var/percent = 1)
|
||||
if(!owner || owner.stat == 2)
|
||||
return
|
||||
damage = max(damage - damage/percent,0) //Remove that amount of the damage
|
||||
if(wound_type > 1)
|
||||
parent.burn_dam = max(parent.burn_dam - (initial_dmg - damage),0)
|
||||
else
|
||||
parent.brute_dam = max(parent.brute_dam - (initial_dmg - damage),0)
|
||||
initial_dmg = damage //reset it for further updates.
|
||||
parent.owner.updatehealth()
|
||||
|
||||
|
||||
|
||||
|
||||
/****************************************************
|
||||
|
||||
@@ -2,207 +2,61 @@
|
||||
name = "chest"
|
||||
icon_name = "chest"
|
||||
max_damage = 150
|
||||
min_broken_damage = 75
|
||||
body_part = UPPER_TORSO
|
||||
|
||||
/datum/organ/external/groin
|
||||
/*/datum/organ/external/groin
|
||||
name = "groin"
|
||||
icon_name = "diaper"
|
||||
max_damage = 115
|
||||
min_broken_damage = 70
|
||||
icon_name = "groin"
|
||||
body_part = LOWER_TORSO
|
||||
|
||||
*/
|
||||
/datum/organ/external/head
|
||||
name = "head"
|
||||
icon_name = "head"
|
||||
max_damage = 75
|
||||
min_broken_damage = 40
|
||||
max_damage = 125
|
||||
body_part = HEAD
|
||||
var/disfigured = 0
|
||||
|
||||
/datum/organ/external/l_arm
|
||||
name = "l_arm"
|
||||
display_name = "left arm"
|
||||
icon_name = "l_arm"
|
||||
max_damage = 75
|
||||
min_broken_damage = 30
|
||||
body_part = ARM_LEFT
|
||||
|
||||
/datum/organ/external/l_leg
|
||||
name = "l_leg"
|
||||
display_name = "left leg"
|
||||
icon_name = "l_leg"
|
||||
max_damage = 75
|
||||
min_broken_damage = 30
|
||||
body_part = LEG_LEFT
|
||||
|
||||
/datum/organ/external/r_arm
|
||||
name = "r_arm"
|
||||
display_name = "right arm"
|
||||
icon_name = "r_arm"
|
||||
max_damage = 75
|
||||
min_broken_damage = 30
|
||||
body_part = ARM_RIGHT
|
||||
|
||||
/datum/organ/external/r_leg
|
||||
name = "r_leg"
|
||||
display_name = "right leg"
|
||||
icon_name = "r_leg"
|
||||
max_damage = 75
|
||||
min_broken_damage = 30
|
||||
body_part = LEG_RIGHT
|
||||
|
||||
/*Leaving these here in case we want to use them later
|
||||
/datum/organ/external/l_foot
|
||||
name = "l_foot"
|
||||
display_name = "left foot"
|
||||
name = "l foot"
|
||||
icon_name = "l_foot"
|
||||
max_damage = 40
|
||||
min_broken_damage = 15
|
||||
body_part = FOOT_LEFT
|
||||
|
||||
/datum/organ/external/r_foot
|
||||
name = "r_foot"
|
||||
display_name = "right foot"
|
||||
name = "r foot"
|
||||
icon_name = "r_foot"
|
||||
max_damage = 40
|
||||
min_broken_damage = 15
|
||||
body_part = FOOT_RIGHT
|
||||
|
||||
/datum/organ/external/r_hand
|
||||
name = "r_hand"
|
||||
display_name = "right hand"
|
||||
name = "r hand"
|
||||
icon_name = "r_hand"
|
||||
max_damage = 40
|
||||
min_broken_damage = 15
|
||||
body_part = HAND_RIGHT
|
||||
|
||||
/datum/organ/external/l_hand
|
||||
name = "l_hand"
|
||||
display_name = "left hand"
|
||||
name = "l hand"
|
||||
icon_name = "l_hand"
|
||||
max_damage = 40
|
||||
min_broken_damage = 15
|
||||
body_part = HAND_LEFT
|
||||
|
||||
|
||||
|
||||
obj/item/weapon/organ
|
||||
icon = 'human.dmi'
|
||||
|
||||
obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
..(loc)
|
||||
if(!istype(H))
|
||||
return
|
||||
if(H.dna)
|
||||
if(blood_DNA && blood_DNA.len)
|
||||
blood_DNA.len++
|
||||
blood_DNA[blood_DNA.len] = list(H.dna.unique_enzymes, H.dna.b_type)
|
||||
else
|
||||
blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
|
||||
|
||||
var/icon/I = new /icon(icon, icon_state)
|
||||
|
||||
if (H.s_tone >= 0)
|
||||
I.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD)
|
||||
else
|
||||
I.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
|
||||
icon = I
|
||||
|
||||
obj/item/weapon/organ/head
|
||||
name = "head"
|
||||
icon_state = "head_m_l"
|
||||
var/mob/living/carbon/brain/brainmob
|
||||
var/brain_op_stage = 0
|
||||
|
||||
obj/item/weapon/organ/head/New()
|
||||
..()
|
||||
spawn(5)
|
||||
if(brainmob && brainmob.client)
|
||||
brainmob.client.screen.len = null //clear the hud
|
||||
|
||||
obj/item/weapon/organ/head/proc/transfer_identity(var/mob/living/carbon/human/H)//Same deal as the regular brain proc. Used for human-->head
|
||||
brainmob = new(src)
|
||||
brainmob.name = H.real_name
|
||||
brainmob.real_name = H.real_name
|
||||
brainmob.dna = H.dna
|
||||
if(H.mind)
|
||||
H.mind.transfer_to(brainmob)
|
||||
brainmob.container = src
|
||||
if (brainmob.client)
|
||||
spawn(10)
|
||||
if(brainmob.client)
|
||||
verbs += /mob/proc/ghost
|
||||
|
||||
obj/item/weapon/organ/head/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/scalpel))
|
||||
switch(brain_op_stage)
|
||||
if(0)
|
||||
for(var/mob/O in (oviewers(brainmob) - user))
|
||||
O.show_message("\red [brainmob] is beginning to have \his head cut open with [src] by [user].", 1)
|
||||
brainmob << "\red [user] begins to cut open your head with [src]!"
|
||||
user << "\red You cut [brainmob]'s head open with [src]!"
|
||||
|
||||
brain_op_stage = 1
|
||||
|
||||
if(2)
|
||||
for(var/mob/O in (oviewers(brainmob) - user))
|
||||
O.show_message("\red [brainmob] is having \his connections to the brain delicately severed with [src] by [user].", 1)
|
||||
brainmob << "\red [user] begins to cut open your head with [src]!"
|
||||
user << "\red You cut [brainmob]'s head open with [src]!"
|
||||
|
||||
brain_op_stage = 3.0
|
||||
else
|
||||
..()
|
||||
else if(istype(W,/obj/item/weapon/circular_saw))
|
||||
switch(brain_op_stage)
|
||||
if(1)
|
||||
for(var/mob/O in (oviewers(brainmob) - user))
|
||||
O.show_message("\red [brainmob] has \his skull sawed open with [src] by [user].", 1)
|
||||
brainmob << "\red [user] begins to saw open your head with [src]!"
|
||||
user << "\red You saw [brainmob]'s head open with [src]!"
|
||||
|
||||
brain_op_stage = 2
|
||||
if(3)
|
||||
for(var/mob/O in (oviewers(brainmob) - user))
|
||||
O.show_message("\red [brainmob] has \his spine's connection to the brain severed with [src] by [user].", 1)
|
||||
brainmob << "\red [user] severs your brain's connection to the spine with [src]!"
|
||||
user << "\red You sever [brainmob]'s brain's connection to the spine with [src]!"
|
||||
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Debrained [brainmob.name] ([brainmob.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
|
||||
brainmob.attack_log += "\[[time_stamp()]\]<font color='orange'> Debrained by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
|
||||
log_admin("ATTACK: [brainmob] ([brainmob.ckey]) debrained [user] ([user.ckey]).")
|
||||
message_admins("ATTACK: [brainmob] ([brainmob.ckey]) debrained [user] ([user.ckey]).")
|
||||
|
||||
var/obj/item/brain/B = new(loc)
|
||||
B.transfer_identity(brainmob)
|
||||
|
||||
brain_op_stage = 4.0
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
|
||||
obj/item/weapon/organ/l_arm
|
||||
name = "left arm"
|
||||
icon_state = "l_arm_l"
|
||||
obj/item/weapon/organ/l_foot
|
||||
name = "left foot"
|
||||
icon_state = "l_foot_l"
|
||||
obj/item/weapon/organ/l_hand
|
||||
name = "left hand"
|
||||
icon_state = "l_hand_l"
|
||||
obj/item/weapon/organ/l_leg
|
||||
name = "left leg"
|
||||
icon_state = "l_leg_l"
|
||||
obj/item/weapon/organ/r_arm
|
||||
name = "right arm"
|
||||
icon_state = "r_arm_l"
|
||||
obj/item/weapon/organ/r_foot
|
||||
name = "right foot"
|
||||
icon_state = "r_foot_l"
|
||||
obj/item/weapon/organ/r_hand
|
||||
name = "right hand"
|
||||
icon_state = "r_hand_l"
|
||||
obj/item/weapon/organ/r_leg
|
||||
name = "right leg"
|
||||
icon_state = "r_leg_l"
|
||||
*/
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
silenced = 0
|
||||
recoil = 0
|
||||
ejectshell = 1
|
||||
determination = 0
|
||||
|
||||
proc
|
||||
load_into_chamber()
|
||||
@@ -39,8 +38,33 @@
|
||||
for(var/obj/O in contents)
|
||||
O.emp_act(severity)
|
||||
|
||||
/*
|
||||
New()
|
||||
spawn(15) // Hack, but I need to wait for sub-calls to load the gun before loading the chamber. 1.5 seconds should be fine.
|
||||
load_into_chamber()
|
||||
|
||||
afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)//TODO: go over this
|
||||
if(inrange)
|
||||
if(!doafterattack(target , src))
|
||||
return //we're placing gun on a table or in backpack. What the fuck was the previous check?
|
||||
if(istype(target, /obj/machinery/recharger) && istype(src, /obj/item/weapon/gun/energy))
|
||||
return//Shouldnt flag take care of this?
|
||||
{R} */
|
||||
|
||||
afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, flag, params)//TODO: go over this
|
||||
if(flag) return //we're placing gun on a table or in backpack
|
||||
if(istype(target, /obj/machinery/recharger) && istype(src, /obj/item/weapon/gun/energy)) return//Shouldnt flag take care of this?
|
||||
|
||||
if(istype(user, /mob/living))
|
||||
var/mob/living/M = user
|
||||
if ((M.mutations & CLUMSY) && prob(50))
|
||||
M << "\red The [src.name] blows up in your face."
|
||||
M.take_organ_damage(0,20)
|
||||
M.drop_item()
|
||||
del(src)
|
||||
return
|
||||
|
||||
/*
|
||||
attack(mob/M as mob, mob/user as mob)
|
||||
if(!in_chamber)
|
||||
if(!load_into_chamber())
|
||||
@@ -60,15 +84,7 @@
|
||||
return //we're placing gun on a table or in backpack. What the fuck was the previous check?
|
||||
if(istype(target, /obj/machinery/recharger) && istype(src, /obj/item/weapon/gun/energy))
|
||||
return//Shouldnt flag take care of this?
|
||||
|
||||
if(istype(user, /mob/living))
|
||||
var/mob/living/M = user
|
||||
if ((M.mutations & CLUMSY) && prob(50))
|
||||
M << "\red The [src.name] blows up in your face."
|
||||
M.take_organ_damage(0,20)
|
||||
M.drop_item()
|
||||
del(src)
|
||||
return
|
||||
{R} */
|
||||
|
||||
if (!user.IsAdvancedToolUser())
|
||||
user << "\red You don't have the dexterity to do this!"
|
||||
@@ -84,8 +100,7 @@
|
||||
if(!special_check(user))
|
||||
return
|
||||
if(!load_into_chamber())
|
||||
if(!inrange) // If we're in range, we're just going to hit them instead of pulling the trigger.
|
||||
user << "\red *click*";
|
||||
user << "\red *click*";
|
||||
return
|
||||
|
||||
if(!in_chamber)
|
||||
@@ -94,6 +109,7 @@
|
||||
in_chamber.firer = user
|
||||
in_chamber.def_zone = user.zone_sel.selecting
|
||||
|
||||
/*
|
||||
if(user == target) // What the FUCK was this code? If shoot anything on the same tile, you're shooting yourself? What?
|
||||
if(!determination)
|
||||
user << "Are you really sure you want to shoot yourself? You put the gun against your head."
|
||||
@@ -133,6 +149,21 @@
|
||||
del(in_chamber)
|
||||
update_icon()
|
||||
return
|
||||
{R}*/
|
||||
|
||||
if(targloc == curloc)
|
||||
/*
|
||||
if(silenced)
|
||||
playsound(user, fire_sound, 10, 1)
|
||||
else
|
||||
playsound(user, fire_sound, 50, 1)
|
||||
user.visible_message("\red [user.name] fires the [src.name] at themselves!", "\red You fire the [src.name] at yourself!", "\blue You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
|
||||
{R}*/
|
||||
|
||||
user.bullet_act(in_chamber)
|
||||
del(in_chamber)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(recoil)
|
||||
spawn()
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
|
||||
|
||||
load_into_chamber()
|
||||
if(in_chamber)
|
||||
return 1
|
||||
// if(in_chamber)
|
||||
// return 1 {R}
|
||||
|
||||
if(!loaded.len)
|
||||
return 0
|
||||
@@ -77,9 +77,9 @@
|
||||
examine()
|
||||
..()
|
||||
usr << "Has [loaded.len] round\s remaining."
|
||||
if(in_chamber && !loaded.len)
|
||||
usr << "However, it has a chambered round."
|
||||
if(in_chamber && loaded.len)
|
||||
usr << "It also has a chambered round."
|
||||
// if(in_chamber && !loaded.len)
|
||||
// usr << "However, it has a chambered round."
|
||||
// if(in_chamber && loaded.len)
|
||||
// usr << "It also has a chambered round." {R}
|
||||
return
|
||||
|
||||
|
||||
@@ -70,8 +70,8 @@
|
||||
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
|
||||
|
||||
load_into_chamber()
|
||||
if(in_chamber)
|
||||
return 1
|
||||
// if(in_chamber)
|
||||
// return 1 {R}
|
||||
if(!loaded.len)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -46,6 +46,17 @@ Stuff which is in development and not yet visible to players or just code relate
|
||||
should be listed in the changelog upon commit tho. 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 -->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">May 9th, 2012</h2>
|
||||
<h3 class="author">Sieve updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscdel">Reverted dismemberment, the recent gun changes, and Tarajans. Before you shit up the forums, read this:</li>
|
||||
<li>Dismemberment was ported from Bay12, but only halfway, and there were several problems with it. I know many people really liked it, but as it stood it did not fit the playstyle here at all. This <b>had</b> to be removed, there is work on a more fitting system, but this had to be taken out first regardless, and the longer people beat around the bush the worse the situation got.</li>
|
||||
<li>The gun change was made for no real reason and was pretty problematic, so reverting that should mean there are a lot less 'accidental suicides.'</li>
|
||||
<li>Tarjans were reverted by request as well, and since keeping them working after removing dismemberment would be a stupid amount of work.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">May 06-07, 2012</h2>
|
||||
<h3 class="author">Cheridan updated:</h3>
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
@@ -899,8 +899,6 @@
|
||||
#include "code\modules\mob\living\carbon\human\login.dm"
|
||||
#include "code\modules\mob\living\carbon\human\say.dm"
|
||||
#include "code\modules\mob\living\carbon\human\whisper.dm"
|
||||
#include "code\modules\mob\living\carbon\human\Tajara\tajara_transformation.dm"
|
||||
#include "code\modules\mob\living\carbon\human\Tajara\tajaran.dm"
|
||||
#include "code\modules\mob\living\carbon\metroid\death.dm"
|
||||
#include "code\modules\mob\living\carbon\metroid\emote.dm"
|
||||
#include "code\modules\mob\living\carbon\metroid\examine.dm"
|
||||
@@ -967,7 +965,6 @@
|
||||
#include "code\modules\mob\organ\organ.dm"
|
||||
#include "code\modules\mob\organ\organ_external.dm"
|
||||
#include "code\modules\mob\organ\organ_internal.dm"
|
||||
#include "code\modules\mob\organ\pain.dm"
|
||||
#include "code\modules\mob\simple_animal\behemoth.dm"
|
||||
#include "code\modules\mob\simple_animal\cat.dm"
|
||||
#include "code\modules\mob\simple_animal\constructs.dm"
|
||||
|
||||
Reference in New Issue
Block a user