IPC subspecies adjustments (#7854)

The goal is to make tangible differences between the subspecies with pros and cons that are in line with lore. Effectively, the IPC species felt too similar, many of which using equal stats in certain fields that made no sense to be equal in, this rework as stated previously aims to remedy this.

These changes were requested by Kyres, NiennaB and Tailson of the lore team.

changes:

    tweak: "Adjusted heat tolerances of all IPC species to differentiate between types, letting it be more forgiving."
    tweak: "Brute, resist and grab modifier changes to species dependant on type."
    tweak: "Moves IPC abilities to their own tab for visibility and ease of use."
    rscadd: "Adds a crush verb that is usable by G2."
    rscadd: "Implements a variety new attack options to IPC species."
    tweak: "Makes heat discomfort levels universally to be 100 units under the first heat level for all IPC species."
    bugfix: "Sorts out issues with voidsuit/hardsuit for Bishops and Zeng-Hu."
    tweak: "Adjusts Zeng-Hu Frame speed to be more inline with their lore."
    tweak: "Adjusts Xion Frame speed to be slightly faster than the G1 and G2 to emphasize it being lighter."
    tweak: "Xions can now go EVA indefinitely."
    tweak: "Adjustments to fluff blurbs of IPC subspecies to account for mechanical changes."
This commit is contained in:
Aboshedab
2020-01-03 23:31:03 +02:00
committed by Erki
parent b2924d117e
commit fdc49c5f50
5 changed files with 179 additions and 24 deletions
@@ -29,7 +29,7 @@
mob/living/carbon/human/proc/change_monitor()
set name = "Change IPC Screen"
set desc = "Change the display on your screen."
set category = "IC"
set category = "Abilities"
if(f_style)
var/datum/sprite_accessory/facial_hair/screen_style = facial_hair_styles_list[f_style]
@@ -1015,7 +1015,7 @@ mob/living/carbon/human/proc/change_monitor()
/mob/living/carbon/human/proc/self_diagnostics()
set name = "Self-Diagnostics"
set desc = "Run an internal self-diagnostic to check for damage."
set category = "IC"
set category = "Abilities"
if(stat == DEAD) return
@@ -1153,3 +1153,46 @@ mob/living/carbon/human/proc/change_monitor()
for(var/line in airInfo)
to_chat(src, span("notice", "[line]"))
return
/mob/living/carbon/human/proc/crush()
set category = "Abilities"
set name = "Crush"
set desc = "While grabbing someone in a neck grab, crush them with your arms."
if(last_special > world.time)
to_chat(src, "<span class='warning'>Your arms are still recovering!</span>")
return
if(use_check_and_message(usr))
return
var/obj/item/grab/G = src.get_active_hand()
if(!istype(G))
to_chat(src, "<span class='warning'>You are not grabbing anyone.</span>")
return
if(G.state < GRAB_NECK)
to_chat(src, "<span class='warning'>You must have a stronger grab to crush your prey!</span>")
return
if(ishuman(G.affecting))
var/mob/living/carbon/human/H = G.affecting
var/hit_zone = zone_sel.selecting
var/obj/item/organ/external/affected = H.get_organ(hit_zone)
if(!affected || affected.is_stump())
to_chat(H, "<span class='danger'>They are missing that limb!</span>")
return
H.apply_damage(40, BRUTE, hit_zone)
visible_message("<span class='warning'><b>\The [src]</b> viciously crushes [affected] of [G.affecting] with its metallic arms!</span>")
msg_admin_attack("[key_name_admin(src)] crushed [key_name_admin(H)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)",ckey=key_name(src),ckey_target=key_name(H))
else
var/mob/living/M = G.affecting
if(!istype(M))
return
M.apply_damage(40,BRUTE)
visible_message("<span class='warning'><b>\The [src]</b> viciously crushes [G.affecting]'s flesh with its metallic arms!</span>")
msg_admin_attack("[key_name_admin(src)] crushed [key_name_admin(M)] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)",ckey=key_name(src),ckey_target=key_name(M))
playsound(src.loc, 'sound/weapons/heavysmash.ogg', 50, 1)
last_special = world.time + 100
@@ -91,6 +91,30 @@
user.visible_message("<span class='warning'>[user] jumped up and down on \the [target]'s [affecting.name]!</span>")
playsound(user.loc, attack_sound, 25, 1, -1)
/datum/unarmed_attack/punch/ipc
damage = 3
/datum/unarmed_attack/kick/ipc
damage = 3
/datum/unarmed_attack/stomp/ipc
damage = 3
/datum/unarmed_attack/industrial
attack_verb = list("pulverized", "crushed", "pounded")
attack_noun = list("heavy fist")
damage = 7
attack_sound = 'sound/weapons/smash.ogg'
attack_name = "heavy fist"
shredding = 1
/datum/unarmed_attack/industrial/heavy
damage = 9
/datum/unarmed_attack/industrial/xion
damage = 5
shredding = 0
/datum/unarmed_attack/terminator
attack_verb = list("pulverized", "crushed", "pounded")
attack_noun = list("power fist")
@@ -19,9 +19,9 @@
light_power = 0.5
meat_type = /obj/item/stack/material/steel
unarmed_types = list(
/datum/unarmed_attack/punch,
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick)
/datum/unarmed_attack/punch/ipc,
/datum/unarmed_attack/stomp/ipc,
/datum/unarmed_attack/kick/ipc)
rarity_value = 2
inherent_eye_protection = FLASH_PROTECTION_MAJOR
@@ -57,9 +57,9 @@
cold_level_2 = -1
cold_level_3 = -1
heat_level_1 = 500 // Gives them about 25 seconds in space before taking damage
heat_level_2 = 1000
heat_level_3 = 2000
heat_level_1 = 600
heat_level_2 = 1200
heat_level_3 = 2400
body_temperature = null
passive_temp_gain = 10 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.
@@ -102,7 +102,7 @@
)
heat_discomfort_level = 373.15
heat_discomfort_level = 500 //This will be 100 below the first heat level
heat_discomfort_strings = list(
"Your CPU temperature probes warn you that you are approaching critical heat levels!"
)
@@ -23,9 +23,9 @@
light_range = 0
light_power = 0
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/punch,
/datum/unarmed_attack/punch/ipc,
/datum/unarmed_attack/stomp/ipc,
/datum/unarmed_attack/kick/ipc,
/datum/unarmed_attack/bite
)
@@ -34,9 +34,9 @@
max_nutrition_factor = 0.8
heat_level_1 = 400
heat_level_2 = 800
heat_level_3 = 1600
heat_level_1 = 500
heat_level_2 = 1000
heat_level_3 = 2000
heat_discomfort_level = 400
heat_discomfort_strings = list(
@@ -93,7 +93,11 @@
"surge" = /obj/item/organ/internal/surge/advanced
)
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/terminator, /datum/unarmed_attack/bite/strong)
unarmed_types = list(
/datum/unarmed_attack/stomp/ipc,
/datum/unarmed_attack/kick/ipc,
/datum/unarmed_attack/terminator,
/datum/unarmed_attack/bite/strong)
inherent_verbs = list(
/mob/living/carbon/human/proc/leap,
@@ -110,6 +114,8 @@
bald = 1
bodytype = "Heavy Machine"
unarmed_types = list(/datum/unarmed_attack/industrial)
brute_mod = 0.8
burn_mod = 1.1
@@ -144,11 +150,11 @@
flags = IS_IPC | ACCEPTS_COOLER
appearance_flags = HAS_EYE_COLOR
heat_level_1 = 600
heat_level_2 = 1200
heat_level_3 = 2400
heat_level_1 = 800
heat_level_2 = 1600
heat_level_3 = 3200
heat_discomfort_level = 800
heat_discomfort_level = 700
max_nutrition_factor = 1.25
nutrition_loss_factor = 2
@@ -288,8 +294,24 @@
preview_icon = 'icons/mob/human_races/ipc/ind_hephaestus_preview.dmi'
eyes = "heph_eyes"
unarmed_types = list(/datum/unarmed_attack/industrial/heavy)
slowdown = 6
brute_mod = 0.7
grab_mod = 0.7 // Bulkier and bigger than the G1
resist_mod = 12 // Overall stronger than G1
heat_level_1 = 1000
heat_level_2 = 2000
heat_level_3 = 4000
heat_discomfort_level = 900
inherent_verbs = list(
/mob/living/carbon/human/proc/self_diagnostics,
/mob/living/carbon/human/proc/crush
)
examine_color = "#688359"
@@ -322,13 +344,27 @@
deform = 'icons/mob/human_races/ipc/r_ind_xion.dmi'
preview_icon = 'icons/mob/human_races/ipc/ind_xion_preview.dmi'
unarmed_types = list(
/datum/unarmed_attack/industrial/xion)
brute_mod = 0.9
grab_mod = 0.9
resist_mod = 8
heat_level_1 = 700
heat_level_2 = 1400
heat_level_3 = 2800
heat_discomfort_level = 600
slowdown = 3
eyes = "xion_eyes"
flags = IS_IPC
passive_temp_gain = 5
passive_temp_gain = 0
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. This unit cannot perform EVA without a suit."
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. This unit can perform EVA without assistance."
has_limbs = list(
BP_CHEST = list("path" = /obj/item/organ/external/chest/industrial/xion),
@@ -351,7 +387,6 @@
/datum/species/machine/zenghu
name = "Zeng-Hu Mobility Frame"
short_name = "zhf"
bodytype = null
icobase = 'icons/mob/human_races/ipc/r_ind_zenghu.dmi'
deform = 'icons/mob/human_races/ipc/r_ind_zenghu.dmi'
@@ -364,6 +399,8 @@
grab_mod = 1.1 // Smooth, fast
resist_mod = 4 // Not super strong, but still rather strong
slowdown = -1.2
appearance_flags = HAS_EYE_COLOR
examine_color = "#ff00ff"
@@ -395,7 +432,7 @@
/datum/species/machine/bishop
name = "Bishop Accessory Frame"
short_name = "bcf"
bodytype = null
bodytype = "Human"
icobase = 'icons/mob/human_races/ipc/r_ind_bishop.dmi'
deform = 'icons/mob/human_races/ipc/r_ind_bishop.dmi'