Fixed evidence bags so the items inside are now visible even when the bag is inhand (the problem was that overlays += obj uses the object's layer variable rather than the default FLOAT_LAYER. So the hud was appearing over the overlays. Fixed it by using image(obj) to take a snapshot). Changed the overlays to underlays to make them look better. Fixed issue 637 where putting objects in bags which were currently in your inventory did not remove the item from your inventory.

Replaced the obj variable var/see_face. It was used to determine whether something (namely masks/hats) hid your identity. Replaced with the HIDEFACE bitflag for var/flags_inv variable. Moved the var/flags_inv variable from atom/ to obj/item/ as only /obj/item/ can be in your inventory in the first place.

Fixed get_visible_name() so it takes into account any item on the var/head when deciding if your face is obscured. (While I'm at it, just dump a comment here if there's anything that should hide your face which doesn't and I'll add the flag.)

Removed the var/alien_egg_flag variable from mob/living/carbon/ and replaced it with the XENO_HOST bitflag for var/status_flags variable. You can now suicide whilst impregnated with a xeno (since you will chestburst even after death, that restriction is no longer necessary).

Any mob/living descendent can ghost even when not dead. However, ghosting whilst not dead results in the ghost eing unable to return to it's body for the remainder of the round. (It has a warning popup)

The suicide verb can only be used by humans when they can move and are not cuffed. These verbs will be totally replaced very soon with the 'fun' IC suicides I'm working on. Suicide is largely redundant given that anybody can ghost now, just didn't want to jump the gun in removing it.

Known Issues:
We've got var/flags_inv, var/slot_flags which could possibly be merged as they both deal with obj/items, although I'm not sure if we can fit oth into the 16-bit limit. Just something to look into.
There are bitflags GLASSESCOVERSEYES, MASKCOVERSEYES, HEADCOVERSEYES, MASKCOVERSMOUTH, HEADCOVERSMOUTH in the var/flags variable which should really be merged with or moved alongside the very similar flags in var/flags_inv. Comments next to the defines suggest as much.
You can borg dead/clientless brains but can't remove the brain fromt he borg once you realise it's a dud. >.<

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4072 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-07-14 21:43:54 +00:00
parent 1212efe4f1
commit 65ff691098
51 changed files with 367 additions and 620 deletions

View File

@@ -150,7 +150,7 @@ to null does not delete the object itself. Thank you.
var/saved_type = "[type]"//copy the value, not create the reference to it, so when the object is deleted, the value remains. var/saved_type = "[type]"//copy the value, not create the reference to it, so when the object is deleted, the value remains.
affected_mob.resistances += text2path(saved_type) affected_mob.resistances += text2path(saved_type)
if((affected_mob) && (istype(src, /datum/disease/alien_embryo)))//Get rid of the flag. if((affected_mob) && (istype(src, /datum/disease/alien_embryo)))//Get rid of the flag.
affected_mob.alien_egg_flag = 0 affected_mob.status_flags &= ~(XENO_HOST)
// world << "Removing [src]" // world << "Removing [src]"
spawn(0) spawn(0)
affected_mob.viruses -= src //I am a silly person for trying affected_mob.viruses.Find(src_type) instead of what it's like now and getting LOL WHAT IS THIS PROC affected_mob.viruses -= src //I am a silly person for trying affected_mob.viruses.Find(src_type) instead of what it's like now and getting LOL WHAT IS THIS PROC

View File

@@ -2,7 +2,6 @@
layer = 2 layer = 2
var/level = 2 var/level = 2
var/flags = FPRINT var/flags = FPRINT
var/flags_inv //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc.
var/list/fingerprints var/list/fingerprints
var/list/fingerprintshidden var/list/fingerprintshidden
var/fingerprintslast = null var/fingerprintslast = null

View File

@@ -317,7 +317,7 @@
var/obj/item/master = null var/obj/item/master = null
//Since any item can now be a piece of clothing, this has to be put here so all items share it. //Since any item can now be a piece of clothing, this has to be put here so all items share it.
var/see_face = 1.0 var/flags_inv //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc.
var/color = null var/color = null
var/body_parts_covered = 0 //see setup.dm for appropriate bit flags var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
var/protective_temperature = 0 var/protective_temperature = 0

View File

@@ -31,7 +31,7 @@
name = "cult hood" name = "cult hood"
icon_state = "culthood" icon_state = "culthood"
desc = "A hood worn by the followers of Nar-Sie." desc = "A hood worn by the followers of Nar-Sie."
see_face = 0 flags_inv = HIDEFACE
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES
armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0) armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0)
@@ -60,7 +60,7 @@
icon_state = "magus" icon_state = "magus"
item_state = "magus" item_state = "magus"
desc = "A helm worn by the followers of Nar-Sie." desc = "A helm worn by the followers of Nar-Sie."
see_face = 0 flags_inv = HIDEFACE
flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0) armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0)

View File

@@ -91,7 +91,7 @@
C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]") C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
if(patient.stat == 2) if(patient.stat == 2)
C.images += image(tempHud,patient,"huddead") C.images += image(tempHud,patient,"huddead")
else if(patient.alien_egg_flag) else if(patient.status_flags & XENO_HOST)
C.images += image(tempHud,patient,"hudxeno") C.images += image(tempHud,patient,"hudxeno")
else if(foundVirus) else if(foundVirus)
C.images += image(tempHud,patient,"hudill") C.images += image(tempHud,patient,"hudill")

View File

@@ -153,7 +153,8 @@ var/const/MAX_ACTIVE_TIME = 600
if(!sterile) if(!sterile)
target.contract_disease(new /datum/disease/alien_embryo(0)) //so infection chance is same as virus infection chance target.contract_disease(new /datum/disease/alien_embryo(0)) //so infection chance is same as virus infection chance
for(var/datum/disease/alien_embryo/A in target.viruses) for(var/datum/disease/alien_embryo/A in target.viruses)
target.alien_egg_flag = max(1,target.alien_egg_flag) target.status_flags |= XENO_HOST
break
for(var/mob/O in viewers(target,null)) for(var/mob/O in viewers(target,null))
O.show_message("\red \b [src] falls limp after violating [target]'s face!", 1) O.show_message("\red \b [src] falls limp after violating [target]'s face!", 1)

View File

@@ -3,7 +3,7 @@
/mob/living/carbon/human/verb/suicide() /mob/living/carbon/human/verb/suicide()
set hidden = 1 set hidden = 1
if (stat == 2) if (stat == DEAD)
src << "You're already dead!" src << "You're already dead!"
return return
@@ -17,11 +17,10 @@
var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No")
if(alien_egg_flag)
src << "The alien inside you forces you to breathe, preventing you from suiciding."
return
if(confirm == "Yes") if(confirm == "Yes")
if(!canmove || restrained()) //just while I finish up the new 'fun' suiciding verb. This is to prevent metagaming via suicide
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
return
suiciding = 1 suiciding = 1
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>" viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>"
@@ -69,11 +68,10 @@
var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No") var/confirm = alert("Are you sure you want to commit suicide?", "Confirm Suicide", "Yes", "No")
if(alien_egg_flag)
src << "The alien inside you forces you to breathe, preventing you from suiciding."
return
if(confirm == "Yes") if(confirm == "Yes")
if(!canmove || restrained())
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
return
suiciding = 1 suiciding = 1
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while //instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>" viewers(src) << "\red <b>[src] is attempting to bite \his tongue. It looks like \he's trying to commit suicide.</b>"

View File

@@ -464,7 +464,8 @@
holder.state = 1 holder.state = 1
update_admins(rank) update_admins(rank)
if(istype(mob, /mob/dead/observer)) if(istype(mob, /mob/dead/observer))
mob:reenter_corpse() var/mob/dead/observer/ghost = mob
ghost.reenter_corpse()
src << "\blue You are now playing" src << "\blue You are now playing"
feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -1,9 +1,7 @@
//////////// ////////////
//SECURITY// //SECURITY//
//////////// ////////////
#define TOPIC_SPAM_DELAY 4 //4 tick delay is about half a second #define TOPIC_SPAM_DELAY 4 //4 ticks is about 3/10ths of a second
// REDUCED because holy fucking balls the delay was too damn high
#define UPLOAD_LIMIT 1048576 //Restricts client uploads to the server to 1MB //Could probably do with being lower. #define UPLOAD_LIMIT 1048576 //Restricts client uploads to the server to 1MB //Could probably do with being lower.
/* /*
When somebody clicks a link in game, this Topic is called first. When somebody clicks a link in game, this Topic is called first.
@@ -21,9 +19,11 @@
If you have any questions about this stuff feel free to ask. ~Carn If you have any questions about this stuff feel free to ask. ~Carn
*/ */
/client/Topic(href, href_list, hsrc) /client/Topic(href, href_list, hsrc)
if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null
return
//Reduces spamming of links by dropping calls that happen during the delay period //Reduces spamming of links by dropping calls that happen during the delay period
if(next_allowed_topic_time > world.time) if(next_allowed_topic_time > world.time)
// src << "\red DEBUG: Error: SPAM"
return return
next_allowed_topic_time = world.time + TOPIC_SPAM_DELAY next_allowed_topic_time = world.time + TOPIC_SPAM_DELAY
@@ -91,7 +91,7 @@
del(src) del(src)
return return
if (((world.address == address || !(address)) && !(host))) if ( (world.address == address || !address) && !host )
host = key host = key
world.update_status() world.update_status()

View File

