diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm
index 37ea129680e..be78ab8d8c6 100644
--- a/code/_onclick/hud/_defines.dm
+++ b/code/_onclick/hud/_defines.dm
@@ -55,6 +55,8 @@
#define ui_morph_resist "EAST-2:26,SOUTH:5"
#define ui_acti "EAST-2:26,SOUTH:5"
#define ui_movi "EAST-3:24,SOUTH:5"
+#define ui_burstfire "EAST-4:20,SOUTH:14"
+#define ui_uniqueaction "EAST-4:20,SOUTH:5"
#define ui_zonesel "EAST-1:28,SOUTH:5"
#define ui_acti_alt "EAST-1:28,SOUTH:5" //alternative intent switcher for when the interface is hidden (F12)
diff --git a/code/_onclick/hud/gun_mode.dm b/code/_onclick/hud/gun_mode.dm
index 676788ee1d7..80a5a2f3201 100644
--- a/code/_onclick/hud/gun_mode.dm
+++ b/code/_onclick/hud/gun_mode.dm
@@ -64,3 +64,45 @@
user.aiming.toggle_permission(TARGET_CAN_RADIO)
return 1
return 0
+
+/obj/screen/gun/burstfire
+ name = "Toggle Burst Fire"
+ desc = "This can be used in a macro as toggle-burst-fire."
+ icon_state = "toggle_burst_fire"
+ screen_loc = ui_burstfire
+
+/obj/screen/gun/burstfire/Click(location, control, params)
+ if(..())
+ var/mob/living/user = usr
+ if(istype(user))
+ var/obj/item/gun/dakka = user.get_active_hand()
+ if(istype(dakka))
+ dakka.toggle_firing_mode(user)
+ else
+ if(istype(user.loc, /mob/living/heavy_vehicle)) //may God forgive me for this
+ var/mob/living/heavy_vehicle/snowflake = user.loc
+ var/obj/item/mecha_equipment/mounted_system/MS = snowflake.selected_system
+ dakka = MS.holding
+ if(istype(dakka))
+ dakka.toggle_firing_mode(user)
+
+/obj/screen/gun/uniqueaction
+ name = "Unique Action"
+ desc = "This can be used in a macro as unique-action."
+ icon_state = "unique_action"
+ screen_loc = ui_uniqueaction
+
+/obj/screen/gun/uniqueaction/Click(location, control, params)
+ if(..())
+ var/mob/living/user = usr
+ if(istype(user))
+ var/obj/item/gun/dakka = user.get_active_hand()
+ if(istype(dakka))
+ dakka.unique_action(user)
+ else
+ if(istype(user.loc, /mob/living/heavy_vehicle)) //may God forgive me for this
+ var/mob/living/heavy_vehicle/snowflake = user.loc
+ var/obj/item/mecha_equipment/mounted_system/MS = snowflake.selected_system
+ dakka = MS.holding
+ if(istype(dakka))
+ dakka.unique_action(user)
\ No newline at end of file
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 4572fbe19cc..1609970a2db 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -369,6 +369,18 @@
mymob.radio_use_icon.color = ui_color
mymob.radio_use_icon.alpha = ui_alpha
+ mymob.toggle_burst_fire_icon = new /obj/screen/gun/burstfire(null)
+ mymob.toggle_burst_fire_icon.icon = ui_style
+ mymob.toggle_burst_fire_icon.color = ui_color
+ mymob.toggle_burst_fire_icon.alpha = ui_alpha
+ hud_elements |= mymob.toggle_burst_fire_icon
+
+ mymob.unique_action_icon = new /obj/screen/gun/uniqueaction(null)
+ mymob.unique_action_icon.icon = ui_style
+ mymob.unique_action_icon.color = ui_color
+ mymob.unique_action_icon.alpha = ui_alpha
+ hud_elements |= mymob.unique_action_icon
+
mymob.client.screen = null
mymob.client.screen += hud_elements
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index c77c5ea1417..3e2aaf741e9 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -130,6 +130,8 @@ var/obj/screen/robot_inventory
mymob.item_use_icon = new /obj/screen/gun/item(null)
mymob.gun_move_icon = new /obj/screen/gun/move(null)
mymob.radio_use_icon = new /obj/screen/gun/radio(null)
+ mymob.toggle_burst_fire_icon = new /obj/screen/gun/burstfire(null)
+ mymob.unique_action_icon = new /obj/screen/gun/uniqueaction(null)
mymob.client.screen = null
@@ -143,7 +145,10 @@ var/obj/screen/robot_inventory
mymob.pullin,
robot_inventory,
mymob.gun_setting_icon,
- r.computer)
+ mymob.toggle_burst_fire_icon,
+ mymob.unique_action_icon,
+ r.computer
+ )
mymob.client.screen += src.adding + src.other
return
diff --git a/code/game/objects/items/weapons/vaurca_items.dm b/code/game/objects/items/weapons/vaurca_items.dm
index d9c351b5028..0515fa3bd8a 100644
--- a/code/game/objects/items/weapons/vaurca_items.dm
+++ b/code/game/objects/items/weapons/vaurca_items.dm
@@ -428,7 +428,7 @@
tension = 1
..()
-/obj/item/gun/launcher/crossbow/vaurca/attack_self(mob/living/user as mob)
+/obj/item/gun/launcher/crossbow/vaurca/unique_action(mob/living/user)
pump(user)
/obj/item/gun/launcher/crossbow/vaurca/proc/pump(mob/M as mob)
diff --git a/code/modules/custom_ka/core.dm b/code/modules/custom_ka/core.dm
index 25835cbc80b..ec85d0b1d6e 100644
--- a/code/modules/custom_ka/core.dm
+++ b/code/modules/custom_ka/core.dm
@@ -372,7 +372,7 @@
accuracy = round(recoil_increase*0.25)
accuracy_wielded = accuracy * 0.5
-/obj/item/gun/custom_ka/attack_self(mob/user as mob)
+/obj/item/gun/custom_ka/unique_action(mob/user)
. = ..()
if(!wielded)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 03ac137bf11..6ad1ea8e798 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1335,6 +1335,18 @@
set hidden = 1
set_face_dir(client.client_dir(WEST))
+/mob/living/verb/unique_action()
+ set hidden = 1
+ var/obj/item/gun/dakka = get_active_hand()
+ if(istype(dakka))
+ dakka.unique_action(src)
+
+/mob/living/verb/toggle_firing_mode()
+ set hidden = 1
+ var/obj/item/gun/dakka = get_active_hand()
+ if(istype(dakka))
+ dakka.toggle_firing_mode(src)
+
/mob/proc/adjustEarDamage()
return
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index fd5f5a6b81f..970047c00ca 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -35,6 +35,8 @@
var/obj/screen/gun/move/gun_move_icon = null
var/obj/screen/gun/run/gun_run_icon = null
var/obj/screen/gun/mode/gun_setting_icon = null
+ var/obj/screen/gun/unique_action_icon = null
+ var/obj/screen/gun/toggle_burst_fire_icon = null
var/obj/screen/up_hint = null
//spells hud icons - this interacts with add_spell and remove_spell
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 3440a738620..124c68daab2 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -148,8 +148,6 @@
if(istype(loc, /obj/item/rig_module))
has_safety = FALSE
- update_wield_verb()
-
queue_icon_update()
/obj/item/gun/update_icon()
@@ -179,6 +177,17 @@
update_held_icon()
+/obj/item/gun/proc/unique_action(var/mob/user)
+ return
+
+/obj/item/gun/proc/toggle_firing_mode(var/mob/user, var/list/message_mobs)
+ var/datum/firemode/new_mode = switch_firemodes(user)
+ if(new_mode)
+ playsound(user, safetyoff_sound, 25)
+ to_chat(user, SPAN_NOTICE("\The [src] is now set to [new_mode.name]."))
+ for(var/M in message_mobs)
+ to_chat(M, SPAN_NOTICE("[user] has set \the [src] to [new_mode.name]."))
+
//Checks whether a given mob can use the gun
//Any checks that shouldn't result in handle_click_empty() being called if they fail should go here.
//Otherwise, if you want handle_click_empty() to be called, check in consume_next_projectile() and return null there.
@@ -233,29 +242,6 @@
else
return TRUE
-/obj/item/gun/verb/wield_gun()
- set name = "Wield Firearm"
- set category = "Object"
- set src in usr
-
- if(is_wieldable)
- toggle_wield(usr)
- update_held_icon()
- else
- to_chat(usr, SPAN_WARNING("You can't wield \the [src]!"))
-
-/obj/item/gun/ui_action_click()
- if(src in usr)
- wield_gun()
-
-/obj/item/gun/proc/update_wield_verb()
- if(is_wieldable) //If the gun is marked as wieldable, make the action button appear and add the verb.
- action_button_name = "Wield Firearm"
- verbs += /obj/item/gun/verb/wield_gun
- else
- action_button_name = ""
- verbs -= /obj/item/gun/verb/wield_gun
-
/obj/item/gun/afterattack(atom/A, mob/living/user, adjacent, params)
if(adjacent) return //A is adjacent, is the user, or is on the user's person
@@ -656,12 +642,12 @@
return new_mode
-/obj/item/gun/attack_self(mob/user, var/list/message_mobs)
- var/datum/firemode/new_mode = switch_firemodes(user)
- if(new_mode)
- to_chat(user, SPAN_NOTICE("\The [src] is now set to [new_mode.name]."))
- for(var/M in message_mobs)
- to_chat(M, SPAN_NOTICE("[user] has set \the [src] to [new_mode.name]."))
+/obj/item/gun/attack_self(mob/user)
+ if(is_wieldable)
+ toggle_wield(usr)
+ update_held_icon()
+ else
+ to_chat(usr, SPAN_WARNING("You can't wield \the [src]!"))
// Safety Procs
diff --git a/code/modules/projectiles/guns/energy/crank.dm b/code/modules/projectiles/guns/energy/crank.dm
index 8610f5d000e..23471a711fc 100644
--- a/code/modules/projectiles/guns/energy/crank.dm
+++ b/code/modules/projectiles/guns/energy/crank.dm
@@ -29,7 +29,7 @@
concentrated energy are used by high ranking soldiers or special operatives of the Republican army, but their durability is dubious in comparison to the mass-produced, \
single shot or bolt action rifles that the majority of Tajaran soldiers use."
-/obj/item/gun/energy/rifle/icelance/attack_self(mob/living/user as mob)
+/obj/item/gun/energy/rifle/icelance/unique_action(mob/living/user)
if(is_charging)
to_chat(user, "You are already charging \the [src].")
return
diff --git a/code/modules/projectiles/guns/energy/lawgiver.dm b/code/modules/projectiles/guns/energy/lawgiver.dm
index b2f04dc003a..c66a80a90d3 100644
--- a/code/modules/projectiles/guns/energy/lawgiver.dm
+++ b/code/modules/projectiles/guns/energy/lawgiver.dm
@@ -106,7 +106,7 @@
message_enabled = 0
message_disable = 0
-/obj/item/gun/energy/lawgiver/attack_self(mob/living/carbon/user as mob) //can probably remove this in favor of the DNA locked firing pins. not touching that now though. edit: lol nevermind snowflake code of the year
+/obj/item/gun/energy/lawgiver/unique_action(mob/living/carbon/user) //can probably remove this in favor of the DNA locked firing pins. not touching that now though. edit: lol nevermind snowflake code of the year
if(dna != null)
return
else
diff --git a/code/modules/projectiles/guns/energy/magic.dm b/code/modules/projectiles/guns/energy/magic.dm
index 10cf3a48f7b..38e0ad0dafa 100644
--- a/code/modules/projectiles/guns/energy/magic.dm
+++ b/code/modules/projectiles/guns/energy/magic.dm
@@ -133,7 +133,7 @@ obj/item/gun/energy/staff/focus/special_check(var/mob/living/user)
return 1
-obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
+obj/item/gun/energy/staff/focus/toggle_firing_mode(mob/living/user)
if(projectile_type == /obj/item/projectile/forcebolt)
charge_cost = 400
to_chat(user, "The [src.name] will now strike a small area.")
diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm
index f171b7c4232..d23d9ff5391 100644
--- a/code/modules/projectiles/guns/energy/modular.dm
+++ b/code/modules/projectiles/guns/energy/modular.dm
@@ -139,7 +139,6 @@
slot_flags = SLOT_BACK
item_state = "large_3"
is_wieldable = TRUE
- update_wield_verb()
/obj/item/gun/energy/laser/prototype/proc/handle_mod()
for(var/obj/item/laser_components/modifier/modifier in gun_mods)
diff --git a/code/modules/projectiles/guns/energy/rifle.dm b/code/modules/projectiles/guns/energy/rifle.dm
index 661f830fef1..63d280c30eb 100644
--- a/code/modules/projectiles/guns/energy/rifle.dm
+++ b/code/modules/projectiles/guns/energy/rifle.dm
@@ -136,7 +136,7 @@
secondary_projectile_type = null
secondary_fire_sound = null
-/obj/item/gun/energy/rifle/pulse/destroyer/attack_self(mob/living/user as mob)
+/obj/item/gun/energy/rifle/pulse/destroyer/toggle_firing_mode(mob/living/user)
to_chat(user, "[src.name] has three settings, and they are all DESTROY.")
/obj/item/gun/energy/rifle/laser/tachyon
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 6bcbf4d2a45..a0cc5085d76 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -370,8 +370,6 @@
is_wieldable = TRUE
- action_button_name = "Wield thermal lance"
-
/obj/item/gun/energy/vaurca/typec/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
user.setClickCooldown(16)
..()
@@ -462,8 +460,6 @@
list(mode_name="point-burst auto", can_autofire = TRUE, burst = 1, fire_delay = 1, burst_accuracy = list(0,-1,-1,-2,-2,-2,-3,-3), dispersion = list(1.0, 1.0, 1.0, 1.0, 1.2))
)
- action_button_name = "Wield thermal drill"
-
needspin = FALSE
/obj/item/gun/energy/vaurca/thermaldrill/special_check(var/mob/user)
diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm
index 36624dcb911..dfcd529bbba 100644
--- a/code/modules/projectiles/guns/launcher/crossbow.dm
+++ b/code/modules/projectiles/guns/launcher/crossbow.dm
@@ -85,7 +85,7 @@
update_icon()
..()
-/obj/item/gun/launcher/crossbow/attack_self(mob/living/user)
+/obj/item/gun/launcher/crossbow/unique_action(mob/living/user)
if(tension)
if(bolt)
user.visible_message("[user] relaxes the tension on \the [src]'s string and removes \the [bolt].", SPAN_NOTICE("You relax the tension on \the [src]'s string and remove \the [bolt]."))
@@ -319,7 +319,7 @@
playsound(loc, 'sound/items/rfd_empty.ogg', 50, FALSE)
flick("[icon_state]-empty", src)
-/obj/item/gun/launcher/crossbow/RFD/attack_self(mob/living/user as mob)
+/obj/item/gun/launcher/crossbow/RFD/unique_action(mob/living/user as mob)
if(tension)
user.visible_message("[user] relaxes the tension on \the [src]'s string.", SPAN_NOTICE("You relax the tension on \the [src]'s string."))
playsound(loc, 'sound/weapons/holster/tactiholsterout.ogg', 50, FALSE)
diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
index 01d5ece787a..1e738238b6e 100644
--- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
@@ -78,7 +78,7 @@
return FALSE
return TRUE
-/obj/item/gun/launcher/grenade/attack_self(mob/user)
+/obj/item/gun/launcher/grenade/unique_action(mob/user)
pump(user)
/obj/item/gun/launcher/grenade/attackby(obj/item/I, mob/user)
@@ -116,9 +116,6 @@
force = 5
max_grenades = 0
-/obj/item/gun/launcher/grenade/underslung/attack_self()
- return
-
//load and unload directly into chambered
/obj/item/gun/launcher/grenade/underslung/load(obj/item/grenade/G, mob/user)
if(chambered)
diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm
index 489be91a0f0..a83e331a7a3 100644
--- a/code/modules/projectiles/guns/launcher/pneumatic.dm
+++ b/code/modules/projectiles/guns/launcher/pneumatic.dm
@@ -74,7 +74,7 @@
else if(istype(W) && item_storage.can_be_inserted(W))
item_storage.handle_item_insertion(W)
-/obj/item/gun/launcher/pneumatic/attack_self(mob/user as mob)
+/obj/item/gun/launcher/pneumatic/unique_action(mob/user)
eject_tank(user)
/obj/item/gun/launcher/pneumatic/consume_next_projectile(mob/user=null)
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index 6901676f227..e28eb24ef0a 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -95,7 +95,7 @@
darts -= next
next = null
-/obj/item/gun/launcher/syringe/attack_self(mob/living/user as mob)
+/obj/item/gun/launcher/syringe/unique_action(mob/living/user)
if(next)
user.visible_message("[user] unlatches and carefully relaxes the bolt on [src].", "You unlatch and carefully relax the bolt on [src], unloading the spring.")
playsound(src.loc, 'sound/weapons/blade_close.ogg', 50, 1)
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index a4760cd80f2..c34de1b0a38 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -214,7 +214,7 @@
..()
load_ammo(A, user)
-/obj/item/gun/projectile/attack_self(mob/user)
+/obj/item/gun/projectile/toggle_firing_mode(mob/user)
if(jam_num)
playsound(src.loc, 'sound/weapons/click.ogg', 50, TRUE)
jam_num--
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 820229bbaf1..ad8bbabf32c 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -279,11 +279,14 @@
playsound(user, 'sound/weapons/sawclose.ogg', 60, 1)
update_icon()
-/obj/item/gun/projectile/automatic/rifle/l6_saw/attack_self(mob/user as mob)
+/obj/item/gun/projectile/automatic/rifle/l6_saw/unique_action(mob/user)
+ toggle_cover(user)
+
+/obj/item/gun/projectile/automatic/rifle/l6_saw/toggle_firing_mode(mob/user)
if(cover_open)
- toggle_cover(user) //close the cover
- else
- return ..() //once closed, behave like normal
+ to_chat(user, SPAN_WARNING("The cover must be closed!"))
+ return
+ ..()
/obj/item/gun/projectile/automatic/rifle/l6_saw/attack_hand(mob/user as mob)
if(!cover_open && user.get_inactive_hand() == src)
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index e4bd0b20d0d..fb4b0105e27 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -128,7 +128,7 @@
for(var/obj/item/reagent_containers/glass/beaker/B in mixing)
B.reagents.trans_to_obj(dart, mix_amount)
-/obj/item/gun/projectile/dartgun/attack_self(mob/user)
+/obj/item/gun/projectile/dartgun/unique_action(mob/user)
user.set_machine(src)
var/dat = "[src] mixing control:
"
diff --git a/code/modules/projectiles/guns/projectile/rifle.dm b/code/modules/projectiles/guns/projectile/rifle.dm
index 71dfe05bf5f..18aa81fabb4 100644
--- a/code/modules/projectiles/guns/projectile/rifle.dm
+++ b/code/modules/projectiles/guns/projectile/rifle.dm
@@ -115,7 +115,7 @@
return 0
return ..()
-/obj/item/gun/projectile/contender/attack_self(mob/user as mob)
+/obj/item/gun/projectile/contender/unique_action(mob/user as mob)
if(chambered)
chambered.forceMove(get_turf(src))
chambered = null
@@ -176,7 +176,7 @@
var/open_bolt = 0
var/obj/item/ammo_magazine/boltaction/vintage/has_clip
-/obj/item/gun/projectile/shotgun/pump/rifle/vintage/attack_self(mob/living/user as mob)
+/obj/item/gun/projectile/shotgun/pump/rifle/vintage/unique_action(mob/living/user as mob)
if(wielded)
if(world.time >= recentpump + 10)
pump(user)
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index ac34dad3c90..be7c41d0ee2 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -26,6 +26,8 @@
if(do_after(user, 30, act_target = src)) //SHIT IS STEALTHY EYYYYY
sawing_in_progress = FALSE
saw_off(user, A)
+ else
+ sawing_in_progress = FALSE
else
..()
@@ -38,7 +40,7 @@
name = "pump shotgun"
desc = "An ubiquitous unbranded shotgun. Useful for sweeping alleys."
desc_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
- then click where you want to fire. After firing, you will need to pump the gun, by clicking on the gun in your hand. To reload, load more shotgun \
+ then click where you want to fire. After firing, you will need to pump the gun, by using the unique-action verb. To reload, load more shotgun \
shells into the gun."
icon = 'icons/obj/guns/shotgun.dmi'
icon_state = "shotgun"
@@ -64,9 +66,9 @@
return chambered.BB
return null
-/obj/item/gun/projectile/shotgun/pump/attack_self(mob/living/user)
+/obj/item/gun/projectile/shotgun/pump/unique_action(mob/living/user)
if(jam_num)
- return ..()
+ return
else if(unjam_cooldown + 2 SECONDS > world.time)
return
if(world.time >= recentpump + 10)
@@ -146,7 +148,7 @@
can_sawoff = TRUE
sawnoff_workmsg = "shorten the barrel"
-/obj/item/gun/projectile/shotgun/doublebarrel/attack_self(mob/user)
+/obj/item/gun/projectile/shotgun/doublebarrel/unique_action(mob/user)
unload_ammo(user, TRUE)
/obj/item/gun/projectile/shotgun/doublebarrel/AltClick(mob/user)
@@ -229,7 +231,7 @@
to_chat(user, "You [folded ? "fold" : "unfold"] \the [src].")
update_icon()
-/obj/item/gun/projectile/shotgun/foldable/attack_self(mob/living/user)
+/obj/item/gun/projectile/shotgun/foldable/unique_action(mob/living/user)
toggle_folded(user)
/obj/item/gun/projectile/shotgun/foldable/special_check(mob/user)
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index b3cceb25542..2c48c73a952 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -38,7 +38,7 @@
else
icon_state = "heavysniper"
-/obj/item/gun/projectile/heavysniper/attack_self(mob/user as mob)
+/obj/item/gun/projectile/heavysniper/unique_action(mob/user as mob)
bolt_open = !bolt_open
if(bolt_open)
playsound(src.loc, 'sound/weapons/blade_open.ogg', 50, 1)
diff --git a/html/changelogs/mattatlas-coldanddamned.yml b/html/changelogs/mattatlas-coldanddamned.yml
new file mode 100644
index 00000000000..8697216d6cc
--- /dev/null
+++ b/html/changelogs/mattatlas-coldanddamned.yml
@@ -0,0 +1,44 @@
+################################
+# 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: MattAtlas
+
+# 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:
+ - tweak: "Wielding firearms is now done via the activate-held-object verb, aka the Z key in hotkey mode or clicking on the item with itself."
+ - tweak: "Firemode switching has been offloaded to a new verb, toggle-burst-fire, which is invisible but macro-able. It has a new HUD icon to the right of the pockets."
+ - tweak: "Other kinds of behaviour that aren't firemode switching have been offloaded to another invisible verb, unique-action, which also has a new HUD icon to the right of the pockets."
+ - tweak: "Switching firemode now plays a small sound."
diff --git a/icons/mob/screen/generic.dmi b/icons/mob/screen/generic.dmi
index 1176ba15c0c..01e5ffe0d24 100644
Binary files a/icons/mob/screen/generic.dmi and b/icons/mob/screen/generic.dmi differ
diff --git a/icons/mob/screen/midnight.dmi b/icons/mob/screen/midnight.dmi
index af5a1292026..45cc4e2b95f 100644
Binary files a/icons/mob/screen/midnight.dmi and b/icons/mob/screen/midnight.dmi differ
diff --git a/icons/mob/screen/old.dmi b/icons/mob/screen/old.dmi
index 080b016cb50..5b2213f5257 100644
Binary files a/icons/mob/screen/old.dmi and b/icons/mob/screen/old.dmi differ
diff --git a/icons/mob/screen/orange.dmi b/icons/mob/screen/orange.dmi
index 0a0a24b7b0d..6dccc9fda5a 100644
Binary files a/icons/mob/screen/orange.dmi and b/icons/mob/screen/orange.dmi differ
diff --git a/icons/mob/screen/white.dmi b/icons/mob/screen/white.dmi
index 7124e337c5c..736266c9c16 100644
Binary files a/icons/mob/screen/white.dmi and b/icons/mob/screen/white.dmi differ