mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-14 02:43:16 +00:00
440 lines
14 KiB
Plaintext
440 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
|
|
|
|
/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()
|
|
|
|
/obj/effect/mob_spawn/New()
|
|
..()
|
|
if(instant)
|
|
create()
|
|
|
|
/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
|
|
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", "syndicate collaboration", "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]."
|
|
|
|
|
|
//NEWCODE
|
|
|
|
|