diff --git a/code/modules/clothing/spacesuits/rig/suits/terminator.dm b/code/modules/clothing/spacesuits/rig/suits/terminator.dm
index 22fd946ec7e..1dd58254631 100644
--- a/code/modules/clothing/spacesuits/rig/suits/terminator.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/terminator.dm
@@ -29,16 +29,16 @@
)
/obj/item/clothing/head/helmet/space/rig/terminator
- species_restricted = list("Hunter-Killer")
+ species_restricted = list("Machine")
/obj/item/clothing/suit/space/rig/terminator
- species_restricted = list("Hunter-Killer")
+ species_restricted = list("Machine")
/obj/item/clothing/shoes/magboots/rig/terminator
- species_restricted = list("Hunter-Killer")
+ species_restricted = list("Machine")
/obj/item/clothing/gloves/rig/terminator
- species_restricted = list("Hunter-Killer")
+ species_restricted = list("Machine")
/obj/item/weapon/rig/terminator/equipped
initial_modules = list(
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 57afcac3db7..ae0b7fd41bc 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -70,7 +70,7 @@
/mob/living/carbon/human/getBruteLoss()
var/amount = 0
for(var/obj/item/organ/external/O in organs)
- if(O.status & ORGAN_ROBOT)
+ if((O.status & ORGAN_ROBOT) && !O.vital)
continue //robot limbs don't count towards shock and crit
amount += O.brute_dam
return amount
@@ -78,7 +78,7 @@
/mob/living/carbon/human/getFireLoss()
var/amount = 0
for(var/obj/item/organ/external/O in organs)
- if(O.status & ORGAN_ROBOT)
+ if((O.status & ORGAN_ROBOT) && !O.vital)
continue //robot limbs don't count towards shock and crit
amount += O.burn_dam
return amount
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 432ba2d870a..b8b2d64e8ad 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -267,12 +267,14 @@
src << "You cannot do that in your current state."
return
- for(var/mob/M in range(7, src))
+ for(var/mob/living/M in range(7, src))
M << 'sound/effects/EMPulse.ogg'
for(var/obj/item/weapon/material/shard/shrapnel/flechette/F in M.contents)
playsound(F, 'sound/items/countdown.ogg', 125, 1)
spawn(20)
explosion(F.loc, -1, -1, 2)
+ M.apply_damage(20,BRUTE)
+ M.apply_damage(15,BURN)
qdel(F)
for(var/obj/item/weapon/material/shard/shrapnel/flechette/F in range(7, src))
@@ -287,6 +289,10 @@
set name = "State Laws"
set desc = "State your laws aloud."
+ if(stat)
+ src << "You cannot do that in your current state."
+ return
+
if(last_special > world.time)
return
last_special = world.time + 20
@@ -380,7 +386,7 @@
sleep(10)
playsound(src, 'sound/items/countdown.ogg', 125, 1)
sleep(20)
- explosion(src, -1, -1, 5)
+ explosion(src, -1, 1, 5)
src.gib()
/mob/living/carbon/human/proc/hivenet()
diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm
index 2e8fd06647b..4322f5b6dbd 100644
--- a/code/modules/mob/living/carbon/human/human_species.dm
+++ b/code/modules/mob/living/carbon/human/human_species.dm
@@ -117,3 +117,4 @@
/mob/living/carbon/human/terminator
mob_size = 30
+ offset_light = 1
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index cdec7963cec..16650543c76 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -63,6 +63,7 @@
var/radiation_mod = 1 // Radiation modifier
var/flash_mod = 1 // Stun from blindness modifier.
var/vision_flags = SEE_SELF // Same flags as glasses.
+ var/list/breakcuffs = list() //used in resist.dm to check if they can break hand/leg cuffs
// Death vars.
var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
diff --git a/code/modules/mob/living/carbon/human/species/station/machine_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/machine_subspecies.dm
index d403d242db3..c464985f384 100644
--- a/code/modules/mob/living/carbon/human/species/station/machine_subspecies.dm
+++ b/code/modules/mob/living/carbon/human/species/station/machine_subspecies.dm
@@ -68,8 +68,8 @@
short_name = "ind"
name_plural = "Industrials"
- brute_mod = 0.3
- burn_mod = 1.2
+ brute_mod = 0.5
+ burn_mod = 1.3
slowdown = 4
blurb = "Tough units made for engineering and security with simple exteriors, roughly resembling humans. No job restrictions. Heavy emphasis on \
@@ -98,9 +98,9 @@
"r_foot" = list("path" = /obj/item/organ/external/foot/right/industrial)
)
- heat_level_1 = 800
- heat_level_2 = 1300
- heat_level_3 = 2500
+ heat_level_1 = 600
+ heat_level_2 = 1200
+ heat_level_3 = 2400
heat_discomfort_level = 800
@@ -145,10 +145,11 @@
eyes = "eyes_terminator"
has_floating_eyes = 1
- brute_mod = 0.2
- burn_mod = 0.4
+ brute_mod = 0.3
+ burn_mod = 0.5
flash_mod = 0
siemens_coefficient = 0
+ breakcuffs = list(MALE,FEMALE,NEUTER)
show_ssd = "laying inert, its activation glyph dark."
death_sound = 'sound/effects/bang.ogg'
@@ -179,7 +180,7 @@
has_organ = list(
"brain" = /obj/item/organ/mmi_holder/posibrain/terminator,
"shielded cell" = /obj/item/organ/cell/terminator,
- "optics" = /obj/item/organ/optical_sensor,
+ "optics" = /obj/item/organ/optical_sensor/terminator,
"data core" = /obj/item/organ/data
)
@@ -223,13 +224,9 @@
playsound(H.loc, 'sound/machines/buzz-two.ogg', 100, 0)
return 0
-/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
+/datum/species/machine/terminator/handle_death(var/mob/living/carbon/human/H)
..()
- spawn(10)
- playsound(H.loc, 'sound/items/countdown.ogg', 125, 1)
- spawn(20)
- explosion(H, -1, -1, 5)
- H.gib()
-
-/datum/species/machine/sanitize_name(var/new_name)
- return sanitizeName(new_name, allow_numbers = 1)
\ No newline at end of file
+ playsound(H.loc, 'sound/items/countdown.ogg', 125, 1)
+ spawn(15)
+ explosion(H.loc, -1, 1, 5)
+ H.gib()
diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm
index 8c4e3b6b36e..45cffd783ee 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -48,6 +48,7 @@
sprint_cost_factor = 1.45
exhaust_threshold = 65
rarity_value = 3
+ breakcuffs = list(MALE)
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
Uuosa-Eso system, which roughly translates to 'burning mother'.
Coming from a harsh, radioactive \
@@ -352,7 +353,7 @@
radiation_mod = 0 // not affected by radiation
// #TODO-MERGE: Check for balance and self-repair. If self-repair is a thing, RIP balance.
- brute_mod = 0.5
+ brute_mod = 0.8
burn_mod = 1.0
show_ssd = "flashing a 'system offline' glyph on their monitor"
death_message = "gives one shrill beep before falling lifeless."
@@ -375,7 +376,7 @@
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 | NO_MINOR_CUT
- appearance_flags = HAS_SKIN_COLOR
+ appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR
spawn_flags = CAN_JOIN | IS_WHITELISTED
blood_color = "#1F181F"
diff --git a/code/modules/mob/living/carbon/human/species/station/vaurca_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/vaurca_subspecies.dm
index 0d7cc87efa8..c310f6983e1 100644
--- a/code/modules/mob/living/carbon/human/species/station/vaurca_subspecies.dm
+++ b/code/modules/mob/living/carbon/human/species/station/vaurca_subspecies.dm
@@ -49,6 +49,7 @@
brute_mod = 0.2 //note to self: remove is_synthetic checks for brmod and burnmod
burn_mod = 0.8 //2x was a bit too much. we'll see how this goes.
toxins_mod = 1 //they're not used to all our weird human bacteria.
+ breakcuffs = list(MALE,FEMALE,NEUTER)
speech_sounds = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
speech_chance = 100
diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm
index b22536f01b5..041ea235f0e 100644
--- a/code/modules/mob/living/carbon/resist.dm
+++ b/code/modules/mob/living/carbon/resist.dm
@@ -107,7 +107,7 @@
if(HULK in mutations)
return 1
- if (get_species() == "Unathi" && gender == "male")
+ if(src.gender in src.species.breakcuffs)
return 1
return 0
@@ -127,7 +127,8 @@
"You successfully break your [handcuffed.name]."
)
- say(pick("RAAAAAAAARGH!", "HNNNNNNNNNGGGGGGH!", "GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", "AAAAAAARRRGH!" ))
+ if((get_species() == "Unathi") || (HULK in mutations))
+ say(pick("RAAAAAAAARGH!", "HNNNNNNNNNGGGGGGH!", "GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", "AAAAAAARRRGH!" ))
qdel(handcuffed)
handcuffed = null
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index 9cd7dff5e15..9d41d54a13b 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -25,6 +25,7 @@ var/list/organ_cache = list()
germ_level = 0
var/datum/dna/dna
var/datum/species/species
+ var/emp_coeff = 1 //coefficient for damages taken by EMP, if the organ is robotic.
/obj/item/organ/Destroy()
if(!owner)
@@ -265,13 +266,13 @@ var/list/organ_cache = list()
return
switch (severity)
if (1.0)
- take_damage(20)
+ take_damage(rand(7,20) * emp_coeff)
return
if (2.0)
- take_damage(7)
+ take_damage(rand(3,7) * emp_coeff)
return
if(3.0)
- take_damage(3)
+ take_damage(rand(3) * emp_coeff)
/obj/item/organ/proc/removed(var/mob/living/user)
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 24347290c07..4a1909d2544 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -57,6 +57,7 @@
var/can_grasp //It would be more appropriate if these two were named "affects_grasp" and "affects_stand" at this point
var/can_stand
var/body_hair
+ var/painted = 0
/obj/item/organ/external/Destroy()
if(parent && parent.children)
@@ -343,10 +344,14 @@ This function completely restores a damaged organ to perfect condition.
*/
/obj/item/organ/external/rejuvenate()
damage_state = "00"
- if(status & 128) //Robotic organs stay robotic. Fix because right click rejuvinate makes IPC's organs organic.
- status = 128
- else
- status = 0
+ src.status &= ~ORGAN_BROKEN
+ src.status &= ~ORGAN_BLEEDING
+ src.status &= ~ORGAN_SPLINTED
+ src.status &= ~ORGAN_CUT_AWAY
+ src.status &= ~ORGAN_DESTROYED
+ src.status &= ~ORGAN_DEAD
+ src.status &= ~ORGAN_MUTATED
+ src.status &= ~ORGAN_SPLINTED
perma_injury = 0
brute_dam = 0
burn_dam = 0
@@ -932,10 +937,14 @@ Note that amputating the affected organ does in fact remove the infection from t
if(company)
model = company
var/datum/robolimb/R = all_robolimbs[company]
+ if(species && !(species.name in R.species_can_use))
+ R = basic_robolimb
if(R)
force_icon = R.icon
name = "[R.company] [initial(name)]"
desc = "[R.desc]"
+ if(R.paintable)
+ painted = 1
dislocated = -1 //TODO, make robotic limbs a separate type, remove snowflake
cannot_break = 1
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index e88a95505e1..daddc6d0fd0 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -95,6 +95,9 @@ var/global/list/limb_icon_cache = list()
if(force_icon)
mob_icon = new /icon(force_icon, "[icon_name][gendered_icon ? "_[gender]" : ""]")
+ if(painted)
+ if(s_col && s_col.len >= 3)
+ mob_icon.Blend(rgb(s_col[1], s_col[2], s_col[3]), ICON_ADD)
else
if(!dna)
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_[gender]" : ""]")
diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm
index 69d82ac94d4..3e2021f600d 100644
--- a/code/modules/organs/robolimbs.dm
+++ b/code/modules/organs/robolimbs.dm
@@ -16,6 +16,7 @@ var/global/datum/robolimb/basic_robolimb
var/icon = 'icons/mob/human_races/robotic.dmi' // Icon base to draw from.
var/unavailable_at_chargen // If set, not available at chargen.
var/list/species_can_use = list("Human","Skrell","Tajara","Zhan-Khaza","M'sai","Unathi","Vaurca Worker","Vaurca Warrior","Baseline Frame")
+ var/paintable = 0 //tired of istype exceptions. bullshirt to find, and by god do i know it after this project.
/datum/robolimb/bishop
company = "Bishop Cybernetics"
@@ -40,8 +41,9 @@ var/global/datum/robolimb/basic_robolimb
/datum/robolimb/ipc
company = "Hephaestus Integrated Limb"
desc = "This limb is simple and functional; no effort has been made to make it look human."
- icon = 'icons/mob/human_races/cyberlimbs/ipc.dmi'
+ icon = 'icons/mob/human_races/r_machine.dmi'
unavailable_at_chargen = 1
+ paintable = 1
/datum/robolimb/industrial
company = "Hephaestus Industrial Limb"
diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm
index f90a7d60a22..1b4f73c353b 100644
--- a/code/modules/organs/subtypes/machine.dm
+++ b/code/modules/organs/subtypes/machine.dm
@@ -176,6 +176,7 @@
organ_tag = "brain"
parent_organ = "chest"
vital = 1
+ emp_coeff = 0.1
/obj/item/organ/data
name = "data core"
@@ -184,6 +185,7 @@
icon = 'icons/obj/cloning.dmi'
icon_state = "harddisk"
vital = 0
+ emp_coeff = 0.1
/obj/item/organ/data/New()
robotize()
@@ -197,9 +199,10 @@
organ_tag = "shielded cell"
parent_organ = "chest"
vital = 1
+ emp_coeff = 0.1
/obj/item/organ/cell/New()
- mechassist()
+ robotize()
..()
/obj/item/organ/external/head/terminator
@@ -209,70 +212,105 @@
max_damage = 50 //made same as arm, since it is not vital
min_broken_damage = 30
encased = null
+ emp_coeff = 0.5
+
+/obj/item/organ/optical_sensorterminator
+ name = "optical sensor"
+ organ_tag = "optics"
+ parent_organ = "head"
+ icon = 'icons/obj/robot_component.dmi'
+ icon_state = "camera"
+ dead_icon = "camera_broken"
+ emp_coeff = 0.5
+
+/obj/item/organ/optical_sensor/terminator/New()
+ robotize()
+ ..()
+
/obj/item/organ/external/head/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/chest/terminator
dislocated = -1
encased = null
+ emp_coeff = 0.5
+
/obj/item/organ/external/chest/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/groin/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/groin/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/arm/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/arm/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/arm/right/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/arm/right/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/leg/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/leg/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/leg/right/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/leg/right/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/foot/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/foot/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/foot/right/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/foot/right/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/hand/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/hand/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/hand/right/terminator
dislocated = -1
+ emp_coeff = 0.5
+
/obj/item/organ/external/hand/right/terminator/New()
- mechassist("Hephaestus Vulcanite Limb")
+ robotize("Hephaestus Vulcanite Limb")
..()
/obj/item/organ/external/head/industrial
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 20541db6a07..91855835d43 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -340,7 +340,7 @@
"You hear a low pulsing roar!"
)
is_charging = 1
- sleep(90)
+ sleep(60)
is_charging = 0
if(!istype(user.get_active_hand(), src))
return
@@ -430,7 +430,7 @@
"You hear a low pulsing roar!"
)
is_charging = 1
- sleep(90)
+ sleep(60)
is_charging = 0
if(!istype(user.get_active_hand(), src))
return
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 944f8693cd1..5ee79bc63cb 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -338,7 +338,7 @@
fire_delay = 20
- accuracy = -4
+ accuracy = -1
//wielding information
fire_delay_wielded = 5
@@ -387,11 +387,11 @@
auto_eject = 1
auto_eject_sound = 'sound/weapons/smg_empty_alarm.ogg'
recoil = 3
-
+
accuracy = -2
fire_delay = 10
recoil_wielded = 0
-
+
fire_delay_wielded = 6
accuracy_wielded = 0
diff --git a/icons/mob/human_races/cyberlimbs/ipc.dmi b/icons/mob/human_races/cyberlimbs/ipc.dmi
deleted file mode 100644
index 5c466d63ed5..00000000000
Binary files a/icons/mob/human_races/cyberlimbs/ipc.dmi and /dev/null differ
diff --git a/icons/mob/human_races/r_terminator.dmi b/icons/mob/human_races/r_terminator.dmi
index a309182032c..f8f4db4c02a 100644
Binary files a/icons/mob/human_races/r_terminator.dmi and b/icons/mob/human_races/r_terminator.dmi differ