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 00000000000..14da073141d Binary files /dev/null and b/icons/obj/guns/galatea_laser.dmi differ diff --git a/icons/obj/guns/galatea_nitro.dmi b/icons/obj/guns/galatea_nitro.dmi new file mode 100644 index 00000000000..649e0300676 Binary files /dev/null and b/icons/obj/guns/galatea_nitro.dmi differ diff --git a/icons/obj/guns/himeo_blaster.dmi b/icons/obj/guns/himeo_blaster.dmi new file mode 100644 index 00000000000..427d465393e Binary files /dev/null and b/icons/obj/guns/himeo_blaster.dmi differ diff --git a/icons/obj/guns/himeo_pistol.dmi b/icons/obj/guns/himeo_pistol.dmi new file mode 100644 index 00000000000..c65bb043084 Binary files /dev/null and b/icons/obj/guns/himeo_pistol.dmi differ diff --git a/icons/obj/machinery/cell_charger.dmi b/icons/obj/machinery/cell_charger.dmi index fdf0f20ba6c..fcc612b4392 100644 Binary files a/icons/obj/machinery/cell_charger.dmi and b/icons/obj/machinery/cell_charger.dmi differ