mirror of
https://github.com/Yawn-Wider/YWPolarisVore.git
synced 2026-07-15 01:55:29 +01:00
Merge branch 'release' of https://github.com/VOREStation/VOREStation into izac
This commit is contained in:
@@ -102,7 +102,7 @@ GLOBAL_LIST_INIT(plant_item_products, list(
|
||||
/obj/item/organ/internal/brain/grey = 1,
|
||||
/obj/item/organ/internal/heart/grey = 1,
|
||||
/obj/item/weapon/spacecash/c1 = 3,
|
||||
/obj/item/weapon/spacecash/c10 = 1
|
||||
/obj/item/weapon/spacecash/c5 = 1
|
||||
))
|
||||
|
||||
GLOBAL_LIST_INIT(forbidden_plant_growth_sprites, list(
|
||||
|
||||
@@ -1,141 +1,152 @@
|
||||
/datum/supply_pack/voidsuits/explorer
|
||||
name = "Exploration voidsuits" // YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/exploration = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/exploration = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 45
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Exploration voidsuit crate" // YW EDIT
|
||||
access = access_explorer // YW EDIT
|
||||
|
||||
/datum/supply_pack/voidsuits/explorer_medic
|
||||
name = "Expedition Medic voidsuits" // YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/exploration = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/exploration = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 45
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Expedition Medic voidsuit crate" // YW EDIT
|
||||
access = access_explorer // YW EDIT
|
||||
|
||||
/datum/supply_pack/voidsuits/pilot
|
||||
name = "Pilot voidsuits"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/pilot = 1,
|
||||
/obj/item/clothing/head/helmet/space/void/pilot = 1,
|
||||
/obj/item/clothing/mask/breath = 1,
|
||||
/obj/item/clothing/shoes/magboots = 1,
|
||||
/obj/item/weapon/tank/oxygen = 1
|
||||
)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Pilot voidsuit crate"
|
||||
access = access_pilot
|
||||
|
||||
|
||||
// Surplus!
|
||||
/datum/supply_pack/voidsuits/com_mining
|
||||
name = "SolGov mining voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/mining/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/mining/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov mining voidsuit crate" //YW EDIT
|
||||
access = access_mining
|
||||
|
||||
/datum/supply_pack/voidsuits/com_anomaly
|
||||
name = "SolGov anomaly suit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/anomaly/alt,
|
||||
/obj/item/clothing/head/helmet/space/anomaly/alt
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov anomaly suit crate" //YW EDIT
|
||||
access = access_xenoarch
|
||||
|
||||
/datum/supply_pack/voidsuits/com_riot
|
||||
name = "SolGov riot voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/security/riot/alt,
|
||||
/obj/item/clothing/head/helmet/space/void/security/riot/alt
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov riot voidsuit crate" //YW EDIT
|
||||
access = access_brig
|
||||
|
||||
/datum/supply_pack/voidsuits/com_pilot
|
||||
name = "SolGov pilot voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/pilot/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/pilot/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov pilot voidsuit crate" //YW EDIT
|
||||
access = access_pilot
|
||||
|
||||
/datum/supply_pack/voidsuits/com_medical
|
||||
name = "SolGov medical voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/medical/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov medical voidsuit crate" //YW EDIT
|
||||
|
||||
/datum/supply_pack/voidsuits/com_explore
|
||||
name = "SolGov exploration voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/exploration/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/exploration/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov exploration voidsuit crate" //YW EDIT
|
||||
access = list(access_eva, access_explorer) //YW EDIT
|
||||
|
||||
/datum/supply_pack/voidsuits/com_engineer
|
||||
name = "SolGov engineering voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/engineering/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/engineering/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov engineering voidsuit crate" //YW EDIT
|
||||
access = access_engine
|
||||
|
||||
/datum/supply_pack/voidsuits/com_atmos
|
||||
name = "SolGov atmos voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/atmos/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/atmos/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov atmos voidsuit crate" //YW EDIT
|
||||
access = access_atmospherics
|
||||
|
||||
/datum/supply_pack/voidsuits/com_captain
|
||||
name = "SolGov captain voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/captain/alt,
|
||||
/obj/item/clothing/head/helmet/space/void/captain/alt
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov captain voidsuit crate" //YW EDIT
|
||||
access = access_captain
|
||||
/datum/supply_pack/voidsuits/explorer
|
||||
name = "Exploration voidsuits" // YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/exploration = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/exploration = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 45
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Exploration voidsuit crate" // YW EDIT
|
||||
access = access_explorer // YW EDIT
|
||||
|
||||
/datum/supply_pack/voidsuits/explorer_medic
|
||||
name = "Expedition Medic voidsuits" // YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/exploration = 2,
|
||||
/obj/item/clothing/head/helmet/space/void/exploration = 2,
|
||||
/obj/item/clothing/mask/breath = 2,
|
||||
/obj/item/clothing/shoes/magboots = 2,
|
||||
/obj/item/weapon/tank/oxygen = 2
|
||||
)
|
||||
cost = 45
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Expedition Medic voidsuit crate" // YW EDIT
|
||||
access = access_explorer // YW EDIT
|
||||
|
||||
/datum/supply_pack/voidsuits/pilot
|
||||
name = "Pilot voidsuits"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/pilot = 1,
|
||||
/obj/item/clothing/head/helmet/space/void/pilot = 1,
|
||||
/obj/item/clothing/mask/breath = 1,
|
||||
/obj/item/clothing/shoes/magboots = 1,
|
||||
/obj/item/weapon/tank/oxygen = 1
|
||||
)
|
||||
cost = 20
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
containername = "Pilot voidsuit crate"
|
||||
access = access_pilot
|
||||
|
||||
|
||||
// Surplus!
|
||||
/datum/supply_pack/voidsuits/com_mining
|
||||
name = "SolGov mining voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/mining/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/mining/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov mining voidsuit crate" //YW EDIT
|
||||
access = access_mining
|
||||
|
||||
/datum/supply_pack/voidsuits/com_anomaly
|
||||
name = "SolGov anomaly suit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/anomaly/alt,
|
||||
/obj/item/clothing/head/helmet/space/anomaly/alt
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov anomaly suit crate" //YW EDIT
|
||||
access = access_xenoarch
|
||||
|
||||
/datum/supply_pack/voidsuits/com_riot
|
||||
name = "SolGov riot voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/security/riot/alt,
|
||||
/obj/item/clothing/head/helmet/space/void/security/riot/alt
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov riot voidsuit crate" //YW EDIT
|
||||
access = access_brig
|
||||
|
||||
/datum/supply_pack/voidsuits/com_pilot
|
||||
name = "SolGov pilot voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/pilot/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/pilot/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov pilot voidsuit crate" //YW EDIT
|
||||
access = access_pilot
|
||||
|
||||
/datum/supply_pack/voidsuits/com_medical
|
||||
name = "SolGov medical voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/medical/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/medical/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov medical voidsuit crate" //YW EDIT
|
||||
|
||||
/datum/supply_pack/voidsuits/com_explore
|
||||
name = "SolGov exploration voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/exploration/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/exploration/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov exploration voidsuit crate" //YW EDIT
|
||||
access = list(access_eva, access_explorer) //YW EDIT
|
||||
|
||||
/datum/supply_pack/voidsuits/com_engineer
|
||||
name = "SolGov engineering voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/engineering/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/engineering/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov engineering voidsuit crate" //YW EDIT
|
||||
access = access_engine
|
||||
|
||||
/datum/supply_pack/voidsuits/com_atmos
|
||||
name = "SolGov atmos voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/atmos/alt2,
|
||||
/obj/item/clothing/head/helmet/space/void/atmos/alt2
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov atmos voidsuit crate" //YW EDIT
|
||||
access = access_atmospherics
|
||||
|
||||
/datum/supply_pack/voidsuits/com_captain
|
||||
name = "SolGov captain voidsuit" //YW EDIT
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/captain/alt,
|
||||
/obj/item/clothing/head/helmet/space/void/captain/alt
|
||||
)
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "SolGov captain voidsuit crate" //YW EDIT
|
||||
access = access_captain
|
||||
|
||||
/datum/supply_pack/voidsuits/csc_breaker
|
||||
name = "Shipbreaker's Industrial Suit (inc. jetpack)"
|
||||
contains = list(
|
||||
/obj/item/clothing/suit/space/void/salvagecorp_shipbreaker,
|
||||
/obj/item/clothing/head/helmet/space/void/salvagecorp_shipbreaker,
|
||||
/obj/item/weapon/tank/jetpack/breaker
|
||||
)
|
||||
cost = 100
|
||||
containertype = /obj/structure/closet/crate/secure
|
||||
name = "Coyote Salvage Corp industrial voidsuit crate"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/machinery/optable
|
||||
name = "Operating Table"
|
||||
desc = "Used for advanced medical procedures."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon = 'icons/obj/surgery_vr.dmi'
|
||||
icon_state = "table2-idle"
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
@@ -100,12 +100,12 @@
|
||||
|
||||
if(!Adjacent(target) || !Adjacent(user))
|
||||
return ..()
|
||||
|
||||
|
||||
if(user.incapacitated() || !check_table(target, user))
|
||||
return ..()
|
||||
|
||||
take_victim(target, user)
|
||||
|
||||
|
||||
/obj/machinery/optable/verb/climb_on()
|
||||
set name = "Climb On Table"
|
||||
set category = "Object"
|
||||
|
||||
@@ -239,6 +239,22 @@ update_flag
|
||||
..()
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/weldingtool)) //Vorestart: Deconstructable Canisters
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(!WT.remove_fuel(0, user))
|
||||
to_chat(user, "The welding tool must be on to complete this task.")
|
||||
return
|
||||
if(air_contents.return_pressure() > 1 && !destroyed) // Empty or broken cans are able to be deconstructed
|
||||
to_chat(user, "<span class ='warning'>\The [src]'s internal pressure is too high! Empty the canister before attempting to weld it apart.</span>")
|
||||
return
|
||||
playsound(src, WT.usesound, 50, 1)
|
||||
if(do_after(user, 20 * WT.toolspeed))
|
||||
if(!src || !WT.isOn()) return
|
||||
to_chat(user, "<span class='notice'>You deconstruct the [src].</span>")
|
||||
new /obj/item/stack/material/steel( src.loc, 10)
|
||||
qdel(src)
|
||||
return
|
||||
//Voreend
|
||||
if(!W.is_wrench() && !istype(W, /obj/item/weapon/tank) && !istype(W, /obj/item/device/analyzer) && !istype(W, /obj/item/device/pda))
|
||||
visible_message("<span class='warning'>\The [user] hits \the [src] with \a [W]!</span>")
|
||||
src.health -= W.force
|
||||
@@ -332,7 +348,7 @@ update_flag
|
||||
pressure = 10*ONE_ATMOSPHERE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = tgui_input_number(usr, "New release pressure ([ONE_ATMOSPHERE/10]-[10*ONE_ATMOSPHERE] kPa):", name, release_pressure, 10*ONE_ATMOSPHERE, ONE_ATMOSPHERE/10)
|
||||
pressure = tgui_input_number(usr, "New release pressure ([ONE_ATMOSPHERE/10]-[10*ONE_ATMOSPHERE] kPa):", name, release_pressure, 10*ONE_ATMOSPHERE, ONE_ATMOSPHERE/10)
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
@@ -452,4 +468,4 @@ update_flag
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/take_damage(var/damage)
|
||||
src.health -= damage
|
||||
healthcheck()
|
||||
healthcheck()
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
|
||||
// Also recharge their internal battery.
|
||||
if(H.isSynthetic() && H.nutrition < 500) //VOREStation Edit
|
||||
H.nutrition = min(H.nutrition+(10*(1-H.species.synthetic_food_coeff)), 500) //VOREStation Edit
|
||||
H.nutrition = min(H.nutrition+(10*(1-max(H.species.synthetic_food_coeff, 0.9))), 500) //VOREStation Edit
|
||||
cell.use(7000/450*10)
|
||||
|
||||
// And clear up radiation
|
||||
|
||||
@@ -138,12 +138,26 @@
|
||||
var/obj/item/stack/nanopaste/NP = W
|
||||
|
||||
if(integrity < max_integrity)
|
||||
to_chat(user, "<span class='notice'>You start to repair damage to \the [src].</span>")
|
||||
while(integrity < max_integrity && NP)
|
||||
if(do_after(user, 1 SECOND, src) && NP.use(1))
|
||||
adjust_integrity(10)
|
||||
if(do_after(user, 1 SECOND, src))
|
||||
NP.use(1)
|
||||
adjust_integrity(NP.mech_repair)
|
||||
|
||||
if(integrity >= max_integrity)
|
||||
to_chat(user, "<span class='notice'>You finish repairing \the [src].</span>")
|
||||
break
|
||||
|
||||
else if(NP.amount == 0)
|
||||
to_chat(user, "<span class='warning'>Insufficient nanopaste to complete repairs!</span>")
|
||||
break
|
||||
|
||||
|
||||
return
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>\The [src] doesn't require repairs.</span>")
|
||||
|
||||
return ..()
|
||||
|
||||
// Various procs to handle different calls by Exosuits. IE, movement actions, damage actions, etc.
|
||||
|
||||
@@ -8,4 +8,5 @@
|
||||
projectile = /obj/item/projectile/beam/medigun
|
||||
fire_sound = 'sound/weapons/eluger.ogg'
|
||||
equip_type = EQUIP_UTILITY
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_BIO = 6, TECH_POWER = 6)
|
||||
required_type = /obj/mecha/medical
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_BIO = 6, TECH_POWER = 6)
|
||||
|
||||
@@ -1567,15 +1567,27 @@
|
||||
for(var/slot in internal_components)
|
||||
var/obj/item/mecha_parts/component/C = internal_components[slot]
|
||||
|
||||
if(C)
|
||||
if(!C)
|
||||
to_chat(user, "<span class='notice'>There are no components installed!</span>")
|
||||
return
|
||||
|
||||
if(C.integrity < C.max_integrity)
|
||||
while(C.integrity < C.max_integrity && NP && do_after(user, 1 SECOND, src))
|
||||
if(NP.use(1))
|
||||
C.adjust_integrity(10)
|
||||
if(C.integrity >= C.max_integrity)
|
||||
to_chat(user, "<span class='notice'>\The [C] does not require repairs.</span>")
|
||||
|
||||
to_chat(user, "<span class='notice'>You repair damage to \the [C].</span>")
|
||||
else if(C.integrity < C.max_integrity)
|
||||
to_chat(user, "<span class='notice'>You start to repair damage to \the [C].</span>")
|
||||
while(C.integrity < C.max_integrity && NP)
|
||||
if(do_after(user, 1 SECOND, src))
|
||||
NP.use(1)
|
||||
C.adjust_integrity(NP.mech_repair)
|
||||
|
||||
if(C.integrity >= C.max_integrity)
|
||||
to_chat(user, "<span class='notice'>You finish repairing \the [C].</span>")
|
||||
break
|
||||
|
||||
else if(NP.amount == 0)
|
||||
to_chat(user, "<span class='warning'>Insufficient nanopaste to complete repairs!</span>")
|
||||
break
|
||||
return
|
||||
|
||||
else
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
if(exact)
|
||||
return decls_repository.get_decl(path)
|
||||
else
|
||||
var/list/L = decls_repository.get_decls_of_type(path)
|
||||
var/list/L = decls_repository.get_decls_of_type(path)
|
||||
return L[pick(L)]
|
||||
return null
|
||||
|
||||
@@ -27,7 +27,9 @@
|
||||
src.poster_decl = get_poster_decl(poster_decl, TRUE)
|
||||
else
|
||||
src.poster_decl = get_poster_decl(/decl/poster, FALSE)
|
||||
|
||||
while (istype(src.poster_decl, /decl/poster/lewd))
|
||||
src.poster_decl = get_poster_decl(/decl/poster, FALSE)
|
||||
|
||||
name += " - [src.poster_decl.name]"
|
||||
return ..()
|
||||
|
||||
@@ -58,8 +60,8 @@
|
||||
if (locate(/obj/structure/sign/poster) in T)
|
||||
stuff_on_wall = 1
|
||||
break
|
||||
|
||||
if(stuff_on_wall)
|
||||
|
||||
if(stuff_on_wall)
|
||||
to_chat(user, "<span class='notice'>There is already a poster there!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -71,7 +73,7 @@
|
||||
to_chat(user, "<span class='notice'>You place the poster!</span>")
|
||||
qdel(src)
|
||||
return TRUE
|
||||
|
||||
|
||||
P.roll_and_drop(P.loc)
|
||||
qdel(src)
|
||||
return FALSE
|
||||
@@ -101,7 +103,7 @@
|
||||
var/list/options = list()
|
||||
var/list/decl/poster/posters = decls_repository.get_decls_of_type(/decl/poster)
|
||||
for(var/option in posters)
|
||||
options[posters[option].listing_name] = posters[option]
|
||||
options[posters[option].name] = posters[option]
|
||||
|
||||
var/choice = tgui_input_list(M, "Choose a poster!", "Customize Poster", options)
|
||||
if(src && choice && !M.stat && in_range(M,src))
|
||||
@@ -156,7 +158,9 @@
|
||||
else if(ispath(P))
|
||||
src.poster_decl = get_poster_decl(P, TRUE)
|
||||
else
|
||||
src.poster_decl = get_poster_decl(target_poster_decl_path, FALSE)
|
||||
src.poster_decl = get_poster_decl(/decl/poster, FALSE)
|
||||
while (istype(src.poster_decl, /decl/poster/lewd))
|
||||
src.poster_decl = get_poster_decl(/decl/poster, FALSE)
|
||||
|
||||
name = "[initial(name)] - [poster_decl.name]"
|
||||
desc = "[initial(desc)] [poster_decl.desc]"
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
/decl/poster/lewd
|
||||
desc = "You shouldn't see this."
|
||||
listing_name = "N/A"
|
||||
|
||||
/decl/poster/vore_1
|
||||
icon_state = "sbsposter1"
|
||||
name = "Best Girl Pip"
|
||||
desc = "A poster of the official NT Best Girl Mascot, Pip"
|
||||
/decl/poster/vore_2
|
||||
/decl/poster/lewd/vore_2
|
||||
icon_state = "sbsposter2"
|
||||
name = "AroButt"
|
||||
desc = "A lewd view of KHI's cutest fops."
|
||||
@@ -18,7 +22,7 @@
|
||||
icon_state = "sbsposter5"
|
||||
name = "The Inn"
|
||||
desc = "A poster of a certain black-eyed shadekin."
|
||||
/decl/poster/vore_6
|
||||
/decl/poster/lewd/vore_6
|
||||
icon_state = "sbsposter6"
|
||||
name = "Mawletta"
|
||||
desc = "The best view in the system."
|
||||
@@ -98,7 +102,7 @@
|
||||
icon_state = "sbsposter16"
|
||||
name = "Borgar"
|
||||
desc = "What do you want from Space McDonalds?"
|
||||
/decl/poster/vore_28
|
||||
/decl/poster/lewd/vore_28
|
||||
icon_state = "sbsposter17"
|
||||
name = "DiveIn"
|
||||
desc = "A limited edition holographic poster that seems to feature subliminal suggestions and conditioning."
|
||||
@@ -389,4 +393,4 @@
|
||||
/decl/poster/vore_101
|
||||
icon_state = "cafejoanposter"
|
||||
name = "Cafe Risu"
|
||||
desc = "A poster depicting a familiar face readying to slurp a big mug of coffee. The face of addiction is not always unpleasant. Sometimes it takes the form of a pretty squirrel partaking of her morning treat..."
|
||||
desc = "A poster depicting a familiar face readying to slurp a big mug of coffee. The face of addiction is not always unpleasant. Sometimes it takes the form of a pretty squirrel partaking of her morning treat..."
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
var/restoration_external = 5
|
||||
var/restoration_internal = 20
|
||||
var/repair_external = FALSE
|
||||
var/mech_repair = 10
|
||||
|
||||
/obj/item/stack/nanopaste/advanced
|
||||
name = "advanced nanopaste"
|
||||
@@ -10,4 +11,5 @@
|
||||
icon = 'icons/obj/stacks_vr.dmi'
|
||||
icon_state = "adv_nanopaste"
|
||||
restoration_external = 10
|
||||
repair_external = TRUE
|
||||
repair_external = TRUE
|
||||
mech_repair = 20
|
||||
@@ -17,7 +17,7 @@
|
||||
center_of_mass = null
|
||||
var/list/datum/stack_recipe/recipes
|
||||
var/singular_name
|
||||
VAR_PROTECTED/amount = 1
|
||||
var/amount = 1
|
||||
var/max_amount //also see stack recipes initialisation, param "max_res_amount" must be equal to this max_amount
|
||||
var/stacktype //determines whether different stack types can merge
|
||||
var/build_type = null //used when directly applied to a turf
|
||||
|
||||
@@ -48,4 +48,23 @@
|
||||
name = "purple tennis ball"
|
||||
desc = "A purple tennis ball. Now you've seen everything. Purple, seriously?"
|
||||
icon_state = "tennis_purple"
|
||||
item_state = "tennis_purple"
|
||||
item_state = "tennis_purple"
|
||||
|
||||
/obj/item/toy/baseball
|
||||
name = "baseball"
|
||||
desc = "A classic baseball; a rubber core surrounded by yarn and covered by faux leather. Getting hit with one is akin to getting punched."
|
||||
icon = 'icons/obj/balls_vr.dmi'
|
||||
icon_state = "baseball"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/righthand_balls_vr.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/lefthand_balls_vr.dmi',
|
||||
slot_wear_mask_str = 'icons/mob/mouthball_vr.dmi',
|
||||
)
|
||||
item_state = "baseball"
|
||||
slot_flags = SLOT_MASK
|
||||
throw_range = 16
|
||||
force = 2.0
|
||||
throwforce = 5.0
|
||||
throw_speed = 5
|
||||
throw_range = 5
|
||||
w_class = ITEMSIZE_SMALL
|
||||
@@ -431,3 +431,44 @@
|
||||
icon_state = "brainzsnaxred"
|
||||
drop_sound = 'sound/items/drop/soda.ogg'
|
||||
pickup_sound = 'sound/items/pickup/soda.ogg'
|
||||
|
||||
//Candy Bars (1-10)
|
||||
/obj/item/trash/candy/cb01
|
||||
name = "\improper Tau Ceti Bar wrapper"
|
||||
icon_state = "cb01"
|
||||
|
||||
/obj/item/trash/candy/cb02
|
||||
name = "\improper Hundred-Thousand Thaler Bar wrapper"
|
||||
icon_state = "cb02"
|
||||
|
||||
/obj/item/trash/candy/cb03
|
||||
name = "\improper Lars' Saltlakris wrapper"
|
||||
icon_state = "cb03"
|
||||
|
||||
/obj/item/trash/candy/cb04
|
||||
name = "\improper Aerostat Bar wrapper"
|
||||
icon_state = "cb04"
|
||||
|
||||
/obj/item/trash/candy/cb05
|
||||
name = "\improper Andromeda Bar wrapper"
|
||||
icon_state = "cb05"
|
||||
|
||||
/obj/item/trash/candy/cb06
|
||||
name = "\improper Mocha Crunch wrapper"
|
||||
icon_state = "cb06"
|
||||
|
||||
/obj/item/trash/candy/cb07
|
||||
name = "\improper TaroMilk Bar wrapper"
|
||||
icon_state = "cb07"
|
||||
|
||||
/obj/item/trash/candy/cb08
|
||||
name = "\improper Cronk Bar wrapper"
|
||||
icon_state = "cb08"
|
||||
|
||||
/obj/item/trash/candy/cb09
|
||||
name = "\improper Kaju Mamma! Bar wrapper"
|
||||
icon_state = "cb09"
|
||||
|
||||
/obj/item/trash/candy/cb10
|
||||
name = "\improper Shantak Bar wrapper"
|
||||
icon_state = "cb10"
|
||||
@@ -0,0 +1,120 @@
|
||||
#define CENTER 1
|
||||
#define SIDE 2
|
||||
|
||||
/obj/item/weapon/picnic_blankets_carried
|
||||
name = "picnic blanket"
|
||||
desc = "A neatly folded picnic blanket!"
|
||||
var/unfolded_desc = "Separates your meal from the dirty floor. Or table."
|
||||
icon = 'icons/obj/picnic_vr.dmi'
|
||||
icon_state = "picnic_carried"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
attack_verb = list("flicked", "whipped", "swooshed")
|
||||
force = 0.5
|
||||
hitsound = 'sound/weapons/towelwhip.ogg'
|
||||
drop_sound = 'sound/items/drop/cloth.ogg'
|
||||
pickup_sound = 'sound/items/pickup/cloth.ogg'
|
||||
|
||||
/obj/item/weapon/picnic_blankets_carried/verb/fold_out()
|
||||
set name = "Fold out"
|
||||
set desc = "Fold out the picnic blanket for use"
|
||||
set category = "Object"
|
||||
var/obj/structure/picnic_blanket_deployed/P = new /obj/structure/picnic_blanket_deployed(usr.loc)
|
||||
P.name = name
|
||||
P.desc = unfolded_desc
|
||||
P.unfold()
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/picnic_blanket_deployed
|
||||
name = "picnic blanket"
|
||||
desc = "Separates your meal from the dirty floor. Or table."
|
||||
var/folded_desc = "A neatly folded picnic blanket!"
|
||||
icon = 'icons/obj/picnic_vr.dmi'
|
||||
icon_state = "picnic_central"
|
||||
var/blanket_type = CENTER
|
||||
layer = HIDING_LAYER - 0.01 //Stuff shouldn't be able to hide under the blanket on the ground
|
||||
var/list/attached_blankets = list()
|
||||
|
||||
/obj/structure/picnic_blanket_deployed/verb/fold_up()
|
||||
set name = "Fold up"
|
||||
set desc = "Folds the blanket up for carrying"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
for(var/obj/structure/picnic_blanket_deployed/side in attached_blankets)
|
||||
qdel(side)
|
||||
var/obj/item/weapon/picnic_blankets_carried/P = new /obj/item/weapon/picnic_blankets_carried(usr.loc)
|
||||
P.name = name
|
||||
P.desc = folded_desc
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/picnic_blanket_deployed/proc/unfold()
|
||||
var/dirs = alldirs
|
||||
var/isTableTop //Controls whether to spawn things across tables, or on ground
|
||||
var/doWeHaveTable //Helper var set to true if ANY obj is a table
|
||||
var/anti_spam = FALSE //Helper var to avoid spamming people if they are mired in trash.
|
||||
for(var/obj/O in get_turf(src)) //Center element determines behaviour
|
||||
if(istype(O, /obj/structure/table))
|
||||
isTableTop = TRUE
|
||||
layer = TABLE_LAYER + 0.01 //We should be just a bit over tables!
|
||||
|
||||
populate_blankets:
|
||||
for(var/dir in dirs)
|
||||
var/turf/T = get_step(get_turf(src), dir)
|
||||
doWeHaveTable = FALSE //Resetting to False each loop
|
||||
if(T.density)
|
||||
continue
|
||||
if(LAZYLEN(T.contents) > 20) //Avoiding potential perf issues by not iterating over large piles of objs
|
||||
if(!anti_spam)
|
||||
to_chat(usr, SPAN_NOTICE("Too many items! Couldn't fully unfold the blanket!"))
|
||||
anti_spam = TRUE
|
||||
continue
|
||||
for(var/obj/O in T)
|
||||
if(O.density) //Cables & Atmos machinery dont bother us.
|
||||
if(isTableTop && istype(O, /obj/structure/table)) //We expand to the table if the center is a table
|
||||
doWeHaveTable = TRUE
|
||||
break
|
||||
else
|
||||
continue populate_blankets
|
||||
if(isTableTop && !doWeHaveTable) //However, if center is a table, we don't expand if we havn't found any.
|
||||
continue //If center is on table, we only allow the rest to appear on tables as well.
|
||||
|
||||
//Actually spawning
|
||||
var/obj/structure/picnic_blanket_deployed/side = new /obj/structure/picnic_blanket_deployed(T)
|
||||
side.verbs -= /obj/structure/picnic_blanket_deployed/verb/fold_up
|
||||
attached_blankets += side
|
||||
side.blanket_type = SIDE
|
||||
side.name = name //Making sure side blankets inherit our vars if they got edited at runtime
|
||||
side.desc = desc
|
||||
side.set_dir(dir)
|
||||
if(isTableTop)
|
||||
side.layer = TABLE_LAYER + 0.01 //We should be just above tables.
|
||||
side.update_icon()
|
||||
|
||||
/obj/structure/picnic_blanket_deployed/update_icon()
|
||||
if(blanket_type == SIDE)
|
||||
icon_state = "picnic_sides" //8 directional icon
|
||||
if(blanket_type == CENTER)
|
||||
icon_state = "picnic_central" //Adding in case anything might call update_icon on center one. Just to be safe
|
||||
. = ..()
|
||||
|
||||
/obj/structure/picnic_blanket_deployed/examine(mob/user)
|
||||
. = ..()
|
||||
if(blanket_type == CENTER)
|
||||
. += SPAN_NOTICE("This is the center of a folded out picnic blanket. You can use this to start packing it up!")
|
||||
if(blanket_type == SIDE)
|
||||
. += SPAN_NOTICE("This is one of the edges. Look for the center to start packing!")
|
||||
|
||||
//For Mapping use only.
|
||||
//If player folds it back up, it reverts to normal type so the Initialize() won't cause issues
|
||||
//Should be added last to any maps made, to ensure it initializes after all other relevant objs.
|
||||
//Set unfoldable to TRUE if want to prevent players from picking it up
|
||||
/obj/structure/picnic_blanket_deployed/for_mapping_use
|
||||
name = "RENAME ME"
|
||||
var/unfoldable = FALSE
|
||||
|
||||
|
||||
/obj/structure/picnic_blanket_deployed/for_mapping_use/Initialize()
|
||||
. = ..()
|
||||
unfold()
|
||||
if(unfoldable)
|
||||
verbs -= /obj/structure/picnic_blanket_deployed/verb/fold_up
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "saddlebag"
|
||||
icon_state = "saddlebag"
|
||||
max_storage_space = INVENTORY_DUFFLEBAG_SPACE //Saddlebags can hold more, like dufflebags
|
||||
slowdown = 1 //And are slower, too...
|
||||
slowdown = 0.5 //And are slower, too...
|
||||
var/taurtype = /datum/sprite_accessory/tail/taur/horse //Acceptable taur type to be wearing this
|
||||
var/no_message = "You aren't the appropriate taur type to wear this!"
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
icon_state = "saddlebag"
|
||||
var/icon_base = "saddlebag"
|
||||
max_storage_space = INVENTORY_DUFFLEBAG_SPACE //Saddlebags can hold more, like dufflebags
|
||||
slowdown = 1 //And are slower, too...
|
||||
slowdown = 0.5 //And are slower, too...
|
||||
var/no_message = "You aren't the appropriate taur type to wear this!"
|
||||
|
||||
/obj/item/weapon/storage/backpack/saddlebag_common/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
|
||||
|
||||
@@ -5,18 +5,26 @@
|
||||
* re-implemented in other classes.
|
||||
*
|
||||
* Contains:
|
||||
* Generic non-item
|
||||
* Trash Bag
|
||||
* Plastic Bag
|
||||
* Mining Satchel
|
||||
* Plant Bag
|
||||
* Sheet Snatcher
|
||||
* Sheet Snatcher (Cyborg)
|
||||
* Cash Bag
|
||||
* Chemistry Bag
|
||||
Food Bag
|
||||
|
||||
* Food Bag
|
||||
* Food Bag (Service Hound)
|
||||
* Evidence Bag
|
||||
*
|
||||
* -Sayu
|
||||
*/
|
||||
|
||||
// Generic non-item
|
||||
|
||||
// -----------------------------
|
||||
// Generic non-item
|
||||
// -----------------------------
|
||||
/obj/item/weapon/storage/bag
|
||||
allow_quick_gather = 1
|
||||
allow_quick_empty = 1
|
||||
@@ -67,7 +75,6 @@
|
||||
// -----------------------------
|
||||
// Plastic Bag
|
||||
// -----------------------------
|
||||
|
||||
/obj/item/weapon/storage/bag/plasticbag
|
||||
name = "plastic bag"
|
||||
desc = "It's a very flimsy, very noisy alternative to a bag."
|
||||
@@ -85,9 +92,9 @@
|
||||
// Mining Satchel
|
||||
// -----------------------------
|
||||
/*
|
||||
* Mechoid - Orebags are the most common quick-gathering thing, and also have tons of lag associated with it. Their checks are going to be hyper-simplified due to this, and their INCREDIBLY singular target contents.
|
||||
* Mechoid - Orebags are the most common quick-gathering thing, and also have tons of lag associated with it.
|
||||
* Their checks are going to be hyper-simplified due to this, and their INCREDIBLY singular target contents.
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/bag/ore
|
||||
name = "mining satchel"
|
||||
desc = "This little bugger can be used to store and transport ores."
|
||||
@@ -239,25 +246,14 @@
|
||||
/obj/item/weapon/storage/bag/ore/open(mob/user as mob) //No opening it for the weird UI of having shit-tons of ore inside it.
|
||||
user.examinate(src)
|
||||
|
||||
/*
|
||||
/obj/item/weapon/storage/bag/ore/proc/update_ore_count() //Stolen from ore boxes. OLD way of storing ore.
|
||||
|
||||
stored_ore = list()
|
||||
|
||||
for(var/obj/item/weapon/ore/O in contents)
|
||||
if(stored_ore[O.name])
|
||||
stored_ore[O.name]++
|
||||
else
|
||||
stored_ore[O.name] = 1
|
||||
*/
|
||||
// -----------------------------
|
||||
// Plant bag
|
||||
// -----------------------------
|
||||
|
||||
/obj/item/weapon/storage/bag/plants
|
||||
name = "plant bag"
|
||||
icon = 'icons/obj/hydroponics_machines.dmi'
|
||||
icon = 'icons/obj/hydroponics_machines_vr.dmi'
|
||||
icon_state = "plantbag"
|
||||
desc = "A sturdy bag used to transport fresh produce with ease."
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 25
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
@@ -265,8 +261,9 @@
|
||||
|
||||
/obj/item/weapon/storage/bag/plants/large
|
||||
name = "large plant bag"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 45
|
||||
icon_state = "large_plantbag"
|
||||
desc = "A large and sturdy bag used to transport fresh produce with ease."
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 50
|
||||
|
||||
// -----------------------------
|
||||
// Sheet Snatcher
|
||||
@@ -400,24 +397,9 @@
|
||||
|
||||
/obj/item/weapon/storage/bag/sheetsnatcher/borg
|
||||
name = "sheet snatcher 9000"
|
||||
desc = ""
|
||||
desc = null
|
||||
capacity = 500//Borgs get more because >specialization
|
||||
|
||||
// -----------------------------
|
||||
// Food Bag (Service Hound)
|
||||
// -----------------------------
|
||||
/obj/item/weapon/storage/bag/dogborg
|
||||
name = "dog bag"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "foodbag"
|
||||
desc = "A bag for storing things of all kinds."
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 25
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks,/obj/item/weapon/reagent_containers/food/condiment,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/coin,/obj/item/weapon/spacecash,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown,/obj/item/weapon/reagent_containers/pill)
|
||||
|
||||
// -----------------------------
|
||||
// Cash Bag
|
||||
// -----------------------------
|
||||
@@ -432,12 +414,12 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/weapon/coin,/obj/item/weapon/spacecash,/obj/item/weapon/spacecasinocash)
|
||||
|
||||
// -----------------------------
|
||||
// Chemistry Bag
|
||||
// -----------------------------
|
||||
// -----------------------------
|
||||
// Chemistry Bag
|
||||
// -----------------------------
|
||||
/obj/item/weapon/storage/bag/chemistry
|
||||
name = "chemistry bag"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon_state = "chembag"
|
||||
desc = "A bag for storing pills, patches, and bottles."
|
||||
max_storage_space = 200
|
||||
@@ -445,12 +427,38 @@
|
||||
slowdown = 3
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle)
|
||||
|
||||
// -----------------------------
|
||||
// Food Bag
|
||||
// -----------------------------
|
||||
// -----------------------------
|
||||
// Xeno Bag
|
||||
// -----------------------------
|
||||
/obj/item/weapon/storage/bag/xeno
|
||||
name = "xenobiology bag"
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon_state = "xenobag"
|
||||
desc = "A bag for storing various slime products."
|
||||
max_storage_space = ITEMSIZE_COST_SMALL * 12
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/slime_extract,/obj/item/slimepotion, /obj/item/weapon/reagent_containers/food/snacks/monkeycube)
|
||||
|
||||
// -----------------------------
|
||||
// Virology Bag
|
||||
// -----------------------------
|
||||
/obj/item/weapon/storage/bag/virology
|
||||
name = "virology bag"
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon_state = "biobag"
|
||||
desc = "A bag for storing various biological products."
|
||||
max_storage_space = ITEMSIZE_COST_SMALL * 12
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial/,/obj/item/weapon/virusdish/)
|
||||
|
||||
// -----------------------------
|
||||
// Food Bag
|
||||
// -----------------------------
|
||||
/obj/item/weapon/storage/bag/food
|
||||
name = "food bag"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon_state = "foodbag"
|
||||
desc = "A bag for storing foods of all kinds."
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 25
|
||||
@@ -458,16 +466,30 @@
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks,/obj/item/weapon/reagent_containers/food/condiment)
|
||||
|
||||
// -----------------------------
|
||||
// Evidence Bag
|
||||
// -----------------------------
|
||||
// -----------------------------
|
||||
// Food Bag (Service Hound)
|
||||
// -----------------------------
|
||||
/obj/item/weapon/storage/bag/dogborg
|
||||
name = "dog bag"
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon_state = "foodbag"
|
||||
desc = "An intergrated bag for storing things of all kinds."
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 25
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks,/obj/item/weapon/reagent_containers/food/condiment,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/coin,/obj/item/weapon/spacecash,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown,/obj/item/weapon/reagent_containers/pill)
|
||||
|
||||
// -----------------------------
|
||||
// Evidence Bag
|
||||
// -----------------------------
|
||||
/obj/item/weapon/storage/bag/detective
|
||||
name = "secure satchel"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon = 'icons/obj/storage_vr.dmi'
|
||||
icon_state = "detbag"
|
||||
desc = "A bag for storing investigation things. You know, securely."
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 15
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(/obj/item/weapon/forensics/swab,/obj/item/weapon/sample/print,/obj/item/weapon/sample/fibers,/obj/item/weapon/evidencebag)
|
||||
|
||||
can_hold = list(/obj/item/weapon/forensics/swab,/obj/item/weapon/sample/print,/obj/item/weapon/sample/fibers,/obj/item/weapon/evidencebag)
|
||||
@@ -1,15 +1,2 @@
|
||||
/obj/item/weapon/storage/bag/chemistry
|
||||
slot_flags = null
|
||||
|
||||
/obj/item/weapon/storage/bag/xeno
|
||||
name = "xenobiology bag"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "chembag"
|
||||
max_storage_space = ITEMSIZE_COST_SMALL * 12
|
||||
max_w_class = ITEMSIZE_NORMAL
|
||||
w_class = ITEMSIZE_SMALL
|
||||
can_hold = list(
|
||||
/obj/item/slime_extract,
|
||||
/obj/item/slimepotion,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/monkeycube
|
||||
)
|
||||
@@ -151,4 +151,27 @@
|
||||
/obj/item/weapon/storage/excavation,
|
||||
/obj/item/weapon/anobattery,
|
||||
/obj/item/weapon/pickaxe
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/hydro
|
||||
name = "hydroponics belt"
|
||||
desc = "A belt used to hold most hydroponics supplies. Suprisingly, not green."
|
||||
icon = 'icons/inventory/belt/item_vr.dmi'
|
||||
icon_state = "plantbelt"
|
||||
item_state = "plantbelt"
|
||||
storage_slots = 5
|
||||
max_w_class = ITEMSIZE_LARGE
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 5
|
||||
can_hold = list(
|
||||
/obj/item/device/analyzer/plant_analyzer,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle,
|
||||
/obj/item/weapon/shovel/spade,
|
||||
/obj/item/weapon/tool/wirecutters,
|
||||
/obj/item/weapon/material/minihoe,
|
||||
/obj/item/weapon/material/knife/machete/hatchet,
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone,
|
||||
/obj/item/weapon/plantspray,
|
||||
/obj/item/weapon/gun/energy/floragun,
|
||||
/obj/item/seeds
|
||||
)
|
||||
@@ -79,6 +79,8 @@
|
||||
/obj/item/weapon/storage/fancy/egg_box/open(mob/user as mob)
|
||||
if(open)
|
||||
return
|
||||
if (isobserver(usr))
|
||||
return
|
||||
open = TRUE
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
var/hitcost = 240
|
||||
var/use_external_power = FALSE //only used to determine if it's a cyborg baton
|
||||
var/grip_safety = TRUE
|
||||
var/taped_safety = FALSE
|
||||
|
||||
/obj/item/weapon/melee/baton/New()
|
||||
..()
|
||||
@@ -100,7 +101,7 @@
|
||||
|
||||
/obj/item/weapon/melee/baton/dropped()
|
||||
..()
|
||||
if(status && grip_safety)
|
||||
if(status && grip_safety && !taped_safety)
|
||||
status = 0
|
||||
visible_message("<span class='warning'>\The [src]'s grip safety engages!</span>")
|
||||
update_icon()
|
||||
@@ -109,6 +110,8 @@
|
||||
. = ..()
|
||||
|
||||
if(Adjacent(user))
|
||||
if(taped_safety)
|
||||
. += "<span class='warning'>Someone has wrapped tape around the grip!</span>"
|
||||
if(bcell)
|
||||
. += "<span class='notice'>The baton is [round(bcell.percent())]% charged.</span>"
|
||||
if(!bcell)
|
||||
@@ -129,6 +132,17 @@
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>This cell is not fitted for [src].</span>")
|
||||
if(istype(W, /obj/item/weapon/tape_roll) || istype(W, /obj/item/taperoll))
|
||||
if(grip_safety && !taped_safety) //no point letting people wrap tape around the grips of batons without a safety
|
||||
to_chat(user, "<span class='notice'>You firmly wrap tape around the baton's grip, disabling the safety system.</span>")
|
||||
playsound(src, 'sound/effects/tape.ogg',25)
|
||||
taped_safety = TRUE
|
||||
else if(grip_safety && taped_safety)
|
||||
to_chat(user, "<span class='notice'>The grip safety has already been taped down.</span>")
|
||||
if(istype(W, /obj/item/weapon/tool/screwdriver))
|
||||
if(taped_safety)
|
||||
to_chat(user, "<span class='notice'>You painstakingly scrape away the tape over the grip safety.</span>")
|
||||
taped_safety = FALSE
|
||||
|
||||
/obj/item/weapon/melee/baton/attack_hand(mob/user as mob)
|
||||
if(user.get_inactive_hand() == src)
|
||||
|
||||
@@ -1,18 +1,22 @@
|
||||
/* Surgery Tools
|
||||
* Contains:
|
||||
* Bio-Regenerator
|
||||
* Retractor
|
||||
* Hemostat
|
||||
* Cautery
|
||||
* Surgical Drill
|
||||
* Scalpel
|
||||
* Circular Saw
|
||||
* Bio-Regenerator
|
||||
* Researchable Scalpels
|
||||
* Circular Saws
|
||||
* Misc Tools
|
||||
* Cyborg Tools
|
||||
* Alien Tools
|
||||
*/
|
||||
|
||||
/obj/item/weapon/surgical
|
||||
name = "Surgical tool"
|
||||
desc = "This shouldn't be here, ahelp it."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon = 'icons/obj/surgery_vr.dmi'
|
||||
w_class = ITEMSIZE_SMALL
|
||||
drop_sound = 'sound/items/drop/weldingtool.ogg'
|
||||
pickup_sound = 'sound/items/pickup/weldingtool.ogg'
|
||||
@@ -29,7 +33,6 @@
|
||||
/obj/item/weapon/surgical/bioregen
|
||||
name="bioregenerator"
|
||||
desc="A special tool used in surgeries which can pull toxins from and restore oxygen to organic tissue as well as recreate missing biological structures to allow otherwise irreperable flesh to be mended."
|
||||
icon='icons/obj/surgery_vr.dmi'
|
||||
icon_state="bioregen"
|
||||
drop_sound = 'sound/items/drop/scrap.ogg'
|
||||
|
||||
@@ -110,27 +113,27 @@
|
||||
/obj/item/weapon/surgical/scalpel/laser1
|
||||
name = "laser scalpel"
|
||||
desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
|
||||
icon_state = "scalpel_laser1_on"
|
||||
icon_state = "scalpel_laser1"
|
||||
damtype = "fire"
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/laser2
|
||||
name = "laser scalpel"
|
||||
desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
|
||||
icon_state = "scalpel_laser2_on"
|
||||
icon_state = "scalpel_laser2"
|
||||
damtype = "fire"
|
||||
force = 12.0
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/laser3
|
||||
name = "laser scalpel"
|
||||
desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
|
||||
icon_state = "scalpel_laser3_on"
|
||||
icon_state = "scalpel_laser3"
|
||||
damtype = "fire"
|
||||
force = 15.0
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/manager
|
||||
name = "incision management system"
|
||||
desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
|
||||
icon_state = "scalpel_manager_on"
|
||||
icon_state = "scalpel_manager"
|
||||
force = 7.5
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/ripper
|
||||
@@ -143,12 +146,12 @@
|
||||
origin_tech = list(TECH_MATERIAL = 5, TECH_BIO = 3, TECH_ILLEGAL = 2)
|
||||
|
||||
/*
|
||||
* Circular Saw
|
||||
* Circular Saws
|
||||
*/
|
||||
/obj/item/weapon/surgical/circular_saw
|
||||
name = "circular saw"
|
||||
desc = "For heavy duty cutting."
|
||||
icon_state = "saw3"
|
||||
icon_state = "saw"
|
||||
hitsound = 'sound/weapons/circsawhit.ogg'
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
force = 15.0
|
||||
@@ -169,13 +172,15 @@
|
||||
item_state = "saw3"
|
||||
hitsound = 'sound/weapons/emitter2.ogg'
|
||||
damtype = SEARING
|
||||
w_class = ITEMSIZE_LARGE
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
origin_tech = list(TECH_BIO = 4, TECH_MATERIAL = 6, TECH_MAGNET = 6)
|
||||
matter = list(MAT_STEEL = 12500)
|
||||
matter = list(MAT_STEEL = 25000,MAT_GLASS = 20000)
|
||||
attack_verb = list("attacked", "slashed", "seared", "cut")
|
||||
toolspeed = 0.75
|
||||
|
||||
//misc, formerly from code/defines/weapons.dm
|
||||
/*
|
||||
* Misc Tools
|
||||
*/
|
||||
/obj/item/weapon/surgical/bonegel
|
||||
name = "bone gel"
|
||||
desc = "For fixing bones."
|
||||
@@ -192,7 +197,7 @@
|
||||
throwforce = 1.0
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 3)
|
||||
var/usage_amount = 10
|
||||
drop_sound = 'sound/items/drop/accessory.ogg'
|
||||
drop_sound = 'sound/items/drop/bottle.ogg'
|
||||
|
||||
/obj/item/weapon/surgical/bonesetter
|
||||
name = "bone setter"
|
||||
@@ -215,24 +220,31 @@
|
||||
throw_range = 5
|
||||
attack_verb = list("attacked", "hit", "bludgeoned")
|
||||
|
||||
// Cyborg Tools
|
||||
|
||||
/*
|
||||
* Cyborg Tools
|
||||
*/
|
||||
/obj/item/weapon/surgical/retractor/cyborg
|
||||
icon_state = "cyborg_retractor"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/hemostat/cyborg
|
||||
icon_state = "cyborg_hemostat"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/cautery/cyborg
|
||||
icon_state = "cyborg_cautery"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/surgicaldrill/cyborg
|
||||
icon_state = "cyborg_drill"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/cyborg
|
||||
icon_state = "cyborg_scalpel"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/circular_saw/cyborg
|
||||
icon_state = "cyborg_saw"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/bonegel/cyborg
|
||||
@@ -242,13 +254,16 @@
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/bonesetter/cyborg
|
||||
icon_state = "cyborg_setter"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/bioregen/cyborg //VoreStation edit: let the borgs S U C C
|
||||
icon_state = "cyborg_bioregen"
|
||||
toolspeed = 0.5
|
||||
|
||||
|
||||
// Alien Tools
|
||||
/*
|
||||
* Alien Tools
|
||||
*/
|
||||
/obj/item/weapon/surgical/retractor/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
@@ -104,6 +104,16 @@
|
||||
. = ..()
|
||||
air_contents.adjust_gas("oxygen", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
|
||||
/obj/item/weapon/tank/jetpack/breaker
|
||||
name = "CSC industrial jetpack"
|
||||
desc = "A JetFast EVA thruster pack. A warning label clearly states \'WARNING: CONTAINS VOLATILE REACTION MASS TOXIC TO MOST LIFEFORMS. NOT TO BE USED WITH CLOSED CYCLE BREATHING SYSTEMS.\'"
|
||||
icon_state = "jetpack-breaker"
|
||||
item_state_slots = list(slot_r_hand_str = "jetpack", slot_l_hand_str = "jetpack")
|
||||
|
||||
/obj/item/weapon/tank/jetpack/breaker/Initialize()
|
||||
. = ..()
|
||||
air_contents.adjust_gas("volatile_fuel", (6*ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C))
|
||||
|
||||
/obj/item/weapon/tank/jetpack/carbondioxide
|
||||
name = "jetpack (carbon dioxide)"
|
||||
desc = "A tank of compressed carbon dioxide for use as propulsion in zero-gravity areas. Painted black to indicate that it should not be used as a source for internals."
|
||||
|
||||
@@ -111,6 +111,7 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(2);/obj/item/toy/tennis/cyan,
|
||||
prob(2);/obj/item/toy/tennis/blue,
|
||||
prob(2);/obj/item/toy/tennis/purple,
|
||||
prob(1);/obj/item/toy/baseball,
|
||||
prob(1);/obj/item/pizzavoucher
|
||||
/* VOREStation Edit End */
|
||||
)
|
||||
|
||||
@@ -156,5 +156,6 @@
|
||||
prob(2);/obj/item/toy/tennis/blue,
|
||||
prob(2);/obj/item/toy/tennis/purple,
|
||||
prob(2);/obj/item/clothing/ears/earmuffs,
|
||||
prob(2);/obj/item/clothing/ears/earmuffs/headphones
|
||||
prob(2);/obj/item/clothing/ears/earmuffs/headphones,
|
||||
prob(2);/obj/item/toy/baseball
|
||||
)
|
||||
@@ -276,6 +276,7 @@
|
||||
/obj/random/cash/item_to_spawn()
|
||||
return pick(prob(320);/obj/random/maintenance/clean,
|
||||
prob(12);/obj/item/weapon/spacecash/c1,
|
||||
prob(10);/obj/item/weapon/spacecash/c5,
|
||||
prob(8);/obj/item/weapon/spacecash/c10,
|
||||
prob(4);/obj/item/weapon/spacecash/c20,
|
||||
prob(1);/obj/item/weapon/spacecash/c50,
|
||||
|
||||
@@ -39,6 +39,14 @@
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/device/radio/headset/headset_qm, //VOREStation Edit,
|
||||
/obj/item/device/radio/headset/headset_qm/alt, //VOREStation Edit,
|
||||
/obj/item/clothing/under/rank/neo_qm,
|
||||
/obj/item/clothing/under/rank/neo_qm_skirt,
|
||||
/obj/item/clothing/under/rank/neo_qm_jacket,
|
||||
/obj/item/clothing/under/rank/neo_qm_white,
|
||||
/obj/item/clothing/under/rank/neo_qm_white_skirt,
|
||||
/obj/item/clothing/under/rank/neo_qm_turtle,
|
||||
/obj/item/clothing/under/rank/neo_qm_turtle_skirt,
|
||||
/obj/item/clothing/under/rank/neo_qm_gorka,
|
||||
/obj/item/clothing/gloves/black,
|
||||
/obj/item/clothing/gloves/fingerless,
|
||||
/obj/item/weapon/tank/emergency/oxygen,
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
///obj/item/clamp, //VOREStation Removal: without leaks those are pointless,
|
||||
/obj/item/clothing/under/rank/chief_engineer,
|
||||
/obj/item/clothing/under/rank/chief_engineer/skirt,
|
||||
/obj/item/clothing/under/rank/neo_chiefengi,
|
||||
/obj/item/clothing/under/rank/neo_chiefengi_skirt,
|
||||
/obj/item/clothing/under/rank/neo_ce_gorka,
|
||||
/obj/item/clothing/head/hardhat/white,
|
||||
///obj/item/clothing/head/welding, //VOREStation Removal: Locker bloat, grr. They get fancy goggles or can raid the welding supplies locker for one of these.
|
||||
/obj/item/clothing/gloves/heavy_engineer, //VOREStation Edit: chief gets the good shit
|
||||
|
||||
@@ -10,13 +10,15 @@
|
||||
/obj/item/device/analyzer/plant_analyzer,
|
||||
/obj/item/device/radio/headset/headset_service,
|
||||
/obj/item/clothing/head/greenbandana,
|
||||
/obj/item/weapon/shovel/spade,
|
||||
/obj/item/weapon/material/minihoe,
|
||||
/obj/item/weapon/material/knife/machete/hatchet,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker = 2,
|
||||
/obj/item/weapon/tool/wirecutters/clippers/trimmers,
|
||||
/obj/item/weapon/reagent_containers/spray/plantbgone,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/hydro,
|
||||
/obj/item/clothing/shoes/boots/winter/hydro)
|
||||
/obj/item/clothing/shoes/boots/winter/hydro,
|
||||
/obj/item/weapon/storage/belt/hydro)
|
||||
|
||||
/obj/structure/closet/secure_closet/hydroponics/Initialize()
|
||||
if(prob(50))
|
||||
|
||||
@@ -136,6 +136,11 @@
|
||||
/obj/item/weapon/cartridge/cmo,
|
||||
/obj/item/clothing/gloves/sterile/latex,
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/clothing/under/rank/neo_cmo,
|
||||
/obj/item/clothing/under/rank/neo_cmo_skirt,
|
||||
/obj/item/clothing/under/rank/neo_cmo_turtle,
|
||||
/obj/item/clothing/under/rank/neo_cmo_turtle_skirt,
|
||||
/obj/item/clothing/under/rank/neo_cmo_gorka,
|
||||
/obj/item/device/radio/headset/heads/cmo,
|
||||
/obj/item/device/radio/headset/heads/cmo/alt,
|
||||
/obj/item/device/flash,
|
||||
|
||||
@@ -35,6 +35,11 @@
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/rd,
|
||||
/obj/item/clothing/under/rank/neo_rd_turtle,
|
||||
/obj/item/clothing/under/rank/neo_rd_turtle_skirt,
|
||||
/obj/item/clothing/under/rank/neo_rd_suit,
|
||||
/obj/item/clothing/under/rank/neo_rd_suit_skirt,
|
||||
/obj/item/clothing/under/rank/neo_rd_gorka,
|
||||
/obj/item/weapon/cartridge/rd,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/shoes/laceup/brown,
|
||||
|
||||
@@ -49,6 +49,15 @@
|
||||
/obj/item/clothing/under/lawyer/red,
|
||||
/obj/item/clothing/under/lawyer/red/skirt,
|
||||
/obj/item/clothing/under/lawyer/oldman,
|
||||
/obj/item/clothing/under/rank/neo_hop,
|
||||
/obj/item/clothing/under/rank/neo_hop_skirt,
|
||||
/obj/item/clothing/under/rank/neo_hop_parade_masc,
|
||||
/obj/item/clothing/under/rank/neo_hop_parade_fem,
|
||||
/obj/item/clothing/under/rank/neo_hop_turtle,
|
||||
/obj/item/clothing/under/rank/neo_hop_turtle_skirt,
|
||||
/obj/item/clothing/under/rank/neo_cmd_gorka,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_hopformal,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep,
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/clothing/shoes/black,
|
||||
/obj/item/clothing/shoes/laceup,
|
||||
@@ -133,6 +142,13 @@
|
||||
/obj/item/clothing/head/helmet/dermal,
|
||||
/obj/item/clothing/head/helmet/warden,
|
||||
/obj/item/clothing/head/helmet/warden/hat,
|
||||
/obj/item/clothing/under/rank/neo_warden_red,
|
||||
/obj/item/clothing/under/rank/neo_warden_red_skirt,
|
||||
/obj/item/clothing/under/rank/neo_warden_blue,
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/neo_armsco_trench,
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/neo_bluewarden,
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/neo_warden_heavy,
|
||||
/obj/item/clothing/under/rank/neo_sec_gorka,
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/device/radio/headset/headset_sec,
|
||||
/obj/item/device/radio/headset/headset_sec/alt,
|
||||
|
||||
@@ -13,6 +13,22 @@
|
||||
/obj/item/clothing/suit/storage/vest/hoscoat/jensen/alt,
|
||||
/obj/item/clothing/suit/storage/vest/hoscoat/jensen,
|
||||
/obj/item/clothing/suit/storage/vest/hoscoat,
|
||||
/obj/item/clothing/under/rank/neo_hos_red,
|
||||
/obj/item/clothing/under/rank/neo_hos_red_skirt,
|
||||
/obj/item/clothing/under/rank/neo_hos_blackred,
|
||||
/obj/item/clothing/under/rank/neo_hos_blackred_skirt,
|
||||
/obj/item/clothing/under/rank/neo_hos_parade,
|
||||
/obj/item/clothing/under/rank/neo_hos_parade_fem,
|
||||
/obj/item/clothing/under/rank/neo_hos_blue,
|
||||
/obj/item/clothing/under/rank/neo_hos_blackblue,
|
||||
/obj/item/clothing/under/rank/neo_hos_blackblue_skirt,
|
||||
/obj/item/clothing/under/rank/neo_hos_parade_blue,
|
||||
/obj/item/clothing/under/rank/neo_hos_parade_blue_fem,
|
||||
/obj/item/clothing/under/rank/neo_hos_gorka,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_hos_parade,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_hosformal_blue,
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/neo_armsco_trench,
|
||||
/obj/item/clothing/head/helmet/HoS/hat/blue,
|
||||
/obj/item/clothing/head/helmet/dermal,
|
||||
/obj/item/device/radio/headset/heads/hos,
|
||||
/obj/item/device/radio/headset/heads/hos/alt,
|
||||
|
||||
@@ -476,6 +476,12 @@
|
||||
/obj/item/clothing/head/caphat/beret,
|
||||
/obj/item/clothing/under/rank/captain,
|
||||
/obj/item/clothing/under/dress/dress_cap/femformal,
|
||||
/obj/item/clothing/under/rank/neo_captain_parade,
|
||||
/obj/item/clothing/under/rank/neo_captain_skirt,
|
||||
/obj/item/clothing/under/rank/neo_captain,
|
||||
/obj/item/clothing/under/rank/neo_captain_kilt,
|
||||
/obj/item/clothing/under/rank/neo_captain_blacksuit,
|
||||
/obj/item/clothing/under/rank/neo_commandutil,
|
||||
/obj/item/clothing/shoes/brown,
|
||||
/obj/item/clothing/gloves/captain,
|
||||
/obj/item/clothing/under/dress/dress_cap,
|
||||
|
||||
@@ -190,6 +190,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
/obj/item/clothing/under/harness,
|
||||
/obj/item/clothing/accessory/storage/webbing,
|
||||
/obj/item/weapon/spacecash/c1,
|
||||
/obj/item/weapon/spacecash/c5,
|
||||
/obj/item/weapon/spacecash/c10,
|
||||
/obj/item/weapon/spacecash/c20,
|
||||
/obj/item/weapon/camera_assembly,
|
||||
|
||||
@@ -243,6 +243,7 @@
|
||||
prob(2);/obj/item/toy/tennis/cyan,
|
||||
prob(2);/obj/item/toy/tennis/blue,
|
||||
prob(2);/obj/item/toy/tennis/purple,
|
||||
prob(1);/obj/item/toy/baseball,
|
||||
prob(1);/obj/item/weapon/storage/box/brainzsnax,
|
||||
prob(1);/obj/item/weapon/storage/box/brainzsnax/red,
|
||||
prob(1);/obj/item/clothing/glasses/sunglasses,
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
// This uses strings and not refs to allow for disguises, and to avoid needing to use weakrefs.
|
||||
var/destructive = FALSE // Will target 'neutral' structures/objects and not just 'hostile' ones.
|
||||
|
||||
var/forgive_resting = TRUE //VOREStation add - If TRUE on a RETALIATE mob, then mob will drop target if it becomes hostile to you but hasn't taken damage
|
||||
|
||||
// A lot of this is based off of /TG/'s AI code.
|
||||
|
||||
// Step 1, find out what we can see.
|
||||
@@ -140,6 +142,14 @@
|
||||
//VOREStation Add End
|
||||
else
|
||||
return FALSE
|
||||
//VOREStation add start
|
||||
else if(forgive_resting && !isbelly(holder.loc)) //Doing it this way so we only think about the other conditions if the var is actually set
|
||||
if((holder.health == holder.maxHealth) && !hostile && (L.resting || L.weakened || L.stunned)) //If our health is full, no one is fighting us, we can forgive
|
||||
var/mob/living/simple_mob/vore/eater = holder
|
||||
if(!eater.will_eat(L)) //We forgive people we can eat by eating them
|
||||
set_stance(STANCE_IDLE)
|
||||
return FALSE //Forgiven
|
||||
//VOREStation add end
|
||||
if(holder.IIsAlly(L))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
S["tgui_fancy"] >> pref.tgui_fancy
|
||||
S["tgui_lock"] >> pref.tgui_lock
|
||||
S["tgui_input_mode"] >> pref.tgui_input_mode
|
||||
S["tgui_input_lock"] >> pref.tgui_input_lock
|
||||
S["tgui_large_buttons"] >> pref.tgui_large_buttons
|
||||
S["tgui_swapped_buttons"] >> pref.tgui_swapped_buttons
|
||||
|
||||
@@ -29,6 +30,7 @@
|
||||
S["tgui_fancy"] << pref.tgui_fancy
|
||||
S["tgui_lock"] << pref.tgui_lock
|
||||
S["tgui_input_mode"] << pref.tgui_input_mode
|
||||
S["tgui_input_lock"] << pref.tgui_input_lock
|
||||
S["tgui_large_buttons"] << pref.tgui_large_buttons
|
||||
S["tgui_swapped_buttons"] << pref.tgui_swapped_buttons
|
||||
|
||||
@@ -44,6 +46,7 @@
|
||||
pref.tgui_fancy = sanitize_integer(pref.tgui_fancy, 0, 1, initial(pref.tgui_fancy))
|
||||
pref.tgui_lock = sanitize_integer(pref.tgui_lock, 0, 1, initial(pref.tgui_lock))
|
||||
pref.tgui_input_mode = sanitize_integer(pref.tgui_input_mode, 0, 1, initial(pref.tgui_input_mode))
|
||||
pref.tgui_input_lock = sanitize_integer(pref.tgui_input_lock, 0, 1, initial(pref.tgui_input_lock))
|
||||
pref.tgui_large_buttons = sanitize_integer(pref.tgui_large_buttons, 0, 1, initial(pref.tgui_large_buttons))
|
||||
pref.tgui_swapped_buttons = sanitize_integer(pref.tgui_swapped_buttons, 0, 1, initial(pref.tgui_swapped_buttons))
|
||||
|
||||
@@ -56,9 +59,10 @@
|
||||
. += "<b>Client FPS:</b> <a href='?src=\ref[src];select_client_fps=1'><b>[pref.client_fps]</b></a><br>"
|
||||
. += "<b>Random Ambience Frequency:</b> <a href='?src=\ref[src];select_ambience_freq=1'><b>[pref.ambience_freq]</b></a><br>"
|
||||
. += "<b>Ambience Chance:</b> <a href='?src=\ref[src];select_ambience_chance=1'><b>[pref.ambience_chance]</b></a><br>"
|
||||
. += "<b>tgui Window Mode:</b> <a href='?src=\ref[src];tgui_fancy=1'><b>[(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]</b></a><br>"
|
||||
. += "<b>tgui Window Placement:</b> <a href='?src=\ref[src];tgui_lock=1'><b>[(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]</b></a><br>"
|
||||
. += "<b>TGUI Window Mode:</b> <a href='?src=\ref[src];tgui_fancy=1'><b>[(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]</b></a><br>"
|
||||
. += "<b>TGUI Window Placement:</b> <a href='?src=\ref[src];tgui_lock=1'><b>[(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]</b></a><br>"
|
||||
. += "<b>TGUI Input Framework:</b> <a href='?src=\ref[src];tgui_input_mode=1'><b>[(pref.tgui_input_mode) ? "Enabled" : "Disabled (default)"]</b></a><br>"
|
||||
. += "<b>TGUI Input Lock:</b> <a href='?src=\ref[src];tgui_input_lock=1'><b>[(pref.tgui_input_lock) ? "Enabled" : "Disabled (default)"]</b></a><br>"
|
||||
. += "<b>TGUI Large Buttons:</b> <a href='?src=\ref[src];tgui_large_buttons=1'><b>[(pref.tgui_large_buttons) ? "Enabled (default)" : "Disabled"]</b></a><br>"
|
||||
. += "<b>TGUI Swapped Buttons:</b> <a href='?src=\ref[src];tgui_swapped_buttons=1'><b>[(pref.tgui_swapped_buttons) ? "Enabled" : "Disabled (default)"]</b></a><br>"
|
||||
if(can_select_ooc_color(user))
|
||||
@@ -107,14 +111,14 @@
|
||||
if(pref.client)
|
||||
pref.client.fps = fps_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
|
||||
else if(href_list["select_ambience_freq"])
|
||||
var/ambience_new = tgui_input_number(user, "Input how often you wish to hear ambience repeated! (1-60 MINUTES, 0 for disabled)", "Global Preference", pref.ambience_freq, 60, 0)
|
||||
if(isnull(ambience_new) || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
if(ambience_new < 0 || ambience_new > 60) return TOPIC_NOACTION
|
||||
pref.ambience_freq = ambience_new
|
||||
return TOPIC_REFRESH
|
||||
|
||||
|
||||
else if(href_list["select_ambience_chance"])
|
||||
var/ambience_chance_new = tgui_input_number(user, "Input the chance you'd like to hear ambience played to you (On area change, or by random ambience). 35 means a 35% chance to play ambience. This is a range from 0-100. 0 disables ambience playing entirely. This is also affected by Ambience Frequency.", "Global Preference", pref.ambience_freq, 100, 0)
|
||||
if(isnull(ambience_chance_new) || !CanUseTopic(user)) return TOPIC_NOACTION
|
||||
@@ -125,7 +129,7 @@
|
||||
else if(href_list["tgui_fancy"])
|
||||
pref.tgui_fancy = !pref.tgui_fancy
|
||||
return TOPIC_REFRESH
|
||||
|
||||
|
||||
else if(href_list["tgui_lock"])
|
||||
pref.tgui_lock = !pref.tgui_lock
|
||||
return TOPIC_REFRESH
|
||||
@@ -134,6 +138,10 @@
|
||||
pref.tgui_input_mode = !pref.tgui_input_mode
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["tgui_input_lock"])
|
||||
pref.tgui_input_lock = !pref.tgui_input_lock
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["tgui_large_buttons"])
|
||||
pref.tgui_large_buttons = !pref.tgui_large_buttons
|
||||
return TOPIC_REFRESH
|
||||
|
||||
@@ -501,6 +501,12 @@
|
||||
ckeywhitelist = list("hunterbirk")
|
||||
character_name = list("Amaryll")
|
||||
|
||||
/datum/gear/fluff/aria_conduct_medal
|
||||
path = /obj/item/clothing/accessory/medal/conduct
|
||||
display_name = "Aria's Distinguished Conduct Medal"
|
||||
ckeywhitelist = list("hunterbirk")
|
||||
character_name = list("Aria Blue")
|
||||
|
||||
// I CKEYS
|
||||
/datum/gear/fluff/ruda_badge
|
||||
path = /obj/item/clothing/accessory/badge/holo/detective/ruda
|
||||
@@ -877,13 +883,13 @@
|
||||
path = /obj/item/clothing/under/fluff/foxoflightsuit/
|
||||
display_name = "padded flightsuit"
|
||||
ckeywhitelist = list("pandora029")
|
||||
character_name = list("Seona Young")
|
||||
character_name = list("Shona Young")
|
||||
|
||||
/datum/gear/fluff/seona_big_plushie
|
||||
path = /obj/item/toy/plushie/fluff/seona_mofuorb
|
||||
display_name = "comically oversized fox plushie"
|
||||
ckeywhitelist = list("pandora029")
|
||||
character_name = list("Seona Young")
|
||||
character_name = list("Shona Young")
|
||||
|
||||
/datum/gear/fluff/lily_medal
|
||||
path = /obj/item/clothing/accessory/medal/silver/unity
|
||||
|
||||
@@ -35,4 +35,12 @@
|
||||
|
||||
/datum/gear/shoes/flats/alt
|
||||
display_name = "flats, alt"
|
||||
path = /obj/item/clothing/shoes/flats/white/color/alt
|
||||
path = /obj/item/clothing/shoes/flats/white/color/alt
|
||||
|
||||
/datum/gear/shoes/sandals_elegant
|
||||
display_name = "sandals, elegant"
|
||||
path = /obj/item/clothing/shoes/sandals_elegant
|
||||
|
||||
/datum/gear/shoes/sandals_elegant/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
@@ -315,6 +315,26 @@
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/ranger_poncho
|
||||
display_name = "ranger poncho selection"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/ranger
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/ranger_poncho/New()
|
||||
..()
|
||||
var/list/ranger_ponchos = list(
|
||||
"red ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger,
|
||||
"tan ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger/tan,
|
||||
"gray ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger/gray,
|
||||
"green ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger/green,
|
||||
"blue ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger/blue,
|
||||
"purple ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger/purple,
|
||||
"orange ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger/orange,
|
||||
"charcoal ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger/charcoal,
|
||||
"white ranger poncho" = /obj/item/clothing/accessory/poncho/roles/ranger/snow
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(ranger_ponchos)
|
||||
|
||||
/datum/gear/suit/unathi_robe
|
||||
display_name = "roughspun robe"
|
||||
path = /obj/item/clothing/suit/unathi/robe
|
||||
|
||||
@@ -0,0 +1,592 @@
|
||||
//template for quickly making more, if it's ever needed
|
||||
/*
|
||||
|
||||
/datum/gear/uniform/BLANK_selector
|
||||
display_name = "DEPT - BLANK's Uniforms"
|
||||
description = "Select from a range of outfits available to all BLANK personnel."
|
||||
allowed_roles = list("")
|
||||
path =
|
||||
slot = slot_w_uniform
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/BLANK_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
*/
|
||||
|
||||
//Command/Specific
|
||||
|
||||
/datum/gear/uniform/site_manager_selector
|
||||
display_name = "Command - Site Manager's Uniforms"
|
||||
description = "Select from a range of outfits available to all Site Managers."
|
||||
allowed_roles = list("Site Manager")
|
||||
path = /obj/item/clothing/under/rank/neo_captain
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/site_manager_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"uniform w/ dress"=/obj/item/clothing/under/dress/dress_cap,
|
||||
"KHI uniform"=/obj/item/clothing/under/rank/khi/cmd,
|
||||
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
|
||||
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
|
||||
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
|
||||
"ST: DS9 Command"=/obj/item/clothing/under/rank/trek/command/ds9,
|
||||
"ST: Enterprise Command"=/obj/item/clothing/under/rank/trek/command/ent,
|
||||
"voidsuit underlayer"=/obj/item/clothing/under/undersuit/command,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_captain,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_captain_skirt,
|
||||
"TG&C utility suit"=/obj/item/clothing/under/rank/neo_commandutil,
|
||||
"TG&C black suit"=/obj/item/clothing/under/rank/neo_captain_blacksuit,
|
||||
"TG&C parade uniform"=/obj/item/clothing/under/rank/neo_captain_parade,
|
||||
"TG&C jumpkilt"=/obj/item/clothing/under/rank/neo_captain_kilt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_cmd_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/head_of_personnel_selector
|
||||
display_name = "Command - Head of Personnel's Uniforms"
|
||||
description = "Select from a range of outfits available to all Heads of Personnel."
|
||||
allowed_roles = list("Head of Personnel")
|
||||
path = /obj/item/clothing/under/rank/neo_hop
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/head_of_personnel_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"uniform w/ dress"=/obj/item/clothing/under/dress/dress_hop,
|
||||
"HR director"=/obj/item/clothing/under/dress/dress_hr,
|
||||
"KHI uniform"=/obj/item/clothing/under/rank/khi/cmd,
|
||||
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
|
||||
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
|
||||
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
|
||||
"ST: DS9 Command"=/obj/item/clothing/under/rank/trek/command/ds9,
|
||||
"ST: Enterprise Command"=/obj/item/clothing/under/rank/trek/command/ent,
|
||||
"voidsuit underlayer"=/obj/item/clothing/under/undersuit/command,
|
||||
"TG&C command utility"=/obj/item/clothing/under/rank/neo_commandutil,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_hop,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_hop_skirt,
|
||||
"TG&C parade uniform"=/obj/item/clothing/under/rank/neo_hop_parade_masc,
|
||||
"TG&C parade dress"=/obj/item/clothing/under/rank/neo_hop_parade_fem,
|
||||
"TG&C turtleneck"=/obj/item/clothing/under/rank/neo_hop_turtle,
|
||||
"TG&C turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_hop_turtle_skirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_cmd_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/pilot_uniform_selector
|
||||
display_name = "Civilian - Pilot's Uniforms"
|
||||
description = "Select from a range of outfits available to all Pilots."
|
||||
allowed_roles = list("Pilot")
|
||||
path = /obj/item/clothing/under/rank/neo_pilot
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 1
|
||||
|
||||
/datum/gear/uniform/pilot_uniform_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_pilot,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_pilot_skirt,
|
||||
"Major Bill's flightsuit"=/obj/item/clothing/under/mbill_flight,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_pilot_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/janitor_uniform_selector
|
||||
display_name = "Civilian - Janitor's Uniforms"
|
||||
description = "Select from a range of outfits available to all Janitorial personnel."
|
||||
allowed_roles = list("Janitor")
|
||||
path = /obj/item/clothing/under/rank/neo_janitor
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 1
|
||||
|
||||
/datum/gear/uniform/janitor_uniform_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"TG&C janitor's uniform"=/obj/item/clothing/under/rank/neo_janitor,
|
||||
"TG&C janitor's uniform w/ skirt"=/obj/item/clothing/under/rank/neo_janitor_skirt
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/civvie_uniform_selector
|
||||
display_name = "Civilian - Basic Uniforms"
|
||||
description = "Select from a range of uniforms available to all personnel. Includes miscellaneous corporate contractor uniforms."
|
||||
path = /obj/item/clothing/under/utility/grey
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 1
|
||||
|
||||
/datum/gear/uniform/civvie_uniform_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"KHI uniform"=/obj/item/clothing/under/rank/khi/civ,
|
||||
"TG&C plain turtleneck"=/obj/item/clothing/under/rank/neo_suspect_turtleneck,
|
||||
"TG&C plain turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_suspect_turtleskirt,
|
||||
"TG&C blue turtleneck"=/obj/item/clothing/under/rank/neo_suspect_turtleneck_blue,
|
||||
"TG&C blue turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_suspect_turtleskirt_blue,
|
||||
"TG&C red turtleneck"=/obj/item/clothing/under/rank/neo_suspicious_turtleneck,
|
||||
"TG&C red turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_suspicious_turtleskirt,
|
||||
"TG&C comfy overalls"=/obj/item/clothing/under/rank/neo_suspect_overalls,
|
||||
"TG&C comfy overalls w/ skirt"=/obj/item/clothing/under/rank/neo_suspect_overalls_skirt,
|
||||
"TG&C contractor's suit"=/obj/item/clothing/under/rank/neo_contract,
|
||||
"Corporate, Major Bill's uniform"=/obj/item/clothing/under/mbill,
|
||||
"Corporate, Aether Atmospherics uniform"=/obj/item/clothing/under/corp/aether,
|
||||
"Corporate, Focal Point Energistics uniform"=/obj/item/clothing/under/corp/focal,
|
||||
"Corporate, Grayson Manufactories uniform"=/obj/item/clothing/under/corp/grayson,
|
||||
"Corporate, Grayson Manufactories jumpsuit"=/obj/item/clothing/under/corp/grayson_jump,
|
||||
"Corporate, Ward-Takahashi uniform"=/obj/item/clothing/under/corp/wardt,
|
||||
"Corporate, Hephaestus Arms uniform"=/obj/item/clothing/under/corp/hephaestus,
|
||||
"Corporate, Centauri Provisions uniform"=/obj/item/clothing/under/corp/centauri,
|
||||
"Corporate, Morpheus Cyberkinetics uniform"=/obj/item/clothing/under/corp/morpheus,
|
||||
"Corporate, Wulf Aeronautics uniform"=/obj/item/clothing/under/corp/wulf,
|
||||
"Corporate, Zeng-Hu uniform"=/obj/item/clothing/under/corp/zenghu,
|
||||
"Corporate, Xion Manufacturing uniform"=/obj/item/clothing/under/corp/xion,
|
||||
"Galactic Survey utility uniform"=/obj/item/clothing/under/gsa,
|
||||
"Galactic Survey reinforced uniform"=/obj/item/clothing/under/gsa_work,
|
||||
"Utility uniform, black"=/obj/item/clothing/under/utility,
|
||||
"Utility uniform, navy"=/obj/item/clothing/under/utility/blue,
|
||||
"Utility uniform, grey"=/obj/item/clothing/under/utility/grey,
|
||||
"Utility uniform, tan"=/obj/item/clothing/under/utility/tan,
|
||||
"Utility uniform, green"=/obj/item/clothing/under/utility/green,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_civvie_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
//Security
|
||||
|
||||
/datum/gear/uniform/security_selector
|
||||
display_name = "Security - Basic Uniforms"
|
||||
description = "Select from a range of outfits available to all Security personnel."
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
path = /obj/item/clothing/under/rank/security/corp
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/security_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"undersuit, modernized"=/obj/item/clothing/under/rank/security/modern,
|
||||
"KHI uniform"=/obj/item/clothing/under/rank/khi/sec,
|
||||
"voidsuit underlayer"=/obj/item/clothing/under/undersuit/sec,
|
||||
"skirt"=/obj/item/clothing/under/rank/security/skirt,
|
||||
"turtleneck"=/obj/item/clothing/under/rank/security/turtleneck,
|
||||
"corporate"=/obj/item/clothing/under/rank/security/corp,
|
||||
"formal, navy"=/obj/item/clothing/under/rank/security/navyblue,
|
||||
"formal, tan"=/obj/item/clothing/under/rank/security/tan,
|
||||
"Proxima Centauri Risk Control"=/obj/item/clothing/under/corp/pcrc,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_sec_red,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_sec_red_skirt,
|
||||
"TG&C blue jumpsuit"=/obj/item/clothing/under/rank/neo_sec_blue,
|
||||
"TG&C white"=/obj/item/clothing/under/rank/neo_sec_suit,
|
||||
"TG&C blue"=/obj/item/clothing/under/rank/neo_sec_suit_blue,
|
||||
"TG&C turtleneck"=/obj/item/clothing/under/rank/neo_sec_turtle_red,
|
||||
"TG&C turtleneck & skirt"=/obj/item/clothing/under/rank/neo_sec_turtle_red_skirt,
|
||||
"TG&C blue turtleneck"=/obj/item/clothing/under/rank/neo_sec_turtle_blue,
|
||||
"TG&C blue turtleneck & skirt"=/obj/item/clothing/under/rank/neo_sec_turtle_blue_skirt,
|
||||
"corrections officer"=/obj/item/clothing/under/rank/neo_corrections,
|
||||
"corrections officer w/ skirt"=/obj/item/clothing/under/rank/neo_corrections_skirt,
|
||||
"runner's turtleneck"=/obj/item/clothing/under/rank/neo_runner,
|
||||
"ST: Original Series Ops"=/obj/item/clothing/under/rank/trek/engsec,
|
||||
"ST: Next Generation Ops"=/obj/item/clothing/under/rank/trek/engsec/next,
|
||||
"ST: Voyager Ops"=/obj/item/clothing/under/rank/trek/engsec/voy,
|
||||
"ST: DS9 Ops"=/obj/item/clothing/under/rank/trek/engsec/ds9,
|
||||
"ST: Enterprise Ops"=/obj/item/clothing/under/rank/trek/engsec/ent,
|
||||
"TG&C bodyguard's suit"=/obj/item/clothing/under/rank/bodyguard_suit,
|
||||
"TG&C bodyguard's skirt"=/obj/item/clothing/under/rank/bodyguard_skirt,
|
||||
"TG&C bodyguard's turtleneck"=/obj/item/clothing/under/rank/bodyguard_turtleneck,
|
||||
"TG&C bodyguard's turtleneck w/ skirt"=/obj/item/clothing/under/rank/bodyguard_turtleskirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_sec_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/security_warden_selector
|
||||
display_name = "Security - Warden's Uniforms"
|
||||
description = "Select from a range of outfits available to Wardens."
|
||||
allowed_roles = list("Head of Security","Warden")
|
||||
path = /obj/item/clothing/under/rank/warden/corp
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/security_warden_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/warden/skirt,
|
||||
"corporate"=/obj/item/clothing/under/rank/warden/corp,
|
||||
"formal, navy"=/obj/item/clothing/under/rank/warden/navyblue,
|
||||
"formal, tan"=/obj/item/clothing/under/rank/warden/navyblue,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_warden_red,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_warden_red_skirt,
|
||||
"TG&C blue jumpsuit"=/obj/item/clothing/under/rank/neo_warden_blue
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/security_detective_selector
|
||||
display_name = "Security - Detective's Uniforms"
|
||||
description = "Select from a range of outfits available to all Detectives."
|
||||
allowed_roles = list("Head of Security","Detective")
|
||||
path = /obj/item/clothing/under/det/corporate
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/security_detective_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/det/skirt,
|
||||
"corporate"=/obj/item/clothing/under/det/corporate
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/security_head_selector
|
||||
display_name = "Security - Head's Uniforms"
|
||||
description = "Select from a range of outfits available to all Heads of Security."
|
||||
allowed_roles = list("Head of Security")
|
||||
path = /obj/item/clothing/under/rank/head_of_security/corp
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/security_head_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/head_of_security/skirt,
|
||||
"corporate"=/obj/item/clothing/under/rank/head_of_security/corp,
|
||||
"formal, navy"=/obj/item/clothing/under/rank/head_of_security/navyblue,
|
||||
"formal, tan"=/obj/item/clothing/under/rank/head_of_security/tan,
|
||||
"voidsuit underlayer"=/obj/item/clothing/under/undersuit/sec/hos,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_hos_red,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_hos_red_skirt,
|
||||
"TG&C turtleneck"=/obj/item/clothing/under/rank/neo_hos_blackred,
|
||||
"TG&C turtleneck & skirt"=/obj/item/clothing/under/rank/neo_hos_blackred_skirt,
|
||||
"TG&C parade uniform"=/obj/item/clothing/under/rank/neo_hos_parade,
|
||||
"TG&C parade uniform, feminine"=/obj/item/clothing/under/rank/neo_hos_parade_fem,
|
||||
"TG&C blue"=/obj/item/clothing/under/rank/neo_hos_blue,
|
||||
"TG&C blue turtleneck"=/obj/item/clothing/under/rank/neo_hos_blackblue,
|
||||
"TG&C blue turtleneck & skirt"=/obj/item/clothing/under/rank/neo_hos_blackblue_skirt,
|
||||
"TG&C blue parade uniform"=/obj/item/clothing/under/rank/neo_hos_parade_blue,
|
||||
"TG&C blue parade uniform, feminine"=/obj/item/clothing/under/rank/neo_hos_parade_blue_fem,
|
||||
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
|
||||
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
|
||||
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
|
||||
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
|
||||
"ST: DS9 Command"=/obj/item/clothing/under/rank/trek/command/ds9,
|
||||
"ST: Enterprise Command"=/obj/item/clothing/under/rank/trek/command/ent,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_hos_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
//Cargo
|
||||
|
||||
/datum/gear/uniform/quartermaster_selector
|
||||
display_name = "Cargo - Quartermaster's Uniforms"
|
||||
description = "Select from a range of outfits available to all Quartermasters."
|
||||
allowed_roles = list("Quartermaster")
|
||||
path = /obj/item/clothing/under/rank/cargo/jeans
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/quartermaster_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/cargo/skirt,
|
||||
"jeans"=/obj/item/clothing/under/rank/cargo/jeans,
|
||||
"jeans, feminine cut"=/obj/item/clothing/under/rank/cargo/jeans/female,
|
||||
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_qm,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_qm_skirt,
|
||||
"TG&C casualwear"=/obj/item/clothing/under/rank/neo_qm_jacket,
|
||||
"TG&C button-up"=/obj/item/clothing/under/rank/neo_qm_white,
|
||||
"TG&C button-up w/ skirt"=/obj/item/clothing/under/rank/neo_qm_white_skirt,
|
||||
"TG&C turtleneck"=/obj/item/clothing/under/rank/neo_qm_turtle,
|
||||
"TG&C turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_qm_turtle_skirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_qm_gorka,
|
||||
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
|
||||
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
|
||||
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
|
||||
"ST: DS9 Command"=/obj/item/clothing/under/rank/trek/command/ds9,
|
||||
"ST: Enterprise Command"=/obj/item/clothing/under/rank/trek/command/ent
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/cargo_general_selector
|
||||
display_name = "Cargo - Basic Uniforms"
|
||||
description = "Select from a range of outfits available to all Cargo personnel."
|
||||
allowed_roles = list("Cargo Technician","Shaft Miner","Quartermaster")
|
||||
path = /obj/item/clothing/under/rank/cargotech/jeans
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/cargo_general_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/cargotech/skirt,
|
||||
"jeans"=/obj/item/clothing/under/rank/cargotech/jeans,
|
||||
"jeans, feminine cut"=/obj/item/clothing/under/rank/cargotech/jeans/female,
|
||||
"KHI uniform"=/obj/item/clothing/under/rank/khi/crg,
|
||||
"TG&C shorts"=/obj/item/clothing/under/rank/neo_cargo_shorts,
|
||||
"TG&C skirt"=/obj/item/clothing/under/rank/neo_cargo_skirt,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_cargo,
|
||||
"TG&C utility uniform"=/obj/item/clothing/under/rank/neo_util_cargo,
|
||||
"TG&C dark"=/obj/item/clothing/under/rank/neo_cargo_dark,
|
||||
"TG&C casual"=/obj/item/clothing/under/rank/neo_cargo_casual,
|
||||
"TG&C turtleneck"=/obj/item/clothing/under/rank/neo_cargo_turtle,
|
||||
"TG&C turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_cargo_turtle_skirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_cargo_gorka,
|
||||
"customs officer"=/obj/item/clothing/under/rank/neo_cargo_customs
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/cargo_miner_selector
|
||||
display_name = "Cargo - Miner's Uniforms"
|
||||
description = "Select from a range of outfits available to all Mining personnel."
|
||||
allowed_roles = list("Shaft Miner","Quartermaster")
|
||||
path = /obj/item/clothing/under/rank/neo_miner
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/cargo_miner_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"TG&C miner's uniform"=/obj/item/clothing/under/rank/neo_miner,
|
||||
"TG&C hunter's uniform"=/obj/item/clothing/under/rank/neo_miner_fauna
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
//Engineering
|
||||
|
||||
/datum/gear/uniform/engineering_chief_selector
|
||||
display_name = "Engineering - Chief Engineer's Uniforms"
|
||||
description = "Select from a range of outfits available to all Chief Engineers."
|
||||
allowed_roles = list("Chief Engineer")
|
||||
path = /obj/item/clothing/under/rank/neo_chiefengi
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/engineering_chief_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/chief_engineer/skirt,
|
||||
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
|
||||
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
|
||||
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
|
||||
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
|
||||
"ST: DS9 Command"=/obj/item/clothing/under/rank/trek/command/ds9,
|
||||
"ST: Enterprise Command"=/obj/item/clothing/under/rank/trek/command/ent,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_chiefengi,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_chiefengi_skirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_ce_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/engineer_selector
|
||||
display_name = "Engineering - Basic Uniforms"
|
||||
description = "Select from a range of outfits available to all Engineering personnel."
|
||||
allowed_roles = list("Chief Engineer","Engineer","Atmospheric Technician")
|
||||
path = /obj/item/clothing/under/rank/neo_engi
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/engineer_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/engineer/skirt,
|
||||
"turtleneck"=/obj/item/clothing/under/rank/engineer/turtleneck,
|
||||
"KHI uniform"=/obj/item/clothing/under/rank/khi/eng,
|
||||
"ST: Original Series Ops"=/obj/item/clothing/under/rank/trek/engsec,
|
||||
"ST: Next Generation Ops"=/obj/item/clothing/under/rank/trek/engsec/next,
|
||||
"ST: Voyager Ops"=/obj/item/clothing/under/rank/trek/engsec/voy,
|
||||
"ST: DS9 Ops"=/obj/item/clothing/under/rank/trek/engsec/ds9,
|
||||
"ST: Enterprise Ops"=/obj/item/clothing/under/rank/trek/engsec/ent,
|
||||
"voidsuit underlayer"=/obj/item/clothing/under/undersuit/hazard,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_engi,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_engi_skirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_engi_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/engi_atmos_selector
|
||||
display_name = "Engineering - Atmos Tech's Uniforms"
|
||||
description = "Select from a range of outfits available to all Atmospherics Technicians."
|
||||
allowed_roles = list("Chief Engineer","Atmospheric Technician")
|
||||
path = /obj/item/clothing/under/rank/atmospheric_technician/skirt
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/engi_atmos_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/atmospheric_technician/skirt,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_atmos,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_atmos_skirt
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
//Medical
|
||||
|
||||
/datum/gear/uniform/medical_selector
|
||||
display_name = "Medical - Basic Uniforms"
|
||||
description = "Select from a range of outfits available to all Medical personnel."
|
||||
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic")
|
||||
path = /obj/item/clothing/under/rank/neo_med
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/medical_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/medical/skirt,
|
||||
"virologist skirt"=/obj/item/clothing/under/rank/virologist/skirt,
|
||||
"turtleneck"=/obj/item/clothing/under/rank/medical/turtleneck,
|
||||
"vey-medical jumpsuit"=/obj/item/clothing/under/corp/veymed,
|
||||
"KHI uniform"=/obj/item/clothing/under/rank/khi/med,
|
||||
"ST: Original Series Med-Sci"=/obj/item/clothing/under/rank/trek/medsci,
|
||||
"ST: Next Generation Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/next,
|
||||
"ST: Voyager Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/voy,
|
||||
"ST: DS9 Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/ds9,
|
||||
"ST: Enterprise Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/ent,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_med,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_med_skirt,
|
||||
"TG&C virology jumpsuit"=/obj/item/clothing/under/rank/neo_viro,
|
||||
"TG&C virology jumpskirt"=/obj/item/clothing/under/rank/neo_viro_skirt,
|
||||
"TG&C dark jumpsuit"=/obj/item/clothing/under/rank/neo_med_dark,
|
||||
"TG&C dark jumpskirt"=/obj/item/clothing/under/rank/neo_med_dark_skirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_med_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/chemist_selector
|
||||
display_name = "Medical - Chemist's Uniforms"
|
||||
description = "Select from a range of outfits available to all Chemists."
|
||||
allowed_roles = list("Chief Medical Officer","Chemist")
|
||||
path = /obj/item/clothing/under/rank/neo_chem
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/chemist_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/chemist/skirt,
|
||||
"TG&C chemist's jumpsuit"=/obj/item/clothing/under/rank/neo_chem,
|
||||
"TG&C chemist's jumpskirt"=/obj/item/clothing/under/rank/neo_chem_skirt,
|
||||
"TG&C pharmacy jumpsuit"=/obj/item/clothing/under/rank/neo_pharma,
|
||||
"TG&C pharmacy jumpskirt"=/obj/item/clothing/under/rank/neo_pharma_skirt
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/paramedic_selector
|
||||
display_name = "Medical - Paramedic's Uniforms"
|
||||
description = "Select from a range of outfits available to all Paramedics."
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic")
|
||||
path = /obj/item/clothing/under/rank/paramedunidark
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/paramedic_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"dark"=/obj/item/clothing/under/rank/paramedunidark,
|
||||
"dark w/ skirt"=/obj/item/clothing/under/rank/parameduniskirtdark,
|
||||
"light"=/obj/item/clothing/under/rank/paramedunilight,
|
||||
"light w/ skirt"=/obj/item/clothing/under/rank/parameduniskirtlight,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_para,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_para_skirt,
|
||||
"TG&C light jumpsuit"=/obj/item/clothing/under/rank/neo_para_light,
|
||||
"TG&C light jumpskirt"=/obj/item/clothing/under/rank/neo_para_light_skirt
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/chief_medical_selector
|
||||
display_name = "Medical - Chief Medical Officer's Uniforms"
|
||||
description = "Select from a range of outfits available to all Chief Medical Officers."
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
path = /obj/item/clothing/under/rank/neo_cmo
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/chief_medical_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/chief_medical_officer/skirt,
|
||||
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
|
||||
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
|
||||
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
|
||||
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
|
||||
"ST: DS9 Command"=/obj/item/clothing/under/rank/trek/command/ds9,
|
||||
"ST: Enterprise Command"=/obj/item/clothing/under/rank/trek/command/ent,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_cmo,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_cmo_skirt,
|
||||
"TG&C turtleneck"=/obj/item/clothing/under/rank/neo_cmo_turtle,
|
||||
"TG&C turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_cmo_turtle_skirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_cmo_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
//Science
|
||||
|
||||
/datum/gear/uniform/research_director_selector
|
||||
display_name = "Science - Research Director's Uniforms"
|
||||
description = "Select from a range of outfits available to all Research Directors."
|
||||
allowed_roles = list("Research Director")
|
||||
path = /obj/item/clothing/under/rank/neo_rd_suit
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/research_director_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"KHI uniform, command"=/obj/item/clothing/under/rank/khi/cmd,
|
||||
"ST: Original Series Command"=/obj/item/clothing/under/rank/trek/command,
|
||||
"ST: Next Generation Command"=/obj/item/clothing/under/rank/trek/command/next,
|
||||
"ST: Voyager Command"=/obj/item/clothing/under/rank/trek/command/voy,
|
||||
"ST: DS9 Command"=/obj/item/clothing/under/rank/trek/command/ds9,
|
||||
"ST: Enterprise Command"=/obj/item/clothing/under/rank/trek/command/ent,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_rd_suit,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_rd_suit_skirt,
|
||||
"TG&C turtleneck"=/obj/item/clothing/under/rank/neo_rd_turtle,
|
||||
"TG&C turtleneck w/ skirt"=/obj/item/clothing/under/rank/neo_rd_turtle_skirt,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_rd_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/science_dept_selector
|
||||
display_name = "Science - Basic Uniforms"
|
||||
description = "Select from a range of outfits available to all Science personnel."
|
||||
allowed_roles = list("Scientist","Research Director","Roboticist","Xenobiologist","Xenobotanist")
|
||||
path = /obj/item/clothing/under/rank/neo_science
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/science_dept_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_science,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_science_skirt,
|
||||
"TG&C utility"=/obj/item/clothing/under/rank/neo_util_sci,
|
||||
"KHI uniform"=/obj/item/clothing/under/rank/khi/sci,
|
||||
"ST: Original Series Med-Sci"=/obj/item/clothing/under/rank/trek/medsci,
|
||||
"ST: Next Generation Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/next,
|
||||
"ST: Voyager Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/voy,
|
||||
"ST: DS9 Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/ds9,
|
||||
"ST: Enterprise Med-Sci"=/obj/item/clothing/under/rank/trek/medsci/ent,
|
||||
"TG&C gorka suit"=/obj/item/clothing/under/rank/neo_sci_gorka
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
|
||||
/datum/gear/uniform/science_robotics_selector
|
||||
display_name = "Science - Roboticist's Uniforms"
|
||||
description = "Select from a range of outfits available to all Roboticists."
|
||||
allowed_roles = list("Research Director","Roboticist")
|
||||
path = /obj/item/clothing/under/rank/neo_robo
|
||||
sort_category = "Uniform Selectors"
|
||||
cost = 2
|
||||
|
||||
/datum/gear/uniform/science_robotics_selector/New()
|
||||
..()
|
||||
var/list/selector_uniforms = list(
|
||||
"skirt"=/obj/item/clothing/under/rank/roboticist/skirt,
|
||||
"TG&C jumpsuit"=/obj/item/clothing/under/rank/neo_robo,
|
||||
"TG&C jumpskirt"=/obj/item/clothing/under/rank/neo_robo_skirt
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(selector_uniforms))
|
||||
@@ -29,6 +29,7 @@ var/list/preferences_datums = list()
|
||||
var/tgui_fancy = TRUE
|
||||
var/tgui_lock = FALSE
|
||||
var/tgui_input_mode = FALSE // All the Input Boxes (Text,Number,List,Alert)
|
||||
var/tgui_input_lock = FALSE
|
||||
var/tgui_large_buttons = TRUE
|
||||
var/tgui_swapped_buttons = FALSE
|
||||
|
||||
|
||||
@@ -343,9 +343,31 @@ BLIND // can't see anything
|
||||
icon_state = "aviator"
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/bigshot
|
||||
name = "big shot's glasses"
|
||||
desc = "A pair of glasses to help you feel more like a \[BIG SHOT]."
|
||||
icon_state = "bigshot"
|
||||
name = "colored glasses"
|
||||
desc = "A pair of glasses with uniquely colored lenses to make you feel like a \[BIG SHOT]."
|
||||
description_fluff = "A prototype model of the AR glasses which focused on stylization and \
|
||||
functionality. The concept never caught on and was replaced with the earlier rendition of \
|
||||
the modern AR glasses. These have quite clearly seen better days as the AR function no \
|
||||
longer works, the toggle merely obscuring the users vison."
|
||||
icon_state = "salesman"
|
||||
var/ar = 0
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/bigshot/examine(mob/user as mob)
|
||||
. = ..()
|
||||
. += to_chat(usr, "<span class='notice'>Alt-click to toggle modes.</span>")
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/bigshot/AltClick()
|
||||
set src in usr
|
||||
if(usr.canmove && !usr.stat && !usr.restrained())
|
||||
if(src.ar)
|
||||
src.ar = !src.ar
|
||||
icon_state = initial(icon_state)
|
||||
to_chat(usr, "You press a small button on \the [src] and deactivate the AR mode.")
|
||||
else
|
||||
src.ar = !src.ar
|
||||
icon_state = "[initial(icon_state)]_fzz"
|
||||
to_chat(usr, "You press a small button on \the [src] and activate the AR mode.")
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/glasses/welding
|
||||
name = "welding goggles"
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/* Sprites ported from skyrat/tg, serves as an alternative to the virgo versions of certain clothes.
|
||||
this file deals with hats/headwear. */
|
||||
|
||||
/obj/item/clothing/head/helmet/HoS/hat/blue
|
||||
name = "Blue Head of Security Hat"
|
||||
desc = "The hat of the Head of Security. For showing the officers who's in charge."
|
||||
icon = 'icons/inventory/head/item.dmi'
|
||||
icon_state = "neo_hoshat_blue"
|
||||
valid_accessory_slots = null
|
||||
|
||||
/obj/item/clothing/head/soft/neo_softcap
|
||||
name = "suspect softcap"
|
||||
desc = "a dark-colored softcap."
|
||||
icon = 'icons/inventory/head/item.dmi'
|
||||
icon_state = "neo_softcap"
|
||||
|
||||
/obj/item/clothing/head/neo_irs
|
||||
name = "IRS cap"
|
||||
desc = "a blue cap with the letters 'IRS' emblazoned on the front."
|
||||
icon = 'icons/inventory/head/item.dmi'
|
||||
icon_state = "neo_irs"
|
||||
|
||||
/obj/item/clothing/head/ushanka/neo_ushanka
|
||||
name = "Ushanka"
|
||||
desc = "an old beat-up ushanka."
|
||||
icon = 'icons/inventory/head/item.dmi'
|
||||
icon_state = "neo_ushanka"
|
||||
|
||||
/obj/item/clothing/head/ushanka/neo_ushanka_blue
|
||||
name = "Blue Ushanka"
|
||||
desc = "a light-blue ushanka."
|
||||
icon = 'icons/inventory/head/item.dmi'
|
||||
icon_state = "neo_blue_ushanka"
|
||||
|
||||
/obj/item/clothing/head/papakha
|
||||
name = "Papakha"
|
||||
desc = "an old beat-up Papakha."
|
||||
icon = 'icons/inventory/head/item.dmi'
|
||||
icon_state = "neo_papakha"
|
||||
|
||||
/obj/item/clothing/head/papakha_white
|
||||
name = "White Papakha"
|
||||
desc = "an old beat-up white papakha."
|
||||
icon = 'icons/inventory/head/item.dmi'
|
||||
icon_state = "neo_papakha_white"
|
||||
@@ -98,6 +98,7 @@
|
||||
name = "shipping cap"
|
||||
desc = "It's a ballcap bearing the colors of Major Bill's Shipping."
|
||||
icon_state = "mbillsoft"
|
||||
item_state_slots = list(slot_r_hand_str = "redsoft", slot_l_hand_str = "redsoft")
|
||||
catalogue_data = list(/datum/category_item/catalogue/information/organization/major_bills)
|
||||
|
||||
/obj/item/clothing/head/soft/med
|
||||
|
||||
@@ -105,4 +105,13 @@
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/feet/mob_vr.dmi'
|
||||
icon_state = "flatsalt"
|
||||
item_state = "flatsalt"
|
||||
item_state = "flatsalt"
|
||||
|
||||
/obj/item/clothing/shoes/sandals_elegant
|
||||
name = "elegant sandals"
|
||||
desc = "A pair of sandals with thin straps. It emphasizes the ankles!"
|
||||
icon_state = "sandals_elegant"
|
||||
item_state = "sandals_elegant"
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/feet/mob_vr.dmi'
|
||||
addblends = "sandals_elegant_a"
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/* Sprites ported from skyrat/tg, serves as an alternative to the virgo versions of certain clothes.
|
||||
this file deals with shoes/footwear. */
|
||||
|
||||
/obj/item/clothing/shoes/boots/jackboots/white
|
||||
name = "white jackboots"
|
||||
desc = "Standard-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
|
||||
icon_state = "neo_jack_white"
|
||||
icon = 'icons/inventory/feet/item.dmi'
|
||||
|
||||
/obj/item/clothing/shoes/boots/jackboots/silver
|
||||
name = "silver jackboots"
|
||||
desc = "Standard-issue Security combat boots for combat scenarios or combat situations. All combat, all the time."
|
||||
icon_state = "neo_jack_silver"
|
||||
icon = 'icons/inventory/feet/item.dmi'
|
||||
@@ -258,3 +258,32 @@
|
||||
|
||||
species_restricted = list(SPECIES_ALTEVIAN)
|
||||
no_cycle = TRUE
|
||||
|
||||
/obj/item/clothing/suit/space/void/salvagecorp_shipbreaker
|
||||
name = "\improper CSC industrial voidsuit"
|
||||
desc = "A heavy-duty Kirillov-Y771 voidsuit intended for use in hazardous shipbreaking, salvage, and industrial operations, manufactured (or more likely refurbished) by the Coyote Salvage Corporation. It's slow and awkward if used outside of microgravity, but it offers good protection for what is technically a civilian-legal voidsuit."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "breaker_suit"
|
||||
|
||||
armor = list("melee" = 50, "bullet" = 15, "laser" = 15, "energy" = 25, "bomb" = 45, "bio" = 100, "rad" = 80)
|
||||
slowdown = 1.5
|
||||
breach_threshold = 14
|
||||
allowed = list(/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit)
|
||||
|
||||
sprite_sheets = ALL_VR_SPRITE_SHEETS_SUIT_MOB
|
||||
sprite_sheets_obj = ALL_VR_SPRITE_SHEETS_SUIT_ITEM
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/salvagecorp_shipbreaker
|
||||
name = "\improper CSC industrial voidsuit helmet"
|
||||
desc = "A dome/bubble style helmet for use with the Kirillov-Y771 voidsuit. It offers surprisingly good protection and visibility, though wearers are still advised to avoid face-on collisions. Sadly, this one doesn't seem to have the (in)famous 0PTIK3WL cross-spectrum imaging visor installed..."
|
||||
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "breaker_helmet"
|
||||
|
||||
armor = list("melee" = 50, "bullet" = 15, "laser" = 15, "energy" = 25, "bomb" = 45, "bio" = 100, "rad" = 80)
|
||||
|
||||
sprite_sheets = ALL_VR_SPRITE_SHEETS_HEAD_MOB
|
||||
sprite_sheets_obj = ALL_VR_SPRITE_SHEETS_HEAD_ITEM
|
||||
@@ -32,7 +32,7 @@
|
||||
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
|
||||
min_pressure_protection = 0 * ONE_ATMOSPHERE
|
||||
max_pressure_protection = 10 * ONE_ATMOSPHERE
|
||||
|
||||
action_button_name = "Toggle Helmet"
|
||||
species_restricted = list("Human", SPECIES_SKRELL, "Promethean")
|
||||
sprite_sheets = VR_SPECIES_SPRITE_SHEETS_SUIT_MOB
|
||||
sprite_sheets_obj = VR_SPECIES_SPRITE_SHEETS_SUIT_ITEM
|
||||
@@ -47,12 +47,23 @@
|
||||
var/obj/item/clothing/head/helmet/helmet = null // Deployable helmet, if any.
|
||||
var/obj/item/weapon/tank/tank = null // Deployable tank, if any.
|
||||
var/obj/item/device/suit_cooling_unit/cooler = null// Cooling unit, for FBPs. Cannot be installed alongside a tank.
|
||||
|
||||
|
||||
//Cycler settings
|
||||
var/no_cycle = FALSE //stop this item from being put in a cycler
|
||||
|
||||
//Does it spawn with any Inbuilt devices?
|
||||
/obj/item/clothing/suit/space/void/Initialize()
|
||||
. = ..()
|
||||
if(boots && ispath(boots))
|
||||
boots = new boots(src)
|
||||
if(helmet && ispath(helmet))
|
||||
helmet = new helmet(src)
|
||||
if(tank && ispath(tank))
|
||||
tank = new tank(src)
|
||||
|
||||
/obj/item/clothing/suit/space/void/examine(user)
|
||||
. = ..()
|
||||
. += to_chat(usr, "<span class='notice'>Alt-click to relase Tank/Cooling unit if installed.</span>")
|
||||
for(var/obj/item/I in list(helmet,boots,tank,cooler))
|
||||
. += "It has \a [I] installed."
|
||||
if(tank && in_range(src,user))
|
||||
@@ -145,13 +156,18 @@
|
||||
helmet.set_light_flags(helmet.light_flags & ~LIGHT_ATTACHED)
|
||||
helmet = null
|
||||
|
||||
/obj/item/clothing/suit/space/void/verb/toggle_helmet()
|
||||
/obj/item/clothing/suit/space/void/ui_action_click(mob/living/user, action_name)
|
||||
if(..())
|
||||
return TRUE
|
||||
toggle_helmet()
|
||||
|
||||
/obj/item/clothing/suit/space/void/verb/toggle_helmet()
|
||||
set name = "Toggle Helmet"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!istype(src.loc,/mob/living)) return
|
||||
if(!isliving(loc))
|
||||
return
|
||||
|
||||
if(!helmet)
|
||||
to_chat(usr, "There is no helmet installed.")
|
||||
@@ -159,44 +175,45 @@
|
||||
|
||||
var/mob/living/carbon/human/H = usr
|
||||
|
||||
if(!istype(H))
|
||||
return
|
||||
if(H.stat)
|
||||
return
|
||||
if(H.wear_suit != src)
|
||||
return
|
||||
if(!istype(H)) return
|
||||
if(H.stat) return
|
||||
if(H.wear_suit != src) return
|
||||
|
||||
if(helmet.light_on)
|
||||
to_chat(H, SPAN_NOTICE("The helmet light shuts off as it retracts."))
|
||||
helmet.update_flashlight(H)
|
||||
|
||||
if(H.head == helmet)
|
||||
to_chat(H, "<span class='notice'>You retract your suit helmet.</span>")
|
||||
to_chat(H, SPAN_NOTICE("You retract your suit helmet."))
|
||||
helmet.canremove = TRUE
|
||||
H.drop_from_inventory(helmet)
|
||||
helmet.forceMove(src)
|
||||
playsound(src.loc, 'sound/machines/click2.ogg', 75, 1)
|
||||
else
|
||||
if(H.head)
|
||||
to_chat(H, "<span class='danger'>You cannot deploy your helmet while wearing \the [H.head].</span>")
|
||||
to_chat(H, SPAN_DANGER("You cannot deploy your helmet while wearing \the [H.head]."))
|
||||
return
|
||||
if(H.equip_to_slot_if_possible(helmet, slot_head))
|
||||
helmet.pickup(H)
|
||||
helmet.canremove = FALSE
|
||||
to_chat(H, "<span class='info'>You deploy your suit helmet, sealing you off from the world.</span>")
|
||||
|
||||
if(helmet.light_system == STATIC_LIGHT)
|
||||
helmet.update_light()
|
||||
playsound(src.loc, 'sound/machines/click2.ogg', 75, 1)
|
||||
|
||||
/obj/item/clothing/suit/space/void/AltClick(mob/living/user)
|
||||
eject_tank()
|
||||
|
||||
/obj/item/clothing/suit/space/void/verb/eject_tank()
|
||||
|
||||
set name = "Eject Voidsuit Tank/Cooler"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(!istype(src.loc,/mob/living)) return
|
||||
|
||||
if(!tank && !cooler)
|
||||
to_chat(usr, "There is no tank or cooling unit inserted.")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/H = usr
|
||||
|
||||
if(!tank && !cooler)
|
||||
to_chat(H, SPAN_NOTICE("There is no tank or cooling unit inserted."))
|
||||
return
|
||||
|
||||
if(!istype(H)) return
|
||||
if(H.stat) return
|
||||
if(H.wear_suit != src) return
|
||||
@@ -208,7 +225,8 @@
|
||||
else
|
||||
removing = cooler
|
||||
cooler = null
|
||||
to_chat(H, "<span class='info'>You press the emergency release, ejecting \the [removing] from your suit.</span>")
|
||||
to_chat(H, SPAN_DANGER("You press the emergency release, ejecting \the [removing] from your suit."))
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 75, 1)
|
||||
removing.canremove = TRUE
|
||||
H.drop_from_inventory(removing)
|
||||
|
||||
|
||||
@@ -169,3 +169,10 @@
|
||||
/obj/item/clothing/suit/armor/combat/crusader_explo/FM
|
||||
name = "field medic low tech suit"
|
||||
icon_state = "crusader_explo/FM"
|
||||
|
||||
// martian miner coat
|
||||
/obj/item/clothing/suit/storage/vest/martian_miner
|
||||
name = "martian miner's coat"
|
||||
desc = "A sturdy, rugged coat once favoured by miners on Mars. These coats became strongly associated with early Martian Independence movements as a result, and remain moderately popular amongst members of the Third Ares Confederation."
|
||||
icon_state = "martian_miner"
|
||||
armor = list(melee = 25, bullet = 15, laser = 15, energy = 0, bomb = 25, bio = 0, rad = 0)
|
||||
@@ -0,0 +1,159 @@
|
||||
/* Sprites ported from skyrat/tg, serves as an alternative to the virgo versions of certain clothes.
|
||||
this file deals with suits/overwear. */
|
||||
|
||||
// labcoats
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_emt
|
||||
name = "EMT jacket"
|
||||
desc = "A dark blue labcoat with reflective strips for emergency medical technicians."
|
||||
icon_state = "neo_emt"
|
||||
item_state_slots = list(slot_r_hand_str = "emt_labcoat", slot_l_hand_str = "emt_labcoat")
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_robo_coat
|
||||
name = "robotics labcoat"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_robo_coat"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_labcoat
|
||||
name = "long labcoat"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_labcoat"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_highvis
|
||||
name = "high visibility jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_coat_highvis"
|
||||
item_state_slots = list(slot_r_hand_str = "emt_labcoat", slot_l_hand_str = "emt_labcoat")
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_redemt
|
||||
name = "red EMT jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_redemt"
|
||||
item_state_slots = list(slot_r_hand_str = "emt_labcoat", slot_l_hand_str = "emt_labcoat")
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_blueemt
|
||||
name = "dark blue EMT jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_blueemt"
|
||||
item_state_slots = list(slot_r_hand_str = "emt_labcoat", slot_l_hand_str = "emt_labcoat")
|
||||
|
||||
// generic labcoat subtypes
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_hos_parade
|
||||
name = "head of security's parade jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_hos_parade"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_engi_dep
|
||||
name = "engineer's department jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_engi_dep"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_cargo_dep
|
||||
name = "cargo department jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_cargo_dep"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_sci_dep
|
||||
name = "science department jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_sci_dep"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_med_dep
|
||||
name = "medical department jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_med_dep"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_sec_blue_dep
|
||||
name = "blue security department jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_sec_blue_dep"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_sec_red_dep
|
||||
name = "red security department jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_sec_red_dep"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep
|
||||
name = "off-duty department jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_civ_dep"
|
||||
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_police
|
||||
name = "traffic officer's jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_police"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_ranger
|
||||
name = "ranger's cloak"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_ranger"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_bodyguard_dep
|
||||
name = "bodyguard's jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_bodyguard_dep"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_hopformal
|
||||
name = "hop's formal jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_hopformal"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_bluemed
|
||||
name = "paramedic's jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_bluemed"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_hosformal_blue
|
||||
name = "head of security's blue formal jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_hosformal_blue"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_leather
|
||||
name = "leather hoodie"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_leather"
|
||||
|
||||
// non transforming coats
|
||||
|
||||
/obj/item/clothing/suit/neo_gorka
|
||||
name = "gorka jacket"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_gorka"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/neo_gorka_cargo
|
||||
name = "cargo gorka"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_gorka_cargo"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/neo_runner_coat
|
||||
name = "runner's coat"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_runner_coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
/obj/item/clothing/suit/neo_medical_coat
|
||||
name = "medical coat"
|
||||
desc = "it bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_medical_coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
|
||||
// non-transforming armoured coats with storage
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/neo_bluewarden
|
||||
name = "blue warden's jacket"
|
||||
desc = "A common style of warden's jacket with armour vest, but in blue. It bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_bluewarden"
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/neo_warden_heavy
|
||||
name = "heavy warden coat"
|
||||
desc = "A heavy and somewhat-imposing looking armour vest over a long jacket. It bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_warden_heavy"
|
||||
|
||||
/obj/item/clothing/suit/storage/vest/wardencoat/neo_armsco_trench
|
||||
name = "armsco heavy coat"
|
||||
desc = "A rich red longcoat trimmed in black with a warm brown synthetic fur ruff around the neck, lined with layers of para-aramid fibers for increased durability without compromising comfort. It bears a tag that says 'Product of Total Gear & Co.'"
|
||||
icon_state = "neo_armsco_trench"
|
||||
@@ -617,3 +617,51 @@
|
||||
/obj/item/clothing/accessory/pride/vore
|
||||
name = "vore pride pin"
|
||||
icon_state = "pride_vore"
|
||||
|
||||
// ranger ponchos
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger
|
||||
name = "red ranger poncho"
|
||||
desc = "A rugged all-weather poncho, perfectly coloured to match a popular line of neck gaiters. You could probably use it as a tent in a pinch!"
|
||||
icon_state = "rangerponcho_red"
|
||||
item_state = "rangerponcho_red"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger/tan
|
||||
name = "tan ranger poncho"
|
||||
icon_state = "rangerponcho_tan"
|
||||
item_state = "rangerponcho_tan"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger/gray
|
||||
name = "gray ranger poncho"
|
||||
icon_state = "rangerponcho_gray"
|
||||
item_state = "rangerponcho_gray"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger/green
|
||||
name = "green ranger poncho"
|
||||
icon_state = "rangerponcho_green"
|
||||
item_state = "rangerponcho_green"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger/blue
|
||||
name = "blue ranger poncho"
|
||||
icon_state = "rangerponcho_blue"
|
||||
item_state = "rangerponcho_blue"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger/purple
|
||||
name = "purple ranger poncho"
|
||||
icon_state = "rangerponcho_purple"
|
||||
item_state = "rangerponcho_purple"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger/orange
|
||||
name = "orange ranger poncho"
|
||||
icon_state = "rangerponcho_orange"
|
||||
item_state = "rangerponcho_orange"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger/charcoal
|
||||
name = "charcoal ranger poncho"
|
||||
icon_state = "rangerponcho_charcoal"
|
||||
item_state = "rangerponcho_charcoal"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/ranger/snow
|
||||
name = "white ranger poncho"
|
||||
icon_state = "rangerponcho_snow"
|
||||
item_state = "rangerponcho_snow"
|
||||
@@ -190,3 +190,28 @@
|
||||
icon_state = "wardenblueclothes"
|
||||
item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/*
|
||||
* Tan uniforms
|
||||
*/
|
||||
/obj/item/clothing/under/rank/security/tan
|
||||
name = "security officer's uniform"
|
||||
desc = "The latest in fashionable security outfits."
|
||||
icon_state = "officertanclothes"
|
||||
item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/head_of_security/tan
|
||||
desc = "The insignia on this uniform tells you that this uniform belongs to the Head of Security."
|
||||
name = "head of security's uniform"
|
||||
icon_state = "hostanclothes"
|
||||
item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit")
|
||||
rolled_sleeves = 0
|
||||
|
||||
/obj/item/clothing/under/rank/warden/tan
|
||||
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden."
|
||||
name = "warden's uniform"
|
||||
icon_state = "wardentanclothes"
|
||||
item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit")
|
||||
rolled_sleeves = 0
|
||||
|
||||
|
||||
@@ -239,6 +239,7 @@
|
||||
name = "sleek overalls"
|
||||
desc = "A set of modern pleather reinforced overalls."
|
||||
icon_state = "overalls_sleek"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||
|
||||
/obj/item/clothing/under/pirate
|
||||
name = "pirate outfit"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -63,6 +63,18 @@
|
||||
icon_state = "greyutility"
|
||||
worn_state = "greyutility"
|
||||
|
||||
/obj/item/clothing/under/utility/tan
|
||||
name = "utility uniform"
|
||||
desc = "A comfortable tan utility jumpsuit."
|
||||
icon_state = "tanutility"
|
||||
worn_state = "tanutility"
|
||||
|
||||
/obj/item/clothing/under/utility/green
|
||||
name = "utility uniform"
|
||||
desc = "A comfortable green utility jumpsuit."
|
||||
icon_state = "greenutility"
|
||||
worn_state = "greenutility"
|
||||
|
||||
//Here's the real ones
|
||||
/obj/item/clothing/under/solgov/utility/sifguard
|
||||
name = "\improper SifGuard uniform"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
var/initial_name = "Thaler"
|
||||
desc = "It's worth 0 Thalers."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/economy.dmi'
|
||||
icon_state = "spacecash1"
|
||||
opacity = 0
|
||||
density = FALSE
|
||||
@@ -38,24 +38,24 @@
|
||||
/obj/item/weapon/spacecash/update_icon()
|
||||
cut_overlays()
|
||||
name = "[worth] [initial_name]\s"
|
||||
if(worth in list(1000,500,200,100,50,20,10,1))
|
||||
if(worth in list(1000,500,200,100,50,20,10,5,1))
|
||||
icon_state = "spacecash[worth]"
|
||||
desc = "It's worth [worth] [initial_name]s."
|
||||
return
|
||||
var/sum = src.worth
|
||||
var/num = 0
|
||||
for(var/i in list(1000,500,200,100,50,20,10,1))
|
||||
for(var/i in list(1000,500,200,100,50,20,10,5,1))
|
||||
while(sum >= i && num < 50)
|
||||
sum -= i
|
||||
num++
|
||||
var/image/banknote = image('icons/obj/items.dmi', "spacecash[i]")
|
||||
var/image/banknote = image('icons/obj/economy.dmi', "spacecash[i]")
|
||||
var/matrix/M = matrix()
|
||||
M.Translate(rand(-6, 6), rand(-4, 8))
|
||||
M.Turn(pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45))
|
||||
banknote.transform = M
|
||||
add_overlay(banknote)
|
||||
if(num == 0) // Less than one thaler, let's just make it look like 1 for ease
|
||||
var/image/banknote = image('icons/obj/items.dmi', "spacecash1")
|
||||
var/image/banknote = image('icons/obj/economy.dmi', "spacecash1")
|
||||
var/matrix/M = matrix()
|
||||
M.Translate(rand(-6, 6), rand(-4, 8))
|
||||
M.Turn(pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45))
|
||||
@@ -96,9 +96,15 @@
|
||||
/obj/item/weapon/spacecash/c1
|
||||
name = "1 Thaler"
|
||||
icon_state = "spacecash1"
|
||||
desc = "It's worth 1 credit."
|
||||
desc = "It's worth 1 Thaler."
|
||||
worth = 1
|
||||
|
||||
/obj/item/weapon/spacecash/c5
|
||||
name = "5 Thaler"
|
||||
icon_state = "spacecash5"
|
||||
desc = "It's worth 5 Thalers."
|
||||
worth = 5
|
||||
|
||||
/obj/item/weapon/spacecash/c10
|
||||
name = "10 Thaler"
|
||||
icon_state = "spacecash10"
|
||||
|
||||
@@ -301,7 +301,7 @@
|
||||
/obj/item/toy/tennis = 15)
|
||||
//VOREStation Edit End
|
||||
|
||||
contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4, /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteanshake = 2) // VOREStation Add - Slurpable blobs.
|
||||
contraband = list(/obj/item/weapon/reagent_containers/syringe/steroid = 4, /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteanshake = 2, /obj/item/toy/baseball = 2) // VOREStation Add - Slurpable blobs.
|
||||
|
||||
/obj/machinery/vending/cart
|
||||
name = "PTech"
|
||||
@@ -1189,11 +1189,13 @@
|
||||
products = list(
|
||||
/obj/item/clothing/under/rank/bartender = 5,
|
||||
/obj/item/clothing/under/rank/bartender/skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_chef_skirt = 5,
|
||||
/obj/item/clothing/under/waiter = 5,
|
||||
/obj/item/clothing/head/that = 5,
|
||||
/obj/item/clothing/head/flatcap = 5,
|
||||
/obj/item/clothing/shoes/brown = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/bar = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep = 5,
|
||||
/obj/item/clothing/accessory/permit/gun/bar = 1
|
||||
)
|
||||
req_log_access = access_hop
|
||||
@@ -1215,6 +1217,30 @@
|
||||
/obj/item/clothing/head/soft/sec = 5,
|
||||
/obj/item/clothing/head/beret/sec = 5,
|
||||
/obj/item/clothing/head/beret/sec/corporate/officer = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_bodyguard_dep = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_sec_blue_dep = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_sec_red_dep = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_police = 5,
|
||||
/obj/item/clothing/under/rank/bodyguard_suit = 5,
|
||||
/obj/item/clothing/under/rank/bodyguard_skirt = 5,
|
||||
/obj/item/clothing/under/rank/bodyguard_turtleneck = 5,
|
||||
/obj/item/clothing/under/rank/bodyguard_turtleskirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_red = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_red_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_blue = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_suit = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_suit_blue = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_turtle_red = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_turtle_red_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_turtle_blue = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_turtle_blue_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_corrections = 5,
|
||||
/obj/item/clothing/under/rank/neo_corrections_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_runner = 5,
|
||||
/obj/item/clothing/under/rank/neo_sec_gorka = 5,
|
||||
/obj/item/clothing/suit/neo_runner_coat = 5,
|
||||
/obj/item/clothing/shoes/boots/jackboots/silver = 5,
|
||||
/obj/item/clothing/shoes/boots/jackboots/white = 5,
|
||||
/obj/item/clothing/mask/bandana/red = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security = 5,
|
||||
/obj/item/clothing/accessory/armband = 5,
|
||||
@@ -1241,6 +1267,8 @@
|
||||
/obj/item/clothing/suit/storage/apron/white = 5,
|
||||
/obj/item/clothing/suit/chef = 5,
|
||||
/obj/item/clothing/suit/chef/classic = 5,
|
||||
/obj/item/clothing/under/rank/neo_chef_skirt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep = 5,
|
||||
/obj/item/clothing/head/chefhat = 5,
|
||||
/obj/item/clothing/head/hairnet = 5,
|
||||
/obj/item/clothing/under/waiter = 5,
|
||||
@@ -1269,6 +1297,23 @@
|
||||
/obj/item/clothing/head/surgery/blue = 5,
|
||||
/obj/item/clothing/head/surgery/green = 5,
|
||||
/obj/item/clothing/head/surgery/black = 5,
|
||||
/obj/item/clothing/under/rank/neo_med = 5,
|
||||
/obj/item/clothing/under/rank/neo_med_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_para =5,
|
||||
/obj/item/clothing/under/rank/neo_para_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_para_light = 5,
|
||||
/obj/item/clothing/under/rank/neo_para_light_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_med_dark = 5,
|
||||
/obj/item/clothing/under/rank/neo_med_dark_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_med_gorka = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_emt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_labcoat = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_highvis = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_redemt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_blueemt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_med_dep = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_bluemed = 5,
|
||||
/obj/item/clothing/suit/neo_medical_coat = 5,
|
||||
/obj/item/clothing/shoes/white = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern = 5,
|
||||
@@ -1294,6 +1339,10 @@
|
||||
/obj/item/clothing/shoes/white = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/chemist = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/old/chem = 5, //VoreStation edit, pre-fulp labcoat.
|
||||
/obj/item/clothing/under/rank/neo_chem = 5,
|
||||
/obj/item/clothing/under/rank/neo_chem_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_pharma = 5,
|
||||
/obj/item/clothing/under/rank/neo_pharma_skirt = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/chemist = 5,
|
||||
/obj/item/clothing/head/beret/medical/chem = 5,
|
||||
/obj/item/weapon/storage/backpack/chemistry = 5,
|
||||
@@ -1313,6 +1362,8 @@
|
||||
/obj/item/clothing/under/rank/geneticist = 5,
|
||||
/obj/item/clothing/under/rank/geneticist/skirt = 5,
|
||||
/obj/item/clothing/shoes/white = 5,
|
||||
/obj/item/clothing/under/rank/neo_gene = 5,
|
||||
/obj/item/clothing/under/rank/neo_gene_skirt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/genetics = 5,
|
||||
/obj/item/weapon/storage/backpack/genetics = 5,
|
||||
/obj/item/weapon/storage/backpack/satchel/gen = 5
|
||||
@@ -1330,6 +1381,8 @@
|
||||
/obj/item/clothing/under/rank/virologist = 5,
|
||||
/obj/item/clothing/under/rank/virologist/skirt = 5,
|
||||
/obj/item/clothing/shoes/white = 5,
|
||||
/obj/item/clothing/under/rank/neo_viro = 5,
|
||||
/obj/item/clothing/under/rank/neo_viro_skirt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/virologist = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/old/vir = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical/viro = 5, //VoreStation edit, pre-fulp labcoat.
|
||||
@@ -1356,6 +1409,12 @@
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern = 5,
|
||||
/obj/item/clothing/shoes/white = 5,
|
||||
/obj/item/clothing/shoes/slippers = 5,
|
||||
/obj/item/clothing/under/rank/neo_science = 5,
|
||||
/obj/item/clothing/under/rank/neo_science_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_util_sci = 5,
|
||||
/obj/item/clothing/under/rank/neo_sci_gorka = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_sci_dep = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_labcoat = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/science = 5,
|
||||
/obj/item/clothing/shoes/boots/winter/science = 5,
|
||||
/obj/item/clothing/head/beret/science = 5,
|
||||
@@ -1378,6 +1437,10 @@
|
||||
/obj/item/clothing/head/beret/science/robotics = 5,
|
||||
/obj/item/clothing/shoes/black = 5,
|
||||
/obj/item/clothing/gloves/black = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_labcoat = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_robo_coat = 5,
|
||||
/obj/item/clothing/under/rank/neo_robo = 5,
|
||||
/obj/item/clothing/under/rank/neo_robo_skirt = 5,
|
||||
/obj/item/weapon/storage/backpack/toxins = 5,
|
||||
/obj/item/weapon/storage/backpack/satchel/tox = 5
|
||||
)
|
||||
@@ -1428,6 +1491,10 @@
|
||||
/obj/item/clothing/head/hardhat = 5,
|
||||
/obj/item/clothing/head/beret/engineering = 5,
|
||||
/obj/item/clothing/mask/bandana/gold = 5,
|
||||
/obj/item/clothing/under/rank/neo_engi = 5,
|
||||
/obj/item/clothing/under/rank/neo_engi_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_engi_gorka = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_engi_dep = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering = 5,
|
||||
/obj/item/clothing/shoes/boots/winter/engineering = 5,
|
||||
/obj/item/clothing/shoes/boots/workboots = 5
|
||||
@@ -1448,6 +1515,8 @@
|
||||
/obj/item/clothing/head/hardhat/red = 5,
|
||||
/obj/item/clothing/head/beret/engineering = 5,
|
||||
/obj/item/clothing/mask/bandana/gold = 5,
|
||||
/obj/item/clothing/under/rank/neo_atmos = 5,
|
||||
/obj/item/clothing/under/rank/neo_atmos_skirt = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos = 5,
|
||||
/obj/item/clothing/shoes/boots/winter/atmos = 5
|
||||
)
|
||||
@@ -1466,6 +1535,9 @@
|
||||
/obj/item/clothing/head/greenbandana = 5,
|
||||
/obj/item/weapon/material/minihoe = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/hydro = 5,
|
||||
/obj/item/clothing/under/rank/neo_hydro = 5,
|
||||
/obj/item/clothing/under/rank/neo_hydro_skirt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep = 5,
|
||||
/obj/item/clothing/shoes/boots/winter/hydro = 5
|
||||
)
|
||||
req_log_access = access_hop
|
||||
@@ -1484,6 +1556,19 @@
|
||||
/obj/item/clothing/under/rank/cargotech/jeans/female = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/cargo = 5,
|
||||
/obj/item/clothing/suit/storage/cargo = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo_shorts = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_miner = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo = 5,
|
||||
/obj/item/clothing/under/rank/neo_util_cargo = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo_dark = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo_casual = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo_turtle = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo_turtle_skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo_gorka = 5,
|
||||
/obj/item/clothing/under/rank/neo_cargo_customs = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_cargo_dep = 5,
|
||||
/obj/item/clothing/suit/neo_gorka_cargo = 5,
|
||||
/obj/item/clothing/shoes/boots/winter/supply = 5,
|
||||
/obj/item/clothing/shoes/black = 5,
|
||||
/obj/item/clothing/gloves/black = 5,
|
||||
@@ -1520,6 +1605,9 @@
|
||||
/obj/item/clothing/under/rank/janitor = 5,
|
||||
/obj/item/clothing/under/dress/maid/janitor = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/janitor = 5,
|
||||
/obj/item/clothing/under/rank/neo_janitor = 5,
|
||||
/obj/item/clothing/under/rank/neo_janitor_skirt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep = 5,
|
||||
/obj/item/clothing/gloves/black = 5,
|
||||
/obj/item/weapon/storage/belt/janitor = 5,
|
||||
/obj/item/clothing/shoes/galoshes = 5,
|
||||
@@ -1547,6 +1635,8 @@
|
||||
/obj/item/clothing/under/lawyer/purpsuit = 5,
|
||||
/obj/item/clothing/under/lawyer/purpsuit/skirt = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/lawyer/purpjacket = 5,
|
||||
/obj/item/clothing/under/rank/neo_teal = 5,
|
||||
/obj/item/clothing/under/rank/neo_teal_skirt = 5,
|
||||
/obj/item/clothing/shoes/brown = 5,
|
||||
/obj/item/clothing/shoes/black = 5,
|
||||
/obj/item/clothing/shoes/laceup = 5,
|
||||
@@ -1567,6 +1657,7 @@
|
||||
products = list(
|
||||
/obj/item/clothing/head/det = 5,
|
||||
/obj/item/clothing/head/det/grey = 5,
|
||||
/obj/item/clothing/head/neo_irs = 5,
|
||||
/obj/item/clothing/shoes/brown = 5,
|
||||
/obj/item/clothing/shoes/laceup = 5,
|
||||
/obj/item/clothing/under/det = 5,
|
||||
|
||||
@@ -637,6 +637,10 @@
|
||||
/obj/item/clothing/mask/bandana/green = 5,
|
||||
/obj/item/clothing/mask/bandana/red = 5,
|
||||
/obj/item/clothing/mask/surgical = 5,
|
||||
/obj/item/clothing/head/ushanka/neo_ushanka = 5,
|
||||
/obj/item/clothing/head/ushanka/neo_ushanka_blue = 5,
|
||||
/obj/item/clothing/head/papakha = 5,
|
||||
/obj/item/clothing/head/papakha_white = 5,
|
||||
/obj/item/clothing/accessory/pride/bi = 5,
|
||||
/obj/item/clothing/accessory/pride/trans = 5,
|
||||
/obj/item/clothing/accessory/pride/ace = 5,
|
||||
@@ -925,6 +929,10 @@
|
||||
/obj/item/clothing/under/suit_jacket/checkered/skirt = 5,
|
||||
/obj/item/clothing/under/suit_jacket/tan = 5,
|
||||
/obj/item/clothing/under/suit_jacket/tan/skirt = 5,
|
||||
/obj/item/clothing/under/rank/neo_civvie_gorka = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_leather = 5,
|
||||
/obj/item/clothing/suit/neo_gorka = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/neo_civ_dep = 5,
|
||||
/obj/item/clothing/under/scratch = 5,
|
||||
/obj/item/clothing/under/scratch/skirt = 5,
|
||||
/obj/item/clothing/under/sundress = 5,
|
||||
@@ -1131,7 +1139,16 @@
|
||||
/obj/item/clothing/under/tropical/pink = 50,
|
||||
/obj/item/clothing/under/tropical/blue = 50)
|
||||
premium = list(/obj/item/clothing/under/color/rainbow = 1)
|
||||
contraband = list(/obj/item/clothing/under/rank/clown = 1)
|
||||
contraband = list(/obj/item/clothing/under/rank/clown = 1,
|
||||
/obj/item/clothing/under/rank/neo_suspect_turtleneck = 1,
|
||||
/obj/item/clothing/under/rank/neo_suspect_turtleskirt = 1,
|
||||
/obj/item/clothing/under/rank/neo_suspect_turtleneck_blue = 1,
|
||||
/obj/item/clothing/under/rank/neo_suspect_turtleskirt_blue = 1,
|
||||
/obj/item/clothing/under/rank/neo_suspicious_turtleneck = 1,
|
||||
/obj/item/clothing/under/rank/neo_suspicious_turtleskirt = 1,
|
||||
/obj/item/clothing/under/rank/neo_suspect_overalls = 1,
|
||||
/obj/item/clothing/under/rank/neo_suspect_overalls_skirt = 1,
|
||||
/obj/item/clothing/head/soft/neo_softcap = 2)
|
||||
|
||||
/obj/machinery/vending/loadout/loadout_misc
|
||||
name = "Bits and Bobs"
|
||||
@@ -1149,6 +1166,7 @@
|
||||
/obj/item/weapon/storage/pill_bottle/dice = 5,
|
||||
/obj/item/weapon/storage/pill_bottle/dice_nerd = 5,
|
||||
/obj/item/weapon/melee/umbrella/random = 10,
|
||||
/obj/item/weapon/picnic_blankets_carried = 10,
|
||||
/obj/item/weapon/deck/schnapsen = 5,
|
||||
/obj/item/weapon/deck/egy = 5)
|
||||
prices = list(/obj/item/weapon/cane = 100,
|
||||
@@ -1162,6 +1180,7 @@
|
||||
/obj/item/weapon/storage/pill_bottle/dice = 100,
|
||||
/obj/item/weapon/storage/pill_bottle/dice_nerd = 100,
|
||||
/obj/item/weapon/melee/umbrella/random = 100,
|
||||
/obj/item/weapon/picnic_blankets_carried = 100,
|
||||
/obj/item/weapon/deck/schnapsen = 100,
|
||||
/obj/item/weapon/deck/egy = 100)
|
||||
premium = list(/obj/item/toy/bosunwhistle = 1)
|
||||
|
||||
@@ -35,7 +35,8 @@ GLOBAL_LIST_INIT(generic_fishing_pool_list, list(
|
||||
/obj/random/junk = 80,
|
||||
/obj/random/trash = 80,
|
||||
/obj/item/weapon/spacecash/c1 = 10,
|
||||
/obj/item/weapon/spacecash/c10 = 5,
|
||||
/obj/item/weapon/spacecash/c5 = 3,
|
||||
/obj/item/weapon/spacecash/c10 = 2,
|
||||
/obj/item/weapon/spacecash/c100 = 1
|
||||
))
|
||||
|
||||
|
||||
@@ -42,6 +42,9 @@
|
||||
/// Canned food switch to this state when opened, if set
|
||||
var/canned_open_state
|
||||
|
||||
/// For packaged/canned food sounds
|
||||
var/opening_sound = null
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/Initialize()
|
||||
. = ..()
|
||||
if(nutriment_amt)
|
||||
@@ -290,7 +293,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/proc/unpackage(mob/user)
|
||||
package = FALSE
|
||||
to_chat(user, "<span class='notice'>You unwrap [src].</span>")
|
||||
playsound(user,'sound/effects/packagedfoodopen.ogg', 15, 1)
|
||||
playsound(user,opening_sound, 15, 1)
|
||||
if(package_trash)
|
||||
var/obj/item/T = new package_trash
|
||||
user.put_in_hands(T)
|
||||
@@ -302,7 +305,7 @@
|
||||
/obj/item/weapon/reagent_containers/food/snacks/proc/uncan(mob/user)
|
||||
canned = FALSE
|
||||
to_chat(user, "<span class='notice'>You unseal \the [src] with a crack of metal.</span>")
|
||||
playsound(loc,'sound/effects/tincanopen.ogg', rand(10,50), 1)
|
||||
playsound(loc,opening_sound, rand(10,50), 1)
|
||||
if(canned_open_state)
|
||||
icon_state = canned_open_state
|
||||
|
||||
@@ -6136,6 +6139,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb01"
|
||||
trash = /obj/item/trash/candy/cb01
|
||||
nutriment_amt = 4
|
||||
nutriment_desc = list("stale chocolate" = 2, "nougat" = 1, "caramel" = 1)
|
||||
w_class = 1
|
||||
@@ -6152,6 +6156,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb02"
|
||||
trash = /obj/item/trash/candy/cb02
|
||||
nutriment_amt = 4
|
||||
nutriment_desc = list("chocolate" = 2, "caramel" = 1, "puffed rice" = 1)
|
||||
w_class = 1
|
||||
@@ -6168,6 +6173,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb03"
|
||||
trash = /obj/item/trash/candy/cb03
|
||||
nutriment_amt = 4
|
||||
nutriment_desc = list("chocolate" = 4)
|
||||
w_class = 1
|
||||
@@ -6184,6 +6190,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb04"
|
||||
trash = /obj/item/trash/candy/cb04
|
||||
nutriment_amt = 4
|
||||
nutriment_desc = list("chocolate" = 2, "salt = 1", "licorice" = 1)
|
||||
w_class = 1
|
||||
@@ -6200,6 +6207,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb05"
|
||||
trash = /obj/item/trash/candy/cb05
|
||||
nutriment_amt = 3
|
||||
nutriment_desc = list("milk chocolate" = 2)
|
||||
w_class = 1
|
||||
@@ -6216,6 +6224,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb06"
|
||||
trash = /obj/item/trash/candy/cb06
|
||||
nutriment_amt = 4
|
||||
nutriment_desc = list("chocolate" = 2, "coffee" = 1, "vanilla wafer" = 1)
|
||||
w_class = 1
|
||||
@@ -6233,6 +6242,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb07"
|
||||
trash = /obj/item/trash/candy/cb07
|
||||
nutriment_amt = 4
|
||||
nutriment_desc = list("chocolate" = 2, "taro" = 2)
|
||||
w_class = 1
|
||||
@@ -6249,6 +6259,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb08"
|
||||
trash = /obj/item/trash/candy/cb08
|
||||
nutriment_amt = 3
|
||||
nutriment_desc = list("chocolate" = 2, "malt puffs" = 1)
|
||||
w_class = 1
|
||||
@@ -6265,6 +6276,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb09"
|
||||
trash = /obj/item/trash/candy/cb09
|
||||
nutriment_amt = 6
|
||||
nutriment_desc = list("peanuts" = 3, "condensed milk" = 1, "cashews" = 2)
|
||||
w_class = 1
|
||||
@@ -6283,6 +6295,7 @@
|
||||
filling_color = "#552200"
|
||||
icon = 'icons/obj/food_snacks.dmi'
|
||||
icon_state = "cb10"
|
||||
trash = /obj/item/trash/candy/cb10
|
||||
nutriment_amt = 5
|
||||
nutriment_desc = list("chocolate" = 2, "caramel" = 1, "peanuts" = 1, "nougat" = 1)
|
||||
w_class = 1
|
||||
@@ -6826,6 +6839,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/canned
|
||||
icon = 'icons/obj/food_canned.dmi'
|
||||
opening_sound = 'sound/effects/tincanopen.ogg'
|
||||
canned = TRUE
|
||||
|
||||
//////////Just a short line of Canned Consumables, great for treasure in faraway abandoned outposts//////////
|
||||
@@ -7008,6 +7022,7 @@
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/packaged
|
||||
icon = 'icons/obj/food_package.dmi'
|
||||
opening_sound = 'sound/effects/packagedfoodopen.ogg'
|
||||
package = TRUE
|
||||
|
||||
//////////////Lunar Cakes - proof of concept//////////////
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
/*
|
||||
* Industrial Sized Sheet Storage (but not actually industrial sized)
|
||||
*/
|
||||
/obj/machinery/smartfridge/sheets
|
||||
name = "\improper Smart Sheet Storage"
|
||||
desc = "A storage unit for metals."
|
||||
icon_contents = "boxes"
|
||||
name = "\improper Industrial Sheet Storage"
|
||||
desc = "An industrial sized storage unit for materials."
|
||||
icon_state = "base_industrial"
|
||||
icon_base = "industrial"
|
||||
icon_contents = "sheet"
|
||||
stored_datum_type = /datum/stored_item/stack
|
||||
|
||||
/obj/machinery/smartfridge/sheets/persistent
|
||||
@@ -30,3 +35,17 @@
|
||||
if(O.type == I.item_path) // Typecheck should evaluate material-specific subtype
|
||||
return I
|
||||
return null
|
||||
|
||||
/*
|
||||
* Mining Variant
|
||||
*/
|
||||
/obj/machinery/smartfridge/sheets/mining
|
||||
name = "\improper Mining Sheet Storage"
|
||||
icon_state = "base_mining"
|
||||
icon_base = "mining"
|
||||
icon_contents = "sheet"
|
||||
|
||||
/obj/machinery/smartfridge/sheets/mining/persistent
|
||||
persistent = /datum/persistent/storage/smartfridge/sheet_storage
|
||||
/obj/machinery/smartfridge/sheets/mining/persistent_lossy
|
||||
persistent = /datum/persistent/storage/smartfridge/sheet_storage/lossy
|
||||
@@ -1,21 +1,46 @@
|
||||
/*
|
||||
* Medical
|
||||
*/
|
||||
/obj/machinery/smartfridge/medbay
|
||||
name = "\improper Refrigerated Medicine Storage"
|
||||
desc = "A refrigerated storage unit for securely storing medicine and chemicals."
|
||||
icon_contents = "chem"
|
||||
|
||||
/obj/machinery/smartfridge/medbay/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers) || istype(O,/obj/item/weapon/reagent_containers/glass/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/secure/medbay
|
||||
name = "\improper Refrigerated Medicine Storage"
|
||||
desc = "A refrigerated storage unit for storing medicine and chemicals."
|
||||
icon_contents = "chem"
|
||||
req_one_access = list(access_medical,access_chemistry)
|
||||
|
||||
/obj/machinery/smartfridge/secure/medbay/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/glass/))
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers) || istype(O,/obj/item/weapon/reagent_containers/glass/))
|
||||
return 1
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle/))
|
||||
return 0
|
||||
|
||||
/*
|
||||
* Virology
|
||||
*/
|
||||
/obj/machinery/smartfridge/virology
|
||||
name = "\improper Refrigerated Virus Storage"
|
||||
desc = "A refrigerated storage unit for storing viral material."
|
||||
icon_contents = "viro"
|
||||
|
||||
/obj/machinery/smartfridge/virology/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/glass/beaker/vial/))
|
||||
return 1
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/pill/))
|
||||
if(istype(O,/obj/item/weapon/virusdish/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/secure/virology
|
||||
name = "\improper Refrigerated Virus Storage"
|
||||
desc = "A refrigerated storage unit for storing viral material."
|
||||
icon_contents = "misc"
|
||||
desc = "A refrigerated storage unit for securely storing viral material."
|
||||
icon_contents = "viro"
|
||||
req_access = list(access_virology)
|
||||
|
||||
/obj/machinery/smartfridge/secure/virology/accept_check(var/obj/item/O as obj)
|
||||
@@ -25,15 +50,27 @@
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/chemistry //Is this used anywhere? It's not secure.
|
||||
/*
|
||||
* Chemistry
|
||||
*/
|
||||
/obj/machinery/smartfridge/chemistry
|
||||
name = "\improper Smart Chemical Storage"
|
||||
desc = "A refrigerated storage unit for medicine and chemical storage."
|
||||
desc = "A refrigerated storage unit for storing medicine and chemicals."
|
||||
icon_contents = "chem"
|
||||
req_one_access = list(access_chemistry)
|
||||
|
||||
/obj/machinery/smartfridge/chemistry/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers))
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers) || istype(O,/obj/item/weapon/reagent_containers/glass/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/chemistry/virology //Same
|
||||
name = "\improper Smart Virus Storage"
|
||||
desc = "A refrigerated storage unit for volatile sample storage."
|
||||
/obj/machinery/smartfridge/secure/chemistry
|
||||
name = "\improper Smart Chemical Storage"
|
||||
desc = "A refrigerated storage unit for securely storing medicine and chemicals."
|
||||
icon_contents = "chem"
|
||||
req_one_access = list(access_chemistry)
|
||||
|
||||
/obj/machinery/smartfridge/secure/chemistry/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers) || istype(O,/obj/item/weapon/reagent_containers/glass/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Xenobiological
|
||||
*/
|
||||
/obj/machinery/smartfridge/secure/extract
|
||||
name = "\improper Biological Sample Storage"
|
||||
desc = "A refrigerated storage unit for xenobiological samples."
|
||||
icon_contents = "slime"
|
||||
req_access = list(access_research)
|
||||
|
||||
/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O, /obj/item/slime_extract) || istype(O, /obj/item/slimepotion))
|
||||
return 1
|
||||
return 0
|
||||
+59
-35
@@ -1,7 +1,59 @@
|
||||
/*
|
||||
* Chef
|
||||
*/
|
||||
/obj/machinery/smartfridge/chef
|
||||
desc = "For storing all sorts of delicious foods!"
|
||||
|
||||
/obj/machinery/smartfridge/chef/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/*
|
||||
* Bartender
|
||||
*/
|
||||
/obj/machinery/smartfridge/drinks
|
||||
name = "\improper Smart Drink Storage"
|
||||
desc = "A refrigerated storage unit for tasty tasty alcohol."
|
||||
icon_contents = "drinks"
|
||||
|
||||
/obj/machinery/smartfridge/drinks/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/drinks/showcase
|
||||
name = "\improper Drink Showcase"
|
||||
icon_state = "base_showcase"
|
||||
icon_base = "showcase"
|
||||
|
||||
//Showcase needs a special icon update
|
||||
/obj/machinery/smartfridge/drinks/showcase/update_icon()
|
||||
cut_overlays()
|
||||
if(panel_open)
|
||||
add_overlay("[icon_base]-panel")
|
||||
|
||||
if(stat & (BROKEN))
|
||||
cut_overlays()
|
||||
icon_state = "[icon_base]-broken"
|
||||
|
||||
if(stat & (NOPOWER))
|
||||
icon_state = "[icon_base]-off"
|
||||
else
|
||||
icon_state = icon_base
|
||||
switch(contents.len)
|
||||
if(0)
|
||||
add_overlay("[icon_base]")
|
||||
if(1 to 3)
|
||||
add_overlay("[icon_base]-fill")
|
||||
|
||||
/*
|
||||
* Hydroponics
|
||||
*/
|
||||
/obj/machinery/smartfridge/produce
|
||||
name = "\improper Smart Produce Storage"
|
||||
desc = "For storing all sorts of perishable foods!"
|
||||
icon_contents = "boxes"
|
||||
desc = "For storing all sorts of perishable produce!"
|
||||
icon_contents = "plants"
|
||||
|
||||
/obj/machinery/smartfridge/produce/persistent
|
||||
persistent = /datum/persistent/storage/smartfridge/produce
|
||||
@@ -11,43 +63,15 @@
|
||||
|
||||
/obj/machinery/smartfridge/produce/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown/) || istype(O,/obj/item/seeds/))
|
||||
return TRUE
|
||||
return FALSE
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/drinks
|
||||
name = "\improper Smart Drink Storage"
|
||||
desc = "A refrigerated storage unit for tasty tasty alcohol."
|
||||
icon_contents = "drinks"
|
||||
|
||||
/obj/machinery/smartfridge/drinks/showcase
|
||||
name = "\improper Drink Showcase"
|
||||
icon_state = "showcase"
|
||||
icon_base = "showcase"
|
||||
|
||||
/obj/machinery/smartfridge/drinks/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/smartfridge/seeds
|
||||
/obj/machinery/smartfridge/seeds //I honestly don't know why this exists when you can store seeds in the vendor. It's not even persistent.
|
||||
name = "\improper MegaSeed Servitor"
|
||||
desc = "When you need seeds fast!"
|
||||
icon_contents = "boxes"
|
||||
icon_contents = "petri" //There's no seed base in the current batch
|
||||
|
||||
/obj/machinery/smartfridge/seeds/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/seeds/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/secure/extract
|
||||
name = "\improper Biological Sample Storage"
|
||||
desc = "A refrigerated storage unit for xenobiological samples."
|
||||
req_access = list(access_research)
|
||||
icon_contents = "drinks"
|
||||
|
||||
/obj/machinery/smartfridge/secure/extract/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O, /obj/item/slime_extract))
|
||||
return TRUE
|
||||
if(istype(O, /obj/item/slimepotion))
|
||||
return TRUE
|
||||
return FALSE
|
||||
return 0
|
||||
@@ -1,12 +1,10 @@
|
||||
/* SmartFridge. Much todo
|
||||
*/
|
||||
/obj/machinery/smartfridge
|
||||
name = "\improper SmartFridge"
|
||||
desc = "For storing all sorts of things! This one doesn't accept any of them!"
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
icon = 'icons/obj/vending_smartfridge.dmi'
|
||||
icon_state = "smartfridge"
|
||||
var/icon_base = "smartfridge" //Iconstate to base all the broken/deny/etc on
|
||||
var/icon_contents = "misc" //Overlay to put on glass to show contents
|
||||
var/icon_contents = "food" //Overlay to put on that show contents
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
use_power = USE_POWER_IDLE
|
||||
@@ -67,26 +65,35 @@
|
||||
|
||||
/obj/machinery/smartfridge/update_icon()
|
||||
cut_overlays()
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
icon_state = "[icon_base]-off"
|
||||
else
|
||||
icon_state = icon_base
|
||||
|
||||
if(panel_open)
|
||||
add_overlay("[icon_base]-panel")
|
||||
|
||||
// Fridge contents
|
||||
switch(contents.len)
|
||||
if(1 to 3)
|
||||
add_overlay("[icon_base]-[icon_contents]1")
|
||||
if(3 to 6)
|
||||
add_overlay("[icon_base]-[icon_contents]2")
|
||||
if(6 to INFINITY)
|
||||
add_overlay("[icon_base]-[icon_contents]3")
|
||||
if(stat & (BROKEN))
|
||||
cut_overlays()
|
||||
icon_state = "[icon_base]-broken"
|
||||
|
||||
/*******************
|
||||
* Item Adding
|
||||
********************/
|
||||
if(stat & (NOPOWER))
|
||||
icon_state = "[icon_base]-off"
|
||||
switch(contents.len)
|
||||
if(0)
|
||||
add_overlay("[icon_base]-0-off")
|
||||
if(1 to 3)
|
||||
add_overlay("[icon_base]-[icon_contents]1-off")
|
||||
if(3 to 6)
|
||||
add_overlay("[icon_base]-[icon_contents]2-off")
|
||||
if(6 to INFINITY)
|
||||
add_overlay("[icon_base]-[icon_contents]3-off")
|
||||
else
|
||||
icon_state = icon_base
|
||||
switch(contents.len)
|
||||
if(0)
|
||||
add_overlay("[icon_base]-0")
|
||||
if(1 to 3)
|
||||
add_overlay("[icon_base]-[icon_contents]1")
|
||||
if(3 to 6)
|
||||
add_overlay("[icon_base]-[icon_contents]2")
|
||||
if(6 to INFINITY)
|
||||
add_overlay("[icon_base]-[icon_contents]3")
|
||||
|
||||
/obj/machinery/smartfridge/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(O.is_screwdriver())
|
||||
@@ -226,6 +233,7 @@
|
||||
return TRUE
|
||||
|
||||
vend(item_records[index], amount)
|
||||
update_icon()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
@@ -247,12 +255,12 @@
|
||||
throw_item.throw_at(target,16,3,src)
|
||||
src.visible_message("<span class='warning'>[src] launches [throw_item.name] at [target.name]!</span>")
|
||||
SStgui.update_uis(src)
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
/************************
|
||||
* Secure SmartFridges
|
||||
*************************/
|
||||
|
||||
/*
|
||||
* Secure Smartfridges
|
||||
*/
|
||||
/obj/machinery/smartfridge/secure/tgui_act(action, params)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return TRUE
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
/*
|
||||
* Expert Jobs
|
||||
*/
|
||||
/obj/machinery/smartfridge
|
||||
var/expert_job = "Chef"
|
||||
/obj/machinery/smartfridge/seeds
|
||||
@@ -6,14 +9,16 @@
|
||||
expert_job = "Xenobiologist"
|
||||
/obj/machinery/smartfridge/secure/medbay
|
||||
expert_job = "Chemist"
|
||||
/obj/machinery/smartfridge/secure/chemistry
|
||||
expert_job = "Chemist"
|
||||
/obj/machinery/smartfridge/secure/virology
|
||||
expert_job = "Medical Doctor" //Virologist is an alt-title unfortunately
|
||||
/obj/machinery/smartfridge/chemistry
|
||||
expert_job = "Chemist" //Unsure what this one is used for, actually
|
||||
/obj/machinery/smartfridge/drinks
|
||||
expert_job = "Bartender"
|
||||
|
||||
// Allow thrown items into smartfridges
|
||||
/*
|
||||
* Allow thrown items into smartfridges
|
||||
*/
|
||||
/obj/machinery/smartfridge/hitby(var/atom/movable/A, speed)
|
||||
. = ..()
|
||||
if(accept_check(A) && A.thrower)
|
||||
@@ -31,12 +36,20 @@
|
||||
else if(prob(20))
|
||||
stock(A)
|
||||
|
||||
//Chemistry 'chemavator'
|
||||
/*
|
||||
* Chemistry 'chemavator' (multi-z chem storage)
|
||||
*/
|
||||
/obj/machinery/smartfridge/chemistry/chemvator
|
||||
name = "\improper Smart Chemavator - Upper"
|
||||
desc = "A refrigerated storage unit for medicine and chemical storage. Now sporting a fancy system of pulleys to lift bottles up and down."
|
||||
expert_job = "Chemist"
|
||||
var/obj/machinery/smartfridge/chemistry/chemvator/attached
|
||||
|
||||
/obj/machinery/smartfridge/chemistry/chemvator/accept_check(var/obj/item/O as obj)
|
||||
if(istype(O,/obj/item/weapon/storage/pill_bottle) || istype(O,/obj/item/weapon/reagent_containers) || istype(O,/obj/item/weapon/reagent_containers/glass/))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/smartfridge/chemistry/chemvator/down/Destroy()
|
||||
attached = null
|
||||
return ..()
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
/obj/item/weapon/tool/wirecutters/clippers
|
||||
name = "plant clippers"
|
||||
desc = "A tool used to take samples from plants."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "clippers"
|
||||
|
||||
/obj/item/weapon/tool/wirecutters/clippers/trimmers
|
||||
name = "hedgetrimmers"
|
||||
|
||||
@@ -99,7 +99,8 @@
|
||||
list(pick(/obj/item/weapon/grenade/spawnergrenade/spesscarp, /obj/item/weapon/grenade/spawnergrenade/spider, /obj/item/weapon/grenade/explosive/frag), 7) = 1,
|
||||
list(/obj/item/weapon/grenade/flashbang/clusterbang, 7) = 1,
|
||||
list(/obj/item/weapon/card/emag, 11) = 1,
|
||||
list(/obj/item/weapon/melee/shock_maul, 11) = 5,
|
||||
list(/obj/item/weapon/melee/shock_maul, 11) = 3,
|
||||
list(/obj/item/clothing/suit/storage/vest/martian_miner, 4) = 6,
|
||||
list(/obj/item/weapon/storage/backpack/sport/hyd/catchemall, 11) = 1
|
||||
))
|
||||
var/path = choice[1]
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
var/selects_bodytype = SELECTS_BODYTYPE_FALSE // Allows the species to choose from body types like custom species can, affecting suit fitting and etcetera as you would expect.
|
||||
|
||||
var/bloodsucker = FALSE // Allows safely getting nutrition from blood.
|
||||
var/bloodsucker_controlmode = "always loud" //Allows selecting between bloodsucker control modes. Always Loud corresponds to original implementation.
|
||||
|
||||
var/is_weaver = FALSE
|
||||
var/silk_production = FALSE
|
||||
|
||||
+76
-8
@@ -389,8 +389,6 @@
|
||||
set desc = "Bites prey and drains them of a significant portion of blood, feeding you in the process. You may only do this once per minute."
|
||||
set category = "Abilities"
|
||||
|
||||
if(last_special > world.time)
|
||||
return
|
||||
|
||||
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
|
||||
to_chat(src, "You cannot bite anyone in your current state!")
|
||||
@@ -400,9 +398,27 @@
|
||||
for(var/mob/living/carbon/human/M in view(1,src))
|
||||
if(!istype(M,/mob/living/silicon) && Adjacent(M))
|
||||
choices += M
|
||||
choices -= src
|
||||
|
||||
var/mob/living/carbon/human/B = tgui_input_list(src, "Who do you wish to bite?", "Suck Blood", choices)
|
||||
|
||||
var/mob/living/carbon/human/B = tgui_input_list(src, "Who do you wish to bite? Select yourself to bring up configuration for privacy and bleeding. \
|
||||
Beware! Configuration resets on new round!", "Suck Blood", choices)
|
||||
|
||||
if(B == src) //We are using this to minimize the amount of pop-ups or buttons.
|
||||
var/control_options = list("always loud", "pop-up", "intents", "always subtle")
|
||||
src.species.bloodsucker_controlmode = tgui_input_list(src,"Choose your preferred control of blood sucking. \
|
||||
You can only cause bleeding wounds with pop up and intents modes. Choosing intents prints controls to chat.", "Configure Bloodsuck", control_options, "always loud")
|
||||
if(src.species.bloodsucker_controlmode == "intents") //We are printing to chat for better readability
|
||||
to_chat(src, SPAN_NOTICE("You've chosen to use intents for blood draining. \n \
|
||||
HELP - Loud, No Bleeding \n \
|
||||
DISARM - Subtle, Causes bleeding \n \
|
||||
GRAB - Subtle, No Bleeding \n \
|
||||
HARM - Loud, Causes Bleeding"))
|
||||
return
|
||||
|
||||
if(last_special > world.time)
|
||||
to_chat(src, "You cannot suck blood so quickly in a row!")
|
||||
return
|
||||
|
||||
|
||||
if(!B || !src || src.stat) return
|
||||
|
||||
@@ -418,12 +434,64 @@
|
||||
return
|
||||
|
||||
last_special = world.time + 600
|
||||
src.visible_message("<font color='red'><b>[src] moves their head next to [B]'s neck, seemingly looking for something!</b></font>")
|
||||
|
||||
var/control_pref = src.species.bloodsucker_controlmode
|
||||
var/noise = TRUE
|
||||
var/bleed = FALSE
|
||||
|
||||
switch(control_pref)
|
||||
if("always subtle")
|
||||
noise = FALSE
|
||||
if("pop-up")
|
||||
if(tgui_alert(src, "Do you want to be subtle?", "Privacy", list("Yes", "No")) == "Yes")
|
||||
noise = FALSE
|
||||
if(tgui_alert(src, "Do you want your target to keep bleeding?", "Continue Bleeding", list("Yes", "No")) == "Yes" )
|
||||
bleed = TRUE
|
||||
if("intents")
|
||||
/*
|
||||
Logic is, with "Help", we are taking our time but it's pretty obvious..
|
||||
With "disarm", we rush the act, letting it keep bleeding
|
||||
"HURT" is self-evidently loud and bleedy
|
||||
"Grab" is subtle because we keep our prey tight and close.
|
||||
*/
|
||||
switch(src.a_intent)
|
||||
//if(I_HELP) uses default values. Added as a comment for clarity
|
||||
if(I_DISARM)
|
||||
noise = FALSE
|
||||
bleed = TRUE
|
||||
if(I_GRAB)
|
||||
noise = FALSE
|
||||
if(I_HURT)
|
||||
bleed =TRUE
|
||||
|
||||
|
||||
|
||||
|
||||
if(noise)
|
||||
src.visible_message("<font color='red'><b>[src] moves their head next to [B]'s neck, seemingly looking for something!</b></font>")
|
||||
else
|
||||
src.visible_message("<font color='red'><b>[src] moves their head next to [B]'s neck, seemingly looking for something!</b></font>", range = 1)
|
||||
|
||||
if(bleed) //Due to possibility of missing/misclick and missing the bleeding cues, we are warning the scene members of BLEEDING being on
|
||||
to_chat(src, SPAN_WARNING("This is going to cause [B] to keep bleeding!"))
|
||||
to_chat(B, SPAN_DANGER("You are going to keep bleeding from this bite!"))
|
||||
|
||||
if(do_after(src, 300, B)) //Thrirty seconds.
|
||||
if(!Adjacent(B)) return
|
||||
src.visible_message("<font color='red'><b>[src] suddenly extends their fangs and plunges them down into [B]'s neck!</b></font>")
|
||||
B.apply_damage(5, BRUTE, BP_HEAD) //You're getting fangs pushed into your neck. What do you expect????
|
||||
if(noise)
|
||||
src.visible_message("<font color='red'><b>[src] suddenly extends their fangs and plunges them down into [B]'s neck!</b></font>")
|
||||
else
|
||||
src.visible_message("<font color='red'><b>[src] suddenly extends their fangs and plunges them down into [B]'s neck!</b></font>", range = 1)
|
||||
if(bleed)
|
||||
B.apply_damage(10, BRUTE, BP_HEAD, blocked = 0, soaked = 0, sharp = TRUE, edge = FALSE)
|
||||
var/obj/item/organ/external/E = B.get_organ(BP_HEAD)
|
||||
if(!(E.status & ORGAN_BLEEDING))
|
||||
E.status |= ORGAN_BLEEDING //If 10 points of piercing didn't make the organ bleed, we are making it bleed.
|
||||
|
||||
|
||||
else
|
||||
B.apply_damage(5, BRUTE, BP_HEAD) //You're getting fangs pushed into your neck. What do you expect????
|
||||
|
||||
B.drip(80) //Remove enough blood to make them a bit woozy, but not take oxyloss.
|
||||
adjust_nutrition(400)
|
||||
sleep(50)
|
||||
@@ -1386,4 +1454,4 @@
|
||||
name = "tongue ball"
|
||||
hitsound = 'sound/vore/sunesound/pred/schlorp.ogg'
|
||||
hitsound_wall = 'sound/vore/sunesound/pred/schlorp.ogg'
|
||||
zaptype = /obj/item/projectile/beam/appendage
|
||||
zaptype = /obj/item/projectile/beam/appendage
|
||||
|
||||
@@ -148,6 +148,16 @@ YW change end */
|
||||
/datum/trait/neutral/bloodsucker
|
||||
name = "Bloodsucker, Obligate"
|
||||
desc = "Makes you unable to gain nutrition from anything but blood. To compenstate, you get fangs that can be used to drain blood from prey."
|
||||
tutorial = "This trait forces you to only consume blood - you cannot have normal food anymore. Vore is, of course, an exception! <br> \
|
||||
You can satisfy this by clicking bloodbags in your hand on harm intent, drinking from glasses, blood tomatoes \
|
||||
or finding a (un)willing donor for your appropriate appendage! <br><br> \
|
||||
Controls for taking blood from your victim can be changed at will by trying to drink from yourself. <br>\
|
||||
Intent-based control scheme: <br> \
|
||||
HELP - Loud, No Bleeding <br> \
|
||||
DISARM - Subtle, Causes bleeding <br> \
|
||||
GRAB - Subtle, No Bleeding <br> \
|
||||
HARM - Loud, Causes Bleeding"
|
||||
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("organic_food_coeff" = 0, "bloodsucker" = TRUE)
|
||||
@@ -160,6 +170,15 @@ YW change end */
|
||||
/datum/trait/neutral/bloodsucker_freeform
|
||||
name = "Bloodsucker"
|
||||
desc = "You get fangs that can be used to drain blood from prey."
|
||||
tutorial = "This trait allows you to consume blood on top of normal food! <br> \
|
||||
You can do this by clicking bloodbags in your hand on harm intent, drinking from glasses, blood tomatoes \
|
||||
or finding a (un)willing donor for your appropriate appendage! <br><br> \
|
||||
Controls for taking blood from your victim can be changed at will by trying to drink from yourself. <br>\
|
||||
Intent-based control scheme: <br> \
|
||||
HELP - Loud, No Bleeding <br> \
|
||||
DISARM - Subtle, Causes bleeding <br> \
|
||||
GRAB - Subtle, No Bleeding <br> \
|
||||
HARM - Loud, Causes Bleeding"
|
||||
cost = 0
|
||||
custom_only = FALSE
|
||||
var_changes = list("bloodsucker" = TRUE)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
/datum/trait
|
||||
var/name
|
||||
var/desc = "Contact a developer if you see this trait."
|
||||
var/tutorial = "This trait has no detailed tutorial yet. Suggest one at #Dev-Suggestions on the discord!" //Use <br> for newlines, NOT \n
|
||||
|
||||
var/cost = 0
|
||||
var/sort = TRAIT_SORT_NORMAL // Sort order, 1 before 2 before 3 etc. Alphabetical is used for same-group traits.
|
||||
@@ -32,6 +33,7 @@
|
||||
S.vars[trait] = trait_prefs[trait]
|
||||
if(TRAIT_VAREDIT_TARGET_MOB)
|
||||
H.vars[trait] = trait_prefs[trait]
|
||||
H.verbs |= /mob/living/carbon/human/proc/trait_tutorial
|
||||
return
|
||||
|
||||
//Applying trait to preferences rather than just us.
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
A new Ability given to those human mobs that have a non-zero number of traits.
|
||||
Verb is added by /datum/trait/proc/apply() in code\modules\mob\living\carbon\human\species\station\traits_vr\trait.dm file.
|
||||
This proc gets called whenever the user is spawned, resleeved, autoresleeved and so forth.
|
||||
If there are special cases that do NOT call this var that result in a completely new body -
|
||||
I will fix it once I am informed of their existence.
|
||||
Been tested - does NOT lead to multiples of the verb thanks to the |=.
|
||||
Given the apply() proc is only called if they have verbs - this should avoid it erronously popping up for traitless people.
|
||||
|
||||
This ability intends to retrieve all positive, neutral and negative traits chosen in the character set-up
|
||||
then retrieve their relevant vars by assuming the character's species has the full list. This should always work. Should
|
||||
|
||||
The ability is intended to be developed both as a to_chat() and a tgui window.
|
||||
The user is given the ability to choose which they would like whenever they press the ability to better suit whatever scenario they find themselves
|
||||
thirsty for knowledge.
|
||||
|
||||
When adding new tutorials for trait subtypes, use <br> rather than \n newlines
|
||||
|
||||
TGUI backend path: code\modules\tgui\modules\trait_tutorial_tgui.dm
|
||||
TGUI frontend path: tgui\packages\tgui\interfaces\TraitTutorial.tsx
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/trait_tutorial()
|
||||
set name = "Explain Custom Traits"
|
||||
set desc = "Click this verb to obtain a detailed tutorial on your selected traits. "
|
||||
set category = "Abilities"
|
||||
var/datum/tgui_module/trait_tutorial_tgui/fancy_UI
|
||||
if(!fancy_UI)
|
||||
fancy_UI = new /datum/tgui_module/trait_tutorial_tgui/ //Preventing a bunch of instances being spawned all over the place. Hopefully
|
||||
|
||||
|
||||
|
||||
var/list/list_of_traits = species.traits
|
||||
if(!LAZYLEN(list_of_traits)) //Although we shouldn't show up if no traits, leaving this in case someone loses theirs after (re)spawning.
|
||||
to_chat(usr, SPAN_NOTICE("You do not have any custom traits!"))
|
||||
return //Dont want an empty TGUI panel and list by accident after all.
|
||||
|
||||
|
||||
var/UI_choice = tgui_alert(src, "Would you like the tutorial text to be printed to chat?", "Choose preferred tutorial interface", list("TGUI","To Chat", "Cancel"))
|
||||
if(UI_choice == "Cancel")
|
||||
return
|
||||
|
||||
//Initializing associative lists
|
||||
var/trait_names = list() //List of keys
|
||||
var/trait_category = list() // name:category
|
||||
var/trait_desc = list() // name:desc
|
||||
var/trait_tutorial = list() //name:tutorial
|
||||
for(var/trait in list_of_traits)
|
||||
var/datum/trait/T = all_traits[trait]
|
||||
trait_names += T.name
|
||||
trait_desc[T.name] = T.desc
|
||||
trait_tutorial[T.name] = T.tutorial
|
||||
switch(T.category)
|
||||
if(TRAIT_TYPE_NEGATIVE)
|
||||
trait_category[T.name] = "Negative Trait"
|
||||
if(TRAIT_TYPE_NEUTRAL)
|
||||
trait_category[T.name] = "Neutral Trait"
|
||||
if(TRAIT_TYPE_POSITIVE)
|
||||
trait_category[T.name] = "Positive Trait"
|
||||
|
||||
|
||||
if(UI_choice == "To Chat")
|
||||
var/to_chat_choice = tgui_input_list(usr, "Please choose the trait to be explained", "Print to Chat", trait_names, null)
|
||||
if(to_chat_choice)
|
||||
to_chat(usr,SPAN_NOTICE("<b>Name:</b> [to_chat_choice] \n <b>Category:</b> [trait_category[to_chat_choice]] \n <b>Description:</b> [trait_desc[to_chat_choice]] \n \
|
||||
<b>Guide:</b> \n [trait_tutorial[to_chat_choice]]"))
|
||||
|
||||
|
||||
else if(UI_choice == "TGUI")
|
||||
|
||||
fancy_UI.set_vars(trait_names, trait_category, trait_desc, trait_tutorial)
|
||||
fancy_UI.tgui_interact(usr)
|
||||
@@ -264,12 +264,14 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
head.eye_icon = initial(headtypepath.eye_icon)
|
||||
head.eye_icon_location = initial(headtypepath.eye_icon_location)
|
||||
icon_key += "[head.eye_icon]"
|
||||
var/wholeicontransparent = TRUE
|
||||
for(var/organ_tag in species.has_limbs)
|
||||
var/obj/item/organ/external/part = organs_by_name[organ_tag]
|
||||
if(isnull(part) || part.is_stump() || part.is_hidden_by_sprite_accessory()) //VOREStation Edit allowing tails to prevent bodyparts rendering, granting more spriter freedom for taur/digitigrade stuff.
|
||||
icon_key += "0"
|
||||
continue
|
||||
if(part)
|
||||
wholeicontransparent &&= part.transparent //VORESTATION EDIT: transparent instead of nonsolid
|
||||
icon_key += "[part.species.get_race_key(part.owner)]"
|
||||
icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]"
|
||||
icon_key += "[part.s_tone]"
|
||||
@@ -315,7 +317,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
else
|
||||
//BEGIN CACHED ICON GENERATION.
|
||||
var/obj/item/organ/external/chest = get_organ(BP_TORSO)
|
||||
base_icon = chest.get_icon()
|
||||
base_icon = chest.get_icon(skeleton, !wholeicontransparent)
|
||||
|
||||
var/apply_extra_transparency_leg = organs_by_name[BP_L_LEG] && organs_by_name[BP_R_LEG]
|
||||
var/apply_extra_transparency_foot = organs_by_name[BP_L_FOOT] && organs_by_name[BP_R_FOOT]
|
||||
|
||||
var/icon/Cutter = null
|
||||
|
||||
@@ -331,9 +336,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
Cutter.Blend("#000000", ICON_MULTIPLY) // Black again.
|
||||
|
||||
for(var/obj/item/organ/external/part in organs)
|
||||
if(isnull(part) || part.is_stump() || part.is_hidden_by_sprite_accessory()) //VOREStation Edit allowing tails to prevent bodyparts rendering, granting more spriter freedom for taur/digitigrade stuff.
|
||||
if(isnull(part) || part.is_stump() || part == chest || part.is_hidden_by_sprite_accessory()) //VOREStation Edit allowing tails to prevent bodyparts rendering, granting more spriter freedom for taur/digitigrade stuff.
|
||||
continue
|
||||
var/icon/temp = part.get_icon(skeleton)
|
||||
var/icon/temp = part.get_icon(skeleton, !wholeicontransparent)
|
||||
|
||||
if((part.organ_tag in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)) && Cutter)
|
||||
temp.Blend(Cutter, ICON_AND, x = -16)
|
||||
@@ -349,16 +354,26 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!(part.icon_position & RIGHT))
|
||||
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
base_icon.Blend(temp2, ICON_OVERLAY)
|
||||
temp2.Insert(temp2,"blank",dir=NORTH) //faaaaairly certain this is more efficient than reloading temp2, doing this so we don't blend the icons twice (it matters more in transparent limbs)
|
||||
temp2.Insert(temp2,"blank",dir=SOUTH)
|
||||
temp2.Insert(temp2,"blank",dir=EAST)
|
||||
temp2.Insert(temp2,"blank",dir=WEST)
|
||||
if(part.icon_position & LEFT)
|
||||
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
|
||||
if(part.icon_position & RIGHT)
|
||||
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
|
||||
if (part.transparent && !wholeicontransparent) //apply a little (a lot) extra transparency to make it look better //VORESTATION EDIT: transparent instead of nonsolid
|
||||
if ((istype(part, /obj/item/organ/external/leg) && apply_extra_transparency_leg) || (istype(part, /obj/item/organ/external/foot) && apply_extra_transparency_foot)) //maybe
|
||||
temp2 += rgb(,,,30)
|
||||
base_icon.Blend(temp2, ICON_UNDERLAY)
|
||||
else if(part.icon_position & UNDER)
|
||||
base_icon.Blend(temp, ICON_UNDERLAY)
|
||||
else
|
||||
base_icon.Blend(temp, ICON_OVERLAY)
|
||||
|
||||
if (wholeicontransparent) //because, I mean. It's basically never gonna happen that you'll have just one non-transparent limb but if you do your icon will look meh. Still good but meh, will have some areas with higher transparencies unless you're literally just a torso and a head
|
||||
base_icon += rgb(,,,180)
|
||||
|
||||
if(!skeleton)
|
||||
if(husk)
|
||||
base_icon.ColorTone(husk_color_mod)
|
||||
@@ -384,7 +399,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
update_tail_showing()
|
||||
update_wing_showing()
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/update_skin()
|
||||
if(QDESTROYING(src))
|
||||
return
|
||||
@@ -493,10 +507,13 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
|
||||
face_standing.Blend(hair_s, ICON_OVERLAY)
|
||||
|
||||
if(head_organ.transparent) //VOREStation Edit: Prometheans are not ALWAYS transparent
|
||||
face_standing += rgb(,,,120)
|
||||
|
||||
var/icon/ears_s = get_ears_overlay()
|
||||
|
||||
if(head_organ.transparent) //VORESTATION EDIT: transparent instead of nonsolid
|
||||
face_standing += rgb(,,,120)
|
||||
if (ears_s)
|
||||
ears_s += rgb(,,,180)
|
||||
|
||||
var/image/em_block_ears
|
||||
if(ears_s)
|
||||
if(ears_s.Height() > face_standing.Height()) // Tol ears
|
||||
@@ -563,6 +580,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
eyes_icon.Blend(rgb(128,0,0), ICON_ADD)
|
||||
|
||||
// Convert to emissive at some point
|
||||
if (head_organ.transparent) //VOREStation Edit: transparent instead of nonsolid
|
||||
eyes_icon += rgb(,,,180)
|
||||
|
||||
var/image/eyes_image = image(eyes_icon)
|
||||
eyes_image.plane = PLANE_LIGHTING_ABOVE
|
||||
eyes_image.appearance_flags = appearance_flags
|
||||
@@ -987,9 +1007,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(tail_alt && tail_layer == TAIL_UPPER_LAYER)
|
||||
tail_layer = TAIL_UPPER_LAYER_ALT
|
||||
|
||||
var/obj/item/organ/external/chest = organs_by_name[BP_TORSO]
|
||||
|
||||
var/image/tail_image = get_tail_image()
|
||||
if(tail_image)
|
||||
tail_image.layer = BODY_LAYER+tail_layer
|
||||
tail_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid
|
||||
overlays_standing[tail_layer] = tail_image
|
||||
apply_layer(tail_layer)
|
||||
return
|
||||
@@ -999,7 +1022,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
//This one is actually not that bad I guess.
|
||||
if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
|
||||
var/icon/tail_s = get_tail_icon()
|
||||
overlays_standing[tail_layer] = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+tail_layer)
|
||||
tail_image = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+tail_layer)
|
||||
tail_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid
|
||||
overlays_standing[tail_layer] = tail_image
|
||||
animate_tail_reset()
|
||||
|
||||
//TODO: Is this the appropriate place for this, and not on species...?
|
||||
@@ -1102,8 +1127,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
remove_layer(WING_LOWER_LAYER)
|
||||
|
||||
var/image/wing_image = get_wing_image(FALSE)
|
||||
|
||||
var/obj/item/organ/external/chest = organs_by_name[BP_TORSO]
|
||||
|
||||
if(wing_image)
|
||||
wing_image.layer = BODY_LAYER+WING_LAYER
|
||||
wing_image.alpha = chest?.transparent ? 180 : 255 //VORESTATION EDIT: transparent instead of nonsolid
|
||||
overlays_standing[WING_LAYER] = wing_image
|
||||
if(wing_style && wing_style.multi_dir)
|
||||
wing_image = get_wing_image(TRUE)
|
||||
|
||||
@@ -350,7 +350,8 @@
|
||||
sprites = list(
|
||||
"Traumahound" = "traumavale",
|
||||
"Drake" = "draketrauma",
|
||||
"Borgi" = "borgi-trauma"
|
||||
"Borgi" = "borgi-trauma",
|
||||
"Raptor V-4" = "traumaraptor"
|
||||
)
|
||||
|
||||
/obj/item/weapon/robot_module/robot/medical/traumahound/New(var/mob/living/silicon/robot/R)
|
||||
@@ -483,7 +484,8 @@
|
||||
"Janihound model V-2" = "J9",
|
||||
"Borgi" = "borgi-jani",
|
||||
"Otieborg" = "otiej",
|
||||
"Drake" = "drakejanit"
|
||||
"Drake" = "drakejanit",
|
||||
"Raptor V-4" = "janiraptor"
|
||||
)
|
||||
can_be_pushed = 0
|
||||
|
||||
@@ -654,7 +656,8 @@
|
||||
"V2 Engidog" = "thottbot",
|
||||
"EngiHound" = "engihound",
|
||||
"EngiHoundDark" = "engihounddark",
|
||||
"Drake" = "drakeeng"
|
||||
"Drake" = "drakeeng",
|
||||
"Raptor V-4" = "engiraptor"
|
||||
)
|
||||
can_be_pushed = 0
|
||||
|
||||
@@ -874,7 +877,9 @@
|
||||
"Pinkhound" = "k69",
|
||||
"ServicehoundV2" = "serve2",
|
||||
"ServicehoundV2 Darkmode" = "servedark",
|
||||
"Drake" = "drakemine"
|
||||
"Drake" = "drakemine",
|
||||
"Raptor V-4" = "serviraptor",
|
||||
"Raptor V-4000" = "fancyraptor"
|
||||
)
|
||||
can_be_pushed = 0
|
||||
|
||||
@@ -948,7 +953,8 @@
|
||||
"KMine" = "kmine",
|
||||
"CargoHound" = "cargohound",
|
||||
"CargoHoundDark" = "cargohounddark",
|
||||
"Drake" = "drakemine"
|
||||
"Drake" = "drakemine",
|
||||
"Raptor V-4" = "mineraptor"
|
||||
)
|
||||
can_be_pushed = 0
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
if(wideborg == TRUE)
|
||||
if(icontype == "Drake") // Why, Why can't we have normal nice things
|
||||
icon = 'icons/mob/drakeborg/drakeborg_vr.dmi'
|
||||
else if(icontype == "Raptor V-4") //Added for raptor sprites
|
||||
else if(icontype == "Raptor V-4" || icontype == "Raptor V-4000") //Added for raptor sprites
|
||||
icon = 'icons/mob/raptorborg/raptor.dmi'
|
||||
/*YW EDIT
|
||||
else
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
selective_preference = client.prefs_vr.selective_preference
|
||||
appendage_color = client.prefs_vr.appendage_color
|
||||
appendage_alt_setting = client.prefs_vr.appendage_alt_setting
|
||||
eating_privacy_global = client.prefs_vr.eating_privacy_global
|
||||
|
||||
drop_vore = client.prefs_vr.drop_vore
|
||||
stumble_vore = client.prefs_vr.stumble_vore
|
||||
|
||||
@@ -916,4 +916,11 @@
|
||||
icon_state = "zaprat"
|
||||
extra_overlay = "zaprat-tips"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/ears/kara //SatinIsle Fluff Item
|
||||
name = "Pterokara horn"
|
||||
desc = ""
|
||||
icon = 'icons/mob/vore/ears_vr.dmi'
|
||||
icon_state = "kara_horn"
|
||||
ckeys_allowed = list("satinisle")
|
||||
@@ -975,3 +975,9 @@
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_R_LEG, BP_L_LEG, BP_GROIN)
|
||||
|
||||
/datum/sprite_accessory/marking/vr/nevrean_long
|
||||
name = "Long Snout"
|
||||
icon = 'icons/mob/human_races/markings_vr.dmi'
|
||||
icon_state = "nevrean_long"
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
body_parts = list(BP_HEAD)
|
||||
|
||||
@@ -1337,6 +1337,12 @@
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/tail/kara //SatinIsle fluff item
|
||||
name = "Pterokara Tail"
|
||||
icon = 'icons/mob/vore/tails_vr.dmi'
|
||||
icon_state = "kara_tail"
|
||||
ckeys_allowed = list("satinisle")
|
||||
|
||||
//LONG TAILS ARE NOT TAUR BUTTS >:O
|
||||
/datum/sprite_accessory/tail/longtail
|
||||
name = "You should not see this..."
|
||||
|
||||
@@ -319,3 +319,10 @@
|
||||
icon_state = "sectdrone_wing"
|
||||
do_colouration = 1
|
||||
color_blend_mode = ICON_MULTIPLY
|
||||
|
||||
/datum/sprite_accessory/wing/kara //SatinIsle Fluff Item
|
||||
name = "Pterokara wings"
|
||||
desc = ""
|
||||
icon = 'icons/mob/vore/wings_vr.dmi'
|
||||
icon_state = "feathered_kara"
|
||||
ckeys_allowed = list("satinisle")
|
||||
@@ -79,7 +79,7 @@ var/global/list/limb_icon_cache = list()
|
||||
|
||||
return res
|
||||
|
||||
/obj/item/organ/external/proc/get_icon(var/skeletal)
|
||||
/obj/item/organ/external/proc/get_icon(var/skeletal, var/can_apply_transparency = TRUE)
|
||||
|
||||
for(var/M in markings)
|
||||
var/datum/sprite_accessory/marking/mark = markings[M]["datum"]
|
||||
@@ -107,6 +107,8 @@ var/global/list/limb_icon_cache = list()
|
||||
if(owner && owner.gender == FEMALE)
|
||||
gender = "f"
|
||||
|
||||
var/should_apply_transparency = FALSE
|
||||
|
||||
if(!force_icon_key)
|
||||
icon_cache_key = "[icon_name]_[species ? species.get_bodytype() : SPECIES_HUMAN]" //VOREStation Edit
|
||||
else
|
||||
@@ -131,9 +133,11 @@ var/global/list/limb_icon_cache = list()
|
||||
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
else if (robotic >= ORGAN_ROBOT)
|
||||
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
|
||||
should_apply_transparency = TRUE
|
||||
apply_colouration(mob_icon)
|
||||
else
|
||||
mob_icon = new /icon(species.get_icobase(owner, (status & ORGAN_MUTATED)), "[icon_name][gender ? "_[gender]" : ""]")
|
||||
should_apply_transparency = TRUE
|
||||
apply_colouration(mob_icon)
|
||||
|
||||
//Body markings, actually does not include head this time. Done separately above.
|
||||
@@ -165,6 +169,7 @@ var/global/list/limb_icon_cache = list()
|
||||
|
||||
if(model)
|
||||
icon_cache_key += "_model_[model]"
|
||||
should_apply_transparency = TRUE
|
||||
apply_colouration(mob_icon)
|
||||
if(owner && owner.synth_markings)
|
||||
for(var/M in markings)
|
||||
@@ -184,6 +189,9 @@ var/global/list/limb_icon_cache = list()
|
||||
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
|
||||
// VOREStation edit ends here
|
||||
|
||||
if (transparent && !istype(src,/obj/item/organ/external/head) && can_apply_transparency && should_apply_transparency) //VORESTATION EDIT: transparent instead of nonsolid
|
||||
mob_icon += rgb(,,,180) //do it here so any markings become transparent as well
|
||||
|
||||
dir = EAST
|
||||
icon = mob_icon
|
||||
return mob_icon
|
||||
@@ -218,9 +226,6 @@ var/global/list/limb_icon_cache = list()
|
||||
icon_cache_key += "_color_[s_col[1]]_[s_col[2]]_[s_col[3]]_[ICON_ADD]"
|
||||
//VOREStation Edit End
|
||||
|
||||
// Translucency.
|
||||
if(transparent) applying += rgb(,,,180) // SO INTUITIVE TY BYOND //VOREStation Edit
|
||||
|
||||
return applying
|
||||
|
||||
/obj/item/organ/external/var/icon_cache_key
|
||||
|
||||
@@ -339,7 +339,7 @@
|
||||
"<span class='notice'>You make \the [I] kiss \the [src]!.</span>")
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/external/head/get_icon()
|
||||
/obj/item/organ/external/head/get_icon(var/skeletal, var/can_apply_transparency = TRUE)
|
||||
..()
|
||||
|
||||
//The overlays are not drawn on the mob, they are used for if the head is removed and becomes an item
|
||||
@@ -400,6 +400,9 @@
|
||||
|
||||
add_overlay(get_hair_icon())
|
||||
|
||||
if (transparent && can_apply_transparency) //VOREStation Edit: transparent instead of nonsolid
|
||||
mob_icon += rgb(,,,180) //do it here so any markings become transparent as well
|
||||
|
||||
return mob_icon
|
||||
|
||||
/obj/item/organ/external/head/skrell
|
||||
|
||||
@@ -281,4 +281,4 @@
|
||||
/obj/item/ammo_magazine/ammo_box/examine(mob/user)
|
||||
. = ..()
|
||||
|
||||
. += to_chat(usr, "<span class='notice'>Alt-click to extract contents</span>")
|
||||
. += to_chat(usr, "<span class='notice'>Alt-click to extract contents.</span>")
|
||||
@@ -80,6 +80,8 @@
|
||||
var/sel_mode = 1 //index of the currently selected mode
|
||||
var/list/firemodes = list()
|
||||
|
||||
var/reload_time = 1 //Base reload time in seconds
|
||||
|
||||
//aiming system stuff
|
||||
var/keep_aim = 1 //1 for keep shooting until aim is lowered
|
||||
//0 for one bullet after tarrget moves and aim is lowered
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
var/modifystate
|
||||
var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge
|
||||
|
||||
reload_time = 5 //Energy weapons are slower to reload than ballistics by default, but this is no change from current values
|
||||
|
||||
//self-recharging
|
||||
var/self_recharge = 0 //if set, the weapon will recharge itself
|
||||
var/use_external_power = 0 //if set, the weapon will look for an external power source to draw from, otherwise it recharges magically
|
||||
@@ -113,8 +115,8 @@
|
||||
if(!power_supply) return null
|
||||
if(!ispath(projectile_type)) return null
|
||||
if(!power_supply.checked_use(charge_cost)) return null
|
||||
var/mob/living/M = loc // TGMC Ammo HUD
|
||||
if(istype(M)) // TGMC Ammo HUD
|
||||
var/mob/living/M = loc // TGMC Ammo HUD
|
||||
if(istype(M)) // TGMC Ammo HUD
|
||||
M?.hud_used.update_ammo_hud(M, src)
|
||||
return new projectile_type(src)
|
||||
|
||||
@@ -129,7 +131,7 @@
|
||||
to_chat(user, "<span class='notice'>[src] already has a power cell.</span>")
|
||||
else
|
||||
user.visible_message("[user] is reloading [src].", "<span class='notice'>You start to insert [P] into [src].</span>")
|
||||
if(do_after(user, 5 * P.w_class))
|
||||
if(do_after(user, reload_time * P.w_class))
|
||||
user.remove_from_mob(P)
|
||||
power_supply = P
|
||||
P.loc = src
|
||||
|
||||
@@ -17,6 +17,8 @@
|
||||
var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine
|
||||
var/obj/item/ammo_casing/chambered = null
|
||||
|
||||
reload_time = 1 //Ballistics reload fast, but not instantly
|
||||
|
||||
//For SINGLE_CASING or SPEEDLOADER guns
|
||||
var/max_shells = 0 //the number of casings that will fit inside
|
||||
var/ammo_type = null //the type of ammo that the gun comes preloaded with
|
||||
@@ -54,9 +56,9 @@
|
||||
chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len]
|
||||
if(handle_casings != HOLD_CASINGS)
|
||||
ammo_magazine.stored_ammo -= chambered
|
||||
|
||||
var/mob/living/M = loc // TGMC Ammo HUD
|
||||
if(istype(M)) // TGMC Ammo HUD
|
||||
|
||||
var/mob/living/M = loc // TGMC Ammo HUD
|
||||
if(istype(M)) // TGMC Ammo HUD
|
||||
M?.hud_used.update_ammo_hud(M, src)
|
||||
|
||||
if (chambered)
|
||||
@@ -102,9 +104,9 @@
|
||||
|
||||
if(handle_casings != HOLD_CASINGS)
|
||||
chambered = null
|
||||
|
||||
var/mob/living/M = loc // TGMC Ammo HUD
|
||||
if(istype(M)) // TGMC Ammo HUD
|
||||
|
||||
var/mob/living/M = loc // TGMC Ammo HUD
|
||||
if(istype(M)) // TGMC Ammo HUD
|
||||
M?.hud_used.update_ammo_hud(M, src)
|
||||
|
||||
|
||||
@@ -121,12 +123,13 @@
|
||||
if(ammo_magazine)
|
||||
to_chat(user, "<span class='warning'>[src] already has a magazine loaded.</span>") //already a magazine here
|
||||
return
|
||||
user.remove_from_mob(AM)
|
||||
AM.loc = src
|
||||
ammo_magazine = AM
|
||||
user.visible_message("[user] inserts [AM] into [src].", "<span class='notice'>You insert [AM] into [src].</span>")
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
if(do_after(user, reload_time * AM.w_class))
|
||||
user.remove_from_mob(AM)
|
||||
AM.loc = src
|
||||
ammo_magazine = AM
|
||||
user.visible_message("[user] inserts [AM] into [src].", "<span class='notice'>You insert [AM] into [src].</span>")
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
playsound(src, 'sound/weapons/flipblade.ogg', 50, 1)
|
||||
if(SPEEDLOADER)
|
||||
if(loaded.len >= max_shells)
|
||||
to_chat(user, "<span class='warning'>[src] is full!</span>")
|
||||
@@ -140,11 +143,12 @@
|
||||
loaded += C
|
||||
AM.stored_ammo -= C //should probably go inside an ammo_magazine proc, but I guess less proc calls this way...
|
||||
count++
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
if(count)
|
||||
user.visible_message("[user] reloads [src].", "<span class='notice'>You load [count] round\s into [src].</span>")
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
if(do_after(user, reload_time * AM.w_class))
|
||||
if(count)
|
||||
user.visible_message("[user] reloads [src].", "<span class='notice'>You load [count] round\s into [src].</span>")
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
AM.update_icon()
|
||||
else if(istype(A, /obj/item/ammo_casing))
|
||||
var/obj/item/ammo_casing/C = A
|
||||
@@ -154,11 +158,12 @@
|
||||
to_chat(user, "<span class='warning'>[src] is full.</span>")
|
||||
return
|
||||
|
||||
user.remove_from_mob(C)
|
||||
C.loc = src
|
||||
loaded.Insert(1, C) //add to the head of the list
|
||||
user.visible_message("[user] inserts \a [C] into [src].", "<span class='notice'>You insert \a [C] into [src].</span>")
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
if(do_after(user, reload_time * C.w_class))
|
||||
user.remove_from_mob(C)
|
||||
C.loc = src
|
||||
loaded.Insert(1, C) //add to the head of the list
|
||||
user.visible_message("[user] inserts \a [C] into [src].", "<span class='notice'>You insert \a [C] into [src].</span>")
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
|
||||
else if(istype(A, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/storage = A
|
||||
@@ -179,7 +184,7 @@
|
||||
sleep(1 SECOND)
|
||||
|
||||
update_icon()
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
|
||||
//attempts to unload src. If allow_dump is set to 0, the speedloader unloading method will be disabled
|
||||
/obj/item/weapon/gun/projectile/proc/unload_ammo(mob/user, var/allow_dump=1)
|
||||
@@ -189,7 +194,7 @@
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
ammo_magazine.update_icon()
|
||||
ammo_magazine = null
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
else if(loaded.len)
|
||||
//presumably, if it can be speed-loaded, it can be speed-unloaded.
|
||||
if(allow_dump && (load_method & SPEEDLOADER))
|
||||
@@ -208,11 +213,11 @@
|
||||
user.put_in_hands(C)
|
||||
user.visible_message("[user] removes \a [C] from [src].", "<span class='notice'>You remove \a [C] from [src].</span>")
|
||||
playsound(src, 'sound/weapons/empty.ogg', 50, 1)
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] is empty.</span>")
|
||||
update_icon()
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
|
||||
/obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob)
|
||||
..()
|
||||
@@ -243,7 +248,7 @@
|
||||
ammo_magazine.update_icon()
|
||||
ammo_magazine = null
|
||||
update_icon() //make sure to do this after unsetting ammo_magazine
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
user.hud_used.update_ammo_hud(user, src)
|
||||
|
||||
/obj/item/weapon/gun/projectile/examine(mob/user)
|
||||
. = ..()
|
||||
@@ -320,7 +325,7 @@
|
||||
for(var/obj/item/ammo_casing/bullet in ammo_magazine.stored_ammo)
|
||||
if(bullet.BB)
|
||||
shots_left++
|
||||
|
||||
|
||||
if(shots_left > 0)
|
||||
return shots_left
|
||||
else
|
||||
@@ -332,7 +337,7 @@
|
||||
for(var/obj/item/ammo_casing/bullet in loaded)
|
||||
if(bullet.BB) // Only increment how many shots we have left if we're loaded.
|
||||
shots_left++
|
||||
|
||||
|
||||
if(shots_left > 0)
|
||||
return shots_left
|
||||
else
|
||||
|
||||
@@ -297,7 +297,7 @@
|
||||
|
||||
|
||||
|
||||
var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand
|
||||
var/syringestab_amount_transferred = rand(max(reagents.total_volume - 10, 0), (reagents.total_volume - 5)) //nerfed by popular demand
|
||||
var/contained = reagents.get_reagents()
|
||||
var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
|
||||
if(isnull(trans)) trans = 0
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
var/obj/structure/disposaloutlet/P = new /obj/structure/disposaloutlet(src.loc)
|
||||
src.transfer_fingerprints_to(P)
|
||||
P.set_dir(dir)
|
||||
P.target = get_ranged_target_turf(src, dir, 10) //TODO: replace this with a proc parameter or other cleaner
|
||||
var/obj/structure/disposalpipe/trunk/Trunk = CP
|
||||
Trunk.linked = P
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/**
|
||||
* tgui external
|
||||
/*!
|
||||
* External tgui definitions, such as src_object APIs.
|
||||
*
|
||||
* Contains all external tgui declarations.
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
Verb/Main definition path: code\modules\mob\living\carbon\human\species\station\traits_vr\traits_tutorial.dm
|
||||
Frontend path: tgui\packages\tgui\interfaces\TraitTutorial.tsx
|
||||
*/
|
||||
|
||||
/datum/tgui_module/trait_tutorial_tgui
|
||||
name = "Explain Custom Traits"
|
||||
tgui_id = "TraitTutorial"
|
||||
var/trait_names = list()
|
||||
var/trait_category = list() // name:category
|
||||
var/trait_desc = list() // name:desc
|
||||
var/trait_tutorial = list() //name:tutorial
|
||||
var/trait_selected = ""
|
||||
|
||||
/datum/tgui_module/trait_tutorial_tgui/proc/set_vars(list/names, list/categories, list/descriptions, list/tutorials)
|
||||
trait_names = names
|
||||
trait_category = categories
|
||||
trait_desc = descriptions
|
||||
trait_tutorial = tutorials
|
||||
|
||||
/datum/tgui_module/trait_tutorial_tgui/tgui_interact(mob/living/carbon/human/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, tgui_id, name)
|
||||
ui.open()
|
||||
|
||||
/datum/tgui_module/trait_tutorial_tgui/tgui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["names"] = trait_names //passes a list of strings
|
||||
data["descriptions"] = trait_desc //passes an assoc list as obj
|
||||
data["categories"] = trait_category //passes an assoc list as obj
|
||||
data["tutorials"] = trait_tutorial //passes an assoc list as obj
|
||||
data["selection"] = trait_selected //passes a string
|
||||
return data
|
||||
|
||||
/datum/tgui_module/trait_tutorial_tgui/tgui_act(action, params)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
if(action == "select_trait")
|
||||
var/selection = params["name"]
|
||||
trait_selected = selection
|
||||
|
||||
|
||||
. = TRUE
|
||||
|
||||
/datum/tgui_module/trait_tutorial_tgui/tgui_state(mob/user)
|
||||
return GLOB.tgui_always_state
|
||||
@@ -1,6 +1,9 @@
|
||||
/**
|
||||
/*!
|
||||
* Base state and helpers for states. Just does some sanity checks,
|
||||
* implement a proper state for in-depth checks.
|
||||
*
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* tgui state: admin_state
|
||||
*
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* tgui state: always_state
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* tgui state: conscious_state
|
||||
*
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* tgui state: contained_state
|
||||
*
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* tgui state: deep_inventory_state
|
||||
*
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/*!
|
||||
* Copyright (c) 2020 Aleksej Komarov
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/**
|
||||
* tgui state: default_state
|
||||
*
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user