This commit is contained in:
izac112
2023-06-03 19:53:45 +02:00
608 changed files with 17985 additions and 4722 deletions
+1 -1
View File
@@ -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(
+152 -141
View File
@@ -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"
+3 -3
View File
@@ -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"
+18 -2
View File
@@ -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()
+1 -1
View File
@@ -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
+16 -2
View File
@@ -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)
+18 -6
View File
@@ -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
+1 -1
View File
@@ -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
+20 -1
View File
@@ -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
+41
View File
@@ -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)
+73 -51
View File
@@ -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()
..()
+15 -1
View File
@@ -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."
+1
View File
@@ -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 */
)
+2 -1
View File
@@ -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
)
+1
View File
@@ -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,
+10
View File
@@ -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))
+1
View File
@@ -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
+25 -3
View File
@@ -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"
+45
View File
@@ -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"
+1
View File
@@ -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"
+14
View File
@@ -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
+40 -22
View File
@@ -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)
+7
View File
@@ -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)
+159
View File
@@ -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
+12
View File
@@ -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"
+12 -6
View File
@@ -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"
+92 -1
View File
@@ -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,
+20 -1
View File
@@ -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)
+2 -1
View File
@@ -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
))
+17 -2
View File
@@ -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
@@ -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"
+2 -1
View File
@@ -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
@@ -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")
+9 -4
View File
@@ -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
+4 -1
View File
@@ -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
+1 -1
View File
@@ -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>")
+2
View File
@@ -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
+5 -3
View File
@@ -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
+34 -29
View File
@@ -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
+4 -3
View File
@@ -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
+4 -1
View File
@@ -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
*/
/**
+5
View File
@@ -1,3 +1,8 @@
/*!
* Copyright (c) 2020 Aleksej Komarov
* SPDX-License-Identifier: MIT
*/
/**
* tgui state: admin_state
*
+4
View File
@@ -1,3 +1,7 @@
/*!
* Copyright (c) 2020 Aleksej Komarov
* SPDX-License-Identifier: MIT
*/
/**
* tgui state: always_state
+5
View File
@@ -1,3 +1,8 @@
/*!
* Copyright (c) 2020 Aleksej Komarov
* SPDX-License-Identifier: MIT
*/
/**
* tgui state: conscious_state
*
+5
View File
@@ -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
*
+5
View File
@@ -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