@@ -57,7 +57,7 @@
C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]") C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
if(patient.stat == 2) if(patient.stat == 2)
C.images += image(tempHud,patient,"huddead") C.images += image(tempHud,patient,"huddead")
else if(patient.alien_egg_flag) else if(patient.status_flags & XENO_HOST)
C.images += image(tempHud,patient,"hudxeno") C.images += image(tempHud,patient,"hudxeno")
else if(foundVirus) else if(foundVirus)
C.images += image(tempHud,patient,"hudill") C.images += image(tempHud,patient,"hudill")

View File

@@ -90,9 +90,8 @@
icon_state = "syndicate" icon_state = "syndicate"
item_state = "syndicate" item_state = "syndicate"
desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!" desc = "A plastic replica of a syndicate agent's space helmet, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
see_face = 0.0
flags = FPRINT | TABLEPASS | BLOCKHAIR flags = FPRINT | TABLEPASS | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
/obj/item/clothing/head/cueball /obj/item/clothing/head/cueball
@@ -125,5 +124,4 @@
icon_state = "cardborg_h" icon_state = "cardborg_h"
item_state = "cardborg_h" item_state = "cardborg_h"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
see_face = 0.0 flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES

View File

@@ -5,8 +5,7 @@
item_state = "hardhat0_pumpkin" item_state = "hardhat0_pumpkin"
color = "pumpkin" color = "pumpkin"
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
see_face = 0.0 flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
var/brightness_on = 2 //luminosity when on var/brightness_on = 2 //luminosity when on
var/on = 0 var/on = 0

View File

@@ -3,14 +3,13 @@
desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye." desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
icon_state = "welding" icon_state = "welding"
flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES | HEADCOVERSMOUTH flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES | HEADCOVERSMOUTH
see_face = 0.0
item_state = "welding" item_state = "welding"
protective_temperature = 1300 protective_temperature = 1300
m_amt = 3000 m_amt = 3000
g_amt = 1000 g_amt = 1000
var/up = 0 var/up = 0
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
attack_self() attack_self()
@@ -25,16 +24,14 @@
if(usr.canmove && !usr.stat && !usr.restrained()) if(usr.canmove && !usr.stat && !usr.restrained())
if(src.up) if(src.up)
src.up = !src.up src.up = !src.up
src.see_face = !src.see_face
src.flags |= HEADCOVERSEYES src.flags |= HEADCOVERSEYES
flags_inv |= HIDEMASK|HIDEEARS|HIDEEYES flags_inv |= HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
icon_state = "welding" icon_state = "welding"
usr << "You flip the mask down to protect your eyes." usr << "You flip the mask down to protect your eyes."
else else
src.up = !src.up src.up = !src.up
src.see_face = !src.see_face
src.flags &= ~HEADCOVERSEYES src.flags &= ~HEADCOVERSEYES
flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES) flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
icon_state = "weldingup" icon_state = "weldingup"
usr << "You push the mask up out of your face." usr << "You push the mask up out of your face."
usr.update_inv_head() //so our mob-overlays update usr.update_inv_head() //so our mob-overlays update

View File

@@ -3,8 +3,8 @@
desc = "LOADSAMONEY" desc = "LOADSAMONEY"
icon_state = "balaclava" icon_state = "balaclava"
item_state = "balaclava" item_state = "balaclava"
see_face = 0.0
flags = FPRINT|TABLEPASS|HEADSPACE|BLOCKHAIR flags = FPRINT|TABLEPASS|HEADSPACE|BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2 w_class = 2
/obj/item/clothing/mask/luchador /obj/item/clothing/mask/luchador
@@ -13,7 +13,7 @@
icon_state = "luchag" icon_state = "luchag"
item_state = "luchag" item_state = "luchag"
flags = FPRINT|TABLEPASS|HEADSPACE|BLOCKHAIR flags = FPRINT|TABLEPASS|HEADSPACE|BLOCKHAIR
see_face = 0.0 flags_inv = HIDEFACE
w_class = 2 w_class = 2
/obj/item/clothing/mask/luchador/tecnicos /obj/item/clothing/mask/luchador/tecnicos

View File

@@ -3,9 +3,8 @@
desc = "A face-covering mask that can be connected to an air supply." desc = "A face-covering mask that can be connected to an air supply."
icon_state = "gas_alt" icon_state = "gas_alt"
flags = FPRINT|TABLEPASS|SUITSPACE|MASKCOVERSMOUTH|MASKCOVERSEYES flags = FPRINT|TABLEPASS|SUITSPACE|MASKCOVERSMOUTH|MASKCOVERSEYES
flags_inv = HIDEEARS|HIDEEYES flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
w_class = 3.0 w_class = 3.0
see_face = 0.0
item_state = "gas_alt" item_state = "gas_alt"
protective_temperature = 500 protective_temperature = 500
heat_transfer_coefficient = 0.01 heat_transfer_coefficient = 0.01

View File

@@ -23,7 +23,7 @@
desc = "Warning: moustache is fake." desc = "Warning: moustache is fake."
icon_state = "fake-moustache" icon_state = "fake-moustache"
flags = FPRINT|TABLEPASS flags = FPRINT|TABLEPASS
see_face = 0.0 //Well, it's a disguise, of course. flags_inv = HIDEFACE
/obj/item/clothing/mask/owl_mask /obj/item/clothing/mask/owl_mask
name = "owl mask" name = "owl mask"

View File

@@ -9,11 +9,10 @@ Space suit parts
icon_state = "space" icon_state = "space"
desc = "A special helmet designed for work in a hazardous, low-pressure environment." desc = "A special helmet designed for work in a hazardous, low-pressure environment."
flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
see_face = 0.0
item_state = "space" item_state = "space"
permeability_coefficient = 0.01 permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
/obj/item/clothing/suit/space /obj/item/clothing/suit/space

View File

@@ -16,7 +16,6 @@
name = "ninja hood" name = "ninja hood"
icon_state = "s-ninja" icon_state = "s-ninja"
item_state = "s-ninja_mask" item_state = "s-ninja_mask"
see_face = 1
allowed = list(/obj/item/weapon/cell) allowed = list(/obj/item/weapon/cell)
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25) armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)

View File

@@ -3,7 +3,6 @@
desc = "A high tech, NASA Centcom branch designed, dark red space suit helmet. Used for AI satellite maintenance." desc = "A high tech, NASA Centcom branch designed, dark red space suit helmet. Used for AI satellite maintenance."
icon_state = "void" icon_state = "void"
item_state = "void" item_state = "void"
see_face = 1
/obj/item/clothing/suit/space/nasavoid /obj/item/clothing/suit/space/nasavoid

View File

@@ -14,7 +14,7 @@
item_state = "capspacehelmet" item_state = "capspacehelmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads." desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads."
flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
see_face = 0.0 flags_inv = HIDEFACE
permeability_coefficient = 0.01 permeability_coefficient = 0.01
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50) armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)

View File

@@ -22,15 +22,20 @@
user << "You find putting an evidence bag in another evidence bag to be slightly absurd." user << "You find putting an evidence bag in another evidence bag to be slightly absurd."
return return
if(O in user && (user.l_hand != O && user.r_hand != O)) //If it is in their inventory, but not in their hands, don't grab it off of them.
user << "You are wearing that."
return
if(contents.len) if(contents.len)
user << "The [src] already has something inside it." user << "The [src] already has something inside it."
return ..() return ..()
if(istype(O.loc,/obj/item/weapon/storage)) if(O in user) //If it is in their inventory, but not in their hands, don't grab it off of them.
if(user.l_hand == O)
user.drop_l_hand()
else if(user.r_hand == O)
user.drop_r_hand()
else
user << "You are wearing that."
return
else if(istype(O.loc,/obj/item/weapon/storage))
var/obj/item/weapon/storage/U = O.loc var/obj/item/weapon/storage/U = O.loc
user.client.screen -= O user.client.screen -= O
U.contents.Remove(O) U.contents.Remove(O)
@@ -38,7 +43,8 @@
user.visible_message("\The [user] puts \a [O] into \a [src]", "You put \the [O] inside \the [src].",\ user.visible_message("\The [user] puts \a [O] into \a [src]", "You put \the [O] inside \the [src].",\
"You hear a rustle as someone puts something into a plastic bag.") "You hear a rustle as someone puts something into a plastic bag.")
icon_state = "evidence" icon_state = "evidence"
overlays += O var/image/I = image("icon"=O, "layer"=FLOAT_LAYER) //take a snapshot. (necessary to stop the underlays appearing under our inventory-HUD slots ~Carn
underlays += I
desc = "An evidence bag containing \a [O]. [O.desc]" desc = "An evidence bag containing \a [O]. [O.desc]"
O.loc = src O.loc = src
w_class = O.w_class w_class = O.w_class
@@ -50,7 +56,7 @@
var/obj/item/I = contents[1] var/obj/item/I = contents[1]
user.visible_message("\The [user] takes \a [I] out of \a [src]", "You take \the [I] out of \the [src].",\ user.visible_message("\The [user] takes \a [I] out of \a [src]", "You take \the [I] out of \the [src].",\
"You hear someone rustle around in a plastic bag, and remove something.") "You hear someone rustle around in a plastic bag, and remove something.")
overlays -= I underlays = null //remove the underlays
user.put_in_hands(I) user.put_in_hands(I)
w_class = 1 w_class = 1
icon_state = "evidenceobj" icon_state = "evidenceobj"

View File

