From 3dbf50da89a73b3a0fdbb172523314b86d2111ef Mon Sep 17 00:00:00 2001 From: fernerr <35879136+fernerr@users.noreply.github.com> Date: Sun, 23 Feb 2020 06:46:34 +0100 Subject: [PATCH] Adds a random gun option to the uplink, Replaces the renegade's weapon with this kit (#8282) --- .../highly visible and dangerous weapons.dm | 7 +- code/game/antagonist/station/renegade.dm | 22 +-- .../items/weapons/storage/uplink_kits.dm | 11 ++ code/game/objects/random/random.dm | 151 +++++++++++++++++- .../projectiles/guns/projectile/automatic.dm | 3 + .../projectiles/guns/projectile/pistol.dm | 1 + .../projectiles/guns/projectile/revolver.dm | 7 + .../projectiles/guns/projectile/rifle.dm | 3 + .../Ferner-200107-coding_weaponandammo.yml | 4 + 9 files changed, 186 insertions(+), 23 deletions(-) create mode 100644 html/changelogs/Ferner-200107-coding_weaponandammo.yml diff --git a/code/datums/uplink/highly visible and dangerous weapons.dm b/code/datums/uplink/highly visible and dangerous weapons.dm index 16de28a9f5d..8431ec4be90 100644 --- a/code/datums/uplink/highly visible and dangerous weapons.dm +++ b/code/datums/uplink/highly visible and dangerous weapons.dm @@ -127,4 +127,9 @@ /datum/uplink_item/item/visible_weapons/custom_ka name = "Kinetic Laser Assembly" item_cost = 12 - path = /obj/item/gun/custom_ka/frame01/illegal \ No newline at end of file + path = /obj/item/gun/custom_ka/frame01/illegal + +/datum/uplink_item/item/visible_weapons/random_weapon + name = "Random Gun" + item_cost = 13 + path = /obj/item/storage/box/syndie_kit/random_weapon diff --git a/code/game/antagonist/station/renegade.dm b/code/game/antagonist/station/renegade.dm index f0f6e6d5d02..f845aa18f3d 100644 --- a/code/game/antagonist/station/renegade.dm +++ b/code/game/antagonist/station/renegade.dm @@ -16,25 +16,6 @@ var/datum/antagonist/renegade/renegades bantype = "renegade" - var/list/spawn_guns = list( - /obj/item/gun/energy/gun, - /obj/item/gun/energy/retro, - /obj/item/gun/energy/xray, - /obj/item/gun/projectile/revolver, - /obj/item/gun/projectile/revolver/deckard, - /obj/item/gun/projectile/revolver/adhomian, - /obj/item/gun/projectile/automatic/c20r, - /obj/item/gun/projectile/deagle, - /obj/item/gun/projectile/pistol, - /obj/item/gun/projectile/shotgun/doublebarrel/sawn, - /obj/item/gun/projectile/shotgun/pump/rifle/obrez, - /obj/item/gun/projectile/automatic, - /obj/item/gun/projectile/automatic/c20r, - /obj/item/gun/projectile/automatic/tommygun, - /obj/item/gun/projectile/automatic/mini_uzi, - /obj/item/gun/projectile/tanto - ) - /datum/antagonist/renegade/New() ..() renegades = src @@ -53,10 +34,9 @@ var/datum/antagonist/renegade/renegades if(!..()) return - var/gun_type = pick(spawn_guns) if(!player.back) player.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(player), slot_back) // if they have no backpack, spawn one - player.equip_to_slot_or_del(new gun_type(player), slot_in_backpack) + player.equip_to_slot_or_del(new /obj/item/storage/box/syndie_kit/random_weapon/concealable(player), slot_in_backpack) /proc/rightandwrong() to_chat(usr, "You summoned guns!") diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 3bcd63abeb8..34bb53e9726 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -226,3 +226,14 @@ /obj/item/reagent_containers/personal_inhaler_cartridge/large/norepinephrine = 1, /obj/item/reagent_containers/personal_inhaler_cartridge/large = 1, ) + +/obj/item/storage/box/syndie_kit/random_weapon + desc = "An untraceable gun of varying quality. Acquired from unknown sources. Includes ammunition if applicable." + starts_with = list(/obj/random/weapon_and_ammo = 1) + +/obj/item/storage/box/syndie_kit/random_weapon/concealable + starts_with = list(/obj/random/weapon_and_ammo/concealable = 1) + +/obj/item/storage/box/syndie_kit/random_weapon/Initialize() + .=..() + desc = "A sleek, sturdy box" \ No newline at end of file diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 92c67feabdf..8eac6e0aece 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -1399,4 +1399,153 @@ /obj/item/xmasgift/small = 0.5, /obj/item/xmasgift/medium = 0.3, /obj/item/xmasgift/large = 0.2 - ) \ No newline at end of file + ) + +/obj/random/weapon_and_ammo + name = "random weapon and ammo" + desc = "Summons a random weapon, with ammo if applicable" + icon = 'icons/obj/guns/xenoblaster.dmi' + icon_state = "xenoblaster" + var/chosen_rarity //Can be set to force certain rarity + var/concealable = FALSE //If the gun should fit in a backpack + has_postspawn = TRUE + + var/list/Shoddy = list( + /obj/item/gun/energy/blaster = 1, + /obj/item/gun/energy/retro = 0.5, + /obj/item/gun/energy/toxgun = 0.5, + /obj/item/gun/projectile/automatic/improvised = 1, + /obj/item/gun/projectile/contender = 1, + /obj/item/gun/projectile/leyon = 1, + /obj/item/gun/projectile/revolver/derringer = 1, + /obj/item/gun/projectile/shotgun/pump/rifle/obrez = 1, + /obj/item/gun/projectile/shotgun/pump/rifle/vintage = 1, + /obj/item/gun/launcher/harpoon = 0.5 + ) + + var/list/Common = list( + /obj/item/gun/energy/blaster/carbine = 1, + /obj/item/gun/energy/crossbow/largecrossbow = 1, + /obj/item/gun/energy/laser = 0.5, + /obj/item/gun/energy/pistol = 1, + /obj/item/gun/energy/rifle = 1, + /obj/item/gun/projectile/automatic/c20r = 1, + /obj/item/gun/projectile/automatic/mini_uzi = 1, + /obj/item/gun/projectile/automatic/wt550/lethal = 0.5, + /obj/item/gun/projectile/colt = 0.5, + /obj/item/gun/projectile/pistol/sol = 1, + /obj/item/gun/projectile/pistol/adhomai = 1, + /obj/item/gun/projectile/revolver/detective = 0.5, + /obj/item/gun/projectile/revolver/adhomian = 1, + /obj/item/gun/projectile/revolver/lemat = 1, + /obj/item/gun/projectile/sec/lethal= 0.5, + /obj/item/gun/projectile/shotgun/doublebarrel/pellet = 1, + /obj/item/gun/projectile/shotgun/pump/rifle = 1, + /obj/item/gun/projectile/tanto = 1, + /obj/item/gun/projectile/gauss = 1 + ) + + var/list/Rare = list( + /obj/item/gun/energy/blaster/revolver = 1, + /obj/item/gun/energy/blaster/rifle = 1, + /obj/item/gun/energy/pistol/hegemony = 1, + /obj/item/gun/energy/rifle/laser = 1, + /obj/item/gun/energy/rifle/ionrifle = 0.5, + /obj/item/gun/energy/vaurca/blaster = 1, + /obj/item/gun/energy/xray = 1, + /obj/item/gun/energy/lasercannon = 1, + /obj/item/gun/projectile/automatic/rifle/sts35 = 1, + /obj/item/gun/projectile/automatic/x9 = 1, + /obj/item/gun/projectile/deagle = 1, + /obj/item/gun/projectile/deagle/adhomai = 1, + /obj/item/gun/projectile/silenced = 1, + /obj/item/gun/projectile/dragunov = 1, + /obj/item/gun/projectile/plasma/bolter = 1, + /obj/item/gun/projectile/shotgun/doublebarrel/sawn = 1, + /obj/item/gun/projectile/shotgun/foldable = 1, + /obj/item/gun/projectile/shotgun/pump/combat = 1, + /obj/item/gun/projectile/shotgun/pump/combat/sol = 1 + ) + + var/list/Epic = list( + /obj/item/gun/energy/pulse/pistol = 1, + /obj/item/gun/energy/decloner = 0.5, + /obj/item/gun/energy/rifle/laser/xray = 1, + /obj/item/gun/energy/rifle/laser/tachyon = 1, + /obj/item/gun/energy/sniperrifle = 1, + /obj/item/gun/energy/tesla = 1, + /obj/item/gun/energy/laser/shotgun = 1, + /obj/item/gun/energy/vaurca/gatlinglaser = 1, + /obj/item/gun/projectile/automatic/rifle/shotgun = 0.5, + /obj/item/gun/projectile/automatic/rifle/sol = 1, + /obj/item/gun/projectile/automatic/rifle/w556 = 1, + /obj/item/gun/projectile/automatic/rifle/z8 = 1, + /obj/item/gun/projectile/cannon = 1, + /obj/item/gun/projectile/gyropistol = 0.5, + /obj/item/gun/projectile/plasma = 1 + ) + + var/list/Legendary = list( + /obj/item/gun/energy/lawgiver = 1, + /obj/item/gun/energy/pulse = 1, + /obj/item/gun/energy/rifle/pulse = 1, + /obj/item/gun/projectile/automatic/railgun = 1, + /obj/item/gun/projectile/automatic/rifle/l6_saw = 1, + /obj/item/gun/projectile/automatic/terminator = 1, + /obj/item/gun/projectile/nuke = 1, + /obj/item/gun/projectile/revolver/mateba = 1 + ) + +/obj/random/weapon_and_ammo/concealable + concealable = TRUE + +/obj/random/weapon_and_ammo/post_spawn(var/obj/item/gun/projectile/spawned) + if(!istype(spawned, /obj/item/gun/projectile)) + return + if(spawned.magazine_type) + var/obj/item/ammo_magazine/am = spawned.magazine_type + new am(spawned.loc) + new am(spawned.loc) + else if(istype(spawned, /obj/item/gun/projectile/shotgun) && spawned.caliber == "shotgun") + if(istype(spawned.loc, /obj/item/storage/box)) + spawned.loc.icon_state = "largebox" + var/obj/item/storage/box/b = new /obj/item/storage/box(spawned.loc) + for(var/i = 0; i < 8; i++) + new spawned.ammo_type(b) + else if(spawned.ammo_type) + for(var/i = 0; i < (spawned.max_shells * 2); i++) + new spawned.ammo_type(spawned.loc) + +/obj/random/weapon_and_ammo/spawn_item() + var/obj/item/W = pick_gun() + . = new W(loc) + +/obj/random/weapon_and_ammo/proc/pick_gun() + var/list/possible_rarities = list( + "Shoddy" = 25, + "Common" = 35, + "Rare" = 25, + "Epic" = 14, + "Legendary" = 1 + ) + if(!chosen_rarity) + chosen_rarity = pickweight(possible_rarities) + var/obj/item/W + switch(chosen_rarity) + if("Shoddy") + W = pickweight(Shoddy) + if("Common") + W = pickweight(Common) + if("Rare") + W = pickweight(Rare) + if("Epic") + W = pickweight(Epic) + if("Legendary") + W = pickweight(Legendary) + if(concealable) + var/weapon_w_class = initial(W.w_class) + if(weapon_w_class > 3) + chosen_rarity = null + return pick_gun() + + return W \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index bf4abdfe4e6..68d1cbcd0f0 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -85,6 +85,9 @@ magazine_type = /obj/item/ammo_magazine/mc9mmt/rubber allowed_magazines = list(/obj/item/ammo_magazine/mc9mmt) +/obj/item/gun/projectile/automatic/wt550/lethal + magazine_type = /obj/item/ammo_magazine/mc9mmt + /obj/item/gun/projectile/automatic/wt550/update_icon() ..() if(ammo_magazine) diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 33629f20689..90778c84b4b 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -344,6 +344,7 @@ caliber = "10mm" w_class = 2 ammo_type = /obj/item/ammo_casing/c10mm + magazine_type = /obj/item/ammo_magazine/mc10mm/leyon max_shells = 5 origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) fire_sound = 'sound/weapons/gunshot/gunshot_pistol.ogg' diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 95678f15473..0988729322f 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -10,6 +10,7 @@ handle_casings = CYCLE_CASINGS max_shells = 8 ammo_type = /obj/item/ammo_casing/a357 + magazine_type = /obj/item/ammo_magazine/a357 fire_sound = 'sound/weapons/gunshot/gunshot_revolver.ogg' var/chamber_offset = 0 //how many empty chambers in the cylinder until you hit a round @@ -47,6 +48,7 @@ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) fire_sound = 'sound/weapons/gunshot/gunshot_mateba.ogg' ammo_type = /obj/item/ammo_casing/a454 + magazine_type = /obj/item/ammo_magazine/a454 /obj/item/gun/projectile/revolver/detective name = "revolver" @@ -60,6 +62,7 @@ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2) fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' ammo_type = /obj/item/ammo_casing/c38 + magazine_type = /obj/item/ammo_magazine/c38 /obj/item/gun/projectile/revolver/detective/verb/rename_gun() set name = "Name Gun" @@ -90,6 +93,7 @@ item_state = "deckard" caliber = "38" ammo_type = /obj/item/ammo_casing/c38 + magazine_type = null fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' /obj/item/gun/projectile/revolver/deckard/update_icon() @@ -120,6 +124,7 @@ load_method = SINGLE_CASING max_shells = 2 ammo_type = /obj/item/ammo_casing/a357 + magazine_type = null /obj/item/gun/projectile/revolver/capgun name = "cap gun" @@ -157,6 +162,7 @@ caliber = "38" fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' ammo_type = /obj/item/ammo_casing/c38 + magazine_type = /obj/item/ammo_magazine/c38 var/secondary_max_shells = 1 var/secondary_caliber = "shotgun" var/secondary_ammo_type = /obj/item/ammo_casing/shotgun/pellet @@ -249,6 +255,7 @@ load_method = SINGLE_CASING fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg' ammo_type = /obj/item/ammo_casing/c38 + magazine_type = null description_fluff = "A simple and reliable double action revolver, favored by the nobility, officers and law enforcement. The design is known for having an outdated reloading \ mechanism, with the need to manually eject each of the used cartridges, and reload one cartridge at a time through a loading gate. However, their cheap manufacturing cost has \ diff --git a/code/modules/projectiles/guns/projectile/rifle.dm b/code/modules/projectiles/guns/projectile/rifle.dm index 9e02091927a..0488f706f6f 100644 --- a/code/modules/projectiles/guns/projectile/rifle.dm +++ b/code/modules/projectiles/guns/projectile/rifle.dm @@ -8,6 +8,7 @@ fire_sound = 'sound/weapons/gunshot/gunshot_rifle.ogg' caliber = "a762" ammo_type = /obj/item/ammo_casing/a762 + magazine_type = /obj/item/ammo_magazine/boltaction max_shells = 5 pump_fail_msg = "You cannot work the rifle's bolt without gripping it with both hands!" @@ -62,6 +63,7 @@ handle_casings = HOLD_CASINGS max_shells = 1 ammo_type = /obj/item/ammo_casing/a556 + magazine_type = /obj/item/ammo_magazine/a556 slot_flags = SLOT_BELT|SLOT_HOLSTER load_method = SINGLE_CASING fire_sound = 'sound/weapons/gunshot/gunshot3.ogg' @@ -130,6 +132,7 @@ handle_casings = HOLD_CASINGS caliber = "vintage" ammo_type = /obj/item/ammo_casing/vintage + magazine_type = /obj/item/ammo_magazine/boltaction/vintage can_bayonet = TRUE var/open_bolt = 0 var/obj/item/ammo_magazine/boltaction/vintage/has_clip diff --git a/html/changelogs/Ferner-200107-coding_weaponandammo.yml b/html/changelogs/Ferner-200107-coding_weaponandammo.yml new file mode 100644 index 00000000000..ac314f91062 --- /dev/null +++ b/html/changelogs/Ferner-200107-coding_weaponandammo.yml @@ -0,0 +1,4 @@ +author: Ferner +delete-after: True +changes: + - rscadd: "Added an uplink option to purchase a random projectile weapon from a wide selection. Expect varying quality."