From 889eefdca538ffc04e1be07ab6d8dc56732bb532 Mon Sep 17 00:00:00 2001 From: Robustin Date: Fri, 12 May 2017 16:04:44 -0400 Subject: [PATCH] more gang guns --- code/game/gamemodes/gang/gang_datum.dm | 12 ++ code/game/gamemodes/gang/gang_items.dm | 52 ++++++-- .../machinery/porta_turret/portable_turret.dm | 126 ++++++++++++++++++ .../boxes_magazines/external_mag.dm | 16 +++ .../projectiles/guns/ballistic/automatic.dm | 24 ++++ .../projectiles/guns/ballistic/revolver.dm | 10 ++ icons/obj/guns/projectile.dmi | Bin 30443 -> 30674 bytes 7 files changed, 232 insertions(+), 8 deletions(-) diff --git a/code/game/gamemodes/gang/gang_datum.dm b/code/game/gamemodes/gang/gang_datum.dm index 805cac552fe..ac0e2429089 100644 --- a/code/game/gamemodes/gang/gang_datum.dm +++ b/code/game/gamemodes/gang/gang_datum.dm @@ -28,13 +28,25 @@ /datum/gang_item/function/gang_ping, /datum/gang_item/function/recall, /datum/gang_item/function/outfit, + /datum/gang_item/weapon/shuriken /datum/gang_item/weapon/switchblade, + /datum/gang_item/weapon/improvised, + /datum/gang_item/weapon/ammo/improvised_ammo, + /datum/gang_item/weapon/surplus, + /datum/gang_item/weapon/ammo/surplus_ammo, /datum/gang_item/weapon/pistol, /datum/gang_item/weapon/ammo/pistol_ammo, + /datum/gang_item/weapon/sniper + /datum/gang_item/weapon/ammo/sniper_ammo + /datum/gang_item/weapon/MG, /datum/gang_item/weapon/uzi, /datum/gang_item/weapon/ammo/uzi_ammo, /datum/gang_item/equipment/spraycan, + /datum/gang_item/equipment/sharpener + /datum/gang_item/equipment/emp /datum/gang_item/equipment/c4, + /datum/gang_item/equipment/frag + /datum/gang_item/equipment/stimpack /datum/gang_item/equipment/implant_breaker, /datum/gang_item/equipment/pen, /datum/gang_item/equipment/gangtool, diff --git a/code/game/gamemodes/gang/gang_items.dm b/code/game/gamemodes/gang/gang_items.dm index 724191c6421..5678cb7fb32 100644 --- a/code/game/gamemodes/gang/gang_items.dm +++ b/code/game/gamemodes/gang/gang_items.dm @@ -120,6 +120,30 @@ cost = 5 item_path = /obj/item/weapon/switchblade +/datum/gang_item/weapon/surplus + name = "Surplus Rifle" + id = "surplus" + cost = 8 + item_path = /obj/item/weapon/gun/ballistic/automatic/surplus + +/datum/gang_item/weapon/ammo/surplus_ammo + name = "Surplus Rifle Ammo" + id = "surplus_ammo" + cost = 5 + item_path = /obj/item/ammo_box/magazine/m10mm/rifle + +/datum/gang_item/weapon/improvised + name = "Sawn-Off Improvised Shotgun" + id = "sawn" + cost = 6 + item_path = /obj/item/weapon/gun/ballistic/revolver/doublebarrel/improvised/sawn + +/datum/gang_item/weapon/ammo/improvised_ammo + name = "Box of Buckshot" + id = "buckshot" + cost = 5 + item_path = /obj/item/weapon/storage/box/lethalshot + /datum/gang_item/weapon/pistol name = "10mm Pistol" id = "pistol" @@ -131,7 +155,7 @@ id = "pistol_ammo" cost = 10 item_path = /obj/item/ammo_box/magazine/m10mm - + /datum/gang_item/weapon/sniper name = ".50cal Sniper Rifle" id = "sniper" @@ -144,20 +168,32 @@ cost = 15 item_path = /obj/item/ammo_box/magazine/sniper_rounds +/datum/gang_item/weapon/MG + name = "Mounted Machine Gun" + id = "MG" + cost = 50 + item_path = /obj/machinery/manned_turret + /datum/gang_item/weapon/uzi name = "Uzi SMG" id = "uzi" cost = 60 item_path = /obj/item/weapon/gun/ballistic/automatic/mini_uzi - id = "uzi" + /datum/gang_item/weapon/ammo/uzi_ammo name = "Uzi Ammo" id = "uzi_ammo" cost = 40 item_path = /obj/item/ammo_box/magazine/uzim9mm - - + + + + + + + + /////////////////// //EQUIPMENT /////////////////// @@ -171,7 +207,7 @@ id = "spraycan" cost = 5 item_path = /obj/item/toy/crayon/spraycan/gang - + /datum/gang_item/equipment/sharpener name = "Sharpener" id = "whetstone" @@ -206,7 +242,7 @@ /datum/gang_item/equipment/stimpack name = "Black Market Stimulants" id = "stimpack" - cost = 15 + cost = 12 item_path = /obj/item/weapon/reagent_containers/syringe/stimulants /datum/gang_item/equipment/implant_breaker @@ -305,11 +341,11 @@ if(obj.density) to_chat(user, "There's not enough room here!") return FALSE - + if(dominator_excessive_walls(user)) to_chat(user, "span class='warning'>The dominator will not function here! The dominator requires an open space within three standard units so that walls do not interfere with the signal.") return FALSE - + if(!(usrarea.type in gang.territory|gang.territory_new)) to_chat(user, "The dominator can be spawned only on territory controlled by your gang!") return FALSE diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index aa8aedbbe2e..39e0083a61b 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -917,3 +917,129 @@ on = 0 spawn(100) on = 1 + +/////// MANNED TURRET //////// + +/obj/machinery/manned_turret + name = "machine gun turret" + desc = "A mounted gun that, while antiquated, has been a black market staple for centuries." + icon = 'icons/obj/turrets.dmi' + icon_state = "protoemitter" + can_buckle = TRUE + density = TRUE + buckle_lying = 0 + layer = 4.2 + var/view_range = 10 + var/cooldown = 0 + var/projectile_type = /obj/item/projectile/bullet/weakbullet3 + +//BUCKLE HOOKS + +/obj/machinery/manned_turret/unbuckle_mob(mob/living/buckled_mob,force = 0) + playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) + for(var/obj/item/I in buckled_mob.held_items) + if(istype(I, /obj/item/weapon/turret_control)) + qdel(I) + if(istype(buckled_mob)) + buckled_mob.pixel_x = 0 + buckled_mob.pixel_y = 0 + if(buckled_mob.client) + buckled_mob.client.change_view(world.view) + . = ..() + +/obj/machinery/manned_turret/user_buckle_mob(mob/living/M, mob/living/carbon/user) + if(user.incapacitated() || !istype(user)) + return + M.loc = get_turf(src) + ..() + for(var/V in M.held_items) + var/obj/item/I = V + if(istype(I)) + if(M.dropItemToGround(I)) + var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control() + M.put_in_hands(TC) + else //Entries in the list should only ever be items or null, so if it's not an item, we can assume it's an empty hand + var/obj/item/weapon/turret_control/TC = new /obj/item/weapon/turret_control() + M.put_in_hands(TC) + M.pixel_y = 14 + layer = 4.1 + setDir(SOUTH) + playsound(src,'sound/mecha/mechmove01.ogg', 50, 1) + if(user.client) + user.client.change_view(view_range) + +/obj/item/weapon/turret_control + name = "turret controls" + icon_state = "offhand" + w_class = WEIGHT_CLASS_HUGE + flags = ABSTRACT | NODROP + resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF | NOBLUDGEON + + +/obj/item/weapon/turret_control/afterattack(atom/targeted_atom, mob/user) + ..() + var/obj/machinery/manned_turret/E = user.buckled + E.setDir(get_dir(E,targeted_atom)) + user.setDir(E.dir) + switch(E.dir) + if(NORTH) + E.layer = 3.9 + user.pixel_x = 0 + user.pixel_y = -14 + if(NORTHEAST) + E.layer = 3.9 + user.pixel_x = -8 + user.pixel_y = -12 + if(EAST) + E.layer = 4.1 + user.pixel_x = -14 + user.pixel_y = 0 + if(SOUTHEAST) + E.layer = 3.9 + user.pixel_x = -8 + user.pixel_y = 12 + if(SOUTH) + E.layer = 4.1 + user.pixel_x = 0 + user.pixel_y = 14 + if(SOUTHWEST) + E.layer = 3.9 + user.pixel_x = 8 + user.pixel_y = 12 + if(WEST) + E.layer = 4.1 + user.pixel_x = 14 + user.pixel_y = 0 + if(NORTHWEST) + E.layer = 3.9 + user.pixel_x = 8 + user.pixel_y = -12 + E.checkfire(targeted_atom, user) + +/obj/machinery/manned_turret/proc/checkfire(atom/targeted_atom, mob/user) + if(world.time < cooldown) + playsound(src.loc, 'sound/weapons/sear.ogg', 100, 1) + to_chat(user, "Turret must cool off between volleys!") + return + else + cooldown = world.time+45 + INVOKE_ASYNC(src, .proc/shoot, targeted_atom, user) + +/obj/machinery/manned_turret/proc/shoot(atom/targeted_atom, mob/user) + var/turf/targets_from = get_turf(src) + var/target_turf = get_turf(targeted_atom) + if(targeted_atom == user || targeted_atom == targets_from) + return + for(var/i in 1 to 10) + if(targeted_atom == null) + targeted_atom = target_turf + var/obj/item/projectile/P = new projectile_type(targets_from) + P.current = targets_from + P.starting = targets_from + P.firer = src + P.original = targeted_atom + playsound(src.loc, 'sound/weapons/Gunshot_smg.ogg', 50, 1) + P.yo = targeted_atom.y - targets_from.y + rand(-1,1) + P.xo = targeted_atom.x - targets_from.x + rand(-1,1) + P.fire() + sleep(2) diff --git a/code/modules/projectiles/boxes_magazines/external_mag.dm b/code/modules/projectiles/boxes_magazines/external_mag.dm index 11112ec974e..99fffd85725 100644 --- a/code/modules/projectiles/boxes_magazines/external_mag.dm +++ b/code/modules/projectiles/boxes_magazines/external_mag.dm @@ -13,6 +13,22 @@ max_ammo = 8 multiple_sprites = 2 +/obj/item/ammo_box/magazine/m10mm/rifle + name = "rifle magazine (10mm)" + desc = "A well-worn magazine fitted for the surplus rifle." + icon_state = "75-8" + origin_tech = "combat=2" + ammo_type = /obj/item/ammo_casing/c10mm + caliber = "10mm" + max_ammo = 10 + +/obj/item/ammo_box/magazine/m10mm/rifle/update_icon() + if(ammo_count()) + icon_state = "75-8" + else + icon_state = "75-0" + + /obj/item/ammo_box/magazine/m10mm/fire name = "pistol magazine (10mm incendiary)" desc = "A gun magazine. Loaded with rounds which ignite the target." diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 1ffdaf0d29b..6bf47605754 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -377,6 +377,30 @@ +// Old Semi-Auto Rifle // + +/obj/item/weapon/gun/ballistic/automatic/surplus + name = "Surplus Rifle" + desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing." + origin_tech = "combat=3;materials=2" + icon_state = "surplus" + item_state = "moistnugget" + weapon_weight = WEAPON_HEAVY + mag_type = /obj/item/ammo_box/magazine/m10mm/rifle + fire_delay = 30 + burst_size = 1 + can_unsuppress = 1 + can_suppress = 1 + w_class = WEIGHT_CLASS_HUGE + slot_flags = SLOT_BACK + actions_types = list() + +/obj/item/weapon/gun/ballistic/automatic/surplus/update_icon() + if(magazine) + icon_state = "surplus" + else + icon_state = "surplus-e" + // Laser rifle (rechargeable magazine) // diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 6ce52748ecf..66a3f1fafaf 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -344,6 +344,16 @@ slung = 0 update_icon() +/obj/item/weapon/gun/ballistic/revolver/doublebarrel/improvised/sawn + name = "sawn-off improvised shotgun" + desc = "A single-shot shotgun, better not miss" + icon_state = "ishotgun" + item_state = "gun" + w_class = WEIGHT_CLASS_NORMAL + sawn_state = SAWN_OFF + slot_flags = SLOT_BELT + + /obj/item/weapon/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course. clumsy_check = 0 diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index dfb1f4c51b4d533a2ce8d5adb9f50d7f93fc90b5..59a747e41a9cb3d047dd9eedbb4e84e4466b8456 100644 GIT binary patch delta 10426 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 QkUzS&4R2N6u#fov0H}3#zW@LL delta 10234 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 E58eMI%K!iX