@@ -7,21 +7,18 @@
stat = DEAD stat = DEAD
if(body) if(body)
var/turf/location = get_turf(body)//Where is the mob located? var/turf/T = get_turf(body) //Where is the body located?
if(location)//Found turf. if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position
loc = location loc = T
else//Safety, in case a turf cannot be found. if(ismob(body))
loc = pick(latejoin) real_name = body.real_name
if(!istype(body,/mob)) return//This needs to be recoded sometime so it has loc as its first arg original_name = body.original_name //Original name is only used in ghost chat! It is not to be edited by anything!
real_name = body.name name = body.original_name
original_name = body.original_name //Original name is only used in ghost chat! It is not to be edited by anything! if(!safety)
name = body.original_name corpse = body
if(!name) if(!name) //To prevent nameless ghosts
name = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) name = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
real_name = name real_name = name
if(!safety)
corpse = body
verbs += /mob/dead/observer/proc/reenter_corpse
return return
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) /mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
@@ -33,46 +30,38 @@ Works together with spawning an observer, noted above.
/mob/proc/ghostize(var/transfer_mind = 0) /mob/proc/ghostize(var/transfer_mind = 0)
if(key) if(key)
var/mob/dead/observer/ghost = new(src,transfer_mind) //Transfer safety to observer spawning proc.
if(client) if(client)
client.screen.len = null//Clear the hud, just to be sure. client.images.len = null //remove the images such as AIs being unable to see runes
var/mob/dead/observer/ghost = new(src,transfer_mind)//Transfer safety to observer spawning proc. client.screen.len = null //remove hud items just in case
if(transfer_mind)//When a body is destroyed. ghost.attack_log = attack_log //preserve our attack logs by copying them to our ghost
if(mind) if(transfer_mind && mind) //When a body is destroyed attempt to transfer their mind
mind.transfer_to(ghost) mind.transfer_to(ghost)
else//They may not have a mind and be gibbed/destroyed. else //Else just modify their key and connect them.
ghost.key = key
else//Else just modify their key and connect them.
ghost.key = key ghost.key = key
verbs -= /mob/proc/ghost else if(transfer_mind) //Body getting destroyed but the person is not present inside.
if (ghost.client)
ghost.client.eye = ghost
else if(transfer_mind)//Body getting destroyed but the person is not present inside.
for(var/mob/dead/observer/O in world) for(var/mob/dead/observer/O in world)
if(O.corpse == src&&O.key)//If they have the same corpse and are keyed. if(O.corpse == src && O.key) //If they have the same corpse and are keyed.
if(mind) if(mind)
O.mind = mind//Transfer their mind if they have one. O.mind = mind //Transfer their mind if they have one.
break break
return return
/* /*
This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues. This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
*/ */
/mob/proc/ghost() /mob/living/verb/ghost()
set category = "Ghost" set category = "OOC"
set name = "Ghost" set name = "Ghost"
set desc = "You cannot be revived as a ghost." set desc = "Relinquish your life and enter the land of the dead."
/*if(stat != 2) //this check causes nothing but troubles. Commented out for Nar-Sie's sake. --rastaf0 if(stat == DEAD)
src << "Only dead people and admins get to ghost, and admins don't use this verb to ghost while alive." ghostize(0)
return*/ else
if(key) var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst still alive you may not play again this round! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
var/mob/dead/observer/ghost = new(src) if(response != "Ghost") return //didn't want to ghost after-all
ghost.key = key ghostize(1) //safety is on so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
verbs -= /mob/proc/ghost
if (ghost.client)
ghost.client.eye = ghost
return return
/mob/proc/adminghostize() /mob/proc/adminghostize()
@@ -124,18 +113,20 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if (timeleft) if (timeleft)
stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]") stat(null, "ETA-[(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]")
/mob/dead/observer/proc/reenter_corpse() /mob/dead/observer/verb/reenter_corpse()
set category = "Ghost" set category = "Ghost"
set name = "Re-enter Corpse" set name = "Re-enter Corpse"
if(!client) return
if(!corpse) if(!corpse)
alert("You don't have a corpse!") src << "<span class='warning'>Sorry, you don't have a corpse to re-enter.</span>"
return return
if(client && client.holder && client.holder.state == 2) if(client.holder && client.holder.state == 2)
var/rank = client.holder.rank var/rank = client.holder.rank
client.clear_admin_verbs() client.clear_admin_verbs()
client.holder.state = 1 client.holder.state = 1
client.update_admins(rank) client.update_admins(rank)
if(iscultist(corpse) && corpse.ajourn==1 && corpse.stat!=2) //checks if it's an astral-journeying cultistm if it is and he's not on an astral journey rune, re-entering won't work
if(iscultist(corpse) && corpse.ajourn==1 && corpse.stat != DEAD) //checks if it's an astral-journeying cultistm if it is and he's not on an astral journey rune, re-entering won't work
var/S=0 var/S=0
for(var/obj/effect/rune/R in world) for(var/obj/effect/rune/R in world)
if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself) if(corpse.loc==R.loc && R.word1 == wordhell && R.word2 == wordtravel && R.word3 == wordself)
@@ -146,23 +137,22 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(corpse.ajourn) if(corpse.ajourn)
corpse.ajourn=0 corpse.ajourn=0
client.mob = corpse client.mob = corpse
if (corpse.stat==2)
verbs += /mob/proc/ghost
del(src) del(src)
/mob/dead/observer/proc/dead_tele() /mob/dead/observer/proc/dead_tele()
set category = "Ghost" set category = "Ghost"
set name = "Teleport" set name = "Teleport"
set desc= "Teleport to a location" set desc= "Teleport to a location"
if((usr.stat != 2) || !istype(usr, /mob/dead/observer)) if(!istype(usr, /mob/dead/observer))
usr << "Not when you're not dead!" usr << "Not when you're not dead!"
return return
usr.verbs -= /mob/dead/observer/proc/dead_tele usr.verbs -= /mob/dead/observer/proc/dead_tele
spawn(30) spawn(30)
usr.verbs += /mob/dead/observer/proc/dead_tele usr.verbs += /mob/dead/observer/proc/dead_tele
var/A var/A
A = input("Area to jump to", "BOOYEA", A) in ghostteleportlocs A = input("Area to jump to", "BOOYEA", A) as null|anything in ghostteleportlocs
var/area/thearea = ghostteleportlocs[A] var/area/thearea = ghostteleportlocs[A]
if(!thearea) return
var/list/L = list() var/list/L = list()
for(var/turf/T in get_area_turfs(thearea.type)) for(var/turf/T in get_area_turfs(thearea.type))

View File

@@ -1,34 +1,16 @@
/mob/living/carbon/alien/humanoid/death(gibbed) /mob/living/carbon/alien/humanoid/death(gibbed)
if(src.stat == 2) if(stat == DEAD) return
return if(healths) healths.icon_state = "health6"
if(src.healths) stat = DEAD
src.healths.icon_state = "health6"
src.stat = 2
if (!gibbed) if(!gibbed)
// emote("deathgasp") // Dead -- Skie // Doesn't work due to stat == 2 -- Urist playsound(loc, 'hiss6.ogg', 80, 1, 1)
playsound(src.loc, 'hiss6.ogg', 80, 1, 1)
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
O.show_message("<B>[src]</B> lets out a waning guttural screech, green blood bubbling from its maw...", 1) O.show_message("<B>[src]</B> lets out a waning guttural screech, green blood bubbling from its maw...", 1)
update_canmove()
src.canmove = 0 if(client) blind.layer = 0
if(src.client)
src.blind.layer = 0
src.lying = 1
var/h = src.hand
src.hand = 0
drop_item()
src.hand = 1
drop_item()
src.hand = h
if (src.key)
spawn(10)
if(src.key && src.stat == 2)
src.verbs += /mob/proc/ghost
tod = worldtime2text() //weasellos time of death patch tod = worldtime2text() //weasellos time of death patch
if (mind) mind.store_memory("Time of death: [tod]", 0) if(mind) mind.store_memory("Time of death: [tod]", 0)
else src << "We seem to have misplaced your mind datum, so we can't add this to your memory, but you died at [tod]"
return ..(gibbed) return ..(gibbed)

View File

