mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-30 15:38:02 +01:00
Merge remote-tracking branch 'upstream/master' into kk-lore
This commit is contained in:
@@ -13,6 +13,7 @@
|
||||
slot_flags = SLOT_ID | SLOT_EARS
|
||||
|
||||
var/age = "\[UNSET\]"
|
||||
var/species = "\[UNSET\]"
|
||||
var/blood_type = "\[UNSET\]"
|
||||
var/dna_hash = "\[UNSET\]"
|
||||
var/fingerprint_hash = "\[UNSET\]"
|
||||
@@ -61,6 +62,7 @@
|
||||
id_card.age = 0
|
||||
id_card.registered_name = real_name
|
||||
id_card.sex = capitalize(gender)
|
||||
id_card.species = SPECIES_HUMAN
|
||||
id_card.set_id_photo(src)
|
||||
|
||||
if(dna)
|
||||
@@ -72,6 +74,7 @@
|
||||
/mob/living/carbon/human/set_id_info(var/obj/item/weapon/card/id/id_card)
|
||||
..()
|
||||
id_card.age = age
|
||||
id_card.species = "[custom_species ? "[custom_species] ([species.name])" : species.name]"
|
||||
id_card.sex = capitalize(name_gender())
|
||||
|
||||
/obj/item/weapon/card/id/tgui_data(mob/user)
|
||||
@@ -79,6 +82,7 @@
|
||||
|
||||
data["registered_name"] = registered_name
|
||||
data["sex"] = sex
|
||||
data["species"] = species
|
||||
data["age"] = age
|
||||
data["assignment"] = assignment
|
||||
data["fingerprint_hash"] = fingerprint_hash
|
||||
|
||||
@@ -27,44 +27,52 @@ var/global/list/cached_icons = list()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/New()
|
||||
if(paint_type && length(paint_type) > 0)
|
||||
name = paint_type + " " + name
|
||||
..()
|
||||
reagents.add_reagent("water", volume*3/5)
|
||||
reagents.add_reagent("plasticide", volume/5)
|
||||
if(paint_type == "white") //why don't white crayons exist
|
||||
reagents.add_reagent("aluminum", volume/5)
|
||||
else if (paint_type == "black")
|
||||
reagents.add_reagent("carbon", volume/5)
|
||||
else
|
||||
reagents.add_reagent("marker_ink_[paint_type]", volume/5)
|
||||
reagents.handle_reactions()
|
||||
if(paint_type)
|
||||
reagents.add_reagent("paint", volume, paint_type)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/red
|
||||
icon_state = "paint_red"
|
||||
paint_type = "red"
|
||||
paint_type = "#FF0000"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/yellow
|
||||
icon_state = "paint_yellow"
|
||||
paint_type = "yellow"
|
||||
paint_type = "#FFFF00"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/green
|
||||
icon_state = "paint_green"
|
||||
paint_type = "green"
|
||||
paint_type = "#00FF00"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/blue
|
||||
icon_state = "paint_blue"
|
||||
paint_type = "blue"
|
||||
paint_type = "#0000FF"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/purple
|
||||
/obj/item/weapon/reagent_containers/glass/paint/violet
|
||||
icon_state = "paint_violet"
|
||||
paint_type = "purple"
|
||||
paint_type = "#FF00FF"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/black
|
||||
icon_state = "paint_black"
|
||||
paint_type = "black"
|
||||
paint_type = "#000000"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/grey
|
||||
icon_state = "paint_neutral"
|
||||
paint_type = "#808080"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/orange
|
||||
icon_state = "paint_orange"
|
||||
paint_type = "#FFA500"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/purple
|
||||
icon_state = "paint_purple"
|
||||
paint_type = "#A500FF"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/cyan
|
||||
icon_state = "paint_cyan"
|
||||
paint_type = "#00FFFF"
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/paint/white
|
||||
name = "paint remover bucket"
|
||||
icon_state = "paint_white"
|
||||
paint_type = "white"
|
||||
paint_type = "#FFFFFF"
|
||||
|
||||
|
||||
@@ -248,7 +248,7 @@
|
||||
framed_offset_y = 6
|
||||
|
||||
/obj/item/canvas/twentyfour_twentyfour
|
||||
name = "ai universal standard canvas"
|
||||
//name = "ai universal standard canvas" // Uncomment this when AI can actually
|
||||
//desc = "Besides being very large, the AI can accept these as a display from their internal database after you've hung it up." // Not yet
|
||||
icon_state = "24x24"
|
||||
width = 24
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
//Based on /manual/human but not created as a child for better control over how we create a mob.
|
||||
/obj/structure/ghost_pod/manual/survivor
|
||||
name = "Emergency Cryopod"
|
||||
desc = "A damaged cryopod smeared with blood. An injured body seems frozen in time within."
|
||||
description_info = "This contains a body, which may wake at any time. The external controls\
|
||||
seem to be functioning, though the warning lights that flash give no solace.."
|
||||
ghost_query_type = /datum/ghost_query/shipwreck_survivor
|
||||
var/occupant_type = "shipwreck survivor"
|
||||
|
||||
icon = 'icons/obj/Cryogenic2.dmi'
|
||||
icon_state = "sleeper_1"
|
||||
icon_state_opened = "sleeper_0"
|
||||
density = TRUE
|
||||
|
||||
var/allow_appearance_change = TRUE
|
||||
var/special_role = MODE_SURVIVOR //Set this to NULL as GM if you don't want the "survivor" stuff to fire.
|
||||
var/list/clothing_possibilities
|
||||
|
||||
var/start_injured = FALSE //failsafe to prevent accidentally making a pod that deals damage when not intended
|
||||
|
||||
var/suffer_brute = FALSE
|
||||
var/brute_severity = 20 //We inflict UP TO this much damage. Range is 1 to this value
|
||||
var/brute_instances = 3 //We inflict damage this many times. Helps spread it around multiple limbs!
|
||||
|
||||
|
||||
var/suffer_burn = FALSE
|
||||
var/burn_severity = 20
|
||||
var/burn_instances = 3
|
||||
|
||||
var/suffer_toxloss = FALSE
|
||||
var/tox_severity = 20
|
||||
|
||||
var/suffer_oxloss = FALSE
|
||||
var/oxy_severity = 20
|
||||
|
||||
var/suffer_cloneloss = FALSE
|
||||
var/clone_severity = 5
|
||||
|
||||
/obj/structure/ghost_pod/manual/survivor/Initialize()
|
||||
. = ..()
|
||||
|
||||
handle_clothing_setup()
|
||||
|
||||
/obj/structure/ghost_pod/manual/survivor/proc/handle_clothing_setup()
|
||||
clothing_possibilities = list()
|
||||
|
||||
clothing_possibilities |= subtypesof(/obj/item/clothing/under/utility)
|
||||
clothing_possibilities |= subtypesof(/obj/item/clothing/head/beret)
|
||||
clothing_possibilities |= /obj/item/clothing/shoes/black
|
||||
clothing_possibilities |= /obj/item/device/radio/headset
|
||||
|
||||
/obj/structure/ghost_pod/manual/survivor/create_occupant(var/mob/M)
|
||||
..()
|
||||
var/turf/T = get_turf(src)
|
||||
var/mob/living/carbon/human/H = new(src)
|
||||
if(M.mind)
|
||||
M.mind.transfer_to(H)
|
||||
to_chat(M, "<span class='notice'>You are a [occupant_type]!</span>")
|
||||
H.ckey = M.ckey
|
||||
visible_message("<span class='warning'>As \the [src] opens, the pipes on \the [src] surge, before it grows dark.</span>")
|
||||
log_and_message_admins("successfully opened \a [src] and got a [occupant_type].")
|
||||
|
||||
var/list/uniform_options
|
||||
var/list/shoe_options
|
||||
var/list/head_options
|
||||
var/list/headset_options
|
||||
|
||||
if(clothing_possibilities && clothing_possibilities.len)
|
||||
for(var/path in clothing_possibilities)
|
||||
if(ispath(path, /obj/item/clothing/under))
|
||||
if(!uniform_options)
|
||||
uniform_options = list()
|
||||
uniform_options |= path
|
||||
if(ispath(path, /obj/item/clothing/shoes))
|
||||
if(!shoe_options)
|
||||
shoe_options = list()
|
||||
shoe_options |= path
|
||||
if(ispath(path, /obj/item/clothing/head))
|
||||
if(!head_options)
|
||||
head_options = list()
|
||||
head_options |= path
|
||||
if(ispath(path, /obj/item/device/radio/headset))
|
||||
if(!headset_options)
|
||||
headset_options = list()
|
||||
headset_options |= path
|
||||
|
||||
if(uniform_options && uniform_options.len)
|
||||
var/newpath = pick(uniform_options)
|
||||
var/obj/item/clothing/C = new newpath(H)
|
||||
H.equip_to_appropriate_slot(C)
|
||||
|
||||
if(shoe_options && shoe_options.len)
|
||||
var/newpath = pick(shoe_options)
|
||||
var/obj/item/clothing/C = new newpath(H)
|
||||
H.equip_to_appropriate_slot(C)
|
||||
|
||||
if(head_options && head_options.len)
|
||||
var/newpath = pick(head_options)
|
||||
var/obj/item/clothing/C = new newpath(H)
|
||||
H.equip_to_appropriate_slot(C)
|
||||
|
||||
if(headset_options && headset_options.len)
|
||||
var/newpath = pick(headset_options)
|
||||
var/obj/item/C = new newpath(H)
|
||||
H.equip_to_appropriate_slot(C)
|
||||
|
||||
var/newname = sanitize(tgui_input_text(H, "Your mind feels foggy, and you recall your name might be [H.real_name]. Would you like to change your name?", "Name change", null, MAX_NAME_LEN), MAX_NAME_LEN)
|
||||
if (newname)
|
||||
H.real_name = newname
|
||||
|
||||
icon_state = icon_state_opened
|
||||
|
||||
H.forceMove(T)
|
||||
|
||||
if(special_role)
|
||||
var/datum/antagonist/role = all_antag_types[special_role] //Explicitly NOT an antagonist.
|
||||
if(role)
|
||||
if(role.add_antagonist(H.mind, 1, 1, 0, 1, 1))
|
||||
log_admin("\The [src] made [key_name(src)] into a [role.role_text].")
|
||||
|
||||
if(start_injured) //Doublechecking if we actually want them to be injured
|
||||
if(suffer_brute)
|
||||
for(var/br = 1, br < brute_instances, br++)
|
||||
H.adjustBruteLoss(rand(1,brute_severity))
|
||||
if(suffer_burn)
|
||||
for(var/bu = 1, bu < burn_instances, bu++)
|
||||
H.adjustFireLoss(rand(1,burn_severity))
|
||||
if(suffer_oxloss)
|
||||
H.adjustOxyLoss(rand(1,oxy_severity))
|
||||
if(suffer_toxloss)
|
||||
H.adjustToxLoss(rand(1,tox_severity))
|
||||
if(suffer_cloneloss)
|
||||
H.adjustCloneLoss(rand(1,clone_severity))
|
||||
|
||||
if(allow_appearance_change)
|
||||
H.change_appearance(APPEARANCE_ALL, H, check_species_whitelist = 1)
|
||||
|
||||
visible_message("<span class='aliem'>\The [src] [pick("gurgles", "seizes", "clangs")] before releasing \the [H]!</span>")
|
||||
Reference in New Issue
Block a user