diff --git a/code/modules/projectiles/guns/energy/laser_ch.dm b/code/modules/projectiles/guns/energy/laser_ch.dm
index 02dc2e0da5..949f3d8350 100644
--- a/code/modules/projectiles/guns/energy/laser_ch.dm
+++ b/code/modules/projectiles/guns/energy/laser_ch.dm
@@ -1,11 +1,28 @@
/obj/item/weapon/gun/energy/laser
icon = 'icons/obj/64x32guns_ch.dmi'
icon_state = "lcarbine"
- name = "NT LC-525"
+ name = "NT LC-525 Laser Rifle"
desc = "A relatively new, mass produced Nanotrasen laser carbine designed to kill with concentrated energy blasts. Just like the G40E, it has two firemodes, standard, and suppressive, which fires more efficent but weaker beams."
icon_expected_width = 64
var/is64x32 = TRUE
var/is64x32_override = FALSE
+ var/is_picked_up = FALSE
+
+/obj/item/weapon/gun/energy/laser/equipped()
+ . = ..()
+ is_picked_up = TRUE
+ update_transform()
+
+/obj/item/weapon/gun/energy/laser/pickup()
+ . = ..()
+ is_picked_up = TRUE
+ update_transform()
+
+/obj/item/weapon/gun/energy/laser/dropped()
+ . = ..()
+ if(!istype(loc,/mob/living))
+ is_picked_up = FALSE
+ update_transform()
/obj/item/weapon/gun/energy/laser/Initialize()
. = ..()
@@ -21,6 +38,8 @@
/obj/item/weapon/gun/energy/laser/update_transform()
. = ..()
if(is64x32)
+ if(is_picked_up)
+ transform = transform.Turn(-45)
transform = transform.Translate(-16,0)
/obj/item/weapon/gun/energy/laser/empty
diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun_ch.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun_ch.dm
index 3a9308eaf3..fa3eb3cd85 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic_railgun_ch.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun_ch.dm
@@ -7,6 +7,22 @@
icon_expected_width = 64
var/is64x32 = TRUE
var/is64x32_override = FALSE
+ var/is_picked_up = FALSE
+
+/obj/item/weapon/gun/magnetic/railgun/equipped()
+ . = ..()
+ is_picked_up = TRUE
+ update_transform()
+
+/obj/item/weapon/gun/magnetic/railgun/pickup()
+ . = ..()
+ is_picked_up = TRUE
+ update_transform()
+
+/obj/item/weapon/gun/magnetic/railgun/dropped()
+ . = ..()
+ is_picked_up = FALSE
+ update_transform()
/obj/item/weapon/gun/magnetic/railgun/Initialize()
. = ..()
@@ -22,4 +38,6 @@
/obj/item/weapon/gun/magnetic/railgun/update_transform()
. = ..()
if(is64x32)
- transform = transform.Translate(-16,0)
\ No newline at end of file
+ if(is_picked_up)
+ transform = transform.Turn(-45)
+ transform = transform.Translate(-16,0)
diff --git a/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm b/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm
index 60ca5af48c..24dd56166d 100644
--- a/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm
+++ b/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm
@@ -67,6 +67,8 @@
icon_expected_height = 32
icon_expected_width = 64
firemodes = list()
+ var/is_picked_up = FALSE
+ var/is_long = TRUE
/obj/item/weapon/gun/projectile/automatic/serdy/Initialize()
. = ..()
@@ -74,8 +76,25 @@
/obj/item/weapon/gun/projectile/automatic/serdy/update_transform()
. = ..()
+ if(is_picked_up && is_long)
+ transform = transform.Turn(-45)
transform = transform.Translate(-16,0)
+/obj/item/weapon/gun/projectile/automatic/serdy/equipped()
+ . = ..()
+ is_picked_up = TRUE
+ update_transform()
+
+/obj/item/weapon/gun/projectile/automatic/serdy/pickup()
+ . = ..()
+ is_picked_up = TRUE
+ update_transform()
+
+/obj/item/weapon/gun/projectile/automatic/serdy/dropped()
+ . = ..()
+ is_picked_up = FALSE
+ update_transform()
+
/obj/item/weapon/gun/projectile/automatic/serdy/update_icon()
. = ..()
if(load_method == MAGAZINE)
@@ -119,6 +138,7 @@
load_method = MAGAZINE
auto_loading_type = CLOSED_BOLT | LOCK_MANUAL_LOCK
muzzle_velocity = 680
+ is_long = FALSE
/obj/item/weapon/gun/projectile/automatic/serdy/akm
name = "AKM"
@@ -220,7 +240,7 @@
caliber = "10x24mm caseless"
magazine_type = /obj/item/ammo_magazine/m41
allowed_magazines = list(/obj/item/ammo_magazine/m41)
- icon_state="m41ab"
+ icon_state="m41b"
projectile_type = /obj/item/projectile/bullet/rifle/a10x24
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
@@ -520,6 +540,7 @@
)
load_method = MAGAZINE
muzzle_velocity = 400
+ is_long = FALSE
/obj/item/weapon/gun/projectile/automatic/serdy/vityaz
name = "WKHM 'Vityaz'"
@@ -537,6 +558,7 @@
load_method = MAGAZINE
auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY | LOCK_SLAPPABLE
muzzle_velocity = 430
+ is_long = FALSE
//LMGs
@@ -575,6 +597,7 @@
bolt_release = "slide release"
auto_loading_type = CLOSED_BOLT | LOCK_OPEN_EMPTY
muzzle_velocity = 405
+ is_long = FALSE
/obj/item/weapon/gun/projectile/automatic/serdy/ssp4/silenced
name = "WKHM SSP4-S"
@@ -903,6 +926,7 @@
sound_ejectchamber = 'sound/weapons/ballistics/rifle_ejectchamber.ogg'
sound_eject = 'sound/weapons/ballistics/rifle_eject.ogg'
sound_chamber = 'sound/weapons/ballistics/rifle_chamber.ogg'
+ only_open_load = TRUE
/obj/item/weapon/gun/projectile/revolvingrifle
manual_chamber = FALSE
@@ -920,15 +944,33 @@
icon_expected_width = 64
pump_animation = "winchester-pump"
var/is64x32 = TRUE
+ var/is_picked_up = FALSE
/obj/item/weapon/gun/projectile/shotgun/pump/Initialize()
. = ..()
if(is64x32)
update_transform()
+/obj/item/weapon/gun/projectile/shotgun/pump/equipped()
+ . = ..()
+ is_picked_up = TRUE
+ update_transform()
+
+/obj/item/weapon/gun/projectile/shotgun/pump/pickup()
+ . = ..()
+ is_picked_up = TRUE
+ update_transform()
+
+/obj/item/weapon/gun/projectile/shotgun/pump/dropped()
+ . = ..()
+ is_picked_up = FALSE
+ update_transform()
+
/obj/item/weapon/gun/projectile/shotgun/pump/update_transform()
. = ..()
if(is64x32)
+ if(is_picked_up)
+ transform = transform.Turn(-45)
transform = transform.Translate(-16,0)
/obj/item/weapon/gun/projectile/shotgun/pump/combat
diff --git a/code/modules/projectiles/guns/projectile_ch.dm b/code/modules/projectiles/guns/projectile_ch.dm
index 15927a8690..b372f9debc 100644
--- a/code/modules/projectiles/guns/projectile_ch.dm
+++ b/code/modules/projectiles/guns/projectile_ch.dm
@@ -85,6 +85,7 @@
/obj/item/weapon/gun/projectile/proc/bolt_handle(mob/user)
var/previous_chambered = chambered
var/result = bolt_toggle(TRUE)
+ update_icon()
if(!result)
to_chat(user,"Nothing happens.")
else
@@ -421,11 +422,18 @@
else if(CHECK_BITFIELD(auto_loading_type,CLOSED_BOLT) && bolt_open)
to_chat(user,"This is a closed bolt gun! You need to close the bolt before firing it!")
return 0
+ else if(bolt_open)
+ to_chat(user,"This is a manual action gun, the bolt or chamber must be closed before firing it!")
+ return 0
else
return 1
else
return 1
+/obj/item/weapon/gun/projectile/unload_ammo(mob/user, var/allow_dump=1)
+ if(manual_chamber && only_open_load && !bolt_open)
+ to_chat(user,"You must open the bolt to load or unload this gun!")
+
/obj/item/weapon/gun/projectile/handle_click_empty(mob/user)
if (user)
user.visible_message("*click click*", "*click*")