@@ -1,106 +1,7 @@
/mob/living/carbon/alien/humanoid/Login() /mob/living/carbon/alien/humanoid/Login()
..() ..()
update_hud() update_hud()
if(!isturf(loc))
if (!isturf(src.loc)) client.eye = loc
src.client.eye = src.loc client.perspective = EYE_PERSPECTIVE
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == DEAD)
src.verbs += /mob/proc/ghost
return return
/*
src.throw_icon = new /obj/screen(null)
src.oxygen = new /obj/screen( null )
src.i_select = new /obj/screen( null )
src.m_select = new /obj/screen( null )
src.toxin = new /obj/screen( null )
src.internals = new /obj/screen( null )
src.mach = new /obj/screen( null )
src.fire = new /obj/screen( null )
src.bodytemp = new /obj/screen( null )
src.healths = new /obj/screen( null )
src.pullin = new /obj/screen( null )
src.blind = new /obj/screen( null )
src.flash = new /obj/screen( null )
src.hands = new /obj/screen( null )
src.sleep = new /obj/screen( null )
src.rest = new /obj/screen( null )
src.zone_sel = new /obj/screen/zone_sel( null )
regenerate_icons()
src.mach.dir = NORTH
src.throw_icon.icon_state = "act_throw_off"
src.oxygen.icon_state = "oxy0"
src.i_select.icon_state = "selector"
src.m_select.icon_state = "selector"
src.toxin.icon_state = "toxin0"
src.bodytemp.icon_state = "temp1"
src.internals.icon_state = "internal0"
src.mach.icon_state = null
src.fire.icon_state = "fire0"
src.healths.icon_state = "health0"
src.pullin.icon_state = "pull0"
src.blind.icon_state = "black"
src.hands.icon_state = "hand"
src.flash.icon_state = "blank"
src.sleep.icon_state = "sleep0"
src.rest.icon_state = "rest0"
src.hands.dir = NORTH
src.throw_icon.name = "throw"
src.oxygen.name = "oxygen"
src.i_select.name = "intent"
src.m_select.name = "moving"
src.toxin.name = "toxin"
src.bodytemp.name = "body temperature"
src.internals.name = "internal"
src.mach.name = "Reset Machine"
src.fire.name = "fire"
src.healths.name = "health"
src.pullin.name = "pull"
src.blind.name = " "
src.hands.name = "hand"
src.flash.name = "flash"
src.sleep.name = "sleep"
src.rest.name = "rest"
src.throw_icon.screen_loc = "9,1"
src.oxygen.screen_loc = "15,12"
src.i_select.screen_loc = "14:-11,15"
src.m_select.screen_loc = "14:-11,14"
src.toxin.screen_loc = "15,10"
src.internals.screen_loc = "15,14"
src.mach.screen_loc = "14,1"
src.fire.screen_loc = "15,8"
src.bodytemp.screen_loc = "15,6"
src.healths.screen_loc = "15,5"
src.sleep.screen_loc = "15,3"
src.rest.screen_loc = "15,2"
src.pullin.screen_loc = "15,1"
src.hands.screen_loc = "1,3"
src.blind.screen_loc = "1,1 to 15,15"
src.flash.screen_loc = "1,1 to 15,15"
src.blind.layer = 0
src.flash.layer = 17
src.client.screen.len = null
src.client.screen -= list( src.throw_icon, src.zone_sel, src.oxygen, src.i_select, src.m_select, src.toxin, src.bodytemp, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach )
src.client.screen += list( src.throw_icon, src.zone_sel, src.oxygen, src.i_select, src.m_select, src.toxin, src.bodytemp, src.internals, src.fire, src.hands, src.healths, src.pullin, src.blind, src.flash, src.rest, src.sleep, src.mach )
src.client.screen -= src.hud_used.adding
src.client.screen += src.hud_used.adding
if (!isturf(src.loc))
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
src.verbs += /mob/proc/ghost
return
*/

View File

@@ -1,32 +1,14 @@
/mob/living/carbon/alien/larva/death(gibbed) /mob/living/carbon/alien/larva/death(gibbed)
if(src.stat == 2) if(stat == DEAD) return
return if(healths) healths.icon_state = "health6"
if(src.healths) stat = DEAD
src.healths.icon_state = "health6" icon_state = "larva_l"
src.icon_state = "larva_l" if(!gibbed)
src.stat = 2 update_canmove()
if(client) blind.layer = 0
if (!gibbed) tod = worldtime2text() //weasellos time of death patch
if(mind) mind.store_memory("Time of death: [tod]", 0)
src.canmove = 0
if(src.client)
src.blind.layer = 0
src.lying = 1
var/h = src.hand
src.hand = 0
drop_item()
src.hand = 1
drop_item()
src.hand = h
if (src.client)
spawn(10)
if(src.client && src.stat == 2)
src.verbs += /mob/proc/ghost
if(mind) // Skie - Added check that there's someone controlling the alien
tod = worldtime2text() //weasellos time of death patch
mind.store_memory("Time of death: [tod]", 0)
return ..(gibbed) return ..(gibbed)

View File

@@ -1,10 +1,6 @@
/mob/living/carbon/alien/larva/Login() /mob/living/carbon/alien/larva/Login()
..() ..()
if(!isturf(loc))
if (!isturf(src.loc)) client.eye = loc
src.client.eye = src.loc client.perspective = EYE_PERSPECTIVE
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
src.verbs += /mob/proc/ghost
return return

View File

@@ -33,17 +33,6 @@
return ..() return ..()
/mob/living/carbon/brain/Login()
..()
if (!isturf(src.loc))
src.client.eye = src.loc
src.client.perspective = EYE_PERSPECTIVE
if (!container || !istype(container, /obj/item/device/mmi))
src.verbs += /mob/proc/ghost
return
/mob/living/carbon/brain/update_canmove() /mob/living/carbon/brain/update_canmove()
if(in_contents_of(/obj/mecha)) canmove = 1 if(in_contents_of(/obj/mecha)) canmove = 1
else canmove = 0 else canmove = 0

View File

@@ -1,24 +1,17 @@
/mob/living/carbon/brain/death(gibbed) /mob/living/carbon/brain/death(gibbed)
if(stat == DEAD) return
if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container. if(!gibbed && container && istype(container, /obj/item/device/mmi))//If not gibbed but in a container.
for(var/mob/O in viewers(container, null)) for(var/mob/O in viewers(container, null))
O.show_message(text("\red <B>[]'s MMI flatlines!</B>", src), 1, "\red You hear something flatline.", 2) O.show_message(text("\red <B>[]'s MMI flatlines!</B>", src), 1, "\red You hear something flatline.", 2)
container.icon_state = "mmi_dead" container.icon_state = "mmi_dead"
stat = 2 stat = DEAD
if(blind)
blind.layer = 0
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
if(blind) blind.layer = 0
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
see_in_dark = 8 see_in_dark = 8
see_invisible = 2 see_invisible = 2
tod = worldtime2text() //weasellos time of death patch tod = worldtime2text() //weasellos time of death patch
store_memory("Time of death: [tod]", 0) if(mind) mind.store_memory("Time of death: [tod]", 0) //mind. ?
if (key)
spawn(50)
if(key && stat == 2)
src.verbs += /mob/proc/ghost
return ..(gibbed) return ..(gibbed)

View File

@@ -0,0 +1,6 @@
/mob/living/carbon/brain/Login()
..()
if (!isturf(loc))
client.eye = loc
client.perspective = EYE_PERSPECTIVE
return

View File

@@ -1,4 +1,3 @@
/mob/living/carbon /mob/living/carbon
var/silent = null //Can't talk. Value goes down every life proc. var/silent = null //Can't talk. Value goes down every life proc.
var/alien_egg_flag = 0 //Have you been infected with an alien egg? Used by Human and Monkey.

View File

@@ -40,74 +40,44 @@
/mob/living/carbon/human/death(gibbed) /mob/living/carbon/human/death(gibbed)
if(halloss > 0 && !gibbed)
if(halloss > 0 && (!gibbed))
halloss = 0 halloss = 0
return return
if(stat == DEAD) return
if(src.stat == 2) if(healths) healths.icon_state = "health5"
return stat = DEAD
dizziness = 0
if(src.healths) jitteriness = 0
src.healths.icon_state = "health5"
src.stat = 2
src.dizziness = 0
src.jitteriness = 0
tension_master.death(src) tension_master.death(src)
if (!gibbed) if(!gibbed)
emote("deathgasp") //let the world KNOW WE ARE DEAD emote("deathgasp") //let the world KNOW WE ARE DEAD
//For ninjas exploding when they die./N //For ninjas exploding when they die./N
if (istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)&&wear_suit:s_initialized) if( istype(wear_suit, /obj/item/clothing/suit/space/space_ninja) && wear_suit:s_initialized )
src << browse(null, "window=spideros")//Just in case. src << browse(null, "window=spideros")//Just in case.
var/location = loc var/location = loc
explosion(location, 1, 2, 3, 4) explosion(location, 1, 2, 3, 4)
canmove = 0 update_canmove()
if(src.client) if(client) blind.layer = 0
src.blind.layer = 0
lying = 1
var/h = src.hand
hand = 0
drop_item()
hand = 1
drop_item()
hand = h
//This is where the suicide assemblies checks would go
if (client) tod = worldtime2text() //weasellos time of death patch
spawn(10) if(mind) mind.store_memory("Time of death: [tod]", 0)
if(client && src.stat == 2)
verbs += /mob/proc/ghost
tod = worldtime2text() //weasellos time of death patch
if(mind)
mind.store_memory("Time of death: [tod]", 0)
sql_report_death(src) sql_report_death(src)
ticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now
//Calls the rounds wincheck, mainly for wizard, malf, and changeling now
ticker.mode.check_win()
//Traitor's dead! Oh no!
/* --Admins do not need to know when people die. This was a relic of the singletraitor times where a traitor dying meant there were no antagonists left ~Erro
if (ticker.mode.name == "traitor" && src.mind && src.mind.special_role == "traitor")
message_admins("\red Traitor [key_name_admin(src)] has died.")
log_game("Traitor [key_name(src)] has died.")
*/
return ..(gibbed) return ..(gibbed)
/mob/living/carbon/human/proc/ChangeToHusk() /mob/living/carbon/human/proc/ChangeToHusk()
if(HUSK in src.mutations) if(HUSK in mutations) return
return
mutations.Add(HUSK) mutations.Add(HUSK)
real_name = "Unknown" status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools
update_body(0) update_body(0)
update_mutantrace() update_mutantrace()
return return
/mob/living/carbon/human/proc/Drain() /mob/living/carbon/human/proc/Drain()
ChangeToHusk() ChangeToHusk()
mutations.Add(NOCLONE) mutations |= NOCLONE
return return

View File

