Files
Yogstation/code/modules/awaymissions/corpse.dm
KorPhaeron 2bb3f668c2 Merge
2016-03-12 15:03:57 -06:00

445 lines
14 KiB
Plaintext

//If someone can do this in a neater way, be my guest-Kor
//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now).
/obj/effect/mob_spawn
name = "Unknown"
var/mob_type = null
var/mob_name = ""
var/mob_gender = MALE
var/death = TRUE //Kill the mob
var/roundstart = TRUE //fires on initialize
var/instant = FALSE //fires on New
var/flavour_text = "The mapper forgot to set this!"
var/faction = null
var/objectives = null
var/brute_damage = 0
var/oxy_damage = 0
density = 1
anchored = 1
/obj/effect/mob_spawn/attack_ghost(mob/user)
if(ticker.current_state != GAME_STATE_PLAYING)
return
var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No")
if(ghost_role == "No")
return
log_game("[user.ckey] became [mob_name]")
create(ckey = user.ckey)
/obj/effect/mob_spawn/initialize()
if(roundstart)
create()
else
poi_list |= src
/obj/effect/mob_spawn/New()
..()
if(instant)
create()
else
poi_list |= src
/obj/effect/mob_spawn/Destroy()
poi_list.Remove(src)
..()
/obj/effect/mob_spawn/proc/special(mob/M)
return
/obj/effect/mob_spawn/proc/equip(mob/M)
return
/obj/effect/mob_spawn/proc/create(ckey)
var/mob/living/M = new mob_type(loc) //living mobs only
M.real_name = mob_name ? mob_name : M.name
M.gender = mob_gender
if(faction)
M.faction = list(faction)
if(death)
M.death(1) //Kills the new mob
M.adjustOxyLoss(oxy_damage)
M.adjustBruteLoss(brute_damage)
equip(M)
if(ckey)
M.ckey = ckey
M << "[flavour_text]"
if(objectives)
var/datum/mind/MM = M.mind
for(var/objective in objectives)
MM.objectives += new/datum/objective(objective)
special(M)
qdel(src)
// Base version - place these on maps/templates.
/obj/effect/mob_spawn/human
mob_type = /mob/living/carbon/human
//Human specific stuff.
var/mob_species = null //Set to make them a mutant race such as lizard or skeleton. Uses the datum typepath instead of the ID.
var/uniform = null //Set this to an object path to have the slot filled with said object on the corpse.
var/suit = null
var/shoes = null
var/gloves = null
var/radio = null
var/glasses = null
var/mask = null
var/helmet = null
var/belt = null
var/pocket1 = null
var/pocket2 = null
var/back = null
var/has_id = 0 //Just set to 1 if you want them to have an ID
var/id_job = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
var/id_access = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
var/id_icon = null //For setting it to be a gold, silver, centcom etc ID
var/husk = null
var/outfit_type = null // Will start with this if exists then apply specific slots
var/list/implants = list()
/obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H)
if(mob_species)
H.set_species(mob_species)
if(husk)
H.Drain()
if(outfit_type)
H.equipOutfit(outfit_type)
if(uniform)
H.equip_to_slot_or_del(new uniform(H), slot_w_uniform)
if(suit)
H.equip_to_slot_or_del(new suit(H), slot_wear_suit)
if(shoes)
H.equip_to_slot_or_del(new shoes(H), slot_shoes)
if(gloves)
H.equip_to_slot_or_del(new gloves(H), slot_gloves)
if(radio)
H.equip_to_slot_or_del(new radio(H), slot_ears)
if(glasses)
H.equip_to_slot_or_del(new glasses(H), slot_glasses)
if(mask)
H.equip_to_slot_or_del(new mask(H), slot_wear_mask)
if(helmet)
H.equip_to_slot_or_del(new helmet(H), slot_head)
if(belt)
H.equip_to_slot_or_del(new belt(H), slot_belt)
if(pocket1)
H.equip_to_slot_or_del(new pocket1(H), slot_r_store)
if(pocket2)
H.equip_to_slot_or_del(new pocket2(H), slot_l_store)
if(back)
H.equip_to_slot_or_del(new back(H), slot_back)
if(has_id)
var/obj/item/weapon/card/id/W = new(H)
if(id_icon)
W.icon_state = id_icon
if(id_access)
var/datum/job/jobdatum
for(var/jobtype in typesof(/datum/job))
var/datum/job/J = new jobtype
if(J.title == id_access)
jobdatum = J
break
if(jobdatum)
W.access = jobdatum.get_access()
else
W.access = list()
if(id_job)
W.assignment = id_job
W.registered_name = H.real_name
W.update_label()
H.equip_to_slot_or_del(W, slot_wear_id)
for(var/I in implants)
var/obj/item/weapon/implant/X = new I
X.implant(H)
//Instant version - use when spawning corpses during runtime
/obj/effect/mob_spawn/human/corpse
roundstart = FALSE
instant = TRUE
/obj/effect/mob_spawn/human/alive
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
death = FALSE
roundstart = FALSE //you could use these for alive fake humans on roundstart but this is more common scenario
//Non-human spawners
/obj/effect/mob_spawn/AICorpse/create() //Creates a corrupted AI
var/A = locate(/mob/living/silicon/ai) in loc
if(A)
return
var/L = new /datum/ai_laws/default/asimov
var/B = new /obj/item/device/mmi
var/mob/living/silicon/ai/M = new(src.loc, L, B, 1) //spawn new AI at landmark as var M
M.name = src.name
M.real_name = src.name
M.aiPDA.toff = 1 //turns the AI's PDA messenger off, stopping it showing up on player PDAs
M.death() //call the AI's death proc
qdel(src)
/obj/effect/mob_spawn/slime
mob_type = /mob/living/simple_animal/slime
var/mobcolour = "grey"
icon = 'icons/mob/slimes.dmi'
icon_state = "grey baby slime" //sets the icon in the map editor
/obj/effect/mob_spawn/slime/equip(mob/living/simple_animal/slime/S)
S.colour = mobcolour
/obj/effect/mob_spawn/human/facehugger/create() //Creates a squashed facehugger
var/obj/item/clothing/mask/facehugger/O = new(src.loc) //variable O is a new facehugger at the location of the landmark
O.name = src.name
O.Die() //call the facehugger's death proc
qdel(src)
// I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example.
/obj/effect/mob_spawn/human/syndicatesoldier
name = "Syndicate Operative"
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/armor/vest
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas
helmet = /obj/item/clothing/head/helmet/swat
back = /obj/item/weapon/storage/backpack
has_id = 1
id_job = "Operative"
id_access = "Syndicate"
/obj/effect/mob_spawn/human/syndicatecommando
name = "Syndicate Commando"
uniform = /obj/item/clothing/under/syndicate
suit = /obj/item/clothing/suit/space/hardsuit/syndi
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
helmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
back = /obj/item/weapon/tank/jetpack/oxygen
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
has_id = 1
id_job = "Operative"
id_access = "Syndicate"
///////////Civilians//////////////////////
/obj/effect/mob_spawn/human/cook
name = "Cook"
uniform = /obj/item/clothing/under/rank/chef
suit = /obj/item/clothing/suit/apron/chef
shoes = /obj/item/clothing/shoes/sneakers/black
helmet = /obj/item/clothing/head/chefhat
back = /obj/item/weapon/storage/backpack
radio = /obj/item/device/radio/headset
has_id = 1
id_job = "Cook"
id_access = "Cook"
/obj/effect/mob_spawn/human/doctor
name = "Doctor"
radio = /obj/item/device/radio/headset/headset_med
uniform = /obj/item/clothing/under/rank/medical
suit = /obj/item/clothing/suit/toggle/labcoat
back = /obj/item/weapon/storage/backpack/medic
pocket1 = /obj/item/device/flashlight/pen
shoes = /obj/item/clothing/shoes/sneakers/black
has_id = 1
id_job = "Medical Doctor"
id_access = "Medical Doctor"
/obj/effect/mob_spawn/human/engineer
name = "Engineer"
radio = /obj/item/device/radio/headset/headset_eng
uniform = /obj/item/clothing/under/rank/engineer
back = /obj/item/weapon/storage/backpack/industrial
shoes = /obj/item/clothing/shoes/sneakers/orange
belt = /obj/item/weapon/storage/belt/utility/full
gloves = /obj/item/clothing/gloves/color/yellow
helmet = /obj/item/clothing/head/hardhat
has_id = 1
id_job = "Station Engineer"
id_access = "Station Engineer"
/obj/effect/mob_spawn/human/engineer/rig
suit = /obj/item/clothing/suit/space/hardsuit/engine
mask = /obj/item/clothing/mask/breath
/obj/effect/mob_spawn/human/clown
name = "Clown"
uniform = /obj/item/clothing/under/rank/clown
shoes = /obj/item/clothing/shoes/clown_shoes
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/clown_hat
pocket1 = /obj/item/weapon/bikehorn
back = /obj/item/weapon/storage/backpack/clown
has_id = 1
id_job = "Clown"
id_access = "Clown"
/obj/effect/mob_spawn/human/scientist
name = "Scientist"
radio = /obj/item/device/radio/headset/headset_sci
uniform = /obj/item/clothing/under/rank/scientist
suit = /obj/item/clothing/suit/toggle/labcoat/science
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/white
has_id = 1
id_job = "Scientist"
id_access = "Scientist"
/obj/effect/mob_spawn/human/miner
radio = /obj/item/device/radio/headset/headset_cargo
uniform = /obj/item/clothing/under/rank/miner
gloves = /obj/item/clothing/gloves/fingerless
back = /obj/item/weapon/storage/backpack/industrial
shoes = /obj/item/clothing/shoes/sneakers/black
has_id = 1
id_job = "Shaft Miner"
id_access = "Shaft Miner"
/obj/effect/mob_spawn/human/miner/rig
suit = /obj/item/clothing/suit/space/hardsuit/mining
mask = /obj/item/clothing/mask/breath
/obj/effect/mob_spawn/human/plasmaman
mob_species = /datum/species/plasmaman
helmet = /obj/item/clothing/head/helmet/space/plasmaman
uniform = /obj/item/clothing/under/plasmaman
back = /obj/item/weapon/tank/internals/plasmaman/full
mask = /obj/item/clothing/mask/breath
/obj/effect/mob_spawn/human/bartender
name = "Space Bartender"
uniform = /obj/item/clothing/under/rank/bartender
back = /obj/item/weapon/storage/backpack
shoes = /obj/item/clothing/shoes/sneakers/black
suit = /obj/item/clothing/suit/armor/vest
glasses = /obj/item/clothing/glasses/sunglasses/reagent
has_id = 1
id_job = "Bartender"
id_access = "Bartender"
/obj/effect/mob_spawn/human/bartender/alive
death = FALSE
roundstart = FALSE
mob_name = "Space Bartender"
name = "sleeper"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
flavour_text = "You are a space bartender!"
/////////////////Officers+Nanotrasen Security//////////////////////
/obj/effect/mob_spawn/human/bridgeofficer
name = "Bridge Officer"
radio = /obj/item/device/radio/headset/heads/hop
uniform = /obj/item/clothing/under/rank/centcom_officer
suit = /obj/item/clothing/suit/armor/bulletproof
shoes = /obj/item/clothing/shoes/sneakers/black
glasses = /obj/item/clothing/glasses/sunglasses
has_id = 1
id_job = "Bridge Officer"
id_access = "Captain"
/obj/effect/mob_spawn/human/commander
name = "Commander"
uniform = /obj/item/clothing/under/rank/centcom_commander
suit = /obj/item/clothing/suit/armor
radio = /obj/item/device/radio/headset/heads/captain
glasses = /obj/item/clothing/glasses/eyepatch
mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
helmet = /obj/item/clothing/head/centhat
gloves = /obj/item/clothing/gloves/combat
shoes = /obj/item/clothing/shoes/combat/swat
pocket1 = /obj/item/weapon/lighter
has_id = 1
id_job = "Commander"
id_access = "Captain"
/obj/effect/mob_spawn/human/nanotrasensoldier
name = "Nanotrasen Private Security Officer"
uniform = /obj/item/clothing/under/rank/security
suit = /obj/item/clothing/suit/armor/vest
shoes = /obj/item/clothing/shoes/combat
gloves = /obj/item/clothing/gloves/combat
radio = /obj/item/device/radio/headset
mask = /obj/item/clothing/mask/gas/sechailer/swat
helmet = /obj/item/clothing/head/helmet/swat/nanotrasen
back = /obj/item/weapon/storage/backpack/security
has_id = 1
id_job = "Private Security Force"
id_access = "Security Officer"
/obj/effect/mob_spawn/human/commander/alive
death = FALSE
roundstart = FALSE
mob_name = "Nanotrasen Commander"
name = "sleeper"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
flavour_text = "You are a Nanotrasen Commander!"
/////////////////Spooky Undead//////////////////////
/obj/effect/mob_spawn/human/skeleton
name = "skeletal remains"
mob_name = "skeleton"
mob_species = /datum/species/skeleton
mob_gender = NEUTER
/obj/effect/mob_spawn/human/skeleton/alive
death = FALSE
roundstart = FALSE
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
flavour_text = "By unknown powers, your skeletal remains have been reanimated! Walk this mortal plain and terrorize all living adventurers who dare cross your path."
/obj/effect/mob_spawn/human/zombie
name = "rotting corpse"
mob_name = "zombie"
mob_species = /datum/species/zombie
/obj/effect/mob_spawn/human/zombie/alive
death = FALSE
roundstart = FALSE
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
flavour_text = "By unknown powers, your rotting remains have been resurrected! Walk this mortal plain and terrorize all living adventurers who dare cross your path."
/obj/effect/mob_spawn/human/abductor
name = "abductor"
mob_name = "???"
mob_species = /datum/species/abductor
uniform = /obj/item/clothing/under/color/grey
shoes = /obj/item/clothing/shoes/combat
///Prisoner
/obj/effect/mob_spawn/human/prisoner_transport
name = "prisoner sleeper"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper"
uniform = /obj/item/clothing/under/rank/prisoner
mask = /obj/item/clothing/mask/breath
shoes = /obj/item/clothing/shoes/sneakers/orange
pocket1 = /obj/item/weapon/tank/internals/emergency_oxygen
roundstart = FALSE
death = FALSE
flavour_text = {"You were a prisoner, sentenced to hard labour in one of Nanotrasen's harsh gulags, but judging by the explosive crash you just survived, fate may have other plans for. First thing is first though: Find a way to survive this mess."}
/obj/effect/mob_spawn/human/prisoner_transport/special(mob/living/new_spawn)
var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "speaking as a mime", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting your manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence")
new_spawn << "You were convincted of: [crime]."