diff --git a/code/game/objects/items/weapons/grenades/explosive.dm b/code/game/objects/items/weapons/grenades/explosive.dm
index bef5e09dda..ee1342d1cc 100644
--- a/code/game/objects/items/weapons/grenades/explosive.dm
+++ b/code/game/objects/items/weapons/grenades/explosive.dm
@@ -40,6 +40,7 @@
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
var/spread_range = 7
+ loadable = null
/obj/item/weapon/grenade/explosive/prime()
..()
diff --git a/code/game/objects/items/weapons/grenades/fragmentation.dm b/code/game/objects/items/weapons/grenades/fragmentation.dm
index f87b55e652..9f10e9b4d4 100644
--- a/code/game/objects/items/weapons/grenades/fragmentation.dm
+++ b/code/game/objects/items/weapons/grenades/fragmentation.dm
@@ -14,6 +14,7 @@
name = "fragmentation grenade"
desc = "A military fragmentation grenade, designed to explode in a deadly shower of fragments."
icon_state = "frag"
+ loadable = null
var/num_fragments = 200 //total number of fragments produced by the grenade
var/fragment_damage = 15
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index c5a0607315..8a8536d434 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -12,6 +12,7 @@
var/active = 0
var/det_time = 50
+ var/loadable = 1
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/user)
if((CLUMSY in user.mutations) && prob(50))
diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
index fe27d35790..547dc702cf 100644
--- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
@@ -43,13 +43,16 @@
user << "\A [chambered] is chambered."
/obj/item/weapon/gun/launcher/grenade/proc/load(obj/item/weapon/grenade/G, mob/user)
- if(grenades.len >= max_grenades)
- user << "[src] is full."
+ if(G.loadable)
+ if(grenades.len >= max_grenades)
+ user << "[src] is full."
+ return
+ user.remove_from_mob(G)
+ G.loc = src
+ grenades.Insert(1, G) //add to the head of the list, so that it is loaded on the next pump
+ user.visible_message("[user] inserts \a [G] into [src].", "You insert \a [G] into [src].")
return
- user.remove_from_mob(G)
- G.loc = src
- grenades.Insert(1, G) //add to the head of the list, so that it is loaded on the next pump
- user.visible_message("[user] inserts \a [G] into [src].", "You insert \a [G] into [src].")
+ user << "[G] doesn't seem to fit in the [src]!"
/obj/item/weapon/gun/launcher/grenade/proc/unload(mob/user)
if(grenades.len)
@@ -99,13 +102,16 @@
//load and unload directly into chambered
/obj/item/weapon/gun/launcher/grenade/underslung/load(obj/item/weapon/grenade/G, mob/user)
- if(chambered)
- user << "[src] is already loaded."
+ if(G.loadable)
+ if(chambered)
+ user << "[src] is already loaded."
+ return
+ user.remove_from_mob(G)
+ G.loc = src
+ chambered = G
+ user.visible_message("[user] load \a [G] into [src].", "You load \a [G] into [src].")
return
- user.remove_from_mob(G)
- G.loc = src
- chambered = G
- user.visible_message("[user] load \a [G] into [src].", "You load \a [G] into [src].")
+ user << "[G] doesn't seem to fit in the [src]!"
/obj/item/weapon/gun/launcher/grenade/underslung/unload(mob/user)
if(chambered)
diff --git a/html/changelogs/Datraen-GrenadeRestriction.yml b/html/changelogs/Datraen-GrenadeRestriction.yml
new file mode 100644
index 0000000000..ebc380b1b2
--- /dev/null
+++ b/html/changelogs/Datraen-GrenadeRestriction.yml
@@ -0,0 +1,6 @@
+author: Datraen
+
+delete-after: True
+
+changes:
+ - tweak: "Fragmentation grenades are no longer launchable."