@@ -2,7 +2,7 @@
set src in view() set src in view()
if(!usr || !src) return if(!usr || !src) return
if( (usr.sdisabilities & BLIND || usr.blinded || usr.stat) && !istype(usr,/mob/dead/observer) ) if( usr.sdisabilities & BLIND || usr.blinded || usr.stat==UNCONSCIOUS )
usr << "<span class='notice'>Something is there but you can't see it.</span>" usr << "<span class='notice'>Something is there but you can't see it.</span>"
return return
@@ -13,18 +13,23 @@
var/skipmask = 0 var/skipmask = 0
var/skipears = 0 var/skipears = 0
var/skipeyes = 0 var/skipeyes = 0
var/skipface = 0
//exosuits and helmets obscure our view and stuff. //exosuits and helmets obscure our view and stuff.
if (src.wear_suit) if(wear_suit)
skipgloves = src.wear_suit.flags_inv & HIDEGLOVES skipgloves = wear_suit.flags_inv & HIDEGLOVES
skipsuitstorage = src.wear_suit.flags_inv & HIDESUITSTORAGE skipsuitstorage = wear_suit.flags_inv & HIDESUITSTORAGE
skipjumpsuit = src.wear_suit.flags_inv & HIDEJUMPSUIT skipjumpsuit = wear_suit.flags_inv & HIDEJUMPSUIT
skipshoes = src.wear_suit.flags_inv & HIDESHOES skipshoes = wear_suit.flags_inv & HIDESHOES
if (src.head) if(head)
skipmask = src.head.flags_inv & HIDEMASK skipmask = head.flags_inv & HIDEMASK
skipeyes = src.head.flags_inv & HIDEEYES skipeyes = head.flags_inv & HIDEEYES
skipears = src.head.flags_inv & HIDEEARS skipears = head.flags_inv & HIDEEARS
skipface = head.flags_inv & HIDEFACE
if(wear_mask)
skipface |= wear_mask & HIDEFACE
// crappy hacks because you can't do \his[src] etc. I'm sorry this proc is so unreadable, blame the text macros :< // crappy hacks because you can't do \his[src] etc. I'm sorry this proc is so unreadable, blame the text macros :<
var/t_He = "It" //capitalised for use at the start of each line. var/t_He = "It" //capitalised for use at the start of each line.
@@ -35,16 +40,16 @@
var/msg = "<span class='info'>*---------*\nThis is " var/msg = "<span class='info'>*---------*\nThis is "
if( skipjumpsuit && (wear_mask || skipmask) ) //big suits/masks make it hard to tell their gender if( skipjumpsuit && skipface ) //big suits/masks/helmets make it hard to tell their gender
t_He = "They" t_He = "They"
t_his = "their" t_his = "their"
t_him = "them" t_him = "them"
t_has = "have" t_has = "have"
t_is = "are" t_is = "are"
else else
if(src.icon) if(icon)
msg += "\icon[src.icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated msg += "\icon[icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
switch(src.gender) switch(gender)
if(MALE) if(MALE)
t_He = "He" t_He = "He"
t_his = "his" t_his = "his"
@@ -54,137 +59,137 @@
t_his = "her" t_his = "her"
t_him = "her" t_him = "her"
msg += "<EM>\a [src]</EM>!\n" msg += "<EM>[src.name]</EM>!\n"
//uniform //uniform
if (src.w_uniform && !skipjumpsuit) if(w_uniform && !skipjumpsuit)
if (src.w_uniform.blood_DNA) if(w_uniform.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[src.w_uniform] [src.w_uniform.gender==PLURAL?"some":"a"] blood-stained [src.w_uniform.name]!</span>\n" msg += "<span class='warning'>[t_He] [t_is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] blood-stained [w_uniform.name]!</span>\n"
else else
msg += "[t_He] [t_is] wearing \icon[src.w_uniform] \a [src.w_uniform].\n" msg += "[t_He] [t_is] wearing \icon[w_uniform] \a [w_uniform].\n"
//head //head
if (src.head) if(head)
if (src.head.blood_DNA) if(head.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[src.head] [src.head.gender==PLURAL?"some":"a"] blood-stained [src.head.name] on [t_his] head!</span>\n" msg += "<span class='warning'>[t_He] [t_is] wearing \icon[head] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on [t_his] head!</span>\n"
else else
msg += "[t_He] [t_is] wearing \icon[src.head] \a [src.head] on [t_his] head.\n" msg += "[t_He] [t_is] wearing \icon[head] \a [head] on [t_his] head.\n"
//suit/armour //suit/armour
if (src.wear_suit) if(wear_suit)
if (src.wear_suit.blood_DNA) if(wear_suit.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[src.wear_suit] [src.wear_suit.gender==PLURAL?"some":"a"] blood-stained [src.wear_suit.name]!</span>\n" msg += "<span class='warning'>[t_He] [t_is] wearing \icon[wear_suit] [wear_suit.gender==PLURAL?"some":"a"] blood-stained [wear_suit.name]!</span>\n"
else else
msg += "[t_He] [t_is] wearing \icon[src.wear_suit] \a [src.wear_suit].\n" msg += "[t_He] [t_is] wearing \icon[wear_suit] \a [wear_suit].\n"
//suit/armour storage //suit/armour storage
if(src.s_store && !skipsuitstorage) if(s_store && !skipsuitstorage)
if(src.s_store.blood_DNA) if(s_store.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] carrying \icon[src.s_store] [src.s_store.gender==PLURAL?"some":"a"] blood-stained [src.s_store.name] on [t_his] [src.wear_suit.name]!</span>\n" msg += "<span class='warning'>[t_He] [t_is] carrying \icon[s_store] [s_store.gender==PLURAL?"some":"a"] blood-stained [s_store.name] on [t_his] [wear_suit.name]!</span>\n"
else else
msg += "[t_He] [t_is] carrying \icon[src.s_store] \a [src.s_store] on [t_his] [src.wear_suit.name].\n" msg += "[t_He] [t_is] carrying \icon[s_store] \a [s_store] on [t_his] [wear_suit.name].\n"
//back //back
if (src.back) if(back)
if (src.back.blood_DNA) if(back.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[src.back] [src.back.gender==PLURAL?"some":"a"] blood-stained [src.back] on [t_his] back.</span>\n" msg += "<span class='warning'>[t_He] [t_has] \icon[back] [back.gender==PLURAL?"some":"a"] blood-stained [back] on [t_his] back.</span>\n"
else else
msg += "[t_He] [t_has] \icon[src.back] \a [src.back] on [t_his] back.\n" msg += "[t_He] [t_has] \icon[back] \a [back] on [t_his] back.\n"
//left hand //left hand
if (src.l_hand) if(l_hand)
if (src.l_hand.blood_DNA) if(l_hand.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] holding \icon[src.l_hand] [src.l_hand.gender==PLURAL?"some":"a"] blood-stained [src.l_hand.name] in [t_his] left hand!</span>\n" msg += "<span class='warning'>[t_He] [t_is] holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] blood-stained [l_hand.name] in [t_his] left hand!</span>\n"
else else
msg += "[t_He] [t_is] holding \icon[src.l_hand] \a [src.l_hand] in [t_his] left hand.\n" msg += "[t_He] [t_is] holding \icon[l_hand] \a [l_hand] in [t_his] left hand.\n"
//right hand //right hand
if (src.r_hand) if(r_hand)
if (src.r_hand.blood_DNA) if(r_hand.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] holding \icon[src.r_hand] [src.r_hand.gender==PLURAL?"some":"a"] blood-stained [src.r_hand.name] in [t_his] right hand!</span>\n" msg += "<span class='warning'>[t_He] [t_is] holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] blood-stained [r_hand.name] in [t_his] right hand!</span>\n"
else else
msg += "[t_He] [t_is] holding \icon[src.r_hand] \a [src.r_hand] in [t_his] right hand.\n" msg += "[t_He] [t_is] holding \icon[r_hand] \a [r_hand] in [t_his] right hand.\n"
//gloves //gloves
if (src.gloves && !skipgloves) if(gloves && !skipgloves)
if (src.gloves.blood_DNA) if(gloves.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[src.gloves] [src.gloves.gender==PLURAL?"some":"a"] blood-stained [src.gloves.name] on [t_his] hands!</span>\n" msg += "<span class='warning'>[t_He] [t_has] \icon[gloves] [gloves.gender==PLURAL?"some":"a"] blood-stained [gloves.name] on [t_his] hands!</span>\n"
else else
msg += "[t_He] [t_has] \icon[src.gloves] \a [src.gloves] on [t_his] hands.\n" msg += "[t_He] [t_has] \icon[gloves] \a [gloves] on [t_his] hands.\n"
else if (src.blood_DNA) else if(blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] blood-stained hands!</span>\n" msg += "<span class='warning'>[t_He] [t_has] blood-stained hands!</span>\n"
//handcuffed? //handcuffed?
//handcuffed? //handcuffed?
if (src.handcuffed) if(handcuffed)
if(istype(src.handcuffed, /obj/item/weapon/handcuffs/cable)) if(istype(handcuffed, /obj/item/weapon/handcuffs/cable))
msg += "<span class='warning'>[t_He] [t_is] \icon[src.handcuffed] restrained with cable!</span>\n" msg += "<span class='warning'>[t_He] [t_is] \icon[handcuffed] restrained with cable!</span>\n"
else else
msg += "<span class='warning'>[t_He] [t_is] \icon[src.handcuffed] handcuffed!</span>\n" msg += "<span class='warning'>[t_He] [t_is] \icon[handcuffed] handcuffed!</span>\n"
//belt //belt
if (src.belt) if(belt)
if (src.belt.blood_DNA) if(belt.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[src.belt] [src.belt.gender==PLURAL?"some":"a"] blood-stained [src.belt.name] about [t_his] waist!</span>\n" msg += "<span class='warning'>[t_He] [t_has] \icon[belt] [belt.gender==PLURAL?"some":"a"] blood-stained [belt.name] about [t_his] waist!</span>\n"
else else
msg += "[t_He] [t_has] \icon[src.belt] \a [src.belt] about [t_his] waist.\n" msg += "[t_He] [t_has] \icon[belt] \a [belt] about [t_his] waist.\n"
//shoes //shoes
if (src.shoes && !skipshoes) if(shoes && !skipshoes)
if(src.shoes.blood_DNA) if(shoes.blood_DNA)
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[src.shoes] [src.shoes.gender==PLURAL?"some":"a"] blood-stained [src.shoes.name] on [t_his] feet!</span>\n" msg += "<span class='warning'>[t_He] [t_is] wearing \icon[shoes] [shoes.gender==PLURAL?"some":"a"] blood-stained [shoes.name] on [t_his] feet!</span>\n"
else else
msg += "[t_He] [t_is] wearing \icon[src.shoes] \a [src.shoes] on [t_his] feet.\n" msg += "[t_He] [t_is] wearing \icon[shoes] \a [shoes] on [t_his] feet.\n"
//mask //mask
if (src.wear_mask && !skipmask) if(wear_mask && !skipmask)
if (src.wear_mask.blood_DNA) if(wear_mask.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[src.wear_mask] [src.wear_mask.gender==PLURAL?"some":"a"] blood-stained [src.wear_mask.name] on [t_his] face!</span>\n" msg += "<span class='warning'>[t_He] [t_has] \icon[wear_mask] [wear_mask.gender==PLURAL?"some":"a"] blood-stained [wear_mask.name] on [t_his] face!</span>\n"
else else
msg += "[t_He] [t_has] \icon[src.wear_mask] \a [src.wear_mask] on [t_his] face.\n" msg += "[t_He] [t_has] \icon[wear_mask] \a [wear_mask] on [t_his] face.\n"
//eyes //eyes
if (src.glasses && !skipeyes) if(glasses && !skipeyes)
if (src.glasses.blood_DNA) if(glasses.blood_DNA)
msg += "<span class='warning'>[t_He] [t_has] \icon[src.glasses] [src.glasses.gender==PLURAL?"some":"a"] blood-stained [src.glasses] covering [t_his] eyes!</span>\n" msg += "<span class='warning'>[t_He] [t_has] \icon[glasses] [glasses.gender==PLURAL?"some":"a"] blood-stained [glasses] covering [t_his] eyes!</span>\n"
else else
msg += "[t_He] [t_has] \icon[src.glasses] \a [src.glasses] covering [t_his] eyes.\n" msg += "[t_He] [t_has] \icon[glasses] \a [glasses] covering [t_his] eyes.\n"
//ears //ears
if (src.ears && !skipears) if(ears && !skipears)
msg += "[t_He] [t_has] \icon[src.ears] \a [src.ears] on [t_his] ears.\n" msg += "[t_He] [t_has] \icon[ears] \a [ears] on [t_his] ears.\n"
//ID //ID
if (src.wear_id) if(wear_id)
var/id var/id
if(istype(src.wear_id, /obj/item/device/pda)) if(istype(wear_id, /obj/item/device/pda))
var/obj/item/device/pda/pda = src.wear_id var/obj/item/device/pda/pda = wear_id
id = pda.owner id = pda.owner
else if(istype(src.wear_id, /obj/item/weapon/card/id)) //just in case something other than a PDA/ID card somehow gets in the ID slot :[ else if(istype(wear_id, /obj/item/weapon/card/id)) //just in case something other than a PDA/ID card somehow gets in the ID slot :[
var/obj/item/weapon/card/id/idcard = src.wear_id var/obj/item/weapon/card/id/idcard = wear_id
id = idcard.registered_name id = idcard.registered_name
if (id && (id != src.real_name) && (get_dist(src, usr) <= 1) && prob(10)) if(id && (id != real_name) && (get_dist(src, usr) <= 1) && prob(10))
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[src.wear_id] \a [src.wear_id] yet something doesn't seem right...</span>\n" msg += "<span class='warning'>[t_He] [t_is] wearing \icon[wear_id] \a [wear_id] yet something doesn't seem right...</span>\n"
else else
msg += "[t_He] [t_is] wearing \icon[src.wear_id] \a [src.wear_id].\n" msg += "[t_He] [t_is] wearing \icon[wear_id] \a [wear_id].\n"
//Jitters //Jitters
if (src.is_jittery) if(is_jittery)
if(src.jitteriness >= 300) if(jitteriness >= 300)
msg += "<span class='warning'><B>[t_He] [t_is] convulsing violently!</B></span>\n" msg += "<span class='warning'><B>[t_He] [t_is] convulsing violently!</B></span>\n"
else if(src.jitteriness >= 200) else if(jitteriness >= 200)
msg += "<span class='warning'>[t_He] [t_is] extremely jittery.</span>\n" msg += "<span class='warning'>[t_He] [t_is] extremely jittery.</span>\n"
else if(src.jitteriness >= 100) else if(jitteriness >= 100)
msg += "<span class='warning'>[t_He] [t_is] twitching ever so slightly.</span>\n" msg += "<span class='warning'>[t_He] [t_is] twitching ever so slightly.</span>\n"
if (src.suiciding) if(suiciding)
msg += "<span class='warning'>[t_He] [t_has] bitten off [t_his] own tongue and [t_has] suffered major bloodloss!</span>\n" msg += "<span class='warning'>[t_He] [t_has] bitten off [t_his] own tongue and [t_has] suffered major bloodloss!</span>\n"
if (src.stat == DEAD || (changeling && (changeling.changeling_fakedeath == 1))) if(stat == DEAD || (changeling && (changeling.changeling_fakedeath == 1)))
msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life" msg += "<span class='deadsay'>[t_He] [t_is] limp and unresponsive; there are no signs of life"
if(!src.client) if(!client)
var/foundghost = 0 var/foundghost = 0
for(var/mob/dead/observer/G in world) for(var/mob/dead/observer/G in world)
if(G.client) if(G.client)
@@ -196,48 +201,51 @@
msg += "...</span>\n" msg += "...</span>\n"
else else
msg += "<span class='warning'>" msg += "<span class='warning'>"
var/temp = src.getBruteLoss() //no need to calculate each of these twice var/temp = getBruteLoss() //no need to calculate each of these twice
if(temp) if(temp)
if (temp < 30) if(temp < 30)
msg += "[t_He] [t_has] minor bruising.\n" msg += "[t_He] [t_has] minor bruising.\n"
else else
msg += "<B>[t_He] [t_has] severe bruising!</B>\n" msg += "<B>[t_He] [t_has] severe bruising!</B>\n"
temp = src.getFireLoss() temp = getFireLoss()
if (temp) if(temp)
if (temp < 30) if(temp < 30)
msg += "[t_He] [t_has] minor burns.\n" msg += "[t_He] [t_has] minor burns.\n"
else else
msg += "<B>[t_He] [t_has] severe burns!</B>\n" msg += "<B>[t_He] [t_has] severe burns!</B>\n"
temp = src.getCloneLoss() temp = getCloneLoss()
if (temp) if(temp)
if (temp < 30) if(temp < 30)
msg += "[t_He] [t_has] minor genetic deformities.\n" msg += "[t_He] [t_has] minor genetic deformities.\n"
else else
msg += "<B>[t_He] [t_has] severe genetic deformities.</B>\n" msg += "<B>[t_He] [t_has] severe genetic deformities.</B>\n"
if (src.nutrition < 100) if(nutrition < 100)
msg += "[t_He] [t_is] severely malnourished.\n" msg += "[t_He] [t_is] severely malnourished.\n"
else if (src.nutrition >= 500) else if(nutrition >= 500)
if (usr.nutrition < 100) if(usr.nutrition < 100)
msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n" msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n"
else else
msg += "[t_He] [t_is] quite chubby.\n" msg += "[t_He] [t_is] quite chubby.\n"
msg += "</span>" msg += "</span>"
if (src.stat == UNCONSCIOUS) if(stat == UNCONSCIOUS)
msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n" msg += "[t_He] [t_is]n't responding to anything around [t_him] and seems to be asleep.\n"
else if (src.getBrainLoss() >= 60) else if(getBrainLoss() >= 60)
msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n"
if (!src.client) if(!key)
msg += "<span class='deadsay'>[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely</span>\n"
else if(!client)
msg += "[t_He] [t_has] a vacant, braindead stare...\n" msg += "[t_He] [t_has] a vacant, braindead stare...\n"
if (src.digitalcamo) if(digitalcamo)
msg += "[t_He] [t_is] repulsively uncanny!\n" msg += "[t_He] [t_is] repulsively uncanny!\n"
@@ -257,12 +265,12 @@
var/obj/item/device/pda/tempPda = wear_id var/obj/item/device/pda/tempPda = wear_id
perpname = tempPda.owner perpname = tempPda.owner
else else
perpname = src.name perpname = name
for (var/datum/data/record/E in data_core.general) for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname) if(E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.security) for (var/datum/data/record/R in data_core.security)
if (R.fields["id"] == E.fields["id"]) if(R.fields["id"] == E.fields["id"])
criminal = R.fields["criminal"] criminal = R.fields["criminal"]

View File

@@ -522,9 +522,10 @@
//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 //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() /mob/living/carbon/human/proc/get_visible_name()
if( wear_mask && !wear_mask.see_face ) //Wearing a mask which covers our face, use id-name if possible if( wear_mask && (wear_mask.flags_inv&HIDEFACE) ) //Wearing a mask which hides our face, use id-name if possible
return get_id_name("Unknown") return get_id_name("Unknown")
if( head && (head.flags_inv&HIDEFACE) )
return get_id_name("Unknown") //Likewise for hats
var/face_name = get_face_name() var/face_name = get_face_name()
var/id_name = get_id_name("") var/id_name = get_id_name("")
if(id_name && (id_name != face_name)) if(id_name && (id_name != face_name))

View File

@@ -1,12 +1,7 @@
/mob/living/carbon/human/Login() /mob/living/carbon/human/Login()
..() ..()
update_hud() update_hud()
if(!isturf(loc))
if (!isturf(src.loc)) client.eye = loc
src.client.eye = src.loc client.perspective = EYE_PERSPECTIVE
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == DEAD)
src.verbs += /mob/proc/ghost
return return

View File

@@ -1,42 +1,20 @@
/mob/living/carbon/metroid/death(gibbed) /mob/living/carbon/metroid/death(gibbed)
if(src.stat == 2) if(stat == DEAD) return
return stat = DEAD
icon_state = "baby metroid dead"
if(!gibbed) if(!gibbed)
if(istype(src, /mob/living/carbon/metroid/adult)) if(istype(src, /mob/living/carbon/metroid/adult))
ghostize(1)
if(client) explosion(loc, -1,-1,3,12)
var/mob/dead/observer/ghost = new(src) if(src) del(src)
ghost.key = key
if (ghost.client)
ghost.client.eye = ghost
explosion(src.loc, -1,-1,3,12)
sleep(2)
del(src)
else else
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
O.show_message("<b>The [src.name]</b> seizes up and falls limp...", 1) //ded -- Urist O.show_message("<b>The [name]</b> seizes up and falls limp...", 1) //ded -- Urist
src.stat = 2 update_canmove()
src.canmove = 0 if(blind) blind.layer = 0
if (src.blind)
src.blind.layer = 0
src.lying = 1
src.icon_state = "baby metroid dead"
var/h = src.hand
src.hand = 0
drop_item()
src.hand = 1
drop_item()
src.hand = h
ticker.mode.check_win() ticker.mode.check_win()
if (src.key)
spawn(50)
if(src.key && src.stat == 2)
src.verbs += /mob/proc/ghost
return ..(gibbed) return ..(gibbed)

View File

@@ -505,7 +505,7 @@
var/number = pick(2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4) var/number = pick(2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4)
for(var/i=1,i<=number,i++) // reproduce (has a small chance of producing 3 or 4 offspring) for(var/i=1,i<=number,i++) // reproduce (has a small chance of producing 3 or 4 offspring)
var/mob/living/carbon/metroid/M = new/mob/living/carbon/metroid(loc) var/mob/living/carbon/metroid/M = new/mob/living/carbon/metroid(loc)
M.nutrition = round(nutrition * 0.9) // M.nutrition = round(nutrition * 0.9)
M.powerlevel = round(powerlevel/number) M.powerlevel = round(powerlevel/number)
M.Friends = Friends M.Friends = Friends
M.tame = tame M.tame = tame
@@ -519,7 +519,7 @@
if(!client) if(!client)
var/mob/living/carbon/metroid/adult/A = new/mob/living/carbon/metroid/adult(src.loc) var/mob/living/carbon/metroid/adult/A = new/mob/living/carbon/metroid/adult(src.loc)
A.nutrition = nutrition A.nutrition = nutrition
A.nutrition += 100 // A.nutrition += 100
A.powerlevel = max(0, powerlevel-1) A.powerlevel = max(0, powerlevel-1)
A.Friends = Friends A.Friends = Friends
A.tame = tame A.tame = tame

View File

@@ -1,12 +1,7 @@
/mob/living/carbon/metroid/Login() /mob/living/carbon/metroid/Login()
..() ..()
update_hud() update_hud()
if(!isturf(loc))
if (!isturf(src.loc)) client.eye = loc
src.client.eye = src.loc client.perspective = EYE_PERSPECTIVE
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == DEAD)
src.verbs += /mob/proc/ghost
return return

View File

@@ -40,33 +40,17 @@
/mob/living/carbon/monkey/death(gibbed) /mob/living/carbon/monkey/death(gibbed)
if(src.stat == DEAD) if(stat == DEAD) return
return if(healths) healths.icon_state = "health5"
stat = DEAD
if (src.healths)
src.healths.icon_state = "health5"
if(!gibbed) if(!gibbed)
for(var/mob/O in viewers(src, null)) for(var/mob/O in viewers(src, null))
O.show_message("<b>The [src.name]</b> lets out a faint chimper as it collapses and stops moving...", 1) //ded -- Urist O.show_message("<b>The [name]</b> lets out a faint chimper as it collapses and stops moving...", 1) //ded -- Urist
src.stat = 2 update_canmove()
src.canmove = 0 if(blind) blind.layer = 0
if (src.blind)
src.blind.layer = 0
src.lying = 1
var/h = src.hand
src.hand = 0
drop_item()
src.hand = 1
drop_item()
src.hand = h
ticker.mode.check_win() ticker.mode.check_win()
if (src.key)
spawn(50)
if(src.key && src.stat == 2)
src.verbs += /mob/proc/ghost
return ..(gibbed) return ..(gibbed)

View File

@@ -1,11 +1,7 @@
/mob/living/carbon/monkey/Login() /mob/living/carbon/monkey/Login()
..() ..()
update_hud() update_hud()
if(!isturf(loc))
if (!isturf(src.loc)) client.eye = loc
src.client.eye = src.loc client.perspective = EYE_PERSPECTIVE
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == DEAD)
src.verbs += /mob/proc/ghost
return return

View File

@@ -1,14 +1,13 @@
/mob/living/silicon/ai/death(gibbed) /mob/living/silicon/ai/death(gibbed)
stat = 2 if(stat == DEAD) return
canmove = 0 stat = DEAD
if(blind) icon_state = "ai-crash"
blind.layer = 0
sight |= SEE_TURFS update_canmove()
sight |= SEE_MOBS if(blind) blind.layer = 0
sight |= SEE_OBJS sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
see_in_dark = 8 see_in_dark = 8
see_invisible = 2 see_invisible = 2
icon_state = "ai-crash"
var/callshuttle = 0 var/callshuttle = 0
@@ -56,8 +55,4 @@
tod = worldtime2text() //weasellos time of death patch tod = worldtime2text() //weasellos time of death patch
if(mind) mind.store_memory("Time of death: [tod]", 0) if(mind) mind.store_memory("Time of death: [tod]", 0)
if (key)
spawn(50)
if(key && stat == 2)
client.verbs += /mob/proc/ghost
return ..(gibbed) return ..(gibbed)

View File

@@ -1,32 +1,29 @@
/mob/living/silicon/ai/Login() /mob/living/silicon/ai/Login() //ThisIsDumb(TM) TODO: tidy this up <20>_<EFBFBD> ~Carn
client.screen.len = 0
client.images.len = 0
for(var/obj/effect/rune/rune in world) for(var/obj/effect/rune/rune in world)
var/image/blood = image(loc = rune) var/image/blood = image(loc = rune)
blood.override = 1 blood.override = 1
client.images += blood client.images += blood
..() ..()
regenerate_icons() regenerate_icons()
for(var/S in src.client.screen) flash = new /obj/screen( null )
del(S) flash.icon_state = "blank"
src.flash = new /obj/screen( null ) flash.name = "flash"
src.flash.icon_state = "blank" flash.screen_loc = "1,1 to 15,15"
src.flash.name = "flash" flash.layer = 17
src.flash.screen_loc = "1,1 to 15,15" blind = new /obj/screen( null )
src.flash.layer = 17 blind.icon_state = "black"
src.blind = new /obj/screen( null ) blind.name = " "
src.blind.icon_state = "black" blind.screen_loc = "1,1 to 15,15"
src.blind.name = " " blind.layer = 0
src.blind.screen_loc = "1,1 to 15,15" client.screen += list( blind, flash )
src.blind.layer = 0 if(!isturf(loc))
src.client.screen += list( src.blind, src.flash ) client.eye = loc
if(!isturf(src.loc)) client.perspective = EYE_PERSPECTIVE
src.client.eye = src.loc if(stat != DEAD)
src.client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
src.verbs += /mob/proc/ghost
else
for(var/obj/machinery/ai_status_display/O in world) //change status for(var/obj/machinery/ai_status_display/O in world) //change status
spawn(0) if(O)
if(O) O.mode = 1
O.mode = 1 O.emotion = "Neutral"
O.emotion = "Neutral"
return return

View File

@@ -1,12 +1,9 @@
/mob/living/silicon/ai/Logout() /mob/living/silicon/ai/Logout()
..() ..()
for(var/obj/machinery/ai_status_display/O in world) //change status for(var/obj/machinery/ai_status_display/O in world) //change status
spawn( 0 )
O.mode = 0 O.mode = 0
if(!isturf(src.loc)) if(!isturf(loc))
if (src.client) if (client)
src.client.eye = src.loc client.eye = loc
src.client.perspective = EYE_PERSPECTIVE client.perspective = EYE_PERSPECTIVE
if (src.stat == 2)
src.verbs += /mob/proc/ghost
return return

View File

@@ -1,10 +1,10 @@
/mob/living/silicon/decoy/death(gibbed) /mob/living/silicon/decoy/death(gibbed)
src.stat = 2 if(stat == DEAD) return
src.icon_state = "ai-crash" stat = DEAD
icon_state = "ai-crash"
spawn(10) spawn(10)
explosion(src.loc, 3, 6, 12, 15) explosion(loc, 3, 6, 12, 15)
for(var/obj/machinery/ai_status_display/O in world) //change status for(var/obj/machinery/ai_status_display/O in world) //change status
spawn( 0 ) O.mode = 2
O.mode = 2
return ..(gibbed) return ..(gibbed)

View File

@@ -1,23 +1,17 @@
/mob/living/silicon/pai/death(gibbed) /mob/living/silicon/pai/death(gibbed)
src.stat = 2 if(stat == DEAD) return
src.canmove = 0 stat = DEAD
if(src.blind) canmove = 0
src.blind.layer = 0 if(blind) blind.layer = 0
src.sight |= SEE_TURFS sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
src.sight |= SEE_MOBS see_in_dark = 8
src.sight |= SEE_OBJS see_invisible = 2
src.see_in_dark = 8
src.see_invisible = 2
//var/tod = time2text(world.realtime,"hh:mm:ss") //weasellos time of death patch //var/tod = time2text(world.realtime,"hh:mm:ss") //weasellos time of death patch
//mind.store_memory("Time of death: [tod]", 0) //mind.store_memory("Time of death: [tod]", 0)
//New pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here. //New pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here.
//Read as: I have no idea what I'm doing but asking for help got me nowhere so this is what you get. - Nodrak //Read as: I have no idea what I'm doing but asking for help got me nowhere so this is what you get. - Nodrak
del(src.mind) del(mind)
if(key) ghostize(0)
if(key)
spawn(50)
src.ghostize(0)
del(src) del(src)

View File

@@ -43,7 +43,7 @@
client.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]") client.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
if(patient.stat == 2) if(patient.stat == 2)
client.images += image(tempHud,patient,"huddead") client.images += image(tempHud,patient,"huddead")
else if(patient.alien_egg_flag) else if(patient.status_flags & XENO_HOST)
client.images += image(tempHud,patient,"hudxeno") client.images += image(tempHud,patient,"hudxeno")
else if(foundVirus) else if(foundVirus)
client.images += image(tempHud,patient,"hudill") client.images += image(tempHud,patient,"hudill")

View File

@@ -41,36 +41,29 @@
/mob/living/silicon/robot/death(gibbed) /mob/living/silicon/robot/death(gibbed)
if (!gibbed) if(stat == DEAD) return
src.emote("deathgasp") if(!gibbed)
src.stat = 2 emote("deathgasp")
src.canmove = 0 stat = DEAD
update_canmove()
tension_master.death(src) tension_master.death(src)
src.camera.status = 0.0 camera.status = 0
if(src.in_contents_of(/obj/machinery/recharge_station))//exit the recharge station if(in_contents_of(/obj/machinery/recharge_station))//exit the recharge station
var/obj/machinery/recharge_station/RC = src.loc var/obj/machinery/recharge_station/RC = loc
RC.go_out() RC.go_out()
if(src.blind) if(blind) blind.layer = 0
src.blind.layer = 0 sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
src.sight |= SEE_TURFS see_in_dark = 8
src.sight |= SEE_MOBS see_invisible = 2
src.sight |= SEE_OBJS updateicon()
src.see_in_dark = 8
src.see_invisible = 2
src.updateicon()
tod = worldtime2text() //weasellos time of death patch tod = worldtime2text() //weasellos time of death patch
store_memory("Time of death: [tod]", 0) if(mind) mind.store_memory("Time of death: [tod]", 0)
sql_report_cyborg_death(src) sql_report_cyborg_death(src)
if (src.key)
spawn(50)
if(src.key && src.stat == 2)
src.verbs += /mob/proc/ghost
return ..(gibbed) return ..(gibbed)

View File

@@ -1,21 +1,18 @@
/mob/living/silicon/robot/Login(var/syndie = 0) /mob/living/silicon/robot/Login(var/syndie = 0)
..() ..()
regenerate_icons() regenerate_icons()
if (!isturf(src.loc)) if(!isturf(loc))
src.client.eye = src.loc client.eye = loc
src.client.perspective = EYE_PERSPECTIVE client.perspective = EYE_PERSPECTIVE
if (src.stat == 2) if(real_name == "Cyborg")
src.verbs += /mob/proc/ghost ident = rand(1, 999)
if(src.real_name == "Cyborg") real_name += " "
src.ident = rand(1, 999) real_name += "-[ident]"
src.real_name += " " name = real_name
src.real_name += "-[ident]" /*if(!connected_ai)
src.name = src.real_name
/*if(!src.connected_ai)
for(var/mob/living/silicon/ai/A in world) for(var/mob/living/silicon/ai/A in world)
src.connected_ai = A connected_ai = A
A.connected_robots += src A.connected_robots += src
break break
*/ */
@@ -54,8 +51,8 @@
var/obj/item/weapon/cell/C = new(src) var/obj/item/weapon/cell/C = new(src)
C.charge = 1500 C.charge = 1500
cell = C cell = C
if(src.mind) if(mind)
ticker.mode.remove_revolutionary(src.mind) ticker.mode.remove_revolutionary(mind)
started = 1 started = 1
return return

View File

@@ -10,7 +10,6 @@
layer = 4 layer = 4
pressure_resistance = 1 pressure_resistance = 1
slot_flags = SLOT_HEAD slot_flags = SLOT_HEAD
see_face = 1
body_parts_covered = HEAD body_parts_covered = HEAD
protective_temperature = 0 protective_temperature = 0

View File

@@ -168,9 +168,10 @@ var/MAX_EXPLOSION_RANGE = 14
#define HIDESUITSTORAGE 2 //APPLIES ONLY TO THE EXTERIOR SUIT!! #define HIDESUITSTORAGE 2 //APPLIES ONLY TO THE EXTERIOR SUIT!!
#define HIDEJUMPSUIT 4 //APPLIES ONLY TO THE EXTERIOR SUIT!! #define HIDEJUMPSUIT 4 //APPLIES ONLY TO THE EXTERIOR SUIT!!
#define HIDESHOES 8 //APPLIES ONLY TO THE EXTERIOR SUIT!! #define HIDESHOES 8 //APPLIES ONLY TO THE EXTERIOR SUIT!!
#define HIDEMASK 1 //APPLIES ONLY TO HELMETS!! #define HIDEMASK 1 //APPLIES ONLY TO HELMETS/MASKS!!
#define HIDEEARS 2 //APPLIES ONLY TO HELMETS!! #define HIDEEARS 2 //APPLIES ONLY TO HELMETS/MASKS!!
#define HIDEEYES 4 //APPLIES ONLY TO HELMETS!! #define HIDEEYES 4 //APPLIES ONLY TO HELMETS/MASKS!!
#define HIDEFACE 8 //APPLIES ONLY TO HELMETS/MASKS!! Dictates whether we appear as unknown.
//Cant seem to find a mob bitflags area other than the powers one //Cant seem to find a mob bitflags area other than the powers one
@@ -342,10 +343,11 @@ var/list/global_mutations = list() // list of hidden mutation things
#define EYE_BLUR "eye_blur" #define EYE_BLUR "eye_blur"
#define DROWSY "drowsy" #define DROWSY "drowsy"
//Bitflags defining which status effects can be inflicted on a mob //Bitflags defining which status effects could be or are inflicted on a mob
#define CANSTUN 1 #define CANSTUN 1
#define CANWEAKEN 2 #define CANWEAKEN 2
#define CANPARALYSE 4 #define CANPARALYSE 4
#define XENO_HOST 32768 //Tracks whether we're gonna be a baby alien's mummy.
#define DISFIGURED 65536 //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system #define DISFIGURED 65536 //I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system
var/static/list/scarySounds = list('thudswoosh.ogg','Taser.ogg','armbomb.ogg','hiss1.ogg','hiss2.ogg','hiss3.ogg','hiss4.ogg','hiss5.ogg','hiss6.ogg','Glassbr1.ogg','Glassbr2.ogg','Glassbr3.ogg','Welder.ogg','Welder2.ogg','airlock.ogg','clownstep1.ogg','clownstep2.ogg') var/static/list/scarySounds = list('thudswoosh.ogg','Taser.ogg','armbomb.ogg','hiss1.ogg','hiss2.ogg','hiss3.ogg','hiss4.ogg','hiss5.ogg','hiss6.ogg','Glassbr1.ogg','Glassbr2.ogg','Glassbr3.ogg','Welder.ogg','Welder2.ogg','airlock.ogg','clownstep1.ogg','clownstep2.ogg')

View File

@@ -46,6 +46,18 @@ 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. --> 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 --> <!-- 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">14 July 2012</h2>
<h3 class="author">Carn updated:</h3>
<ul class="changes bgimages16">
<li class="wip">All living mobs can now ghost whenever they want. Essentially making the suicide verb obsolete. If you ghost whilst still alive however, you may not re-enter your body for the rest of the round.</li>
<li class="wip">Humans can no longer suicide whilst restrained (this is purely to prevent meta whilst I finish up the new <a href='http://nanotrasen.com/phpBB3/viewtopic.php?f=9&t=9331'>FUN suicides</a>)</li>
<li class="bugfix">Fixed dem evidence bags. Fixed metroids getting at it like rabbits. Fixed stuff like welding masks not hiding your face. Bunch of other things</li>
</ul>
</div>
<div class="commit sansserif"> <div class="commit sansserif">
<h2 class="date">Saturday July 14th 2012</h2> <h2 class="date">Saturday July 14th 2012</h2>
<h3 class="author">Giacom updated:</h3> <h3 class="author">Giacom updated:</h3>

View File

@@ -967,6 +967,7 @@
#include "code\modules\mob\living\carbon\brain\death.dm" #include "code\modules\mob\living\carbon\brain\death.dm"
#include "code\modules\mob\living\carbon\brain\hud.dm" #include "code\modules\mob\living\carbon\brain\hud.dm"
#include "code\modules\mob\living\carbon\brain\life.dm" #include "code\modules\mob\living\carbon\brain\life.dm"
#include "code\modules\mob\living\carbon\brain\login.dm"
#include "code\modules\mob\living\carbon\brain\MMI.dm" #include "code\modules\mob\living\carbon\brain\MMI.dm"
#include "code\modules\mob\living\carbon\brain\say.dm" #include "code\modules\mob\living\carbon\brain\say.dm"
#include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\death.dm"