mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
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:
@@ -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.
|
||||
affected_mob.resistances += text2path(saved_type)
|
||||
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]"
|
||||
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
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
layer = 2
|
||||
var/level = 2
|
||||
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/fingerprintshidden
|
||||
var/fingerprintslast = null
|
||||
|
||||
@@ -317,7 +317,7 @@
|
||||
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.
|
||||
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/body_parts_covered = 0 //see setup.dm for appropriate bit flags
|
||||
var/protective_temperature = 0
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
name = "cult hood"
|
||||
icon_state = "culthood"
|
||||
desc = "A hood worn by the followers of Nar-Sie."
|
||||
see_face = 0
|
||||
flags_inv = HIDEFACE
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES
|
||||
armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
icon_state = "magus"
|
||||
item_state = "magus"
|
||||
desc = "A helm worn by the followers of Nar-Sie."
|
||||
see_face = 0
|
||||
flags_inv = HIDEFACE
|
||||
flags = FPRINT|TABLEPASS|SUITSPACE|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
|
||||
armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
|
||||
if(patient.stat == 2)
|
||||
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")
|
||||
else if(foundVirus)
|
||||
C.images += image(tempHud,patient,"hudill")
|
||||
|
||||
@@ -153,7 +153,8 @@ var/const/MAX_ACTIVE_TIME = 600
|
||||
if(!sterile)
|
||||
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)
|
||||
target.alien_egg_flag = max(1,target.alien_egg_flag)
|
||||
target.status_flags |= XENO_HOST
|
||||
break
|
||||
|
||||
for(var/mob/O in viewers(target,null))
|
||||
O.show_message("\red \b [src] falls limp after violating [target]'s face!", 1)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/mob/living/carbon/human/verb/suicide()
|
||||
set hidden = 1
|
||||
|
||||
if (stat == 2)
|
||||
if (stat == DEAD)
|
||||
src << "You're already dead!"
|
||||
return
|
||||
|
||||
@@ -17,11 +17,10 @@
|
||||
|
||||
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(!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
|
||||
//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>"
|
||||
@@ -69,11 +68,10 @@
|
||||
|
||||
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(!canmove || restrained())
|
||||
src << "You can't commit suicide whilst restrained! ((You can type Ghost instead however.))"
|
||||
return
|
||||
suiciding = 1
|
||||
//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>"
|
||||
|
||||
@@ -464,7 +464,8 @@
|
||||
holder.state = 1
|
||||
update_admins(rank)
|
||||
if(istype(mob, /mob/dead/observer))
|
||||
mob:reenter_corpse()
|
||||
var/mob/dead/observer/ghost = mob
|
||||
ghost.reenter_corpse()
|
||||
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!
|
||||
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
////////////
|
||||
//SECURITY//
|
||||
////////////
|
||||
#define TOPIC_SPAM_DELAY 4 //4 tick delay is about half a second
|
||||
// REDUCED because holy fucking balls the delay was too damn high
|
||||
|
||||
#define TOPIC_SPAM_DELAY 4 //4 ticks is about 3/10ths of a second
|
||||
#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.
|
||||
@@ -21,9 +19,11 @@
|
||||
If you have any questions about this stuff feel free to ask. ~Carn
|
||||
*/
|
||||
/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
|
||||
if(next_allowed_topic_time > world.time)
|
||||
// src << "\red DEBUG: Error: SPAM"
|
||||
return
|
||||
next_allowed_topic_time = world.time + TOPIC_SPAM_DELAY
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
del(src)
|
||||
return
|
||||
|
||||
if (((world.address == address || !(address)) && !(host)))
|
||||
if ( (world.address == address || !address) && !host )
|
||||
host = key
|
||||
world.update_status()
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
C.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
|
||||
if(patient.stat == 2)
|
||||
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")
|
||||
else if(foundVirus)
|
||||
C.images += image(tempHud,patient,"hudill")
|
||||
|
||||
@@ -90,9 +90,8 @@
|
||||
icon_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!"
|
||||
see_face = 0.0
|
||||
flags = FPRINT | TABLEPASS | BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
|
||||
|
||||
/obj/item/clothing/head/cueball
|
||||
@@ -125,5 +124,4 @@
|
||||
icon_state = "cardborg_h"
|
||||
item_state = "cardborg_h"
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
see_face = 0.0
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
|
||||
@@ -5,8 +5,7 @@
|
||||
item_state = "hardhat0_pumpkin"
|
||||
color = "pumpkin"
|
||||
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
|
||||
see_face = 0.0
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
var/brightness_on = 2 //luminosity when on
|
||||
var/on = 0
|
||||
|
||||
|
||||
@@ -3,14 +3,13 @@
|
||||
desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
|
||||
icon_state = "welding"
|
||||
flags = FPRINT | TABLEPASS | SUITSPACE | HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
see_face = 0.0
|
||||
item_state = "welding"
|
||||
protective_temperature = 1300
|
||||
m_amt = 3000
|
||||
g_amt = 1000
|
||||
var/up = 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()
|
||||
@@ -25,16 +24,14 @@
|
||||
if(usr.canmove && !usr.stat && !usr.restrained())
|
||||
if(src.up)
|
||||
src.up = !src.up
|
||||
src.see_face = !src.see_face
|
||||
src.flags |= HEADCOVERSEYES
|
||||
flags_inv |= HIDEMASK|HIDEEARS|HIDEEYES
|
||||
flags_inv |= HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
icon_state = "welding"
|
||||
usr << "You flip the mask down to protect your eyes."
|
||||
else
|
||||
src.up = !src.up
|
||||
src.see_face = !src.see_face
|
||||
src.flags &= ~HEADCOVERSEYES
|
||||
flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES)
|
||||
flags_inv &= ~(HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE)
|
||||
icon_state = "weldingup"
|
||||
usr << "You push the mask up out of your face."
|
||||
usr.update_inv_head() //so our mob-overlays update
|
||||
@@ -3,8 +3,8 @@
|
||||
desc = "LOADSAMONEY"
|
||||
icon_state = "balaclava"
|
||||
item_state = "balaclava"
|
||||
see_face = 0.0
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|BLOCKHAIR
|
||||
flags_inv = HIDEFACE
|
||||
w_class = 2
|
||||
|
||||
/obj/item/clothing/mask/luchador
|
||||
@@ -13,7 +13,7 @@
|
||||
icon_state = "luchag"
|
||||
item_state = "luchag"
|
||||
flags = FPRINT|TABLEPASS|HEADSPACE|BLOCKHAIR
|
||||
see_face = 0.0
|
||||
flags_inv = HIDEFACE
|
||||
w_class = 2
|
||||
|
||||
/obj/item/clothing/mask/luchador/tecnicos
|
||||
|
||||
@@ -3,9 +3,8 @@
|
||||
desc = "A face-covering mask that can be connected to an air supply."
|
||||
icon_state = "gas_alt"
|
||||
flags = FPRINT|TABLEPASS|SUITSPACE|MASKCOVERSMOUTH|MASKCOVERSEYES
|
||||
flags_inv = HIDEEARS|HIDEEYES
|
||||
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
|
||||
w_class = 3.0
|
||||
see_face = 0.0
|
||||
item_state = "gas_alt"
|
||||
protective_temperature = 500
|
||||
heat_transfer_coefficient = 0.01
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
desc = "Warning: moustache is fake."
|
||||
icon_state = "fake-moustache"
|
||||
flags = FPRINT|TABLEPASS
|
||||
see_face = 0.0 //Well, it's a disguise, of course.
|
||||
flags_inv = HIDEFACE
|
||||
|
||||
/obj/item/clothing/mask/owl_mask
|
||||
name = "owl mask"
|
||||
|
||||
@@ -9,11 +9,10 @@ Space suit parts
|
||||
icon_state = "space"
|
||||
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
|
||||
flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES | BLOCKHAIR
|
||||
see_face = 0.0
|
||||
item_state = "space"
|
||||
permeability_coefficient = 0.01
|
||||
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
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
name = "ninja hood"
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_mask"
|
||||
see_face = 1
|
||||
allowed = list(/obj/item/weapon/cell)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
desc = "A high tech, NASA Centcom branch designed, dark red space suit helmet. Used for AI satellite maintenance."
|
||||
icon_state = "void"
|
||||
item_state = "void"
|
||||
see_face = 1
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/nasavoid
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
item_state = "capspacehelmet"
|
||||
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
|
||||
see_face = 0.0
|
||||
flags_inv = HIDEFACE
|
||||
permeability_coefficient = 0.01
|
||||
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
|
||||
|
||||
|
||||
@@ -22,15 +22,20 @@
|
||||
user << "You find putting an evidence bag in another evidence bag to be slightly absurd."
|
||||
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)
|
||||
user << "The [src] already has something inside it."
|
||||
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
|
||||
user.client.screen -= 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].",\
|
||||
"You hear a rustle as someone puts something into a plastic bag.")
|
||||
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]"
|
||||
O.loc = src
|
||||
w_class = O.w_class
|
||||
@@ -50,7 +56,7 @@
|
||||
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].",\
|
||||
"You hear someone rustle around in a plastic bag, and remove something.")
|
||||
overlays -= I
|
||||
underlays = null //remove the underlays
|
||||
user.put_in_hands(I)
|
||||
w_class = 1
|
||||
icon_state = "evidenceobj"
|
||||
|
||||
@@ -7,21 +7,18 @@
|
||||
stat = DEAD
|
||||
|
||||
if(body)
|
||||
var/turf/location = get_turf(body)//Where is the mob located?
|
||||
if(location)//Found turf.
|
||||
loc = location
|
||||
else//Safety, in case a turf cannot be found.
|
||||
loc = pick(latejoin)
|
||||
if(!istype(body,/mob)) return//This needs to be recoded sometime so it has loc as its first arg
|
||||
real_name = body.name
|
||||
original_name = body.original_name //Original name is only used in ghost chat! It is not to be edited by anything!
|
||||
name = body.original_name
|
||||
if(!name)
|
||||
var/turf/T = get_turf(body) //Where is the body located?
|
||||
if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position
|
||||
loc = T
|
||||
if(ismob(body))
|
||||
real_name = body.real_name
|
||||
original_name = body.original_name //Original name is only used in ghost chat! It is not to be edited by anything!
|
||||
name = body.original_name
|
||||
if(!safety)
|
||||
corpse = body
|
||||
if(!name) //To prevent nameless ghosts
|
||||
name = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names)))
|
||||
real_name = name
|
||||
if(!safety)
|
||||
corpse = body
|
||||
verbs += /mob/dead/observer/proc/reenter_corpse
|
||||
return
|
||||
|
||||
/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)
|
||||
if(key)
|
||||
var/mob/dead/observer/ghost = new(src,transfer_mind) //Transfer safety to observer spawning proc.
|
||||
if(client)
|
||||
client.screen.len = null//Clear the hud, just to be sure.
|
||||
var/mob/dead/observer/ghost = new(src,transfer_mind)//Transfer safety to observer spawning proc.
|
||||
if(transfer_mind)//When a body is destroyed.
|
||||
if(mind)
|
||||
mind.transfer_to(ghost)
|
||||
else//They may not have a mind and be gibbed/destroyed.
|
||||
ghost.key = key
|
||||
else//Else just modify their key and connect them.
|
||||
client.images.len = null //remove the images such as AIs being unable to see runes
|
||||
client.screen.len = null //remove hud items just in case
|
||||
ghost.attack_log = attack_log //preserve our attack logs by copying them to our ghost
|
||||
if(transfer_mind && mind) //When a body is destroyed attempt to transfer their mind
|
||||
mind.transfer_to(ghost)
|
||||
else //Else just modify their key and connect them.
|
||||
ghost.key = key
|
||||
|
||||
verbs -= /mob/proc/ghost
|
||||
if (ghost.client)
|
||||
ghost.client.eye = ghost
|
||||
|
||||
else if(transfer_mind)//Body getting destroyed but the person is not present inside.
|
||||
else if(transfer_mind) //Body getting destroyed but the person is not present inside.
|
||||
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)
|
||||
O.mind = mind//Transfer their mind if they have one.
|
||||
O.mind = mind //Transfer their mind if they have one.
|
||||
break
|
||||
return
|
||||
|
||||
/*
|
||||
This is the proc mobs get to turn into a ghost. Forked from ghostize due to compatibility issues.
|
||||
*/
|
||||
/mob/proc/ghost()
|
||||
set category = "Ghost"
|
||||
/mob/living/verb/ghost()
|
||||
set category = "OOC"
|
||||
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
|
||||
src << "Only dead people and admins get to ghost, and admins don't use this verb to ghost while alive."
|
||||
return*/
|
||||
if(key)
|
||||
var/mob/dead/observer/ghost = new(src)
|
||||
ghost.key = key
|
||||
verbs -= /mob/proc/ghost
|
||||
if (ghost.client)
|
||||
ghost.client.eye = ghost
|
||||
if(stat == DEAD)
|
||||
ghostize(0)
|
||||
else
|
||||
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")
|
||||
if(response != "Ghost") return //didn't want to ghost after-all
|
||||
ghostize(1) //safety is on so we can never re-enter our body, "Charlie, you can never come baaaack~" :3
|
||||
return
|
||||
|
||||
/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)
|
||||
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 name = "Re-enter Corpse"
|
||||
if(!client) return
|
||||
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
|
||||
if(client && client.holder && client.holder.state == 2)
|
||||
if(client.holder && client.holder.state == 2)
|
||||
var/rank = client.holder.rank
|
||||
client.clear_admin_verbs()
|
||||
client.holder.state = 1
|
||||
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
|
||||
for(var/obj/effect/rune/R in world)
|
||||
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)
|
||||
corpse.ajourn=0
|
||||
client.mob = corpse
|
||||
if (corpse.stat==2)
|
||||
verbs += /mob/proc/ghost
|
||||
del(src)
|
||||
|
||||
/mob/dead/observer/proc/dead_tele()
|
||||
set category = "Ghost"
|
||||
set name = "Teleport"
|
||||
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!"
|
||||
return
|
||||
usr.verbs -= /mob/dead/observer/proc/dead_tele
|
||||
spawn(30)
|
||||
usr.verbs += /mob/dead/observer/proc/dead_tele
|
||||
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]
|
||||
if(!thearea) return
|
||||
|
||||
var/list/L = list()
|
||||
for(var/turf/T in get_area_turfs(thearea.type))
|
||||
|
||||
@@ -1,34 +1,16 @@
|
||||
/mob/living/carbon/alien/humanoid/death(gibbed)
|
||||
if(src.stat == 2)
|
||||
return
|
||||
if(src.healths)
|
||||
src.healths.icon_state = "health6"
|
||||
src.stat = 2
|
||||
if(stat == DEAD) return
|
||||
if(healths) healths.icon_state = "health6"
|
||||
stat = DEAD
|
||||
|
||||
if (!gibbed)
|
||||
// emote("deathgasp") // Dead -- Skie // Doesn't work due to stat == 2 -- Urist
|
||||
playsound(src.loc, 'hiss6.ogg', 80, 1, 1)
|
||||
if(!gibbed)
|
||||
playsound(loc, 'hiss6.ogg', 80, 1, 1)
|
||||
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)
|
||||
|
||||
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.key)
|
||||
spawn(10)
|
||||
if(src.key && src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
update_canmove()
|
||||
if(client) blind.layer = 0
|
||||
|
||||
tod = worldtime2text() //weasellos time of death patch
|
||||
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]"
|
||||
if(mind) mind.store_memory("Time of death: [tod]", 0)
|
||||
|
||||
return ..(gibbed)
|
||||
|
||||
@@ -1,106 +1,7 @@
|
||||
/mob/living/carbon/alien/humanoid/Login()
|
||||
..()
|
||||
|
||||
update_hud()
|
||||
|
||||
if (!isturf(src.loc))
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (src.stat == DEAD)
|
||||
src.verbs += /mob/proc/ghost
|
||||
|
||||
if(!isturf(loc))
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
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
|
||||
|
||||
*/
|
||||
@@ -1,32 +1,14 @@
|
||||
/mob/living/carbon/alien/larva/death(gibbed)
|
||||
if(src.stat == 2)
|
||||
return
|
||||
if(src.healths)
|
||||
src.healths.icon_state = "health6"
|
||||
if(stat == DEAD) return
|
||||
if(healths) healths.icon_state = "health6"
|
||||
stat = DEAD
|
||||
icon_state = "larva_l"
|
||||
|
||||
src.icon_state = "larva_l"
|
||||
src.stat = 2
|
||||
if(!gibbed)
|
||||
update_canmove()
|
||||
if(client) blind.layer = 0
|
||||
|
||||
if (!gibbed)
|
||||
|
||||
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)
|
||||
tod = worldtime2text() //weasellos time of death patch
|
||||
if(mind) mind.store_memory("Time of death: [tod]", 0)
|
||||
|
||||
return ..(gibbed)
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
/mob/living/carbon/alien/larva/Login()
|
||||
..()
|
||||
|
||||
if (!isturf(src.loc))
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
|
||||
if(!isturf(loc))
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
return
|
||||
|
||||
@@ -33,17 +33,6 @@
|
||||
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()
|
||||
if(in_contents_of(/obj/mecha)) canmove = 1
|
||||
else canmove = 0
|
||||
|
||||
@@ -1,24 +1,17 @@
|
||||
/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.
|
||||
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)
|
||||
container.icon_state = "mmi_dead"
|
||||
stat = 2
|
||||
|
||||
if(blind)
|
||||
blind.layer = 0
|
||||
sight |= SEE_TURFS
|
||||
sight |= SEE_MOBS
|
||||
sight |= SEE_OBJS
|
||||
stat = DEAD
|
||||
|
||||
if(blind) blind.layer = 0
|
||||
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
|
||||
see_in_dark = 8
|
||||
see_invisible = 2
|
||||
|
||||
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)
|
||||
6
code/modules/mob/living/carbon/brain/login.dm
Normal file
6
code/modules/mob/living/carbon/brain/login.dm
Normal file
@@ -0,0 +1,6 @@
|
||||
/mob/living/carbon/brain/Login()
|
||||
..()
|
||||
if (!isturf(loc))
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
return
|
||||
@@ -1,4 +1,3 @@
|
||||
/mob/living/carbon
|
||||
|
||||
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.
|
||||
|
||||
@@ -40,74 +40,44 @@
|
||||
|
||||
|
||||
/mob/living/carbon/human/death(gibbed)
|
||||
|
||||
if(halloss > 0 && (!gibbed))
|
||||
if(halloss > 0 && !gibbed)
|
||||
halloss = 0
|
||||
return
|
||||
|
||||
if(src.stat == 2)
|
||||
return
|
||||
|
||||
if(src.healths)
|
||||
src.healths.icon_state = "health5"
|
||||
|
||||
src.stat = 2
|
||||
src.dizziness = 0
|
||||
src.jitteriness = 0
|
||||
if(stat == DEAD) return
|
||||
if(healths) healths.icon_state = "health5"
|
||||
stat = DEAD
|
||||
dizziness = 0
|
||||
jitteriness = 0
|
||||
|
||||
tension_master.death(src)
|
||||
|
||||
if (!gibbed)
|
||||
if(!gibbed)
|
||||
emote("deathgasp") //let the world KNOW WE ARE DEAD
|
||||
|
||||
//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.
|
||||
var/location = loc
|
||||
explosion(location, 1, 2, 3, 4)
|
||||
|
||||
canmove = 0
|
||||
if(src.client)
|
||||
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
|
||||
update_canmove()
|
||||
if(client) blind.layer = 0
|
||||
|
||||
if (client)
|
||||
spawn(10)
|
||||
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)
|
||||
tod = worldtime2text() //weasellos time of death patch
|
||||
if(mind) mind.store_memory("Time of death: [tod]", 0)
|
||||
sql_report_death(src)
|
||||
|
||||
//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.")
|
||||
*/
|
||||
ticker.mode.check_win() //Calls the rounds wincheck, mainly for wizard, malf, and changeling now
|
||||
return ..(gibbed)
|
||||
|
||||
/mob/living/carbon/human/proc/ChangeToHusk()
|
||||
if(HUSK in src.mutations)
|
||||
return
|
||||
if(HUSK in mutations) return
|
||||
mutations.Add(HUSK)
|
||||
real_name = "Unknown"
|
||||
status_flags |= DISFIGURED //makes them unknown without fucking up other stuff like admintools
|
||||
update_body(0)
|
||||
update_mutantrace()
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/Drain()
|
||||
ChangeToHusk()
|
||||
mutations.Add(NOCLONE)
|
||||
mutations |= NOCLONE
|
||||
return
|
||||
@@ -2,7 +2,7 @@
|
||||
set src in view()
|
||||
|
||||
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>"
|
||||
return
|
||||
|
||||
@@ -13,18 +13,23 @@
|
||||
var/skipmask = 0
|
||||
var/skipears = 0
|
||||
var/skipeyes = 0
|
||||
var/skipface = 0
|
||||
|
||||
//exosuits and helmets obscure our view and stuff.
|
||||
if (src.wear_suit)
|
||||
skipgloves = src.wear_suit.flags_inv & HIDEGLOVES
|
||||
skipsuitstorage = src.wear_suit.flags_inv & HIDESUITSTORAGE
|
||||
skipjumpsuit = src.wear_suit.flags_inv & HIDEJUMPSUIT
|
||||
skipshoes = src.wear_suit.flags_inv & HIDESHOES
|
||||
if(wear_suit)
|
||||
skipgloves = wear_suit.flags_inv & HIDEGLOVES
|
||||
skipsuitstorage = wear_suit.flags_inv & HIDESUITSTORAGE
|
||||
skipjumpsuit = wear_suit.flags_inv & HIDEJUMPSUIT
|
||||
skipshoes = wear_suit.flags_inv & HIDESHOES
|
||||
|
||||
if (src.head)
|
||||
skipmask = src.head.flags_inv & HIDEMASK
|
||||
skipeyes = src.head.flags_inv & HIDEEYES
|
||||
skipears = src.head.flags_inv & HIDEEARS
|
||||
if(head)
|
||||
skipmask = head.flags_inv & HIDEMASK
|
||||
skipeyes = head.flags_inv & HIDEEYES
|
||||
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 :<
|
||||
var/t_He = "It" //capitalised for use at the start of each line.
|
||||
@@ -35,16 +40,16 @@
|
||||
|
||||
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_his = "their"
|
||||
t_him = "them"
|
||||
t_has = "have"
|
||||
t_is = "are"
|
||||
else
|
||||
if(src.icon)
|
||||
msg += "\icon[src.icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
|
||||
switch(src.gender)
|
||||
if(icon)
|
||||
msg += "\icon[icon] " //fucking BYOND: this should stop dreamseeker crashing if we -somehow- examine somebody before their icon is generated
|
||||
switch(gender)
|
||||
if(MALE)
|
||||
t_He = "He"
|
||||
t_his = "his"
|
||||
@@ -54,137 +59,137 @@
|
||||
t_his = "her"
|
||||
t_him = "her"
|
||||
|
||||
msg += "<EM>\a [src]</EM>!\n"
|
||||
msg += "<EM>[src.name]</EM>!\n"
|
||||
|
||||
//uniform
|
||||
if (src.w_uniform && !skipjumpsuit)
|
||||
if (src.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"
|
||||
if(w_uniform && !skipjumpsuit)
|
||||
if(w_uniform.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.head)
|
||||
if (src.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"
|
||||
if(head)
|
||||
if(head.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.wear_suit)
|
||||
if (src.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"
|
||||
if(wear_suit)
|
||||
if(wear_suit.blood_DNA)
|
||||
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
|
||||
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
|
||||
if(src.s_store && !skipsuitstorage)
|
||||
if(src.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"
|
||||
if(s_store && !skipsuitstorage)
|
||||
if(s_store.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.back)
|
||||
if (src.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"
|
||||
if(back)
|
||||
if(back.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.l_hand)
|
||||
if (src.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"
|
||||
if(l_hand)
|
||||
if(l_hand.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.r_hand)
|
||||
if (src.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"
|
||||
if(r_hand)
|
||||
if(r_hand.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.gloves && !skipgloves)
|
||||
if (src.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"
|
||||
if(gloves && !skipgloves)
|
||||
if(gloves.blood_DNA)
|
||||
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
|
||||
msg += "[t_He] [t_has] \icon[src.gloves] \a [src.gloves] on [t_his] hands.\n"
|
||||
else if (src.blood_DNA)
|
||||
msg += "[t_He] [t_has] \icon[gloves] \a [gloves] on [t_his] hands.\n"
|
||||
else if(blood_DNA)
|
||||
msg += "<span class='warning'>[t_He] [t_has] blood-stained hands!</span>\n"
|
||||
|
||||
//handcuffed?
|
||||
|
||||
//handcuffed?
|
||||
if (src.handcuffed)
|
||||
if(istype(src.handcuffed, /obj/item/weapon/handcuffs/cable))
|
||||
msg += "<span class='warning'>[t_He] [t_is] \icon[src.handcuffed] restrained with cable!</span>\n"
|
||||
if(handcuffed)
|
||||
if(istype(handcuffed, /obj/item/weapon/handcuffs/cable))
|
||||
msg += "<span class='warning'>[t_He] [t_is] \icon[handcuffed] restrained with cable!</span>\n"
|
||||
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
|
||||
if (src.belt)
|
||||
if (src.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"
|
||||
if(belt)
|
||||
if(belt.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.shoes && !skipshoes)
|
||||
if(src.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"
|
||||
if(shoes && !skipshoes)
|
||||
if(shoes.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.wear_mask && !skipmask)
|
||||
if (src.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"
|
||||
if(wear_mask && !skipmask)
|
||||
if(wear_mask.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.glasses && !skipeyes)
|
||||
if (src.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"
|
||||
if(glasses && !skipeyes)
|
||||
if(glasses.blood_DNA)
|
||||
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
|
||||
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
|
||||
if (src.ears && !skipears)
|
||||
msg += "[t_He] [t_has] \icon[src.ears] \a [src.ears] on [t_his] ears.\n"
|
||||
if(ears && !skipears)
|
||||
msg += "[t_He] [t_has] \icon[ears] \a [ears] on [t_his] ears.\n"
|
||||
|
||||
//ID
|
||||
if (src.wear_id)
|
||||
if(wear_id)
|
||||
var/id
|
||||
if(istype(src.wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = src.wear_id
|
||||
if(istype(wear_id, /obj/item/device/pda))
|
||||
var/obj/item/device/pda/pda = wear_id
|
||||
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 :[
|
||||
var/obj/item/weapon/card/id/idcard = src.wear_id
|
||||
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 = wear_id
|
||||
id = idcard.registered_name
|
||||
if (id && (id != src.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"
|
||||
if(id && (id != real_name) && (get_dist(src, usr) <= 1) && prob(10))
|
||||
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[wear_id] \a [wear_id] yet something doesn't seem right...</span>\n"
|
||||
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
|
||||
if (src.is_jittery)
|
||||
if(src.jitteriness >= 300)
|
||||
if(is_jittery)
|
||||
if(jitteriness >= 300)
|
||||
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"
|
||||
else if(src.jitteriness >= 100)
|
||||
else if(jitteriness >= 100)
|
||||
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"
|
||||
|
||||
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"
|
||||
|
||||
if(!src.client)
|
||||
if(!client)
|
||||
var/foundghost = 0
|
||||
for(var/mob/dead/observer/G in world)
|
||||
if(G.client)
|
||||
@@ -196,48 +201,51 @@
|
||||
msg += "...</span>\n"
|
||||
|
||||
else
|
||||
|
||||
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 < 30)
|
||||
if(temp < 30)
|
||||
msg += "[t_He] [t_has] minor bruising.\n"
|
||||
else
|
||||
msg += "<B>[t_He] [t_has] severe bruising!</B>\n"
|
||||
|
||||
temp = src.getFireLoss()
|
||||
if (temp)
|
||||
if (temp < 30)
|
||||
temp = getFireLoss()
|
||||
if(temp)
|
||||
if(temp < 30)
|
||||
msg += "[t_He] [t_has] minor burns.\n"
|
||||
else
|
||||
msg += "<B>[t_He] [t_has] severe burns!</B>\n"
|
||||
|
||||
temp = src.getCloneLoss()
|
||||
if (temp)
|
||||
if (temp < 30)
|
||||
temp = getCloneLoss()
|
||||
if(temp)
|
||||
if(temp < 30)
|
||||
msg += "[t_He] [t_has] minor genetic deformities.\n"
|
||||
else
|
||||
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"
|
||||
else if (src.nutrition >= 500)
|
||||
if (usr.nutrition < 100)
|
||||
else if(nutrition >= 500)
|
||||
if(usr.nutrition < 100)
|
||||
msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n"
|
||||
else
|
||||
msg += "[t_He] [t_is] quite chubby.\n"
|
||||
|
||||
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"
|
||||
else if (src.getBrainLoss() >= 60)
|
||||
else if(getBrainLoss() >= 60)
|
||||
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"
|
||||
|
||||
if (src.digitalcamo)
|
||||
if(digitalcamo)
|
||||
msg += "[t_He] [t_is] repulsively uncanny!\n"
|
||||
|
||||
|
||||
@@ -257,12 +265,12 @@
|
||||
var/obj/item/device/pda/tempPda = wear_id
|
||||
perpname = tempPda.owner
|
||||
else
|
||||
perpname = src.name
|
||||
perpname = name
|
||||
|
||||
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)
|
||||
if (R.fields["id"] == E.fields["id"])
|
||||
if(R.fields["id"] == E.fields["id"])
|
||||
criminal = R.fields["criminal"]
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
/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")
|
||||
|
||||
if( head && (head.flags_inv&HIDEFACE) )
|
||||
return get_id_name("Unknown") //Likewise for hats
|
||||
var/face_name = get_face_name()
|
||||
var/id_name = get_id_name("")
|
||||
if(id_name && (id_name != face_name))
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
/mob/living/carbon/human/Login()
|
||||
..()
|
||||
|
||||
update_hud()
|
||||
|
||||
if (!isturf(src.loc))
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (src.stat == DEAD)
|
||||
src.verbs += /mob/proc/ghost
|
||||
|
||||
if(!isturf(loc))
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
return
|
||||
|
||||
@@ -1,42 +1,20 @@
|
||||
/mob/living/carbon/metroid/death(gibbed)
|
||||
if(src.stat == 2)
|
||||
return
|
||||
if(stat == DEAD) return
|
||||
stat = DEAD
|
||||
icon_state = "baby metroid dead"
|
||||
|
||||
if(!gibbed)
|
||||
if(istype(src, /mob/living/carbon/metroid/adult))
|
||||
|
||||
if(client)
|
||||
var/mob/dead/observer/ghost = new(src)
|
||||
ghost.key = key
|
||||
if (ghost.client)
|
||||
ghost.client.eye = ghost
|
||||
|
||||
explosion(src.loc, -1,-1,3,12)
|
||||
sleep(2)
|
||||
del(src)
|
||||
ghostize(1)
|
||||
explosion(loc, -1,-1,3,12)
|
||||
if(src) del(src)
|
||||
else
|
||||
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
|
||||
src.canmove = 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
|
||||
update_canmove()
|
||||
if(blind) blind.layer = 0
|
||||
|
||||
ticker.mode.check_win()
|
||||
|
||||
if (src.key)
|
||||
spawn(50)
|
||||
if(src.key && src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
|
||||
return ..(gibbed)
|
||||
@@ -505,7 +505,7 @@
|
||||
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)
|
||||
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.Friends = Friends
|
||||
M.tame = tame
|
||||
@@ -519,7 +519,7 @@
|
||||
if(!client)
|
||||
var/mob/living/carbon/metroid/adult/A = new/mob/living/carbon/metroid/adult(src.loc)
|
||||
A.nutrition = nutrition
|
||||
A.nutrition += 100
|
||||
// A.nutrition += 100
|
||||
A.powerlevel = max(0, powerlevel-1)
|
||||
A.Friends = Friends
|
||||
A.tame = tame
|
||||
|
||||
@@ -1,12 +1,7 @@
|
||||
/mob/living/carbon/metroid/Login()
|
||||
..()
|
||||
|
||||
update_hud()
|
||||
|
||||
if (!isturf(src.loc))
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (src.stat == DEAD)
|
||||
src.verbs += /mob/proc/ghost
|
||||
|
||||
if(!isturf(loc))
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
return
|
||||
|
||||
@@ -40,33 +40,17 @@
|
||||
|
||||
|
||||
/mob/living/carbon/monkey/death(gibbed)
|
||||
if(src.stat == DEAD)
|
||||
return
|
||||
if(stat == DEAD) return
|
||||
if(healths) healths.icon_state = "health5"
|
||||
stat = DEAD
|
||||
|
||||
if (src.healths)
|
||||
src.healths.icon_state = "health5"
|
||||
if(!gibbed)
|
||||
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
|
||||
src.canmove = 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
|
||||
update_canmove()
|
||||
if(blind) blind.layer = 0
|
||||
|
||||
ticker.mode.check_win()
|
||||
|
||||
if (src.key)
|
||||
spawn(50)
|
||||
if(src.key && src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
|
||||
return ..(gibbed)
|
||||
@@ -1,11 +1,7 @@
|
||||
/mob/living/carbon/monkey/Login()
|
||||
..()
|
||||
|
||||
update_hud()
|
||||
|
||||
if (!isturf(src.loc))
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (src.stat == DEAD)
|
||||
src.verbs += /mob/proc/ghost
|
||||
if(!isturf(loc))
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
return
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
/mob/living/silicon/ai/death(gibbed)
|
||||
stat = 2
|
||||
canmove = 0
|
||||
if(blind)
|
||||
blind.layer = 0
|
||||
sight |= SEE_TURFS
|
||||
sight |= SEE_MOBS
|
||||
sight |= SEE_OBJS
|
||||
if(stat == DEAD) return
|
||||
stat = DEAD
|
||||
icon_state = "ai-crash"
|
||||
|
||||
update_canmove()
|
||||
if(blind) blind.layer = 0
|
||||
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
|
||||
see_in_dark = 8
|
||||
see_invisible = 2
|
||||
icon_state = "ai-crash"
|
||||
|
||||
var/callshuttle = 0
|
||||
|
||||
@@ -56,8 +55,4 @@
|
||||
tod = worldtime2text() //weasellos time of death patch
|
||||
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)
|
||||
|
||||
@@ -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)
|
||||
var/image/blood = image(loc = rune)
|
||||
blood.override = 1
|
||||
client.images += blood
|
||||
..()
|
||||
regenerate_icons()
|
||||
for(var/S in src.client.screen)
|
||||
del(S)
|
||||
src.flash = new /obj/screen( null )
|
||||
src.flash.icon_state = "blank"
|
||||
src.flash.name = "flash"
|
||||
src.flash.screen_loc = "1,1 to 15,15"
|
||||
src.flash.layer = 17
|
||||
src.blind = new /obj/screen( null )
|
||||
src.blind.icon_state = "black"
|
||||
src.blind.name = " "
|
||||
src.blind.screen_loc = "1,1 to 15,15"
|
||||
src.blind.layer = 0
|
||||
src.client.screen += list( src.blind, src.flash )
|
||||
if(!isturf(src.loc))
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
else
|
||||
flash = new /obj/screen( null )
|
||||
flash.icon_state = "blank"
|
||||
flash.name = "flash"
|
||||
flash.screen_loc = "1,1 to 15,15"
|
||||
flash.layer = 17
|
||||
blind = new /obj/screen( null )
|
||||
blind.icon_state = "black"
|
||||
blind.name = " "
|
||||
blind.screen_loc = "1,1 to 15,15"
|
||||
blind.layer = 0
|
||||
client.screen += list( blind, flash )
|
||||
if(!isturf(loc))
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
if(stat != DEAD)
|
||||
for(var/obj/machinery/ai_status_display/O in world) //change status
|
||||
spawn(0)
|
||||
if(O)
|
||||
O.mode = 1
|
||||
O.emotion = "Neutral"
|
||||
if(O)
|
||||
O.mode = 1
|
||||
O.emotion = "Neutral"
|
||||
return
|
||||
@@ -1,12 +1,9 @@
|
||||
/mob/living/silicon/ai/Logout()
|
||||
..()
|
||||
for(var/obj/machinery/ai_status_display/O in world) //change status
|
||||
spawn( 0 )
|
||||
O.mode = 0
|
||||
if(!isturf(src.loc))
|
||||
if (src.client)
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
if(!isturf(loc))
|
||||
if (client)
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
return
|
||||
@@ -1,10 +1,10 @@
|
||||
/mob/living/silicon/decoy/death(gibbed)
|
||||
src.stat = 2
|
||||
src.icon_state = "ai-crash"
|
||||
if(stat == DEAD) return
|
||||
stat = DEAD
|
||||
icon_state = "ai-crash"
|
||||
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
|
||||
spawn( 0 )
|
||||
O.mode = 2
|
||||
O.mode = 2
|
||||
return ..(gibbed)
|
||||
@@ -1,23 +1,17 @@
|
||||
/mob/living/silicon/pai/death(gibbed)
|
||||
src.stat = 2
|
||||
src.canmove = 0
|
||||
if(src.blind)
|
||||
src.blind.layer = 0
|
||||
src.sight |= SEE_TURFS
|
||||
src.sight |= SEE_MOBS
|
||||
src.sight |= SEE_OBJS
|
||||
src.see_in_dark = 8
|
||||
src.see_invisible = 2
|
||||
if(stat == DEAD) return
|
||||
stat = DEAD
|
||||
canmove = 0
|
||||
if(blind) blind.layer = 0
|
||||
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
|
||||
see_in_dark = 8
|
||||
see_invisible = 2
|
||||
|
||||
//var/tod = time2text(world.realtime,"hh:mm:ss") //weasellos time of death patch
|
||||
//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.
|
||||
//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)
|
||||
|
||||
if(key)
|
||||
spawn(50)
|
||||
src.ghostize(0)
|
||||
del(mind)
|
||||
if(key) ghostize(0)
|
||||
del(src)
|
||||
@@ -43,7 +43,7 @@
|
||||
client.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
|
||||
if(patient.stat == 2)
|
||||
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")
|
||||
else if(foundVirus)
|
||||
client.images += image(tempHud,patient,"hudill")
|
||||
|
||||
@@ -41,36 +41,29 @@
|
||||
|
||||
|
||||
/mob/living/silicon/robot/death(gibbed)
|
||||
if (!gibbed)
|
||||
src.emote("deathgasp")
|
||||
src.stat = 2
|
||||
src.canmove = 0
|
||||
if(stat == DEAD) return
|
||||
if(!gibbed)
|
||||
emote("deathgasp")
|
||||
stat = DEAD
|
||||
update_canmove()
|
||||
|
||||
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
|
||||
var/obj/machinery/recharge_station/RC = src.loc
|
||||
if(in_contents_of(/obj/machinery/recharge_station))//exit the recharge station
|
||||
var/obj/machinery/recharge_station/RC = loc
|
||||
RC.go_out()
|
||||
|
||||
if(src.blind)
|
||||
src.blind.layer = 0
|
||||
src.sight |= SEE_TURFS
|
||||
src.sight |= SEE_MOBS
|
||||
src.sight |= SEE_OBJS
|
||||
|
||||
src.see_in_dark = 8
|
||||
src.see_invisible = 2
|
||||
src.updateicon()
|
||||
if(blind) blind.layer = 0
|
||||
sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
|
||||
see_in_dark = 8
|
||||
see_invisible = 2
|
||||
updateicon()
|
||||
|
||||
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)
|
||||
|
||||
if (src.key)
|
||||
spawn(50)
|
||||
if(src.key && src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
return ..(gibbed)
|
||||
@@ -1,21 +1,18 @@
|
||||
/mob/living/silicon/robot/Login(var/syndie = 0)
|
||||
..()
|
||||
|
||||
regenerate_icons()
|
||||
|
||||
if (!isturf(src.loc))
|
||||
src.client.eye = src.loc
|
||||
src.client.perspective = EYE_PERSPECTIVE
|
||||
if (src.stat == 2)
|
||||
src.verbs += /mob/proc/ghost
|
||||
if(src.real_name == "Cyborg")
|
||||
src.ident = rand(1, 999)
|
||||
src.real_name += " "
|
||||
src.real_name += "-[ident]"
|
||||
src.name = src.real_name
|
||||
/*if(!src.connected_ai)
|
||||
if(!isturf(loc))
|
||||
client.eye = loc
|
||||
client.perspective = EYE_PERSPECTIVE
|
||||
if(real_name == "Cyborg")
|
||||
ident = rand(1, 999)
|
||||
real_name += " "
|
||||
real_name += "-[ident]"
|
||||
name = real_name
|
||||
/*if(!connected_ai)
|
||||
for(var/mob/living/silicon/ai/A in world)
|
||||
src.connected_ai = A
|
||||
connected_ai = A
|
||||
A.connected_robots += src
|
||||
break
|
||||
*/
|
||||
@@ -54,8 +51,8 @@
|
||||
var/obj/item/weapon/cell/C = new(src)
|
||||
C.charge = 1500
|
||||
cell = C
|
||||
if(src.mind)
|
||||
ticker.mode.remove_revolutionary(src.mind)
|
||||
if(mind)
|
||||
ticker.mode.remove_revolutionary(mind)
|
||||
started = 1
|
||||
|
||||
return
|
||||
@@ -10,7 +10,6 @@
|
||||
layer = 4
|
||||
pressure_resistance = 1
|
||||
slot_flags = SLOT_HEAD
|
||||
see_face = 1
|
||||
body_parts_covered = HEAD
|
||||
protective_temperature = 0
|
||||
|
||||
|
||||
@@ -168,9 +168,10 @@ var/MAX_EXPLOSION_RANGE = 14
|
||||
#define HIDESUITSTORAGE 2 //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 HIDEMASK 1 //APPLIES ONLY TO HELMETS!!
|
||||
#define HIDEEARS 2 //APPLIES ONLY TO HELMETS!!
|
||||
#define HIDEEYES 4 //APPLIES ONLY TO HELMETS!!
|
||||
#define HIDEMASK 1 //APPLIES ONLY TO HELMETS/MASKS!!
|
||||
#define HIDEEARS 2 //APPLIES ONLY TO HELMETS/MASKS!!
|
||||
#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
|
||||
|
||||
@@ -342,10 +343,11 @@ var/list/global_mutations = list() // list of hidden mutation things
|
||||
#define EYE_BLUR "eye_blur"
|
||||
#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 CANWEAKEN 2
|
||||
#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
|
||||
|
||||
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')
|
||||
|
||||
@@ -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. -->
|
||||
|
||||
<!-- 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">
|
||||
<h2 class="date">Saturday July 14th 2012</h2>
|
||||
<h3 class="author">Giacom updated:</h3>
|
||||
|
||||
@@ -967,6 +967,7 @@
|
||||
#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\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\say.dm"
|
||||
#include "code\modules\mob\living\carbon\human\death.dm"
|
||||
|
||||
Reference in New Issue
Block a user