Files
Aurora.3/code/game/objects/random/weapon_and_ammo.dm
T
Cody BrittainandGitHub 23789d4113 Sorts out existing projectile weapons (#22059)
This PR is intended to sort out our existing guns into something
resembling organization. In addition, ancient decrepit guns are removed,
and abstract paths are labeled as such.

In addition, all guns are now standardized to refer to their model.
Considering the huge number of weapons we have, a `pistol` is not
descriptive enough.

NOTE: At over 200 files touched, this is being split. Not everything was
sorted, but this is already a monster to sort through. The rest can
wait.
2026-03-25 15:37:50 +00:00

187 lines
6.5 KiB
Plaintext

/obj/random/weapon_and_ammo
name = "random weapon and ammo"
desc = "Summons a random weapon, with ammo if applicable."
icon = 'icons/obj/random.dmi'
icon_state = "pistol"
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/projectile/automatic/improvised = 1,
/obj/item/gun/projectile/contender = 0.5,
/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/projectile/shotgun/pump/lever_action = 0.5,
/obj/item/gun/launcher/harpoon = 1
)
var/list/Common = list(
/obj/item/gun/energy/blaster/carbine = 1,
/obj/item/gun/energy/crossbow/largecrossbow = 1,
/obj/item/gun/energy/rifle/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/tommygun = 1,
/obj/item/gun/projectile/automatic/lebman = 1,
/obj/item/gun/projectile/automatic/wt550/lethal = 0.5,
/obj/item/gun/projectile/colt = 0.5,
/obj/item/gun/projectile/colt/super = 1,
/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,
/obj/item/gun/projectile/revolver/knife = 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/icelance = 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/rifle/laser/heavy = 1,
/obj/item/gun/projectile/automatic/rifle/sts35 = 1,
/obj/item/gun/projectile/automatic/rifle/shorty = 1,
/obj/item/gun/projectile/automatic/rifle/carbine = 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 = 0.5,
/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,
/obj/item/gun/projectile/automatic/rifle/adhomian = 1,
/obj/item/gun/projectile/musket = 0.5,
/obj/item/gun/launcher/grenade = 1,
/obj/item/gun/energy/freeze = 0.5
)
var/list/Epic = list(
/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/rifle/laser/sniper = 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/plasma = 0.5,
/obj/item/gun/projectile/revolver = 0.5
)
var/list/Legendary = list(
/obj/item/gun/energy/acp = 1,
/obj/item/gun/energy/pulse = 1,
/obj/item/gun/energy/pulse/pistol = 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/gyropistol = 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/energy))
return
else if(istype(spawned, /obj/item/gun/projectile))
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)
var/list/provided_ammo = list()
for(var/i = 0; i < (spawned.max_shells * 2); i++)
provided_ammo += new spawned.ammo_type(spawned.loc)
if(provided_ammo.len)
new /obj/item/ammo_pile(spawned.loc, provided_ammo)
if(istype(spawned, /obj/item/gun/projectile/musket))
new /obj/item/reagent_containers/powder_horn(spawned.loc)
else if(istype(spawned, /obj/item/gun/launcher))
if(istype(spawned, /obj/item/gun/launcher/harpoon))
for(var/i in 1 to 4)
new /obj/item/material/harpoon(spawned.loc)
if(istype(spawned, /obj/item/gun/launcher/grenade))
var/list/grenade_types = list(
/obj/item/grenade/smokebomb,
/obj/item/grenade/flashbang,
/obj/item/grenade/empgrenade,
/obj/item/grenade/chem_grenade/incendiary,
/obj/item/grenade/stinger
)
var/obj/item/storage/bag/plasticbag/bag = new /obj/item/storage/bag/plasticbag(spawned.loc)
for(var/i in 1 to 7)
var/chosen_type = pick(grenade_types)
new chosen_type(bag)
/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