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)


![image](https://github.com/tgstation/tgstation/assets/73589390/40ee8f1d-5c1f-4638-af70-ff1215b85c9e)

![1211
(1)](https://github.com/tgstation/tgstation/assets/73589390/1a4b9856-a878-4500-96ce-4fd83587fa81)

![musket (2) (2)
(2)](https://github.com/tgstation/tgstation/assets/73589390/2ebdc2ed-6f78-4761-9deb-a1b2d337a02d)

![aaaa1
(1)](https://github.com/tgstation/tgstation/assets/73589390/6076edd3-97c9-41ec-a67a-90717f97eab0)


![image](https://github.com/tgstation/tgstation/assets/73589390/c47e44bd-3f4b-44b3-aaa5-9b1c25a72cad)

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>
This commit is contained in:
Cheshify
2023-06-30 15:54:33 -04:00
committed by GitHub
parent b3df75f00a
commit b9fa1bc8f4
24 changed files with 218 additions and 0 deletions
@@ -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