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.
This commit is contained in:
Lohikar
2018-01-20 16:34:06 -06:00
committed by Erki
parent 7086e77207
commit 90886a3076
48 changed files with 585 additions and 163 deletions
+6
View File
@@ -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";
+1
View File
@@ -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"
-5
View File
@@ -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
+14 -9
View File
@@ -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.
-6
View File
@@ -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)
+11 -1
View File
@@ -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"
+9 -1
View File
@@ -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"
+12 -1
View File
@@ -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"
+1 -1
View File
@@ -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()
+3 -3
View File
@@ -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)
+11 -5
View File
@@ -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)
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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"
*/
+27 -35
View File
@@ -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
+4 -4
View File
@@ -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
+141
View File
@@ -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
+35 -33
View File
@@ -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++)
+1 -1
View File
@@ -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)
+8
View File
@@ -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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 881 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 925 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 835 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 903 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB