mirror of
https://github.com/Aurorastation/Aurora-Old.git
synced 2026-07-15 01:32:19 +01:00
Revert "Synthetics revised"
This commit is contained in:
@@ -1240,7 +1240,6 @@
|
||||
#include "code\modules\organs\organ_internal.dm"
|
||||
#include "code\modules\organs\organ_objects.dm"
|
||||
#include "code\modules\organs\pain.dm"
|
||||
#include "code\modules\organs\synth_skin.dm"
|
||||
#include "code\modules\organs\wound.dm"
|
||||
#include "code\modules\paperwork\carbonpaper.dm"
|
||||
#include "code\modules\paperwork\clipboard.dm"
|
||||
|
||||
+31
-31
@@ -1,41 +1,41 @@
|
||||
proc/valid_sprite_accessories(gender,species,test_list)
|
||||
var/list/valid = list()
|
||||
for(var/style in test_list)
|
||||
var/datum/sprite_accessory/S = test_list[style]
|
||||
proc/random_hair_style(gender, species = "Human")
|
||||
var/h_style = "Bald"
|
||||
|
||||
var/list/valid_hairstyles = list()
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if( !(species in S.species_allowed))
|
||||
continue
|
||||
if (S.gender!=NEUTER)
|
||||
if (S.gender!=gender)
|
||||
continue
|
||||
valid[style] = S
|
||||
return valid
|
||||
|
||||
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
||||
|
||||
proc/get_valid_hairstyles(gender, species)
|
||||
return valid_sprite_accessories(gender,species,hair_styles_list)
|
||||
|
||||
|
||||
proc/get_valid_facialhairstyles(gender, species)
|
||||
return valid_sprite_accessories(gender,species,facial_hair_styles_list)
|
||||
if(valid_hairstyles.len)
|
||||
h_style = pick(valid_hairstyles)
|
||||
|
||||
|
||||
proc/random_hair_style(gender, species)
|
||||
var/h_style = "Bald"
|
||||
if (species)
|
||||
var/list/valid_hairstyles = get_valid_hairstyles(gender,species)
|
||||
if(valid_hairstyles.len)
|
||||
h_style = pick(valid_hairstyles)
|
||||
return h_style
|
||||
|
||||
|
||||
proc/random_facial_hair_style(gender, species)
|
||||
proc/random_facial_hair_style(gender, species = "Human")
|
||||
var/f_style = "Shaved"
|
||||
if (species)
|
||||
var/list/valid_facialhairstyles = get_valid_facialhairstyles(gender,species)
|
||||
if(valid_facialhairstyles.len)
|
||||
f_style = pick(valid_facialhairstyles)
|
||||
return f_style
|
||||
|
||||
|
||||
var/list/valid_facialhairstyles = list()
|
||||
for(var/facialhairstyle in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if( !(species in S.species_allowed))
|
||||
continue
|
||||
|
||||
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
|
||||
|
||||
if(valid_facialhairstyles.len)
|
||||
f_style = pick(valid_facialhairstyles)
|
||||
|
||||
return f_style
|
||||
|
||||
proc/random_name(gender, species = "Human")
|
||||
if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
|
||||
|
||||
@@ -241,9 +241,6 @@ proc/checkhtml(var/t, var/whitelist = paper_tag_whitelist)
|
||||
//Returns a string with the first element of the string capitalized.
|
||||
/proc/capitalize(var/t as text)
|
||||
return uppertext(copytext(t, 1, 2)) + copytext(t, 2)
|
||||
|
||||
/proc/capitalized(var/t as text)
|
||||
return capitalize(lowertext(t))
|
||||
|
||||
//Centers text by adding spaces to either side of the string.
|
||||
/proc/dd_centertext(message, length)
|
||||
|
||||
@@ -81,15 +81,7 @@
|
||||
while(length(hex) < placeholder)
|
||||
hex = text("0[]", hex)
|
||||
return hex
|
||||
|
||||
|
||||
/proc/colour_to_html(r,g,b)
|
||||
return "'#[num2hex(r)][num2hex(g)][num2hex(b)]'"
|
||||
|
||||
|
||||
/proc/htmlcolour_to_values(colour)
|
||||
return list(hex2num(copytext(colour, 2, 4)),hex2num(copytext(colour, 4, 6)),hex2num(copytext(colour, 6, 8)))
|
||||
|
||||
|
||||
// Concatenates a list of strings into a single string. A seperator may optionally be provided.
|
||||
/proc/list2text(list/ls, sep)
|
||||
|
||||
@@ -154,288 +154,3 @@ var/list/nonhuman_positions = list(
|
||||
|
||||
return titles
|
||||
|
||||
|
||||
|
||||
// All this datum/preview/job stuff is for the preview icon when you're building your character.
|
||||
// See code\modules\mob\new_player\preferences_setup.dm for where it's used
|
||||
|
||||
datum/preview/job
|
||||
var/job_type=null
|
||||
var/job_index=null
|
||||
var/uniform_icon='icons/mob/uniform.dmi'
|
||||
var/uniform_state="grey_s"
|
||||
var/mask_icon='icons/mob/mask.dmi'
|
||||
var/mask_state=null
|
||||
var/hat_state=null
|
||||
var/hat_icon='icons/mob/head.dmi'
|
||||
var/gloves_icon='icons/mob/hands.dmi'
|
||||
var/gloves_state=null
|
||||
var/shoes_icon='icons/mob/feet.dmi'
|
||||
var/shoes_state="black"
|
||||
var/jacket_icon='icons/mob/suit.dmi'
|
||||
var/jacket_state=null
|
||||
var/belt_icon='icons/mob/belt.dmi'
|
||||
var/belt_state=null
|
||||
var/backpack_01_icon='icons/mob/back.dmi'
|
||||
var/backpack_01_state="backpack"
|
||||
var/backpack_02_icon='icons/mob/back.dmi'
|
||||
var/backpack_02_state="satchel-norm"
|
||||
var/backpack_03_icon='icons/mob/back.dmi'
|
||||
var/backpack_03_state="satchel"
|
||||
|
||||
datum/preview/job/proc/blend_icon(var/icon/result_icon, var/current_icon, var/current_state, var/blend_type)
|
||||
if (current_state)
|
||||
result_icon.Blend(new /icon(current_icon,current_state),blend_type)
|
||||
|
||||
datum/preview/job/proc/create_clothes_icon(var/backpack_selection)
|
||||
var/icon/result=new /icon(uniform_icon, uniform_state)
|
||||
blend_icon(result,shoes_icon,shoes_state,ICON_UNDERLAY)
|
||||
blend_icon(result,gloves_icon,gloves_state,ICON_UNDERLAY)
|
||||
blend_icon(result,belt_icon,belt_state,ICON_OVERLAY)
|
||||
blend_icon(result,jacket_icon,jacket_state,ICON_OVERLAY)
|
||||
blend_icon(result,mask_icon,mask_state,ICON_OVERLAY)
|
||||
blend_icon(result,hat_icon,hat_state,ICON_OVERLAY)
|
||||
switch(backpack_selection)
|
||||
if(2)
|
||||
blend_icon(result,backpack_01_icon,backpack_01_state,ICON_OVERLAY)
|
||||
if(3)
|
||||
blend_icon(result,backpack_02_icon,backpack_02_state,ICON_OVERLAY)
|
||||
if(4)
|
||||
blend_icon(result,backpack_03_icon,backpack_03_state,ICON_OVERLAY)
|
||||
return result
|
||||
|
||||
|
||||
datum/preview/job/engsec
|
||||
job_type=ENGSEC
|
||||
|
||||
datum/preview/job/engsec/captain
|
||||
job_index=CAPTAIN
|
||||
uniform_state="captain_s"
|
||||
shoes_state="brown"
|
||||
hat_state="captain"
|
||||
backpack_02_state="satchel-cap"
|
||||
|
||||
datum/preview/job/engsec/security
|
||||
shoes_state="jackboots"
|
||||
gloves_state="bgloves"
|
||||
backpack_01_state="securitypack"
|
||||
backpack_02_state="satchel-sec"
|
||||
|
||||
datum/preview/job/engsec/security/head_of_security
|
||||
job_index=HOS
|
||||
uniform_state="hosred_s"
|
||||
hat_state="hosberet"
|
||||
|
||||
datum/preview/job/engsec/security/warden
|
||||
job_index=WARDEN
|
||||
uniform_state="warden_s"
|
||||
|
||||
datum/preview/job/engsec/security/officer
|
||||
job_index=OFFICER
|
||||
uniform_state="secred_s"
|
||||
|
||||
datum/preview/job/engsec/detective
|
||||
job_index=DETECTIVE
|
||||
uniform_state="wardentanclothes_s"
|
||||
gloves_state="bgloves"
|
||||
|
||||
datum/preview/job/engsec/forensics
|
||||
job_index=FORENSICS
|
||||
uniform_state="polsuit_s"
|
||||
jacket_state="labcoat_open"
|
||||
|
||||
datum/preview/job/engsec/chief_of_engineering
|
||||
job_index=CHIEF
|
||||
uniform_state="chief_s"
|
||||
shoes_state="brown"
|
||||
belt_state="utility"
|
||||
hat_state="hardhat0_white"
|
||||
backpack_01_state="engiepack"
|
||||
backpack_02_state="satchel-eng"
|
||||
|
||||
datum/preview/job/engsec/engineer
|
||||
job_index=ENGINEER
|
||||
uniform_state="engine_s"
|
||||
shoes_state="orange"
|
||||
belt_state="utility"
|
||||
hat_state="hardhat0_yellow"
|
||||
backpack_01_state="engiepack"
|
||||
backpack_02_state="satchel-eng"
|
||||
|
||||
datum/preview/job/engsec/atmospherics_tech
|
||||
job_index=ATMOSTECH
|
||||
uniform_state="atmos_s"
|
||||
shoes_state="black"
|
||||
gloves_state="bgloves"
|
||||
belt_state="utility"
|
||||
|
||||
datum/preview/job/engsec/security/security_cadet
|
||||
job_index=INTERN_SEC
|
||||
uniform_state="redshirt2_s"
|
||||
hat_state="officerberet"
|
||||
|
||||
datum/preview/job/engsec/security/engineering_assistant
|
||||
job_index=INTERN_ENG
|
||||
uniform_state="engine_s"
|
||||
shoes_state="orange"
|
||||
hat_state="e_beret_badge"
|
||||
backpack_01_state="engiepack"
|
||||
backpack_02_state="satchel-eng"
|
||||
|
||||
datum/preview/job/engsec/ai
|
||||
job_index=AI
|
||||
|
||||
datum/preview/job/engsec/cyborg
|
||||
job_index=CYBORG
|
||||
|
||||
datum/preview/job/medsci
|
||||
job_type=MEDSCI
|
||||
shoes_state="white"
|
||||
jacket_state="labcoat_open"
|
||||
|
||||
datum/preview/job/medsci/science
|
||||
backpack_02_state="satchel-tox"
|
||||
uniform_state="sciencewhite_s"
|
||||
jacket_state="labcoat_tox_open"
|
||||
|
||||
datum/preview/job/medsci/science/research_director
|
||||
job_index=RD
|
||||
uniform_state="director_s"
|
||||
shoes_state="brown"
|
||||
|
||||
datum/preview/job/medsci/science/scientist
|
||||
job_index=SCIENTIST
|
||||
|
||||
datum/preview/job/medsci/science/xenobiologist
|
||||
job_index=XENOBIOLOGIST
|
||||
|
||||
datum/preview/job/medsci/science/intern
|
||||
job_index=INTERN_SCI
|
||||
jacket_state=null
|
||||
|
||||
datum/preview/job/medsci/chemist
|
||||
job_index=CHEMIST
|
||||
uniform_state="chemistrywhite_s"
|
||||
jacket_state="labcoat_chem_open"
|
||||
backpack_02_state="satchel-chem"
|
||||
|
||||
datum/preview/job/medsci/medical
|
||||
backpack_01_state="medicalpack"
|
||||
backpack_02_state="satchel-med"
|
||||
|
||||
datum/preview/job/medsci/medical/chief_medical_officer
|
||||
job_index=CMO
|
||||
uniform_state="cmo_s"
|
||||
shoes_state="brown"
|
||||
jacket_state="labcoat_cmo_open"
|
||||
|
||||
datum/preview/job/medsci/medical/emt
|
||||
job_index=EMT
|
||||
uniform_state="emt_s"
|
||||
jacket_state="fr_jacket_open"
|
||||
backpack_01_state="emtpack"
|
||||
backpack_02_state="satchel-emt"
|
||||
|
||||
datum/preview/job/medsci/medical/geneticist
|
||||
job_index=GENETICIST
|
||||
uniform_state="geneticswhite_s"
|
||||
jacket_state="labcoat_gen_open"
|
||||
backpack_01_state="backpack"
|
||||
backpack_02_state="satchel-gen"
|
||||
|
||||
datum/preview/job/medsci/medical/virologist
|
||||
job_index=VIROLOGIST
|
||||
uniform_state="virologywhite_s"
|
||||
mask_state="sterile"
|
||||
jacket_state="labcoat_vir_open"
|
||||
backpack_02_state="satchel-vir"
|
||||
|
||||
datum/preview/job/medsci/medical/intern
|
||||
job_index=INTERN_MED
|
||||
uniform_state="medical_s"
|
||||
jacket_state=null
|
||||
|
||||
datum/preview/job/medsci/roboticist
|
||||
job_index=ROBOTICIST
|
||||
uniform_state="robotics_s"
|
||||
shoes_state="black"
|
||||
gloves_state="bgloves"
|
||||
|
||||
datum/preview/job/civilian
|
||||
job_type=CIVILIAN
|
||||
shoes_state="black"
|
||||
|
||||
datum/preview/job/civilian/head_of_personnel
|
||||
job_index=HOP
|
||||
uniform_state="hop_s"
|
||||
shoes_state="brown"
|
||||
|
||||
datum/preview/job/civilian/bartender
|
||||
job_index=BARTENDER
|
||||
uniform_state="ba_suit_s"
|
||||
|
||||
datum/preview/job/civilian/botanist
|
||||
job_index=BOTANIST
|
||||
uniform_state="hydroponics_s"
|
||||
gloves_state="ggloves"
|
||||
jacket_state="apron"
|
||||
backpack_02_state="satchel-hyd"
|
||||
|
||||
datum/preview/job/civilian/chef
|
||||
job_index=CHEF
|
||||
uniform_state="chef_s"
|
||||
hat_state="chef"
|
||||
|
||||
datum/preview/job/civilian/janitor
|
||||
job_index=JANITOR
|
||||
uniform_state="janitor_s"
|
||||
|
||||
datum/preview/job/civilian/librarian
|
||||
job_index=LIBRARIAN
|
||||
uniform_state="red_suit_s"
|
||||
|
||||
datum/preview/job/civilian/quartermaster
|
||||
job_index=QUARTERMASTER
|
||||
uniform_state="qm_s"
|
||||
shoes_state="brown"
|
||||
gloves_state="bgloves"
|
||||
|
||||
datum/preview/job/civilian/cargo_tech
|
||||
job_index=CARGOTECH
|
||||
uniform_state="cargotech_s"
|
||||
gloves_state="bgloves"
|
||||
hat_state="flat_cap"
|
||||
|
||||
datum/preview/job/civilian/miner
|
||||
job_index=MINER
|
||||
uniform_state="miner_s"
|
||||
gloves_state="bgloves"
|
||||
backpack_02_state="satchel-eng"
|
||||
|
||||
datum/preview/job/civilian/internal_affairs
|
||||
job_index=LAWYER
|
||||
uniform_state="internalaffairs_s"
|
||||
shoes_state="brown"
|
||||
|
||||
datum/preview/job/civilian/chaplain
|
||||
job_index=CHAPLAIN
|
||||
uniform_state="chapblack_s"
|
||||
|
||||
var/list/job_preview_data=null
|
||||
proc/job_preview_list()
|
||||
if (!job_preview_data)
|
||||
job_preview_data=list()
|
||||
for(var/job_preview_type in typesof(/datum/preview/job)-/datum/preview/job)
|
||||
var/datum/preview/job/new_job = new job_preview_type()
|
||||
var/type_string="[new_job.job_type]"
|
||||
var/index_string="[new_job.job_index]"
|
||||
if(!(type_string in job_preview_data))
|
||||
job_preview_data[type_string]=list()
|
||||
if(new_job.job_index)
|
||||
job_preview_data[type_string][index_string]=new_job
|
||||
job_preview_data["DEFAULT"] = list(new/datum/preview/job())
|
||||
return job_preview_data
|
||||
|
||||
proc/get_job_preview_for_index(job_type,job_index)
|
||||
var/list/preview_list=job_preview_list()
|
||||
return preview_list[job_type][job_index]
|
||||
@@ -51,7 +51,6 @@
|
||||
/obj/item/robot_parts/robot_component/actuator,
|
||||
/obj/item/robot_parts/robot_component/diagnosis_unit,
|
||||
/obj/item/robot_parts/robot_component/camera,
|
||||
/obj/item/robot_parts/robot_component/law_computer,
|
||||
/obj/item/robot_parts/robot_component/armour
|
||||
),
|
||||
"Ripley"=list(
|
||||
@@ -119,21 +118,23 @@
|
||||
// /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
|
||||
// /obj/item/mecha_parts/mecha_equipment/weapon/honker
|
||||
),
|
||||
|
||||
"Robotic Upgrade Modules" = list(
|
||||
/obj/item/borg/upgrade/reset,
|
||||
/obj/item/borg/upgrade/rename,
|
||||
/obj/item/borg/upgrade/restart,
|
||||
/obj/item/borg/upgrade/vtec,
|
||||
/obj/item/borg/upgrade/tasercooler,
|
||||
/obj/item/borg/upgrade/jetpack),
|
||||
|
||||
"Synthetic Coverings" = list( /obj/item/weapon/synth_skin_spray,
|
||||
/obj/item/weapon/synth_skin_cartridge/paint,
|
||||
/obj/item/weapon/synth_skin_cartridge/skin,
|
||||
/obj/item/weapon/synth_skin_cartridge/fur,
|
||||
/obj/item/weapon/synth_skin_cartridge/scales),
|
||||
|
||||
"Engineering Equipment"=list(/obj/item/mecha_parts/mecha_tracking))
|
||||
/obj/item/borg/upgrade/jetpack
|
||||
),
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"Engineering Equipment"=list(/obj/item/mecha_parts/mecha_tracking)
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -9,17 +9,6 @@
|
||||
var/list/construction_cost = list("metal"=20000,"glass"=5000)
|
||||
var/list/part = null
|
||||
var/sabotaged = 0 //Emagging limbs can have repercussions when installed as prosthetics.
|
||||
|
||||
|
||||
/obj/item/robot_parts/proc/attach_to_robot(mob/user as mob, obj/item/robot_parts/robot_suit/assembly as obj)
|
||||
user << "\red This is not used to construct robots."
|
||||
|
||||
|
||||
/obj/item/robot_parts/proc/move_into_robot(mob/user as mob, obj/item/robot_parts/robot_suit/assembly as obj)
|
||||
user.drop_item()
|
||||
src.loc = assembly
|
||||
assembly.updateicon()
|
||||
|
||||
|
||||
/obj/item/robot_parts/l_arm
|
||||
name = "robot left arm"
|
||||
@@ -28,12 +17,6 @@
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=18000)
|
||||
part = list("l_arm","l_hand")
|
||||
attach_to_robot(mob/user as mob, obj/item/robot_parts/robot_suit/assembly as obj)
|
||||
if(assembly.l_arm)
|
||||
return
|
||||
assembly.l_arm = src
|
||||
move_into_robot(user,assembly)
|
||||
|
||||
|
||||
/obj/item/robot_parts/r_arm
|
||||
name = "robot right arm"
|
||||
@@ -42,11 +25,6 @@
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=18000)
|
||||
part = list("r_arm","r_hand")
|
||||
attach_to_robot(mob/user as mob, obj/item/robot_parts/robot_suit/assembly as obj)
|
||||
if(assembly.r_arm)
|
||||
return
|
||||
assembly.r_arm = src
|
||||
move_into_robot(user,assembly)
|
||||
|
||||
/obj/item/robot_parts/l_leg
|
||||
name = "robot left leg"
|
||||
@@ -55,12 +33,6 @@
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=15000)
|
||||
part = list("l_leg","l_foot")
|
||||
attach_to_robot(mob/user as mob, obj/item/robot_parts/robot_suit/assembly as obj)
|
||||
if(assembly.l_leg)
|
||||
return
|
||||
assembly.l_leg = src
|
||||
move_into_robot(user,assembly)
|
||||
|
||||
|
||||
/obj/item/robot_parts/r_leg
|
||||
name = "robot right leg"
|
||||
@@ -69,12 +41,6 @@
|
||||
construction_time = 200
|
||||
construction_cost = list("metal"=15000)
|
||||
part = list("r_leg","r_foot")
|
||||
attach_to_robot(mob/user as mob, obj/item/robot_parts/robot_suit/assembly as obj)
|
||||
if(assembly.r_leg)
|
||||
return
|
||||
assembly.r_leg = src
|
||||
move_into_robot(user,assembly)
|
||||
|
||||
|
||||
/obj/item/robot_parts/chest
|
||||
name = "robot torso"
|
||||
@@ -84,18 +50,6 @@
|
||||
construction_cost = list("metal"=40000)
|
||||
var/wires = 0.0
|
||||
var/obj/item/weapon/cell/cell = null
|
||||
attach_to_robot(mob/user as mob, obj/item/robot_parts/robot_suit/assembly as obj)
|
||||
if(assembly.chest)
|
||||
return
|
||||
if(!(src.wires && src.cell))
|
||||
if (!src.wires)
|
||||
user << "\blue You need to attach wires to it first!"
|
||||
if (!src.cell)
|
||||
user << "\blue You need to attach a cell to it first!"
|
||||
return
|
||||
assembly.chest = src
|
||||
move_into_robot(user,assembly)
|
||||
|
||||
|
||||
/obj/item/robot_parts/head
|
||||
name = "robot head"
|
||||
@@ -103,17 +57,8 @@
|
||||
icon_state = "head"
|
||||
construction_time = 350
|
||||
construction_cost = list("metal"=25000)
|
||||
var/obj/item/robot_parts/robot_component/camera/camera = null
|
||||
var/obj/item/robot_parts/robot_component/law_computer/law_computer = null
|
||||
attach_to_robot(mob/user as mob, obj/item/robot_parts/robot_suit/assembly as obj)
|
||||
if(assembly.head)
|
||||
return
|
||||
if(!src.camera)
|
||||
user << "\blue You need to attach a camera to it first!"
|
||||
return
|
||||
assembly.head = src
|
||||
move_into_robot(user,assembly)
|
||||
|
||||
var/obj/item/device/flash/flash1 = null
|
||||
var/obj/item/device/flash/flash2 = null
|
||||
|
||||
/obj/item/robot_parts/robot_suit
|
||||
name = "robot endoskeleton"
|
||||
@@ -147,7 +92,6 @@
|
||||
src.overlays += "r_leg+o"
|
||||
if(src.head)
|
||||
src.overlays += "head+o"
|
||||
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/check_completion()
|
||||
if(src.l_arm && src.r_arm)
|
||||
@@ -156,48 +100,9 @@
|
||||
feedback_inc("cyborg_frames_built",1)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/allowed_to_build(mob/user as mob, obj/item/device/mmi/brain as obj)
|
||||
if(!check_completion()) // not complete? not allowed
|
||||
return
|
||||
if(!check_allowed_to_install_brain(user,brain)) // not allowed to put the brain in there
|
||||
return
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/check_allowed_to_install_brain(mob/user as mob, obj/item/device/mmi/brain as obj)
|
||||
if(!istype(loc,/turf))
|
||||
user << "\red You can't put the [brain] in, the frame has to be standing on the ground to be perfectly precise."
|
||||
return
|
||||
if(!brain.brainmob)
|
||||
user << "\red Sticking an empty [brain] into the frame would sort of defeat the purpose."
|
||||
return
|
||||
if(!brain.brainmob.key)
|
||||
var/ghost_can_reenter = 0
|
||||
if(brain.brainmob.mind)
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(G.can_reenter_corpse && G.mind == brain.brainmob.mind)
|
||||
ghost_can_reenter = 1
|
||||
break
|
||||
if(!ghost_can_reenter)
|
||||
user << "<span class='notice'>The [brain] is completely unresponsive; there's no point.</span>"
|
||||
return
|
||||
if(brain.brainmob.stat == DEAD)
|
||||
user << "\red Sticking a dead [brain] into the frame would sort of defeat the purpose."
|
||||
return
|
||||
if(brain.brainmob.mind in ticker.mode.head_revolutionaries)
|
||||
user << "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [brain]."
|
||||
return
|
||||
if(jobban_isbanned(brain.brainmob, "Cyborg"))
|
||||
user << "\red This [brain] does not seem to fit."
|
||||
return
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
/obj/item/robot_parts/robot_suit/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
// HANDLE ED209 ASSEMBLY
|
||||
if(istype(W, /obj/item/stack/sheet/metal) && !l_arm && !r_arm && !l_leg && !r_leg && !chest && !head)
|
||||
var/obj/item/weapon/ed209_assembly/B = new /obj/item/weapon/ed209_assembly
|
||||
B.loc = get_turf(src)
|
||||
@@ -207,73 +112,132 @@
|
||||
user.before_take_item(src)
|
||||
user.put_in_inactive_hand(B)
|
||||
del(src)
|
||||
// HANDLE RENAME
|
||||
if(istype(W, /obj/item/robot_parts/l_leg))
|
||||
if(src.l_leg) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.l_leg = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/r_leg))
|
||||
if(src.r_leg) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.r_leg = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/l_arm))
|
||||
if(src.l_arm) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.l_arm = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/r_arm))
|
||||
if(src.r_arm) return
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.r_arm = W
|
||||
src.updateicon()
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/chest))
|
||||
if(src.chest) return
|
||||
if(W:wires && W:cell)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.chest = W
|
||||
src.updateicon()
|
||||
else if(!W:wires)
|
||||
user << "\blue You need to attach wires to it first!"
|
||||
else
|
||||
user << "\blue You need to attach a cell to it first!"
|
||||
|
||||
if(istype(W, /obj/item/robot_parts/head))
|
||||
if(src.head) return
|
||||
if(W:flash2 && W:flash1)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.head = W
|
||||
src.updateicon()
|
||||
else
|
||||
user << "\blue You need to attach a flash to it first!"
|
||||
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/M = W
|
||||
if(check_completion())
|
||||
if(!istype(loc,/turf))
|
||||
user << "\red You can't put the [W] in, the frame has to be standing on the ground to be perfectly precise."
|
||||
return
|
||||
if(!M.brainmob)
|
||||
user << "\red Sticking an empty [W] into the frame would sort of defeat the purpose."
|
||||
return
|
||||
if(!M.brainmob.key)
|
||||
var/ghost_can_reenter = 0
|
||||
if(M.brainmob.mind)
|
||||
for(var/mob/dead/observer/G in player_list)
|
||||
if(G.can_reenter_corpse && G.mind == M.brainmob.mind)
|
||||
ghost_can_reenter = 1
|
||||
break
|
||||
if(!ghost_can_reenter)
|
||||
user << "<span class='notice'>The [W] is completely unresponsive; there's no point.</span>"
|
||||
return
|
||||
|
||||
if(M.brainmob.stat == DEAD)
|
||||
user << "\red Sticking a dead [W] into the frame would sort of defeat the purpose."
|
||||
return
|
||||
|
||||
if(M.brainmob.mind in ticker.mode.head_revolutionaries)
|
||||
user << "\red The frame's firmware lets out a shrill sound, and flashes 'Abnormal Memory Engram'. It refuses to accept the [W]."
|
||||
return
|
||||
|
||||
if(jobban_isbanned(M.brainmob, "Cyborg"))
|
||||
user << "\red This [W] does not seem to fit."
|
||||
return
|
||||
|
||||
var/mob/living/silicon/robot/O = new /mob/living/silicon/robot(get_turf(loc), unfinished = 1)
|
||||
if(!O) return
|
||||
|
||||
user.drop_item()
|
||||
|
||||
O.mmi = W
|
||||
O.invisibility = 0
|
||||
O.custom_name = created_name
|
||||
O.updatename("Default")
|
||||
|
||||
M.brainmob.mind.transfer_to(O)
|
||||
|
||||
if(O.mind && O.mind.special_role)
|
||||
O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
|
||||
|
||||
O.job = "Cyborg"
|
||||
|
||||
O.cell = chest.cell
|
||||
O.cell.loc = O
|
||||
W.loc = O//Should fix cybros run time erroring when blown up. It got deleted before, along with the frame.
|
||||
|
||||
// Since we "magically" installed a cell, we also have to update the correct component.
|
||||
if(O.cell)
|
||||
var/datum/robot_component/cell_component = O.components["power cell"]
|
||||
cell_component.wrapped = O.cell
|
||||
cell_component.installed = 1
|
||||
|
||||
feedback_inc("cyborg_birth",1)
|
||||
O.Namepick()
|
||||
|
||||
del(src)
|
||||
else
|
||||
user << "\blue The MMI must go in after everything else!"
|
||||
|
||||
if (istype(W, /obj/item/weapon/pen))
|
||||
var/t = stripped_input(user, "Enter new robot name", src.name, src.created_name, MAX_NAME_LEN)
|
||||
if (!t)
|
||||
return
|
||||
if (!in_range(src, usr) && src.loc != usr)
|
||||
return
|
||||
src.created_name = t
|
||||
// HANDLE PART ASSEMBLY
|
||||
if(istype(W,/obj/item/robot_parts))
|
||||
var/obj/item/robot_parts/part = W
|
||||
part.attach_to_robot(user,src)
|
||||
return
|
||||
// HANDLE ROBOT CREATION
|
||||
if(istype(W, /obj/item/device/mmi))
|
||||
var/obj/item/device/mmi/brain = W
|
||||
if (allowed_to_build(user,brain)) // we are allowed to build this robot
|
||||
user.drop_item() // drop this thing
|
||||
if (src.head.law_computer) // do we have a law computer? If so, we're making a standard robot
|
||||
create_robot(brain)
|
||||
else // otherwise we're making a shell
|
||||
create_shell(brain)
|
||||
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/create_robot(obj/item/device/mmi/brain as obj)
|
||||
var/mob/living/silicon/robot/new_robot = new(get_turf(loc), unfinished = 1)
|
||||
if(!new_robot) // something has gone poorly
|
||||
return
|
||||
// move the brain
|
||||
new_robot.mmi = brain
|
||||
new_robot.invisibility = 0
|
||||
new_robot.custom_name = created_name
|
||||
new_robot.updatename("Default")
|
||||
brain.brainmob.mind.transfer_to(new_robot) // shove that mob in the mmi
|
||||
if(new_robot.mind && new_robot.mind.special_role)
|
||||
new_robot.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite")
|
||||
new_robot.job = "Cyborg"
|
||||
new_robot.cell = chest.cell
|
||||
new_robot.cell.loc = new_robot
|
||||
brain.loc = new_robot //Should fix cybros run time erroring when blown up. It got deleted before, along with the frame.
|
||||
if(new_robot.cell) // Since we "magically" installed a cell, we also have to update the correct component.
|
||||
var/datum/robot_component/cell_component = new_robot.components["power cell"]
|
||||
cell_component.wrapped = new_robot.cell
|
||||
cell_component.installed = 1
|
||||
feedback_inc("cyborg_birth",1)
|
||||
new_robot.Namepick()
|
||||
del(src)
|
||||
|
||||
|
||||
/obj/item/robot_parts/robot_suit/proc/create_shell(obj/item/device/mmi/brain as obj)
|
||||
var/mob/living/carbon/human/machine/new_shell = new(src.loc)
|
||||
var/key=brain.brainmob.mind.key
|
||||
brain.brainmob.mind.transfer_to(new_shell) // transfer brain
|
||||
var/datum/organ/internal/brain/robot/brain_datum=new_shell.internal_organs_by_name["brain"] // put the brain in the head
|
||||
brain_datum.machine_brain_type=brain.machine_brain_type
|
||||
new_shell.real_name=brain.brainmob.real_name
|
||||
give_option_to_rename(new_shell)
|
||||
del(brain)
|
||||
del(src)
|
||||
|
||||
proc/give_option_to_rename(var/mob/living/carbon/human/new_shell)
|
||||
spawn(0)
|
||||
var/newname
|
||||
newname = input(new_shell,"You are a newly created humanoid robot. Enter a name.", "Name change","") as text
|
||||
if (newname != "")
|
||||
new_shell.fully_replace_character_name(new_shell.real_name,newname)
|
||||
|
||||
src.created_name = t
|
||||
|
||||
return
|
||||
|
||||
/obj/item/robot_parts/chest/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
@@ -297,47 +261,25 @@ proc/give_option_to_rename(var/mob/living/carbon/human/new_shell)
|
||||
user << "\blue You insert the wire!"
|
||||
return
|
||||
|
||||
|
||||
/obj/item/robot_parts/head/attack_hand(mob/user)
|
||||
var/obj/item/inactive_item = user.get_inactive_hand()
|
||||
if (src==inactive_item) // if we are clicking on this in our hand
|
||||
if(src.law_computer)
|
||||
src.law_computer.add_fingerprint(user)
|
||||
user.put_in_active_hand(src.law_computer)
|
||||
user << "You carefully remove \the [src.law_computer] from the head."
|
||||
src.law_computer = null
|
||||
return
|
||||
else if(src.camera)
|
||||
src.camera.add_fingerprint(user)
|
||||
user.put_in_active_hand(src.camera)
|
||||
user << "You carefully remove \the [src.camera] from the head."
|
||||
src.camera = null
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/robot_parts/head/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
if(istype(W, /obj/item/device/flash))
|
||||
user << "\red Why are you trying to put a weapon into a robots head? (use a camera component)" // should warn people who have done it the other way
|
||||
if(istype(W, /obj/item/robot_parts/robot_component/camera))
|
||||
if(src.camera)
|
||||
user << "\red You have already inserted the camera!"
|
||||
if(istype(user,/mob/living/silicon/robot))
|
||||
user << "\red How do you propose to do that?"
|
||||
return
|
||||
else if(src.flash1 && src.flash2)
|
||||
user << "\blue You have already inserted the eyes!"
|
||||
return
|
||||
else if(src.flash1)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.flash2 = W
|
||||
user << "\blue You insert the flash into the eye socket!"
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.camera = W
|
||||
user << "\blue You carefully insert the camera into the camera socket."
|
||||
else if(istype(W, /obj/item/robot_parts/robot_component/law_computer))
|
||||
if(src.law_computer)
|
||||
user << "\red You have already inserted a law computer!"
|
||||
return
|
||||
else
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
src.law_computer = W
|
||||
user << "\blue You carefully insert the law computer into the robots head. This will slave the robot to the station AI."
|
||||
src.flash1 = W
|
||||
user << "\blue You insert the flash into the eye socket!"
|
||||
else if(istype(W, /obj/item/weapon/stock_parts/manipulator))
|
||||
user << "\blue You install some manipulators and modify the head, creating a functional spider-bot!"
|
||||
new /mob/living/simple_animal/spiderbot(get_turf(loc))
|
||||
@@ -346,7 +288,6 @@ proc/give_option_to_rename(var/mob/living/carbon/human/new_shell)
|
||||
del(src)
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/obj/item/robot_parts/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W,/obj/item/weapon/card/emag))
|
||||
|
||||
@@ -21,6 +21,106 @@
|
||||
w_class = 2.0
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
|
||||
/*HAHA, SUCK IT, 2000 LINES OF SPAGHETTI CODE!
|
||||
|
||||
NOW YOUR JOB IOS DONE BY ONLY 500 LINES OF SPAGHETTI CODE!
|
||||
|
||||
LOOK FOR SURGERY.DM*/
|
||||
|
||||
/*
|
||||
/obj/item/weapon/retractor/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && ( \
|
||||
(H.head && H.head.flags & HEADCOVERSEYES) || \
|
||||
(H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \
|
||||
(H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
if(istype(Mo) && ( \
|
||||
(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N
|
||||
user << "\red You cannot locate any eyes on this creature!"
|
||||
return
|
||||
|
||||
switch(M.eye_op_stage)
|
||||
if(1.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] is having his eyes retracted by [user].", 1)
|
||||
M << "\red [user] begins to seperate your eyes with [src]!"
|
||||
user << "\red You seperate [M]'s eyes with [src]!"
|
||||
else
|
||||
user.visible_message( \
|
||||
"\red [user] begins to have his eyes retracted.", \
|
||||
"\red You begin to pry open your eyes with [src]!" \
|
||||
)
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
if(affecting.take_damage(15))
|
||||
M:UpdateDamageIcon()
|
||||
M.updatehealth()
|
||||
else
|
||||
M.take_organ_damage(15)
|
||||
|
||||
M:eye_op_stage = 2.0
|
||||
|
||||
else if(user.zone_sel.selecting == "chest")
|
||||
switch(M:alien_op_stage)
|
||||
if(3.0)
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!istype(H))
|
||||
return ..()
|
||||
|
||||
if(H.wear_suit || H.w_uniform)
|
||||
user << "\red You're going to need to remove that suit/jumpsuit first."
|
||||
return
|
||||
|
||||
var/obj/item/alien_embryo/A = locate() in M.contents
|
||||
if(!A)
|
||||
return ..()
|
||||
user.visible_message("\red [user] begins to pull something out of [M]'s chest.", "\red You begin to pull the alien organism out of [M]'s chest.")
|
||||
|
||||
spawn(20 + rand(0,50))
|
||||
if(!A || A.loc != M)
|
||||
return
|
||||
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
if(affecting.take_damage(30))
|
||||
M:UpdateDamageIcon()
|
||||
else
|
||||
M.take_organ_damage(30)
|
||||
|
||||
if(A.stage > 3)
|
||||
var/chance = 15 + max(0, A.stage - 3) * 10
|
||||
if(prob(chance))
|
||||
A.AttemptGrow(0)
|
||||
M:alien_op_stage = 4.0
|
||||
|
||||
if(M)
|
||||
user.visible_message("\red [user] pulls an alien organism out of [M]'s chest.", "\red You pull the alien organism out of [M]'s chest.")
|
||||
A.loc = M.loc //alien embryo handles cleanup
|
||||
|
||||
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
|
||||
return ..()
|
||||
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
* Hemostat
|
||||
*/
|
||||
@@ -35,6 +135,125 @@
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
attack_verb = list("attacked", "pinched")
|
||||
|
||||
/*
|
||||
/obj/item/weapon/hemostat/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50))))
|
||||
return ..()
|
||||
|
||||
if(user.zone_sel.selecting == "groin")
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
switch(M:appendix_op_stage)
|
||||
if(1.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [user] is beginning to clamp bleeders in [M]'s abdomen cut open with [src].", 1)
|
||||
M << "\red [user] begins to clamp bleeders in your abdomen with [src]!"
|
||||
user << "\red You clamp bleeders in [M]'s abdomen with [src]!"
|
||||
M:appendix_op_stage = 2.0
|
||||
if(4.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [user] is removing [M]'s appendix with [src].", 1)
|
||||
M << "\red [user] begins to remove your appendix with [src]!"
|
||||
user << "\red You remove [M]'s appendix with [src]!"
|
||||
for(var/datum/disease/D in M.viruses)
|
||||
if(istype(D, /datum/disease/appendicitis))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/appendix/inflamed(get_turf(M))
|
||||
M:appendix_op_stage = 5.0
|
||||
return
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/appendix(get_turf(M))
|
||||
M:appendix_op_stage = 5.0
|
||||
return
|
||||
|
||||
if (user.zone_sel.selecting == "eyes")
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && ( \
|
||||
(H.head && H.head.flags & HEADCOVERSEYES) || \
|
||||
(H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \
|
||||
(H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
if(istype(Mo) && ( \
|
||||
(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N
|
||||
user << "\red You cannot locate any eyes on this creature!"
|
||||
return
|
||||
|
||||
switch(M.eye_op_stage)
|
||||
if(2.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] is having his eyes mended by [user].", 1)
|
||||
M << "\red [user] begins to mend your eyes with [src]!"
|
||||
user << "\red You mend [M]'s eyes with [src]!"
|
||||
else
|
||||
user.visible_message( \
|
||||
"\red [user] begins to have his eyes mended.", \
|
||||
"\red You begin to mend your eyes with [src]!" \
|
||||
)
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
if(affecting.take_damage(15))
|
||||
M:UpdateDamageIcon()
|
||||
M.updatehealth()
|
||||
else
|
||||
M.take_organ_damage(15)
|
||||
M:eye_op_stage = 3.0
|
||||
|
||||
else if(user.zone_sel.selecting == "chest")
|
||||
if(M:alien_op_stage == 2.0 || M:alien_op_stage == 3.0)
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!istype(H))
|
||||
return ..()
|
||||
|
||||
if(H.wear_suit || H.w_uniform)
|
||||
user << "\red You're going to need to remove that suit/jumpsuit first."
|
||||
return
|
||||
|
||||
user.visible_message("\red [user] begins to dig around in [M]'s chest.", "\red You begin to dig around in [M]'s chest.")
|
||||
|
||||
spawn(20 + (M:alien_op_stage == 3 ? 0 : rand(0,50)))
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
if(affecting.take_damage(30))
|
||||
M:UpdateDamageIcon()
|
||||
else
|
||||
M.take_organ_damage(30)
|
||||
|
||||
var/obj/item/alien_embryo/A = locate() in M.contents
|
||||
if(A)
|
||||
var/dat = "\blue You found an unknown alien organism in [M]'s chest!"
|
||||
if(A.stage < 4)
|
||||
dat += " It's small and weak, barely the size of a foetus."
|
||||
if(A.stage > 3)
|
||||
dat += " It's grown quite large, and writhes slightly as you look at it."
|
||||
if(prob(10))
|
||||
A.AttemptGrow()
|
||||
user << dat
|
||||
M:alien_op_stage = 3.0
|
||||
else
|
||||
user << "\blue You find nothing of interest."
|
||||
|
||||
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
|
||||
return ..()
|
||||
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
* Cautery
|
||||
@@ -50,6 +269,81 @@
|
||||
origin_tech = "materials=1;biotech=1"
|
||||
attack_verb = list("burnt")
|
||||
|
||||
/*
|
||||
/obj/item/weapon/cautery/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return
|
||||
|
||||
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50))))
|
||||
return ..()
|
||||
|
||||
if(user.zone_sel.selecting == "groin")
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
switch(M:appendix_op_stage)
|
||||
if(5.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [user] is beginning to cauterize the incision in [M]'s abdomen with [src].", 1)
|
||||
M << "\red [user] begins to cauterize the incision in your abdomen with [src]!"
|
||||
user << "\red You cauterize the incision in [M]'s abdomen with [src]!"
|
||||
M:appendix_op_stage = 6.0
|
||||
for(var/datum/disease/appendicitis in M.viruses)
|
||||
appendicitis.cure()
|
||||
return
|
||||
|
||||
if (user.zone_sel.selecting == "eyes")
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && ( \
|
||||
(H.head && H.head.flags & HEADCOVERSEYES) || \
|
||||
(H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \
|
||||
(H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
if(istype(Mo) && ( \
|
||||
(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
if(istype(M, /mob/living/carbon/alien))//Aliens don't have eyes./N
|
||||
user << "\red You cannot locate any eyes on this creature!"
|
||||
return
|
||||
|
||||
switch(M.eye_op_stage)
|
||||
if(3.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] is having his eyes cauterized by [user].", 1)
|
||||
M << "\red [user] begins to cauterize your eyes!"
|
||||
user << "\red You cauterize [M]'s eyes with [src]!"
|
||||
else
|
||||
user.visible_message( \
|
||||
"\red [user] begins to have his eyes cauterized.", \
|
||||
"\red You begin to cauterize your eyes!" \
|
||||
)
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
if(affecting.take_damage(15))
|
||||
M:UpdateDamageIcon()
|
||||
M.updatehealth()
|
||||
else
|
||||
M.take_organ_damage(15)
|
||||
M.sdisabilities &= ~BLIND
|
||||
M.eye_stat = 0
|
||||
M:eye_op_stage = 0.0
|
||||
|
||||
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
|
||||
return ..()
|
||||
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
* Surgical Drill
|
||||
*/
|
||||
@@ -97,6 +391,231 @@
|
||||
"\red <b>[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.</b>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/*
|
||||
/obj/item/weapon/scalpel/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
//if(M.mutations & HUSK) return ..()
|
||||
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50))))
|
||||
return ..()
|
||||
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if(user.zone_sel.selecting == "groin")
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
switch(M:appendix_op_stage)
|
||||
if(0.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] is beginning to have his abdomen cut open with [src] by [user].", 1)
|
||||
M << "\red [user] begins to cut open your abdomen with [src]!"
|
||||
user << "\red You cut [M]'s abdomen open with [src]!"
|
||||
M:appendix_op_stage = 1.0
|
||||
if(3.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] is beginning to have his appendix seperated with [src] by [user].", 1)
|
||||
M << "\red [user] begins to seperate your appendix with [src]!"
|
||||
user << "\red You seperate [M]'s appendix with [src]!"
|
||||
M:appendix_op_stage = 4.0
|
||||
return
|
||||
|
||||
if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/slime))
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && ( \
|
||||
(H.head && H.head.flags & HEADCOVERSEYES) || \
|
||||
(H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \
|
||||
(H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
if(istype(Mo) && ( \
|
||||
(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
switch(M:brain_op_stage)
|
||||
if(0.0)
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
if(M.stat == 2)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M.name] is beginning to have its flesh cut open with [src] by [user].", 1)
|
||||
M << "\red [user] begins to cut open your flesh with [src]!"
|
||||
user << "\red You cut [M]'s flesh open with [src]!"
|
||||
M:brain_op_stage = 1.0
|
||||
|
||||
return
|
||||
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] is beginning to have his head cut open with [src] by [user].", 1)
|
||||
M << "\red [user] begins to cut open your head with [src]!"
|
||||
user << "\red You cut [M]'s head open with [src]!"
|
||||
else
|
||||
user.visible_message( \
|
||||
"\red [user] begins to cut open his skull with [src]!", \
|
||||
"\red You begin to cut open your head with [src]!" \
|
||||
)
|
||||
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
if(affecting.take_damage(15))
|
||||
M:UpdateDamageIcon()
|
||||
else
|
||||
M.take_organ_damage(15)
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
affecting.take_damage(7)
|
||||
else
|
||||
M.take_organ_damage(7)
|
||||
|
||||
M.updatehealth()
|
||||
M:brain_op_stage = 1.0
|
||||
|
||||
if(1)
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
if(M.stat == 2)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M.name] is having its silky innards cut apart with [src] by [user].", 1)
|
||||
M << "\red [user] begins to cut apart your innards with [src]!"
|
||||
user << "\red You cut [M]'s silky innards apart with [src]!"
|
||||
M:brain_op_stage = 2.0
|
||||
return
|
||||
if(2.0)
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
if(M.stat == 2)
|
||||
var/mob/living/carbon/slime/slime = M
|
||||
if(slime.cores > 0)
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
user << "\red You attempt to remove [M]'s core, but [src] is ineffective!"
|
||||
return
|
||||
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] is having his connections to the brain delicately severed with [src] by [user].", 1)
|
||||
M << "\red [user] begins to cut open your head with [src]!"
|
||||
user << "\red You cut [M]'s head open with [src]!"
|
||||
else
|
||||
user.visible_message( \
|
||||
"\red [user] begin to delicately remove the connections to his brain with [src]!", \
|
||||
"\red You begin to cut open your head with [src]!" \
|
||||
)
|
||||
if(M == user && prob(25))
|
||||
user << "\red You nick an artery!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
if(affecting.take_damage(75))
|
||||
M:UpdateDamageIcon()
|
||||
else
|
||||
M.take_organ_damage(75)
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
affecting.take_damage(7)
|
||||
else
|
||||
M.take_organ_damage(7)
|
||||
|
||||
M.updatehealth()
|
||||
M:brain_op_stage = 3.0
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
else if(user.zone_sel.selecting == "eyes")
|
||||
user << "\blue So far so good."
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && ( \
|
||||
(H.head && H.head.flags & HEADCOVERSEYES) || \
|
||||
(H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \
|
||||
(H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
if(istype(Mo) && ( \
|
||||
(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
if(istype(M, /mob/living/carbon/alien) || istype(M, /mob/living/carbon/slime))//Aliens don't have eyes./N
|
||||
user << "\red You cannot locate any eyes on this creature!"
|
||||
return
|
||||
|
||||
switch(M:eye_op_stage)
|
||||
if(0.0)
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] is beginning to have his eyes incised with [src] by [user].", 1)
|
||||
M << "\red [user] begins to cut open your eyes with [src]!"
|
||||
user << "\red You make an incision around [M]'s eyes with [src]!"
|
||||
else
|
||||
user.visible_message( \
|
||||
"\red [user] begins to cut around his eyes with [src]!", \
|
||||
"\red You begin to cut open your eyes with [src]!" \
|
||||
)
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
if(affecting.take_damage(15))
|
||||
M:UpdateDamageIcon()
|
||||
else
|
||||
M.take_organ_damage(15)
|
||||
|
||||
user << "\blue So far so good before."
|
||||
M.updatehealth()
|
||||
M:eye_op_stage = 1.0
|
||||
user << "\blue So far so good after."
|
||||
|
||||
else if(user.zone_sel.selecting == "chest")
|
||||
switch(M:alien_op_stage)
|
||||
if(0.0)
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!istype(H))
|
||||
return ..()
|
||||
|
||||
if(H.wear_suit || H.w_uniform)
|
||||
user << "\red You're going to need to remove that suit/jumpsuit first."
|
||||
return
|
||||
|
||||
user.visible_message("\red [user] begins to slice open [M]'s chest.", "\red You begin to slice open [M]'s chest.")
|
||||
|
||||
spawn(rand(20,50))
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
if(affecting.take_damage(15))
|
||||
M:UpdateDamageIcon()
|
||||
else
|
||||
M.take_organ_damage(15)
|
||||
|
||||
M:alien_op_stage = 1.0
|
||||
user << "\blue So far so good."
|
||||
|
||||
else
|
||||
return ..()
|
||||
/* wat
|
||||
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
|
||||
return ..()*/
|
||||
return
|
||||
*/
|
||||
|
||||
/*
|
||||
* Researchable Scalpels
|
||||
@@ -148,6 +667,157 @@
|
||||
sharp = 1
|
||||
edge = 1
|
||||
|
||||
/*
|
||||
/obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
if(!istype(M))
|
||||
return ..()
|
||||
|
||||
if((CLUMSY in user.mutations) && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
if(!((locate(/obj/machinery/optable, M.loc) && M.resting) || (locate(/obj/structure/table/, M.loc) && M.lying && prob(50))))
|
||||
return ..()
|
||||
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if(user.zone_sel.selecting == "head" || istype(M, /mob/living/carbon/slime))
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && ( \
|
||||
(H.head && H.head.flags & HEADCOVERSEYES) || \
|
||||
(H.wear_mask && H.wear_mask.flags & MASKCOVERSEYES) || \
|
||||
(H.glasses && H.glasses.flags & GLASSESCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
var/mob/living/carbon/monkey/Mo = M
|
||||
if(istype(Mo) && ( \
|
||||
(Mo.wear_mask && Mo.wear_mask.flags & MASKCOVERSEYES) \
|
||||
))
|
||||
user << "\red You're going to need to remove that mask/helmet/glasses first."
|
||||
return
|
||||
|
||||
switch(M:brain_op_stage)
|
||||
if(1.0)
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
return
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] has his skull sawed open with [src] by [user].", 1)
|
||||
M << "\red [user] begins to saw open your head with [src]!"
|
||||
user << "\red You saw [M]'s head open with [src]!"
|
||||
else
|
||||
user.visible_message( \
|
||||
"\red [user] saws open his skull with [src]!", \
|
||||
"\red You begin to saw open your head with [src]!" \
|
||||
)
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
if(affecting.take_damage(40))
|
||||
M:UpdateDamageIcon()
|
||||
M.updatehealth()
|
||||
else
|
||||
M.take_organ_damage(40)
|
||||
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("head")
|
||||
affecting.take_damage(7)
|
||||
else
|
||||
M.take_organ_damage(7)
|
||||
|
||||
M.updatehealth()
|
||||
M:brain_op_stage = 2.0
|
||||
|
||||
if(2.0)
|
||||
if(istype(M, /mob/living/carbon/slime))
|
||||
if(M.stat == 2)
|
||||
var/mob/living/carbon/slime/slime = M
|
||||
if(slime.cores > 0)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M.name] is having one of its cores sawed out with [src] by [user].", 1)
|
||||
|
||||
slime.cores--
|
||||
M << "\red [user] begins to remove one of your cores with [src]! ([slime.cores] cores remaining)"
|
||||
user << "\red You cut one of [M]'s cores out with [src]! ([slime.cores] cores remaining)"
|
||||
|
||||
new slime.coretype(M.loc)
|
||||
|
||||
if(slime.cores <= 0)
|
||||
M.icon_state = "[slime.colour] baby slime dead-nocore"
|
||||
|
||||
return
|
||||
|
||||
if(3.0)
|
||||
/*if(M.mind && M.mind.changeling)
|
||||
user << "\red The neural tissue regrows before your eyes as you cut it."
|
||||
return*/
|
||||
|
||||
if(M != user)
|
||||
for(var/mob/O in (viewers(M) - user - M))
|
||||
O.show_message("\red [M] has his spine's connection to the brain severed with [src] by [user].", 1)
|
||||
M << "\red [user] severs your brain's connection to the spine with [src]!"
|
||||
user << "\red You sever [M]'s brain's connection to the spine with [src]!"
|
||||
else
|
||||
user.visible_message( \
|
||||
"\red [user] severs his brain's connection to the spine with [src]!", \
|
||||
"\red You sever your brain's connection to the spine with [src]!" \
|
||||
)
|
||||
|
||||
user.attack_log += "\[[time_stamp()]\]<font color='red'> Debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
|
||||
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Debrained by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>"
|
||||
|
||||
log_attack("<font color='red'>[user.name] ([user.ckey]) debrained [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])</font>")
|
||||
|
||||
|
||||
var/obj/item/brain/B = new(M.loc)
|
||||
B.transfer_identity(M)
|
||||
|
||||
M:brain_op_stage = 4.0
|
||||
M.death()//You want them to die after the brain was transferred, so not to trigger client death() twice.
|
||||
|
||||
else
|
||||
..()
|
||||
return
|
||||
|
||||
else if(user.zone_sel.selecting == "chest")
|
||||
switch(M:alien_op_stage)
|
||||
if(1.0)
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(!istype(H))
|
||||
return ..()
|
||||
|
||||
if(H.wear_suit || H.w_uniform)
|
||||
user << "\red You're going to need to remove that suit/jumpsuit first."
|
||||
return
|
||||
|
||||
user.visible_message("\red [user] begins to slice through the bone of [M]'s chest.", "\red You begin to slice through the bone of [M]'s chest.")
|
||||
|
||||
spawn(20 + rand(0,50))
|
||||
if(M == user && prob(25))
|
||||
user << "\red You mess up!"
|
||||
if(istype(M, /mob/living/carbon/human))
|
||||
var/datum/organ/external/affecting = M:get_organ("chest")
|
||||
if(affecting.take_damage(15))
|
||||
M:UpdateDamageIcon()
|
||||
else
|
||||
M.take_organ_damage(15)
|
||||
|
||||
M:alien_op_stage = 2.0
|
||||
user << "\blue So far so good."
|
||||
|
||||
else
|
||||
return ..()
|
||||
/*
|
||||
else if((!(user.zone_sel.selecting == "head")) || (!(user.zone_sel.selecting == "groin")) || (!(istype(M, /mob/living/carbon/human))))
|
||||
return ..()
|
||||
*/
|
||||
return
|
||||
*/
|
||||
|
||||
//misc, formerly from code/defines/weapons.dm
|
||||
/obj/item/weapon/bonegel
|
||||
name = "bone gel"
|
||||
|
||||
@@ -14,35 +14,43 @@
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
var/userloc = H.loc
|
||||
|
||||
var/list/hair_styles = H.valid_hairstyles_for_this_mob()
|
||||
var/list/facial_styles = H.valid_facialhairstyles_for_this_mob()
|
||||
|
||||
if (facial_styles.len > 1) //handle facial hair (if necessary)
|
||||
var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in facial_styles
|
||||
|
||||
//see code/modules/mob/new_player/preferences.dm at approx line 545 for comments!
|
||||
//this is largely copypasted from there.
|
||||
|
||||
//handle facial hair (if necessary)
|
||||
if(H.gender == MALE)
|
||||
var/list/species_facial_hair = list()
|
||||
if(H.species)
|
||||
for(var/i in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/facial_hair/tmp_facial = facial_hair_styles_list[i]
|
||||
if(H.species.name in tmp_facial.species_allowed)
|
||||
species_facial_hair += i
|
||||
else
|
||||
species_facial_hair = facial_hair_styles_list
|
||||
|
||||
var/new_style = input(user, "Select a facial hair style", "Grooming") as null|anything in species_facial_hair
|
||||
if(userloc != H.loc) return //no tele-grooming
|
||||
if(new_style)
|
||||
H.f_style = new_style
|
||||
|
||||
//handle normal hair
|
||||
if (hair_styles.len)
|
||||
var/new_style = input(user, "Select a hair style", "Grooming") as null|anything in hair_styles
|
||||
if(userloc != H.loc) return //no tele-grooming
|
||||
if(new_style)
|
||||
H.h_style = new_style
|
||||
|
||||
//machines can change their eye colours in the mirror
|
||||
if (istype(H.species,/datum/species/machine))
|
||||
var/new_eyes = input(user, "Choose your new eye colour.", "Robotic Eyes") as color|null
|
||||
if(new_eyes)
|
||||
var/list/new_eyes_as_values = htmlcolour_to_values(new_eyes)
|
||||
H.r_eyes=new_eyes_as_values[1]
|
||||
H.g_eyes=new_eyes_as_values[2]
|
||||
H.b_eyes=new_eyes_as_values[3]
|
||||
H.update_hair() // need to do a full rebuild here
|
||||
H.update_body()
|
||||
return
|
||||
var/list/species_hair = list()
|
||||
if(H.species)
|
||||
for(var/i in hair_styles_list)
|
||||
var/datum/sprite_accessory/hair/tmp_hair = hair_styles_list[i]
|
||||
if(H.species.name in tmp_hair.species_allowed)
|
||||
species_hair += i
|
||||
else
|
||||
species_hair = hair_styles_list
|
||||
|
||||
var/new_style = input(user, "Select a hair style", "Grooming") as null|anything in species_hair
|
||||
if(userloc != H.loc) return //no tele-grooming
|
||||
if(new_style)
|
||||
H.h_style = new_style
|
||||
|
||||
H.update_hair()
|
||||
|
||||
|
||||
|
||||
+325
-331
@@ -78,8 +78,6 @@ datum/preferences
|
||||
var/species = "Human" //Species datum to use.
|
||||
var/language = "None" //Secondary language
|
||||
var/list/gear //Custom/fluff item loadout.
|
||||
var/covering_type = null //synth covering type
|
||||
var/machine_brain_type = "Posibrain" //synth brain type
|
||||
|
||||
//Some faction information.
|
||||
var/home_system = "Unset" //System of birth.
|
||||
@@ -242,212 +240,226 @@ datum/preferences
|
||||
/datum/preferences/proc/ShowChoices(mob/user)
|
||||
if(!user || !user.client) return
|
||||
update_preview_icon()
|
||||
user << browse_rsc(preview_icon_front, "previewicon.png")
|
||||
user << browse_rsc(preview_icon_side, "previewicon2.png")
|
||||
user << browse_rsc(preview_icon_front, "previewicon1.png")
|
||||
spawn(0)
|
||||
var/dat = "<html><body><center>"
|
||||
var/dat = "<html><body><center>"
|
||||
|
||||
if(path)
|
||||
dat += "<center>"
|
||||
dat += "Slot <b>[slot_name]</b> - "
|
||||
dat += "<a href=\"byond://?src=\ref[user];preference=open_load_dialog\">Load slot</a> - "
|
||||
dat += "<a href=\"byond://?src=\ref[user];preference=save\">Save slot</a> - "
|
||||
dat += "<a href=\"byond://?src=\ref[user];preference=reload\">Reload slot</a>"
|
||||
dat += "</center>"
|
||||
if(path)
|
||||
dat += "<center>"
|
||||
dat += "Slot <b>[slot_name]</b> - "
|
||||
dat += "<a href=\"byond://?src=\ref[user];preference=open_load_dialog\">Load slot</a> - "
|
||||
dat += "<a href=\"byond://?src=\ref[user];preference=save\">Save slot</a> - "
|
||||
dat += "<a href=\"byond://?src=\ref[user];preference=reload\">Reload slot</a>"
|
||||
dat += "</center>"
|
||||
|
||||
else
|
||||
dat += "Please create an account to save your preferences."
|
||||
else
|
||||
dat += "Please create an account to save your preferences."
|
||||
|
||||
dat += "</center><hr><table><tr><td width='340px' height='320px'>"
|
||||
dat += "</center><hr><table><tr><td width='340px' height='320px'>"
|
||||
|
||||
dat += "<b>Name:</b> "
|
||||
dat += "<a href='?_src_=prefs;preference=name;task=input'><b>[real_name]</b></a><br>"
|
||||
dat += "(<a href='?_src_=prefs;preference=name;task=random'>Random Name</A>) "
|
||||
dat += "(<a href='?_src_=prefs;preference=name'>Always Random Name: [be_random_name ? "Yes" : "No"]</a>)"
|
||||
dat += "<b>Name:</b> "
|
||||
dat += "<a href='?_src_=prefs;preference=name;task=input'><b>[real_name]</b></a><br>"
|
||||
dat += "(<a href='?_src_=prefs;preference=name;task=random'>Random Name</A>) "
|
||||
dat += "(<a href='?_src_=prefs;preference=name'>Always Random Name: [be_random_name ? "Yes" : "No"]</a>)"
|
||||
dat += "<br>"
|
||||
|
||||
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'><b>[gender == MALE ? "Male" : "Female"]</b></a><br>"
|
||||
dat += "<b>Age:</b> <a href='?_src_=prefs;preference=age;task=input'>[age]</a><br>"
|
||||
dat += "<b>Spawn Point</b>: <a href='byond://?src=\ref[user];preference=spawnpoint;task=input'>[spawnpoint]</a>"
|
||||
|
||||
dat += "<br>"
|
||||
dat += "<b>UI Style:</b> <a href='?_src_=prefs;preference=ui'><b>[UI_style]</b></a><br>"
|
||||
dat += "<b>Custom UI</b>(recommended for White UI):<br>"
|
||||
dat += "-Color: <a href='?_src_=prefs;preference=UIcolor'><b>[UI_style_color]</b></a> <table style='display:inline;' bgcolor='[UI_style_color]'><tr><td>__</td></tr></table><br>"
|
||||
dat += "-Alpha(transparency): <a href='?_src_=prefs;preference=UIalpha'><b>[UI_style_alpha]</b></a><br>"
|
||||
dat += "<b>Play admin midis:</b> <a href='?_src_=prefs;preference=hear_midis'><b>[(toggles & SOUND_MIDI) ? "Yes" : "No"]</b></a><br>"
|
||||
dat += "<b>Play lobby music:</b> <a href='?_src_=prefs;preference=lobby_music'><b>[(toggles & SOUND_LOBBY) ? "Yes" : "No"]</b></a><br>"
|
||||
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]</b></a><br>"
|
||||
dat += "<b>Ghost sight:</b> <a href='?_src_=prefs;preference=ghost_sight'><b>[(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]</b></a><br>"
|
||||
dat += "<b>Ghost radio:</b> <a href='?_src_=prefs;preference=ghost_radio'><b>[(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]</b></a><br>"
|
||||
|
||||
if(config.allow_Metadata)
|
||||
dat += "<b>OOC Notes:</b> <a href='?_src_=prefs;preference=metadata;task=input'> Edit </a><br>"
|
||||
|
||||
dat += "<br><b>Custom Loadout:</b> "
|
||||
var/total_cost = 0
|
||||
|
||||
if(isnull(gear) || !islist(gear)) gear = list()
|
||||
|
||||
if(gear && gear.len)
|
||||
dat += "<br>"
|
||||
for(var/gear_name in gear)
|
||||
if(gear_datums[gear_name])
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
total_cost += G.cost
|
||||
dat += "[gear_name] <a href='byond://?src=\ref[user];preference=loadout;task=remove;gear=[gear_name]'>\[remove\]</a><br>"
|
||||
|
||||
dat += "<b>Gender:</b> <a href='?_src_=prefs;preference=gender'><b>[gender == MALE ? "Male" : "Female"]</b></a><br>"
|
||||
dat += "<b>Age:</b> <a href='?_src_=prefs;preference=age;task=input'>[age]</a><br>"
|
||||
dat += "<b>Spawn Point</b>: <a href='byond://?src=\ref[user];preference=spawnpoint;task=input'>[spawnpoint]</a>"
|
||||
|
||||
dat += "<br>"
|
||||
dat += "<b>UI Style:</b> <a href='?_src_=prefs;preference=ui'><b>[UI_style]</b></a><br>"
|
||||
dat += "<b>Custom UI</b>(recommended for White UI):<br>"
|
||||
dat += "-Color: <a href='?_src_=prefs;preference=UIcolor'><b>[UI_style_color]</b></a> <table style='display:inline;' bgcolor='[UI_style_color]'><tr><td>__</td></tr></table><br>"
|
||||
dat += "-Alpha(transparency): <a href='?_src_=prefs;preference=UIalpha'><b>[UI_style_alpha]</b></a><br>"
|
||||
dat += "<b>Play admin midis:</b> <a href='?_src_=prefs;preference=hear_midis'><b>[(toggles & SOUND_MIDI) ? "Yes" : "No"]</b></a><br>"
|
||||
dat += "<b>Play lobby music:</b> <a href='?_src_=prefs;preference=lobby_music'><b>[(toggles & SOUND_LOBBY) ? "Yes" : "No"]</b></a><br>"
|
||||
dat += "<b>Ghost ears:</b> <a href='?_src_=prefs;preference=ghost_ears'><b>[(toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]</b></a><br>"
|
||||
dat += "<b>Ghost sight:</b> <a href='?_src_=prefs;preference=ghost_sight'><b>[(toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]</b></a><br>"
|
||||
dat += "<b>Ghost radio:</b> <a href='?_src_=prefs;preference=ghost_radio'><b>[(toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]</b></a><br>"
|
||||
|
||||
if(config.allow_Metadata)
|
||||
dat += "<b>OOC Notes:</b> <a href='?_src_=prefs;preference=metadata;task=input'> Edit </a><br>"
|
||||
|
||||
dat += "<br><b>Custom Loadout:</b> "
|
||||
var/total_cost = 0
|
||||
|
||||
if(isnull(gear) || !islist(gear)) gear = list()
|
||||
dat += "<b>Used:</b> [total_cost] points."
|
||||
else
|
||||
dat += "none."
|
||||
|
||||
if(total_cost < MAX_GEAR_COST)
|
||||
dat += " <a href='byond://?src=\ref[user];preference=loadout;task=input'>\[add\]</a>"
|
||||
if(gear && gear.len)
|
||||
dat += "<br>"
|
||||
for(var/gear_name in gear)
|
||||
if(gear_datums[gear_name])
|
||||
var/datum/gear/G = gear_datums[gear_name]
|
||||
total_cost += G.cost
|
||||
dat += "[gear_name] <a href='byond://?src=\ref[user];preference=loadout;task=remove;gear=[gear_name]'>\[remove\]</a><br>"
|
||||
dat += " <a href='byond://?src=\ref[user];preference=loadout;task=remove'>\[remove\]</a>"
|
||||
|
||||
dat += "<b>Used:</b> [total_cost] points."
|
||||
else
|
||||
dat += "none."
|
||||
dat += "<br><br><b>Occupation Choices</b><br>"
|
||||
dat += "\t<a href='?_src_=prefs;preference=job;task=menu'><b>Set Preferences</b></a><br>"
|
||||
|
||||
if(total_cost < MAX_GEAR_COST)
|
||||
dat += " <a href='byond://?src=\ref[user];preference=loadout;task=input'>\[add\]</a>"
|
||||
if(gear && gear.len)
|
||||
dat += " <a href='byond://?src=\ref[user];preference=loadout;task=remove'>\[remove\]</a>"
|
||||
dat += "<br><table><tr><td><b>Body</b> "
|
||||
dat += "(<a href='?_src_=prefs;preference=all;task=random'>®</A>)"
|
||||
dat += "<br>"
|
||||
dat += "Species: <a href='byond://?src=\ref[user];preference=species;task=input'>[species]</a><br>"
|
||||
dat += "Secondary Language:<br><a href='byond://?src=\ref[user];preference=language;task=input'>[language]</a><br>"
|
||||
dat += "Blood Type: <a href='byond://?src=\ref[user];preference=b_type;task=input'>[b_type]</a><br>"
|
||||
dat += "Skin Tone: <a href='?_src_=prefs;preference=s_tone;task=input'>[-s_tone + 35]/220<br></a>"
|
||||
//dat += "Skin pattern: <a href='byond://?src=\ref[user];preference=skin_style;task=input'>Adjust</a><br>"
|
||||
dat += "Needs Glasses: <a href='?_src_=prefs;preference=disabilities'><b>[disabilities == 0 ? "No" : "Yes"]</b></a><br>"
|
||||
dat += "Limbs: <a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust</a><br>"
|
||||
dat += "Internal Organs: <a href='byond://?src=\ref[user];preference=organs;task=input'>Adjust</a><br>"
|
||||
|
||||
dat += "<br><br><b>Occupation Choices</b><br>"
|
||||
dat += "\t<a href='?_src_=prefs;preference=job;task=menu'><b>Set Preferences</b></a><br>"
|
||||
|
||||
dat += "<br><table><tr><td><b>Body</b> "
|
||||
dat += "(<a href='?_src_=prefs;preference=all;task=random'>®</A>)"
|
||||
dat += "<br>"
|
||||
dat += "Species: <a href='byond://?src=\ref[user];preference=species;task=input'>[species]</a><br>"
|
||||
dat += "Secondary Language:<br><a href='byond://?src=\ref[user];preference=language;task=input'>[language]</a><br>"
|
||||
dat += "Blood Type: <a href='byond://?src=\ref[user];preference=b_type;task=input'>[b_type]</a><br>"
|
||||
dat += "Skin Tone: <a href='?_src_=prefs;preference=s_tone;task=input'>[-s_tone + 35]/220<br></a>"
|
||||
//dat += "Skin pattern: <a href='byond://?src=\ref[user];preference=skin_style;task=input'>Adjust</a><br>"
|
||||
dat += "Needs Glasses: <a href='?_src_=prefs;preference=disabilities'><b>[disabilities == 0 ? "No" : "Yes"]</b></a><br>"
|
||||
if (species=="Machine") // brain and covering type for shells
|
||||
dat += "Brain Type: <a href='byond://?src=\ref[user];preference=set_machine_brain;task=input'><b>[machine_brain_type]</b></a><br>"
|
||||
dat += "Exterior Coating: <a href='byond://?src=\ref[user];preference=set_machine_covering;task=input'><b>[isnull(covering_type) ? "None" : covering_type]</b></a><br>"
|
||||
dat += "Limbs: <a href='byond://?src=\ref[user];preference=limbs;task=input'>Adjust</a><br>"
|
||||
dat += "Internal Organs: <a href='byond://?src=\ref[user];preference=organs;task=input'>Adjust</a><br>"
|
||||
|
||||
//display limbs below
|
||||
var/ind = 0
|
||||
var/list/organ_names = get_limb_name_to_descriptive_name()
|
||||
var/mechanical_organ_string = (species!="Machine" ? "Mechanical" : "Custom")
|
||||
for(var/name in organ_data)
|
||||
var/status = organ_data[name]
|
||||
var/organ_name = organ_names[name]
|
||||
if(status == "amputated")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
dat += ", "
|
||||
dat += "\tAmputated [organ_name]"
|
||||
else if(status == "mechanical")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
dat += ", "
|
||||
dat += "\tMechanical [organ_name]"
|
||||
else if(status == "assisted")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
dat += ", "
|
||||
switch(organ_name)
|
||||
if("heart")
|
||||
dat += "\tPacemaker-assisted [organ_name]"
|
||||
if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements
|
||||
dat += "\tSurgically altered [organ_name]"
|
||||
if("eyes")
|
||||
dat += "\tRetinal overlayed [organ_name]"
|
||||
else
|
||||
dat += "\tMechanically assisted [organ_name]"
|
||||
var/list/status_as_list=status
|
||||
if (istype(status_as_list)) // we got a robot here
|
||||
++ind
|
||||
if(ind > 1)
|
||||
dat += ", "
|
||||
dat += "\t[mechanical_organ_string] [organ_name]"
|
||||
if (status_as_list[1]!="None")
|
||||
dat += " covered in [lowertext(status_as_list[1])]"
|
||||
if(!ind)
|
||||
dat += "\[...\]<br><br>"
|
||||
else
|
||||
dat += ".<br><br>"
|
||||
|
||||
if(gender == MALE)
|
||||
dat += "Underwear: <a href ='?_src_=prefs;preference=underwear;task=input'><b>[underwear_m[underwear]]</b></a><br>"
|
||||
else
|
||||
dat += "Underwear: <a href ='?_src_=prefs;preference=underwear;task=input'><b>[underwear_f[underwear]]</b></a><br>"
|
||||
|
||||
dat += "Undershirt: <a href='?_src_=prefs;preference=undershirt;task=input'><b>[undershirt_t[undershirt]]</b></a><br>"
|
||||
|
||||
dat += "Backpack Type:<br><a href ='?_src_=prefs;preference=bag;task=input'><b>[backbaglist[backbag]]</b></a><br>"
|
||||
|
||||
dat += "Nanotrasen Relation:<br><a href ='?_src_=prefs;preference=nt_relation;task=input'><b>[nanotrasen_relation]</b></a><br>"
|
||||
|
||||
dat += "</td><td><b>Preview</b><br><img src=previewicon1.png height=64 width=64><img src=previewicon2.png height=64 width=64></td></tr></table>"
|
||||
|
||||
dat += "</td><td width='300px' height='300px'>"
|
||||
|
||||
if(jobban_isbanned(user, "Records"))
|
||||
dat += "<b>You are banned from using character records.</b><br>"
|
||||
else
|
||||
dat += "<b><a href=\"byond://?src=\ref[user];preference=records;record=1\">Character Records</a></b><br>"
|
||||
|
||||
dat += "<b><a href=\"byond://?src=\ref[user];preference=antagoptions;active=0\">Set Antag Options</b></a><br>"
|
||||
|
||||
dat += "\t<a href=\"byond://?src=\ref[user];preference=skills\"><b>Set Skills</b> (<i>[GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])</i></a><br>"
|
||||
|
||||
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=open'><b>Set Flavor Text</b></a><br>"
|
||||
|
||||
dat += "<a href='byond://?src=\ref[user];preference=pAI'><b>pAI Configuration</b></a><br>"
|
||||
dat += "<br>"
|
||||
|
||||
dat += "<b>Character's Signature</b><br>"
|
||||
dat += "<a href='byond://?src=\ref[user];preference=signature;task=input'>Edit</a> <a href='byond://?src=\ref[user];preference=signature;task=font'>Font</a> <a href='byond://?src=\ref[user];preference=signature;task=help'>Help</a><br>"
|
||||
dat += "<font face=\"[signature_font ? signature_font : "Verdanta"]\">[signature]</font><br>"
|
||||
|
||||
|
||||
dat += "<br><b>Hair</b><br>"
|
||||
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair)]'><tr><td>__</td></tr></table></font> "
|
||||
dat += " Style: <a href='?_src_=prefs;preference=h_style;task=input'>[h_style]</a><br>"
|
||||
|
||||
dat += "<br><b>Facial</b><br>"
|
||||
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_facial, 2)][num2hex(g_facial, 2)][num2hex(b_facial, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_facial, 2)][num2hex(g_facial, 2)][num2hex(b_facial)]'><tr><td>__</td></tr></table></font> "
|
||||
dat += " Style: <a href='?_src_=prefs;preference=f_style;task=input'>[f_style]</a><br>"
|
||||
|
||||
dat += "<br><b>Eyes</b><br>"
|
||||
dat += "<a href='?_src_=prefs;preference=eyes;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes)]'><tr><td>__</td></tr></table></font><br>"
|
||||
|
||||
dat += "<br><b>Body Color</b><br>"
|
||||
dat += "<a href='?_src_=prefs;preference=skin;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_skin, 2)][num2hex(g_skin, 2)][num2hex(b_skin, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_skin, 2)][num2hex(g_skin, 2)][num2hex(b_skin)]'><tr><td>__</td></tr></table></font>"
|
||||
|
||||
dat += "<br><br><b>Background Information</b><br>"
|
||||
dat += "<b>Home system</b>: <a href='byond://?src=\ref[user];preference=home_system;task=input'>[home_system]</a><br/>"
|
||||
dat += "<b>Citizenship</b>: <a href='byond://?src=\ref[user];preference=citizenship;task=input'>[citizenship]</a><br/>"
|
||||
dat += "<b>Faction</b>: <a href='byond://?src=\ref[user];preference=faction;task=input'>[faction]</a><br/>"
|
||||
dat += "<b>Religion</b>: <a href='byond://?src=\ref[user];preference=religion;task=input'>[religion]</a><br/>"
|
||||
//display limbs below
|
||||
var/ind = 0
|
||||
for(var/name in organ_data)
|
||||
//world << "[ind] \ [organ_data.len]"
|
||||
var/status = organ_data[name]
|
||||
var/organ_name = null
|
||||
switch(name)
|
||||
if("l_arm")
|
||||
organ_name = "left arm"
|
||||
if("r_arm")
|
||||
organ_name = "right arm"
|
||||
if("l_leg")
|
||||
organ_name = "left leg"
|
||||
if("r_leg")
|
||||
organ_name = "right leg"
|
||||
if("l_foot")
|
||||
organ_name = "left foot"
|
||||
if("r_foot")
|
||||
organ_name = "right foot"
|
||||
if("l_hand")
|
||||
organ_name = "left hand"
|
||||
if("r_hand")
|
||||
organ_name = "right hand"
|
||||
if("heart")
|
||||
organ_name = "heart"
|
||||
if("eyes")
|
||||
organ_name = "eyes"
|
||||
|
||||
if(status == "cyborg")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
dat += ", "
|
||||
dat += "\tMechanical [organ_name] prothesis"
|
||||
else if(status == "amputated")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
dat += ", "
|
||||
dat += "\tAmputated [organ_name]"
|
||||
else if(status == "mechanical")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
dat += ", "
|
||||
dat += "\tMechanical [organ_name]"
|
||||
else if(status == "assisted")
|
||||
++ind
|
||||
if(ind > 1)
|
||||
dat += ", "
|
||||
switch(organ_name)
|
||||
if("heart")
|
||||
dat += "\tPacemaker-assisted [organ_name]"
|
||||
if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements
|
||||
dat += "\tSurgically altered [organ_name]"
|
||||
if("eyes")
|
||||
dat += "\tRetinal overlayed [organ_name]"
|
||||
else
|
||||
dat += "\tMechanically assisted [organ_name]"
|
||||
if(!ind)
|
||||
dat += "\[...\]<br><br>"
|
||||
else
|
||||
dat += "<br><br>"
|
||||
|
||||
if(jobban_isbanned(user, "Syndicate"))
|
||||
dat += "<b>You are banned from antagonist roles.</b>"
|
||||
src.be_special = 0
|
||||
else
|
||||
var/n = 0
|
||||
for (var/i in special_roles)
|
||||
if(special_roles[i]) //if mode is available on the server
|
||||
if(jobban_isbanned(user, i))
|
||||
if(gender == MALE)
|
||||
dat += "Underwear: <a href ='?_src_=prefs;preference=underwear;task=input'><b>[underwear_m[underwear]]</b></a><br>"
|
||||
else
|
||||
dat += "Underwear: <a href ='?_src_=prefs;preference=underwear;task=input'><b>[underwear_f[underwear]]</b></a><br>"
|
||||
|
||||
dat += "Undershirt: <a href='?_src_=prefs;preference=undershirt;task=input'><b>[undershirt_t[undershirt]]</b></a><br>"
|
||||
|
||||
dat += "Backpack Type:<br><a href ='?_src_=prefs;preference=bag;task=input'><b>[backbaglist[backbag]]</b></a><br>"
|
||||
|
||||
dat += "Nanotrasen Relation:<br><a href ='?_src_=prefs;preference=nt_relation;task=input'><b>[nanotrasen_relation]</b></a><br>"
|
||||
|
||||
dat += "</td><td><b>Preview</b><br><img src=previewicon.png height=64 width=64><img src=previewicon2.png height=64 width=64></td></tr></table>"
|
||||
|
||||
dat += "</td><td width='300px' height='300px'>"
|
||||
|
||||
if(jobban_isbanned(user, "Records"))
|
||||
dat += "<b>You are banned from using character records.</b><br>"
|
||||
else
|
||||
dat += "<b><a href=\"byond://?src=\ref[user];preference=records;record=1\">Character Records</a></b><br>"
|
||||
|
||||
dat += "<b><a href=\"byond://?src=\ref[user];preference=antagoptions;active=0\">Set Antag Options</b></a><br>"
|
||||
|
||||
dat += "\t<a href=\"byond://?src=\ref[user];preference=skills\"><b>Set Skills</b> (<i>[GetSkillClass(used_skillpoints)][used_skillpoints > 0 ? " [used_skillpoints]" : "0"])</i></a><br>"
|
||||
|
||||
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=open'><b>Set Flavor Text</b></a><br>"
|
||||
|
||||
dat += "<a href='byond://?src=\ref[user];preference=pAI'><b>pAI Configuration</b></a><br>"
|
||||
dat += "<br>"
|
||||
|
||||
dat += "<b>Character's Signature</b><br>"
|
||||
dat += "<a href='byond://?src=\ref[user];preference=signature;task=input'>Edit</a> <a href='byond://?src=\ref[user];preference=signature;task=font'>Font</a> <a href='byond://?src=\ref[user];preference=signature;task=help'>Help</a><br>"
|
||||
dat += "<font face=\"[signature_font ? signature_font : "Verdanta"]\">[signature]</font><br>"
|
||||
|
||||
|
||||
dat += "<br><b>Hair</b><br>"
|
||||
dat += "<a href='?_src_=prefs;preference=hair;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_hair, 2)][num2hex(g_hair, 2)][num2hex(b_hair)]'><tr><td>__</td></tr></table></font> "
|
||||
dat += " Style: <a href='?_src_=prefs;preference=h_style;task=input'>[h_style]</a><br>"
|
||||
|
||||
dat += "<br><b>Facial</b><br>"
|
||||
dat += "<a href='?_src_=prefs;preference=facial;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_facial, 2)][num2hex(g_facial, 2)][num2hex(b_facial, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_facial, 2)][num2hex(g_facial, 2)][num2hex(b_facial)]'><tr><td>__</td></tr></table></font> "
|
||||
dat += " Style: <a href='?_src_=prefs;preference=f_style;task=input'>[f_style]</a><br>"
|
||||
|
||||
dat += "<br><b>Eyes</b><br>"
|
||||
dat += "<a href='?_src_=prefs;preference=eyes;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_eyes, 2)][num2hex(g_eyes, 2)][num2hex(b_eyes)]'><tr><td>__</td></tr></table></font><br>"
|
||||
|
||||
dat += "<br><b>Body Color</b><br>"
|
||||
dat += "<a href='?_src_=prefs;preference=skin;task=input'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(r_skin, 2)][num2hex(g_skin, 2)][num2hex(b_skin, 2)]'><table style='display:inline;' bgcolor='#[num2hex(r_skin, 2)][num2hex(g_skin, 2)][num2hex(b_skin)]'><tr><td>__</td></tr></table></font>"
|
||||
|
||||
dat += "<br><br><b>Background Information</b><br>"
|
||||
dat += "<b>Home system</b>: <a href='byond://?src=\ref[user];preference=home_system;task=input'>[home_system]</a><br/>"
|
||||
dat += "<b>Citizenship</b>: <a href='byond://?src=\ref[user];preference=citizenship;task=input'>[citizenship]</a><br/>"
|
||||
dat += "<b>Faction</b>: <a href='byond://?src=\ref[user];preference=faction;task=input'>[faction]</a><br/>"
|
||||
dat += "<b>Religion</b>: <a href='byond://?src=\ref[user];preference=religion;task=input'>[religion]</a><br/>"
|
||||
|
||||
dat += "<br><br>"
|
||||
|
||||
if(jobban_isbanned(user, "Syndicate"))
|
||||
dat += "<b>You are banned from antagonist roles.</b>"
|
||||
src.be_special = 0
|
||||
else
|
||||
var/n = 0
|
||||
for (var/i in special_roles)
|
||||
if(special_roles[i]) //if mode is available on the server
|
||||
if(jobban_isbanned(user, i))
|
||||
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
|
||||
else if(i == "pai candidate")
|
||||
if(jobban_isbanned(user, "pAI"))
|
||||
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
|
||||
else if(i == "pai candidate")
|
||||
if(jobban_isbanned(user, "pAI"))
|
||||
dat += "<b>Be [i]:</b> <font color=red><b> \[BANNED]</b></font><br>"
|
||||
else
|
||||
dat += "<b>Be [i]:</b> <a href='?_src_=prefs;preference=be_special;num=[n]'><b>[src.be_special&(1<<n) ? "Yes" : "No"]</b></a><br>"
|
||||
n++
|
||||
dat += "</td></tr></table><hr><center>"
|
||||
else
|
||||
dat += "<b>Be [i]:</b> <a href='?_src_=prefs;preference=be_special;num=[n]'><b>[src.be_special&(1<<n) ? "Yes" : "No"]</b></a><br>"
|
||||
n++
|
||||
dat += "</td></tr></table><hr><center>"
|
||||
|
||||
if(!IsGuestKey(user.key))
|
||||
dat += "<a href='?_src_=prefs;preference=load'>Undo</a> - "
|
||||
dat += "<a href='?_src_=prefs;preference=save'>Save Setup</a> - "
|
||||
if(!IsGuestKey(user.key))
|
||||
dat += "<a href='?_src_=prefs;preference=load'>Undo</a> - "
|
||||
dat += "<a href='?_src_=prefs;preference=save'>Save Setup</a> - "
|
||||
|
||||
dat += "<a href='?_src_=prefs;preference=reset_all'>Reset Setup</a>"
|
||||
dat += "</center></body></html>"
|
||||
dat += "<a href='?_src_=prefs;preference=reset_all'>Reset Setup</a>"
|
||||
dat += "</center></body></html>"
|
||||
|
||||
user << browse(dat, "window=preferences;size=560x736")
|
||||
user << browse(dat, "window=preferences;size=560x736")
|
||||
|
||||
/datum/preferences/proc/SetChoices(mob/user, limit = 16, list/splitJobs = list("Chief Medical Officer"), width = 550, height = 660)
|
||||
if(!job_master)
|
||||
@@ -1100,7 +1112,6 @@ datum/preferences
|
||||
if(new_age)
|
||||
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
|
||||
if("species")
|
||||
config.usealienwhitelist=0 // REMOVE ME
|
||||
|
||||
var/list/new_species = list("Human")
|
||||
var/prev_species = species
|
||||
@@ -1120,8 +1131,41 @@ datum/preferences
|
||||
|
||||
if(prev_species != species)
|
||||
//grab one of the valid hair styles for the newly chosen species
|
||||
h_style = random_hair_style(gender,get_hair_species())
|
||||
f_style = random_facial_hair_style(gender,get_hair_species())
|
||||
var/list/valid_hairstyles = list()
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if( !(species in S.species_allowed))
|
||||
continue
|
||||
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
||||
|
||||
if(valid_hairstyles.len)
|
||||
h_style = pick(valid_hairstyles)
|
||||
else
|
||||
//this shouldn't happen
|
||||
h_style = hair_styles_list["Bald"]
|
||||
|
||||
//grab one of the valid facial hair styles for the newly chosen species
|
||||
var/list/valid_facialhairstyles = list()
|
||||
for(var/facialhairstyle in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if( !(species in S.species_allowed))
|
||||
continue
|
||||
|
||||
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
|
||||
|
||||
if(valid_facialhairstyles.len)
|
||||
f_style = pick(valid_facialhairstyles)
|
||||
else
|
||||
//this shouldn't happen
|
||||
f_style = facial_hair_styles_list["Shaved"]
|
||||
|
||||
//reset hair colour and skin colour
|
||||
r_hair = 0//hex2num(copytext(new_hair, 2, 4))
|
||||
@@ -1164,14 +1208,24 @@ datum/preferences
|
||||
b_type = new_b_type
|
||||
|
||||
if("hair")
|
||||
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as color|null
|
||||
if(new_hair)
|
||||
r_hair = hex2num(copytext(new_hair, 2, 4))
|
||||
g_hair = hex2num(copytext(new_hair, 4, 6))
|
||||
b_hair = hex2num(copytext(new_hair, 6, 8))
|
||||
if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell")
|
||||
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as color|null
|
||||
if(new_hair)
|
||||
r_hair = hex2num(copytext(new_hair, 2, 4))
|
||||
g_hair = hex2num(copytext(new_hair, 4, 6))
|
||||
b_hair = hex2num(copytext(new_hair, 6, 8))
|
||||
else if (species == "Machine")
|
||||
alert("Please select the Body Color instead.")
|
||||
|
||||
if("h_style")
|
||||
var/list/valid_hairstyles = get_valid_hairstyles(gender,get_hair_species())
|
||||
var/list/valid_hairstyles = list()
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
if( !(species in S.species_allowed))
|
||||
continue
|
||||
|
||||
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
||||
|
||||
var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles
|
||||
if(new_h_style)
|
||||
h_style = new_h_style
|
||||
@@ -1184,7 +1238,18 @@ datum/preferences
|
||||
b_facial = hex2num(copytext(new_facial, 6, 8))
|
||||
|
||||
if("f_style")
|
||||
var/list/valid_facialhairstyles = get_valid_facialhairstyles(gender,get_hair_species())
|
||||
var/list/valid_facialhairstyles = list()
|
||||
for(var/facialhairstyle in facial_hair_styles_list)
|
||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||
if(gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if( !(species in S.species_allowed))
|
||||
continue
|
||||
|
||||
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
|
||||
|
||||
var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facialhairstyles
|
||||
if(new_f_style)
|
||||
f_style = new_f_style
|
||||
@@ -1231,6 +1296,10 @@ datum/preferences
|
||||
r_skin = hex2num(copytext(new_skin, 2, 4))
|
||||
g_skin = hex2num(copytext(new_skin, 4, 6))
|
||||
b_skin = hex2num(copytext(new_skin, 6, 8))
|
||||
if(species == "Machine")
|
||||
r_hair = r_skin
|
||||
g_hair = g_skin
|
||||
b_hair = b_skin
|
||||
|
||||
if("ooccolor")
|
||||
var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference") as color|null
|
||||
@@ -1256,19 +1325,57 @@ datum/preferences
|
||||
else
|
||||
user << browse(null, "window=disabil")
|
||||
|
||||
if("set_machine_brain") // shell customization junk
|
||||
var/new_brain = input(user, "Choose your brain.", "Character Preference") as null|anything in list("MMI", "Posibrain") // not differentiating brain species at the moment
|
||||
if(new_brain)
|
||||
machine_brain_type=new_brain
|
||||
|
||||
if("set_machine_covering")
|
||||
var/new_coating = input(user, "Choose your exterior coating.", "Character Preference") as null|anything in get_limb_covering_names()
|
||||
if(new_coating)
|
||||
covering_type=(new_coating!="None" ? new_coating : null)
|
||||
|
||||
if("limbs")
|
||||
customize_limbs(user,species!="Machine")
|
||||
var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
|
||||
if(!limb_name) return
|
||||
|
||||
var/limb = null
|
||||
var/second_limb = null // if you try to change the arm, the hand should also change
|
||||
var/third_limb = null // if you try to unchange the hand, the arm should also change
|
||||
switch(limb_name)
|
||||
if("Left Leg")
|
||||
limb = "l_leg"
|
||||
second_limb = "l_foot"
|
||||
if("Right Leg")
|
||||
limb = "r_leg"
|
||||
second_limb = "r_foot"
|
||||
if("Left Arm")
|
||||
limb = "l_arm"
|
||||
second_limb = "l_hand"
|
||||
if("Right Arm")
|
||||
limb = "r_arm"
|
||||
second_limb = "r_hand"
|
||||
if("Left Foot")
|
||||
limb = "l_foot"
|
||||
third_limb = "l_leg"
|
||||
if("Right Foot")
|
||||
limb = "r_foot"
|
||||
third_limb = "r_leg"
|
||||
if("Left Hand")
|
||||
limb = "l_hand"
|
||||
third_limb = "l_arm"
|
||||
if("Right Hand")
|
||||
limb = "r_hand"
|
||||
third_limb = "r_arm"
|
||||
|
||||
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in list("Normal","Amputated","Prothesis")
|
||||
if(!new_state) return
|
||||
|
||||
switch(new_state)
|
||||
if("Normal")
|
||||
organ_data[limb] = null
|
||||
if(third_limb)
|
||||
organ_data[third_limb] = null
|
||||
if("Amputated")
|
||||
organ_data[limb] = "amputated"
|
||||
if(second_limb)
|
||||
organ_data[second_limb] = "amputated"
|
||||
if("Prothesis")
|
||||
organ_data[limb] = "cyborg"
|
||||
if(second_limb)
|
||||
organ_data[second_limb] = "cyborg"
|
||||
if(third_limb && organ_data[third_limb] == "amputated")
|
||||
organ_data[third_limb] = null
|
||||
if("organs")
|
||||
var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Heart", "Eyes")
|
||||
if(!organ_name) return
|
||||
@@ -1487,43 +1594,29 @@ datum/preferences
|
||||
character.h_style = h_style
|
||||
character.f_style = f_style
|
||||
|
||||
|
||||
character.skills = skills
|
||||
character.used_skillpoints = used_skillpoints
|
||||
|
||||
var/list/covering_name_to_type = get_limb_covering_list()
|
||||
// Destroy/cyborgize organs
|
||||
|
||||
if (species=="Machine")
|
||||
var/datum/organ/internal/brain/robot/brain_datum = character.get_organ("brain")
|
||||
if (brain_datum) // sanity check
|
||||
brain_datum.machine_brain_type=machine_brain_type // set the brain type
|
||||
for (var/datum/organ/external/organ in character.organs) // provide default covering for shells
|
||||
if (organ) // gotta make sure we're getting an actual organ here
|
||||
if (covering_type)
|
||||
var/covering_path = covering_name_to_type[covering_type]
|
||||
organ.covering = new covering_path(organ,rgb(r_skin,g_skin,b_skin))
|
||||
organ.covering.limb_datum=organ
|
||||
|
||||
// Destroy or cyborgize organs
|
||||
for(var/name in organ_data)
|
||||
var/datum/organ/external/O = character.organs_by_name[name]
|
||||
var/datum/organ/internal/I = character.internal_organs_by_name[name]
|
||||
var/status = organ_data[name]
|
||||
|
||||
if(status == "amputated")
|
||||
O.amputated = 1
|
||||
O.status |= ORGAN_DESTROYED
|
||||
O.destspawn = 1
|
||||
if(status == "cyborg")
|
||||
O.status |= ORGAN_ROBOT
|
||||
if(status == "assisted")
|
||||
I.mechassist()
|
||||
if(status == "mechanical")
|
||||
else if(status == "mechanical")
|
||||
I.mechanize()
|
||||
var/list/status_as_list=status
|
||||
if (istype(status_as_list)) // we got a robot here
|
||||
O.status |= ORGAN_ROBOT
|
||||
O.covering = null // wipe any old covering we might have
|
||||
if (status_as_list[1]!="None")
|
||||
var/covering_path = covering_name_to_type[status_as_list[1]]
|
||||
O.covering = new covering_path(O,status_as_list[2])
|
||||
O.covering.limb_datum=O
|
||||
|
||||
else continue
|
||||
|
||||
if(underwear > underwear_m.len || underwear < 1)
|
||||
underwear = 0 //I'm sure this is 100% unnecessary, but I'm paranoid... sue me. //HAH NOW NO MORE MAGIC CLONING UNDIES
|
||||
@@ -1564,104 +1657,5 @@ datum/preferences
|
||||
dat += "</center></tt>"
|
||||
user << browse(dat, "window=saves;size=300x390")
|
||||
|
||||
|
||||
/datum/preferences/proc/close_load_dialog(mob/user)
|
||||
user << browse(null, "window=saves")
|
||||
|
||||
|
||||
/datum/preferences/proc/get_hair_species()
|
||||
// this is incredibly snowflakey but I don't see an alternative
|
||||
if (species!="Machine")
|
||||
return species
|
||||
var/head_coat=covering_type // we get the base coating
|
||||
if (organ_data["Head"]) // if we're customizing the head we should get their coating
|
||||
head_coat=organ_data["Head"][0]
|
||||
if (!head_coat) // no coating?
|
||||
return
|
||||
var/list/refs=get_limb_covering_references()
|
||||
for(var/skin_type in refs)
|
||||
var/datum/synthetic_limb_cover/temp=refs[skin_type]
|
||||
if (temp.icon_key_type==head_coat)
|
||||
return temp.hair_species
|
||||
|
||||
|
||||
/datum/preferences/proc/custom_robot_limb(mob/user,)
|
||||
var/covering_name = input(user, "What kind of covering do you want?") as null|anything in get_limb_covering_names()
|
||||
if (!covering_name)
|
||||
return
|
||||
if (covering_name=="None") // don't want no colour
|
||||
return list(covering_name,rgb(128,128,128))
|
||||
var/new_colour = input(user, "Pick the colour for your limb:", "Character Preference") as color|null
|
||||
if(!new_colour)
|
||||
return
|
||||
return list(covering_name,new_colour)
|
||||
|
||||
|
||||
var/list/limb_name_to_descriptive_names
|
||||
/datum/preferences/proc/get_limb_name_to_descriptive_name()
|
||||
if (isnull(limb_name_to_descriptive_names))
|
||||
limb_name_to_descriptive_names=list()
|
||||
for(var/organ_type in typesof(/datum/organ/external)-/datum/organ/external)
|
||||
var/datum/organ/external/temp = new organ_type()
|
||||
limb_name_to_descriptive_names[temp.name]=temp.display_name
|
||||
del(temp)
|
||||
return limb_name_to_descriptive_names
|
||||
|
||||
|
||||
var/list/limb_connection_data
|
||||
/datum/preferences/proc/get_limb_connection_data()
|
||||
if (isnull(limb_connection_data))
|
||||
limb_connection_data = list()
|
||||
limb_connection_data["Left Leg"]=list("l_leg","l_foot",null)
|
||||
limb_connection_data["Right Leg"]=list("r_leg","r_foot",null)
|
||||
limb_connection_data["Left Arm"]=list("l_arm","l_hand",null)
|
||||
limb_connection_data["Right Arm"]=list("r_arm","r_hand",null)
|
||||
limb_connection_data["Left Foot"]=list("l_foot",null,"l_leg")
|
||||
limb_connection_data["Right Foot"]=list("r_foot",null,"r_leg")
|
||||
limb_connection_data["Left Hand"]=list("l_hand",null,"l_arm")
|
||||
limb_connection_data["Right Hand"]=list("r_hand",null,"r_arm")
|
||||
limb_connection_data["Chest"]=list("chest",null,null)
|
||||
limb_connection_data["Groin"]=list("groin",null,null)
|
||||
limb_connection_data["Head"]=list("head",null,null)
|
||||
return limb_connection_data
|
||||
|
||||
|
||||
/datum/preferences/proc/pick_organ_to_customize(mob/user,var/is_organic_species)
|
||||
var/list/valid_targets = list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
|
||||
if (!is_organic_species)
|
||||
valid_targets.Add(list("Head","Chest","Groin"))
|
||||
var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_targets
|
||||
if(!limb_name) // you have picked nothing
|
||||
return
|
||||
var/list/limb_info=get_limb_connection_data()
|
||||
return limb_info[limb_name]
|
||||
|
||||
|
||||
/datum/preferences/proc/customize_limbs(mob/user,var/is_organic_species)
|
||||
var/list/limb_info = pick_organ_to_customize(user,is_organic_species)
|
||||
if (!limb_info)
|
||||
return
|
||||
var/limb=limb_info[1]
|
||||
var/limb_child=limb_info[2]
|
||||
var/limb_parent=limb_info[3]
|
||||
var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in (is_organic_species ? list("Normal","Amputated","Prosthesis") : list("Normal","Custom"))
|
||||
if(!new_state)
|
||||
return // cancel
|
||||
switch(new_state)
|
||||
if("Normal")
|
||||
organ_data-= limb
|
||||
if(!isnull(limb_parent))
|
||||
organ_data-=limb_parent
|
||||
if("Amputated")
|
||||
organ_data[limb] = "amputated"
|
||||
if(!isnull(limb_child))
|
||||
organ_data[limb_child] = "amputated"
|
||||
if("Prosthesis")
|
||||
var/list/custom = custom_robot_limb(user)
|
||||
organ_data[limb] = custom
|
||||
if(!isnull(limb_child))
|
||||
organ_data[limb_child] = custom
|
||||
if(!isnull(limb_parent) && organ_data[limb_parent] == "amputated")
|
||||
organ_data-=limb_parent
|
||||
if("Custom")
|
||||
organ_data[limb] = custom_robot_limb(user) // robots have no dependencies
|
||||
@@ -1,5 +1,5 @@
|
||||
#define SAVEFILE_VERSION_MIN 8
|
||||
#define SAVEFILE_VERSION_MAX 12
|
||||
#define SAVEFILE_VERSION_MAX 11
|
||||
|
||||
//handles converting savefiles to new formats
|
||||
//MAKE SURE YOU KEEP THIS UP TO DATE!
|
||||
@@ -19,13 +19,7 @@
|
||||
fdel(delpath)
|
||||
break
|
||||
return 0
|
||||
if(savefile_version < 12)
|
||||
if (species=="Machine") // give IPC's posibrains and paint by default
|
||||
machine_brain_type="Posibrain"
|
||||
covering_type="Paint"
|
||||
for(var/name in organ_data)
|
||||
if (organ_data[name]=="Cyborg")
|
||||
organ_data[name]=list("None",rgb(128,128,128)) // standard robo limbs
|
||||
|
||||
if(savefile_version == SAVEFILE_VERSION_MAX) //update successful.
|
||||
save_preferences()
|
||||
save_character()
|
||||
@@ -179,10 +173,6 @@
|
||||
S["citizenship"] >> citizenship
|
||||
S["faction"] >> faction
|
||||
S["religion"] >> religion
|
||||
|
||||
//Robot
|
||||
S["machine_brain_type"] >> machine_brain_type
|
||||
S["covering_type"] >> covering_type
|
||||
|
||||
S["nanotrasen_relation"] >> nanotrasen_relation
|
||||
//S["skin_style"] >> skin_style
|
||||
@@ -288,8 +278,6 @@
|
||||
S["backbag"] << backbag
|
||||
S["b_type"] << b_type
|
||||
S["spawnpoint"] << spawnpoint
|
||||
S["machine_brain_type"] << machine_brain_type
|
||||
S["covering_type"] << covering_type
|
||||
|
||||
//Jobs
|
||||
S["alternate_option"] << alternate_option
|
||||
@@ -315,26 +303,26 @@
|
||||
S["flavor_texts_feet"] << flavor_texts["feet"]
|
||||
|
||||
//Miscellaneous
|
||||
S["med_record"] << med_record
|
||||
S["sec_record"] << sec_record
|
||||
S["gen_record"] << gen_record
|
||||
S["med_record"] << med_record
|
||||
S["sec_record"] << sec_record
|
||||
S["gen_record"] << gen_record
|
||||
S["player_alt_titles"] << player_alt_titles
|
||||
S["be_special"] << be_special
|
||||
S["disabilities"] << disabilities
|
||||
S["used_skillpoints"] << used_skillpoints
|
||||
S["skills"] << skills
|
||||
S["skill_specialization"] << skill_specialization
|
||||
S["organ_data"] << organ_data
|
||||
S["gear"] << gear
|
||||
S["home_system"] << home_system
|
||||
S["citizenship"] << citizenship
|
||||
S["faction"] << faction
|
||||
S["religion"] << religion
|
||||
S["be_special"] << be_special
|
||||
S["disabilities"] << disabilities
|
||||
S["used_skillpoints"] << used_skillpoints
|
||||
S["skills"] << skills
|
||||
S["skill_specialization"] << skill_specialization
|
||||
S["organ_data"] << organ_data
|
||||
S["gear"] << gear
|
||||
S["home_system"] << home_system
|
||||
S["citizenship"] << citizenship
|
||||
S["faction"] << faction
|
||||
S["religion"] << religion
|
||||
|
||||
S["nanotrasen_relation"] << nanotrasen_relation
|
||||
S["nanotrasen_relation"] << nanotrasen_relation
|
||||
//S["skin_style"] << skin_style
|
||||
|
||||
S["uplinklocation"] << uplinklocation
|
||||
S["uplinklocation"] << uplinklocation
|
||||
|
||||
S["UI_style_color"] << UI_style_color
|
||||
S["UI_style_alpha"] << UI_style_alpha
|
||||
|
||||
@@ -20,8 +20,6 @@
|
||||
var/mob/living/carbon/brain/brainmob = null//The current occupant.
|
||||
var/mob/living/silicon/robot = null//Appears unused.
|
||||
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
|
||||
|
||||
var/machine_brain_type="MMI"
|
||||
|
||||
attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
brainmob.timeofhostdeath = H.timeofdeath
|
||||
if(H.mind)
|
||||
H.mind.transfer_to(brainmob)
|
||||
|
||||
brainmob << "\blue You feel slightly disoriented. That's normal when you're just a brain."
|
||||
callHook("debrain", list(brainmob))
|
||||
|
||||
@@ -52,24 +53,20 @@
|
||||
usr << "You can feel the small spark of life still left in this one."
|
||||
else
|
||||
usr << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.."
|
||||
|
||||
|
||||
|
||||
/obj/item/organ/brain/removed(var/mob/living/target,var/mob/living/user)
|
||||
|
||||
..()
|
||||
|
||||
var/mob/living/simple_animal/borer/borer = target.has_brain_worms()
|
||||
|
||||
if(borer)
|
||||
borer.detatch() //Should remove borer if the brain is removed - RR
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/obj/item/organ/brain/B = src
|
||||
if(istype(B) && istype(H))
|
||||
B.transfer_identity(target)
|
||||
|
||||
/obj/item/organ/brain/exposed_to_the_world()
|
||||
var/datum/organ/internal/brain/robot/robotic_brain=organ_data
|
||||
if (istype(robotic_brain))
|
||||
var/new_mmi=robotic_brain.create_robot_brain_replacement(brainmob,src.loc)
|
||||
del(src)
|
||||
return new_mmi
|
||||
|
||||
/obj/item/organ/brain/replaced(var/mob/living/target)
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
icon_state = "posibrain"
|
||||
w_class = 3
|
||||
origin_tech = "engineering=4;materials=4;bluespace=2;programming=4"
|
||||
machine_brain_type="Posibrain"
|
||||
|
||||
construction_cost = list("metal"=500,"glass"=500,"silver"=200,"gold"=200,"plasma"=100,"diamond"=10)
|
||||
construction_time = 75
|
||||
|
||||
@@ -1659,82 +1659,3 @@
|
||||
if(eyes && istype(eyes) && !eyes.status & ORGAN_CUT_AWAY)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/mob/living/carbon/human/proc/hair_species_name()
|
||||
var/datum/organ/external/head/head_organ = get_organ("head")
|
||||
if (head_organ.covering)
|
||||
return head_organ.covering.hair_species
|
||||
return species.name
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/valid_hairstyles_for_this_mob()
|
||||
return get_valid_hairstyles(gender, hair_species_name())
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/valid_facialhairstyles_for_this_mob()
|
||||
return get_valid_facialhairstyles(gender, hair_species_name())
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/should_we_show_hair()
|
||||
var/datum/organ/external/head/head_organ = get_organ("head")
|
||||
if(!head_organ || (head_organ.status & ORGAN_DESTROYED))
|
||||
return
|
||||
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
|
||||
return
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/proc/validate_hair()
|
||||
var/list/hair=valid_hairstyles_for_this_mob()
|
||||
if (!(h_style in hair))
|
||||
h_style=null
|
||||
var/list/face=valid_facialhairstyles_for_this_mob()
|
||||
if (!(f_style in face))
|
||||
f_style=null
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/hair_icon()
|
||||
if (h_style)
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
var/icon/hair = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
if(hair_style.do_colouration)
|
||||
hair.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
|
||||
return hair
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/facial_hair_icon()
|
||||
if (f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
if(facial_hair_style.do_colouration)
|
||||
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
|
||||
return facial_s
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_eye_icon_state()
|
||||
var/datum/organ/external/head/head_organ = get_organ("head")
|
||||
if (head_organ.covering)
|
||||
return head_organ.covering.eyes_state
|
||||
return species.eyes
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/eye_icon()
|
||||
var/icon/result_icon = new/icon('icons/mob/human_face.dmi', get_eye_icon_state())
|
||||
result_icon.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
||||
return result_icon
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/tail_icon_state()
|
||||
var/datum/organ/external/groin/groin_organ = get_organ("groin")
|
||||
if (groin_organ.covering)
|
||||
return list(groin_organ.covering.tail,groin_organ.covering.colour)
|
||||
if (species.tail)
|
||||
return list(species.tail,rgb(r_skin, g_skin, b_skin))
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/tail_icon()
|
||||
var/list/tail_info = tail_icon_state()
|
||||
if(!isnull(tail_info))
|
||||
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
|
||||
var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[tail_info[1]]_s")
|
||||
tail_s.Blend(tail_info[2], ICON_ADD)
|
||||
return tail_s
|
||||
@@ -30,5 +30,5 @@
|
||||
..(new_loc, "Diona")
|
||||
|
||||
/mob/living/carbon/human/machine/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
h_style = "blue IPC screen"
|
||||
..(new_loc, "Machine")
|
||||
@@ -201,131 +201,10 @@
|
||||
// Grabs the window recieved when you click-drag someone onto you.
|
||||
/datum/species/proc/get_inventory_dialogue(var/mob/living/carbon/human/H)
|
||||
return
|
||||
|
||||
|
||||
//Used by xenos understanding larvae and dionaea understanding nymphs.
|
||||
/datum/species/proc/can_understand(var/mob/other)
|
||||
return
|
||||
|
||||
|
||||
/datum/species/proc/blend_preview_icon(var/icon/main_icon,var/datum/preferences/preferences,var/paint_colour)
|
||||
if(paint_colour)
|
||||
main_icon.Blend(paint_colour, ICON_ADD)
|
||||
return
|
||||
if(flags & HAS_SKIN_COLOR)
|
||||
main_icon.Blend(rgb(preferences.r_skin, preferences.g_skin, preferences.b_skin), ICON_ADD)
|
||||
return
|
||||
if(flags & HAS_SKIN_TONE) // Skin tone
|
||||
if (preferences.s_tone >= 0)
|
||||
main_icon.Blend(rgb(preferences.s_tone, preferences.s_tone, preferences.s_tone), ICON_ADD)
|
||||
else
|
||||
main_icon.Blend(rgb(-preferences.s_tone, -preferences.s_tone, -preferences.s_tone), ICON_SUBTRACT)
|
||||
|
||||
|
||||
/datum/species/proc/get_organ_preview_icon(var/name, var/robot, var/gendered, var/gender_string, var/datum/preferences/preferences, var/datum/synthetic_limb_cover/covering, var/paint_colour)
|
||||
var/icon_name = icobase
|
||||
if (robot)
|
||||
icon_name = (istype(covering)) ? covering.main_icon : 'icons/mob/human_races/robotic.dmi'
|
||||
var/state_name = name
|
||||
if (gendered)
|
||||
state_name+="_[gender_string]"
|
||||
var/icon/result = new /icon(icon_name,state_name)
|
||||
blend_preview_icon(result,preferences,paint_colour)
|
||||
return result
|
||||
|
||||
|
||||
/datum/species/proc/get_is_preview_organ_robotic(var/name,var/datum/preferences/preferences)
|
||||
if (flags & IS_SYNTHETIC)
|
||||
return TRUE
|
||||
if (name in preferences.organ_data)
|
||||
var/list/organ_robotic_info=preferences.organ_data[name]
|
||||
if (istype(organ_robotic_info))
|
||||
return TRUE
|
||||
|
||||
/datum/species/proc/get_preview_organ_covering(var/name,var/datum/preferences/preferences)
|
||||
if (name in preferences.organ_data)
|
||||
var/list/organ_robotic_info=preferences.organ_data[name]
|
||||
if (istype(organ_robotic_info))
|
||||
return organ_robotic_info
|
||||
if (preferences.species=="Machine")
|
||||
if (preferences.covering_type)
|
||||
return list(preferences.covering_type,rgb(preferences.r_skin,preferences.g_skin,preferences.b_skin))
|
||||
|
||||
|
||||
/datum/species/proc/get_tail_preview_icon(var/list/preview_coverings,var/datum/preferences/preferences)
|
||||
var/tail_state=null
|
||||
if (!(isnull(preview_coverings["groin"])))
|
||||
var/datum/synthetic_limb_cover/covering=preview_coverings["groin"]
|
||||
tail_state=covering.tail
|
||||
if(tail)
|
||||
tail_state="[tail]_s"
|
||||
if(tail_state)
|
||||
var/icon/result = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = tail_state)
|
||||
result.Blend(rgb(preferences.r_hair,preferences.g_hair,preferences.b_hair),ICON_ADD)
|
||||
return result
|
||||
|
||||
/datum/species/proc/get_eyes_preview_icon(var/list/preview_coverings,var/datum/preferences/preferences)
|
||||
var/eye_state=null
|
||||
if (!(isnull(preview_coverings["head"])))
|
||||
var/datum/synthetic_limb_cover/covering=preview_coverings["head"]
|
||||
eye_state=covering.eyes_state
|
||||
else
|
||||
eye_state=eyes
|
||||
var/icon/result = new/icon('icons/mob/human_face.dmi',eye_state)
|
||||
result.Blend(rgb(preferences.r_eyes,preferences.g_eyes,preferences.b_eyes),ICON_ADD)
|
||||
return result
|
||||
|
||||
/* This function takes a preferences object and generates a complete body and hair icon for that set of preferences. It's needlessly complicated
|
||||
and duplicates a lot of what's going on in update_icons. The two systems should be combined somehow, possibly by using a 'visual identity' object
|
||||
that could be created from either a living human or a preferences object and then passing that to a single render function, but I'll leave that
|
||||
exercise for another day.
|
||||
|
||||
See code\modules\mob\new_player\preferences_setup.dm for where it's used.
|
||||
- jack_fractal*/
|
||||
/datum/species/proc/create_body_preview_icon(var/datum/preferences/preferences)
|
||||
var/gender_string = (preferences.gender==FEMALE) ? "f" : "m"
|
||||
var/icon/preview_icon = new/icon('icons/mob/human_face.dmi', "blank_eyes") // this is just an empty icon
|
||||
var/list/external_organs = list("torso","groin","head","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","l_arm","l_hand")
|
||||
var/list/coverings=list()
|
||||
var/list/gendered_organs = list("torso","groin","head")
|
||||
var/list/limb_coverings = get_limb_covering_references()
|
||||
var/list/limb_coverings_names = get_limb_covering_list()
|
||||
for (var/name in external_organs)
|
||||
if(preferences.organ_data[name] == "amputated") // amputated organs don't show up
|
||||
continue
|
||||
var/robotic = get_is_preview_organ_robotic(name,preferences)
|
||||
var/datum/synthetic_limb_cover/covering = null
|
||||
var/paint_colour=null
|
||||
if (robotic)
|
||||
var/list/covering_as_list=get_preview_organ_covering(name, preferences)
|
||||
if (istype(covering_as_list))
|
||||
covering=limb_coverings[limb_coverings_names[covering_as_list[1]]]
|
||||
paint_colour=covering_as_list[2]
|
||||
coverings[name]=covering
|
||||
var/icon/organ_icon = get_organ_preview_icon(name, robotic, (name in gendered_organs), gender_string, preferences, covering, paint_colour)
|
||||
preview_icon.Blend(organ_icon, ICON_OVERLAY)
|
||||
del(organ_icon)
|
||||
var/icon/tail_icon = get_tail_preview_icon(coverings,preferences) // Tail
|
||||
if(tail_icon)
|
||||
preview_icon.Blend(tail_icon, ICON_OVERLAY)
|
||||
del(tail_icon)
|
||||
var/icon/eye_icon = get_eyes_preview_icon(coverings,preferences)
|
||||
if(eye_icon)
|
||||
preview_icon.Blend(eye_icon, ICON_OVERLAY)
|
||||
del(eye_icon)
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[preferences.h_style]
|
||||
if(hair_style)
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
hair_s.Blend(rgb(preferences.r_hair, preferences.g_hair, preferences.b_hair), ICON_ADD)
|
||||
preview_icon.Blend(hair_s, ICON_OVERLAY)
|
||||
del(hair_s)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[preferences.f_style]
|
||||
if(facial_hair_style)
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
facial_s.Blend(rgb(preferences.r_facial, preferences.g_facial, preferences.b_facial), ICON_ADD)
|
||||
preview_icon.Blend(facial_s, ICON_OVERLAY)
|
||||
del(facial_s)
|
||||
return preview_icon
|
||||
|
||||
/datum/species/human
|
||||
name = "Human"
|
||||
@@ -595,16 +474,9 @@ See code\modules\mob\new_player\preferences_setup.dm for where it's used.
|
||||
|
||||
has_organ = list(
|
||||
"heart" = /datum/organ/internal/heart,
|
||||
"brain" = /datum/organ/internal/brain/robot,
|
||||
"brain" = /datum/organ/internal/brain,
|
||||
)
|
||||
/datum/species/machine/create_organs(var/mob/living/carbon/human/H)
|
||||
..()
|
||||
var/datum/organ/internal/brain/robot/brain_datum = H.internal_organs_by_name["brain"] // handle weird robot brains
|
||||
if (istype(brain_datum))
|
||||
if (isnull(brain_datum.machine_brain_type))
|
||||
brain_datum.machine_brain_type="Posibrain"
|
||||
|
||||
|
||||
|
||||
/datum/species/bug
|
||||
name = "Vaurca"
|
||||
name_plural = "varucae"
|
||||
|
||||
@@ -234,58 +234,21 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
overlays_standing[DAMAGE_LAYER] = standing_image
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_skin_tone_key()
|
||||
if (species.flags & HAS_SKIN_COLOR)
|
||||
return "[r_skin],[g_skin],[b_skin]"
|
||||
if(species.flags & HAS_SKIN_TONE)
|
||||
return "[s_tone]"
|
||||
return ""
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_icon_key(var/list/mutations=list())
|
||||
if (!mutations)
|
||||
mutations=get_visible_mutations()
|
||||
var/icon_key = "[species.race_key][(gender == FEMALE ? "f" : "m")][get_skin_tone_key()]"
|
||||
for(var/datum/organ/external/part in organs) // get the part icon keys
|
||||
icon_key = "[icon_key][part.get_icon_key()]"
|
||||
return "[icon_key][mutations["husk"]][mutations["fat"]][mutations["hulk"]][mutations["skeleton"]]"
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/get_visible_mutations()
|
||||
return list("husk"=(HUSK in src.mutations),
|
||||
"hulk"=(HULK in src.mutations),
|
||||
"skeleton"=(SKELETON in src.mutations),
|
||||
"fat"=(FAT in src.mutations))
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/skin_colour_info(var/list/mutations=list())
|
||||
if (!mutations)
|
||||
mutations=get_visible_mutations()
|
||||
var/icon_blend=ICON_ADD
|
||||
var/colour=rgb(127,127,127)
|
||||
var/good=FALSE
|
||||
if (species.flags & HAS_SKIN_COLOR)
|
||||
colour=rgb(r_skin,g_skin,b_skin)
|
||||
good=TRUE
|
||||
if(!mutations["husk"] && !mutations["hulk"]) // if we have regular skin
|
||||
if(species.flags & HAS_SKIN_TONE)
|
||||
icon_blend=(s_tone >= 0 ? ICON_ADD : ICON_SUBTRACT)
|
||||
var/res=(s_tone >= 0 ? s_tone : -s_tone)
|
||||
colour=rgb(res,res,res)
|
||||
good=TRUE
|
||||
return list("rgb"=colour,"mode"=icon_blend,"blend"=good)
|
||||
|
||||
|
||||
//BASE MOB SPRITE
|
||||
/mob/living/carbon/human/proc/update_body(var/update_icons=1)
|
||||
|
||||
var/husk_color_mod = rgb(96,88,80)
|
||||
var/hulk_color_mod = rgb(48,224,40)
|
||||
var/necrosis_color_mod = rgb(10,50,0)
|
||||
|
||||
var/list/mutations = get_visible_mutations()
|
||||
var/husk = (HUSK in src.mutations)
|
||||
var/fat = (FAT in src.mutations)
|
||||
var/hulk = (HULK in src.mutations)
|
||||
var/skeleton = (SKELETON in src.mutations)
|
||||
|
||||
var/g = (gender == FEMALE ? "f" : "m")
|
||||
var/has_head = 0
|
||||
|
||||
//CACHING: Generate an index key from visible bodyparts.
|
||||
//0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
|
||||
@@ -296,9 +259,22 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
|
||||
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
|
||||
|
||||
var/icon_key = "[species.race_key][g][s_tone]"
|
||||
for(var/datum/organ/external/part in organs)
|
||||
|
||||
// GENERATE THE ICON KEY
|
||||
var/icon_key = get_icon_key(mutations)
|
||||
if(istype(part,/datum/organ/external/head) && !(part.status & ORGAN_DESTROYED))
|
||||
has_head = 1
|
||||
|
||||
if(part.status & ORGAN_DESTROYED)
|
||||
icon_key = "[icon_key]0"
|
||||
else if(part.status & ORGAN_ROBOT)
|
||||
icon_key = "[icon_key]2"
|
||||
else if(part.status & ORGAN_DEAD)
|
||||
icon_key = "[icon_key]3"
|
||||
else
|
||||
icon_key = "[icon_key]1"
|
||||
|
||||
icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0][s_tone]"
|
||||
|
||||
var/icon/base_icon
|
||||
if(human_icon_cache[icon_key])
|
||||
@@ -311,18 +287,14 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
|
||||
//BEGIN CACHED ICON GENERATION.
|
||||
|
||||
// Why don't we just make mutations["skeleton"]s/shadows/golems a species? ~Z
|
||||
var/race_icon = (mutations["skeleton"] ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase)
|
||||
var/deform_icon = (mutations["skeleton"] ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase)
|
||||
// Why don't we just make skeletons/shadows/golems a species? ~Z
|
||||
var/race_icon = (skeleton ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase)
|
||||
var/deform_icon = (skeleton ? 'icons/mob/human_races/r_skeleton.dmi' : species.icobase)
|
||||
|
||||
var/list/skin_info = skin_colour_info(mutations) // get the skin tone info
|
||||
|
||||
//Robotic limbs are handled in get_icon() so all we worry about are missing or dead limbs.
|
||||
//No icon stored, so we need to start with a basic one.
|
||||
var/datum/organ/external/chest = get_organ("chest")
|
||||
base_icon = chest.get_icon(race_icon,deform_icon,skin_info)
|
||||
|
||||
|
||||
base_icon = chest.get_icon(race_icon,deform_icon,g)
|
||||
|
||||
if(chest.status & ORGAN_DEAD)
|
||||
base_icon.ColorTone(necrosis_color_mod)
|
||||
@@ -335,7 +307,10 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if(part.status & ORGAN_DESTROYED)
|
||||
continue
|
||||
|
||||
temp = part.get_icon(race_icon,deform_icon,skin_info) // synthetics are handled here
|
||||
if (istype(part, /datum/organ/external/groin) || istype(part, /datum/organ/external/head))
|
||||
temp = part.get_icon(race_icon,deform_icon,g)
|
||||
else
|
||||
temp = part.get_icon(race_icon,deform_icon)
|
||||
|
||||
if(part.status & ORGAN_DEAD)
|
||||
temp.ColorTone(necrosis_color_mod)
|
||||
@@ -370,33 +345,48 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
|
||||
base_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
if(!mutations["skeleton"])
|
||||
if(mutations["husk"])
|
||||
if(!skeleton)
|
||||
if(husk)
|
||||
base_icon.ColorTone(husk_color_mod)
|
||||
else if(mutations["hulk"])
|
||||
else if(hulk)
|
||||
var/list/tone = ReadRGB(hulk_color_mod)
|
||||
base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3]))
|
||||
|
||||
//Handle mutations["husk"] overlay.
|
||||
if(mutations["husk"])
|
||||
//Handle husk overlay.
|
||||
if(husk)
|
||||
var/icon/mask = new(base_icon)
|
||||
var/icon/husk_over = new(race_icon,"overlay_husk")
|
||||
mask.MapColors(0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,0)
|
||||
husk_over.Blend(mask, ICON_ADD)
|
||||
base_icon.Blend(husk_over, ICON_OVERLAY)
|
||||
|
||||
|
||||
//Skin tone.
|
||||
if(!husk && !hulk)
|
||||
if(species.flags & HAS_SKIN_TONE)
|
||||
if(s_tone >= 0)
|
||||
base_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
else
|
||||
base_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
|
||||
human_icon_cache[icon_key] = base_icon
|
||||
|
||||
//log_debug("Generated new cached mob icon ([icon_key] \icon[human_icon_cache[icon_key]]) for [src]. [human_icon_cache.len] cached mob icons.")
|
||||
|
||||
//END CACHED ICON GENERATION.
|
||||
|
||||
stand_icon.Blend(base_icon,ICON_OVERLAY)
|
||||
|
||||
var/datum/organ/external/head = get_organ("head") // check if we have a head
|
||||
if(head ? (head.status & ORGAN_DESTROYED ? 0 : 1) : 0) // we need a head and that head needs to not be destroyed
|
||||
//Skin colour. Not in cache because highly variable (and relatively benign).
|
||||
if (species.flags & HAS_SKIN_COLOR)
|
||||
stand_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
|
||||
|
||||
if(has_head)
|
||||
//Eyes
|
||||
if(!mutations["skeleton"])
|
||||
stand_icon.Blend(eye_icon(), ICON_OVERLAY)
|
||||
if(!skeleton)
|
||||
var/icon/eyes = new/icon('icons/mob/human_face.dmi', species.eyes)
|
||||
eyes.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
||||
stand_icon.Blend(eyes, ICON_OVERLAY)
|
||||
|
||||
//Mouth (lipstick!)
|
||||
if(lip_style && (species && species.flags & HAS_LIPS)) //skeletons are allowed to wear lipstick no matter what you think, agouri.
|
||||
@@ -404,7 +394,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
|
||||
//Underwear
|
||||
if(underwear >0 && underwear < 12 && species.flags & HAS_UNDERWEAR)
|
||||
if(!mutations["fat"] && !mutations["skeleton"])
|
||||
if(!fat && !skeleton)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', "underwear[underwear]_[g]_s"), ICON_OVERLAY)
|
||||
|
||||
if(undershirt>0 && undershirt <= undershirt_t.len && species.flags & HAS_UNDERWEAR)
|
||||
@@ -417,27 +407,47 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
update_tail_showing(0)
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/create_hair_icon()
|
||||
if(!should_we_show_hair()) // if we're missing our head or we're wearing a mask, no hair
|
||||
return
|
||||
validate_hair() // make sure our hair is valid
|
||||
var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s") //base icons
|
||||
var/icon/facial_s = facial_hair_icon()
|
||||
if (facial_s)
|
||||
face_standing.Blend(facial_s, ICON_OVERLAY)
|
||||
var/icon/hair_s = hair_icon()
|
||||
if (hair_s)
|
||||
face_standing.Blend(hair_s, ICON_OVERLAY)
|
||||
overlays_standing[HAIR_LAYER] = image(face_standing)
|
||||
|
||||
|
||||
//HAIR OVERLAY
|
||||
/mob/living/carbon/human/proc/update_hair(var/update_icons=1)
|
||||
overlays_standing[HAIR_LAYER] = null //Reset our hair
|
||||
create_hair_icon() // do the hair blending
|
||||
if(update_icons)
|
||||
update_icons()
|
||||
|
||||
//Reset our hair
|
||||
overlays_standing[HAIR_LAYER] = null
|
||||
|
||||
var/datum/organ/external/head/head_organ = get_organ("head")
|
||||
if( !head_organ || (head_organ.status & ORGAN_DESTROYED) )
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
//masks and helmets can obscure our hair.
|
||||
if( (head && (head.flags & BLOCKHAIR)) || (wear_mask && (wear_mask.flags & BLOCKHAIR)))
|
||||
if(update_icons) update_icons()
|
||||
return
|
||||
|
||||
//base icons
|
||||
var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s")
|
||||
|
||||
if(f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
if(facial_hair_style && facial_hair_style.species_allowed && src.species.name in facial_hair_style.species_allowed)
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
if(facial_hair_style.do_colouration)
|
||||
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
|
||||
|
||||
face_standing.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
if(h_style && !(head && (head.flags & BLOCKHEADHAIR)))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(hair_style && src.species.name in hair_style.species_allowed)
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
if(hair_style.do_colouration)
|
||||
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
|
||||
|
||||
face_standing.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
overlays_standing[HAIR_LAYER] = image(face_standing)
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_mutations(var/update_icons=1)
|
||||
var/fat
|
||||
@@ -978,12 +988,16 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
overlays_standing[L_HAND_LAYER] = null
|
||||
if(update_icons) update_icons()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1)
|
||||
overlays_standing[TAIL_LAYER] = null
|
||||
var/icon/tail_s = tail_icon()
|
||||
if (tail_s)
|
||||
overlays_standing[TAIL_LAYER] = image(tail_s)
|
||||
|
||||
if(species.tail)
|
||||
if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
|
||||
var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s")
|
||||
tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
|
||||
|
||||
overlays_standing[TAIL_LAYER] = image(tail_s)
|
||||
|
||||
if(update_icons)
|
||||
update_icons()
|
||||
|
||||
|
||||
@@ -105,11 +105,6 @@
|
||||
//H.jitteriness = 0
|
||||
H.update_hair()
|
||||
return
|
||||
|
||||
|
||||
/datum/species/proc/get_eye_icon()
|
||||
return eyes
|
||||
|
||||
|
||||
/datum/species/human
|
||||
name = "Human"
|
||||
@@ -333,9 +328,6 @@
|
||||
|
||||
blood_color = "#1F181F"
|
||||
flesh_color = "#575757"
|
||||
|
||||
var/brain_type = 'posibrain' // default is robots
|
||||
|
||||
|
||||
//Species unarmed attacks
|
||||
|
||||
|
||||
@@ -168,11 +168,6 @@
|
||||
name = "camera"
|
||||
icon_state = "camera"
|
||||
icon_state_broken = "camera_broken"
|
||||
|
||||
/obj/item/robot_parts/robot_component/law_computer
|
||||
name = "law computer"
|
||||
icon_state = "radio"
|
||||
icon_state_broken = "radio_broken"
|
||||
|
||||
/obj/item/robot_parts/robot_component/diagnosis_unit
|
||||
name = "diagnosis unit"
|
||||
|
||||
@@ -177,42 +177,590 @@ datum/preferences
|
||||
g_skin = green
|
||||
b_skin = blue
|
||||
|
||||
proc/job_type_info()
|
||||
var/job_type=null
|
||||
var/job_index=null
|
||||
if (job_civilian_high)
|
||||
job_type="[CIVILIAN]"
|
||||
job_index="[job_civilian_high]"
|
||||
if (job_engsec_high)
|
||||
job_type="[ENGSEC]"
|
||||
job_index="[job_engsec_high]"
|
||||
if (job_medsci_high)
|
||||
job_type="[MEDSCI]"
|
||||
job_index="[job_medsci_high]"
|
||||
if (!job_type)
|
||||
job_type="DEFAULT"
|
||||
job_index=1
|
||||
return list(job_type,job_index)
|
||||
|
||||
proc/update_preview_icon() //this is a little better - jf
|
||||
|
||||
proc/update_preview_icon() //seriously. This is horrendous.
|
||||
del(preview_icon_front)
|
||||
del(preview_icon_side)
|
||||
del(preview_icon)
|
||||
|
||||
var/g = "m"
|
||||
if(gender == FEMALE) g = "f"
|
||||
|
||||
var/icon/icobase
|
||||
var/datum/species/current_species = all_species[species]
|
||||
if(!current_species) // no species? no preview for you
|
||||
return
|
||||
preview_icon = new/icon("icons/turf/floors.dmi","floor")
|
||||
preview_icon.Blend(current_species.create_body_preview_icon(src),ICON_OVERLAY) // create the body icon
|
||||
|
||||
if(current_species)
|
||||
icobase = current_species.icobase
|
||||
else
|
||||
icobase = 'icons/mob/human_races/r_human.dmi'
|
||||
|
||||
preview_icon = new /icon(icobase, "torso_[g]")
|
||||
preview_icon.Blend(new /icon(icobase, "groin_[g]"), ICON_OVERLAY)
|
||||
preview_icon.Blend(new /icon(icobase, "head_[g]"), ICON_OVERLAY)
|
||||
|
||||
for(var/name in list("r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","l_arm","l_hand"))
|
||||
if(organ_data[name] == "amputated") continue
|
||||
|
||||
var/icon/temp = new /icon(icobase, "[name]")
|
||||
if(organ_data[name] == "cyborg")
|
||||
temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
//Tail
|
||||
if(current_species && (current_species.tail))
|
||||
var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s")
|
||||
preview_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
// Skin color
|
||||
if(current_species && (current_species.flags & HAS_SKIN_COLOR))
|
||||
preview_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
|
||||
|
||||
// Skin tone
|
||||
if(current_species && (current_species.flags & HAS_SKIN_TONE))
|
||||
if (s_tone >= 0)
|
||||
preview_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
|
||||
else
|
||||
preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
|
||||
|
||||
var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = current_species ? current_species.eyes : "eyes_s")
|
||||
eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
|
||||
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if(hair_style)
|
||||
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
|
||||
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
|
||||
eyes_s.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
|
||||
if(facial_hair_style)
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
|
||||
eyes_s.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
var/icon/underwear_s = null
|
||||
if(underwear > 0 && underwear < 7 && (current_species && (current_species.flags & HAS_UNDERWEAR)))
|
||||
underwear_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = "underwear[underwear]_[g]_s")
|
||||
|
||||
var/icon/undershirt_s = null
|
||||
if(undershirt > 0 && undershirt < 16 && (current_species && (current_species.flags & HAS_UNDERWEAR)))
|
||||
undershirt_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = "undershirt[undershirt]_s")
|
||||
|
||||
var/icon/clothes_s = null
|
||||
if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high'
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if(backbag == 2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
else if(backbag == 3 || backbag == 4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
|
||||
else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty
|
||||
switch(job_civilian_high)
|
||||
if(HOP)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "ianshirt"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(BARTENDER)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "tophat"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(BOTANIST)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "nymph"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-hyd"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(CHEF)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "chef"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apronchef"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(JANITOR)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_janitor"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(LIBRARIAN)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hairflower"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(QUARTERMASTER)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "poncho"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(CARGOTECH)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "flat_cap"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(MINER)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "bearpelt"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(LAWYER)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "briefcase"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(CHAPLAIN)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "imperium_monk"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(CLOWN)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY)
|
||||
if(MIME)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
/* if(INTERN)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "white_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
if(backbag == 2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
else if(backbag == 3 || backbag == 4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)*/
|
||||
|
||||
else if(job_medsci_high)
|
||||
switch(job_medsci_high)
|
||||
if(RD)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "petehat"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(SCIENTIST)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(XENOBIOLOGIST)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(CHEMIST)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labgreen"), ICON_OVERLAY)
|
||||
else
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-chem"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(CMO)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_cmo"), ICON_OVERLAY)
|
||||
else
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(DOCTOR)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "surgeon"), ICON_OVERLAY)
|
||||
else
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(EMT)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "emt_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "fr_jacket_open"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "emtpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-emt"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(GENETICIST)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "monkeysuit"), ICON_OVERLAY)
|
||||
else
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-gen"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(VIROLOGIST)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "plaguedoctor"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-vir"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(ROBOTICIST)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "toolbox_blue"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(INTERN_MED)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(INTERN_SCI)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
|
||||
else if(job_engsec_high)
|
||||
switch(job_engsec_high)
|
||||
if(CAPTAIN)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "centcomcaptain"), ICON_OVERLAY)
|
||||
else
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(HOS)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberet"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(WARDEN)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "slippers_worn"), ICON_OVERLAY)
|
||||
else
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(DETECTIVE)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "wardentanclothes_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
|
||||
if(FORENSICS)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "polsuit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
|
||||
if(OFFICER)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "officerberet"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(CHIEF)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/items_righthand.dmi', "blueprints"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(ENGINEER)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hazard"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(ATMOSTECH)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if(prob(1))
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "firesuit"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(INTERN_SEC)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "redshirt2_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "officerberet"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(INTERN_ENG)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "e_beret_badge"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
|
||||
if(AI)//Gives AI and borgs assistant-wear, so they can still customize their character
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "straight_jacket"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY)
|
||||
if(backbag == 2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
else if(backbag == 3 || backbag == 4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(CYBORG)
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "cardborg"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY)
|
||||
if(backbag == 2)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
|
||||
else if(backbag == 3 || backbag == 4)
|
||||
clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
|
||||
if(disabilities & NEARSIGHTED)
|
||||
preview_icon.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY)
|
||||
if (current_species.flags & HAS_UNDERWEAR) // do we even need to handle underwear?
|
||||
if(underwear > 0 && underwear < 7)
|
||||
preview_icon.Blend(new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = "underwear[underwear]_[(gender==FEMALE) ? "f" : "m"]_s"),ICON_OVERLAY)
|
||||
if(undershirt > 0 && undershirt < 16)
|
||||
preview_icon.Blend(new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = "undershirt[undershirt]_s"),ICON_OVERLAY)
|
||||
var/list/job_types=job_type_info()
|
||||
var/datum/preview/job/current_job=get_job_preview_for_index(job_types[1],job_types[2])
|
||||
if(istype(current_job))
|
||||
preview_icon.Blend(current_job.create_clothes_icon(backbag), ICON_OVERLAY)
|
||||
|
||||
preview_icon.Blend(eyes_s, ICON_OVERLAY)
|
||||
if(underwear_s)
|
||||
preview_icon.Blend(underwear_s, ICON_OVERLAY)
|
||||
if(undershirt_s)
|
||||
preview_icon.Blend(undershirt_s, ICON_OVERLAY)
|
||||
if(clothes_s)
|
||||
preview_icon.Blend(clothes_s, ICON_OVERLAY)
|
||||
preview_icon_front = new(preview_icon, dir = SOUTH)
|
||||
preview_icon_side = new(preview_icon, dir = WEST)
|
||||
preview_icon_side = new(preview_icon, dir = WEST)
|
||||
|
||||
del(eyes_s)
|
||||
del(underwear_s)
|
||||
del(undershirt_s)
|
||||
del(clothes_s)
|
||||
|
||||
@@ -43,10 +43,6 @@
|
||||
|
||||
// how often wounds should be updated, a higher number means less often
|
||||
var/wound_update_accuracy = 1
|
||||
|
||||
var/datum/synthetic_limb_cover/covering = null // paint or synth skin
|
||||
|
||||
var/gendered = FALSE
|
||||
|
||||
|
||||
/datum/organ/external/New(var/datum/organ/external/P)
|
||||
@@ -517,36 +513,17 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
if (open && !clamped && (H && !(H.species.flags & NO_BLOOD))) //things tend to bleed if they are CUT OPEN
|
||||
status |= ORGAN_BLEEDING
|
||||
|
||||
|
||||
/datum/organ/external/proc/can_take_covering() // is this organ functional enough to take a covering
|
||||
if (status&(ORGAN_DESTROYED|ORGAN_BROKEN|ORGAN_DEAD))
|
||||
return
|
||||
return (burn_dam + brute_dam) <= (max_damage * 0.1) // you get hurt you're going to lose your covering
|
||||
|
||||
|
||||
|
||||
|
||||
// new damage icon system
|
||||
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
|
||||
/datum/organ/external/proc/update_icon()
|
||||
var/n_is = damage_state_text()
|
||||
if (n_is != damage_state)
|
||||
damage_state = n_is
|
||||
return TRUE
|
||||
if (covering) // check to see if we lose the covering
|
||||
if (covering.coverage==SYNTHETIC_COVERING_WORKING)
|
||||
if (!can_take_covering()) // if your limbs get badly damaged you lose the covering
|
||||
covering.coverage = SYNTHETIC_COVERING_DAMAGED
|
||||
owner.update_body(TRUE)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/organ/external/head/update_icon()
|
||||
var/result = ..()
|
||||
if (result)
|
||||
owner.update_hair()
|
||||
return result
|
||||
|
||||
|
||||
return 1
|
||||
return 0
|
||||
|
||||
// new damage icon system
|
||||
// returns just the brute/burn damage code
|
||||
/datum/organ/external/proc/damage_state_text()
|
||||
@@ -573,8 +550,6 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
tbrute = 2
|
||||
else
|
||||
tbrute = 3
|
||||
|
||||
|
||||
return "[tbrute][tburn]"
|
||||
|
||||
/****************************************************
|
||||
@@ -829,52 +804,14 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
/datum/organ/external/proc/get_icon_key()
|
||||
if (status & ORGAN_DESTROYED)
|
||||
return "L" // l for lost
|
||||
if (status & ORGAN_DEAD)
|
||||
return "D" // d for dead
|
||||
if (status & ORGAN_ROBOT)
|
||||
return get_synthetic_icon_key()
|
||||
return "G" // regular old limb
|
||||
/datum/organ/external/get_icon(var/icon/race_icon, var/icon/deform_icon,gender="")
|
||||
if (status & ORGAN_ROBOT && !(owner.species && owner.species.flags & IS_SYNTHETIC))
|
||||
return new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
|
||||
if (status & ORGAN_MUTATED)
|
||||
return new /icon(deform_icon, "[icon_name][gender ? "_[gender]" : ""]")
|
||||
|
||||
/datum/organ/external/proc/valid_covering()
|
||||
if (status & ORGAN_ROBOT)
|
||||
if (covering)
|
||||
return (covering.coverage) // is our covering working?
|
||||
return FALSE // if we have no covering at all
|
||||
return TRUE // squishies always have skin
|
||||
|
||||
|
||||
/datum/organ/external/proc/get_synthetic_icon_key()
|
||||
if (!covering) // no covering at all, this should not happen
|
||||
return "R" // regular old robot
|
||||
return covering.get_icon_key()
|
||||
|
||||
|
||||
/datum/organ/external/proc/get_synthetic_icon()
|
||||
if (!covering) // no covering at all, this should not happen
|
||||
return new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][get_gender_string()]")
|
||||
return covering.get_icon()
|
||||
|
||||
|
||||
/datum/organ/external/proc/get_gender_string()
|
||||
if (!gendered) // most organs aren't gender specific
|
||||
return ""
|
||||
if (owner) // if we're a gender specific organ with an owner
|
||||
return (owner.gender == FEMALE ? "_f" : "_m")
|
||||
return "_f"
|
||||
|
||||
|
||||
/datum/organ/external/get_icon(var/icon/race_icon, var/icon/deform_icon, var/list/skin_info)
|
||||
if (status & ORGAN_ROBOT)
|
||||
return get_synthetic_icon()
|
||||
var/icon/result = new /icon((status & ORGAN_MUTATED) ? deform_icon : race_icon, "[icon_name][get_gender_string()]")
|
||||
if (skin_info["blend"])
|
||||
result.Blend(skin_info["rgb"],skin_info["mode"])
|
||||
return result
|
||||
return new /icon(race_icon, "[icon_name][gender ? "_[gender]" : ""]")
|
||||
|
||||
|
||||
/datum/organ/external/proc/is_usable()
|
||||
@@ -930,7 +867,6 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
body_part = UPPER_TORSO
|
||||
vital = 1
|
||||
encased = "ribcage"
|
||||
gendered = TRUE
|
||||
|
||||
/datum/organ/external/groin
|
||||
name = "groin"
|
||||
@@ -940,7 +876,6 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
min_broken_damage = 30
|
||||
body_part = LOWER_TORSO
|
||||
vital = 1
|
||||
gendered = TRUE
|
||||
|
||||
/datum/organ/external/l_arm
|
||||
name = "l_arm"
|
||||
@@ -1036,8 +971,16 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
var/disfigured = 0
|
||||
vital = 1
|
||||
encased = "skull"
|
||||
gendered = TRUE
|
||||
|
||||
|
||||
/datum/organ/external/head/get_icon(var/icon/race_icon, var/icon/deform_icon)
|
||||
if (!owner)
|
||||
return ..()
|
||||
var/g = "m"
|
||||
if(owner.gender == FEMALE) g = "f"
|
||||
if (status & ORGAN_MUTATED)
|
||||
. = new /icon(deform_icon, "[icon_name]_[g]")
|
||||
else
|
||||
. = new /icon(race_icon, "[icon_name]_[g]")
|
||||
|
||||
/datum/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
|
||||
..(brute, burn, sharp, edge, used_weapon, forbidden_limbs)
|
||||
@@ -1069,7 +1012,6 @@ obj/item/weapon/organ
|
||||
icon = 'icons/mob/human_races/r_human.dmi'
|
||||
var/op_stage = 0
|
||||
var/list/organs_internal = list()
|
||||
|
||||
|
||||
obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
..(loc)
|
||||
@@ -1084,12 +1026,12 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
for(var/datum/organ/internal/I in H.internal_organs)
|
||||
if(I.parent_organ != name)
|
||||
continue
|
||||
var/obj/item/organ/new_organ_object = I.remove()
|
||||
if(new_organ_object && istype(new_organ_object))
|
||||
new_organ_object.removed(H)
|
||||
if(new_organ_object.organ_data)
|
||||
organs_internal |= new_organ_object.organ_data
|
||||
new_organ_object.loc = src // put the organ inside the severed external organ
|
||||
var/obj/item/organ/current_organ = I.remove()
|
||||
current_organ.removed(H)
|
||||
current_organ.loc = src
|
||||
if(current_organ.organ_data)
|
||||
organs_internal |= current_organ.organ_data
|
||||
|
||||
// Forming icon for the limb
|
||||
// Setting base icon for this mob's race
|
||||
var/icon/base
|
||||
@@ -1097,13 +1039,24 @@ obj/item/weapon/organ/New(loc, mob/living/carbon/human/H)
|
||||
base = icon(H.species.icobase)
|
||||
else
|
||||
base = icon('icons/mob/human_races/r_human.dmi')
|
||||
if(base) // handle skin colours
|
||||
var/list/skin_info = H.skin_colour_info() // get the skin tone info
|
||||
base.Blend(skin_info["rgb"],skin_info["mode"])
|
||||
|
||||
if(base)
|
||||
//Changing limb's skin tone to match owner
|
||||
if(!H.species || H.species.flags & HAS_SKIN_TONE)
|
||||
if (H.s_tone >= 0)
|
||||
base.Blend(rgb(H.s_tone, H.s_tone, H.s_tone), ICON_ADD)
|
||||
else
|
||||
base.Blend(rgb(-H.s_tone, -H.s_tone, -H.s_tone), ICON_SUBTRACT)
|
||||
|
||||
if(base)
|
||||
//Changing limb's skin color to match owner
|
||||
if(!H.species || H.species.flags & HAS_SKIN_COLOR)
|
||||
base.Blend(rgb(H.r_skin, H.g_skin, H.b_skin), ICON_ADD)
|
||||
|
||||
icon = base
|
||||
set_dir(SOUTH)
|
||||
src.transform = turn(src.transform, rand(70,130))
|
||||
|
||||
|
||||
|
||||
/****************************************************
|
||||
EXTERNAL ORGAN ITEMS DEFINES
|
||||
@@ -1137,7 +1090,8 @@ obj/item/weapon/organ/head
|
||||
name = "head"
|
||||
icon_state = "head_m"
|
||||
var/mob/living/carbon/brain/brainmob
|
||||
|
||||
var/brain_op_stage = 0
|
||||
|
||||
/obj/item/weapon/organ/head/posi
|
||||
name = "robotic head"
|
||||
|
||||
@@ -1182,15 +1136,13 @@ obj/item/weapon/organ/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(2)
|
||||
if(istype(W,/obj/item/weapon/hemostat))
|
||||
if(contents.len)
|
||||
var/obj/item/organ/removing = pick(contents)
|
||||
var/exposed_result
|
||||
var/obj/item/removing = pick(contents)
|
||||
removing.loc = get_turf(user.loc)
|
||||
if(istype(removing))
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands(removing)
|
||||
if(istype(removing,/obj/item/organ))
|
||||
var/obj/item/organ/removed_organ = removing
|
||||
organs_internal -= removed_organ.organ_data
|
||||
exposed_result = removing.exposed_to_the_world()
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands((isnull(exposed_result)) ? removing : exposed_result)
|
||||
user.visible_message("<span class='danger'><b>[user]</b> extracts [removing] from [src] with [W]!")
|
||||
else
|
||||
user.visible_message("<span class='danger'><b>[user]</b> fishes around fruitlessly in [src] with [W].")
|
||||
|
||||
@@ -249,25 +249,6 @@
|
||||
parent_organ = "head"
|
||||
removed_type = /obj/item/organ/brain
|
||||
vital = 1
|
||||
|
||||
|
||||
/datum/organ/internal/brain/robot // brains for shells
|
||||
var/machine_brain_type=null
|
||||
|
||||
|
||||
/datum/organ/internal/brain/robot/proc/create_robot_brain_replacement(var/target,var/new_location)
|
||||
var/obj/item/device/mmi/new_mmi
|
||||
if (machine_brain_type=="Posibrain")
|
||||
new_mmi = new/obj/item/device/mmi/posibrain()
|
||||
new_mmi.name = "positronic brain ([owner])"
|
||||
new_mmi.brainmob.name = owner.real_name
|
||||
new_mmi.brainmob.real_name = owner.real_name
|
||||
else
|
||||
new_mmi = new/obj/item/device/mmi()
|
||||
new_mmi.transfer_identity(target)
|
||||
new_mmi.loc = new_location
|
||||
return new_mmi
|
||||
|
||||
|
||||
/datum/organ/internal/brain/xeno
|
||||
removed_type = /obj/item/organ/brain/xeno
|
||||
|
||||
@@ -180,11 +180,6 @@
|
||||
msg_admin_attack("[user.name] ([user.ckey]) removed a vital organ ([src]) from [target.name] ([target.ckey]) (INTENT: [uppertext(user.a_intent)]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
|
||||
target.death()
|
||||
|
||||
|
||||
/obj/item/organ/proc/exposed_to_the_world() // this is only useful for organs that change when actually removed from the body
|
||||
return
|
||||
|
||||
|
||||
/obj/item/organ/appendix/removed(var/mob/living/target,var/mob/living/user)
|
||||
|
||||
..()
|
||||
|
||||
@@ -1,362 +0,0 @@
|
||||
/*
|
||||
|
||||
We need to mix blending into limb object code, this will slow shit down a lot.
|
||||
|
||||
*/
|
||||
|
||||
var/SYNTHETIC_COVERING_WORKING=1
|
||||
var/SYNTHETIC_COVERING_DAMAGED=0
|
||||
|
||||
datum/synthetic_limb_cover
|
||||
var/coverage //
|
||||
var/colour=null//
|
||||
var/datum/organ/external/limb_datum // the limb in question
|
||||
var/obj/item/robot_parts/limb_item // also the limb in question (if dismembered)
|
||||
var/main_icon = 'icons/mob/human_races/robotic.dmi'
|
||||
var/damage_icon = 'icons/mob/human_races/robotic.dmi'
|
||||
var/icon_key_type="BAD"
|
||||
var/hair_species=null
|
||||
var/eyes_state = "blank_eyes"
|
||||
var/tail = null
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/New( var/datum/organ/external/datum_target=null,var/input_colour=null)
|
||||
limb_datum=datum_target
|
||||
coverage=SYNTHETIC_COVERING_WORKING // start working
|
||||
colour= (input_colour) ? input_colour : rgb(128,128,128)
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/proc/get_icon() // default mechanical limbs return robo versions
|
||||
var/icon/temp = new /icon((coverage ? main_icon : damage_icon), "[limb_datum.icon_name][limb_datum.get_gender_string()]") // only add a gender if it's necessary
|
||||
var/icon/result = icon(temp)
|
||||
result.Blend(colour, ICON_ADD)
|
||||
return result
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/proc/repair()
|
||||
coverage = SYNTHETIC_COVERING_WORKING
|
||||
update_icon()
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/proc/damage()
|
||||
coverage = SYNTHETIC_COVERING_DAMAGED
|
||||
update_icon()
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/proc/set_colour(input_colour)
|
||||
colour=input_colour
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/proc/update_icon()
|
||||
if (limb_datum)
|
||||
if (limb_datum.owner)
|
||||
limb_datum.owner.update_body()
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/proc/get_icon_key() // this is going to wreck the icon cache but to do custom colour per limb this is necessary
|
||||
return "SYNTH:[icon_key_type]:[colour]:[coverage]"
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/paint
|
||||
main_icon = 'icons/mob/human_races/r_machine.dmi'
|
||||
icon_key_type = "Paint"
|
||||
hair_species = "Machine"
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/skin
|
||||
main_icon = 'icons/mob/human_races/r_human_grey.dmi'
|
||||
icon_key_type = "Skin"
|
||||
hair_species = "Human"
|
||||
eyes_state="eyes_s"
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/fur
|
||||
main_icon = 'icons/mob/human_races/r_tajaran.dmi'
|
||||
icon_key_type = "Fur"
|
||||
hair_species = "Tajaran"
|
||||
eyes_state="eyes_s"
|
||||
tail = "tajtail"
|
||||
|
||||
|
||||
datum/synthetic_limb_cover/scales
|
||||
main_icon = 'icons/mob/human_races/r_lizard.dmi'
|
||||
icon_key_type = "Scales"
|
||||
hair_species = "Unathi"
|
||||
eyes_state="eyes_s"
|
||||
tail = "sogtail"
|
||||
|
||||
|
||||
var/list/limb_covering_references
|
||||
/proc/get_limb_covering_references()
|
||||
if (isnull(limb_covering_references))
|
||||
limb_covering_references = list()
|
||||
for(var/skin_type in typesof(/datum/synthetic_limb_cover)-/datum/synthetic_limb_cover)
|
||||
var/datum/synthetic_limb_cover/temp_cover = new skin_type()
|
||||
limb_covering_references[skin_type]=temp_cover
|
||||
return limb_covering_references
|
||||
|
||||
|
||||
var/list/limb_covering_names
|
||||
/proc/get_limb_covering_names()
|
||||
if (isnull(limb_covering_names))
|
||||
limb_covering_names=list("None")
|
||||
var/list/refs=get_limb_covering_references()
|
||||
for(var/skin_type in refs)
|
||||
var/datum/synthetic_limb_cover/temp=refs[skin_type]
|
||||
limb_covering_names.Add(temp.icon_key_type)
|
||||
return limb_covering_names
|
||||
|
||||
|
||||
var/list/limb_covering_list
|
||||
/proc/get_limb_covering_list()
|
||||
if(isnull(limb_covering_list))
|
||||
limb_covering_list=list("None"=null)
|
||||
var/list/refs=get_limb_covering_references()
|
||||
for(var/skin_type in refs)
|
||||
var/datum/synthetic_limb_cover/temp=refs[skin_type]
|
||||
limb_covering_list[temp.icon_key_type]=skin_type
|
||||
return limb_covering_list
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray
|
||||
name = "robot paint gun"
|
||||
desc = "A compact hand-held spray gun for painting synthetics."
|
||||
icon = 'icons/obj/synthskin.dmi'
|
||||
icon_state = "spray_can_icon"
|
||||
force = 5.0
|
||||
throwforce = 7.0
|
||||
w_class = 2.0
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
|
||||
var/icon/spray_can_icon = null
|
||||
var/obj/item/weapon/synth_skin_cartridge/cartridge = null
|
||||
var/construction_time = 20
|
||||
var/list/construction_cost = list("metal"=400,"glass"=100)
|
||||
New()
|
||||
update_icon()
|
||||
|
||||
|
||||
proc/create_tinted_icon(icon_name, icon_state_name, target_colour)
|
||||
var/icon/result = new /icon(icon_name,icon_state_name)
|
||||
result.Blend(target_colour, ICON_ADD) // if we have charges left, show the colour, otherwise grey
|
||||
return result
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/proc/paint_icon()
|
||||
return create_tinted_icon(icon,"installed_paint_skin",cartridge.paint_colour)
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/proc/hair_icon()
|
||||
return create_tinted_icon(icon,"installed_paint_hair",cartridge.hair_colour)
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/proc/cartridge_icon()
|
||||
return new/icon(icon,"[cartridge.installed_icon]")
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/proc/charges_icon()
|
||||
return new/icon(icon,"charges_[cartridge.current_charges]")
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/update_icon()
|
||||
underlays.Cut()
|
||||
overlays.Cut()
|
||||
if (cartridge)
|
||||
underlays += cartridge_icon()
|
||||
underlays += paint_icon()
|
||||
underlays += hair_icon()
|
||||
overlays += charges_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/attack(mob/M, mob/user)
|
||||
switch (user.a_intent)
|
||||
if ("hurt")
|
||||
..(M,user)
|
||||
playsound(loc, "swing_hit", 50, 1, -1)
|
||||
if("help")
|
||||
return try_to_paint(M,user)
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/proc/allowed_to_paint(mob/living/carbon/human/human_target, mob/user, target)
|
||||
if (!cartridge)
|
||||
user << "<span class='notice'>You cannot paint anything with an empty spray gun.</span>"
|
||||
if (human_target!=user)
|
||||
human_target << "<span class='notice'>[user] waves the spray gun vaguely toward you but the gun is empty.</span>"
|
||||
return
|
||||
if (!cartridge.current_charges)
|
||||
user << "<span class='notice'>You click the [src] but your [cartridge] is empty.</span>"
|
||||
if (human_target!=user)
|
||||
human_target << "<span class='notice'>[user] clicks the [src] at you but their [cartridge] is empty.</span>"
|
||||
return
|
||||
if(!istype(human_target,/mob/living/carbon/human))
|
||||
user << "<span class='notice'>You can't figure out a way you could apply paint to [human_target].</span>"
|
||||
if (human_target!=user)
|
||||
human_target << "<span class='notice'>[user] stares at you and appears to decide that they're unable to paint you.</span>"
|
||||
return
|
||||
var/datum/organ/external/datum_target=human_target.get_organ(target)
|
||||
if(!datum_target || (!datum_target.can_take_covering()))
|
||||
user << "<span class='notice'>You cannot paint [human_target]'s [target] because it's too badly damaged.</span>"
|
||||
if (human_target!=user)
|
||||
human_target << "<span class='notice'>[user] goes to paint your [target] but it's too badly damaged.</span>"
|
||||
return
|
||||
if (!(datum_target.status && ORGAN_ROBOT))
|
||||
if (human_target!=user)
|
||||
user << "<span class='notice'>You go to paint [human_target]'s [target] but realize that it isn't robotic..</span>"
|
||||
human_target << "<span class='notice'>[user] looks like they are about to try to paint your [target] before realizing that it isn't robotic.</span>"
|
||||
else
|
||||
user << "<span class='notice'>Your [target] isn't robotic, so you decide not to try to paint it.</span>"
|
||||
return
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/proc/try_to_paint(mob/living/carbon/human/human_target, mob/user)
|
||||
var/target=user.zone_sel.selecting
|
||||
if (target in list("mouth","eyes")) // we don't paint these individually
|
||||
target="head"
|
||||
if (allowed_to_paint(human_target,user,target))
|
||||
paint_organ(human_target, user, human_target.get_organ(target))
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/proc/paint_organ(mob/M, mob/user, datum/organ/external/datum_target)
|
||||
if (datum_target.covering) // if we've already got a covering, remove it
|
||||
del(datum_target.covering)
|
||||
datum_target.covering = new cartridge.covering_path(datum_target,cartridge.paint_colour)
|
||||
var/mob/living/carbon/human/human_target = M
|
||||
if (istype(datum_target,/datum/organ/external/head))
|
||||
var/list/hair_colour_as_list = htmlcolour_to_values(cartridge.hair_colour)
|
||||
human_target.r_hair = hair_colour_as_list[1] // byond starts at 1! WHYYYYYYY?!!!! -jf
|
||||
human_target.g_hair = hair_colour_as_list[2]
|
||||
human_target.b_hair = hair_colour_as_list[3]
|
||||
human_target.r_facial = hair_colour_as_list[1]
|
||||
human_target.g_facial = hair_colour_as_list[2]
|
||||
human_target.b_facial = hair_colour_as_list[3]
|
||||
human_target.h_style=random_hair_style(human_target.gender,human_target.species)
|
||||
human_target.update_hair()
|
||||
|
||||
|
||||
if (istype(datum_target,/datum/organ/external/groin)) // this is a bit reductive, but whatever
|
||||
var/gender_string = input(user,"What sex do you want this shell to appear as?") in list("Male","Female")
|
||||
human_target.gender = (gender_string=="Male") ? MALE : FEMALE
|
||||
human_target.update_body(TRUE)
|
||||
cartridge.current_charges--
|
||||
user.visible_message("<span class='notice'>[user] has covered [M]'s [datum_target.display_name] with [cartridge.covering_description].</span>")
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/attackby(obj/item/weapon/W, mob/user)
|
||||
if(istype(W, /obj/item/weapon/synth_skin_cartridge))
|
||||
if (!cartridge)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
cartridge=W
|
||||
user << "<span class='notice'>You insert \the [W] into [src].</span>"
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='notice'>You will have to remove the other cartridge first."
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_spray/attack_hand(mob/user)
|
||||
var/obj/item/inactive_item = user.get_inactive_hand()
|
||||
if (src==inactive_item) // if we are clicking on this with our off hand
|
||||
if(src.cartridge)
|
||||
src.cartridge.add_fingerprint(user)
|
||||
user.put_in_active_hand(src.cartridge)
|
||||
user << "<span class='notice'>You remove \the [src.cartridge] from the [src]."
|
||||
src.cartridge.update_icon()
|
||||
src.cartridge = null
|
||||
update_icon()
|
||||
return
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge
|
||||
name = "ERROR"
|
||||
desc = "You should not be reading this."
|
||||
icon = 'icons/obj/synthskin.dmi'
|
||||
icon_state = "bottle_paint"
|
||||
var/installed_icon = "installed_paint"
|
||||
flags = FPRINT | TABLEPASS
|
||||
var/max_charges = 9
|
||||
var/current_charges = 9
|
||||
var/construction_time = 20
|
||||
var/paint_colour = null
|
||||
var/hair_colour = null
|
||||
var/covering_description = "paint"
|
||||
var/list/construction_cost = list("metal"=200,"glass"=50)
|
||||
var/covering_path = "/datum/synthetic_limb_cover/paint"
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
New()
|
||||
paint_colour = rgb(128,128,128) // starts on red
|
||||
hair_colour = rgb(128,128,128) // starts black
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/proc/get_charges_string()
|
||||
return " It looks like there are [current_charges] charges left."
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/examine(mob/user)
|
||||
user << src.desc + get_charges_string()
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/attack_self(mob/user)
|
||||
pick_colours(user)
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/proc/pick_colours(mob/user)
|
||||
var/new_paint = input(user, "Choose the primary colour you want to paint.", "Synthetic Painting") as color|null
|
||||
if(new_paint)
|
||||
paint_colour = new_paint
|
||||
var/new_hair = input(user, "Choose the hair colour you want to paint.", "Synthetic Painting") as color|null
|
||||
if(new_hair)
|
||||
hair_colour = new_hair
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/proc/paint_icon()
|
||||
return create_tinted_icon(icon,"bottle_paint_skin",paint_colour)
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/proc/hair_icon()
|
||||
return create_tinted_icon(icon,"bottle_paint_hair",hair_colour)
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/update_icon()
|
||||
overlays.Cut()
|
||||
if (current_charges > 0)
|
||||
overlays += paint_icon()
|
||||
overlays += hair_icon()
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/paint
|
||||
name = "synthetic paint cartridge"
|
||||
desc = "A small cartridge for robotic paint."
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/skin
|
||||
name = "synthetic skin cartridge"
|
||||
desc = "A small cartridge filled with pressurized synthetic skin. It's covered in thin grease."
|
||||
icon_state = "bottle_skin"
|
||||
installed_icon = "installed_skin"
|
||||
covering_path = "/datum/synthetic_limb_cover/skin"
|
||||
origin_tech = "materials=1;engineering=1;biotech=2"
|
||||
covering_description = "synthetic skin"
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/fur
|
||||
name = "synthetic fur cartridge"
|
||||
desc = "A small cartridge filled with pressurized synthetic fur. Dozens of fine hairs are stuck to it with static."
|
||||
icon_state = "bottle_fur"
|
||||
installed_icon = "installed_fur"
|
||||
covering_path = "/datum/synthetic_limb_cover/fur"
|
||||
origin_tech = "materials=1;engineering=1;biotech=3"
|
||||
covering_description = "synthetic fur"
|
||||
|
||||
|
||||
/obj/item/weapon/synth_skin_cartridge/scales
|
||||
name = "synthetic scales cartridge"
|
||||
desc = "A small cartridge filled with pressurized synthetic scales. It makes a dry crunching noise when you shake it."
|
||||
icon_state = "bottle_scales"
|
||||
installed_icon = "installed_scales"
|
||||
covering_path = "/datum/synthetic_limb_cover/scales"
|
||||
origin_tech = "materials=1;engineering=1;biotech=3"
|
||||
covering_description = "synthetic scales"
|
||||
@@ -305,11 +305,11 @@
|
||||
// Extract the organ!
|
||||
if(target.op_stage.current_organ)
|
||||
var/datum/organ/internal/I = target.internal_organs_by_name[target.op_stage.current_organ]
|
||||
var/obj/item/organ/O
|
||||
if(I && istype(I))
|
||||
var/obj/item/organ/new_organ_object = I.remove(user)
|
||||
if(new_organ_object && istype(new_organ_object))
|
||||
new_organ_object.removed(target,user)
|
||||
new_organ_object.exposed_to_the_world() // useless except for replacements
|
||||
O = I.remove(user)
|
||||
if(O && istype(O))
|
||||
O.removed(target,user)
|
||||
target.op_stage.current_organ = null
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 62 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 5.2 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 869 B |
Reference in New Issue
Block a user