Port of TG ghost role spawner and Corpse Landmark refactor (#8211)

Port of TG ghost role spawner and Corpse Landmark refactor
This commit is contained in:
Aurorablade
2018-10-03 11:31:55 +08:00
committed by variableundefined
parent 986a68313d
commit ce3ecee145
16 changed files with 3224 additions and 3016 deletions
+97 -144
View File
@@ -1,162 +1,115 @@
//Meant for simple animals to drop lootable human bodies.
//If someone can do this in a neater way, be my guest-Kor
//This has to be seperate from the Away Mission corpses, because New() doesn't work for those, and initialize() doesn't work for these.
//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now).
/obj/effect/landmark/mobcorpse
name = "Unknown"
var/mobname = "Unknown" //Unused now but it'd fuck up maps to remove it now
var/corpseuniform = null //Set this to an object path to have the slot filled with said object on the corpse.
var/corpsesuit = null
var/corpseshoes = null
var/corpsegloves = null
var/corpseradio = null
var/corpseglasses = null
var/corpsemask = null
var/corpsehelmet = null
var/corpsebelt = null
var/corpsepocket1 = null
var/corpsepocket2 = null
var/corpseback = null
var/corpseid = 0 //Just set to 1 if you want them to have an ID
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
var/corpseidaccess = 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/corpseidicon = null //For setting it to be a gold, silver, centcomm etc ID
/obj/effect/landmark/mobcorpse/New()
createCorpse()
/obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
M.real_name = src.name
M.stat = 2 //Kills the new mob
if(src.corpseuniform)
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
if(src.corpsesuit)
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
if(src.corpseshoes)
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
if(src.corpsegloves)
M.equip_to_slot_or_del(new src.corpsegloves(M), slot_gloves)
if(src.corpseradio)
M.equip_to_slot_or_del(new src.corpseradio(M), slot_l_ear)
if(src.corpseglasses)
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
if(src.corpsemask)
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
if(src.corpsehelmet)
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
if(src.corpsebelt)
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
if(src.corpsepocket1)
M.equip_to_slot_or_del(new src.corpsepocket1(M), slot_r_store)
if(src.corpsepocket2)
M.equip_to_slot_or_del(new src.corpsepocket2(M), slot_l_store)
if(src.corpseback)
M.equip_to_slot_or_del(new src.corpseback(M), slot_back)
if(src.corpseid == 1)
var/obj/item/card/id/W = new(M)
W.name = "[M.real_name]'s ID Card"
var/datum/job/jobdatum
for(var/jobtype in typesof(/datum/job))
var/datum/job/J = new jobtype
if(J.title == corpseidaccess)
jobdatum = J
break
if(src.corpseidicon)
W.icon_state = corpseidicon
if(src.corpseidaccess)
if(jobdatum)
W.access = jobdatum.get_access()
else
W.access = list()
if(corpseidjob)
W.assignment = corpseidjob
W.registered_name = M.real_name
M.equip_to_slot_or_del(W, slot_wear_id)
qdel(src)
//List of different corpse types
/obj/effect/landmark/mobcorpse/syndicatesoldier
/obj/effect/mob_spawn/human/corpse/syndicatesoldier
name = "Syndicate Operative"
corpseuniform = /obj/item/clothing/under/syndicate
corpsesuit = /obj/item/clothing/suit/armor/vest
corpseshoes = /obj/item/clothing/shoes/combat
corpsegloves = /obj/item/clothing/gloves/combat
corpseradio = /obj/item/radio/headset
corpsemask = /obj/item/clothing/mask/gas
corpsehelmet = /obj/item/clothing/head/helmet/swat
corpseback = /obj/item/storage/backpack
corpseid = 1
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
mob_name = "Syndicate Operative"
hair_style = "bald"
facial_hair_style = "shaved"
id_job = "Operative"
id_access_list = list(access_syndicate)
outfit = /datum/outfit/syndicatesoldiercorpse
/datum/outfit/syndicatesoldiercorpse
name = "Syndicate Operative Corpse"
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
l_ear = /obj/item/radio/headset
mask = /obj/item/clothing/mask/gas
head = /obj/item/clothing/head/helmet/swat
back = /obj/item/storage/backpack
id = /obj/item/card/id
/obj/effect/landmark/mobcorpse/syndicatecommando
/obj/effect/mob_spawn/human/corpse/syndicatecommando
name = "Syndicate Commando"
corpseuniform = /obj/item/clothing/under/syndicate
corpsesuit = /obj/item/clothing/suit/space/hardsuit/syndi
corpseshoes = /obj/item/clothing/shoes/combat
corpsegloves = /obj/item/clothing/gloves/combat
corpseradio = /obj/item/radio/headset
corpsemask = /obj/item/clothing/mask/gas/syndicate
corpsehelmet = /obj/item/clothing/head/helmet/space/hardsuit/syndi
corpseback = /obj/item/tank/jetpack/oxygen
corpsepocket1 = /obj/item/tank/emergency_oxygen
corpseid = 1
corpseidjob = "Operative"
corpseidaccess = "Syndicate"
mob_name = "Syndicate Commando"
hair_style = "bald"
facial_hair_style = "shaved"
id_job = "Operative"
id_access_list = list(access_syndicate)
outfit = /datum/outfit/syndicatecommandocorpse
/obj/effect/landmark/mobcorpse/syndicateautogib/createCorpse()
var/mob/living/carbon/human/M = new /mob/living/carbon/human(loc)
M.real_name = src.name
M.gib()
qdel(src)
/datum/outfit/syndicatecommandocorpse
name = "Syndicate Commando Corpse"
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
l_ear = /obj/item/radio/headset
mask = /obj/item/clothing/mask/gas/syndicate
back = /obj/item/tank/jetpack/oxygen
r_pocket = /obj/item/tank/emergency_oxygen
id = /obj/item/card/id
/obj/effect/landmark/mobcorpse/clown
name = "Clown"
corpseuniform = /obj/item/clothing/under/rank/clown
corpseshoes = /obj/item/clothing/shoes/clown_shoes
corpseradio = /obj/item/radio/headset
corpsemask = /obj/item/clothing/mask/gas/clown_hat
corpsepocket1 = /obj/item/bikehorn
corpseback = /obj/item/storage/backpack/clown
corpseid = 1
corpseidjob = "Clown"
corpseidaccess = "Clown"
/obj/effect/mob_spawn/human/clown/corpse
roundstart = TRUE
instant = TRUE
/obj/effect/mob_spawn/human/mime/corpse
roundstart = TRUE
instant = TRUE
/obj/effect/landmark/mobcorpse/pirate
/obj/effect/mob_spawn/human/corpse/pirate
name = "Pirate"
corpseuniform = /obj/item/clothing/under/pirate
corpseshoes = /obj/item/clothing/shoes/jackboots
corpseglasses = /obj/item/clothing/glasses/eyepatch
corpsehelmet = /obj/item/clothing/head/bandana
mob_name = "Pirate"
hair_style = "bald"
facial_hair_style = "shaved"
outfit = /datum/outfit/piratecorpse
/datum/outfit/piratecorpse
name = "Pirate Corpse"
uniform = /obj/item/clothing/under/pirate
shoes = /obj/item/clothing/shoes/jackboots
glasses = /obj/item/clothing/glasses/eyepatch
head = /obj/item/clothing/head/bandana
/obj/effect/landmark/mobcorpse/pirate/ranged
/obj/effect/mob_spawn/human/corpse/pirate/ranged
name = "Pirate Gunner"
corpsesuit = /obj/item/clothing/suit/pirate_black
corpsehelmet = /obj/item/clothing/head/pirate
mob_name = "Pirate Gunner"
outfit = /datum/outfit/piratecorpse/ranged
/datum/outfit/piratecorpse/ranged
name = "Pirate Gunner Corpse"
suit = /obj/item/clothing/suit/pirate_black
head = /obj/item/clothing/head/pirate
/obj/effect/landmark/mobcorpse/russian
/obj/effect/mob_spawn/human/corpse/russian
name = "Russian"
corpseuniform = /obj/item/clothing/under/soviet
corpseshoes = /obj/item/clothing/shoes/jackboots
corpsehelmet = /obj/item/clothing/head/bearpelt
mob_name = "Russian"
hair_style = "bald"
facial_hair_style = "shaved"
outfit = /datum/outfit/russiancorpse
/obj/effect/landmark/mobcorpse/russian/ranged
corpsehelmet = /obj/item/clothing/head/ushanka
/datum/outfit/russiancorpse
name = "Russian Corpse"
uniform = /obj/item/clothing/under/soviet
shoes = /obj/item/clothing/shoes/jackboots
head = /obj/item/clothing/head/bearpelt
/obj/effect/mob_spawn/human/corpse/russian/ranged
outfit = /datum/outfit/russiancorpse/ranged
/datum/outfit/russiancorpse/ranged
name = "Ranged Russian Corpse"
head = /obj/item/clothing/head/ushanka
/obj/effect/mob_spawn/human/corpse/wizard
name = "Space Wizard Corpse"
outfit = /datum/outfit/wizardcorpse
/obj/effect/mob_spawn/human/corpse/clownoff/Initialize()
mob_name = "[pick(wizard_first)], [pick(wizard_second)]"
..()
/datum/outfit/wizardcorpse
name = "Space Wizard Corpse"
uniform = /obj/item/clothing/under/color/lightpurple
suit = /obj/item/clothing/suit/wizrobe
shoes = /obj/item/clothing/shoes/sandal
head = /obj/item/clothing/head/wizard
@@ -242,7 +242,7 @@
stored_mob.forceMove(get_turf(src))
stored_mob = null
else
new /obj/effect/landmark/corpse/damaged(T)
new /obj/effect/mob_spawn/human/corpse/charredskeleton(T)
..(gibbed)
@@ -320,4 +320,14 @@
name = "legion's head"
desc = "The once living, now empty eyes of the former human's skull cut deep into your soul."
icon = 'icons/obj/mining.dmi'
icon_state = "skull"
icon_state = "skull"
/obj/effect/mob_spawn/human/corpse/charredskeleton
name = "charred skeletal remains"
burn_damage = 1000
mob_name = "ashen skeleton"
mob_gender = NEUTER
husk = FALSE
mob_species = /datum/species/skeleton
mob_color = "#454545"
@@ -23,7 +23,7 @@
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
unsuitable_atmos_damage = 15
speak_emote = list("yarrs")
loot = list(/obj/effect/landmark/mobcorpse/pirate,
loot = list(/obj/effect/mob_spawn/human/corpse/pirate,
/obj/item/melee/energy/sword/pirate)
del_on_death = 1
faction = list("pirate")
@@ -40,5 +40,5 @@
retreat_distance = 5
minimum_distance = 5
projectiletype = /obj/item/projectile/beam
loot = list(/obj/effect/landmark/mobcorpse/pirate/ranged,
loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged,
/obj/item/gun/energy/laser)
@@ -22,7 +22,7 @@
unsuitable_atmos_damage = 15
faction = list("russian")
status_flags = CANPUSH
loot = list(/obj/effect/landmark/mobcorpse/russian,
loot = list(/obj/effect/mob_spawn/human/corpse/russian,
/obj/item/kitchen/knife)
del_on_death = 1
sentience_type = SENTIENCE_OTHER
@@ -34,9 +34,9 @@
retreat_distance = 5
minimum_distance = 5
casingtype = /obj/item/ammo_casing/a357
loot = list(/obj/effect/landmark/mobcorpse/russian/ranged, /obj/item/gun/projectile/revolver/mateba)
loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged, /obj/item/gun/projectile/revolver/mateba)
/mob/living/simple_animal/hostile/russian/ranged/mosin
loot = list(/obj/effect/landmark/mobcorpse/russian/ranged,
loot = list(/obj/effect/mob_spawn/human/corpse/russian/ranged,
/obj/item/gun/projectile/shotgun/boltaction)
casingtype = /obj/item/ammo_casing/a762
@@ -23,7 +23,7 @@
faction = list("syndicate")
check_friendly_fire = 1
status_flags = CANPUSH
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier)
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier)
del_on_death = 1
sentience_type = SENTIENCE_OTHER
@@ -38,7 +38,7 @@
attack_sound = 'sound/weapons/bladeslice.ogg'
armour_penetration = 28
status_flags = 0
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
var/melee_block_chance = 20
/mob/living/simple_animal/hostile/syndicate/melee/attackby(var/obj/item/O as obj, var/mob/user as mob, params)
@@ -72,7 +72,7 @@
return 0
/mob/living/simple_animal/hostile/syndicate/melee/autogib
loot = list(/obj/effect/landmark/mobcorpse/syndicateautogib)
loot = list()//no loot, its gonna delete and gib.
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot
name = "Syndicate Operative"
@@ -81,6 +81,7 @@
stat_attack = 1
universal_speak = 1
melee_block_chance = 40
del_on_death = 1
var/area/syndicate_depot/core/depotarea
var/raised_alert = FALSE
var/alert_on_death = FALSE
@@ -182,6 +183,7 @@
depotarea.shields_key_check()
if(depotarea)
depotarea.list_remove(src, depotarea.guard_list)
new /obj/effect/gibspawner/human(get_turf(src))
return ..()
/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/CanPass(atom/movable/mover, turf/target, height=0)
@@ -247,7 +249,7 @@
icon_state = "syndicatemeleespace"
icon_living = "syndicatemeleespace"
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatecommando, /obj/item/melee/energy/sword/saber/red, /obj/item/shield/energy)
/mob/living/simple_animal/hostile/syndicate/melee/space/Process_Spacemove(var/movement_dir = 0)
return
@@ -261,7 +263,7 @@
icon_state = "syndicateranged"
icon_living = "syndicateranged"
casingtype = /obj/item/ammo_casing/c45
loot = list(/obj/effect/landmark/mobcorpse/syndicatesoldier, /obj/item/gun/projectile/automatic/c20r)
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier, /obj/item/gun/projectile/automatic/c20r)
/mob/living/simple_animal/hostile/syndicate/ranged/space
icon_state = "syndicaterangedpsace"
@@ -270,14 +272,13 @@
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
speed = 1
loot = list(/obj/effect/landmark/mobcorpse/syndicatecommando, /obj/item/gun/projectile/automatic/c20r)
loot = list(/obj/effect/mob_spawn/human/corpse/syndicatecommando, /obj/item/gun/projectile/automatic/c20r)
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/movement_dir = 0)
return
/mob/living/simple_animal/hostile/syndicate/ranged/space/autogib
loot = list(/obj/effect/landmark/mobcorpse/syndicateautogib)
loot = list()//gonna gibe, no loot.
/mob/living/simple_animal/hostile/viscerator
name = "viscerator"