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)