diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 115ecaa54d..6aa06ef4ec 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -23,7 +23,11 @@ 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, CentCom etc ID - var/species = SPECIES_HUMAN + var/species = SPECIES_HUMAN //defaults to generic-ass humans + var/random_species = FALSE //flip to TRUE to randomize species from the list below + var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_SKRELL) //preset list that can be overriden downstream. only includes common humanoids for voidsuit compatibility's sake. +// var/random_appearance = FALSE //TODO: make this work +// var/cause_of_death = null //TODO: set up a cause-of-death system. needs to support both damage types and actual wound types, so a body can have been bitten/stabbed/clawed/shot/burned/lasered/etc. to death delete_me = TRUE /obj/effect/landmark/corpse/Initialize() @@ -33,13 +37,20 @@ /obj/effect/landmark/corpse/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.set_species(species) + if(random_species) + var/random_pick = pick(random_species_list) + M.set_species(random_pick) + src.species = random_pick + else + M.set_species(species) + //TODO: insert appearance randomization, needs to be species-based M.real_name = src.name M.death(1) //Kills the new mob + //TODO: insert cause of death handling/wound simulation here 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) + M.equip_voidsuit_to_slot_or_del_with_refit(new src.corpsesuit(M), slot_wear_suit, src.species) if(src.corpseshoes) M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes) if(src.corpsegloves) @@ -51,7 +62,7 @@ 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) + M.equip_voidhelm_to_slot_or_del_with_refit(new src.corpsehelmet(M), slot_head, src.species) if(src.corpsebelt) M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt) if(src.corpsepocket1) @@ -84,10 +95,6 @@ // 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/landmark/corpse/syndicatesoldier name = "Mercenary" corpseuniform = /obj/item/clothing/under/syndicate @@ -102,8 +109,6 @@ corpseidjob = "Operative" corpseidaccess = "Syndicate" - - /obj/effect/landmark/corpse/syndicatecommando name = "Syndicate Commando" corpseuniform = /obj/item/clothing/under/syndicate @@ -119,10 +124,14 @@ corpseidjob = "Operative" corpseidaccess = "Syndicate" - - ///////////Civilians////////////////////// +/obj/effect/landmark/corpse/random_civ + name = "Civilian" + corpseuniform = /obj/item/clothing/under/color/grey + corpseshoes = /obj/item/clothing/shoes/black + random_species = TRUE + /obj/effect/landmark/corpse/chef name = "Chef" corpseuniform = /obj/item/clothing/under/rank/chef @@ -165,6 +174,7 @@ corpsesuit = /obj/item/clothing/suit/space/void/engineering corpsemask = /obj/item/clothing/mask/breath corpsehelmet = /obj/item/clothing/head/helmet/space/void/engineering + corpseback = /obj/item/weapon/tank/oxygen /obj/effect/landmark/corpse/clown name = "Clown" @@ -188,6 +198,39 @@ corpseid = 1 corpseidjob = "Scientist" corpseidaccess = "Scientist" + +/obj/effect/landmark/corpse/security + name = "Security Officer" + corpseradio = /obj/item/device/radio/headset/headset_sec + corpseuniform = /obj/item/clothing/under/rank/security + corpsesuit = /obj/item/clothing/suit/armor/vest + corpseback = /obj/item/weapon/storage/backpack/security + corpseshoes = /obj/item/clothing/shoes/boots/jackboots + corpseglasses = /obj/item/clothing/glasses/sunglasses/sechud + corpsegloves = /obj/item/clothing/gloves/black + corpsehelmet = /obj/item/clothing/head/helmet + corpseid = 1 + corpseidjob = "Security Officer" + corpseidaccess = "Security Officer" + +/obj/effect/landmark/corpse/security/rig + corpsesuit = /obj/item/clothing/suit/space/void/security + corpsemask = /obj/item/clothing/mask/breath + corpsehelmet = /obj/item/clothing/head/helmet/space/void/security + corpseback = /obj/item/weapon/tank/jetpack/oxygen + +/obj/effect/landmark/corpse/security/rig/eva + corpsesuit = /obj/item/clothing/suit/space/void/security/alt + corpsehelmet = /obj/item/clothing/head/helmet/space/void/security/alt + corpseidjob = "Starship Security Officer" + +/obj/effect/landmark/corpse/prisoner + name = "Unknown Prisoner" + corpseuniform = /obj/item/clothing/under/color/prison + corpseshoes = /obj/item/clothing/shoes/orange + corpseid = 1 + corpseidjob = "Prisoner" + random_species = TRUE /obj/effect/landmark/corpse/miner corpseradio = /obj/item/device/radio/headset/headset_cargo @@ -203,7 +246,69 @@ corpsesuit = /obj/item/clothing/suit/space/void/mining corpsemask = /obj/item/clothing/mask/breath corpsehelmet = /obj/item/clothing/head/helmet/space/void/mining + corpseback = /obj/item/weapon/tank/oxygen + +/////////////////Vintage////////////////////// +//define the basic props at this level and only change specifics for variants, e.z. +/obj/effect/landmark/corpse/vintage + name = "Unknown Crewmate" + corpseuniform = /obj/item/clothing/under/utility + corpsesuit = /obj/item/clothing/suit/space/void/refurb + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb + corpsemask = /obj/item/clothing/mask/breath + corpseback = /obj/item/weapon/tank/oxygen + corpseid = 1 + corpseidjob = "Crewmate" + +/obj/effect/landmark/corpse/vintage/engineering + name = "Unknown Engineer" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/engineering + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/engineering + corpsebelt = /obj/item/weapon/storage/belt/utility/full + corpseback = /obj/item/weapon/tank/oxygen/yellow + corpseidjob = "Engineer" + +/obj/effect/landmark/corpse/vintage/marine + name = "Unknown Marine" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/marine + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/marine + corpsebelt = /obj/item/weapon/storage/belt/security/tactical + corpseidjob = "Marine" + +/obj/effect/landmark/corpse/vintage/medical + name = "Unknown Medic" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/medical + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/medical + corpsebelt = /obj/item/weapon/storage/belt/medical + corpseidjob = "Medic" + +/obj/effect/landmark/corpse/vintage/mercenary + name = "Unknown Mercenary" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/mercenary + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/mercenary + corpsebelt = /obj/item/weapon/storage/belt/security/tactical + corpseback = /obj/item/weapon/tank/oxygen/red + corpseidjob = "Mercenary" + +/obj/effect/landmark/corpse/vintage/officer + name = "Unknown Captain" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/officer + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/officer + corpseback = /obj/item/weapon/tank/oxygen/yellow + corpseidjob = "Captain" + +/obj/effect/landmark/corpse/vintage/pilot + name = "Unknown Pilot" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/pilot + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/pilot + corpseidjob = "Pilot" + +/obj/effect/landmark/corpse/vintage/research + name = "Unknown Researcher" + corpsesuit = /obj/item/clothing/suit/space/void/refurb/research + corpsehelmet = /obj/item/clothing/head/helmet/space/void/refurb/research + corpseidjob = "Researcher" /////////////////Officers////////////////////// diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index e6a618272e..376a1fafa7 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -71,6 +71,15 @@ var/list/slot_equipment_priority = list( \ /mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot) return equip_to_slot_if_possible(W, slot, 1, 1, 0) +//hurgh. these feel hacky, but they're the only way I could get the damn thing to work. I guess they could be handy for antag spawners too? +/mob/proc/equip_voidsuit_to_slot_or_del_with_refit(obj/item/clothing/suit/space/void/W as obj, slot, species = SPECIES_HUMAN) + W.refit_for_species(species) + return equip_to_slot_if_possible(W, slot, 1, 1, 0) + +/mob/proc/equip_voidhelm_to_slot_or_del_with_refit(obj/item/clothing/head/helmet/space/void/W as obj, slot, species = SPECIES_HUMAN) + W.refit_for_species(species) + return equip_to_slot_if_possible(W, slot, 1, 1, 0) + //Checks if a given slot can be accessed at this time, either to equip or unequip I /mob/proc/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null) return 1