diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm
index 5bd77a7fdeb..47ac7dbdca6 100644
--- a/code/game/gamemodes/wizard/rightandwrong.dm
+++ b/code/game/gamemodes/wizard/rightandwrong.dm
@@ -44,7 +44,7 @@
if("cannon")
new /obj/item/weapon/gun/energy/lasercannon(get_turf(H))
if("shotgun")
- new /obj/item/weapon/gun/projectile/shotgun/combat(get_turf(H))
+ new /obj/item/weapon/gun/projectile/shotgun/pump/combat(get_turf(H))
if("freeze")
new /obj/item/weapon/gun/energy/temperature(get_turf(H))
if("uzi")
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 3ab582828e1..b1260a98b7e 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -565,7 +565,7 @@
malf_picker.use(src)
-//I am the icon meister. Bow fefore me.
+//I am the icon meister. Bow fefore me. //>fefore
/mob/living/silicon/ai/proc/ai_hologram_change()
set name = "Change Hologram"
set desc = "Change the default hologram available to AI to something else."
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 00b4c61cbf4..9ad6a241b26 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -1,10 +1,10 @@
-//THIS IS OBVIOUSLY WIP, SORRY -PETE
/obj/item/weapon/folder
name = "folder"
desc = "A folder."
icon = 'bureaucracy.dmi'
icon_state = "folder"
w_class = 2
+ pressure_resistance = 2
/obj/item/weapon/folder/blue
desc = "A blue folder."
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index bf621d52ca0..a8802a7f1a3 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -50,5 +50,5 @@
update_icon()
if(multiple_sprites)
- icon_state = text("[initial(icon_state)]-[]", stored_ammo.len)
- desc = text("There are [] shell\s left!", stored_ammo.len)
+ icon_state = "[initial(icon_state)]-[stored_ammo.len]"
+ desc = "There are [stored_ammo.len] shell\s left!"
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index d01356ccf7e..a7dccbcf285 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -19,6 +19,7 @@
caliber = ""
silenced = 0
recoil = 0
+ ejectshell = 1
tmp/list/mob/living/target //List of who yer targeting.
tmp/lock_time = -100
tmp/mouthshoot = 0 ///To stop people from suiciding twice... >.>
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 9f09417a9cb..21f8eeefff7 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -25,12 +25,16 @@
load_into_chamber()
- if(in_chamber) return 1
- if(!loaded.len) return 0
+ if(in_chamber)
+ return 1
+
+ if(!loaded.len)
+ return 0
var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
loaded -= AC //Remove casing from loaded list.
AC.loc = get_turf(src) //Eject casing onto ground.
+ AC.desc += " This one is spent." //descriptions are magic
if(AC.BB)
in_chamber = AC.BB //Load projectile into chamber.
@@ -40,6 +44,7 @@
attackby(var/obj/item/A as obj, mob/user as mob)
+
var/num_loaded = 0
if(istype(A, /obj/item/ammo_magazine))
if((load_method == 2) && loaded.len) return
@@ -64,13 +69,18 @@
loaded += AC
num_loaded++
if(num_loaded)
- user << text("\blue You load [] shell\s into the gun!", num_loaded)
+ user << "\blue You load [num_loaded] shell\s into the gun!"
A.update_icon()
update_icon()
return
- update_icon()
- desc = initial(desc) + text(" Has [] rounds remaining.", loaded.len)
+ examine()
+ ..()
+ usr << "Has [loaded.len] round\s remaining."
+ if(in_chamber && !loaded.len)
+ usr << "However, it has a chambered round."
+ if(in_chamber && loaded.len)
+ usr << "It also has a chambered round."
return
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index eb6746cbc29..7b5b9056a26 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -1,13 +1,14 @@
-/obj/item/weapon/gun/projectile/shotgun
- name = "\improper Shotgun"
+/obj/item/weapon/gun/projectile/shotgun/pump
+ name = "shotgun"
desc = "Useful for sweeping alleys."
icon_state = "shotgun"
- max_shells = 2
+ item_state = "shotgun"
+ max_shells = 4
w_class = 4.0
force = 10
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
caliber = "shotgun"
- origin_tech = "combat=3;materials=1"
+ origin_tech = "combat=4;materials=2"
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
var
recentpump = 0 // to prevent spammage
@@ -16,7 +17,8 @@
load_into_chamber()
- if(in_chamber) return 1
+ if(in_chamber)
+ return 1
return 0
@@ -30,7 +32,7 @@
return
- proc/pump(mob/M)
+ proc/pump(mob/M as mob)
playsound(M, 'shotgunpump.ogg', 60, 1)
pumped = 0
if(current_shell)//We have a shell in the chamber
@@ -44,20 +46,82 @@
current_shell = AC
if(AC.BB)
in_chamber = AC.BB //Load projectile into chamber.
+ update_icon() //I.E. fix the desc
return 1
-
-
-/obj/item/weapon/gun/projectile/shotgun/combat
- name = "\improper Combat Shotgun"
+/obj/item/weapon/gun/projectile/shotgun/pump/combat
+ name = "combat shotgun"
icon_state = "cshotgun"
max_shells = 8
+ origin_tech = "combat=5;materials=2"
ammo_type = "/obj/item/ammo_casing/shotgun"
+//this is largely hacky and bad :( -Pete
+/obj/item/weapon/gun/projectile/shotgun/doublebarrel
+ name = "double-barreled shotgun"
+ desc = "A true classic."
+ icon_state = "dshotgun"
+ item_state = "shotgun"
+ max_shells = 2
+ w_class = 4.0
+ force = 10
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
+ caliber = "shotgun"
+ origin_tech = "combat=3;materials=1"
+ ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
+ load_into_chamber()
+ if(in_chamber)
+ return 1
+ if(!loaded.len)
+ return 0
-/obj/item/weapon/gun/projectile/shotgun/combat2
- name = "\improper Security Combat Shotgun"
- icon_state = "cshotgun"
- max_shells = 4
+ var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
+ loaded -= AC //Remove casing from loaded list.
+ AC.desc += " This one is spent."
+ if(AC.BB)
+ in_chamber = AC.BB //Load projectile into chamber.
+ AC.BB.loc = src //Set projectile loc to gun.
+ return 1
+ return 0
+
+ attack_self(mob/living/user as mob)
+ if(!(locate(/obj/item/ammo_casing/shotgun) in src) && !loaded.len)
+ user << "\The [src] is empty."
+ return
+
+ for(var/obj/item/ammo_casing/shotgun/shell in src) //This feels like a hack. //don't code at 3:30am kids!!
+ if(shell in loaded)
+ loaded -= shell
+ shell.loc = get_turf(src.loc)
+
+ user << "You break \the [src]."
+ update_icon()
+
+ attackby(var/obj/item/A as obj, mob/user as mob)
+ if(istype(A, /obj/item/ammo_casing) && !load_method)
+ var/obj/item/ammo_casing/AC = A
+ if(AC.caliber == caliber && (loaded.len < max_shells) && (contents.len < max_shells)) //forgive me father, for i have sinned
+ user.drop_item()
+ AC.loc = src
+ loaded += AC
+ user << "You load a shell into \the [src]!"
+ A.update_icon()
+ update_icon()
+ if(istype(A, /obj/item/weapon/circular_saw) || istype(A, /obj/item/weapon/melee/energy) || istype(A, /obj/item/weapon/pickaxe/plasmacutter))
+ user << "You begin to shorten the barrel of \the [src]."
+ if(loaded.len)
+ afterattack(user, user) //will this work?
+ playsound(user, fire_sound, 50, 1)
+ user.visible_message("The shotgun goes off!", "The shotgun goes off in your face!")
+ return
+ if(do_after(user, 30)) //SHIT IS STEALTHY EYYYYY
+ icon_state = "sawnshotgun"
+ w_class = 3.0
+ item_state = "gun"
+ flags &= ~ONBACK //you can't sling it on your back
+ flags |= ONBELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
+ name = "sawn-off shotgun"
+ desc = "Omar's coming!"
+ user << "You shorten the barrel of \the [src]!"
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index ebfd27c4858..3738a409210 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -10,7 +10,7 @@
*/
/obj/item/projectile
- name = "\improper Projectile"
+ name = "projectile"
icon = 'projectiles.dmi'
icon_state = "bullet"
density = 1
@@ -84,18 +84,18 @@
return // nope.avi
if(!silenced)
- visible_message("\red [A] is hit by the [src]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
+ visible_message("\red [A.name] is hit by the [src.name] in the [def_zone]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
else
- M << "\red You've been shot!"
+ M << "\red You've been shot in the [def_zone] by the [src.name]!"
if(istype(firer, /mob))
- M.attack_log += text("\[[]\] []/[] shot []/[] with a []", time_stamp(), firer, firer.ckey, M, M.ckey, src)
- firer.attack_log += text("\[[]\] []/[] shot []/[] with a []", time_stamp(), firer, firer.ckey, M, M.ckey, src)
+ M.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src]"
+ firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src]"
log_admin("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with [src].")
message_admins("ATTACK: [firer] ([firer.ckey]) shot [M] ([M.ckey]) with [src].")
log_attack("[firer] ([firer.ckey]) shot [M] ([M.ckey]) with a [src]")
else
- M.attack_log += text("\[[]\] UNKNOWN SUBJECT (No longer exists) shot []/[] with a []", time_stamp(), M, M.ckey, src)
+ M.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [M]/[M.ckey] with a [src]"
log_admin("ATTACK: UNKNOWN (no longer exists) shot [M] ([M.ckey]) with [src].")
message_admins("ATTACK: UNKNOWN (no longer exists) shot [M] ([M.ckey]) with [src].")
log_attack("UNKNOWN shot [M] ([M.ckey]) with a [src]")
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 7636523d57c..e4bd4cdfed3 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm
index 0185e6c3bb2..3682a2461de 100755
--- a/maps/tgstation.2.0.8.dmm
+++ b/maps/tgstation.2.0.8.dmm
@@ -17,7 +17,7 @@
"aaq" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/machinery/light{dir = 1},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
"aar" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
"aas" = (/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aat" = (/obj/structure/rack,/obj/item/weapon/gun/projectile/shotgun/combat2,/obj/item/weapon/gun/projectile/shotgun/combat2,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
+"aat" = (/obj/structure/rack,/obj/item/ammo_casing/shotgun,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
"aau" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/security/warden{name = "Armory"})
"aav" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
"aaw" = (/turf/simulated/floor/plating/airless,/area)