Files
Bubberstation/code/game/objects/structures/guncase.dm
Singul0 865cd178bc Adds a new heavy weight space pirate variant: The space IRS! (#76115)
It seems the station has attracted the attention of a local polity! They
have sent a friendly reminder to pay their taxes, should the station
respond not in time or refuse to pay their taxes the polity will send a
heavily armed vessel to ensure they would pay their taxes. peacefully or
otherwise.
Gameplay aims: A different playstyle of pirates. most pirates (with the
exception of the greytide) have the same gameplay loop of raiding
vulnerable spots within the station and scurrying away and waiting out
their cooldown in the relative safety of their ship with turrets and
space to hamper the crew's attack my intention of this pirate variation
is to force them to actively fight the crew by making their armor
non-space worthy instead of hiding behind the wall of space

breaching shells for the space IRS to use and recode ammo box code to be
less snowflakey. Also my English isn't the very best and I wrote most of
it at 1AM. please point out any messages that feel strange or out of
place.

Notable Equipment list:

Combat:
1. 2 WT-550's with 6 normal mags + 6 AP
2. M911 with 2 mags
3. 2 combat knifes and a telebaton
4. breaching shotgun with breaching shells
5. Grenade launcher with 6 smoke shells and flashbangs

Armor:
2 Highly armoured sets of tactical vests and helmets and 3 EVA suits for
emergency

Engineering:
1. Sandbags
2. Jaws of Life
3. Syndicate toolbox

Medical:
1. Surgery tools and disk
2. Variety of medkits
3. Blood packs
2023-07-11 04:29:16 +00:00

141 lines
3.6 KiB
Plaintext

//GUNCASES//
/obj/structure/guncase
name = "gun locker"
desc = "A locker that holds guns."
icon = 'icons/obj/storage/closet.dmi'
icon_state = "shotguncase"
anchored = FALSE
density = TRUE
opacity = FALSE
var/case_type = ""
var/gun_category = /obj/item/gun
var/open = TRUE
var/capacity = 4
/obj/structure/guncase/Initialize(mapload)
. = ..()
if(mapload)
for(var/obj/item/I in loc.contents)
if(istype(I, gun_category))
I.forceMove(src)
if(contents.len >= capacity)
break
update_appearance()
/obj/structure/guncase/update_overlays()
. = ..()
if(case_type && LAZYLEN(contents))
var/mutable_appearance/gun_overlay = mutable_appearance(icon, case_type)
for(var/i in 1 to contents.len)
gun_overlay.pixel_x = 3 * (i - 1)
. += new /mutable_appearance(gun_overlay)
. += "[icon_state]_[open ? "open" : "door"]"
/obj/structure/guncase/attackby(obj/item/I, mob/living/user, params)
if(iscyborg(user) || isalien(user))
return
if(istype(I, gun_category) && open)
if(LAZYLEN(contents) < capacity)
if(!user.transferItemToLoc(I, src))
return
to_chat(user, span_notice("You place [I] in [src]."))
update_appearance()
else
to_chat(user, span_warning("[src] is full."))
return
else if(!user.combat_mode)
open = !open
update_appearance()
else
return ..()
/obj/structure/guncase/attack_hand(mob/user, list/modifiers)
. = ..()
if(.)
return
if(iscyborg(user) || isalien(user))
return
if(contents.len && open)
show_menu(user)
else
open = !open
update_appearance()
/**
* show_menu: Shows a radial menu to a user consisting of an available weaponry for taking
*
* Arguments:
* * user The mob to which we are showing the radial menu
*/
/obj/structure/guncase/proc/show_menu(mob/user)
if(!LAZYLEN(contents))
return
var/list/display_names = list()
var/list/items = list()
for(var/i in 1 to length(contents))
var/obj/item/thing = contents[i]
display_names["[thing.name] ([i])"] = REF(thing)
var/image/item_image = image(icon = thing.icon, icon_state = thing.icon_state)
if(length(thing.overlays))
item_image.copy_overlays(thing)
items += list("[thing.name] ([i])" = item_image)
var/pick = show_radial_menu(user, src, items, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 36, require_near = TRUE)
if(!pick)
return
var/weapon_reference = display_names[pick]
var/obj/item/weapon = locate(weapon_reference) in contents
if(!istype(weapon))
return
if(!user.put_in_hands(weapon))
weapon.forceMove(get_turf(src))
update_appearance()
/**
* check_menu: Checks if we are allowed to interact with a radial menu
*
* Arguments:
* * user The mob interacting with a menu
*/
/obj/structure/guncase/proc/check_menu(mob/living/carbon/human/user)
if(!open)
return FALSE
if(!istype(user))
return FALSE
if(user.incapacitated())
return FALSE
return TRUE
/obj/structure/guncase/handle_atom_del(atom/A)
update_appearance()
/obj/structure/guncase/contents_explosion(severity, target)
switch(severity)
if(EXPLODE_DEVASTATE)
SSexplosions.high_mov_atom += contents
if(EXPLODE_HEAVY)
SSexplosions.med_mov_atom += contents
if(EXPLODE_LIGHT)
SSexplosions.low_mov_atom += contents
/obj/structure/guncase/shotgun
name = "shotgun locker"
desc = "A locker that holds shotguns."
case_type = "shotgun"
gun_category = /obj/item/gun/ballistic/shotgun
/obj/structure/guncase/ecase
name = "energy gun locker"
desc = "A locker that holds energy guns."
icon_state = "ecase"
case_type = "egun"
gun_category = /obj/item/gun/energy/e_gun
/obj/structure/guncase/wt550
name = "WT-550 gun locker"
desc = "A locker that holds WT-550 rifles."
case_type = "wt550"