More fixes and improvements. Removed several "src."s, added some proper sorting for mobs on player lists stuff and admin stuff. Added a timestamp to player info/notes, made flavor text play nice with the new examine system. Nerfed stunning against armored targets.

This commit is contained in:
SkyMarshal
2012-04-03 21:22:21 -07:00
parent 9e694e545b
commit f009f9928c
21 changed files with 212 additions and 113 deletions
+21 -16
View File
@@ -54,7 +54,7 @@
t_his = "her"
t_him = "her"
msg += "<EM>\a [src]</EM>!\n"
msg += "<EM>\a [src]</EM>[examine_text ? ", [examine_text]":""]!\n"
//uniform
if (src.w_uniform && !skipjumpsuit)
@@ -237,10 +237,12 @@
var/list/wound_descriptions = list()
var/list/wound_flavor_text = list()
var/list/is_destroyed = list()
for(var/named in organs)
var/datum/organ/external/temp = organs[named]
if(temp)
if(temp.destroyed)
is_destroyed["[temp.display_name]"] = 1
wound_flavor_text["[temp.display_name]"] = "<span class='warning'><b>[t_He] is missing [t_his] [temp.display_name].</b></span>\n"
continue
if(temp.wounds)
@@ -401,14 +403,14 @@
switch(tally[tallied])
if(1)
if(!flavor_text.len)
flavor_text += "<span class='warning'>\The [src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
flavor_text += "<span class='warning'>\The [src] has[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
else
flavor_text += "[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a [tallied_rename[tallied]]"
if(2)
if(!flavor_text.len)
flavor_text += "<span class='warning'>\The [src] has[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
flavor_text += "<span class='warning'>\The [src] has[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
else
flavor_text += "[prob(4) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
flavor_text += "[prob(10) && !(tallied in no_exclude) ? " what might be" : ""] a pair of [tallied_rename[tallied]]s"
if(3 to 5)
if(!flavor_text.len)
flavor_text += "<span class='warning'>\The [src] has several [tallied_rename[tallied]]s"
@@ -429,47 +431,50 @@
flavor_text_string += flavor_text[text]
flavor_text_string += " on [t_his] [named].</span><br>"
wound_flavor_text["[named]"] = flavor_text_string
if(wound_flavor_text["head"] && !skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))
//Handles the text strings being added to the actual description.
//If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext.
if(wound_flavor_text["head"] && (is_destroyed["head"] || (!skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))))
msg += wound_flavor_text["head"]
else if(is_bleeding["head"])
msg += "<span class='warning'>[src] has blood running down [t_his] face!</span>\n"
if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit)
if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) //No need. A missing chest gibs you.
msg += wound_flavor_text["chest"]
else if(is_bleeding["chest"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left arm"] && !w_uniform && !skipjumpsuit)
if(wound_flavor_text["left arm"] && (is_destroyed["left arm"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["left arm"]
else if(is_bleeding["left arm"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left hand"] && !gloves && !skipgloves)
if(wound_flavor_text["left hand"] && (is_destroyed["left hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["left hand"]
else if(is_bleeding["left hand"])
msg += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
if(wound_flavor_text["right arm"] && !w_uniform && !skipjumpsuit)
if(wound_flavor_text["right arm"] && (is_destroyed["right arm"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["right arm"]
else if(is_bleeding["right arm"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["right hand"] && !gloves && !skipgloves)
if(wound_flavor_text["right hand"] && (is_destroyed["right hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["right hand"]
else if(is_bleeding["right hand"])
msg += "<span class='warning'>[src] has blood running from under [t_his] gloves!</span>\n"
if(wound_flavor_text["groin"] && !w_uniform && !skipjumpsuit)
if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["groin"]
else if(is_bleeding["groin"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left leg"] && !w_uniform && !skipjumpsuit)
if(wound_flavor_text["left leg"] && (is_destroyed["left leg"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["left leg"]
else if(is_bleeding["left leg"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["left foot"]&& !shoes && !skipshoes)
if(wound_flavor_text["left foot"]&& (is_destroyed["left foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["left foot"]
else if(is_bleeding["left foot"])
msg += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
if(wound_flavor_text["right leg"] && !w_uniform && !skipjumpsuit)
if(wound_flavor_text["right leg"] && (is_destroyed["right leg"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["right leg"]
else if(is_bleeding["right leg"])
msg += "<span class='warning'>[src] has blood soaking through from under [t_his] clothing!</span>\n"
if(wound_flavor_text["right foot"]&& !shoes && !skipshoes)
if(wound_flavor_text["right foot"]&& (is_destroyed["right foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["right foot"]
else if(is_bleeding["right foot"])
msg += "<span class='warning'>[src] has blood running from [t_his] shoes!</span>\n"
@@ -60,6 +60,7 @@
var/bloodloss = 0
var/datum/reagents/vessel
var/pale = 0
var/examine_text = ""
/mob/living/carbon/human/dummy
real_name = "Test Dummy"
@@ -26,6 +26,6 @@
if(10)
usr << text("\blue <B>[] seems to have extreme electrical activity inside it!</B>", src.name)
print_flavor_text()
usr << print_flavor_text()
return
@@ -418,6 +418,28 @@
return //TODO: DEFERRED
handle_regular_status_updates()
var/leg_tally = 2
for(var/name in organs)
var/datum/organ/external/E = organs[name]
E.process()
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 && !paralysis && !(lying || resting))
emote("scream")
emote("collapse")
paralysis = 10
health = 100 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss())
@@ -459,9 +459,9 @@
if(!stand_icon || !lying_icon)
update_body()
//if(update_icon) // Skie
// ..()
// overlays = null
if(update_icon) // Skie
..()
overlays = null
if (lying)
icon = lying_icon
@@ -912,4 +912,78 @@
UpdateDamageIcon()
else
return 0
return
return
/mob/living/carbon/monkey/proc/get_damaged_organs(var/brute, var/burn)
var/list/datum/organ/external/parts = list()
for(var/name in organs)
var/datum/organ/external/organ = organs[name]
if((brute && organ.brute_dam) || (burn && organ.burn_dam))
parts += organ
return parts
/mob/living/carbon/monkey/proc/get_damageable_organs()
var/list/datum/organ/external/parts = list()
for(var/name in organs)
var/datum/organ/external/organ = organs[name]
if(organ.brute_dam + organ.burn_dam < organ.max_damage)
parts += organ
return parts
// heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/carbon/monkey/heal_organ_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = get_damaged_organs(brute,burn)
if(!parts.len)
return
var/datum/organ/external/picked = pick(parts)
picked.heal_damage(brute,burn)
updatehealth()
UpdateDamageIcon()
// damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/carbon/monkey/take_organ_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = get_damageable_organs()
if(!parts.len)
return
var/datum/organ/external/picked = pick(parts)
picked.take_damage(brute,burn)
updatehealth()
UpdateDamageIcon()
// heal MANY external organs, in random order
/mob/living/carbon/monkey/heal_overall_damage(var/brute, var/burn)
var/list/datum/organ/external/parts = get_damaged_organs(brute,burn)
while(parts.len && (brute>0 || burn>0) )
var/datum/organ/external/picked = pick(parts)
var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam
picked.heal_damage(brute,burn)
brute -= (brute_was-picked.brute_dam)
burn -= (burn_was-picked.burn_dam)
parts -= picked
updatehealth()
UpdateDamageIcon()
// damage MANY external organs, in random order
/mob/living/carbon/monkey/take_overall_damage(var/brute, var/burn, var/used_weapon = null)
var/list/datum/organ/external/parts = get_damageable_organs()
while(parts.len && (brute>0 || burn>0) )
var/datum/organ/external/picked = pick(parts)
var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam
picked.take_damage(brute,burn, 0, used_weapon)
brute -= (picked.brute_dam-brute_was)
burn -= (picked.burn_dam-burn_was)
parts -= picked
updatehealth()
UpdateDamageIcon()
+1 -1
View File
@@ -39,7 +39,7 @@
/mob/living/proc/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0)
if(!effect || (blocked >= 2)) return 0
if(!effect || (blocked)) return 0
switch(effecttype)
if(STUN)
Stun((effect - (min(effect*getarmor(null, "laser"), effect*(0.75 + (blocked*0.05))))))
@@ -19,6 +19,6 @@
if (src.stat == 1)
usr << text("\red [] doesn't seem to be responding.", src.name)
print_flavor_text()
usr << print_flavor_text()
return
@@ -19,6 +19,6 @@
if (src.stat == 1)
usr << text("\red [] doesn't seem to be responding.", src.name)
print_flavor_text()
usr << print_flavor_text()
return
@@ -22,6 +22,6 @@
else
usr << "The cover is closed."
print_flavor_text()
usr << print_flavor_text()
return
+19 -19
View File
@@ -290,9 +290,9 @@
//Attemps to remove an object on a mob. Will not move it to another area or such, just removes from the mob.
/mob/proc/remove_from_mob(var/obj/O)
src.u_equip(O)
if (src.client)
src.client.screen -= O
u_equip(O)
if (client)
client.screen -= O
O.layer = initial(O.layer)
O.screen_loc = null
return 1
@@ -398,10 +398,10 @@
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
msg = html_encode(msg)
src.flavor_text = msg
flavor_text = msg
/mob/proc/warn_flavor_changed()
if(src.flavor_text && src.flavor_text != "") // don't spam people that don't use it!
if(flavor_text && flavor_text != "") // don't spam people that don't use it!
src << "<h2 class='alert'>OOC Warning:</h2>"
src << "<span class='alert'>Your flavor text is likely out of date! <a href='byond://?src=\ref[src];flavor_change=1'>Change</a></span>"
@@ -409,9 +409,9 @@
if (flavor_text && flavor_text != "")
var/msg = dd_replacetext(flavor_text, "\n", " ")
if(lentext(msg) <= 40)
usr << "\blue [msg]"
return "\blue [msg]"
else
usr << "\blue [copytext(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a>"
return "\blue [copytext(msg, 1, 37)]... <a href='byond://?src=\ref[src];flavor_more=1'>More...</a>"
/*
@@ -610,7 +610,7 @@
src << browse(null, t1)
if(href_list["teleto"])
src.client.jumptoturf(locate(href_list["teleto"]))
client.jumptoturf(locate(href_list["teleto"]))
if(href_list["priv_msg"])
var/mob/M = locate(href_list["priv_msg"])
@@ -648,8 +648,8 @@
if(K.client && K.client.holder && K.key != usr.key && K.key != M.key)
K << "<b><font color='blue'>PM: [key_name(usr, K)]->[key_name(M, K)]:</b> \blue [t]</font>"
if(href_list["flavor_more"])
usr << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", src.name, dd_replacetext(src.flavor_text, "\n", "<BR>")), text("window=[];size=500x200", src.name))
onclose(usr, "[src.name]")
usr << browse(text("<HTML><HEAD><TITLE>[]</TITLE></HEAD><BODY><TT>[]</TT></BODY></HTML>", name, dd_replacetext(flavor_text, "\n", "<BR>")), text("window=[];size=500x200", name))
onclose(usr, "[name]")
if(href_list["flavor_change"])
update_flavor_text()
..()
@@ -659,9 +659,9 @@
return health
/mob/proc/UpdateLuminosity()
if(src.total_luminosity == src.last_luminosity) return 0//nothing to do here
src.last_luminosity = src.total_luminosity
sd_SetLuminosity(min(src.total_luminosity,7))//Current hardcode max at 7, should likely be a const somewhere else
if(total_luminosity == last_luminosity) return 0//nothing to do here
last_luminosity = total_luminosity
sd_SetLuminosity(min(total_luminosity,7))//Current hardcode max at 7, should likely be a const somewhere else
return 1
/mob/MouseDrop(mob/M as mob)
@@ -722,7 +722,7 @@
del(src)
*/
if(IsGuestKey(src.key))
if(IsGuestKey(key))
alert(src,"Baystation12 doesn't allow guest accounts to play. Please go to http://www.byond.com/ and register for a key.","Guest","OK")
del(src)
@@ -837,7 +837,7 @@ Currently doesn't work, but should be useful later or at least as a template
else
gibs(loc, viruses, dna)
sleep(15)
for(var/obj/item/I in src.contents)
for(var/obj/item/I in contents)
I.loc = get_turf(src)
if(ex_act)
I.ex_act(ex_act)
@@ -876,7 +876,7 @@ Dusting robots does not eject the MMI, so it's a bit more powerful than gib() /N
sleep(15)
if(isrobot(src)&&src:mmi)//Is a robot and it has an mmi.
del(src:mmi)//Delete the MMI first so that it won't go popping out.
for(var/obj/item/I in src.contents)
for(var/obj/item/I in contents)
I.loc = get_turf(src)
del(src)
@@ -1011,17 +1011,17 @@ note dizziness decrements automatically in the mob's Life() proc.
boom.icon_state = "loss_general"
#elif
/client/proc/station_explosion_cinematic(var/derp)
if(!src.mob)
if(!mob)
return
var/mob/M = src.mob
var/mob/M = mob
M.loc = null // HACK, but whatever, this works
if(!M.hud_used)
return
var/obj/screen/boom = M.hud_used.station_explosion
src.screen += boom
screen += boom
if(ticker)
switch(ticker.mode.name)
if("nuclear emergency")
+3 -3
View File
@@ -311,7 +311,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
//src.virus.cure(0)
var/datum/disease/v = new virus.type
src.viruses += v
viruses += v
v.affected_mob = src
v.strain_data = v.strain_data.Copy()
v.holder = src
@@ -319,7 +319,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
v.carrier = 1
return
//if(src.virus) //
//if(virus) //
//return //
@@ -463,7 +463,7 @@ the mob is also allowed to move without any sort of restriction. For instance, i
return
else*/
var/datum/disease/v = new virus.type
src.viruses += v
viruses += v
v.affected_mob = src
v.strain_data = v.strain_data.Copy()
v.holder = src
+4 -4
View File
@@ -320,19 +320,19 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
/mob/proc/abiotic(var/full_body = 0)
if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask)))
if(full_body && ((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )) || (back || wear_mask)))
return 1
if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
if((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )))
return 1
return 0
/mob/proc/abiotic2(var/full_body2 = 0)
if(full_body2 && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask)))
if(full_body2 && ((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )) || (back || wear_mask)))
return 1
if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
if((l_hand && !( l_hand.abstract )) || (r_hand && !( r_hand.abstract )))
return 1
return 0
+1 -1
View File
@@ -332,7 +332,7 @@
for(var/turf/turf in oview(1,src))
if(istype(turf,/turf/space))
continue
if(istype(turf,/turf/simulated/floor) && (src.flags & NOGRAV))
if(istype(turf,/turf/simulated/floor) && (flags & NOGRAV))
continue
dense_object++
break