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