diff --git a/aurorastation.dme b/aurorastation.dme index 739888688f3..c81a2644f59 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -3033,6 +3033,7 @@ #include "code\modules\projectiles\guns\energy\nuclear.dm" #include "code\modules\projectiles\guns\energy\pulse.dm" #include "code\modules\projectiles\guns\energy\rifle.dm" +#include "code\modules\projectiles\guns\energy\scythe.dm" #include "code\modules\projectiles\guns\energy\special.dm" #include "code\modules\projectiles\guns\energy\stun.dm" #include "code\modules\projectiles\guns\energy\temperature.dm" diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm index 84739608bd6..f50d8d79de3 100644 --- a/code/__DEFINES/species.dm +++ b/code/__DEFINES/species.dm @@ -33,7 +33,7 @@ #define SPECIES_IPC_XION_REMOTE "Remote Xion Industrial Frame" #define SPECIES_IPC_UNBRANDED "Unbranded Frame" #define SPECIES_IPC_UNBRANDED_REMOTE "Remote Unbranded Frame" -#define SPECIES_IPC_TERMINATOR "Military Frame" +#define SPECIES_IPC_PURPOSE_HK "Hunter-Killer" #define SPECIES_SLIMEPERSON "Slime" diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 73a705cb34a..ef7de9c01f0 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -400,7 +400,7 @@ if(!(S.status & ORGAN_ASSISTED) || user.a_intent != I_HELP) return ..() - if(H.isSynthetic() && H == user && !(H.get_species() == SPECIES_IPC_TERMINATOR)) + if(H.isSynthetic() && H == user && !(H.get_species() == SPECIES_IPC_PURPOSE_HK)) to_chat(user, SPAN_WARNING("You can't repair damage to your own body - it's against OH&S.")) return diff --git a/code/modules/clothing/spacesuits/rig/suits/terminator.dm b/code/modules/clothing/spacesuits/rig/suits/terminator.dm index 7e8aa615246..dda475694d6 100644 --- a/code/modules/clothing/spacesuits/rig/suits/terminator.dm +++ b/code/modules/clothing/spacesuits/rig/suits/terminator.dm @@ -1,8 +1,9 @@ -/obj/item/rig/terminator - name = "\improper Military Frame exoskeleton" - desc = "A robust synth exoskeleton outfitted with state of the art infiltration tools. Creepy." - icon = 'icons/clothing/rig/terminator.dmi' - icon_state = "terminator_rig" +/obj/item/rig/hunter_killer + name = "\improper Purpose combat layer" + desc = "An unknown, sleek mechanical construction that doesn't conform to any technology, culture, or even creature you know. \ + It seems largely impervious to any wear and tear." + icon = 'icons/clothing/rig/hunter_killer.dmi' + icon_state = "hunterkiller_rig" suit_type = "synthetic exoskeleton" armor = list( melee = ARMOR_MELEE_VERY_HIGH, @@ -30,7 +31,7 @@ /obj/item/handcuffs ) - helm_type = /obj/item/clothing/head/helmet/space/rig/terminator + helm_type = /obj/item/clothing/head/helmet/space/rig/hunter_killer initial_modules = list( /obj/item/rig_module/maneuvering_jets, @@ -49,12 +50,12 @@ species_restricted = list(BODYTYPE_IPC_INDUSTRIAL) allowed_module_types = MODULE_GENERAL | MODULE_LIGHT_COMBAT | MODULE_HEAVY_COMBAT | MODULE_SPECIAL | MODULE_MEDICAL | MODULE_UTILITY | MODULE_VAURCA -/obj/item/clothing/head/helmet/space/rig/terminator +/obj/item/clothing/head/helmet/space/rig/hunter_killer species_restricted = list(BODYTYPE_IPC_INDUSTRIAL) light_overlay = "helmet_light_terminator" light_color = LIGHT_COLOR_RED -/obj/item/rig/terminator/equipped +/obj/item/rig/hunter_killer/equipped initial_modules = list( /obj/item/rig_module/maneuvering_jets, /obj/item/rig_module/grenade_launcher/frag, diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm index 2eba28f86ed..be5cc54e1c2 100644 --- a/code/modules/item_worth/worths_list.dm +++ b/code/modules/item_worth/worths_list.dm @@ -396,7 +396,7 @@ var/list/worths = list( /obj/item/rig/internalaffairs = 9000, /obj/item/rig/merc = 25000, /obj/item/rig/military = 30000, - /obj/item/rig/terminator = 30000, + /obj/item/rig/hunter_killer = 30000, /obj/item/rig = 15000, /obj/item/forensics = 65, /obj/item/evidencebag = 5, diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm index 81bbd6586db..94ba9994198 100644 --- a/code/modules/mob/language/outsider.dm +++ b/code/modules/mob/language/outsider.dm @@ -82,22 +82,6 @@ key = "y" flags = RESTRICTED | HIVEMIND -/datum/language/terminator - name = LANGUAGE_TERMINATOR - desc = "A heavily encrypted communication network that piggybacks off of the state telecomms relays to covertly link Hephaestus black ops droids to their control AIs." - speech_verb = list("buzzes") - ask_verb = list("buzzes") - exclaim_verb = list("buzzes") - sing_verb = list("buzzes") - colour = "bad" - key = "hd" - flags = RESTRICTED | HIVEMIND - syllables = list("beep","beep","beep","beep","beep","boop","boop","boop","bop","bop","dee","dee","doo","doo","hiss","hss","buzz","buzz","bzz","ksssh","keey","wurr","wahh","tzzz") - space_chance = 10 - -/datum/language/terminator/get_random_name() - return "HK [pick(list("Hera","Zeus","Artemis","Athena","Ares","Hades","Poseidon","Demeter","Apollo","Aphrodite","Hermes","Hestia","Dionysus","Persephone","Kronos","Odysseus","Ajax","Agamemnon","Chiron","Charon"))]-[rand(100, 999)]" - /datum/language/revenant name = LANGUAGE_REVENANT desc = "The language of the forsaken bluespace inhabitants." @@ -207,3 +191,6 @@ flags = RESTRICTED | NO_STUTTER | HIVEMIND syllables = list("beep","beep","beep","beep","beep","boop","boop","boop","bop","bop","dee","dee","doo","doo","hiss","hss","buzz","buzz","bzz","ksssh","keey","wurr","wahh","tzzz") space_chance = 10 + +/datum/language/purpose/get_random_name() + return "[pick(list("HERA","ZEUS","ARTEMIS","ATHENA","ARES","HADES","POSEIDON","DEMETER","APOLLO","APHORDITE","HERMES","HESTIA","DIONYSUS","PERSEPHONE","KRONOS","ODYSSEUS","AJAX","AGAMENON","CHIRON","CHARON"))][rand(100, 999)]" diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index edeba280bb9..b2715e7be57 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -408,7 +408,7 @@ last_special = world.time + 100 /mob/living/carbon/human/proc/detonate_flechettes() - set category = "Military Frame" + set category = "Abilities" set name = "Detonate Flechettes" set desc = "Detonate all explosive flechettes in a range of seven meters." @@ -417,7 +417,7 @@ return for(var/mob/living/M in range(7, src)) - to_chat(M, 'sound/effects/EMPulse.ogg') + playsound(M, 'sound/effects/EMPulse.ogg') for(var/obj/item/material/shard/shrapnel/flechette/F in M.contents) playsound(F, 'sound/items/countdown.ogg', 125, 1) spawn(20) @@ -434,7 +434,7 @@ /mob/living/carbon/human/proc/state_laws() - set category = "Military Frame" + set category = "Abilities" set name = "State Laws" set desc = "State your laws aloud." @@ -520,7 +520,7 @@ last_special = world.time + 200 /mob/living/carbon/human/proc/self_destruct() - set category = "Military Frame" + set category = "Abilities" set name = "Engage Self-Destruct" set desc = "When all else has failed, bite the bullet." diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index d0724252151..269d501c785 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -262,8 +262,8 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin) remote_network = REMOTE_BUNKER_ROBOT SSvirtualreality.add_robot(src, remote_network) -/mob/living/carbon/human/terminator/Initialize(mapload) - . = ..(mapload, SPECIES_IPC_TERMINATOR) +/mob/living/carbon/human/hunter_killer/Initialize(mapload) + . = ..(mapload, SPECIES_IPC_PURPOSE_HK) add_language(LANGUAGE_SOL_COMMON, 1) add_language(LANGUAGE_ELYRAN_STANDARD, 1) add_language(LANGUAGE_UNATHI, 1) @@ -272,17 +272,13 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin) add_language(LANGUAGE_TRADEBAND, 1) add_language(LANGUAGE_GUTTER, 1) add_language(LANGUAGE_EAL, 1) - src.equip_to_slot_or_del(new /obj/item/rig/terminator(src),slot_back) - src.equip_to_slot_or_del(new /obj/item/gun/projectile/automatic/terminator(src),slot_l_hand) + accent = ACCENT_TTS + src.equip_to_slot_or_del(new /obj/item/gun/energy/scythe(src),slot_l_hand) src.equip_to_slot_or_del(new /obj/item/clothing/under/gearharness, slot_w_uniform) - src.equip_to_slot_or_del(new /obj/item/device/radio/headset/syndicate(src), slot_l_ear) src.equip_to_slot_or_del(new /obj/item/grenade/frag(src), slot_l_store) src.equip_to_slot_or_del(new /obj/item/melee/energy/sword(src), slot_r_store) var/obj/item/storage/belt/security/tactical/commando_belt = new(src) - commando_belt.contents += new /obj/item/ammo_magazine/flechette - commando_belt.contents += new /obj/item/ammo_magazine/flechette/explosive - commando_belt.contents += new /obj/item/ammo_magazine/flechette/explosive commando_belt.contents += new /obj/item/melee/baton/loaded commando_belt.contents += new /obj/item/shield/energy commando_belt.contents += new /obj/item/handcuffs @@ -291,7 +287,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin) src.equip_to_slot_or_del(commando_belt, slot_belt) src.gender = NEUTER -/mob/living/carbon/human/terminator +/mob/living/carbon/human/hunter_killer mob_size = 30 /mob/living/carbon/human/golem/Initialize(mapload) diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm index 39ecb1739de..38ad627869e 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc_subspecies.dm @@ -190,8 +190,8 @@ /datum/species/machine/industrial/handle_death(var/mob/living/carbon/human/H) return -/datum/species/machine/terminator - name = SPECIES_IPC_TERMINATOR +/datum/species/machine/hunter_killer + name = SPECIES_IPC_PURPOSE_HK short_name = "hks" name_plural = "HKs" bald = 1 @@ -200,8 +200,8 @@ blurb = "\[REDACTED\]" - icobase = 'icons/mob/human_races/ipc/r_terminator.dmi' - deform = 'icons/mob/human_races/ipc/r_terminator.dmi' + icobase = 'icons/mob/human_races/ipc/r_hunter_killer.dmi' + deform = 'icons/mob/human_races/ipc/r_hunter_killer.dmi' light_range = 0 light_power = 0 @@ -209,8 +209,8 @@ unarmed_types = list(/datum/unarmed_attack/terminator) rarity_value = 20 - language = LANGUAGE_TERMINATOR - name_language = LANGUAGE_TERMINATOR + language = LANGUAGE_PURPOSE + name_language = LANGUAGE_PURPOSE eyes = "eyes_terminator" has_floating_eyes = 1 @@ -288,10 +288,10 @@ sprint_temperature_factor = 0.6 move_charge_factor = 0.3 -/datum/species/machine/terminator/get_light_color() +/datum/species/machine/hunter_killer/get_light_color() return -/datum/species/machine/terminator/handle_death(var/mob/living/carbon/human/H) +/datum/species/machine/hunter_killer/handle_death(var/mob/living/carbon/human/H) ..() playsound(H.loc, 'sound/items/countdown.ogg', 125, 1) spawn(15) diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 10dfaed3d20..db126f5fc46 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -102,8 +102,8 @@ GLOBAL_DATUM(basic_robolimb, /datum/robolimb) /datum/robolimb/terminator company = PROSTHETIC_HK - desc = "A ludicrously expensive and EMP shielded component, these types of limbs are best suited for highly specialized cyborgs." - icon = 'icons/mob/human_races/ipc/r_terminator.dmi' + desc = "A ludicrously complex prosthetic created for Purpose Hunter-Killers." + icon = 'icons/mob/human_races/ipc/r_hunter_killer.dmi' unavailable_at_chargen = TRUE allows_internal = FALSE diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 77dd4ef6dff..50900d23dfd 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -572,7 +572,7 @@ By design, d1 is the smallest direction and d2 is the highest if(!(S.status & ORGAN_ASSISTED) || user.a_intent != I_HELP) return ..() - if(M.isSynthetic() && M == user && !(M.get_species() == SPECIES_IPC_TERMINATOR)) + if(M.isSynthetic() && M == user && !(M.get_species() == SPECIES_IPC_PURPOSE_HK)) to_chat(user, SPAN_WARNING("You can't repair damage to your own body - it's against OH&S.")) return diff --git a/code/modules/projectiles/guns/energy/scythe.dm b/code/modules/projectiles/guns/energy/scythe.dm new file mode 100644 index 00000000000..5ead3df2728 --- /dev/null +++ b/code/modules/projectiles/guns/energy/scythe.dm @@ -0,0 +1,78 @@ +/obj/item/gun/energy/scythe + name = "\improper Purpose munitions scythe" + desc = "A seemingly innocuous metal construction the size of a human arm. Through forces unknown, it produces alloy flechettes \ + capable of piercing even the strongest armor known to the Spur." + icon = 'icons/obj/guns/scythe.dmi' + icon_state = "hunterkiller_scythe" + item_state = "hunterkiller_scythe" + w_class = ITEMSIZE_HUGE + force = 25 + armor_penetration = 30 + slot_flags = SLOT_BACK + fire_sound = 'sound/weapons/railgun.ogg' + safetyoff_sound = 'sound/weapons/railgun_insert.ogg' + hitsound = 'sound/weapons/heavysmash.ogg' + can_suppress = FALSE + has_safety = FALSE + has_item_ratio = FALSE + + max_shots = 20 + self_recharge = TRUE + reliability = 100 + projectile_type = /obj/item/projectile/bullet/flechette + + firemodes = list( + list(mode_name="semiauto", burst=1, projectile_type=/obj/item/projectile/bullet/flechette), + list(mode_name="3-round bursts", burst=3, burst_delay=ROF_SUPERHEAVY, burst_accuracy=list(2,1,1), dispersion=list(0, 10, 15), projectile_type=/obj/item/projectile/bullet/flechette), + list(mode_name="explosive", burst=1, projectile_type=/obj/item/projectile/bullet/flechette/explosive) + ) + + + fire_delay = ROF_UNWIELDY + accuracy = 2 + scoped_accuracy = 3 + +/obj/item/gun/energy/scythe/get_cell() + return DEVICE_NO_CELL + +/obj/item/gun/energy/scythe/fire_checks(atom/target, mob/living/user, clickparams, pointblank, reflex) + if(!ishuman(user)) + return + + var/mob/living/carbon/human/terminator = user + + if(!isipc(terminator)) + to_chat(terminator, SPAN_WARNING("You have no idea how to even use this. Where's the trigger...?")) + return FALSE + + if(!istype(terminator.species, /datum/species/machine/hunter_killer)) + to_chat(terminator, SPAN_WARNING("You can't interface with this weapon's systems at all. It feels entirely alien.")) + return FALSE + + . = ..() + +/obj/item/gun/energy/scythe/verb/scope() + set category = "Object" + set name = "Use Scope" + set src in usr + + if(!ishuman(usr)) + return + + var/mob/living/carbon/human/terminator = usr + if(!terminator.use_check_and_message()) + return + + if(!isipc(terminator)) + to_chat(terminator, SPAN_WARNING("You have no idea where to even look...")) + return + + if(!istype(terminator.species, /datum/species/machine/hunter_killer)) + to_chat(terminator, SPAN_WARNING("These systems are far too alien for even you to figure out.")) + return + + if(wielded) + playsound(terminator, 'sound/items/goggles_charge.ogg') + toggle_scope(2, terminator) + else + to_chat(terminator, SPAN_WARNING("You can't look through the scope without stabilizing the rifle!")) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 085e64c6279..b455b0e5dd3 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -432,6 +432,7 @@ icon = 'icons/obj/terminator.dmi' icon_state = "flechette_bullet" damage = 40 + armor_penetration = 15 damage_type = DAMAGE_BRUTE check_armor = "bullet" embed = 1 @@ -444,6 +445,7 @@ shrapnel_type = /obj/item/material/shard/shrapnel/flechette penetrating = 0 damage = 10 + armor_penetration = 60 /obj/item/projectile/bullet/gauss name = "slug" diff --git a/code/unit_tests/create_and_destroy.dm b/code/unit_tests/create_and_destroy.dm index 29202d107e8..20a1fcc22e7 100644 --- a/code/unit_tests/create_and_destroy.dm +++ b/code/unit_tests/create_and_destroy.dm @@ -85,10 +85,10 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE) /obj/structure/mech_wreckage/powerloader, // Sleeps in init - /mob/living/carbon/human/terminator, + /mob/living/carbon/human/hunter_killer, // Mysterious failure in init, with gcdelete -1 - /mob/living/carbon/human/terminator, + /mob/living/carbon/human/hunter_killer, /obj/spellbutton, diff --git a/html/changelogs/mattatlas-iamwhatiam.yml b/html/changelogs/mattatlas-iamwhatiam.yml new file mode 100644 index 00000000000..45be2fb43fd --- /dev/null +++ b/html/changelogs/mattatlas-iamwhatiam.yml @@ -0,0 +1,42 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: MattAtlas (Code), Noble Row (Sprites) + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a new mob and a weapon for Purpose." + - rscadd: "Gave flechette ammunition AP." diff --git a/icons/clothing/rig/hunter_killer.dmi b/icons/clothing/rig/hunter_killer.dmi new file mode 100644 index 00000000000..7109696ffd9 Binary files /dev/null and b/icons/clothing/rig/hunter_killer.dmi differ diff --git a/icons/clothing/rig/terminator.dmi b/icons/clothing/rig/terminator.dmi deleted file mode 100644 index 5f548d05192..00000000000 Binary files a/icons/clothing/rig/terminator.dmi and /dev/null differ diff --git a/icons/mob/human_races/ipc/r_hunter_killer.dmi b/icons/mob/human_races/ipc/r_hunter_killer.dmi new file mode 100644 index 00000000000..1f5eba57d46 Binary files /dev/null and b/icons/mob/human_races/ipc/r_hunter_killer.dmi differ diff --git a/icons/mob/human_races/ipc/r_terminator.dmi b/icons/mob/human_races/ipc/r_terminator.dmi deleted file mode 100644 index a235751a426..00000000000 Binary files a/icons/mob/human_races/ipc/r_terminator.dmi and /dev/null differ diff --git a/icons/obj/guns/scythe.dmi b/icons/obj/guns/scythe.dmi new file mode 100644 index 00000000000..a4f477187ae Binary files /dev/null and b/icons/obj/guns/scythe.dmi differ