Branded IPCs (#3388)
This PR adds 2 subtypes of industrial and two subtypes of baseline, one for each cybernetics manufacturer. Sprites by BRAINOS. other changes: IPCs can now be flashed or flashbanged. Admin spawn paths have been added for subspecies that did not have them. IPCs are no longer slowed by being cold.
@@ -0,0 +1,6 @@
|
||||
--
|
||||
-- Implemented in PR #3388
|
||||
-- Renames 'Industrial Frame' to 'Hephaestus G1 Industrial Frame'
|
||||
--
|
||||
|
||||
UPDATE `ss13_characters` SET species = "Hephaestus G1 Industrial Frame" WHERE species = "Industrial Frame";
|
||||
@@ -1850,6 +1850,7 @@
|
||||
#include "code\modules\organs\robolimbs.dm"
|
||||
#include "code\modules\organs\wound.dm"
|
||||
#include "code\modules\organs\subtypes\diona.dm"
|
||||
#include "code\modules\organs\subtypes\industrial.dm"
|
||||
#include "code\modules\organs\subtypes\machine.dm"
|
||||
#include "code\modules\organs\subtypes\resomi.dm"
|
||||
#include "code\modules\organs\subtypes\skrell.dm"
|
||||
|
||||
@@ -204,8 +204,3 @@
|
||||
#define PROSTHETIC_ZH "Zeng-Hu Pharmaceuticals"
|
||||
#define PROSTHETIC_HI "Hephaestus Industries"
|
||||
#define PROSTHETIC_XMG "Xion Manufacturing Group"
|
||||
|
||||
// Defines for mechanical_species list.
|
||||
#define MECHANICAL_SPECIES_NORMAL 1 // Baselines, shells
|
||||
#define MECHANICAL_SPECIES_INDUSTRIAL 2 // Industrials, incl. branded.
|
||||
#define MECHANICAL_SPECIES_SPECIAL 3 // HKs
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
// Species flags.
|
||||
#define NO_BLOOD 0x1 // Vessel var is not filled with blood, cannot bleed out.
|
||||
#define NO_BREATHE 0x2 // Cannot suffocate or take oxygen loss.
|
||||
#define NO_SCAN 0x4 // Cannot be scanned in a DNA machine/genome-stolen.
|
||||
#define NO_PAIN 0x8 // Cannot suffer halloss/recieves deceptive health indicator.
|
||||
#define NO_SLIP 0x10 // Cannot fall over.
|
||||
#define NO_POISON 0x20 // Cannot not suffer toxloss.
|
||||
#define IS_PLANT 0x40 // Is a treeperson.
|
||||
#define NO_EMBED 0x80 // Can not have shrapnel or any object embedded into its body
|
||||
// unused: 0x8000 - higher than this will overflow
|
||||
#define NO_BLOOD 1 // Vessel var is not filled with blood, cannot bleed out.
|
||||
#define NO_BREATHE 2 // Cannot suffocate or take oxygen loss.
|
||||
#define NO_SCAN 4 // Cannot be scanned in a DNA machine/genome-stolen.
|
||||
#define NO_PAIN 8 // Cannot suffer halloss/recieves deceptive health indicator.
|
||||
#define NO_SLIP 16 // Cannot fall over.
|
||||
#define NO_POISON 32 // Cannot not suffer toxloss.
|
||||
#define IS_PLANT 64 // Is a treeperson.
|
||||
#define NO_EMBED 128 // Can not have shrapnel or any object embedded into its body
|
||||
#define IS_MECHANICAL 256 // Is a robot.
|
||||
#define ACCEPTS_COOLER 512 // Can wear suit coolers and have them work without a suit.
|
||||
// unused: 0x8000(32768) - higher than this will overflow
|
||||
|
||||
// Base flags for IPCs.
|
||||
#define IS_IPC (NO_BREATHE|NO_SCAN|NO_BLOOD|NO_PAIN|NO_POISON|IS_MECHANICAL)
|
||||
|
||||
// Species spawn flags
|
||||
#define IS_WHITELISTED 0x1 // Must be whitelisted to play.
|
||||
|
||||
@@ -40,12 +40,6 @@ var/global/list/all_languages = list()
|
||||
var/global/list/language_keys = list() // Table of say codes for all languages
|
||||
var/global/list/whitelisted_species = list("Human") // Species that require a whitelist check.
|
||||
var/global/list/playable_species = list("Human") // A list of ALL playable species, whitelisted, latejoin or otherwise.
|
||||
var/global/list/mechanical_species = list(
|
||||
"Baseline Frame" = MECHANICAL_SPECIES_NORMAL,
|
||||
"Shell Frame" = MECHANICAL_SPECIES_NORMAL,
|
||||
"Industrial Frame" = MECHANICAL_SPECIES_INDUSTRIAL,
|
||||
"Hunter-Killer" = MECHANICAL_SPECIES_SPECIAL
|
||||
)
|
||||
|
||||
// Posters
|
||||
var/global/list/poster_designs = list()
|
||||
|
||||
@@ -305,7 +305,6 @@
|
||||
SearchVar(language_keys)
|
||||
SearchVar(whitelisted_species)
|
||||
SearchVar(playable_species)
|
||||
SearchVar(mechanical_species)
|
||||
SearchVar(poster_designs)
|
||||
SearchVar(world_uplinks)
|
||||
SearchVar(hair_styles_list)
|
||||
|
||||
@@ -5,8 +5,18 @@
|
||||
bantype = "changeling"
|
||||
feedback_tag = "changeling_objective"
|
||||
restricted_jobs = list("AI", "Cyborg", "Head of Security", "Captain", "Internal Affairs Agent")
|
||||
|
||||
protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician")
|
||||
restricted_species = list("Baseline Frame","Shell Frame","Industrial Frame")
|
||||
restricted_species = list(
|
||||
"Baseline Frame",
|
||||
"Shell Frame",
|
||||
"Hephaestus G1 Industrial Frame",
|
||||
"Hephaestus G2 Industrial Frame",
|
||||
"Xion Industrial Frame",
|
||||
"Zeng-Hu Mobility Frame",
|
||||
"Bishop Accessory Frame"
|
||||
)
|
||||
|
||||
welcome_text = "Use say \"#g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them."
|
||||
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
|
||||
antaghud_indicator = "hudchangeling"
|
||||
|
||||
@@ -8,7 +8,15 @@ var/datum/antagonist/thrall/vampire_thrall = null
|
||||
feedback_tag = "thrall_objective"
|
||||
restricted_jobs = list("AI", "Cyborg", "Chaplain")
|
||||
protected_jobs = list()
|
||||
restricted_species = list("Baseline Frame","Shell Frame","Industrial Frame")
|
||||
restricted_species = list(
|
||||
"Baseline Frame",
|
||||
"Shell Frame",
|
||||
"Hephaestus G1 Industrial Frame",
|
||||
"Hephaestus G2 Industrial Frame",
|
||||
"Xion Industrial Frame",
|
||||
"Zeng-Hu Mobility Frame",
|
||||
"Bishop Accessory Frame"
|
||||
)
|
||||
welcome_text = "You are a vampire's thrall: a pawn to be commanded by them at will."
|
||||
flags = 0
|
||||
antaghud_indicator = "hudthrall"
|
||||
|
||||
@@ -7,8 +7,19 @@ var/datum/antagonist/vampire/vamp = null
|
||||
bantype = "vampires"
|
||||
feedback_tag = "vampire_objective"
|
||||
restricted_jobs = list("AI", "Cyborg", "Chaplain", "Head of Security", "Captain", "Internal Affairs Agent")
|
||||
|
||||
protected_jobs = list("Security Officer", "Security Cadet", "Warden", "Detective", "Forensic Technician")
|
||||
restricted_species = list("Baseline Frame","Shell Frame","Industrial Frame","Diona")
|
||||
restricted_species = list(
|
||||
"Baseline Frame",
|
||||
"Shell Frame",
|
||||
"Hephaestus G1 Industrial Frame",
|
||||
"Diona",
|
||||
"Hephaestus G2 Industrial Frame",
|
||||
"Xion Industrial Frame",
|
||||
"Zeng-Hu Mobility Frame",
|
||||
"Bishop Accessory Frame"
|
||||
)
|
||||
|
||||
welcome_text = "You are a Vampire! Use the \"<b>Vampire Help</b>\" command to learn about the backstory and mechanics! Stay away from the Chaplain, and use the darkness to your advantage."
|
||||
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
|
||||
antaghud_indicator = "hudvampire"
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
var/flash_time = strength
|
||||
if (istype(O, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = O
|
||||
if(!H.eyecheck() <= 0)
|
||||
if(!H.eyecheck(TRUE) <= 0)
|
||||
continue
|
||||
flash_time *= H.species.flash_mod
|
||||
var/obj/item/organ/eyes/E = H.get_eyes()
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
M.eye_blind = 5
|
||||
return
|
||||
|
||||
var/safety = M:eyecheck()
|
||||
var/safety = M:eyecheck(TRUE)
|
||||
if(safety <= 0)
|
||||
M.Weaken(10)
|
||||
flick("e_flash", M.flash)
|
||||
@@ -194,7 +194,7 @@
|
||||
for(var/obj/item/weapon/cloaking_device/S in M)
|
||||
S.active = 0
|
||||
S.icon_state = "shield0"
|
||||
var/safety = M.eyecheck()
|
||||
var/safety = M.eyecheck(TRUE)
|
||||
if(safety < FLASH_PROTECTION_MODERATE)
|
||||
if(!M.blinded)
|
||||
flick("flash", M.flash)
|
||||
@@ -213,7 +213,7 @@
|
||||
times_used++
|
||||
if(istype(loc, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = loc
|
||||
var/safety = M.eyecheck()
|
||||
var/safety = M.eyecheck(TRUE)
|
||||
if(safety < FLASH_PROTECTION_MODERATE)
|
||||
M.Weaken(10)
|
||||
flick("e_flash", M.flash)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = loc
|
||||
|
||||
var/efficiency = 1 - H.get_pressure_weakness() //you need to have a good seal for effective cooling
|
||||
var/efficiency = !!(H.species.flags & ACCEPTS_COOLER) || 1 - H.get_pressure_weakness() //you need to have a good seal for effective cooling; some species can directly connect to the cooler, so get a free 100% efficiency here
|
||||
var/env_temp = get_environment_temperature() //wont save you from a fire
|
||||
var/temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling)
|
||||
|
||||
@@ -205,9 +205,9 @@
|
||||
if (on)
|
||||
if (attached_to_suit(src.loc))
|
||||
user << "It's switched on and running."
|
||||
else if (istype(src.loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = src.loc
|
||||
if (global.mechanical_species[H.get_species()] == MECHANICAL_SPECIES_INDUSTRIAL)
|
||||
else if (ishuman(loc))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
if (H.species.flags & ACCEPTS_COOLER)
|
||||
user << "It's switched on and running, connected to the cooling systems of [H]."
|
||||
else
|
||||
user << "It's switched on, but not attached to anything."
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
var/eye_safety = 0
|
||||
var/ear_safety = 0
|
||||
if(iscarbon(M))
|
||||
eye_safety = M.eyecheck()
|
||||
eye_safety = M.eyecheck(TRUE)
|
||||
if(ishuman(M))
|
||||
if(istype(M:l_ear, /obj/item/clothing/ears/earmuffs) || istype(M:r_ear, /obj/item/clothing/ears/earmuffs))
|
||||
ear_safety += 2
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/human/M in viewers(T, null))
|
||||
if(M.eyecheck() < FLASH_PROTECTION_MODERATE)
|
||||
if(M.eyecheck(TRUE) < FLASH_PROTECTION_MODERATE)
|
||||
flick("e_flash", M.flash)
|
||||
|
||||
for(var/i=1, i<=deliveryamt, i++)
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/human/M in viewers(T, null))
|
||||
if(M.eyecheck() < FLASH_PROTECTION_MODERATE)
|
||||
if(M.eyecheck(TRUE) < FLASH_PROTECTION_MODERATE)
|
||||
flick("e_flash", M.flash)
|
||||
|
||||
for(var/i=1, i<=deliveryamt, i++)
|
||||
|
||||
@@ -340,16 +340,15 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
var/list/valid_hairstyles = list()
|
||||
|
||||
// Snowflake check for industrials - they're an IPC bodytype but don't have IPC screens.
|
||||
if (mob_species.name != "Industrial Frame")
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
if(pref.gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(pref.gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(!(bodytype in S.species_allowed))
|
||||
continue
|
||||
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
||||
for(var/hairstyle in hair_styles_list)
|
||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||
if(pref.gender == MALE && S.gender == FEMALE)
|
||||
continue
|
||||
if(pref.gender == FEMALE && S.gender == MALE)
|
||||
continue
|
||||
if(!(bodytype in S.species_allowed))
|
||||
continue
|
||||
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
||||
|
||||
if(valid_hairstyles.len)
|
||||
pref.h_style = pick(valid_hairstyles)
|
||||
|
||||
@@ -83,8 +83,14 @@
|
||||
|
||||
//Set species_restricted list
|
||||
switch(target_species)
|
||||
if("Human", "Skrell", "Baseline Frame", "Shell Frame", "Industrial Frame") //humanoid bodytypes
|
||||
species_restricted = list("Human", "Skrell", "Baseline Frame", "Shell Frame", "Industrial Frame") //skrell/humans like to share with IPCs
|
||||
if("Human", "Skrell", "Machine", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame") //humanoid bodytypes
|
||||
species_restricted = list(
|
||||
"Human",
|
||||
"Skrell",
|
||||
"Machine",
|
||||
"Zeng-Hu Mobility Frame",
|
||||
"Bishop Accessory Frame"
|
||||
) //skrell/humans like to share with IPCs
|
||||
else
|
||||
species_restricted = list(target_species)
|
||||
|
||||
@@ -105,8 +111,8 @@
|
||||
|
||||
//Set species_restricted list
|
||||
switch(target_species)
|
||||
if("Skrell")
|
||||
species_restricted = list("Human", "Skrell", "Baseline Frame", "Shell Frame", "Industrial Frame") // skrell helmets like to share
|
||||
if("Skrell", "Human")
|
||||
species_restricted = list("Human", "Skrell", "Machine") // skrell helmets like to share
|
||||
|
||||
else
|
||||
species_restricted = list(target_species)
|
||||
@@ -919,4 +925,4 @@ BLIND // can't see anything
|
||||
icon = 'icons/obj/clothing/rings.dmi'
|
||||
slot_flags = SLOT_GLOVES
|
||||
gender = NEUTER
|
||||
var/undergloves = 1
|
||||
var/undergloves = 1
|
||||
|
||||
@@ -42,18 +42,18 @@
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/terminator
|
||||
species_restricted = list("Machine")
|
||||
species_restricted = list("Heavy Machine")
|
||||
light_overlay = "helmet_light_terminator"
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
/obj/item/clothing/suit/space/rig/terminator
|
||||
species_restricted = list("Machine")
|
||||
species_restricted = list("Heavy Machine")
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/terminator
|
||||
species_restricted = list("Machine")
|
||||
species_restricted = list("Heavy Machine")
|
||||
|
||||
/obj/item/clothing/gloves/rig/terminator
|
||||
species_restricted = list("Machine")
|
||||
species_restricted = list("Heavy Machine")
|
||||
|
||||
/obj/item/weapon/rig/terminator/equipped
|
||||
initial_modules = list(
|
||||
|
||||
@@ -762,7 +762,7 @@
|
||||
|
||||
///eyecheck()
|
||||
///Returns a number between -1 to 2
|
||||
/mob/living/carbon/human/eyecheck()
|
||||
/mob/living/carbon/human/eyecheck(ignore_inherent = FALSE)
|
||||
if(!species.vision_organ || !species.has_organ[species.vision_organ]) //No eyes, can't hurt them.
|
||||
return FLASH_PROTECTION_MAJOR
|
||||
|
||||
@@ -770,6 +770,9 @@
|
||||
if (I && I.status & ORGAN_CUT_AWAY)
|
||||
return FLASH_PROTECTION_MAJOR
|
||||
|
||||
if (ignore_inherent)
|
||||
return flash_protection
|
||||
|
||||
return species.inherent_eye_protection ? max(species.inherent_eye_protection, flash_protection) : flash_protection
|
||||
|
||||
//Used by various things that knock people out by applying blunt trauma to the head.
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
M.apply_damage(rand(1,5), BURN)
|
||||
|
||||
for(M in viewers(3, null))
|
||||
var/safety = M:eyecheck()
|
||||
var/safety = M:eyecheck(TRUE)
|
||||
if(!safety)
|
||||
if(!M.blinded)
|
||||
flick("flash", M.flash)
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
// Usually eyes, but can be something else.
|
||||
// If `no_synthetic` is TRUE, returns null for mobs that are mechanical, or for mechanical eyes.
|
||||
/mob/living/carbon/human/proc/get_eyes(no_synthetic = FALSE)
|
||||
if (!species.vision_organ || !species.has_organ[species.vision_organ] || (no_synthetic && (global.mechanical_species[get_species()])))
|
||||
if (!species.vision_organ || !species.has_organ[species.vision_organ] || (no_synthetic && (species.flags & IS_MECHANICAL)))
|
||||
return null
|
||||
|
||||
var/obj/item/organ/O = internal_organs_by_name[species.vision_organ]
|
||||
|
||||
@@ -58,10 +58,11 @@
|
||||
|
||||
if (drowsyness) tally += 6
|
||||
|
||||
if(FAT in src.mutations)
|
||||
tally += 1.5
|
||||
if (bodytemperature < 283.222)
|
||||
tally += (283.222 - bodytemperature) / 10 * 1.75
|
||||
if (!(species.flags & IS_MECHANICAL)) // Machines don't move slower when cold.
|
||||
if(FAT in src.mutations)
|
||||
tally += 1.5
|
||||
if (bodytemperature < 283.222)
|
||||
tally += (283.222 - bodytemperature) / 10 * 1.75
|
||||
|
||||
tally += max(2 * stance_damage, 0) //damaged/missing feet or legs is slow
|
||||
if(mRun in mutations)
|
||||
|
||||
@@ -78,11 +78,31 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
|
||||
/mob/living/carbon/human/type_c
|
||||
layer = 5
|
||||
|
||||
/mob/living/carbon/human/msai_tajara/Initialize(mapload)
|
||||
h_style = "Tajaran Ears"
|
||||
. = ..(mapload, "M'sai Tajara")
|
||||
|
||||
/mob/living/carbon/human/zhankhazan_tajara/Initialize(mapload)
|
||||
h_style = "Tajaran Ears"
|
||||
. = ..(mapload, "Zhan-Khazan Tajara")
|
||||
|
||||
/mob/living/carbon/human/industrial/Initialize(mapload)
|
||||
..(mapload, "Industrial Frame")
|
||||
. = ..(mapload, "Hephaestus G1 Industrial Frame")
|
||||
|
||||
/mob/living/carbon/human/shell/Initialize(mapload)
|
||||
..(mapload, "Shell Frame")
|
||||
. = ..(mapload, "Shell Frame")
|
||||
|
||||
/mob/living/carbon/human/industrial_hephaestus/Initialize(mapload)
|
||||
. = ..(mapload, "Hephaestus G2 Industrial Frame")
|
||||
|
||||
/mob/living/carbon/human/industrial_xion/Initialize(mapload)
|
||||
. = ..(mapload, "Xion Industrial Frame")
|
||||
|
||||
/mob/living/carbon/human/industrial_zenghu/Initialize(mapload)
|
||||
. = ..(mapload, "Zeng-Hu Mobility Frame")
|
||||
|
||||
/mob/living/carbon/human/industrial_bishop/Initialize(mapload)
|
||||
. = ..(mapload, "Bishop Accessory Frame")
|
||||
|
||||
/mob/living/carbon/human/terminator/Initialize(mapload)
|
||||
. = ..(mapload, "Hunter-Killer")
|
||||
|
||||
@@ -115,9 +115,6 @@
|
||||
// Returns 0 (equals 0 %) if sealed in an undamaged suit, 1 if unprotected (equals 100%).
|
||||
// Suitdamage can modifiy this in 10% steps.
|
||||
/mob/living/carbon/human/proc/get_pressure_weakness()
|
||||
if (global.mechanical_species[get_species()] == MECHANICAL_SPECIES_INDUSTRIAL)
|
||||
return 0 // woo, back-mounted cooling!
|
||||
|
||||
var/pressure_adjustment_coefficient = 1 // Assume no protection at first.
|
||||
|
||||
if(wear_suit && (wear_suit.item_flags & STOPPRESSUREDAMAGE) && head && (head.item_flags & STOPPRESSUREDAMAGE)) // Complete set of pressure-proof suit worn, assume fully sealed.
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
var/icon_y_offset = 0
|
||||
var/eyes = "eyes_s" // Icon for eyes.
|
||||
var/has_floating_eyes // Eyes will overlay over darkness (glow)
|
||||
var/eyes_icon_blend = ICON_ADD // The icon blending mode to use for eyes.
|
||||
var/blood_color = "#A10808" // Red.
|
||||
var/flesh_color = "#FFC896" // Pink.
|
||||
var/examine_color // The color of the species' name in the examine text. Defaults to flesh_color if unset.
|
||||
@@ -462,8 +463,8 @@
|
||||
H.hud_used.move_intent.update_move_icon(H)
|
||||
return 1
|
||||
|
||||
/datum/species/proc/get_light_color(hair_style)
|
||||
/datum/species/proc/get_light_color(mob/living/carbon/human/H)
|
||||
return
|
||||
|
||||
/datum/species/proc/can_breathe_water()
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
sprint_temperature_factor = 1.3
|
||||
sprint_charge_factor = 0.85
|
||||
|
||||
/datum/species/machine/shell/get_light_color(hair_style)
|
||||
/datum/species/machine/shell/get_light_color()
|
||||
return
|
||||
|
||||
/datum/species/machine/shell/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
@@ -69,20 +69,17 @@
|
||||
check_tag(H, H.client)
|
||||
|
||||
/datum/species/machine/industrial
|
||||
name = "Industrial Frame"
|
||||
name = "Hephaestus G1 Industrial Frame"
|
||||
short_name = "ind"
|
||||
name_plural = "Industrials"
|
||||
bald = 1
|
||||
bodytype = "Heavy Machine"
|
||||
|
||||
brute_mod = 0.8
|
||||
burn_mod = 1.1
|
||||
slowdown = 4
|
||||
|
||||
blurb = "Tough units made for engineering and security with simple exteriors, roughly resembling humans. No job restrictions. Heavy emphasis on \
|
||||
engineering/security/EMT. Developed also by Hephaestus Industries, the Industrial Frame trades the common availability of the Baseline Frame for \
|
||||
advanced durability and increased longevity. Constructed of durable plasteel, the frame can withstand a great deal more abuse, and its coolant systems \
|
||||
and internal cell have been improved to allow for much more strenuous work. However, due to an unfortunate fault in the capacitor, actual battery charge \
|
||||
tends to be short."
|
||||
blurb = "The first commercialized attempt Hephaestus Industries made at an industrial-type IPC. Designed for extra durability and increased weight loads, the first generation Industrial was considered a success, though it possessed some issues. A limited power cell and actuators designed for heavy lifting and not locomotion resulted in a slow and frequently charging machine. A special addition to the chassis makes up for these drawbacks - the ability to simply slot a suit cooling unit onto the model's back and make use of its built-in heat transferal conduits, allowing the Industrial to perform EVA without any extra peripherals such as a voidsuit."
|
||||
|
||||
icobase = 'icons/mob/human_races/r_industrial.dmi'
|
||||
deform = 'icons/mob/human_races/r_industrial.dmi'
|
||||
@@ -104,6 +101,7 @@
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/industrial)
|
||||
)
|
||||
|
||||
flags = IS_IPC | ACCEPTS_COOLER
|
||||
appearance_flags = HAS_EYE_COLOR
|
||||
|
||||
heat_level_1 = 600
|
||||
@@ -119,7 +117,7 @@
|
||||
sprint_temperature_factor = 0.9
|
||||
sprint_charge_factor = 1.1
|
||||
|
||||
/datum/species/machine/industrial/get_light_color(hair_style)
|
||||
/datum/species/machine/industrial/get_light_color()
|
||||
return LIGHT_COLOR_TUNGSTEN
|
||||
|
||||
/datum/species/machine/industrial/handle_death(var/mob/living/carbon/human/H)
|
||||
@@ -130,6 +128,7 @@
|
||||
short_name = "hks"
|
||||
name_plural = "HKs"
|
||||
bald = 1
|
||||
bodytype = "Heavy Machine"
|
||||
|
||||
blurb = "\[REDACTED\]"
|
||||
|
||||
@@ -166,7 +165,7 @@
|
||||
body_temperature = null
|
||||
passive_temp_gain = 0
|
||||
|
||||
flags = NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_POISON
|
||||
flags = IS_IPC | ACCEPTS_COOLER
|
||||
spawn_flags = IS_RESTRICTED
|
||||
appearance_flags = HAS_HAIR_COLOR
|
||||
vision_flags = DEFAULT_SIGHT | SEE_MOBS
|
||||
@@ -215,7 +214,7 @@
|
||||
sprint_temperature_factor = 0.6
|
||||
sprint_charge_factor = 0.3
|
||||
|
||||
/datum/species/machine/terminator/get_light_color(hair_style)
|
||||
/datum/species/machine/terminator/get_light_color()
|
||||
return
|
||||
|
||||
/datum/species/machine/terminator/handle_death(var/mob/living/carbon/human/H)
|
||||
@@ -224,3 +223,147 @@
|
||||
spawn(15)
|
||||
explosion(H.loc, -1, 1, 5)
|
||||
H.gib()
|
||||
|
||||
// -- Branded units --
|
||||
|
||||
/datum/species/machine/industrial/hephaestus
|
||||
name = "Hephaestus G2 Industrial Frame"
|
||||
short_name = "hif"
|
||||
bodytype = "Heavy Machine"
|
||||
|
||||
icobase = 'icons/mob/human_races/r_ind_hephaestus.dmi'
|
||||
deform = 'icons/mob/human_races/r_ind_hephaestus.dmi'
|
||||
|
||||
eyes = "heph_eyes"
|
||||
slowdown = 6
|
||||
brute_mod = 0.7
|
||||
|
||||
examine_color = "#688359"
|
||||
|
||||
blurb = "An extremely durable and heavy Industrial model branded by Hephaestus Industries. It is their improved Industrial model, with thicker plating and improved power cell. Its actuators struggle to carry the immense weight, however, making the unit quite slow. This chassis would be seen in roles where it would be dangerous or inefficient to use a less durable unit, such as engineering, security, and mining. While this unit still possesses built-in cooling conduits, the increased plating and thickness of said plating proved a difficult challenge for the engineers to develop good cooling, so the unit suffers somewhat from increased heat loads. Overtaxing its hardware will quickly lead to overheating."
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/industrial/hephaestus),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/industrial/hephaestus),
|
||||
"head" = list("path" = /obj/item/organ/external/head/industrial/hephaestus),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm/industrial/hephaestus),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right/industrial/hephaestus),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg/industrial/hephaestus),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right/industrial/hephaestus),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand/industrial/hephaestus),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/industrial/hephaestus),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/industrial/hephaestus),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/industrial/hephaestus)
|
||||
)
|
||||
|
||||
/datum/species/machine/industrial/hephaestus/get_light_color(mob/living/carbon/human/H)
|
||||
if (istype(H))
|
||||
return rgb(H.r_eyes, H.g_eyes, H.b_eyes)
|
||||
|
||||
/datum/species/machine/industrial/xion
|
||||
name = "Xion Industrial Frame"
|
||||
short_name = "xmf"
|
||||
bodytype = "Heavy Machine"
|
||||
|
||||
icobase = 'icons/mob/human_races/r_ind_xion.dmi'
|
||||
deform = 'icons/mob/human_races/r_ind_xion.dmi'
|
||||
|
||||
eyes = "xion_eyes"
|
||||
flags = IS_IPC
|
||||
passive_temp_gain = 5
|
||||
|
||||
examine_color = "#bc4b00"
|
||||
|
||||
blurb = "The Xion Manufacturing Group, being a subsidiary of Hephaestus Industries, saw the original Industrial models and wanted to develop their own chassis based off of the original design. The result is the Xion Industrial model. Sturdy and strong, this chassis is quite powerful and equally durable, with an ample power cell and improved actuators for carrying the increased weight of the body. The Xion model also retains sturdiness without covering the chassis in plating, allowing for the cooling systems to vent heat much easier than the Hephaestus-brand model. The Group did not wish to leave exposed cooling conduits, however, so this chassis will require a suit to perform EVA."
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/industrial/xion),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/industrial/xion),
|
||||
"head" = list("path" = /obj/item/organ/external/head/industrial/xion),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm/industrial/xion),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right/industrial/xion),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg/industrial/xion),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right/industrial/xion),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand/industrial/xion),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/industrial/xion),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/industrial/xion),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/industrial/xion)
|
||||
)
|
||||
|
||||
/datum/species/machine/industrial/xion/get_light_color(mob/living/carbon/human/H)
|
||||
if (istype(H))
|
||||
return rgb(H.r_eyes, H.g_eyes, H.b_eyes)
|
||||
|
||||
/datum/species/machine/zenghu
|
||||
name = "Zeng-Hu Mobility Frame"
|
||||
short_name = "zhf"
|
||||
bodytype = null
|
||||
|
||||
icobase = 'icons/mob/human_races/r_ind_zenghu.dmi'
|
||||
deform = 'icons/mob/human_races/r_ind_zenghu.dmi'
|
||||
|
||||
eyes = "zenghu_eyes"
|
||||
brute_mod = 1.5
|
||||
sprint_speed_factor = 1.5
|
||||
|
||||
appearance_flags = HAS_EYE_COLOR
|
||||
|
||||
examine_color = "#ff00ff"
|
||||
|
||||
blurb = "Being a corporation focused primarily on medical sciences and treatments, Zeng-Hu Pharmaceuticals had little interest in the market of synthetics in the beginning (especially considering a good portion of Zeng-Hu employees are Skrellian). However, after seeing the advances in almost all fields of the galactic market after the advent of synthetics, Zeng-Hu set aside some funds for their own robotics department, focused mainly on medical service and even science related operations. Having taken some inspiration from biological life, the chassis has an interesting leg design: digitigrade legs provide the chassis with enhanced speed. A downside to this development was the reduction of metals on the chassis. Most plates covering the sensitive interior electronics are polymer casts to reduce the weight of the unit, resulting in a not-so-durable android."
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/industrial/zenghu),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/industrial/zenghu),
|
||||
"head" = list("path" = /obj/item/organ/external/head/industrial/zenghu),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm/industrial/zenghu),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right/industrial/zenghu),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg/industrial/zenghu),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right/industrial/zenghu),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand/industrial/zenghu),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/industrial/zenghu),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/industrial/zenghu),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/industrial/zenghu)
|
||||
)
|
||||
|
||||
/datum/species/machine/zenghu/get_light_color(mob/living/carbon/human/H)
|
||||
if (istype(H))
|
||||
return rgb(H.r_eyes, H.g_eyes, H.b_eyes)
|
||||
|
||||
/datum/species/machine/bishop
|
||||
name = "Bishop Accessory Frame"
|
||||
short_name = "bcf"
|
||||
bodytype = null
|
||||
|
||||
icobase = 'icons/mob/human_races/r_ind_bishop.dmi'
|
||||
deform = 'icons/mob/human_races/r_ind_bishop.dmi'
|
||||
|
||||
eyes = "bishop_eyes"
|
||||
eyes_icon_blend = ICON_MULTIPLY
|
||||
sprint_charge_factor = 0.25
|
||||
max_nutrition_factor = 1.75
|
||||
brute_mod = 1.2
|
||||
|
||||
appearance_flags = HAS_EYE_COLOR
|
||||
|
||||
examine_color = "#00afea"
|
||||
|
||||
blurb = "Bishop Cybernetics frames are among the sleeker, flashier frames widely produced for IPCs. This brand-new, high end design has a focus on pioneering energy efficiency without sacrifice, fitting to Bishop's company vision. Cutting-edge technology in power management means this frame can operate longer while running more demanding processing algorithms than most. This extreme push to minimize power draw means this frame can be equipped with all sorts of extra equipment: a hologram for a face, flashing status displays and embedded lights solely meant for show. The one thing holding this frame back from perfection is the same common criticism leveled against almost all Bishop products: the shiny chrome and glass meant to put all of this tech on display means it's exposed and fragile. It's because of Bishop's unrelenting pursuit of vanity in their designs that these frames often suffer from issues with reliability and struggle to safely perform the same work as cheaper, more rugged frames."
|
||||
|
||||
has_limbs = list(
|
||||
"chest" = list("path" = /obj/item/organ/external/chest/industrial/bishop),
|
||||
"groin" = list("path" = /obj/item/organ/external/groin/industrial/bishop),
|
||||
"head" = list("path" = /obj/item/organ/external/head/industrial/bishop),
|
||||
"l_arm" = list("path" = /obj/item/organ/external/arm/industrial/bishop),
|
||||
"r_arm" = list("path" = /obj/item/organ/external/arm/right/industrial/bishop),
|
||||
"l_leg" = list("path" = /obj/item/organ/external/leg/industrial/bishop),
|
||||
"r_leg" = list("path" = /obj/item/organ/external/leg/right/industrial/bishop),
|
||||
"l_hand" = list("path" = /obj/item/organ/external/hand/industrial/bishop),
|
||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/industrial/bishop),
|
||||
"l_foot" = list("path" = /obj/item/organ/external/foot/industrial/bishop),
|
||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/industrial/bishop)
|
||||
)
|
||||
|
||||
/datum/species/machine/bishop/get_light_color(mob/living/carbon/human/H)
|
||||
if (istype(H))
|
||||
return rgb(H.r_eyes, H.g_eyes, H.b_eyes)
|
||||
|
||||
@@ -398,11 +398,7 @@
|
||||
age_max = 30
|
||||
economic_modifier = 3
|
||||
|
||||
blurb = "IPCs are, quite simply, 'Integrated Positronic Chassis'. In this scenario, positronic does not mean anything significant - it is a nickname given \
|
||||
to all advanced processing units, based on the works of vintage writer Isaac Asimov. The long of the short is that they represent all unbound synthetic \
|
||||
units.Assembly produced, simple IPC units. Simple skeleton designed for minimal use, generally in civilian roles. The most common form of chassis used by \
|
||||
IPCs, first designed and produced by Hephaestus Industries in the early years of synthetic production. It has become ubiquitous, and for all of its many \
|
||||
faults - its shoddy coolant systems and fragile frame - it would be very odd to see a standard IPC without it."
|
||||
blurb = "IPCs are, quite simply, \"Integrated Positronic Chassis.\" In this scenario, 'positronic' implies that the chassis possesses a positronic processing core (or positronic brain), meaning that an IPC must be positronic to be considered an IPC. The Baseline model is more of a category - the long of the short is that they represent all unbound synthetic units. Baseline models cover anything that is not an Industrial chassis or a Shell chassis. They can be custom made or assembly made. The most common feature of the Baseline model is a simple design, skeletal or semi-humanoid, and ordinary atmospheric diffusion cooling systems."
|
||||
|
||||
icobase = 'icons/mob/human_races/r_machine.dmi'
|
||||
deform = 'icons/mob/human_races/r_machine.dmi'
|
||||
@@ -447,7 +443,7 @@
|
||||
body_temperature = null
|
||||
passive_temp_gain = 10 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.
|
||||
|
||||
flags = NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_POISON
|
||||
flags = IS_IPC
|
||||
appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR
|
||||
spawn_flags = CAN_JOIN | IS_WHITELISTED
|
||||
|
||||
@@ -565,10 +561,13 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
var/DBQuery/update_query = dbcon.NewQuery("UPDATE ss13_ipc_tracking SET tag_status = :status: WHERE player_ckey = :ckey: AND character_name = :character_name:")
|
||||
update_query.Execute(query_details)
|
||||
|
||||
/datum/species/machine/get_light_color(hair_style)
|
||||
/datum/species/machine/get_light_color(mob/living/carbon/human/H)
|
||||
if (!istype(H))
|
||||
return null
|
||||
|
||||
// I hate this, but I can't think of a better way that doesn't involve
|
||||
// rewriting hair.
|
||||
switch (hair_style)
|
||||
switch (H.h_style)
|
||||
if ("pink IPC screen")
|
||||
return LIGHT_COLOR_PINK
|
||||
|
||||
|
||||
@@ -387,7 +387,7 @@ There are several things that need to be remembered:
|
||||
if (has_visible_hair)
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
|
||||
if (hair_style)
|
||||
var/col = species.get_light_color(h_style) || "#FFFFFF"
|
||||
var/col = species.get_light_color(src) || "#FFFFFF"
|
||||
set_light(species.light_range, species.light_power, col, uv = 0, angle = LIGHT_WIDE)
|
||||
else
|
||||
set_light(0)
|
||||
|
||||
@@ -725,7 +725,7 @@
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/is_mechanical()
|
||||
return !!global.mechanical_species[get_species()]
|
||||
return species && (species.flags & IS_MECHANICAL)
|
||||
|
||||
/mob/proc/is_ready()
|
||||
return client && !!mind
|
||||
|
||||
@@ -72,9 +72,9 @@
|
||||
|
||||
/proc/isipc(A)
|
||||
. = 0
|
||||
if(istype(A, /mob/living/carbon/human))
|
||||
if(ishuman(A))
|
||||
var/mob/living/carbon/human/H = A
|
||||
. = !!global.mechanical_species[H.get_species()]
|
||||
. = H.species && (H.species.flags & IS_MECHANICAL)
|
||||
|
||||
/proc/isvox(A)
|
||||
if(istype(A, /mob/living/carbon/human))
|
||||
|
||||
@@ -1161,6 +1161,7 @@
|
||||
|
||||
var/body_parts = list() //A list of bodyparts this covers, TODO: port defines for organs someday
|
||||
var/is_genetic = TRUE // If TRUE, the marking is considered genetic and is embedded into DNA.
|
||||
var/is_painted = FALSE // If TRUE, the marking can be put on prosthetics/robolimbs.
|
||||
|
||||
tiger_stripes
|
||||
name = "Tiger Stripes (Tajara)"
|
||||
@@ -1269,3 +1270,83 @@
|
||||
icon_state = "una_scutes"
|
||||
body_parts = list("chest")
|
||||
species_allowed = list("Unathi")
|
||||
|
||||
|
||||
// Branded IPC markings - disabled for now, some layering issues.
|
||||
/*
|
||||
bishop
|
||||
icon = 'icons/mob/human_races/markings_bishop.dmi'
|
||||
icon_state = "face_lights"
|
||||
icon_blend_mode = ICON_MULTIPLY
|
||||
name = "Face Color"
|
||||
body_parts = list("head")
|
||||
species_allowed = list("Bishop Accessory Frame")
|
||||
is_painted = TRUE
|
||||
|
||||
monoeye
|
||||
name = "Eye"
|
||||
icon_state = "monoeye"
|
||||
|
||||
plating
|
||||
name = "Plating (Full)"
|
||||
icon_state = "plating"
|
||||
body_parts = list("chest", "l_arm", "r_arm", "l_leg", "r_leg")
|
||||
|
||||
l_arm
|
||||
name = "Plating (Left arm)"
|
||||
body_parts = list("l_arm")
|
||||
|
||||
r_arm
|
||||
name = "Plating (Right arm)"
|
||||
body_parts = list("r_arm")
|
||||
|
||||
l_leg
|
||||
name = "Plating (Left leg)"
|
||||
body_parts = list("l_leg")
|
||||
|
||||
r_leg
|
||||
name = "Plating (Right leg)"
|
||||
body_parts = list("r_leg")
|
||||
|
||||
chest
|
||||
name = "Plating (Chest)"
|
||||
body_parts = list("chest")
|
||||
|
||||
zenghu
|
||||
icon = 'icons/mob/human_races/markings_zenghu.dmi'
|
||||
icon_state = "outer"
|
||||
icon_blend_mode = ICON_MULTIPLY
|
||||
name = "Outer Finish"
|
||||
body_parts = list("head")
|
||||
species_allowed = list("Zeng-Hu Mobility Frame")
|
||||
is_painted = TRUE
|
||||
|
||||
inner
|
||||
name = "Inner Finish"
|
||||
icon_state = "inner"
|
||||
body_parts = list("l_foot", "r_foot", "l_hand", "r_hand", "l_leg", "r_leg")
|
||||
|
||||
l_foot
|
||||
name = "Inner Finish (Left Leg)"
|
||||
body_parts = list("l_foot", "l_leg")
|
||||
|
||||
r_foot
|
||||
name = "Inner Finish (Right Leg)"
|
||||
body_parts = list("r_foot", "r_leg")
|
||||
|
||||
l_hand
|
||||
name = "Inner Finish (Left Arm)"
|
||||
body_parts = list("l_hand", "l_arm")
|
||||
|
||||
r_hand
|
||||
name = "Inner Finish (Right Arm)"
|
||||
body_parts = list("r_hand", "r_arm")
|
||||
|
||||
crest_leser
|
||||
name = "Head Coloration (Lesser)"
|
||||
icon_state = "lesser"
|
||||
|
||||
crest_greater
|
||||
name = "Head Coloration (Greater)"
|
||||
icon_state = "greater"
|
||||
*/
|
||||
|
||||
@@ -65,9 +65,9 @@
|
||||
if (!eyes_icon)
|
||||
eyes_icon = new/icon('icons/mob/human_face/eyes.dmi', species.eyes)
|
||||
if(eyecolor)
|
||||
eyes_icon.Blend(eyecolor, ICON_ADD)
|
||||
eyes_icon.Blend(eyecolor, species.eyes_icon_blend)
|
||||
else
|
||||
eyes_icon.Blend(rgb(128,0,0), ICON_ADD)
|
||||
eyes_icon.Blend(rgb(128,0,0), species.eyes_icon_blend)
|
||||
|
||||
SSicon_cache.human_eye_cache[cache_key] = eyes_icon
|
||||
|
||||
@@ -83,22 +83,7 @@
|
||||
add_overlay(lip_icon)
|
||||
mob_icon.Blend(lip_icon, ICON_OVERLAY)
|
||||
|
||||
if (!cached_markings)
|
||||
update_marking_cache()
|
||||
|
||||
for(var/M in cached_markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = cached_markings[M]["datum"]
|
||||
var/m_color = cached_markings[M]["color"]
|
||||
var/cache_key = "[mark_style.icon]-[mark_style.icon_state]-[limb_name]-[m_color]"
|
||||
|
||||
var/icon/finished_icon = SSicon_cache.markings_cache[cache_key]
|
||||
if (!finished_icon)
|
||||
finished_icon = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[limb_name]")
|
||||
finished_icon.Blend(m_color, ICON_ADD)
|
||||
SSicon_cache.markings_cache[cache_key] = finished_icon
|
||||
|
||||
add_overlay(finished_icon) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(finished_icon, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
apply_markings()
|
||||
|
||||
add_overlay(owner.generate_hair_icon())
|
||||
|
||||
@@ -106,6 +91,28 @@
|
||||
|
||||
return mob_icon
|
||||
|
||||
/obj/item/organ/external/proc/apply_markings(restrict_to_robotic = FALSE)
|
||||
if (!cached_markings)
|
||||
update_marking_cache()
|
||||
|
||||
if (LAZYLEN(cached_markings))
|
||||
for(var/M in cached_markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = cached_markings[M]["datum"]
|
||||
if (restrict_to_robotic && !mark_style.is_painted)
|
||||
continue
|
||||
|
||||
var/m_color = cached_markings[M]["color"]
|
||||
var/cache_key = "[mark_style.icon]-[mark_style.icon_state]-[limb_name]-[m_color]"
|
||||
|
||||
var/icon/finished_icon = SSicon_cache.markings_cache[cache_key]
|
||||
if (!finished_icon)
|
||||
finished_icon = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[limb_name]")
|
||||
finished_icon.Blend(m_color, mark_style.icon_blend_mode)
|
||||
SSicon_cache.markings_cache[cache_key] = finished_icon
|
||||
|
||||
add_overlay(finished_icon) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(finished_icon, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
|
||||
/obj/item/organ/external/proc/get_icon(var/skeletal)
|
||||
|
||||
var/gender = "f"
|
||||
@@ -116,6 +123,7 @@
|
||||
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
if(painted && skin_color)
|
||||
mob_icon.Blend(skin_color, ICON_ADD)
|
||||
apply_markings(restrict_to_robotic = TRUE)
|
||||
else
|
||||
if(!dna)
|
||||
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
|
||||
@@ -150,23 +158,7 @@
|
||||
else if(skin_color)
|
||||
mob_icon.Blend(skin_color, ICON_ADD)
|
||||
|
||||
//Body markings, does not include head, duplicated (sadly) above.
|
||||
if (!cached_markings)
|
||||
update_marking_cache()
|
||||
|
||||
for(var/M in cached_markings)
|
||||
var/datum/sprite_accessory/marking/mark_style = cached_markings[M]["datum"]
|
||||
var/m_color = cached_markings[M]["color"]
|
||||
var/cache_key = "[mark_style.icon]-[mark_style.icon_state]-[limb_name]-[m_color]"
|
||||
|
||||
var/icon/finished_icon = SSicon_cache.markings_cache[cache_key]
|
||||
if (!finished_icon)
|
||||
finished_icon = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[limb_name]")
|
||||
finished_icon.Blend(m_color, ICON_ADD)
|
||||
SSicon_cache.markings_cache[cache_key] = finished_icon
|
||||
|
||||
add_overlay(finished_icon) //So when it's not on your body, it has icons
|
||||
mob_icon.Blend(finished_icon, ICON_OVERLAY) //So when it's on your body, it has icons
|
||||
apply_markings()
|
||||
|
||||
if(body_hair && hair_color)
|
||||
var/list/limb_icon_cache = SSicon_cache.body_hair_cache
|
||||
|
||||
@@ -31,22 +31,22 @@ var/global/datum/robolimb/basic_robolimb
|
||||
/datum/robolimb/bishop
|
||||
company = PROSTHETIC_BC
|
||||
desc = "This limb is coated in a brilliant silver illuminated from the inside with blue status lights."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/bishop.dmi'
|
||||
icon = 'icons/mob/human_races/r_ind_bishop.dmi'
|
||||
|
||||
/datum/robolimb/hesphaistos
|
||||
company = PROSTHETIC_HI
|
||||
desc = "This limb is covered in thick plating coated with a militaristic olive drab."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/hesphaistos.dmi'
|
||||
icon = 'icons/mob/human_races/r_ind_hephaestus.dmi'
|
||||
|
||||
/datum/robolimb/zenghu
|
||||
company = PROSTHETIC_ZH
|
||||
desc = "This limb has sleek white plating over a graphene-based nanofiber weave."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/zenghu.dmi'
|
||||
icon = 'icons/mob/human_races/r_ind_zenghu.dmi'
|
||||
|
||||
/datum/robolimb/xion
|
||||
company = PROSTHETIC_XMG
|
||||
desc = "This limb has a minimalist black and grey casing with exposed orange wiring channels."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/xion.dmi'
|
||||
icon = 'icons/mob/human_races/r_ind_xion.dmi'
|
||||
|
||||
/datum/robolimb/ipc
|
||||
company = PROSTHETIC_IPC
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
// Heads
|
||||
/obj/item/organ/external/head/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/head/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/head/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/head/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Chest
|
||||
/obj/item/organ/external/chest/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/chest/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/chest/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/chest/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Groin
|
||||
/obj/item/organ/external/groin/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/groin/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/groin/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/groin/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Left Arm
|
||||
/obj/item/organ/external/arm/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/arm/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/arm/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/arm/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Right Arm
|
||||
/obj/item/organ/external/arm/right/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/arm/right/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/arm/right/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/arm/right/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Left Leg
|
||||
/obj/item/organ/external/leg/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/leg/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/leg/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/leg/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Right Leg
|
||||
/obj/item/organ/external/leg/right/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/leg/right/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/leg/right/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/leg/right/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Left foot
|
||||
/obj/item/organ/external/foot/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/foot/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/foot/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/foot/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Right foot
|
||||
/obj/item/organ/external/foot/right/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/foot/right/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/foot/right/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/foot/right/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
/obj/item/organ/external/hand/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/hand/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/hand/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/hand/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
|
||||
// Right hand
|
||||
/obj/item/organ/external/hand/right/industrial/hephaestus
|
||||
robotize_type = PROSTHETIC_HI
|
||||
|
||||
/obj/item/organ/external/hand/right/industrial/xion
|
||||
robotize_type = PROSTHETIC_XMG
|
||||
|
||||
/obj/item/organ/external/hand/right/industrial/zenghu
|
||||
robotize_type = PROSTHETIC_ZH
|
||||
|
||||
/obj/item/organ/external/hand/right/industrial/bishop
|
||||
robotize_type = PROSTHETIC_BC
|
||||
@@ -1070,41 +1070,43 @@
|
||||
required = /obj/item/slime_extract/gold
|
||||
|
||||
/datum/chemical_reaction/slime/crit/on_reaction(var/datum/reagents/holder)
|
||||
var/blocked = list(/mob/living/simple_animal/hostile,
|
||||
/mob/living/simple_animal/hostile/pirate,
|
||||
/mob/living/simple_animal/hostile/pirate/ranged,
|
||||
/mob/living/simple_animal/hostile/russian,
|
||||
/mob/living/simple_animal/hostile/russian/ranged,
|
||||
/mob/living/simple_animal/hostile/syndicate,
|
||||
/mob/living/simple_animal/hostile/syndicate/melee,
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/space,
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged,
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space,
|
||||
/mob/living/simple_animal/hostile/alien/queen/large,
|
||||
/mob/living/simple_animal/hostile/faithless,
|
||||
/mob/living/simple_animal/hostile/faithless/wizard,
|
||||
/mob/living/simple_animal/hostile/retaliate,
|
||||
/mob/living/simple_animal/hostile/retaliate/clown,
|
||||
/mob/living/simple_animal/hostile/alien,
|
||||
/mob/living/simple_animal/hostile/alien/drone,
|
||||
/mob/living/simple_animal/hostile/alien/sentinel,
|
||||
/mob/living/simple_animal/hostile/alien/queen,
|
||||
/mob/living/simple_animal/hostile/alien/queen/large,
|
||||
/mob/living/simple_animal/hostile/true_changeling,
|
||||
/mob/living/simple_animal/hostile/commanded,
|
||||
/mob/living/simple_animal/hostile/commanded/dog,
|
||||
/mob/living/simple_animal/hostile/commanded/dog/amaskan,
|
||||
/mob/living/simple_animal/hostile/commanded/dog/columbo,
|
||||
/mob/living/simple_animal/hostile/commanded/dog/pug,
|
||||
/mob/living/simple_animal/hostile/commanded/bear,
|
||||
/mob/living/simple_animal/hostile/greatworm,
|
||||
/mob/living/simple_animal/hostile/lesserworm,
|
||||
/mob/living/simple_animal/hostile/greatwormking
|
||||
)//exclusion list for things you don't want the reaction to create.
|
||||
var/blocked = list(
|
||||
/mob/living/simple_animal/hostile,
|
||||
/mob/living/simple_animal/hostile/pirate,
|
||||
/mob/living/simple_animal/hostile/pirate/ranged,
|
||||
/mob/living/simple_animal/hostile/russian,
|
||||
/mob/living/simple_animal/hostile/russian/ranged,
|
||||
/mob/living/simple_animal/hostile/syndicate,
|
||||
/mob/living/simple_animal/hostile/syndicate/melee,
|
||||
/mob/living/simple_animal/hostile/syndicate/melee/space,
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged,
|
||||
/mob/living/simple_animal/hostile/syndicate/ranged/space,
|
||||
/mob/living/simple_animal/hostile/alien/queen/large,
|
||||
/mob/living/simple_animal/hostile/faithless,
|
||||
/mob/living/simple_animal/hostile/faithless/wizard,
|
||||
/mob/living/simple_animal/hostile/retaliate,
|
||||
/mob/living/simple_animal/hostile/retaliate/clown,
|
||||
/mob/living/simple_animal/hostile/alien,
|
||||
/mob/living/simple_animal/hostile/alien/drone,
|
||||
/mob/living/simple_animal/hostile/alien/sentinel,
|
||||
/mob/living/simple_animal/hostile/alien/queen,
|
||||
/mob/living/simple_animal/hostile/alien/queen/large,
|
||||
/mob/living/simple_animal/hostile/true_changeling,
|
||||
/mob/living/simple_animal/hostile/commanded,
|
||||
/mob/living/simple_animal/hostile/commanded/dog,
|
||||
/mob/living/simple_animal/hostile/commanded/dog/amaskan,
|
||||
/mob/living/simple_animal/hostile/commanded/dog/columbo,
|
||||
/mob/living/simple_animal/hostile/commanded/dog/pug,
|
||||
/mob/living/simple_animal/hostile/commanded/bear,
|
||||
/mob/living/simple_animal/hostile/greatworm,
|
||||
/mob/living/simple_animal/hostile/lesserworm,
|
||||
/mob/living/simple_animal/hostile/greatwormking
|
||||
)
|
||||
//exclusion list for things you don't want the reaction to create.
|
||||
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
|
||||
if(M.eyecheck() <= 0)
|
||||
if(M.eyecheck(TRUE) <= 0)
|
||||
flick("e_flash", M.flash)
|
||||
|
||||
for(var/i = 1, i <= 5, i++)
|
||||
@@ -1130,7 +1132,7 @@
|
||||
var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks
|
||||
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
|
||||
if(M.eyecheck() < FLASH_PROTECTION_MODERATE)
|
||||
if(M.eyecheck(TRUE) < FLASH_PROTECTION_MODERATE)
|
||||
flick("e_flash", M.flash)
|
||||
|
||||
for(var/i = 1, i <= 4 + rand(1,2), i++)
|
||||
|
||||
@@ -204,7 +204,7 @@ datum/unit_test/mob_damage/start_test()
|
||||
expected_msg = "To take no damage"
|
||||
|
||||
|
||||
var/msg = "Damage taken: [ending_damage] out of [damage_amount] || expected: [expected_msg] \[Overall Health:[ending_health] (Initial: [initial_health]\]"
|
||||
var/msg = "Damage taken: [ending_damage] out of [damage_amount] || expected: [expected_msg] \[Overall Health:[ending_health] (Initial: [initial_health])\]"
|
||||
|
||||
if(failure)
|
||||
fail(msg)
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
author: Lohikar
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Zeng-Hu has released the new Zeng-Hu Mobility Frame, a positronic chassis that emphasizes speed at the cost of fragility."
|
||||
- rscadd: "Bishop Cybernetics have released their Accessory Frame, a positronic chassis designed to catch the eye while remaining power-efficient."
|
||||
- rscadd: "Hephaestus Industries has announced their Generation 2 Industrial Frame, designed to withstand more abuse than its competitors at the cost of agility."
|
||||
- rscadd: "Xion Manufacturing Group has announced their version of the HI G1 Industrial Frame, engineered to be an affordable and cool-running industrial worker."
|
||||
- tweak: "IPCs are now flashable." # I couldn't think of a more interesting way to put this
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 881 B |
|
Before Width: | Height: | Size: 925 B |
|
Before Width: | Height: | Size: 835 B |
|
Before Width: | Height: | Size: 833 B |
|
After Width: | Height: | Size: 903 B |
|
After Width: | Height: | Size: 1020 B |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.8 KiB |