From 0cf56bb126aa2c40702226ae15cd3b52acaa43e7 Mon Sep 17 00:00:00 2001
From: juniper <70682905+crunchypretzels@users.noreply.github.com>
Date: Sun, 5 May 2024 09:56:57 -0400
Subject: [PATCH] adds some new coalition weapons (#18812)

Adds four new weapons from the United Syndicates and the Federal
Technocracy.
Himeo has received two new guns based on the plasma cutter; the Guthrie
assault blaster and the Sabo-Tabby heavy blaster pistol. Both use a
hydrogen cell 'magazine' to mimic the more advanced, more accurate
Zavodskoi blasters on the market.
Galatea, likewise, has received the O61-B laser rifle pack set, an
export model of their own O61 Infantry Laser Rifle, and a gauss 'nitro
express' rifle, which fires tungsten slugs. Attempting to fire the O61
without a Galatean implant will result in consequences.
All sprites are my own handiwork, and all credit for the laser pack goes
to Alberyk for his work on the gatling gun. Matt and Schwann also
provided a great deal of help.
---
aurorastation.dme | 1 +
.../weapons/implants/implants/galatean.dm | 36 ++++
.../game/objects/items/weapons/power_cells.dm | 11 ++
.../projectiles/guns/energy/blaster.dm | 103 +++++++++++
.../projectiles/guns/energy/special.dm | 163 ++++++++++++++++++
.../projectiles/guns/projectile/shotgun.dm | 27 +++
.../crunchypretzels - coalitionguns.yml | 41 +++++
icons/obj/guns/galatea_laser.dmi | Bin 0 -> 3536 bytes
icons/obj/guns/galatea_nitro.dmi | Bin 0 -> 1488 bytes
icons/obj/guns/himeo_blaster.dmi | Bin 0 -> 2194 bytes
icons/obj/guns/himeo_pistol.dmi | Bin 0 -> 1047 bytes
icons/obj/machinery/cell_charger.dmi | Bin 2844 -> 3281 bytes
12 files changed, 382 insertions(+)
create mode 100644 code/game/objects/items/weapons/implants/implants/galatean.dm
create mode 100644 html/changelogs/crunchypretzels - coalitionguns.yml
create mode 100644 icons/obj/guns/galatea_laser.dmi
create mode 100644 icons/obj/guns/galatea_nitro.dmi
create mode 100644 icons/obj/guns/himeo_blaster.dmi
create mode 100644 icons/obj/guns/himeo_pistol.dmi
diff --git a/aurorastation.dme b/aurorastation.dme
index 9def7131710..31475ffcfb6 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -1258,6 +1258,7 @@
#include "code\game\objects\items\weapons\implants\implants\emp.dm"
#include "code\game\objects\items\weapons\implants\implants\explosive.dm"
#include "code\game\objects\items\weapons\implants\implants\freedom.dm"
+#include "code\game\objects\items\weapons\implants\implants\galatean.dm"
#include "code\game\objects\items\weapons\implants\implants\health_tracker.dm"
#include "code\game\objects\items\weapons\implants\implants\loyalty.dm"
#include "code\game\objects\items\weapons\implants\implants\mindshield.dm"
diff --git a/code/game/objects/items/weapons/implants/implants/galatean.dm b/code/game/objects/items/weapons/implants/implants/galatean.dm
new file mode 100644
index 00000000000..e3e59b21821
--- /dev/null
+++ b/code/game/objects/items/weapons/implants/implants/galatean.dm
@@ -0,0 +1,36 @@
+// GALATEAN BIOAUGMENTATIONS
+// the weird, uncomfortable places where meat meets metal
+
+/obj/item/implant/export_lasgun
+ name = "bioelectrical conduit"
+ desc = "A Galatean bioaugmentation that channels the innate bioelectricity of the human nervous system. Use of this augment against the terms of its packaging are a violation of Galatean law."
+ icon_state = "implant_excel"
+ implant_icon = "excel"
+ implant_color = "#ffd079"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 2, TECH_ILLEGAL = 3)
+ default_action_type = null
+ known = TRUE
+
+/obj/item/implant/export_lasgun/get_data()
+ . = {"
+Implant Specifications:
+Name: Planetary Weapons Development Bureau Bioelectricity Conduit, Export-Model
+Life: Six years.
+Important Notes: Personnel injected with this device can operate certain approved models of laser weapon without side effects..
+
+Implant Details:
+Function: Conducts the body's electricity into usable forms of electricity for Galatean export-model weaponry.
+Integrity: Implant will last for a period of six standard years, after which it will degrade and require removal."}
+
+/obj/item/implant/export_lasgun/implanted(mob/M)
+ to_chat(M, SPAN_GOOD("Static dances across your skin."))
+ if(ishuman(M))
+ return TRUE
+
+/obj/item/implantcase/export_lasgun
+ name = "glass case - 'bioconduit'"
+ imp = /obj/item/implant/export_lasgun
+
+/obj/item/implanter/export_lasgun
+ name = "implanter-bioconductor"
+ imp = /obj/item/implant/export_lasgun
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index 073ddf3fb7b..77cc9bfd6f0 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -211,3 +211,14 @@
. = ..()
charge = 0
update_icon()
+
+/obj/item/cell/hydrogen
+ name = "hydrogen blaster canister"
+ desc = "An industrial-grade hydrogen power cell, used in various blaster weapons- or blaster-adjacent power tools- in place of expensive phoron."
+ icon_state = "hycell"
+ maxcharge = 10000 // hydrogen is actually used today in electric cars
+ matter = list(DEFAULT_WALL_MATERIAL = 700, MATERIAL_GLASS = 70)
+ w_class = ITEMSIZE_SMALL
+ drop_sound = 'sound/items/drop/gascan.ogg'
+ pickup_sound = 'sound/items/pickup/gascan.ogg'
+ origin_tech = list(TECH_POWER = 4)
diff --git a/code/modules/projectiles/guns/energy/blaster.dm b/code/modules/projectiles/guns/energy/blaster.dm
index 130ccf83502..5673d1b3d52 100644
--- a/code/modules/projectiles/guns/energy/blaster.dm
+++ b/code/modules/projectiles/guns/energy/blaster.dm
@@ -136,3 +136,106 @@
list(mode_name="semiauto", burst=1, fire_delay=ROF_INTERMEDIATE),
list(mode_name="3-round bursts", burst=3, burst_accuracy=list(2,1,1), dispersion=list(0, 7.5))
)
+
+/obj/item/gun/energy/blaster/himeo
+ name = "himean assault blaster"
+ desc = "The standard infantry blaster of the Himean Planetary Guard. 'TO RESIST EVIL BY FORCE' is stamped on the side."
+ desc_extended = "Originally developed in 2351, the Type-11 \"Guthrie\" is a descendant of the first Himean-made weapons; haphazardly overcharged mining equipment. If it ain't broke, don't fix it; variants \
+ of this rifle have served in the United Syndicates' arsenal for generations, although none have matched modern improvements 'borrowed' from Zavodskoi Interstellar. Waterproof, spaceproof, idiot-proof; it's here to stay, even as advanced Xanan ballistics \
+ creep their way into the market. Ironically, lend-lease aid to the now-defunct League of Independent Corporate-Free Systems have seen a great deal of these end up in the hands of pirates."
+ icon = 'icons/obj/guns/himeo_blaster.dmi'
+ icon_state = "himeoblaster"
+ item_state = "himeoblaster"
+ projectile_type = /obj/item/projectile/energy/blaster
+ usesound = 'sound/weapons/plasma_cutter.ogg'
+ fire_sound = 'sound/weapons/gunshot/slammer.ogg'
+ cell_type = /obj/item/cell/hydrogen
+ needspin = FALSE // can't remove the cell if it has a pin
+ charge_cost = 500 // 20 mag
+ slot_flags = SLOT_BACK
+ w_class = ITEMSIZE_LARGE
+ is_wieldable = TRUE
+ can_bayonet = FALSE
+ sharp = FALSE
+ edge = FALSE
+ accuracy = -1
+ fire_delay = ROF_RIFLE
+ fire_delay_wielded = 5
+ burst_delay = 4
+ accuracy_wielded = 2
+ origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 3)
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=ROF_INTERMEDIATE),
+ list(mode_name="2-round bursts", burst=2, burst_accuracy=list(2,1,1), dispersion=list(0, 7.5)),
+ list(mode_name="full auto", can_autofire=1, burst=1, fire_delay=5, fire_delay_wielded=2, one_hand_fa_penalty=12, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(5, 10, 15, 20, 25)) //same as the assault rifle
+ )
+
+/obj/item/gun/energy/blaster/himeo/get_examine_text(mob/user, distance, is_adjacent, infix, suffix) //stolen from the plasma cutter
+ . = ..()
+ if(is_adjacent)
+ if(power_supply)
+ . += FONT_SMALL(SPAN_NOTICE("It has a [capitalize_first_letters(power_supply.name)] in the cell mount."))
+ else
+ . += FONT_SMALL(SPAN_WARNING("It has no cell installed."))
+
+/obj/item/gun/energy/blaster/himeo/attackby(obj/item/attacking_item, mob/user)
+ if(attacking_item.isscrewdriver())
+ if(power_supply)
+ playsound(user, 'sound/machines/compbeep1.ogg', 40, FALSE)
+ to_chat(user, SPAN_NOTICE("You uninstall \the [power_supply]."))
+ power_supply.forceMove(get_turf(src))
+ if(ishuman(user))
+ var/mob/living/carbon/human/H = user
+ H.put_in_hands(power_supply)
+ power_supply = null
+ update_icon()
+ else
+ to_chat(user, SPAN_WARNING("\The [src] doesn't have a cell installed!"))
+ else if(istype(attacking_item, /obj/item/cell/hydrogen))
+ if(power_supply)
+ to_chat(user, SPAN_WARNING("\The [src] already has a cell in the chamber!"))
+ else
+ playsound(user, 'sound/weapons/kinetic_reload.ogg', 40, FALSE)
+ to_chat(user, SPAN_NOTICE("You install \the [attacking_item] into \the [src]."))
+ user.drop_from_inventory(attacking_item, src)
+ power_supply = attacking_item
+ update_icon()
+ else
+ ..()
+
+/obj/item/gun/energy/blaster/himeo/afterattack(atom/A, mob/living/user) // if the cell is drained, eject it so we're not fumbling for a screwdriver mid-shootout
+ ..()
+ if(power_supply.charge == 0)
+ power_supply.forceMove(get_turf(src.loc))
+ user.visible_message(
+ "[power_supply] pops out of the cell mount!",
+ "[power_supply] pops out of \the [src] and clatters on the floor!"
+ )
+ power_supply.update_icon()
+ power_supply = null
+ playsound(user, 'sound/machines/rig/rig_retract.ogg', 40, FALSE)
+ update_icon()
+
+/obj/item/gun/energy/blaster/himeo/pistol
+ name = "himean heavy blaster pistol"
+ desc = "The standard sidearm of the Himean Planetary Guard. For those revolutions you cannot fight with fists."
+ desc_extended = "A plasma cutter gave its life for the first Type-45 \"Sabo-Tabby\" pistol. Powered by the same hydrogen cells as the Type-11 \"Guthrie\" rifle, this robust model has earned the nickname of \
+ the 'One Big Handgun' in those foreign markets it has cropped up. What was initially seen as a flaw in the power converter led to its 'magnum'-sized blaster bolts."
+ icon = 'icons/obj/guns/himeo_pistol.dmi'
+ icon_state = "himeopistol"
+ item_state = "himeopistol"
+ projectile_type = /obj/item/projectile/energy/blaster/heavy
+ usesound = 'sound/weapons/plasma_cutter.ogg'
+ fire_sound = 'sound/weapons/laserstrong.ogg'
+ charge_cost = 1250 // leaky but lethal
+ slot_flags = SLOT_BELT|SLOT_HOLSTER
+ w_class = ITEMSIZE_SMALL
+ force = 11
+ is_wieldable = FALSE
+ can_bayonet = FALSE
+ sharp = FALSE
+ edge = FALSE
+ origin_tech = list(TECH_COMBAT = 5, TECH_MAGNET = 3)
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=ROF_INTERMEDIATE)
+ )
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 950aea9806b..e92180ebf0e 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -509,3 +509,166 @@
fire_delay = 20
accuracy = 40
muzzle_flash = 10
+
+/obj/item/laserpack
+ name = "galatean bioelectrical reactor backpack"
+ desc = "An ominously-thrumming backpack-mounted machine, powering an O61 Infantry Laser Rifle."
+ icon = 'icons/obj/guns/galatea_laser.dmi'
+ icon_state = "laserpack_holstered"
+ item_state = "laserpack_holstered"
+ contained_sprite = 1
+ w_class = ITEMSIZE_LARGE
+ slot_flags = SLOT_BACK
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_ILLEGAL = 7)
+ action_button_name = "Deploy the Laser Rifle"
+
+ var/obj/item/gun/energy/galatea/gun
+ var/armed = FALSE
+
+/obj/item/laserpack/update_icon() // all credit to alb for minigun code, which this is
+ ..()
+ if(armed)
+ icon_state = "laserpack"
+ item_state = "laserpack"
+ else
+ icon_state = "laserpack_holstered"
+ item_state = "laserpack_holstered"
+
+/obj/item/laserpack/Initialize() // add a gun to the pack
+ . = ..()
+ gun = make_gun()
+ gun.source = src
+ gun.forceMove(src)
+
+/obj/item/laserpack/proc/make_gun()
+ return new /obj/item/gun/energy/galatea()
+
+/obj/item/laserpack/ui_action_click()
+ if(src in usr)
+ toggle_lasergun()
+
+/obj/item/laserpack/verb/toggle_lasergun() // ui button and a verb
+ set name = "Deploy the Laser Rifle"
+ set category = "Object"
+ var/mob/living/carbon/human/user
+ if(ishuman(user))
+ user = usr
+ else
+ return
+
+ if(!user)
+ return
+
+ if (user.back!= src)
+ to_chat(user, SPAN_WARNING("\The [src] must be worn to deploy \the [gun]!"))
+ return
+
+ if(use_check_and_message(user))
+ return
+
+ if(!gun)
+ to_chat(user, SPAN_WARNING("There is no weapon attached to the \the [src]!"))
+
+ if(armed)
+ to_chat(user, SPAN_WARNING("\The [src] has been already deployed!"))
+
+ else
+ if(!user.put_in_hands(gun))
+ to_chat(user, SPAN_WARNING("You need a free hand to hold \the [gun]!"))
+ return
+
+ armed = TRUE
+ update_icon()
+ user.update_inv_back()
+
+/obj/item/laserpack/equipped(mob/user, slot)
+ ..()
+ if(slot != slot_back) // if we're not wearing it, remove it
+ remove_gun()
+ user.update_inv_back()
+
+/obj/item/laserpack/proc/remove_gun()
+ if(!gun)
+ return
+ if(ismob(gun.loc))
+ var/mob/M = gun.loc
+ if(M.drop_from_inventory(gun, src))
+ update_icon()
+ else
+ gun.forceMove(src)
+ update_icon()
+
+ armed = FALSE
+ return
+
+/obj/item/laserpack/Destroy()
+ if(gun)
+ QDEL_NULL(gun)
+ return ..()
+
+/obj/item/laserpack/attackby(obj/item/attacking_item, mob/user, params) // if you hit the pack with the gun, "stow" it
+ if(use_check_and_message(user) && attacking_item == gun)
+ remove_gun()
+ update_icon()
+ user.update_inv_back()
+ return TRUE
+ else
+ return ..()
+
+/obj/item/gun/energy/galatea
+ name = "galatean laser rifle"
+ desc = "The Galatean O61-B, an export model of their advanced Mark 61 Infantry Rifle."
+ desc_extended = "Galatean soldiers are heavily bioaugmented, combining soldier and weapon into a cohesive unit. The Mark 61 Infantry Rifle is one such example, drawing on the bioelectricity of the human body \
+ through an implant with which to power the gun. Unaugmented users complained of headaches, lethargy, and impossible dreams; The O61B has integrated the bioaugments into the firing mechanism, preventing 'baselines' \
+ from even using it. Luckily, this is an export version, the O61-B, which allows foreign users a taste of advanced Technocracy weaponry for the low price of a single bioaugment."
+ icon = 'icons/obj/guns/galatea_laser.dmi'
+ icon_state = "galatealaser"
+ item_state = "galatealaser"
+ slot_flags = 0
+ has_icon_ratio = FALSE
+ has_item_ratio = FALSE
+ fire_sound = 'sound/weapons/laser3.ogg'
+ needspin = FALSE
+ origin_tech = null
+ charge_meter = FALSE
+ projectile_type = /obj/item/projectile/beam/xray // can't wear a hardsuit, and it's only 15 damage with a lot of AP
+ charge_cost = 100
+ max_shots = 20
+ self_recharge = 1 // bioreactor in the backpack; not entirely defenseless against EMPs
+ fire_delay = 35
+ burst_delay = 2
+ can_turret = 0
+
+ is_wieldable = TRUE
+
+ fire_delay_wielded = 10
+ accuracy_wielded = 0
+
+ var/obj/item/laserpack/source
+
+
+/obj/item/gun/energy/galatea/dropped(mob/user) // the gun is part of the backpack; prevent weirdness
+ ..()
+ if(source)
+ to_chat(user, SPAN_NOTICE("\The [src] snaps back onto \the [source]"))
+ INVOKE_ASYNC(source, TYPE_PROC_REF(/obj/item/laserpack, remove_gun))
+ source.update_icon()
+ user.update_inv_back()
+
+/obj/item/gun/energy/galatea/Move()
+ ..()
+ if(loc != source.loc)
+ INVOKE_ASYNC(source, TYPE_PROC_REF(/obj/item/laserpack, remove_gun)) // prevent even weirder shit
+
+/obj/item/gun/energy/galatea/special_check(var/mob/user) // if you don't have the implant, you get one shot before you get floored (thanks matt)
+ var/obj/item/implant/export_lasgun/E = locate() in user
+ if(E)
+ return TRUE
+ else
+ var/pain_message = pick("All the energy leaves your body with a sickening 'crack'!",
+ "You collapse, like a puppet with its strings cut!",
+ "You're forced to your knees, vision swimming!")
+
+ to_chat(user, SPAN_WARNING("[pain_message]"))
+ user.Weaken(10)
+ return TRUE
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index a696420b548..19e11f5202e 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -211,6 +211,33 @@
w_class = ITEMSIZE_NORMAL
force = 11
+/obj/item/gun/projectile/shotgun/doublebarrel/nitro
+ name = "gauss express rifle"
+ desc = "A Galatean nitro express rifle. Loaded with tungsten slugs."
+ desc_extended = "While Galatea almost universally uses lasers for their weapons, gauss weapons see some use in the hands of expeditionary forces and military specialist units. The Pattern Nine is a single-barrel, double-shot \
+ rifle designed for intermediate range anti-infantry specialists just as much as it is for Tsukuyomian game wardens."
+ icon = 'icons/obj/guns/galatea_nitro.dmi'
+ icon_state = "nitrorifle"
+ item_state = "nitrorifle"
+ //SPEEDLOADER because rapid unloading.
+ //In principle someone could make a speedloader for it, so it makes sense.
+ load_method = SINGLE_CASING|SPEEDLOADER
+ handle_casings = CYCLE_CASINGS
+ max_shells = 2
+ w_class = ITEMSIZE_LARGE
+ force = 10
+ obj_flags = OBJ_FLAG_CONDUCTABLE
+ is_wieldable = TRUE
+ has_wield_state = TRUE
+ slot_flags = SLOT_BACK
+ caliber = "gauss"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
+ ammo_type = /obj/item/ammo_casing/gauss
+ fire_sound = /singleton/sound_category/gauss_fire_sound
+ fire_delay = ROF_INTERMEDIATE
+
+ can_sawoff = FALSE
+
/obj/item/gun/projectile/shotgun/foldable
name = "foldable shotgun"
desc = "A single-shot shotgun that can be folded for easy concealment."
diff --git a/html/changelogs/crunchypretzels - coalitionguns.yml b/html/changelogs/crunchypretzels - coalitionguns.yml
new file mode 100644
index 00000000000..8999ff798be
--- /dev/null
+++ b/html/changelogs/crunchypretzels - coalitionguns.yml
@@ -0,0 +1,41 @@
+################################
+# 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: crunchypretzels
+
+# 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 several new Coalition weapons, along with the necessary equipment to use them."
diff --git a/icons/obj/guns/galatea_laser.dmi b/icons/obj/guns/galatea_laser.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..14da073141d4bb61c25705c47ddefcbee7d32a61
GIT binary patch
literal 3536
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
URV?#27ytkO07*qoM6N<$g1r47_5c6?
literal 0
HcmV?d00001
diff --git a/icons/obj/guns/himeo_pistol.dmi b/icons/obj/guns/himeo_pistol.dmi
new file mode 100644
index 0000000000000000000000000000000000000000..c65bb043084fe9ad1e8b45c8679e0258ca81be1e
GIT binary patch
literal 1047
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
N>xO2qqRVa%{|#0$Rj2>}