[MIRROR] The Laser Musket (2023) (Settlement Helper Edition) [MDB IGNORE] (#22156)
* The Laser Musket (2023) (Settlement Helper Edition) (#76231) ## About The Pull Request This adds a craftable laser musket to the game. It's slow and unwieldy, but consistent! I'd be happy to tweak the numbers if it's too good/bad. This PR also adds an independent militia ERT, who travels the spinward sector to help defend stations! TO DO LIST: - [x] Finish worn sprites - [x] Add a crafting recipe on par with the pipegun - [x] Add bayonets - [x] Separate charging into two stages and REDO THE AUDIO AAAA - [x] Clean up code (Needs review, totally) Scrapped: - Possibly add overcharge mechanic (This is just beyond my skill level for now) - Find a unique sound for the weapon firing (We have a unique projectile, and I can't a sound that fits more than the laser gun one)      Inhands by RedSentry27 Suit sprite by Kinnebian Prime Laser Musket sprites by RedSentry27 Balance Considerations (ew): 25 damage (30 on prime) Normal wound 40 Stamina damage (45 on prime) Weak to armour (prime not weak to armor) 2 second charge time, needs to be charged twice No overcharge Requires two hands to hold (like a chainsaw) Crafting Recipe: One rifle stock Fifteen Cable Coils Four Iron Rods One micro laser One capacitor One pair of prescription glasses One drinking glass Craft for 10 seconds with a wirecutter and screwdriver Prime crafting recipe: (REQUIRES READING MAINTENANCE LOOT: "journal of a space ranger") One laser musket Fifteen cable coils Five silver One water recycler Fifteen units of nuka cola Craft for 30 seconds with a screwdriver while wearing cowboy boots and a cowboy hat ## Why It's Good For The Game The idea of assistants and revs forming firing lines in the halls to shoot eachother sounds hilarious. Besides, we need a parallel to the pipegun, and this is the funniest way to do so. ## Changelog 🆑 Cheshify, Kinnebian, and RedSentry27 add: Maintenance engineers have sent out blueprints across the sector for a new laser musket. admin: A new energy-gun toting ERT is available to send to the crew. --------- Co-authored-by: carlarctg <53100513+carlarctg@ users.noreply.github.com> * The Laser Musket (2023) (Settlement Helper Edition) * Update guns.dm * Update guns.dm * Fixes vox/teshari greyscale config paths --------- Co-authored-by: Cheshify <73589390+Cheshify@users.noreply.github.com> Co-authored-by: carlarctg <53100513+carlarctg@ users.noreply.github.com> Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com> Co-authored-by: Bloop <vinylspiders@gmail.com>
@@ -6,3 +6,4 @@
|
||||
#define DOAFTER_SOURCE_SPIDER "doafter_spider"
|
||||
#define DOAFTER_SOURCE_HEAL_TOUCH "doafter_heal_touch"
|
||||
#define DOAFTER_SOURCE_PLANTING_DEVICE "doafter_planting_device"
|
||||
#define DOAFTER_SOURCE_CHARGE_MUSKET "doafter_charge_musket"
|
||||
|
||||
@@ -344,6 +344,7 @@ GLOBAL_LIST_INIT(rarity_loot, list(//rare: really good items
|
||||
list(//misc
|
||||
/obj/item/book/granter/crafting_recipe/pipegun_prime = 1,
|
||||
/obj/item/book/granter/crafting_recipe/trash_cannon = 1,
|
||||
/obj/item/book/granter/crafting_recipe/laser_musket_prime = 1,
|
||||
/obj/item/book/granter/sign_language = 1,
|
||||
/obj/item/disk/nuclear/fake = 1,
|
||||
/obj/item/skillchip/brainwashing = 1,
|
||||
|
||||
@@ -296,3 +296,35 @@
|
||||
/obj/item/storage/toolbox = 1,
|
||||
)
|
||||
category = CAT_WEAPON_RANGED
|
||||
|
||||
/datum/crafting_recipe/laser_musket
|
||||
name = "Laser Musket"
|
||||
result = /obj/item/gun/energy/laser/musket
|
||||
reqs = list(
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/cable_coil = 15,
|
||||
/obj/item/stack/rods = 4,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/clothing/glasses/regular = 1,
|
||||
/obj/item/reagent_containers/cup/glass/drinkingglass = 1,
|
||||
)
|
||||
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
time = 10 SECONDS
|
||||
category = CAT_WEAPON_RANGED
|
||||
|
||||
/datum/crafting_recipe/laser_musket_prime
|
||||
name = "Heroic Laser Musket"
|
||||
always_available = FALSE
|
||||
result = /obj/item/gun/energy/laser/musket/prime
|
||||
reqs = list(
|
||||
/obj/item/gun/energy/laser/musket = 1,
|
||||
/obj/item/stack/cable_coil = 15,
|
||||
/obj/item/stack/sheet/mineral/silver = 5,
|
||||
/obj/item/stock_parts/water_recycler = 1,
|
||||
/datum/reagent/consumable/nuka_cola = 15,
|
||||
)
|
||||
tool_behaviors = list(TOOL_SCREWDRIVER)
|
||||
tool_paths = list(/obj/item/clothing/head/cowboy, /obj/item/clothing/shoes/cowboy)
|
||||
time = 30 SECONDS //contemplate for a bit
|
||||
category = CAT_WEAPON_RANGED
|
||||
|
||||
@@ -118,3 +118,13 @@
|
||||
polldesc = "a Centcom-hired bounty hunting gang"
|
||||
random_names = FALSE
|
||||
ert_template = /datum/map_template/shuttle/ert/bounty
|
||||
|
||||
/datum/ert/militia
|
||||
roles = list(/datum/antagonist/ert/militia, /datum/antagonist/ert/militia/general)
|
||||
leader_role = /datum/antagonist/ert/militia/general
|
||||
teamsize = 4
|
||||
opendoors = FALSE
|
||||
rename_team = "Frontier Militia"
|
||||
mission = "Having heard the station's request for aid, assist the crew in defending themselves."
|
||||
polldesc = "an independent station defense militia"
|
||||
random_names = TRUE
|
||||
|
||||
@@ -193,3 +193,9 @@
|
||||
. = ..()
|
||||
|
||||
access = list(ACCESS_CENT_GENERAL, ACCESS_CENT_LIVING) | (SSid_access.get_region_access_list(list(REGION_ALL_STATION)) - ACCESS_CHANGE_IDS)
|
||||
|
||||
/datum/id_trim/centcom/ert/militia
|
||||
assignment = "Frontier Militia"
|
||||
|
||||
/datum/id_trim/centcom/ert/militia/general
|
||||
assignment = "Frontier Militia General"
|
||||
|
||||
@@ -1124,6 +1124,14 @@
|
||||
registered_name = JOB_ERT_CLOWN
|
||||
trim = /datum/id_trim/centcom/ert/clown
|
||||
|
||||
/obj/item/card/id/advanced/centcom/ert/militia
|
||||
registered_name = "Frontier Militia"
|
||||
trim = /datum/id_trim/centcom/ert/militia
|
||||
|
||||
/obj/item/card/id/advanced/centcom/ert/militia/general
|
||||
registered_name = "Frontier Militia General"
|
||||
trim = /datum/id_trim/centcom/ert/militia/general
|
||||
|
||||
/obj/item/card/id/advanced/black
|
||||
name = "black identification card"
|
||||
desc = "This card is telling you one thing and one thing alone. The person holding this card is an utter badass."
|
||||
|
||||
@@ -17,3 +17,23 @@
|
||||
/obj/item/book/granter/crafting_recipe/pipegun_prime/recoil(mob/living/user)
|
||||
to_chat(user, span_warning("The book turns to dust in your hands."))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/laser_musket_prime
|
||||
name = "journal of a space ranger"
|
||||
desc = "A singed and weathered book, how did this get onto the station?"
|
||||
crafting_recipe_types = list(
|
||||
/datum/crafting_recipe/laser_musket_prime
|
||||
)
|
||||
icon_state = "book1"
|
||||
remarks = list(
|
||||
"Man, these schematics look complicated.",
|
||||
"What's with the soda, isn't that radioactive?",
|
||||
"...but where does the cowboy hat come into play...",
|
||||
"Oh, so that explains why I need the silver.",
|
||||
"Yeah yeah, enough with the warnings, how does hard does it hit?",
|
||||
"Going down in a blaze of glory? Who cares, time for a new gun.",
|
||||
)
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/laser_musket_prime/recoil(mob/living/user)
|
||||
to_chat(user, span_warning("The book turns to dust in your hands."))
|
||||
qdel(src)
|
||||
|
||||
@@ -276,3 +276,13 @@
|
||||
name = "Marine Medic"
|
||||
outfit = /datum/outfit/centcom/ert/marine/medic
|
||||
role = "Medical Officer"
|
||||
|
||||
/datum/antagonist/ert/militia
|
||||
name = "Frontier Militia"
|
||||
outfit = /datum/outfit/centcom/militia
|
||||
role = "Minuteman"
|
||||
|
||||
/datum/antagonist/ert/militia/general
|
||||
name = "Frontier Militia General"
|
||||
outfit = /datum/outfit/centcom/militia/general
|
||||
role = "Minuteman Leader"
|
||||
|
||||
@@ -543,3 +543,13 @@
|
||||
fire = 100
|
||||
acid = 90
|
||||
wound = 10
|
||||
|
||||
//Independant Militia
|
||||
/obj/item/clothing/head/beret/militia
|
||||
name = "\improper Militia General's Beret"
|
||||
desc = "A rallying cry for the inhabitants of the Spinward Sector, the heroes that wear this keep the horrors of the galaxy at bay. Call them, and they'll be there in a minute!"
|
||||
icon_state = "beret_badge"
|
||||
greyscale_config = /datum/greyscale_config/beret_badge
|
||||
greyscale_config_worn = /datum/greyscale_config/beret_badge/worn
|
||||
greyscale_colors = "#43523d#a2abb0"
|
||||
armor_type = /datum/armor/beret_sec
|
||||
|
||||
@@ -537,3 +537,32 @@
|
||||
belt = /obj/item/storage/belt/utility/full/powertools/rcd
|
||||
glasses = /obj/item/clothing/glasses/hud/diagnostic/sunglasses
|
||||
additional_radio = /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/datum/outfit/centcom/militia
|
||||
name = "Militia Man"
|
||||
|
||||
id = /obj/item/card/id/advanced/centcom/ert/militia
|
||||
suit = /obj/item/clothing/suit/armor/militia
|
||||
suit_store = /obj/item/gun/energy/laser/musket
|
||||
head = /obj/item/clothing/head/cowboy/black
|
||||
uniform = /obj/item/clothing/under/rank/centcom/military
|
||||
shoes = /obj/item/clothing/shoes/cowboy
|
||||
gloves = /obj/item/clothing/gloves/combat
|
||||
back = /obj/item/storage/backpack/satchel/leather
|
||||
l_pocket = /obj/item/switchblade
|
||||
r_pocket = /obj/item/reagent_containers/hypospray/medipen/salacid
|
||||
belt = /obj/item/storage/belt/holster/energy/thermal
|
||||
backpack_contents = list(
|
||||
/obj/item/storage/box/survival = 1,
|
||||
/obj/item/storage/medkit/emergency = 1,
|
||||
/obj/item/crowbar = 1,
|
||||
/obj/item/restraints/handcuffs = 1,
|
||||
)
|
||||
|
||||
/datum/outfit/centcom/militia/general
|
||||
name = "Militia General"
|
||||
|
||||
id = /obj/item/card/id/advanced/centcom/ert/militia/general
|
||||
head = /obj/item/clothing/head/beret/militia
|
||||
l_hand = /obj/item/megaphone
|
||||
suit_store = /obj/item/gun/energy/laser/musket/prime
|
||||
|
||||
@@ -586,3 +586,23 @@
|
||||
inhand_icon_state = "b_suit"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
dog_fashion = null
|
||||
|
||||
/obj/item/clothing/suit/armor/militia
|
||||
name = "station defender's coat"
|
||||
desc = "A well worn uniform used by militia across the frontier, it's thick padding useful for cushioning blows."
|
||||
icon_state = "militia"
|
||||
inhand_icon_state = "b_suit"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
cold_protection = CHEST|GROIN|ARMS
|
||||
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
|
||||
armor_type = /datum/armor/coat_militia
|
||||
|
||||
/datum/armor/coat_militia
|
||||
melee = 40
|
||||
bullet = 40
|
||||
laser = 30
|
||||
energy = 25
|
||||
bomb = 50
|
||||
fire = 40
|
||||
acid = 50
|
||||
wound = 30
|
||||
|
||||
@@ -24,6 +24,13 @@
|
||||
/obj/item/ammo_casing/energy/laser/hos
|
||||
e_cost = 120
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/musket
|
||||
projectile_type = /obj/projectile/beam/laser/musket
|
||||
e_cost = 1000
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/musket/prime
|
||||
projectile_type = /obj/projectile/beam/laser/musket/prime
|
||||
|
||||
/obj/item/ammo_casing/energy/laser/practice
|
||||
projectile_type = /obj/projectile/beam/practice
|
||||
select_name = "practice"
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/obj/item/gun/energy/laser/musket
|
||||
name = "laser musket"
|
||||
desc = "A hand-crafted laser weapon, it has a hand crank on the side to charge it up."
|
||||
icon_state = "musket"
|
||||
inhand_icon_state = "musket"
|
||||
worn_icon_state = "las_musket"
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/musket)
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
obj_flags = UNIQUE_RENAME
|
||||
can_bayonet = TRUE
|
||||
knife_x_offset = 22
|
||||
knife_y_offset = 11
|
||||
/// Indicates if the weapon has been fully charged or not
|
||||
var/is_charging = FALSE
|
||||
/// Prevents the weapon's charge sound from being spammed
|
||||
COOLDOWN_DECLARE(charge_sound_cooldown)
|
||||
|
||||
/obj/item/gun/energy/laser/musket/attack_self(mob/living/user as mob)
|
||||
var/obj/item/stock_parts/cell/charging_cell = get_cell()
|
||||
if(charging_cell.charge >= charging_cell.maxcharge)
|
||||
balloon_alert(user, "already charged!")
|
||||
return
|
||||
if(is_charging)
|
||||
return
|
||||
is_charging = TRUE
|
||||
if(COOLDOWN_FINISHED(src, charge_sound_cooldown))
|
||||
COOLDOWN_START(src, charge_sound_cooldown, 1.8 SECONDS)
|
||||
playsound(src, 'sound/weapons/laser_crank.ogg', 40)
|
||||
balloon_alert(user, "charging...")
|
||||
if (!do_after(user, 2 SECONDS, src, interaction_key = DOAFTER_SOURCE_CHARGE_MUSKET))
|
||||
is_charging = FALSE
|
||||
return
|
||||
charging_cell.give(500)
|
||||
update_appearance()
|
||||
is_charging = FALSE
|
||||
balloon_alert(user, "charged")
|
||||
|
||||
/obj/item/gun/energy/laser/musket/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/two_handed, require_twohands = TRUE, force_wielded = 10)
|
||||
|
||||
/obj/item/gun/energy/laser/musket/prime
|
||||
name = "heroic laser musket"
|
||||
desc = "A well-engineered, hand-charged laser weapon. Its capacitors hum with potential."
|
||||
icon_state = "musket_prime"
|
||||
inhand_icon_state = "musket_prime"
|
||||
worn_icon_state = "las_musket_prime"
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/laser/musket/prime)
|
||||
@@ -55,6 +55,21 @@
|
||||
else if(isturf(target))
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser/wall
|
||||
|
||||
/obj/projectile/beam/laser/musket
|
||||
name = "low-power laser"
|
||||
icon_state = "laser_musket"
|
||||
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
|
||||
damage = 25
|
||||
stamina = 40
|
||||
light_color = COLOR_STRONG_VIOLET
|
||||
weak_against_armour = TRUE
|
||||
|
||||
/obj/projectile/beam/laser/musket/prime
|
||||
name = "mid-power laser"
|
||||
damage = 30
|
||||
stamina = 45
|
||||
weak_against_armour = FALSE
|
||||
|
||||
/obj/projectile/beam/weak
|
||||
damage = 15
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 81 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 134 KiB |
@@ -44,6 +44,11 @@
|
||||
worn_icon = null
|
||||
worn_icon_state = "gun"
|
||||
|
||||
/obj/item/gun/energy/laser/musket //We need to have this because we overwrote the icon file for laser guns.
|
||||
icon = 'icons/obj/weapons/guns/energy.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
|
||||
|
||||
/obj/item/gun/energy/ionrifle
|
||||
icon = 'modular_skyrat/modules/aesthetics/guns/icons/energy.dmi'
|
||||
lefthand_file = 'modular_skyrat/modules/aesthetics/guns/icons/guns_lefthand.dmi'
|
||||
|
||||
@@ -104,6 +104,9 @@
|
||||
/obj/item/clothing/head/beret/centcom_formal
|
||||
greyscale_config_worn_teshari = /datum/greyscale_config/beret_badge/worn/teshari
|
||||
|
||||
/obj/item/clothing/head/beret/militia
|
||||
greyscale_config_worn_teshari = /datum/greyscale_config/beret_badge/worn/teshari
|
||||
|
||||
/obj/item/clothing/head/beret/sec/navywarden
|
||||
greyscale_config_worn_teshari = /datum/greyscale_config/beret_badge_fancy/worn/teshari
|
||||
|
||||
|
||||
@@ -37,6 +37,9 @@
|
||||
/obj/item/clothing/head/beret/centcom_formal
|
||||
greyscale_config_worn_vox = /datum/greyscale_config/beret_badge/worn/vox
|
||||
|
||||
/obj/item/clothing/head/beret/militia
|
||||
greyscale_config_worn_vox = /datum/greyscale_config/beret_badge/worn/vox
|
||||
|
||||
/obj/item/clothing/head/beret/sec/navywarden
|
||||
greyscale_config_worn_vox = /datum/greyscale_config/beret_badge_fancy/worn/vox
|
||||
|
||||
|
||||
@@ -4743,6 +4743,7 @@
|
||||
#include "code\modules\projectiles\guns\energy\kinetic_accelerator.dm"
|
||||
#include "code\modules\projectiles\guns\energy\laser.dm"
|
||||
#include "code\modules\projectiles\guns\energy\laser_gatling.dm"
|
||||
#include "code\modules\projectiles\guns\energy\laser_musket.dm"
|
||||
#include "code\modules\projectiles\guns\energy\mounted.dm"
|
||||
#include "code\modules\projectiles\guns\energy\pulse.dm"
|
||||
#include "code\modules\projectiles\guns\energy\recharge.dm"
|
||||
|
||||