mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-25 13:07:46 +01:00
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:
committed by
variableundefined
parent
986a68313d
commit
ce3ecee145
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user