mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-26 01:52:29 +00:00
Merge pull request #4838 from VOREStation/pol-emerboxes
Port Bay's survival boxes
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#define OUTFIT_HAS_JETPACK 1
|
||||
#define OUTFIT_HAS_BACKPACK 2
|
||||
#define OUTFIT_EXTENDED_SURVIVAL 4
|
||||
#define OUTFIT_COMPREHENSIVE_SURVIVAL 8
|
||||
|
||||
#define OUTFIT_JOB_NAME(job_name) ("Job - " + job_name)
|
||||
#define OUTFIT_MILITARY(job_name) ("Military Uniform - " + job_name)
|
||||
|
||||
@@ -146,7 +146,7 @@ var/list/outfits_decls_by_type_
|
||||
if(r_hand)
|
||||
H.put_in_r_hand(new r_hand(H))
|
||||
if(H.species)
|
||||
H.species.equip_survival_gear(H, flags&OUTFIT_EXTENDED_SURVIVAL)
|
||||
H.species.equip_survival_gear(H, flags&OUTFIT_EXTENDED_SURVIVAL, flags&OUTFIT_COMPREHENSIVE_SURVIVAL)
|
||||
|
||||
/decl/hierarchy/outfit/proc/equip_id(mob/living/carbon/human/H, rank, assignment)
|
||||
if(!id_slot || !id_type)
|
||||
|
||||
@@ -42,8 +42,8 @@ var/datum/antagonist/mercenary/mercs
|
||||
if(player.backbag == 3) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(player), slot_back)
|
||||
if(player.backbag == 4) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(player), slot_back)
|
||||
if(player.backbag == 5) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/messenger(player), slot_back)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(player.back), slot_in_backpack)
|
||||
player.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(player), slot_in_backpack)
|
||||
|
||||
player.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT
|
||||
player.mind.accept_tcrystals = 1
|
||||
|
||||
|
||||
@@ -52,20 +52,24 @@
|
||||
new foldable(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/storage/box/survival/New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/weapon/tank/emergency/oxygen(src)
|
||||
/obj/item/weapon/storage/box/survival
|
||||
name = "emergency supply box"
|
||||
desc = "A survival box issued to crew members for use in emergency situations."
|
||||
starts_with = list(
|
||||
/obj/item/clothing/mask/breath
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/box/vox/New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/weapon/tank/emergency/phoron(src)
|
||||
|
||||
/obj/item/weapon/storage/box/engineer/New()
|
||||
..()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/weapon/tank/emergency/oxygen/engi(src)
|
||||
/obj/item/weapon/storage/box/survival/comp
|
||||
name = "emergency supply box"
|
||||
desc = "A comprehensive survival box issued to crew members for use in emergency situations. Contains additional supplies."
|
||||
icon_state = "survival"
|
||||
starts_with = list(
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector,
|
||||
/obj/item/stack/medical/bruise_pack,
|
||||
/obj/item/device/flashlight/glowstick,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar,
|
||||
/obj/item/clothing/mask/breath
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/box/gloves
|
||||
name = "box of latex gloves"
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile.
|
||||
var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile
|
||||
var/use_sound = "rustle" //sound played when used. null for no sound.
|
||||
var/list/starts_with //Things to spawn on the box on spawn
|
||||
|
||||
/obj/item/weapon/storage/Destroy()
|
||||
close_all()
|
||||
@@ -523,7 +524,8 @@
|
||||
for(var/obj/item/I in contents)
|
||||
remove_from_storage(I, T)
|
||||
|
||||
/obj/item/weapon/storage/New()
|
||||
/obj/item/weapon/storage/initialize()
|
||||
. = ..()
|
||||
|
||||
if(allow_quick_empty)
|
||||
verbs += /obj/item/weapon/storage/verb/quick_empty
|
||||
@@ -535,12 +537,6 @@
|
||||
else
|
||||
verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode
|
||||
|
||||
spawn(5)
|
||||
var/total_storage_space = 0
|
||||
for(var/obj/item/I in contents)
|
||||
total_storage_space += I.get_storage_cost()
|
||||
max_storage_space = max(total_storage_space,max_storage_space) //Prevents spawned containers from being too small for their contents.
|
||||
|
||||
src.boxes = new /obj/screen/storage( )
|
||||
src.boxes.name = "storage"
|
||||
src.boxes.master = src
|
||||
@@ -579,7 +575,21 @@
|
||||
src.closer.icon_state = "storage_close"
|
||||
src.closer.hud_layerise()
|
||||
orient2hud()
|
||||
return
|
||||
|
||||
if(LAZYLEN(starts_with))
|
||||
for(var/newtype in starts_with)
|
||||
var/count = starts_with[newtype] || 1 //Could have left it blank.
|
||||
while(count)
|
||||
count--
|
||||
new newtype(src)
|
||||
|
||||
calibrate_size()
|
||||
|
||||
/obj/item/weapon/storage/proc/calibrate_size()
|
||||
var/total_storage_space = 0
|
||||
for(var/obj/item/I in contents)
|
||||
total_storage_space += I.get_storage_cost()
|
||||
max_storage_space = max(total_storage_space,max_storage_space) //Prevents spawned containers from being too small for their contents.
|
||||
|
||||
/obj/item/weapon/storage/emp_act(severity)
|
||||
if(!istype(src.loc, /mob/living))
|
||||
|
||||
@@ -186,8 +186,8 @@
|
||||
src.air_contents.adjust_gas("phoron", (3*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
|
||||
/obj/item/weapon/tank/emergency/phoron/double
|
||||
name = "double emergency nitrogen tank"
|
||||
icon_state = "emergency_double_nitrogen"
|
||||
name = "double emergency phoron tank"
|
||||
icon_state = "emergency_double_nitro"
|
||||
gauge_icon = "indicator_emergency_double"
|
||||
volume = 10
|
||||
|
||||
|
||||
@@ -641,7 +641,6 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(2);/obj/item/weapon/storage/box/sinpockets,
|
||||
prob(1);/obj/item/weapon/storage/box/cups,
|
||||
prob(3);/obj/item/weapon/storage/box/mousetraps,
|
||||
prob(3);/obj/item/weapon/storage/box/engineer,
|
||||
prob(3);/obj/item/weapon/storage/wallet,
|
||||
prob(1);/obj/item/device/paicard,
|
||||
prob(2);/obj/item/clothing/shoes/galoshes,
|
||||
@@ -811,7 +810,6 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(5);/obj/item/weapon/storage/backpack/messenger/engi,
|
||||
prob(3);/obj/item/weapon/storage/backpack/dufflebag/eng,
|
||||
prob(5);/obj/item/weapon/storage/box,
|
||||
prob(3);/obj/item/weapon/storage/box/engineer,
|
||||
prob(2);/obj/item/weapon/storage/belt/utility/full,
|
||||
prob(3);/obj/item/weapon/storage/belt/utility,
|
||||
prob(3);/obj/item/clothing/head/beret/engineering,
|
||||
|
||||
@@ -278,7 +278,6 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
/obj/item/weapon/storage/box/donut,
|
||||
/obj/item/weapon/storage/box/donut/empty,
|
||||
/obj/item/weapon/storage/box/evidence,
|
||||
/obj/item/weapon/storage/box/engineer,
|
||||
/obj/item/weapon/storage/box/lights/mixed,
|
||||
/obj/item/weapon/storage/box/lights/tubes,
|
||||
/obj/item/weapon/storage/box/lights/bulbs,
|
||||
|
||||
@@ -83,15 +83,15 @@
|
||||
var/datum/language/species_language = all_languages[default_language]
|
||||
return species_language.get_random_name(gender)
|
||||
|
||||
/datum/species/vox/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||
/datum/species/vox/equip_survival_gear(var/mob/living/carbon/human/H, var/extendedtank = 0,var/comprehensive = 0)
|
||||
. = ..()
|
||||
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/tank/vox(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H), slot_r_hand)
|
||||
H.internal = H.back
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/tank/vox(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H.back), slot_in_backpack)
|
||||
H.internal = H.r_hand
|
||||
H.internal = locate(/obj/item/weapon/tank) in H.contents
|
||||
if(istype(H.internal,/obj/item/weapon/tank) && H.internals)
|
||||
|
||||
@@ -233,20 +233,39 @@
|
||||
/datum/species/proc/sanitize_name(var/name, var/robot = 0)
|
||||
return sanitizeName(name, MAX_NAME_LEN, robot)
|
||||
|
||||
/datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 1)
|
||||
/datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 0,var/comprehensive = 0)
|
||||
var/boxtype = /obj/item/weapon/storage/box/survival //Default survival box
|
||||
|
||||
if(H.isSynthetic())
|
||||
boxtype = /obj/item/weapon/storage/box //Empty box for synths
|
||||
|
||||
else if(extendedtank)
|
||||
boxtype = /obj/item/weapon/storage/box/engineer //Special box for engineers
|
||||
//Special box for engineers
|
||||
if(comprehensive)
|
||||
boxtype = /obj/item/weapon/storage/box/survival/comp
|
||||
|
||||
//Create the box
|
||||
var/obj/item/weapon/storage/box/box = new boxtype(H)
|
||||
|
||||
//Create a tank (if such a thing exists for this species)
|
||||
var/tanktext = "/obj/item/weapon/tank/emergency/" + "[breath_type]"
|
||||
var/obj/item/weapon/tank/emergency/tankpath //Will force someone to come look here if they ever alter this path.
|
||||
if(extendedtank)
|
||||
tankpath = text2path(tanktext + "/engi")
|
||||
if(!tankpath) //Is it just that there's no /engi?
|
||||
tankpath = text2path(tanktext + "/double")
|
||||
|
||||
if(!tankpath)
|
||||
tankpath = text2path(tanktext)
|
||||
|
||||
if(tankpath)
|
||||
new tankpath(box)
|
||||
|
||||
box.calibrate_size()
|
||||
|
||||
if(H.backbag == 1)
|
||||
if (extendedtank) H.equip_to_slot_or_del(new boxtype(H), slot_r_hand)
|
||||
else H.equip_to_slot_or_del(new boxtype(H), slot_r_hand)
|
||||
H.equip_to_slot_or_del(box, slot_r_hand)
|
||||
else
|
||||
if (extendedtank) H.equip_to_slot_or_del(new boxtype(H.back), slot_in_backpack)
|
||||
else H.equip_to_slot_or_del(new boxtype(H.back), slot_in_backpack)
|
||||
H.equip_to_slot_or_del(box, slot_in_backpack)
|
||||
|
||||
/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
|
||||
|
||||
|
||||
@@ -15,8 +15,6 @@
|
||||
flags = OPENCONTAINER
|
||||
slot_flags = SLOT_BELT
|
||||
preserve_item = 1
|
||||
var/reusable = 1
|
||||
var/used = 0
|
||||
var/filled = 0
|
||||
var/list/filled_reagents = list()
|
||||
|
||||
@@ -64,9 +62,6 @@
|
||||
admin_inject_log(user, M, src, contained, trans)
|
||||
to_chat(user, "<span class='notice'>[trans] units injected. [reagents.total_volume] units remaining in \the [src].</span>")
|
||||
|
||||
if(!reusable && !used)
|
||||
used = !used
|
||||
|
||||
return
|
||||
//A vial-loaded hypospray. Cartridge-based!
|
||||
/obj/item/weapon/reagent_containers/hypospray/vial
|
||||
@@ -122,11 +117,10 @@
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector
|
||||
name = "autoinjector"
|
||||
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
|
||||
icon_state = "autoinjector"
|
||||
item_state = "autoinjector"
|
||||
icon_state = "blue"
|
||||
item_state = "blue"
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 5
|
||||
reusable = 0
|
||||
filled = 1
|
||||
filled_reagents = list("inaprovaline" = 5)
|
||||
preserve_item = 0
|
||||
@@ -139,33 +133,35 @@
|
||||
filled = 0
|
||||
filled_reagents = list()
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/used
|
||||
used = 1
|
||||
filled_reagents = list()
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/used/New()
|
||||
..()
|
||||
flags &= ~OPENCONTAINER
|
||||
icon_state = "[initial(icon_state)]0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/attack(mob/M as mob, mob/user as mob)
|
||||
..()
|
||||
if(used) //Prevents autoinjectors to be refilled.
|
||||
if(reagents.total_volume <= 0) //Prevents autoinjectors to be refilled.
|
||||
flags &= ~OPENCONTAINER
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/update_icon()
|
||||
if(!used && reagents.reagent_list.len)
|
||||
if(reagents.total_volume > 0)
|
||||
icon_state = "[initial(icon_state)]1"
|
||||
else if(used)
|
||||
icon_state = "[initial(icon_state)]0"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]2"
|
||||
icon_state = "[initial(icon_state)]0"
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user)
|
||||
..(user)
|
||||
. = ..(user)
|
||||
if(reagents && reagents.reagent_list.len)
|
||||
user << "<span class='notice'>It is currently loaded.</span>"
|
||||
else if(used)
|
||||
user << "<span class='notice'>It is spent.</span>"
|
||||
to_chat(user, "<span class='notice'>It is currently loaded.</span>")
|
||||
else
|
||||
user << "<span class='notice'>It is currently unloaded.</span>"
|
||||
to_chat(user, "<span class='notice'>It is spent.</span>")
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/detox
|
||||
name = "autoinjector (antitox)"
|
||||
icon_state = "green"
|
||||
filled_reagents = list("anti_toxin" = 5)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting
|
||||
name = "clotting agent"
|
||||
|
||||
Reference in New Issue
Block a user