Merge branch 'master' into upstream-merge-11065
@@ -11,7 +11,7 @@ env:
|
||||
jobs:
|
||||
autochangelog:
|
||||
name: Autochangelog
|
||||
runs-on: ubuntu-16.04
|
||||
runs-on: ubuntu-20.04
|
||||
if: github.event.pull_request.merged == true
|
||||
steps:
|
||||
- uses: /actions/checkout@v2
|
||||
|
||||
@@ -10,7 +10,7 @@ env:
|
||||
jobs:
|
||||
file_tests:
|
||||
name: Run Linters
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Ensure +x on CI directory
|
||||
@@ -26,7 +26,7 @@ jobs:
|
||||
|
||||
# dreamchecker:
|
||||
# name: DreamChecker
|
||||
# runs-on: ubuntu-18.04
|
||||
# runs-on: ubuntu-20.04
|
||||
# steps:
|
||||
# - uses: actions/checkout@v2
|
||||
#
|
||||
@@ -54,7 +54,7 @@ jobs:
|
||||
|
||||
unit_tests:
|
||||
name: Integration Tests
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Ensure +x on CI directory
|
||||
@@ -69,7 +69,7 @@ jobs:
|
||||
run: |
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt update || true
|
||||
sudo apt install libc6:i386 libgcc1:i386 libstdc++6:i386 libssl1.0.0:i386 zlib1g:i386
|
||||
sudo apt install zlib1g-dev:i386 libssl-dev:i386 pkg-config:i386
|
||||
ldd librust_g.so
|
||||
- name: Unit Tests
|
||||
run: |
|
||||
|
||||
@@ -14,7 +14,7 @@ on:
|
||||
jobs:
|
||||
generate_maps:
|
||||
name: 'Generate NanoMaps'
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Clone
|
||||
uses: actions/checkout@v2
|
||||
|
||||
@@ -4,8 +4,8 @@ export SPACEMAN_DMM_VERSION=suite-1.7
|
||||
# For NanoUI + TGUI
|
||||
export NODE_VERSION=12
|
||||
# Byond Major
|
||||
export BYOND_MAJOR=513
|
||||
export BYOND_MAJOR=514
|
||||
# Byond Minor
|
||||
export BYOND_MINOR=1542
|
||||
export BYOND_MINOR=1557
|
||||
# Macro Count
|
||||
export MACRO_COUNT=4
|
||||
|
||||
@@ -114,7 +114,7 @@ SUBSYSTEM_DEF(transcore)
|
||||
else
|
||||
if(curr_MR.dead_state != MR_DEAD) //First time switching to dead
|
||||
if(curr_MR.do_notify)
|
||||
db.notify(curr_MR.mindname)
|
||||
db.notify(curr_MR)
|
||||
curr_MR.last_notification = world.time
|
||||
curr_MR.dead_state = MR_DEAD
|
||||
|
||||
@@ -250,10 +250,15 @@ SUBSYSTEM_DEF(transcore)
|
||||
|
||||
return 1
|
||||
|
||||
// Send a past-due notification to the medical radio channel.
|
||||
/datum/transcore_db/proc/notify(var/name)
|
||||
ASSERT(name)
|
||||
global_announcer.autosay("[name] is past-due for a mind backup.", "TransCore Oversight", "Medical")
|
||||
// Send a past-due notification to the proper radio channel.
|
||||
/datum/transcore_db/proc/notify(var/datum/transhuman/mind_record/MR)
|
||||
ASSERT(MR)
|
||||
var/datum/transcore_db/db = SStranscore.db_by_mind_name(MR.mindname)
|
||||
var/datum/transhuman/body_record/BR = db.body_scans[MR.mindname]
|
||||
if(!BR)
|
||||
global_announcer.autosay("[MR.mindname] is past-due for a mind backup, but lacks a corresponding body record.", "TransCore Oversight", "Medical")
|
||||
return
|
||||
global_announcer.autosay("[MR.mindname] is past-due for a mind backup.", "TransCore Oversight", BR.synthetic ? "Science" : "Medical")
|
||||
|
||||
// Called from mind_record to add itself to the transcore.
|
||||
/datum/transcore_db/proc/add_backup(var/datum/transhuman/mind_record/MR)
|
||||
@@ -295,4 +300,4 @@ SUBSYSTEM_DEF(transcore)
|
||||
return disk.stored.len
|
||||
|
||||
#undef SSTRANSCORE_BACKUPS
|
||||
#undef SSTRANSCORE_IMPLANTS
|
||||
#undef SSTRANSCORE_IMPLANTS
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
|
||||
/decl/hierarchy/outfit/job/medical/paramedic
|
||||
name = OUTFIT_JOB_NAME("Paramedic")
|
||||
uniform = /obj/item/clothing/under/rank/medical/scrubs/black
|
||||
uniform = /obj/item/clothing/under/rank/medical/paramedic
|
||||
suit = /obj/item/clothing/suit/storage/toggle/fr_jacket
|
||||
shoes = /obj/item/clothing/shoes/boots/jackboots
|
||||
l_hand = /obj/item/weapon/storage/firstaid/regular
|
||||
@@ -103,5 +103,5 @@
|
||||
|
||||
/decl/hierarchy/outfit/job/medical/paramedic/emt
|
||||
name = OUTFIT_JOB_NAME("Emergency Medical Technician")
|
||||
uniform = /obj/item/clothing/under/rank/medical/paramedic
|
||||
uniform = /obj/item/clothing/under/rank/medical/paramedic_alt
|
||||
suit = /obj/item/clothing/suit/storage/toggle/labcoat/emt
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/suit/storage/toggle/fr_jacket,
|
||||
/obj/item/clothing/mask/gas,
|
||||
/obj/item/clothing/under/rank/medical/paramedic,
|
||||
/obj/item/clothing/under/rank/medical/paramedic_alt,
|
||||
/obj/item/clothing/accessory/stethoscope,
|
||||
/obj/item/weapon/storage/firstaid/adv,
|
||||
/obj/item/clothing/shoes/boots/jackboots,
|
||||
@@ -305,8 +305,8 @@
|
||||
/datum/supply_pack/med/medicalbiosuits
|
||||
name = "Medical biohazard gear"
|
||||
contains = list(
|
||||
/obj/item/clothing/head/bio_hood = 3,
|
||||
/obj/item/clothing/suit/bio_suit = 3,
|
||||
/obj/item/clothing/head/bio_hood/modern = 3,
|
||||
/obj/item/clothing/suit/bio_suit/modern = 3,
|
||||
/obj/item/clothing/head/bio_hood/virology = 2,
|
||||
/obj/item/clothing/suit/bio_suit/cmo,
|
||||
/obj/item/clothing/head/bio_hood/cmo,
|
||||
|
||||
@@ -229,57 +229,6 @@
|
||||
|
||||
busy = FALSE
|
||||
|
||||
|
||||
/obj/structure/wheel_of_fortune
|
||||
name = "wheel of fortune"
|
||||
desc = "May fortune favour the lucky one!"
|
||||
icon = 'icons/obj/casino_ch.dmi'
|
||||
icon_state = "wheel_of_fortune"
|
||||
density = 1
|
||||
anchored = 1
|
||||
var/interval = 1
|
||||
var/busy = 0
|
||||
|
||||
var/datum/effect/effect/system/confetti_spread
|
||||
var/confetti_strength = 8
|
||||
|
||||
/obj/structure/wheel_of_fortune/verb/setinterval()
|
||||
set name = "Change interval"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
|
||||
interval = input("Put the desired interval (1-100)", "Set Interval") as num
|
||||
if(interval>100 || interval<1)
|
||||
usr << "<span class='notice'>Invalid interval.</span>"
|
||||
return
|
||||
usr << "<span class='notice'>You set the interval to [interval]</span>"
|
||||
return
|
||||
|
||||
|
||||
/obj/structure/wheel_of_fortune/attack_hand(mob/user as mob)
|
||||
if (busy)
|
||||
to_chat(user,"<span class='notice'>The wheel of fortune is already spinning!</span> ")
|
||||
return
|
||||
visible_message("<span class='notice'>\ [user] spins the wheel of fortune!</span>")
|
||||
busy = 1
|
||||
icon_state = "wheel_of_fortune_spinning"
|
||||
var/result = rand(1,interval)
|
||||
add_fingerprint(user)
|
||||
spawn(5 SECONDS)
|
||||
visible_message("<span class='notice'>The wheel of fortune stops spinning, the number is [result]!</span>")
|
||||
|
||||
src.confetti_spread = new /datum/effect/effect/system/confetti_spread()
|
||||
src.confetti_spread.attach(src) //If somehow people start dragging slot machine
|
||||
spawn(0)
|
||||
for(var/i = 1 to confetti_strength)
|
||||
src.confetti_spread.start()
|
||||
sleep(10)
|
||||
busy=0
|
||||
icon_state = "wheel_of_fortune"
|
||||
|
||||
/obj/structure/stripper_pole
|
||||
name = "stripper pole"
|
||||
icon = 'icons/obj/casino_ch.dmi'
|
||||
@@ -1009,3 +958,186 @@
|
||||
spawn_money(round(I:worth/2.5), src.loc)
|
||||
src.attack_hand(user)
|
||||
qdel(I)
|
||||
|
||||
/obj/machinery/wheel_of_fortune
|
||||
name = "wheel of fortune"
|
||||
desc = "The Wheel of Fortune! Insert chips and may fortune favour the lucky one at the next lottery!"
|
||||
icon = 'icons/obj/64x64_ch.dmi'
|
||||
icon_state = "wheel_of_fortune"
|
||||
density = 1
|
||||
anchored = 1
|
||||
pixel_x = -16
|
||||
|
||||
req_access = list(300)
|
||||
var/interval = 1
|
||||
var/busy = 0
|
||||
var/public_spin = 0
|
||||
var/lottery_sale = "disabled"
|
||||
var/lottery_price = 100
|
||||
var/lottery_entries = 0
|
||||
var/lottery_tickets = list()
|
||||
var/lottery_tickets_ckeys = list()
|
||||
|
||||
var/datum/effect/effect/system/confetti_spread
|
||||
var/confetti_strength = 15
|
||||
|
||||
|
||||
/obj/machinery/wheel_of_fortune/attack_hand(mob/user as mob)
|
||||
if (busy)
|
||||
to_chat(user,"<span class='notice'>The wheel of fortune is already spinning!</span> ")
|
||||
return
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
|
||||
switch(input(user,"Choose what to do","Wheel Of Fortune") in list("Spin the Wheel! (Not Lottery)", "Set the interval", "Cancel"))
|
||||
if("Cancel")
|
||||
return
|
||||
if("Spin the Wheel! (Not Lottery)")
|
||||
if(public_spin == 0)
|
||||
to_chat(user,"<span class='notice'>The Wheel makes a sad beep, public spins are not enabled right now..</span> ")
|
||||
return
|
||||
else
|
||||
to_chat(user,"<span class='notice'>You spin the wheel!</span> ")
|
||||
spin_the_wheel("not_lottery")
|
||||
if("Set the interval")
|
||||
setinterval()
|
||||
|
||||
|
||||
/obj/machinery/wheel_of_fortune/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (busy)
|
||||
to_chat(user,"<span class='notice'>The wheel of fortune is already spinning!</span> ")
|
||||
return
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
if(!check_access(W))
|
||||
to_chat(user, "<span class='warning'>Access Denied.</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Proper access, allowed staff controls.</span>")
|
||||
if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
|
||||
switch(input(user,"Choose what to do (Management)","Wheel Of Fortune (Management)") in list("Spin the Lottery Wheel!", "Toggle Lottery Sales", "Toggle Public Spins", "Reset Lottery", "Cancel"))
|
||||
if("Cancel")
|
||||
return
|
||||
if("Spin the Lottery Wheel!")
|
||||
to_chat(user,"<span class='notice'>You spin the wheel for the lottery!</span> ")
|
||||
spin_the_wheel("lottery")
|
||||
|
||||
if("Toggle Lottery Sales")
|
||||
if(lottery_sale == "disabled")
|
||||
lottery_sale = "enabled"
|
||||
to_chat(user,"<span class='notice'>Public Lottery sale has been enabled.</span> ")
|
||||
else
|
||||
lottery_sale = "disabled"
|
||||
to_chat(user,"<span class='notice'>Public Lottery sale has been disabled.</span> ")
|
||||
|
||||
if("Toggle Public Spins")
|
||||
if(public_spin == 0)
|
||||
public_spin = 1
|
||||
to_chat(user,"<span class='notice'>Public spins has been enabled.</span> ")
|
||||
else
|
||||
public_spin = 0
|
||||
to_chat(user,"<span class='notice'>Public spins has been disabled.</span> ")
|
||||
|
||||
if("Reset Lottery")
|
||||
var/confirm = tgui_alert(usr, "Are you sure you want to reset Lottery?", "Confirm Lottery Reset", list("Yes", "No"))
|
||||
if(confirm == "Yes")
|
||||
to_chat(user, "<span class='warning'>Lottery has been Reset!</span>")
|
||||
lottery_entries = 0
|
||||
lottery_tickets = list()
|
||||
lottery_tickets_ckeys = list()
|
||||
|
||||
if(istype(W, /obj/item/weapon/spacecasinocash))
|
||||
if(lottery_sale == "disabled")
|
||||
to_chat(user, "<span class='warning'>Lottery sales are currently disabled.</span>")
|
||||
return
|
||||
else
|
||||
if(user.client.ckey in lottery_tickets_ckeys)
|
||||
to_chat(user, "<span class='warning'>The scanner beeps in an upset manner, you already have a ticket!</span>")
|
||||
return
|
||||
|
||||
var/obj/item/weapon/spacecasinocash/C = W
|
||||
insert_chip(C, user)
|
||||
|
||||
/obj/machinery/wheel_of_fortune/proc/insert_chip(var/obj/item/weapon/spacecasinocash/cashmoney, mob/user)
|
||||
if (busy)
|
||||
to_chat(user,"<span class='notice'>The Wheel of Fortune is busy, wait for it to be done to buy a lottery ticket.</span> ")
|
||||
return
|
||||
if(cashmoney.worth < lottery_price)
|
||||
to_chat(user,"<span class='notice'>You dont have enough chips to buy a lottery ticket!</span> ")
|
||||
return
|
||||
|
||||
to_chat(user,"<span class='notice'>You put [lottery_price] credits worth of chips into the Wheel of Fortune and it pings to notify of your lottery ticket registered!</span>")
|
||||
cashmoney.worth -= lottery_price
|
||||
cashmoney.update_icon()
|
||||
|
||||
if(cashmoney.worth <= 0)
|
||||
usr.drop_from_inventory(cashmoney)
|
||||
qdel(cashmoney)
|
||||
cashmoney.update_icon()
|
||||
|
||||
lottery_entries++
|
||||
lottery_tickets += "Number.[lottery_entries] [user.name]"
|
||||
lottery_tickets_ckeys += user.client.ckey
|
||||
|
||||
/obj/machinery/wheel_of_fortune/proc/spin_the_wheel(var/mode)
|
||||
var/result = 0
|
||||
|
||||
if(mode == "not_lottery")
|
||||
busy = 1
|
||||
icon_state = "wheel_of_fortune_spinning"
|
||||
result = rand(1,interval)
|
||||
|
||||
spawn(5 SECONDS)
|
||||
visible_message("<span class='notice'>The wheel of fortune stops spinning, the number is [result]!</span>")
|
||||
src.confetti_spread = new /datum/effect/effect/system/confetti_spread()
|
||||
src.confetti_spread.attach(src) //If somehow people start dragging slot machine
|
||||
spawn(0)
|
||||
for(var/i = 1 to confetti_strength)
|
||||
src.confetti_spread.start()
|
||||
sleep(10)
|
||||
|
||||
flick("[icon_state]-winning",src)
|
||||
busy = 0
|
||||
icon_state = "wheel_of_fortune"
|
||||
|
||||
if(mode == "lottery")
|
||||
if(lottery_entries == 0)
|
||||
visible_message("<span class='notice'>There are no tickets in the system!</span>")
|
||||
return
|
||||
|
||||
busy = 1
|
||||
icon_state = "wheel_of_fortune_spinning"
|
||||
result = pick(lottery_tickets)
|
||||
|
||||
spawn(5 SECONDS)
|
||||
visible_message("<span class='notice'>The wheel of fortune stops spinning, and the winner is [result]!</span>")
|
||||
src.confetti_spread = new /datum/effect/effect/system/confetti_spread()
|
||||
src.confetti_spread.attach(src) //If somehow people start dragging slot machine
|
||||
spawn(0)
|
||||
for(var/i = 1 to confetti_strength)
|
||||
src.confetti_spread.start()
|
||||
sleep(10)
|
||||
|
||||
flick("[icon_state]-winning",src)
|
||||
busy = 0
|
||||
icon_state = "wheel_of_fortune"
|
||||
|
||||
|
||||
/obj/machinery/wheel_of_fortune/verb/setinterval()
|
||||
set name = "Change interval"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
|
||||
interval = input("Put the desired interval (1-1000)", "Set Interval") as num
|
||||
if(interval>1000 || interval<1)
|
||||
usr << "<span class='notice'>Invalid interval.</span>"
|
||||
return
|
||||
usr << "<span class='notice'>You set the interval to [interval]</span>"
|
||||
return
|
||||
@@ -13,12 +13,13 @@
|
||||
var/list/network = list()
|
||||
|
||||
var/datum/tgui_module/camera/camera
|
||||
var/camera_datum_type = /datum/tgui_module/camera
|
||||
|
||||
/obj/machinery/computer/security/Initialize()
|
||||
. = ..()
|
||||
if(!LAZYLEN(network))
|
||||
network = get_default_networks()
|
||||
camera = new(src, network)
|
||||
camera = new camera_datum_type(src, network)
|
||||
|
||||
/obj/machinery/computer/security/proc/get_default_networks()
|
||||
. = using_map.station_networks.Copy()
|
||||
@@ -67,19 +68,41 @@
|
||||
density = 0
|
||||
circuit = null
|
||||
|
||||
GLOBAL_LIST_EMPTY(entertainment_screens)
|
||||
/obj/machinery/computer/security/telescreen/entertainment
|
||||
name = "entertainment monitor"
|
||||
desc = "Damn, why do they never have anything interesting on these things?"
|
||||
icon = 'icons/obj/status_display.dmi'
|
||||
icon_screen = "entertainment"
|
||||
icon = 'icons/obj/entertainment_monitor.dmi'
|
||||
icon_state = "screen"
|
||||
icon_screen = null
|
||||
light_color = "#FFEEDB"
|
||||
light_range_on = 2
|
||||
network = list(NETWORK_THUNDER)
|
||||
circuit = /obj/item/weapon/circuitboard/security/telescreen/entertainment
|
||||
camera_datum_type = /datum/tgui_module/camera/bigscreen
|
||||
|
||||
var/obj/item/device/radio/radio = null
|
||||
var/obj/effect/overlay/vis/pinboard
|
||||
var/weakref/showing
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/Initialize()
|
||||
GLOB.entertainment_screens += src
|
||||
|
||||
var/static/icon/mask = icon('icons/obj/entertainment_monitor.dmi', "mask")
|
||||
|
||||
add_overlay("glass")
|
||||
|
||||
pinboard = new()
|
||||
pinboard.icon = icon
|
||||
pinboard.icon_state = "pinboard"
|
||||
pinboard.layer = 0.1
|
||||
pinboard.vis_flags = VIS_UNDERLAY|VIS_INHERIT_ID|VIS_INHERIT_PLANE
|
||||
pinboard.appearance_flags = KEEP_TOGETHER
|
||||
pinboard.add_filter("screen cutter", 1, alpha_mask_filter(icon = mask))
|
||||
vis_contents += pinboard
|
||||
|
||||
. = ..()
|
||||
|
||||
radio = new(src)
|
||||
radio.listening = TRUE
|
||||
radio.broadcasting = FALSE
|
||||
@@ -87,13 +110,44 @@
|
||||
radio.canhear_range = 7 // Same as default sight range.
|
||||
power_change()
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/Destroy()
|
||||
if(showing)
|
||||
stop_showing()
|
||||
vis_contents.Cut()
|
||||
qdel_null(pinboard)
|
||||
qdel_null(radio)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/Click(location, control, params)
|
||||
attack_hand(usr)
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/update_icon()
|
||||
return // NUH
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/proc/show_thing(atom/thing)
|
||||
if(showing)
|
||||
stop_showing()
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
showing = weakref(thing)
|
||||
pinboard.vis_contents = list(thing)
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/proc/stop_showing()
|
||||
// Reverse of the above
|
||||
pinboard.vis_contents = null
|
||||
showing = null
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/proc/maybe_stop_showing(weakref/thingref)
|
||||
if(showing == thingref)
|
||||
stop_showing()
|
||||
|
||||
/obj/machinery/computer/security/telescreen/entertainment/power_change()
|
||||
..()
|
||||
if(radio)
|
||||
if(stat & NOPOWER)
|
||||
radio.on = FALSE
|
||||
else
|
||||
radio.on = TRUE
|
||||
if(stat & NOPOWER)
|
||||
radio?.on = FALSE
|
||||
stop_showing()
|
||||
else
|
||||
radio?.on = TRUE
|
||||
|
||||
/obj/machinery/computer/security/wooden_tv
|
||||
name = "security camera monitor"
|
||||
|
||||
@@ -491,6 +491,19 @@
|
||||
for(var/datum/data/record/G in data_core.general)
|
||||
if((G.fields["name"] == to_despawn.real_name))
|
||||
qdel(G)
|
||||
|
||||
// Also check the hidden version of each datacore, if they're an offmap role.
|
||||
var/datum/job/J = SSjob.get_job(job)
|
||||
if(J?.offmap_spawn)
|
||||
for(var/datum/data/record/R in data_core.hidden_general)
|
||||
if((R.fields["name"] == to_despawn.real_name))
|
||||
qdel(R)
|
||||
for(var/datum/data/record/T in data_core.hidden_security)
|
||||
if((T.fields["name"] == to_despawn.real_name))
|
||||
qdel(T)
|
||||
for(var/datum/data/record/G in data_core.hidden_medical)
|
||||
if((G.fields["name"] == to_despawn.real_name))
|
||||
qdel(G)
|
||||
|
||||
icon_state = base_icon_state
|
||||
|
||||
|
||||
@@ -80,15 +80,16 @@ var/list/dispenser_presets = list()
|
||||
var/spawned = list()
|
||||
|
||||
voidsuit = new voidsuit_type(T)
|
||||
spawned += voidsuit
|
||||
spawned += voidsuit // We only add the voidsuit so the game doesn't try to put the tank/helmet/boots etc into their hands
|
||||
|
||||
// If we're supposed to make a helmet
|
||||
if(voidhelmet_type)
|
||||
// The coder may not have realized this type spawns its own helmet
|
||||
if(voidsuit.helmet)
|
||||
error("[src] created a voidsuit [voidsuit] and wants to add a helmet but it already has one")
|
||||
else
|
||||
voidsuit.attach_helmet(new voidhelmet_type())
|
||||
spawned += voidhelmet
|
||||
voidhelmet = new voidhelmet_type()
|
||||
voidsuit.attach_helmet(voidhelmet)
|
||||
// If we're supposed to make boots
|
||||
if(magboots_type)
|
||||
// The coder may not have realized thist ype spawns its own boots
|
||||
@@ -97,7 +98,6 @@ var/list/dispenser_presets = list()
|
||||
else
|
||||
magboots = new magboots_type(voidsuit)
|
||||
voidsuit.boots = magboots
|
||||
spawned += magboots
|
||||
|
||||
if(refit)
|
||||
voidsuit.refit_for_species(user.species?.get_bodytype()) // does helmet and boots if they're attached
|
||||
@@ -109,7 +109,6 @@ var/list/dispenser_presets = list()
|
||||
else
|
||||
var/obj/item/life_support = new /obj/item/device/suit_cooling_unit(voidsuit)
|
||||
voidsuit.cooler = life_support
|
||||
spawned += life_support
|
||||
else if(user.species?.breath_type)
|
||||
if(voidsuit.tank)
|
||||
error("[src] created a voidsuit [voidsuit] and wants to add a tank but it already has one")
|
||||
@@ -121,7 +120,6 @@ var/list/dispenser_presets = list()
|
||||
if(tankpath)
|
||||
var/obj/item/life_support = new tankpath(voidsuit)
|
||||
voidsuit.tank = life_support
|
||||
spawned += life_support
|
||||
else
|
||||
voidsuit.audible_message("Dispenser warning: Unable to locate suitable airtank for user.")
|
||||
|
||||
@@ -567,6 +565,27 @@ var/list/dispenser_presets = list()
|
||||
one_setting = /datum/gear_disp/voidsuit/autolok
|
||||
special_frame = "frame_grey"
|
||||
|
||||
////////////////////////////// MOEBIUS SUIT DISPENSERS ///////////////////////////
|
||||
/datum/gear_disp/voidsuit/aether
|
||||
name = "Aether Voidsuit"
|
||||
voidsuit_type = /obj/item/clothing/suit/space/void/aether
|
||||
voidhelmet_type = /obj/item/clothing/head/helmet/space/void/aether
|
||||
refit = FALSE // No animal sprites AAA!
|
||||
|
||||
/obj/machinery/gear_dispenser/suit/aether
|
||||
name = "\improper Aether Voidsuit Dispenser"
|
||||
desc = "An industrial U-Tak-It Dispenser unit designed to fetch a specific Aether-produced high-end suit."
|
||||
icon_state = "suitdispenserMB"
|
||||
dispenser_flags = GD_ONEITEM|GD_NOGREED|GD_UNLIMITED
|
||||
one_setting = /datum/gear_disp/voidsuit/aether
|
||||
|
||||
/obj/machinery/gear_dispenser/suit_fancy/aether
|
||||
name = "\improper Aether Voidsuit Dispenser"
|
||||
desc = "A commercial U-Tak-It Dispenser unit designed to fetch a specific Aether-produced high-end suit."
|
||||
dispenser_flags = GD_ONEITEM|GD_NOGREED|GD_UNLIMITED
|
||||
one_setting = /datum/gear_disp/voidsuit/aether
|
||||
special_frame = "frame_purple"
|
||||
|
||||
// Adminbuse
|
||||
/obj/machinery/gear_dispenser/vv_get_dropdown()
|
||||
. = ..()
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
var/channel = "NCS Northern Star News Feed"
|
||||
var/obj/machinery/camera/network/thunder/camera
|
||||
var/obj/item/device/radio/radio
|
||||
var/weakref/showing
|
||||
var/showing_name
|
||||
|
||||
/obj/item/device/tvcamera/New()
|
||||
..()
|
||||
@@ -45,9 +47,14 @@
|
||||
/obj/item/device/tvcamera/attack_self(mob/user)
|
||||
add_fingerprint(user)
|
||||
user.set_machine(src)
|
||||
show_ui(user)
|
||||
|
||||
/obj/item/device/tvcamera/proc/show_ui(mob/user)
|
||||
var/dat = list()
|
||||
dat += "Channel name is: <a href='?src=\ref[src];channel=1'>[channel ? channel : "unidentified broadcast"]</a><br>"
|
||||
dat += "Video streaming is <a href='?src=\ref[src];video=1'>[camera.status ? "on" : "off"]</a><br>"
|
||||
if(camera.status && showing_name)
|
||||
dat += "- You're showing [showing_name] to your viewers.<br>"
|
||||
dat += "Mic is <a href='?src=\ref[src];sound=1'>[radio.broadcasting ? "on" : "off"]</a><br>"
|
||||
dat += "Sound is being broadcasted on frequency [format_frequency(radio.frequency)] ([get_frequency_name(radio.frequency)])<br>"
|
||||
var/datum/browser/popup = new(user, "Hovercamera", "Eye Buddy", 300, 390, src)
|
||||
@@ -67,8 +74,12 @@
|
||||
camera.set_status(!camera.status)
|
||||
if(camera.status)
|
||||
to_chat(usr,"<span class='notice'>Video streaming activated. Broadcasting on channel '[channel]'</span>")
|
||||
show_tvs(loc)
|
||||
else
|
||||
to_chat(usr,"<span class='notice'>Video streaming deactivated.</span>")
|
||||
hide_tvs()
|
||||
for(var/obj/machinery/computer/security/telescreen/entertainment/ES as anything in GLOB.entertainment_screens)
|
||||
ES.stop_showing()
|
||||
update_icon()
|
||||
if(href_list["sound"])
|
||||
radio.ToggleBroadcast()
|
||||
@@ -79,6 +90,50 @@
|
||||
if(!href_list["close"])
|
||||
attack_self(usr)
|
||||
|
||||
/obj/item/device/tvcamera/proc/show_tvs(atom/thing)
|
||||
if(showing)
|
||||
hide_tvs(showing)
|
||||
|
||||
showing = weakref(thing)
|
||||
showing_name = "[thing]"
|
||||
for(var/obj/machinery/computer/security/telescreen/entertainment/ES as anything in GLOB.entertainment_screens)
|
||||
ES.show_thing(thing)
|
||||
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/device/tvcamera/proc/hide_tvs()
|
||||
if(!showing)
|
||||
return
|
||||
for(var/obj/machinery/computer/security/telescreen/entertainment/ES as anything in GLOB.entertainment_screens)
|
||||
ES.maybe_stop_showing(showing)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
showing = null
|
||||
showing_name = null
|
||||
|
||||
/obj/item/device/tvcamera/Moved(atom/old_loc, direction, forced = FALSE, movetime)
|
||||
. = ..()
|
||||
if(camera.status && loc != old_loc)
|
||||
show_tvs(loc)
|
||||
|
||||
/obj/item/device/tvcamera/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(camera.status && !isturf(target))
|
||||
show_tvs(target)
|
||||
user.visible_message("<b>[user]</b> aims [src] at [target].", "You aim [src] at [target].")
|
||||
if(user.machine == src)
|
||||
show_ui(user) // refresh the UI
|
||||
|
||||
/obj/item/device/tvcamera/process()
|
||||
if(!showing)
|
||||
return PROCESS_KILL
|
||||
|
||||
var/atom/A = showing.resolve()
|
||||
if(!A || QDELETED(A))
|
||||
show_tvs(loc)
|
||||
|
||||
if(get_dist(get_turf(src), get_turf(A)) > 5)
|
||||
show_tvs(loc)
|
||||
|
||||
/obj/item/device/tvcamera/update_icon()
|
||||
..()
|
||||
if(camera.status)
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
var/list/climbers
|
||||
var/block_turf_edges = FALSE // If true, turf edge icons will not be made on the turf this occupies.
|
||||
|
||||
var/list/connections = list("0", "0", "0", "0")
|
||||
var/list/other_connections = list("0", "0", "0", "0")
|
||||
var/list/connections
|
||||
var/list/other_connections
|
||||
var/list/blend_objects = newlist() // Objects which to blend with
|
||||
var/list/noblend_objects = newlist() //Objects to avoid blending with (such as children of listed blend objects.
|
||||
|
||||
|
||||
@@ -144,7 +144,8 @@
|
||||
var/image/I
|
||||
|
||||
for(var/i = 1 to 4)
|
||||
I = image('icons/obj/sandbags.dmi', "sandbags[connections[i]]", dir = 1<<(i-1))
|
||||
var/connect = connections?[i] || 0
|
||||
I = image('icons/obj/sandbags.dmi', "sandbags[connect]", dir = 1<<(i-1))
|
||||
I.color = material.icon_colour
|
||||
add_overlay(I)
|
||||
|
||||
|
||||
@@ -51,7 +51,8 @@
|
||||
var/image/I
|
||||
if(!hatch_open)
|
||||
for(var/i = 1 to 4)
|
||||
I = image(icon, "catwalk[connections[i]]", dir = 1<<(i-1))
|
||||
var/connect = connections?[i] || 0
|
||||
I = image(icon, "catwalk[connect]", dir = 1<<(i-1))
|
||||
add_overlay(I)
|
||||
if(plating_color)
|
||||
I = image(icon, "plated")
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
/obj/item/clothing/under/rank/nurse,
|
||||
/obj/item/clothing/under/rank/orderly,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern,
|
||||
/obj/item/clothing/suit/storage/toggle/fr_jacket,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
@@ -127,6 +128,7 @@
|
||||
/obj/item/clothing/under/rank/chief_medical_officer/skirt,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern/cmo,
|
||||
/obj/item/weapon/cartridge/cmo,
|
||||
/obj/item/clothing/gloves/sterile/latex,
|
||||
/obj/item/clothing/shoes/brown,
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
/obj/item/clothing/under/rank/research_director/rdalt,
|
||||
/obj/item/clothing/under/rank/research_director/dress_rd,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern,
|
||||
/obj/item/weapon/cartridge/rd,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/clothing/shoes/laceup/brown,
|
||||
@@ -54,6 +55,7 @@
|
||||
starts_with = list(
|
||||
/obj/item/clothing/under/rank/scientist,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/weapon/melee/umbrella, // vorestation addition,
|
||||
/obj/item/clothing/glasses/science,
|
||||
|
||||
@@ -220,6 +220,7 @@
|
||||
/obj/item/clothing/under/rank/scientist/skirt = 2,
|
||||
/obj/item/clothing/under/rank/scientist/turtleneck = 3,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat = 3,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern = 3,
|
||||
/obj/item/clothing/shoes/white = 3,
|
||||
/obj/item/clothing/shoes/slippers = 3,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/science,
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
mod_list(target, null, "list", "contents", target_index, autodetect_class = FALSE)
|
||||
if(href_list[VV_HK_LIST_REMOVE])
|
||||
var/variable = target[target_index]
|
||||
var/prompt = tgui_alert(usr, "Do you want to remove item number [target_index] from list?", "Confirm", "Yes", "No")
|
||||
var/prompt = tgui_alert(usr, "Do you want to remove item number [target_index] from list?", "Confirm", list("Yes", "No"))
|
||||
if (prompt != "Yes")
|
||||
return
|
||||
target.Cut(target_index, target_index+1)
|
||||
|
||||
@@ -1402,7 +1402,7 @@
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Other
|
||||
/datum/lore/organization/other/kitsuhana //sorry KHI, but you're not a coherent stellar government, and you're definitely not a TSC. you get to go in the Others pool.
|
||||
/datum/lore/organization/other/kitsuhana //sorry KHI, but you're not a coherent stellar government, and you're definitely not a TSC. you get to go in the Others pool. //makes sense to me!
|
||||
name = "Kitsuhana Heavy Industries"
|
||||
short_name = "" //whitespace haaaack
|
||||
desc = "A large post-scarcity amalgamation of races, Kitsuhana is no longer a company but rather a loose association of 'members' \
|
||||
|
||||
@@ -135,43 +135,39 @@
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hoodies))
|
||||
|
||||
/datum/gear/suit/labcoat
|
||||
display_name = "labcoat"
|
||||
display_name = "labcoat selection, public"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat
|
||||
|
||||
/datum/gear/suit/labcoat/blue
|
||||
display_name = "labcoat, blue"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/blue
|
||||
/datum/gear/suit/labcoat/New()
|
||||
..()
|
||||
var/list/labcoats = list(
|
||||
"White labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
"Blue-edge labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat/blue_edge,
|
||||
"Green labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat/green,
|
||||
"Orange labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat/orange,
|
||||
"Purple labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat/purple,
|
||||
"Pink labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat/pink,
|
||||
"Red labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat/red,
|
||||
"Yellow labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat/yellow
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(labcoats)
|
||||
|
||||
/datum/gear/suit/labcoat/blue_edge
|
||||
display_name = "labcoat, blue-edged"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/blue_edge
|
||||
/datum/gear/suit/labcoat_cmo
|
||||
display_name = "labcoat selection, cmo"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/cmo
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
|
||||
/datum/gear/suit/labcoat/green
|
||||
display_name = "labcoat, green"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/green
|
||||
|
||||
/datum/gear/suit/labcoat/orange
|
||||
display_name = "labcoat, orange"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/orange
|
||||
|
||||
/datum/gear/suit/labcoat/purple
|
||||
display_name = "labcoat, purple"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/purple
|
||||
|
||||
/datum/gear/suit/labcoat/pink
|
||||
display_name = "labcoat, pink"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/pink
|
||||
|
||||
/datum/gear/suit/labcoat/red
|
||||
display_name = "labcoat, red"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/red
|
||||
|
||||
/datum/gear/suit/labcoat/yellow
|
||||
display_name = "labcoat, yellow"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/yellow
|
||||
/datum/gear/suit/labcoat_cmo/New()
|
||||
..()
|
||||
var/list/labcoats = list(
|
||||
"CMO labcoat" = /obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
||||
"CMO labcoat (alt)" = /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
|
||||
"CMO labcoat (modern)" = /obj/item/clothing/suit/storage/toggle/labcoat/modern/cmo
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(labcoats)
|
||||
|
||||
/datum/gear/suit/labcoat/emt
|
||||
display_name = "labcoat, EMT (Medical)"
|
||||
display_name = "labcoat, EMT"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/emt
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
|
||||
|
||||
@@ -189,6 +185,11 @@
|
||||
path = /obj/item/clothing/suit/storage/apron/overalls
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/cyberpunk
|
||||
display_name = "cyberpunk jacket"
|
||||
path = /obj/item/clothing/suit/cyberpunk
|
||||
cost = 2
|
||||
|
||||
/datum/gear/suit/poncho
|
||||
display_name = "poncho selection"
|
||||
path = /obj/item/clothing/accessory/poncho
|
||||
@@ -203,96 +204,77 @@
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ponchos))
|
||||
|
||||
/datum/gear/suit/roles/poncho
|
||||
display_name = "poncho, cargo"
|
||||
display_name = "poncho selection, departments"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cargo
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/roles/poncho/security
|
||||
display_name = "poncho, security"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/security
|
||||
/datum/gear/suit/roles/poncho/New()
|
||||
..()
|
||||
var/list/ponchos = list(
|
||||
"Cargo poncho" = /obj/item/clothing/accessory/poncho/roles/cargo,
|
||||
"Security poncho" = /obj/item/clothing/accessory/poncho/roles/security,
|
||||
"Medical poncho" = /obj/item/clothing/accessory/poncho/roles/medical,
|
||||
"Engineering poncho" = /obj/item/clothing/accessory/poncho/roles/engineering,
|
||||
"Science poncho" = /obj/item/clothing/accessory/poncho/roles/science
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(ponchos)
|
||||
|
||||
/datum/gear/suit/roles/poncho/medical
|
||||
display_name = "poncho, medical"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/medical
|
||||
|
||||
/datum/gear/suit/roles/poncho/engineering
|
||||
display_name = "poncho, engineering"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/engineering
|
||||
/datum/gear/suit/roles/cloak
|
||||
display_name = "cloak selection, departments"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/cargo
|
||||
|
||||
/datum/gear/suit/roles/poncho/science
|
||||
display_name = "poncho, science"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/science
|
||||
/datum/gear/suit/roles/cloak/New()
|
||||
..()
|
||||
var/list/cloaks = list(
|
||||
"Cargo cloak" = /obj/item/clothing/accessory/poncho/roles/cloak/cargo,
|
||||
"Mining cloak" = /obj/item/clothing/accessory/poncho/roles/cloak/mining,
|
||||
"Security cloak" = /obj/item/clothing/accessory/poncho/roles/cloak/security,
|
||||
"Service cloak" = /obj/item/clothing/accessory/poncho/roles/cloak/service,
|
||||
"Engineer cloak" = /obj/item/clothing/accessory/poncho/roles/cloak/engineer,
|
||||
"Atmos cloak" = /obj/item/clothing/accessory/poncho/roles/cloak/atmos,
|
||||
"Research cloak" = /obj/item/clothing/accessory/poncho/roles/cloak/research,
|
||||
"Medical cloak" = /obj/item/clothing/accessory/poncho/roles/cloak/medical
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(cloaks)
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/hos
|
||||
/datum/gear/suit/roles/poncho/cloak_hos
|
||||
display_name = "cloak, head of security"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/hos
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/cmo
|
||||
/datum/gear/suit/roles/poncho/cloak_cmo
|
||||
display_name = "cloak, chief medical officer"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/cmo
|
||||
allowed_roles = list("Chief Medical Officer")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/ce
|
||||
/datum/gear/suit/roles/poncho/cloak_ce
|
||||
display_name = "cloak, chief engineer"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/ce
|
||||
allowed_roles = list("Chief Engineer")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/rd
|
||||
/datum/gear/suit/roles/poncho/cloak_rd
|
||||
display_name = "cloak, research director"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/rd
|
||||
allowed_roles = list("Research Director")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/qm
|
||||
/datum/gear/suit/roles/poncho/cloak_qm
|
||||
display_name = "cloak, quartermaster"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/qm
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/captain
|
||||
/datum/gear/suit/roles/poncho/cloak_captain
|
||||
display_name = "cloak, site manager"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/captain
|
||||
allowed_roles = list("Site Manager")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/hop
|
||||
/datum/gear/suit/roles/poncho/cloak_hop
|
||||
display_name = "cloak, head of personnel"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/hop
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/cargo
|
||||
display_name = "cloak, cargo"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/cargo
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/mining
|
||||
display_name = "cloak, mining"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/mining
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/security
|
||||
display_name = "cloak, security"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/security
|
||||
allowed_roles = list("Head of Security","Detective","Warden","Security Officer","Blueshield Guard","Security Pilot") //YW ADDITIONS
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/service
|
||||
display_name = "cloak, service"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/service
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/engineer
|
||||
display_name = "cloak, engineer"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/engineer
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/atmos
|
||||
display_name = "cloak, atmos"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/atmos
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/research
|
||||
display_name = "cloak, science"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/research
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/medical
|
||||
display_name = "cloak, medical"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/medical
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/custom //A colorable cloak
|
||||
display_name = "cloak (colorable)"
|
||||
/datum/gear/suit/roles/poncho/cloak_custom //A colorable cloak
|
||||
display_name = "cloak, colorable"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/custom
|
||||
|
||||
/datum/gear/suit/roles/poncho/cloak/custom/New()
|
||||
@@ -304,44 +286,51 @@
|
||||
path = /obj/item/clothing/suit/unathi/robe
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/black_lawyer_jacket
|
||||
display_name = "suit jacket, black"
|
||||
/datum/gear/suit/lawyer_jackets
|
||||
display_name = "suit jacket selection"
|
||||
path = /obj/item/clothing/suit/storage/toggle/internalaffairs
|
||||
|
||||
/datum/gear/suit/blue_lawyer_jacket
|
||||
display_name = "suit jacket, blue"
|
||||
path = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
|
||||
|
||||
/datum/gear/suit/purple_lawyer_jacket
|
||||
display_name = "suit jacket, purple"
|
||||
path = /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket
|
||||
/datum/gear/suit/lawyer_jackets/New()
|
||||
..()
|
||||
var/list/jackets = list(
|
||||
"Black suit jacket" = /obj/item/clothing/suit/storage/toggle/internalaffairs,
|
||||
"Blue suit jacket" = /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket,
|
||||
"Purple suit jacket" = /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(jackets)
|
||||
|
||||
/datum/gear/suit/suspenders
|
||||
display_name = "suspenders"
|
||||
path = /obj/item/clothing/suit/suspenders
|
||||
|
||||
/datum/gear/suit/forensics
|
||||
display_name = "forensics long, red"
|
||||
display_name = "forensics uniform selection (Detective)"
|
||||
path = /obj/item/clothing/suit/storage/forensics/red/long
|
||||
allowed_roles = list("Detective")
|
||||
|
||||
/datum/gear/suit/forensics/blue
|
||||
display_name = "forensics long, blue"
|
||||
path = /obj/item/clothing/suit/storage/forensics/blue/long
|
||||
allowed_roles = list("Detective")
|
||||
/datum/gear/suit/forensics/New()
|
||||
..()
|
||||
var/list/uniforms = list(
|
||||
"Red, long uniform" = /obj/item/clothing/suit/storage/forensics/red/long,
|
||||
"Blue, long uniform" = /obj/item/clothing/suit/storage/forensics/blue/long,
|
||||
"Red, short uniform" = /obj/item/clothing/suit/storage/forensics/red,
|
||||
"Blue, short uniform" = /obj/item/clothing/suit/storage/forensics/blue
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(uniforms)
|
||||
|
||||
/datum/gear/suit/forensics/blue/short
|
||||
display_name = "forensics, blue"
|
||||
path = /obj/item/clothing/suit/storage/forensics/blue
|
||||
allowed_roles = list("Detective")
|
||||
/datum/gear/suit/qm_coat
|
||||
display_name = "coat, quartermaster"
|
||||
path = /obj/item/clothing/suit/storage/qm
|
||||
allowed_roles = list("Quartermaster")
|
||||
|
||||
/datum/gear/suit/forensics/red/short
|
||||
display_name = "forensics, red"
|
||||
path = /obj/item/clothing/suit/storage/forensics/red
|
||||
allowed_roles = list("Detective")
|
||||
/datum/gear/suit/cargo_coat
|
||||
display_name = "coat, cargo tech"
|
||||
path = /obj/item/clothing/suit/storage/cargo
|
||||
allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician","Head of Personnel")
|
||||
|
||||
/obj/item/clothing/suit/storage/cargo
|
||||
|
||||
// winter coats go here
|
||||
|
||||
/datum/gear/suit/wintercoat
|
||||
display_name = "winter coat"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat
|
||||
@@ -406,7 +395,6 @@
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/science
|
||||
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist", "Xenobotanist")
|
||||
|
||||
|
||||
/datum/gear/suit/wintercoat/science/robotics
|
||||
display_name = "winter coat, robotics"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/science/robotics
|
||||
@@ -477,7 +465,6 @@
|
||||
/datum/gear/suit/wintercoat/cosmic
|
||||
display_name = "winter coat, cosmic"
|
||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/cosmic
|
||||
|
||||
// winter coats end here
|
||||
|
||||
/datum/gear/suit/varsity
|
||||
@@ -505,20 +492,18 @@
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(tracks))
|
||||
|
||||
/datum/gear/suit/flannel
|
||||
display_name = "grey flannel"
|
||||
display_name = "flannel jacket selection"
|
||||
path = /obj/item/clothing/suit/storage/flannel
|
||||
|
||||
/datum/gear/suit/flannel/red
|
||||
display_name = "red flannel"
|
||||
path = /obj/item/clothing/suit/storage/flannel/red
|
||||
|
||||
/datum/gear/suit/flannel/aqua
|
||||
display_name = "aqua flannel"
|
||||
path = /obj/item/clothing/suit/storage/flannel/aqua
|
||||
|
||||
/datum/gear/suit/flannel/brown
|
||||
display_name = "brown flannel"
|
||||
path = /obj/item/clothing/suit/storage/flannel/brown
|
||||
/datum/gear/suit/flannel/New()
|
||||
..()
|
||||
var/list/flannel = list(
|
||||
"Grey flannel" = /obj/item/clothing/suit/storage/flannel,
|
||||
"Red flannel" = /obj/item/clothing/suit/storage/flannel/red,
|
||||
"Aqua flannel" = /obj/item/clothing/suit/storage/flannel/aqua,
|
||||
"Brown flannel" = /obj/item/clothing/suit/storage/flannel/brown
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(flannel)
|
||||
|
||||
/datum/gear/suit/denim_jacket
|
||||
display_name = "denim jacket"
|
||||
@@ -544,25 +529,20 @@
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/miscellaneous/sec_dep_jacket
|
||||
display_name = "department jacket, security"
|
||||
/datum/gear/suit/miscellaneous/dep_jacket
|
||||
display_name = "department jacket selection"
|
||||
path = /obj/item/clothing/suit/storage/toggle/sec_dep_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/engi_dep_jacket
|
||||
display_name = "department jacket, engineering"
|
||||
path = /obj/item/clothing/suit/storage/toggle/engi_dep_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/supply_dep_jacket
|
||||
display_name = "department jacket, supply"
|
||||
path = /obj/item/clothing/suit/storage/toggle/supply_dep_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/sci_dep_jacket
|
||||
display_name = "department jacket, science"
|
||||
path = /obj/item/clothing/suit/storage/toggle/sci_dep_jacket
|
||||
|
||||
/datum/gear/suit/miscellaneous/med_dep_jacket
|
||||
display_name = "department jacket, medical"
|
||||
path = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
|
||||
/datum/gear/suit/miscellaneous/dep_jacket/New()
|
||||
..()
|
||||
var/list/jacket = list(
|
||||
"Security department jacket" = /obj/item/clothing/suit/storage/toggle/sec_dep_jacket,
|
||||
"Engineering department jacket" = /obj/item/clothing/suit/storage/toggle/engi_dep_jacket,
|
||||
"Cargo department jacket" = /obj/item/clothing/suit/storage/toggle/supply_dep_jacket,
|
||||
"Science department jacket" = /obj/item/clothing/suit/storage/toggle/sci_dep_jacket,
|
||||
"Medical department jacket" = /obj/item/clothing/suit/storage/toggle/med_dep_jacket
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(jacket)
|
||||
|
||||
/datum/gear/suit/miscellaneous/peacoat
|
||||
display_name = "peacoat"
|
||||
@@ -616,4 +596,4 @@
|
||||
|
||||
/datum/gear/suit/miscellaneous/cardigan/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
@@ -31,16 +31,20 @@
|
||||
path = /obj/item/clothing/suit/poncho
|
||||
|
||||
//Detective alternative
|
||||
/datum/gear/uniform/detective_alt
|
||||
display_name = "sleek modern coat, detective"
|
||||
/datum/gear/suit/detective_alt
|
||||
display_name = "sleek modern coat selection, detective"
|
||||
path = /obj/item/clothing/suit/storage/det_trench/alt
|
||||
allowed_roles = list("Head of Security", "Detective")
|
||||
|
||||
//Detective alternative
|
||||
/datum/gear/uniform/detective_alt2
|
||||
display_name = "sleek modern coat (long), detective"
|
||||
path = /obj/item/clothing/suit/storage/det_trench/alt2
|
||||
allowed_roles = list("Head of Security", "Detective")
|
||||
/datum/gear/suit/detective_alt/New()
|
||||
..()
|
||||
var/list/coats = list(
|
||||
"Modern coat (tan)" = /obj/item/clothing/suit/storage/det_trench/alt,
|
||||
"Modern coat (long, tan)" = /obj/item/clothing/suit/storage/det_trench/alt2,
|
||||
"Modern coat (black)" = /obj/item/clothing/suit/storage/det_trench/alt/black,
|
||||
"Modern coat (long, black)" = /obj/item/clothing/suit/storage/det_trench/alt2/black
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(coats)
|
||||
|
||||
//Emergency Responder jackets for Parameds & EMTs, but also general Medical Staff
|
||||
/datum/gear/suit/roles/medical/ems_jacket
|
||||
|
||||
@@ -235,4 +235,18 @@ Talon jumpsuit
|
||||
/datum/gear/uniform/talonbasic
|
||||
display_name = "ITV Jumpsuit"
|
||||
description = "A jumpsuit that is usually issued to ITV contractors, however others can purchase it to show their support towards ITV."
|
||||
path = /obj/item/clothing/under/rank/talon/basic
|
||||
path = /obj/item/clothing/under/rank/talon/basic
|
||||
|
||||
// Summer dresses
|
||||
/datum/gear/uniform/summerdress
|
||||
display_name = "summer dress selection"
|
||||
path = /obj/item/clothing/under/summerdress
|
||||
|
||||
/datum/gear/uniform/summerdress/New()
|
||||
..()
|
||||
var/list/dresses = list(
|
||||
"black and white" = /obj/item/clothing/under/summerdress,
|
||||
"blue and white" = /obj/item/clothing/under/summerdress/blue,
|
||||
"red and white" = /obj/item/clothing/under/summerdress/red
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(dresses)
|
||||
|
||||
@@ -542,7 +542,7 @@
|
||||
|
||||
// Generate and cache the on-mob icon, which is used in update_inv_head().
|
||||
var/body_type = (H && H.species.get_bodytype(H))
|
||||
var/cache_key = "[light_overlay][body_type && sprite_sheets[body_type] ? "_[body_type]" : ""]"
|
||||
var/cache_key = "[light_overlay][body_type && sprite_sheets[body_type] ? body_type : ""]"
|
||||
if(!light_overlay_cache[cache_key])
|
||||
var/use_icon = LAZYACCESS(sprite_sheets,body_type) || 'icons/mob/light_overlays.dmi'
|
||||
light_overlay_cache[cache_key] = image(icon = use_icon, icon_state = "[light_overlay]")
|
||||
@@ -736,7 +736,7 @@
|
||||
var/fire_resist = T0C+100
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
|
||||
allowed = list(/obj/item/weapon/tank/emergency/oxygen)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0)
|
||||
slot_flags = SLOT_OCLOTHING
|
||||
var/blood_overlay_type = "suit"
|
||||
blood_sprite_state = "suitblood" //Defaults to the suit's blood overlay, so that some blood renders instead of no blood.
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
|
||||
// Icons.
|
||||
var/suit_overlay
|
||||
var/suit_overlay_icon = 'icons/mob/rig_modules.dmi'
|
||||
var/suit_overlay_active // If set, drawn over icon and mob when effect is active.
|
||||
var/suit_overlay_inactive // As above, inactive.
|
||||
var/suit_overlay_used // As above, when engaged.
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
* /obj/item/rig_module/device/arch_drill
|
||||
* /obj/item/rig_module/device/anomaly_scanner
|
||||
* /obj/item/rig_module/maneuvering_jets
|
||||
* /obj/item/rig_module/foam_sprayer
|
||||
* /obj/item/rig_module/device/broadcaster
|
||||
* /obj/item/rig_module/chem_dispenser
|
||||
* /obj/item/rig_module/chem_dispenser/injector
|
||||
@@ -411,11 +410,7 @@
|
||||
jets.holder = null
|
||||
jets.ion_trail.set_up(jets)
|
||||
|
||||
/obj/item/rig_module/foam_sprayer
|
||||
|
||||
|
||||
//Deployable Mop
|
||||
|
||||
/obj/item/rig_module/mounted/mop
|
||||
|
||||
name = "mop projector"
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
*/
|
||||
|
||||
/obj/item/weapon/rig
|
||||
|
||||
name = "hardsuit control module"
|
||||
icon = 'icons/obj/rig_modules.dmi'
|
||||
desc = "A back-mounted hardsuit deployment and control mechanism."
|
||||
@@ -27,6 +26,8 @@
|
||||
unacidable = 1
|
||||
preserve_item = 1
|
||||
|
||||
var/default_mob_icon = 'icons/mob/rig_back.dmi'
|
||||
|
||||
var/suit_state //The string used for the suit's icon_state.
|
||||
|
||||
var/interface_path = "RIGSuit"
|
||||
@@ -98,22 +99,8 @@
|
||||
var/datum/effect/effect/system/spark_spread/spark_system
|
||||
var/datum/mini_hud/rig/minihud
|
||||
|
||||
/obj/item/weapon/rig/examine()
|
||||
. = ..()
|
||||
if(wearer)
|
||||
for(var/obj/item/piece in list(helmet,gloves,chest,boots))
|
||||
if(!piece || piece.loc != wearer)
|
||||
continue
|
||||
. += "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed."
|
||||
|
||||
if(src.loc == usr)
|
||||
. += "The access panel is [locked? "locked" : "unlocked"]."
|
||||
. += "The maintenance panel is [open ? "open" : "closed"]."
|
||||
. += "Hardsuit systems are [offline ? "<span class='warning'>offline</span>" : "<span class='notice'>online</span>"]."
|
||||
. += "The cooling stystem is [cooling_on ? "active" : "inactive"]."
|
||||
|
||||
if(open)
|
||||
. += "It's equipped with [english_list(installed_modules)]."
|
||||
// Action button
|
||||
action_button_name = "Hardsuit Interface"
|
||||
|
||||
/obj/item/weapon/rig/New()
|
||||
..()
|
||||
@@ -186,6 +173,23 @@
|
||||
spark_system = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/rig/examine()
|
||||
. = ..()
|
||||
if(wearer)
|
||||
for(var/obj/item/piece in list(helmet,gloves,chest,boots))
|
||||
if(!piece || piece.loc != wearer)
|
||||
continue
|
||||
. += "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed."
|
||||
|
||||
if(src.loc == usr)
|
||||
. += "The access panel is [locked? "locked" : "unlocked"]."
|
||||
. += "The maintenance panel is [open ? "open" : "closed"]."
|
||||
. += "Hardsuit systems are [offline ? "<span class='warning'>offline</span>" : "<span class='notice'>online</span>"]."
|
||||
. += "The cooling stystem is [cooling_on ? "active" : "inactive"]."
|
||||
|
||||
if(open)
|
||||
. += "It's equipped with [english_list(installed_modules)]."
|
||||
|
||||
// We only care about processing when we're on a mob
|
||||
/obj/item/weapon/rig/Moved(old_loc, direction, forced)
|
||||
if(ismob(loc))
|
||||
@@ -589,7 +593,7 @@
|
||||
|
||||
cut_overlays()
|
||||
if(!mob_icon || update_mob_icon)
|
||||
var/species_icon = 'icons/mob/rig_back.dmi'
|
||||
var/species_icon = default_mob_icon
|
||||
// Since setting mob_icon will override the species checks in
|
||||
// update_inv_wear_suit(), handle species checks here.
|
||||
if(wearer && sprite_sheets && sprite_sheets[wearer.species.get_bodytype(wearer)])
|
||||
@@ -599,7 +603,7 @@
|
||||
if(installed_modules.len)
|
||||
for(var/obj/item/rig_module/module in installed_modules)
|
||||
if(module.suit_overlay)
|
||||
chest.add_overlay(image('icons/mob/rig_modules.dmi', icon_state = "[module.suit_overlay]", dir = SOUTH))
|
||||
chest.add_overlay(image(module.suit_overlay_icon, icon_state = "[module.suit_overlay]", dir = SOUTH))
|
||||
|
||||
if(wearer)
|
||||
wearer.update_inv_shoes()
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
if(wearer && (wearer.back == src || wearer.belt == src))
|
||||
tgui_interact(usr)
|
||||
|
||||
// So the UI button clicks come here
|
||||
/obj/item/weapon/rig/ui_action_click()
|
||||
if(usr == wearer && (wearer.back == src || wearer.belt == src))
|
||||
tgui_interact(usr)
|
||||
|
||||
/obj/item/weapon/rig/verb/toggle_vision()
|
||||
|
||||
set name = "Toggle Visor"
|
||||
|
||||
@@ -53,3 +53,128 @@
|
||||
|
||||
/obj/item/weapon/rig/robotics
|
||||
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/storage/box, /obj/item/weapon/storage/belt, /obj/item/device/defib_kit/compact)
|
||||
|
||||
// 'Technomancer' hardsuit
|
||||
/obj/item/weapon/rig/focalpoint
|
||||
name = "\improper F.P.E. hardsuit control module"
|
||||
desc = "A high-end hardsuit produced by Focal Point Energistics, focused around repair and construction."
|
||||
|
||||
icon = 'icons/obj/rig_modules_vr.dmi' // the item
|
||||
default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob
|
||||
icon_state = "techno_rig"
|
||||
suit_type = "\improper F.P.E. hardsuit"
|
||||
cell_type = /obj/item/weapon/cell/hyper
|
||||
|
||||
// Copied from CE rig
|
||||
slowdown = 0
|
||||
offline_slowdown = 0
|
||||
offline_vision_restriction = 0
|
||||
rigsuit_max_pressure = 20 * ONE_ATMOSPHERE // Max pressure the rig protects against when sealed
|
||||
rigsuit_min_pressure = 0 // Min pressure the rig protects against when sealed
|
||||
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
|
||||
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE // so it's like a rig firesuit
|
||||
armor = list("melee" = 40, "bullet" = 10, "laser" = 30, "energy" = 55, "bomb" = 70, "bio" = 100, "rad" = 100)
|
||||
|
||||
chest_type = /obj/item/clothing/suit/space/rig/focalpoint
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/focalpoint
|
||||
boot_type = /obj/item/clothing/shoes/magboots/rig/focalpoint
|
||||
glove_type = /obj/item/clothing/gloves/gauntlets/rig/focalpoint
|
||||
|
||||
/obj/item/weapon/rig/focalpoint/equipped
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/maneuvering_jets,
|
||||
/obj/item/rig_module/teleporter, // Try not to set yourself on fire
|
||||
/obj/item/rig_module/device/rcd,
|
||||
/obj/item/rig_module/grenade_launcher/metalfoam
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/focalpoint
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "techno_rig"
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/suit/space/rig/focalpoint
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "techno_rig"
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/focalpoint
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/feet/mob_vr.dmi'
|
||||
icon_state = "techno_rig"
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/gloves/gauntlets/rig/focalpoint
|
||||
icon = 'icons/inventory/hands/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/hands/mob_vr.dmi'
|
||||
icon_state = "techno_rig"
|
||||
siemens_coefficient = 0
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
// 'Ironhammer' hardsuit
|
||||
/obj/item/weapon/rig/hephaestus
|
||||
name = "\improper Hephaestus hardsuit control module"
|
||||
desc = "A high-end hardsuit produced by Hephaestus Industries, focused on destroying the competition. Literally."
|
||||
|
||||
icon = 'icons/obj/rig_modules_vr.dmi' // the item
|
||||
default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob
|
||||
icon_state = "ihs_rig"
|
||||
suit_type = "\improper Hephaestus hardsuit"
|
||||
cell_type = /obj/item/weapon/cell/super
|
||||
|
||||
armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 50, "bomb" = 60, "bio" = 100, "rad" = 20)
|
||||
|
||||
chest_type = /obj/item/clothing/suit/space/rig/hephaestus
|
||||
helm_type = /obj/item/clothing/head/helmet/space/rig/hephaestus
|
||||
boot_type = /obj/item/clothing/shoes/magboots/rig/hephaestus
|
||||
glove_type = /obj/item/clothing/gloves/gauntlets/rig/hephaestus
|
||||
|
||||
/obj/item/weapon/rig/hephaestus/equipped
|
||||
initial_modules = list(
|
||||
/obj/item/rig_module/maneuvering_jets,
|
||||
/obj/item/rig_module/grenade_launcher,
|
||||
/obj/item/rig_module/mounted/egun,
|
||||
/obj/item/rig_module/mounted/energy_blade
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/rig/hephaestus
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "ihs_rig"
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/suit/space/rig/hephaestus
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "ihs_rig"
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/shoes/magboots/rig/hephaestus
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/feet/mob_vr.dmi'
|
||||
icon_state = "ihs_rig"
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/gloves/gauntlets/rig/hephaestus
|
||||
icon = 'icons/inventory/hands/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/hands/mob_vr.dmi'
|
||||
icon_state = "ihs_rig"
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
@@ -73,4 +73,161 @@
|
||||
|
||||
/obj/item/clothing/suit/space/void/refurb/mercenary/talon
|
||||
name = "talon mercenary's voidsuit"
|
||||
desc = "A refurbished early contact era voidsuit of human design. These things aren't especially good against modern weapons but they're sturdy, incredibly easy to come by, and there are lots of spare parts for repairs. Many old-timer mercs swear by these old things, even if new powered hardsuits have more features and better armor. The red markings indicate this as the mercenary variant. \"ITV TALON\" has been stamped onto each pauldron and the right side of the breastplate."
|
||||
desc = "A refurbished early contact era voidsuit of human design. These things aren't especially good against modern weapons but they're sturdy, incredibly easy to come by, and there are lots of spare parts for repairs. Many old-timer mercs swear by these old things, even if new powered hardsuits have more features and better armor. The red markings indicate this as the mercenary variant. \"ITV TALON\" has been stamped onto each pauldron and the right side of the breastplate."
|
||||
|
||||
// HEV Suits
|
||||
/obj/item/clothing/suit/space/void/hev
|
||||
name = "hazardous environment suit"
|
||||
desc = "Has a strange smell to it, but you feel like it might be an old friend."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "hev_orange"
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/suit/space/void/hev/violet
|
||||
icon_state = "hev_violet"
|
||||
desc = "Has a strange smell to it, but you feel like it might be an old friend. This one has 'Dr. Coomer' engraved on the collar."
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/hev
|
||||
name = "hazardous environment helmet"
|
||||
desc = "Has a strange smell to it, but you feel like it might be an old friend."
|
||||
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "hev_orange"
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/hev/violet
|
||||
icon_state = "hev_violet"
|
||||
desc = "Has a strange smell to it, but you feel like it might be an old friend. This one has 'Dr. Coomer' engraved on the collar."
|
||||
|
||||
// Makeshift void suit
|
||||
/obj/item/clothing/suit/space/void/makeshift
|
||||
name = "makeshift voidsuit"
|
||||
desc = "This is not something you should use if you have other options, but it's better than nothing!"
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "makeshift_void"
|
||||
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0)
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/makeshift
|
||||
name = "makeshift voidsuit helmet"
|
||||
desc = "This is not something you should use if you have other options, but it's better than nothing!"
|
||||
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "makeshift_void"
|
||||
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0)
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
// 'Custodian' armor
|
||||
/obj/item/clothing/suit/space/void/custodian
|
||||
name = "custodian suit"
|
||||
desc = "Vacuum-capable armor for a Custodian to do their duty."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "custodian"
|
||||
|
||||
armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 50, "bomb" = 40, "bio" = 0, "rad" = 20)
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/custodian
|
||||
name = "custodian helmet"
|
||||
desc = "Vacuum-capable helmet for a Custodian to do their duty."
|
||||
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "custodian"
|
||||
|
||||
armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 50, "bomb" = 40, "bio" = 0, "rad" = 20)
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
// 'Moebius' armor
|
||||
/obj/item/clothing/suit/space/void/aether
|
||||
name = "\improper Aether voidsuit"
|
||||
desc = "This suit seems rather high-end for a standard voidsuit. The air in it has a hint of 'new car smell', courtesy of Aether Atmospherics."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "moebiussuit"
|
||||
|
||||
armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 20, "bomb" = 20, "bio" = 100, "rad" = 20)
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/aether
|
||||
name = "\improper Aether voidsuit helmet"
|
||||
desc = "Aether Atmospherics thought that giving this helmet selectable colored lighting would improve market penetration. Very comfortable, regardless."
|
||||
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "moebiushelm_White"
|
||||
|
||||
armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 20, "bomb" = 20, "bio" = 100, "rad" = 20)
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/aether/verb/select_color()
|
||||
set name = "Helmet Color"
|
||||
set desc = "Change the color of [src]"
|
||||
set category = "Object"
|
||||
|
||||
var/choice = tgui_input_list(usr, "Select a new color:", "[src] Color", list("White", "Blue", "Purple", "Yellow", "Red", "Green"))
|
||||
if(!choice)
|
||||
return
|
||||
icon_state = "moebiushelm_[choice]"
|
||||
update_clothing_icon()
|
||||
to_chat(usr, "<span class='notice'>[src] color changed to: [choice]</span>")
|
||||
|
||||
// Excelsior suit
|
||||
/obj/item/clothing/suit/space/void/excelsior
|
||||
name = "\improper Excelsior voidsuit"
|
||||
desc = "A space suit from a particular spaceship: Excelsior."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "excelsior"
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
/obj/item/clothing/head/helmet/space/void/excelsior
|
||||
name = "\improper Excelsior voidsuit helmet"
|
||||
desc = "A space helmet from a particular spaceship: Excelsior."
|
||||
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "excelsior"
|
||||
|
||||
// No animal people sprites for these yet, sad times
|
||||
species_restricted = list("exclude", SPECIES_TESHARI, SPECIES_VOX, SPECIES_DIONA)
|
||||
sprite_sheets = list()
|
||||
|
||||
@@ -118,3 +118,24 @@
|
||||
/obj/item/clothing/suit/armor/pcarrier/explorer/deluxe
|
||||
name = "modular explorer suit"
|
||||
desc = "A modification of the explorer suit with a modular armor system. Requires you to insert armor plates."
|
||||
|
||||
// 'Crusader' armor
|
||||
/obj/item/clothing/suit/armor/crusader
|
||||
name = "crusader armor"
|
||||
desc = "God will protect those who defend his faith."
|
||||
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 25, "bomb" = 30, "bio" = 0, "rad" = 0)
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "crusader_suit"
|
||||
|
||||
/obj/item/clothing/head/helmet/crusader
|
||||
name = "crusader helmet"
|
||||
desc = "God will protect those who defend his faith."
|
||||
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 25, "bomb" = 30, "bio" = 0, "rad" = 0)
|
||||
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "crusader_head"
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
// Cargotech jacket
|
||||
/obj/item/clothing/suit/storage/cargo
|
||||
name = "cargo jacket"
|
||||
desc = "A jacket typically assigned to cargo technicians when it's chilly in cargonia."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "cargo_jacket"
|
||||
|
||||
// QM Coat
|
||||
/obj/item/clothing/suit/storage/qm
|
||||
name = "\improper QM coat"
|
||||
desc = "A coat typically assigned to quartermasters when it's chilly in cargonia."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "qm_coat"
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// 'Modern' labcoats
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern
|
||||
name = "modern labcoat"
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "labcoat_mod"
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern/cmo
|
||||
name = "modern cmo's labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. This one has distinct markings on the arms."
|
||||
icon_state = "labcoat_cmo_mod"
|
||||
|
||||
// 'Modern' biosuits
|
||||
/obj/item/clothing/suit/bio_suit/modern
|
||||
name = "modern bio suit"
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "bio_mod"
|
||||
|
||||
/obj/item/clothing/head/bio_hood/modern
|
||||
name = "modern bio hood"
|
||||
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "bio_mod"
|
||||
@@ -88,18 +88,24 @@
|
||||
/obj/item/clothing/suit/storage/det_trench/alt
|
||||
name = "sleek modern coat"
|
||||
desc = "A sleek overcoat made of neo-laminated fabric. Has a reasonably sized pocket on the inside."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/suit/mob_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "cyberpunksleek"
|
||||
item_state = "cyberpunksleek"
|
||||
|
||||
/obj/item/clothing/suit/storage/det_trench/alt2
|
||||
name = "sleek modern coat (long)"
|
||||
desc = "A sleek long overcoat made of neo-laminated fabric. Has a reasonably sized pocket on the inside."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/suit/mob_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "cyberpunksleek_long"
|
||||
item_state = "cyberpunksleek_long"
|
||||
|
||||
/obj/item/clothing/suit/storage/det_trench/alt/black
|
||||
icon_state = "cyberpunksleek_black"
|
||||
|
||||
/obj/item/clothing/suit/storage/det_trench/alt2/black
|
||||
icon_state = "cyberpunksleek_long_black"
|
||||
|
||||
//Talon Hoodie
|
||||
/obj/item/clothing/suit/storage/toggle/hoodie/talon
|
||||
@@ -108,4 +114,24 @@
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "talonhoodie"
|
||||
item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue")
|
||||
item_state_slots = list(slot_r_hand_str = "suit_blue", slot_l_hand_str = "suit_blue")
|
||||
|
||||
// Bladerunner coat
|
||||
/obj/item/clothing/suit/storage/bladerunner
|
||||
name = "leather coat"
|
||||
desc = "An old leather coat. Has probably seen things you wouldn't believe."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "bladerunner_coat"
|
||||
|
||||
// Cyberpunk 'orange' vest
|
||||
/obj/item/clothing/suit/cyberpunk
|
||||
name = "cyberpunk vest"
|
||||
desc = "A red vest with golden streaks. It's made out of tough materials, and can protect fairly well against bullets. Wake the fuck up, Samurai."
|
||||
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "cyberpunk"
|
||||
armor = list("melee" = 10, "bullet" = 20, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0)
|
||||
|
||||
|
||||
@@ -122,6 +122,15 @@
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic
|
||||
name = "paramedic uniform"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is the color scheme that designates a rapid first responder."
|
||||
icon_state = "paramedic"
|
||||
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
|
||||
rolled_down = -1
|
||||
rolled_sleeves = -1
|
||||
|
||||
/obj/item/clothing/under/rank/medical/paramedic_alt
|
||||
name = "short sleeve medical jumpsuit"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one has a cross on the chest denoting that the wearer is trained medical personnel."
|
||||
icon_state = "medical_short"
|
||||
|
||||
@@ -196,4 +196,32 @@
|
||||
icon_override = 'icons/inventory/uniform/mob_vr.dmi'
|
||||
icon_state = "talon_captain"
|
||||
item_state = "talon_captain"
|
||||
rolled_sleeves = 0
|
||||
rolled_sleeves = 0
|
||||
|
||||
// Excelsior uniforms
|
||||
/obj/item/clothing/under/excelsior
|
||||
name = "\improper Excelsior uniform"
|
||||
desc = "A uniform from a particular spaceship: Excelsior."
|
||||
|
||||
icon = 'icons/inventory/uniform/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
|
||||
icon_state = "excelsior_white"
|
||||
|
||||
/obj/item/clothing/under/excelsior/mixed
|
||||
icon_state = "excelsior_mixed"
|
||||
/obj/item/clothing/under/excelsior/orange
|
||||
icon_state = "excelsior_orange"
|
||||
|
||||
// Summer dresses
|
||||
/obj/item/clothing/under/summerdress
|
||||
name = "summer dress"
|
||||
desc = "A nice summer dress."
|
||||
|
||||
icon = 'icons/inventory/uniform/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
|
||||
icon_state = "summerdress"
|
||||
|
||||
/obj/item/clothing/under/summerdress/red
|
||||
icon_state = "summerdress3"
|
||||
/obj/item/clothing/under/summerdress/blue
|
||||
icon_state = "summerdress2"
|
||||
|
||||
@@ -1156,6 +1156,7 @@
|
||||
/obj/item/clothing/head/surgery/black = 5,
|
||||
/obj/item/clothing/shoes/white = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern = 5,
|
||||
/obj/item/clothing/mask/surgical = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/medical = 5,
|
||||
/obj/item/clothing/shoes/boots/winter/medical = 5
|
||||
@@ -1227,6 +1228,7 @@
|
||||
/obj/item/clothing/under/rank/scientist/skirt = 5,
|
||||
/obj/item/clothing/under/rank/scientist/turtleneck = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat = 5,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern = 5,
|
||||
/obj/item/clothing/shoes/white = 5,
|
||||
/obj/item/clothing/shoes/slippers = 5,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/science = 5,
|
||||
@@ -1348,6 +1350,7 @@
|
||||
/obj/item/clothing/under/rank/cargotech/jeans = 5,
|
||||
/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/shoes/boots/winter/supply = 5,
|
||||
/obj/item/clothing/shoes/black = 5,
|
||||
/obj/item/clothing/gloves/black = 5,
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
else if((world.time - record.last_notification) < 5 MINUTES)
|
||||
to_chat(src, "<span class='warning'>Too little time has passed since your last notification.</span>")
|
||||
else
|
||||
db.notify(record.mindname)
|
||||
db.notify(record)
|
||||
record.last_notification = world.time
|
||||
to_chat(src, "<span class='notice'>New notification has been sent.</span>")
|
||||
else
|
||||
|
||||
@@ -22,6 +22,17 @@
|
||||
. = ..()
|
||||
delete_inventory()
|
||||
|
||||
/mob/living/carbon/human/dummy/mannequin/autoequip
|
||||
icon = 'icons/effects/species.dmi'
|
||||
icon_state = "lizard_f_s_full"
|
||||
|
||||
/mob/living/carbon/human/dummy/mannequin/autoequip/Initialize()
|
||||
icon = null
|
||||
icon_state = ""
|
||||
. = ..()
|
||||
for(var/obj/item/I in loc)
|
||||
equip_to_appropriate_slot(I)
|
||||
|
||||
/mob/living/carbon/human/skrell/Initialize(var/new_loc)
|
||||
h_style = "Skrell Short Tentacles"
|
||||
return ..(new_loc, SPECIES_SKRELL)
|
||||
|
||||
@@ -129,6 +129,11 @@
|
||||
message_data[2] = pick(M.say_verbs)
|
||||
. = 1
|
||||
|
||||
if(CE_SPEEDBOOST in chem_effects || is_jittery) // motor mouth
|
||||
for(var/datum/multilingual_say_piece/S in message_data[1])
|
||||
S.message = replacetext(S.message," ","")
|
||||
S.message = replacetext(S.message,",","")
|
||||
S.message = replacetext(S.message,";","")
|
||||
else
|
||||
. = ..(message_data)
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
var/alcohol_mod = 1 // Multiplier to alcohol strength; 0.5 = half, 0 = no effect at all, 2 = double, etc.
|
||||
var/pain_mod = 1 // Multiplier to pain effects; 0.5 = half, 0 = no effect (equal to NO_PAIN, really), 2 = double, etc.
|
||||
var/spice_mod = 1 // Multiplier to spice/capsaicin/frostoil effects; 0.5 = half, 0 = no effect (immunity), 2 = double, etc.
|
||||
var/trauma_mod = 1 // Affects traumatic shock (how fast pain crit happens). 0 = no effect (immunity to pain crit), 2 = double etc.Overriden by "can_feel_pain" var
|
||||
var/trauma_mod = 1 // Affects traumatic shock (how fast pain crit happens). 0 = no effect (immunity to pain crit), 2 = double etc.Overriden by "can_feel_pain" var
|
||||
// set below is EMP interactivity for nonsynth carbons
|
||||
var/emp_sensitivity = 0 // bitflag. valid flags are: EMP_PAIN, EMP_BLIND, EMP_DEAFEN, EMP_CONFUSE, EMP_STUN, and EMP_(BRUTE/BURN/TOX/OXY)_DMG
|
||||
var/emp_dmg_mod = 1 // Multiplier to all EMP damage sustained by the mob, if it's EMP-sensitive
|
||||
@@ -431,6 +431,8 @@
|
||||
H.visible_message( \
|
||||
"<span class='notice'>[H] boops [target]'s nose.</span>", \
|
||||
"<span class='notice'>You boop [target] on the nose.</span>", )
|
||||
else if(H.zone_sel.selecting == BP_GROIN) //CHOMPEdit
|
||||
H.vore_bellyrub(target)
|
||||
//VOREStation Edit End
|
||||
else
|
||||
H.visible_message("<span class='notice'>[H] hugs [target] to make [t_him] feel better!</span>", \
|
||||
|
||||
@@ -49,8 +49,8 @@
|
||||
flags = NO_SCAN | IS_PLANT | NO_MINOR_CUT
|
||||
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
|
||||
|
||||
inherent_verbs = list(
|
||||
/mob/living/carbon/human/proc/alraune_fruit_select) //Give them the voremodes related to wrapping people in vines and sapping their fluids
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/alraune_fruit_select, //Give them the voremodes related to wrapping people in vines and sapping their fluids
|
||||
/mob/living/carbon/human/proc/tie_hair)
|
||||
|
||||
color_mult = 1
|
||||
icobase = 'icons/mob/human_races/r_human_vr.dmi'
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
health_hud_intensity = 2
|
||||
num_alternate_languages = 3
|
||||
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX)
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
|
||||
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
|
||||
|
||||
@@ -633,7 +633,9 @@
|
||||
if(isturf(H.loc)) //else, there's considered to be no light
|
||||
var/turf/T = H.loc
|
||||
light_amount = T.get_lumcount() * 10
|
||||
H.adjust_nutrition(light_amount)
|
||||
// Don't overfeed, just make them full without going over.
|
||||
if((H.nutrition + light_amount) < initial(H.nutrition))
|
||||
H.adjust_nutrition(light_amount)
|
||||
H.shock_stage -= light_amount
|
||||
|
||||
if(light_amount >= 3) //if there's enough light, heal
|
||||
|
||||
@@ -27,7 +27,8 @@
|
||||
/mob/living/carbon/human/proc/sonar_ping,
|
||||
/mob/living/carbon/human/proc/tie_hair,
|
||||
/mob/living/proc/flying_toggle,
|
||||
/mob/living/proc/start_wings_hovering) //Xenochimera get all the special verbs since they can't select traits.
|
||||
/mob/living/proc/start_wings_hovering,
|
||||
/mob/living/carbon/human/proc/tie_hair) //Xenochimera get all the special verbs since they can't select traits.
|
||||
|
||||
virus_immune = 1 // They practically ARE one.
|
||||
min_age = 18
|
||||
@@ -337,7 +338,8 @@
|
||||
/mob/living/carbon/human/proc/toggle_silk_production,
|
||||
/mob/living/carbon/human/proc/weave_structure,
|
||||
/mob/living/carbon/human/proc/weave_item,
|
||||
/mob/living/carbon/human/proc/set_silk_color)
|
||||
/mob/living/carbon/human/proc/set_silk_color,
|
||||
/mob/living/carbon/human/proc/tie_hair)
|
||||
|
||||
min_age = 18
|
||||
max_age = 80
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
secondary_langs = list(LANGUAGE_SAGARU)
|
||||
name_language = LANGUAGE_SAGARU
|
||||
color_mult = 1
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
|
||||
|
||||
min_age = 18
|
||||
max_age = 110
|
||||
@@ -84,7 +85,7 @@
|
||||
name_language = LANGUAGE_SKRELLIAN
|
||||
color_mult = 1
|
||||
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX)
|
||||
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
|
||||
min_age = 18
|
||||
max_age = 110
|
||||
|
||||
@@ -135,8 +136,9 @@
|
||||
secondary_langs = list(LANGUAGE_BIRDSONG)
|
||||
name_language = LANGUAGE_BIRDSONG
|
||||
color_mult = 1
|
||||
inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/start_wings_hovering)
|
||||
|
||||
inherent_verbs = list(/mob/living/proc/flying_toggle,
|
||||
/mob/living/proc/start_wings_hovering,
|
||||
/mob/living/carbon/human/proc/tie_hair)
|
||||
min_age = 18
|
||||
max_age = 110
|
||||
|
||||
@@ -181,7 +183,9 @@
|
||||
num_alternate_languages = 3
|
||||
secondary_langs = list(LANGUAGE_TERMINUS)
|
||||
name_language = LANGUAGE_TERMINUS
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds)
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds,
|
||||
/mob/living/proc/shred_limb,
|
||||
/mob/living/carbon/human/proc/tie_hair)
|
||||
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //AEIOU edit: Zorren can speak Terminus unassisted.
|
||||
|
||||
min_age = 18
|
||||
@@ -218,7 +222,6 @@
|
||||
"You feel uncomfortably warm.",
|
||||
"Your overheated skin itches."
|
||||
)
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
|
||||
/datum/species/vulpkanin
|
||||
name = SPECIES_VULPKANIN
|
||||
@@ -237,7 +240,8 @@
|
||||
// gluttonous = 1
|
||||
num_alternate_languages = 3
|
||||
color_mult = 1
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds)
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds,
|
||||
/mob/living/carbon/human/proc/tie_hair)
|
||||
|
||||
male_scream_sound = null //CHOMPedit
|
||||
female_scream_sound = null //CHOMPedit
|
||||
@@ -274,6 +278,7 @@
|
||||
tail_animation = 'icons/mob/species/unathi/tail_vr.dmi'
|
||||
color_mult = 1
|
||||
min_age = 18
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
|
||||
gluttonous = 0
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
@@ -289,6 +294,7 @@
|
||||
tail_animation = 'icons/mob/species/tajaran/tail_vr.dmi'
|
||||
color_mult = 1
|
||||
min_age = 18
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
|
||||
allergens = null
|
||||
gluttonous = 0 //Moving this here so I don't have to fix this conflict every time polaris glances at station.dm
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds)
|
||||
@@ -305,6 +311,7 @@
|
||||
deform = 'icons/mob/human_races/r_def_skrell_vr.dmi'
|
||||
color_mult = 1
|
||||
min_age = 18
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair)
|
||||
reagent_tag = null
|
||||
allergens = null
|
||||
assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX)
|
||||
@@ -316,6 +323,7 @@
|
||||
/datum/species/zaddat
|
||||
spawn_flags = SPECIES_CAN_JOIN
|
||||
min_age = 18
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) //I don't even know if Zaddat can HAVE hair, but here we are, I suppose
|
||||
gluttonous = 0
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
descriptors = list()
|
||||
@@ -365,8 +373,9 @@
|
||||
|
||||
/datum/species/vox
|
||||
gluttonous = 0
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE //CHOMPStation Edit TFF 20/1/20 - restore whitelist requirement
|
||||
min_age = 18
|
||||
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE //CHOMPStation Edit
|
||||
min_age = 18
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) //Get ya quills done did
|
||||
icobase = 'icons/mob/human_races/r_vox_old.dmi'
|
||||
deform = 'icons/mob/human_races/r_def_vox_old.dmi'
|
||||
descriptors = list(
|
||||
@@ -389,7 +398,7 @@
|
||||
name_language = null
|
||||
color_mult = 1
|
||||
genders = list(MALE, FEMALE, PLURAL, NEUTER)
|
||||
inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/start_wings_hovering)
|
||||
inherent_verbs = list(/mob/living/proc/flying_toggle,/mob/living/proc/start_wings_hovering,/mob/living/carbon/human/proc/tie_hair)
|
||||
|
||||
min_age = 18
|
||||
max_age = 80
|
||||
@@ -544,7 +553,7 @@
|
||||
num_alternate_languages = 3
|
||||
secondary_langs = list(LANGUAGE_TERMINUS)
|
||||
name_language = LANGUAGE_TERMINUS
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds)
|
||||
inherent_verbs = list(/mob/living/carbon/human/proc/lick_wounds,/mob/living/proc/shred_limb,/mob/living/carbon/human/proc/tie_hair)
|
||||
|
||||
min_age = 18
|
||||
max_age = 80
|
||||
@@ -561,7 +570,6 @@
|
||||
base_color = "#333333"
|
||||
blood_color = "#240bc4"
|
||||
color_mult = 1
|
||||
inherent_verbs = list(/mob/living/proc/shred_limb)
|
||||
|
||||
heat_discomfort_strings = list(
|
||||
"Your fur prickles in the heat.",
|
||||
|
||||
@@ -16,6 +16,9 @@
|
||||
switch(L.a_intent)
|
||||
if(I_HELP)
|
||||
if(health > 0)
|
||||
if(L.zone_sel.selecting == BP_GROIN) //CHOMPEdit
|
||||
if(L.vore_bellyrub(src))
|
||||
return
|
||||
L.visible_message("<span class='notice'>\The [L] [response_help] \the [src].</span>")
|
||||
|
||||
if(I_DISARM)
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
switch(a_intent)
|
||||
if(I_HELP)
|
||||
if(isliving(A))
|
||||
if(src.zone_sel.selecting == BP_GROIN) //CHOMPEdit
|
||||
if(src.vore_bellyrub(A))
|
||||
return
|
||||
custom_emote(1,"[pick(friendly)] \the [A]!")
|
||||
|
||||
if(I_HURT)
|
||||
|
||||
@@ -274,11 +274,15 @@
|
||||
switch(M.a_intent)
|
||||
if(I_HELP)
|
||||
if(health > 0)
|
||||
if(M.zone_sel.selecting == BP_GROIN) //CHOMPEdit
|
||||
if(M.vore_bellyrub(src))
|
||||
return
|
||||
M.visible_message("<span class='notice'>[M] [response_help] \the [src].</span>")
|
||||
if(has_AI())
|
||||
var/datum/ai_holder/AI = ai_holder
|
||||
AI.set_stance(STANCE_IDLE)
|
||||
if(prob(tame_chance))
|
||||
AI.violent_breakthrough = FALSE
|
||||
AI.hostile = FALSE
|
||||
friend = M
|
||||
AI.set_follow(friend)
|
||||
|
||||
@@ -169,6 +169,7 @@
|
||||
|
||||
// If dead and we try to move in our mob, it leaves our body
|
||||
if(my_mob.stat == DEAD && isliving(my_mob) && !my_mob.forbid_seeing_deadchat)
|
||||
my_mob.setMoveCooldown(my_mob.movement_delay(n, direct))
|
||||
my_mob.ghostize()
|
||||
return
|
||||
|
||||
|
||||
@@ -215,6 +215,7 @@
|
||||
render_target = O_LIGHTING_VISUAL_RENDER_TARGET
|
||||
blend_mode = BLEND_MULTIPLY
|
||||
alpha = 255
|
||||
appearance_flags = PLANE_MASTER|NO_CLIENT_COLOR // NO_CLIENT_COLOR because it has some naughty interactions with colorblindness that I can't figure out. Byond bug?
|
||||
|
||||
/obj/screen/plane_master/emissive
|
||||
plane = PLANE_EMISSIVE
|
||||
|
||||
@@ -359,24 +359,27 @@ var/list/table_icon_cache = list()
|
||||
|
||||
// Base frame shape. Mostly done for glass/diamond tables, where this is visible.
|
||||
for(var/i = 1 to 4)
|
||||
var/image/I = get_table_image(icon, connections[i], 1<<(i-1))
|
||||
var/image/I = get_table_image(icon, connections?[i] || 0, 1<<(i-1))
|
||||
add_overlay(I)
|
||||
|
||||
// Standard table image
|
||||
if(material)
|
||||
for(var/i = 1 to 4)
|
||||
var/image/I = get_table_image(icon, "[material.icon_base]_[connections[i]]", 1<<(i-1), material.icon_colour, 255 * material.opacity)
|
||||
var/connect = connections?[i] || 0
|
||||
var/image/I = get_table_image(icon, "[material.icon_base]_[connect]", 1<<(i-1), material.icon_colour, 255 * material.opacity)
|
||||
add_overlay(I)
|
||||
|
||||
// Reinforcements
|
||||
if(reinforced)
|
||||
for(var/i = 1 to 4)
|
||||
var/image/I = get_table_image(icon, "[reinforced.icon_reinf]_[connections[i]]", 1<<(i-1), reinforced.icon_colour, 255 * reinforced.opacity)
|
||||
var/connect = connections?[i] || 0
|
||||
var/image/I = get_table_image(icon, "[reinforced.icon_reinf]_[connect]", 1<<(i-1), reinforced.icon_colour, 255 * reinforced.opacity)
|
||||
add_overlay(I)
|
||||
|
||||
if(carpeted)
|
||||
for(var/i = 1 to 4)
|
||||
var/image/I = get_table_image(icon, "carpet_[connections[i]]", 1<<(i-1))
|
||||
var/connect = connections?[i] || 0
|
||||
var/image/I = get_table_image(icon, "carpet_[connect]", 1<<(i-1))
|
||||
add_overlay(I)
|
||||
else
|
||||
cut_overlays()
|
||||
|
||||
@@ -245,6 +245,8 @@
|
||||
var/list/gateway_zs = GetConnectedZlevels(GLOB.gateway_away.z)
|
||||
if(z in gateway_zs)
|
||||
return FALSE // It's not calibrated and we're in a connected z
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/quantumpad/proc/gateway_scatter(mob/user)
|
||||
var/obj/effect/landmark/dest = pick(awaydestinations)
|
||||
|
||||
@@ -296,3 +296,7 @@
|
||||
|
||||
/datum/tgui_module/camera/ntos/hacked/New(host)
|
||||
. = ..(host, using_map.station_networks.Copy())
|
||||
|
||||
/datum/tgui_module/camera/bigscreen/tgui_state(mob/user)
|
||||
return GLOB.tgui_physical_state_bigscreen
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
*
|
||||
* Check the distance for a living mob.
|
||||
* Really only used for checks outside the context of a mob.
|
||||
* Otherwise, use shared_living_ui_distance().
|
||||
* Otherwise, use shared_living_tgui_distance().
|
||||
*
|
||||
* required src_object The object which owns the UI.
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
@@ -119,10 +119,26 @@
|
||||
return STATUS_DISABLED
|
||||
return STATUS_CLOSE // Otherwise, we got nothing.
|
||||
|
||||
/mob/living/carbon/human/shared_living_tgui_distance(atom/movable/src_object, viewcheck = TRUE)
|
||||
if((TK in mutations) && (get_dist(src, src_object) <= 2))
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Distance versus interaction check, with max'd update range.
|
||||
*
|
||||
* required src_object atom/movable The object which owns the UI.
|
||||
*
|
||||
* return UI_state The state of the UI.
|
||||
*/
|
||||
/mob/living/proc/shared_living_tgui_distance_bigscreen(atom/movable/src_object, viewcheck = TRUE)
|
||||
// If the object is obscured, close it.
|
||||
if(viewcheck && !(src_object in view(src)))
|
||||
return STATUS_CLOSE
|
||||
|
||||
var/dist = get_dist(src_object, src)
|
||||
if(dist <= 1) // Open and interact if 1-0 tiles away.
|
||||
return STATUS_INTERACTIVE
|
||||
return ..()
|
||||
else if(dist <= world.view)
|
||||
return STATUS_UPDATE
|
||||
return STATUS_CLOSE // Otherwise, we got nothing.
|
||||
|
||||
// Topic Extensions for old UIs
|
||||
/datum/proc/CanUseTopic(var/mob/user, var/datum/tgui_state/state)
|
||||
|
||||
@@ -47,3 +47,29 @@ GLOBAL_DATUM_INIT(tgui_physical_obscured_state, /datum/tgui_state/physical_obscu
|
||||
|
||||
/mob/living/silicon/ai/physical_obscured_can_use_topic(src_object)
|
||||
return STATUS_UPDATE // AIs are not physical.
|
||||
|
||||
/**
|
||||
* tgui state: physical_state_bigscreen
|
||||
*
|
||||
* Short-circuits the default state to only check physical distance,
|
||||
* but allows updates out to the full size of the screen.
|
||||
**/
|
||||
|
||||
GLOBAL_DATUM_INIT(tgui_physical_state_bigscreen, /datum/tgui_state/physical_bigscreen, new)
|
||||
|
||||
/datum/tgui_state/physical_bigscreen/can_use_topic(src_object, mob/user)
|
||||
. = user.shared_tgui_interaction(src_object)
|
||||
if(. > STATUS_CLOSE)
|
||||
return min(., user.physical_can_use_tgui_topic_bigscreen(src_object))
|
||||
|
||||
/mob/proc/physical_can_use_tgui_topic_bigscreen(src_object)
|
||||
return STATUS_CLOSE
|
||||
|
||||
/mob/living/physical_can_use_tgui_topic_bigscreen(src_object)
|
||||
return shared_living_tgui_distance_bigscreen(src_object)
|
||||
|
||||
/mob/living/silicon/physical_can_use_tgui_topic_bigscreen(src_object)
|
||||
return max(STATUS_UPDATE, shared_living_tgui_distance_bigscreen(src_object)) // Silicons can always see.
|
||||
|
||||
/mob/living/silicon/ai/physical_can_use_tgui_topic(src_object)
|
||||
return STATUS_UPDATE // AIs are not physical.
|
||||
@@ -10,7 +10,8 @@ var/list/ventcrawl_machinery = list(
|
||||
/obj/item/weapon/holder,
|
||||
/obj/machinery/camera,
|
||||
/obj/belly,
|
||||
/obj/screen
|
||||
/obj/screen,
|
||||
/atom/movable/emissive_blocker
|
||||
)
|
||||
//VOREStation Edit : added /obj/belly, to this list, CI is complaining about this in his indentation check
|
||||
//mob/living/simple_mob/borer, //VORESTATION AI TEMPORARY REMOVAL REPLACE BACK IN LIST WHEN RESOLVED //VOREStation Edit
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
//CHOMP vore additions, currently only consists of reagent stuff - Jack
|
||||
//CHOMP vore additions.
|
||||
|
||||
/obj/belly
|
||||
//CHOMP - liquid bellies
|
||||
@@ -303,3 +303,50 @@
|
||||
else
|
||||
// Didn't transfer, so wait before retrying
|
||||
addtimer(CALLBACK(src, /obj/belly/.proc/check_autotransfer, prey, autotransferlocation), autotransferwait)
|
||||
|
||||
/////////////////////////// Process Cycle Lite /////////////////////////// CHOMP PCL
|
||||
/obj/belly/proc/quick_cycle() //For manual belly cycling without straining the bellies subsystem.
|
||||
HandleBellyReagents() //CHOMP reagent belly stuff.
|
||||
// VERY early exit
|
||||
if(!contents.len)
|
||||
return
|
||||
|
||||
var/to_update = FALSE //Did anything update worthy happen?
|
||||
|
||||
/////////////////////////// Exit Early //////////////////////////// CHOMP PCL
|
||||
var/list/touchable_atoms = contents - items_preserved
|
||||
if(!length(touchable_atoms))
|
||||
return
|
||||
|
||||
var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"]
|
||||
if(!DM)
|
||||
log_debug("Digest mode [digest_mode] didn't exist in the digest_modes list!!")
|
||||
return FALSE
|
||||
if(DM.handle_atoms(src, touchable_atoms))
|
||||
updateVRPanels()
|
||||
return
|
||||
|
||||
var/list/touchable_mobs = null
|
||||
|
||||
var/list/hta_returns = handle_touchable_atoms(touchable_atoms)
|
||||
if(islist(hta_returns))
|
||||
if(hta_returns["touchable_mobs"])
|
||||
touchable_mobs = hta_returns["touchable_mobs"]
|
||||
if(hta_returns["to_update"])
|
||||
to_update = hta_returns["to_update"]
|
||||
|
||||
if(!LAZYLEN(touchable_mobs))
|
||||
return
|
||||
|
||||
///////////////////// Time to actually process mobs ///////////////////// CHOMP PCL
|
||||
for(var/target in touchable_mobs)
|
||||
var/mob/living/L = target
|
||||
if(!istype(L))
|
||||
continue
|
||||
var/list/returns = DM.process_mob(src, target)
|
||||
if(istype(returns) && returns["to_update"])
|
||||
to_update = TRUE
|
||||
|
||||
if(to_update)
|
||||
updateVRPanels()
|
||||
/////////////////////////// CHOMP PCL END ///////////////////////////
|
||||
@@ -17,8 +17,10 @@
|
||||
var/play_sound //Potential sound to play at the end to avoid code duplication.
|
||||
var/to_update = FALSE //Did anything update worthy happen?
|
||||
|
||||
///////////////////// Prey Loop Refresh/hack //////////////////////
|
||||
prey_loop()
|
||||
/////////////////////////// Exit Early ////////////////////////////
|
||||
var/list/touchable_atoms = contents - items_preserved
|
||||
if(!length(touchable_atoms))
|
||||
return
|
||||
|
||||
/////////////////////////// Sound Selections ///////////////////////////
|
||||
var/digestion_noise_chance = 0
|
||||
@@ -31,10 +33,7 @@
|
||||
prey_digest = sound(get_sfx("fancy_digest_prey"))
|
||||
pred_digest = sound(get_sfx("fancy_digest_pred"))
|
||||
|
||||
/////////////////////////// Exit Early ////////////////////////////
|
||||
var/list/touchable_atoms = contents - items_preserved
|
||||
if(!length(touchable_atoms))
|
||||
return
|
||||
///////////////////// Early Non-Mode Handling /////////////////////
|
||||
|
||||
var/datum/digest_mode/DM = GLOB.digest_modes["[digest_mode]"]
|
||||
if(!DM)
|
||||
@@ -55,10 +54,58 @@
|
||||
if(hta_returns["to_update"])
|
||||
to_update = hta_returns["to_update"]
|
||||
|
||||
if(!digestion_noise_chance)
|
||||
digestion_noise_chance = DM.noise_chance
|
||||
|
||||
/////////////////////////// Make any noise ///////////////////////////
|
||||
if(digestion_noise_chance && prob(digestion_noise_chance))
|
||||
for(var/mob/M in contents)
|
||||
if(M && M.is_preference_enabled(/datum/client_preference/digestion_noises))
|
||||
SEND_SOUND(M, prey_digest)
|
||||
play_sound = pred_digest
|
||||
|
||||
if(to_update)
|
||||
updateVRPanels()
|
||||
|
||||
if(!LAZYLEN(touchable_mobs))
|
||||
if(play_sound)
|
||||
for(var/mob/M in hearers(VORE_SOUND_RANGE, get_turf(owner))) //so we don't fill the whole room with the sound effect
|
||||
if(!M.is_preference_enabled(/datum/client_preference/digestion_noises))
|
||||
continue
|
||||
if(isturf(M.loc) || (M.loc != src)) //to avoid people on the inside getting the outside sounds and their direct sounds + built in sound pref check
|
||||
if(fancy_vore)
|
||||
M.playsound_local(get_turf(owner), play_sound, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF)
|
||||
else
|
||||
M.playsound_local(get_turf(owner), play_sound, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF)
|
||||
//these are all external sound triggers now, so it's ok.
|
||||
return
|
||||
|
||||
///////////////////// Early Non-Mode Handling /////////////////////
|
||||
///////////////////// Prey Loop Refresh/hack //////////////////////
|
||||
prey_loop()
|
||||
|
||||
///////////////////// Time to actually process mobs /////////////////////
|
||||
|
||||
for(var/target in touchable_mobs)
|
||||
var/mob/living/L = target
|
||||
if(!istype(L))
|
||||
continue
|
||||
var/list/returns = DM.process_mob(src, target)
|
||||
if(istype(returns) && returns["to_update"])
|
||||
to_update = TRUE
|
||||
if(istype(returns) && returns["soundToPlay"] && !play_sound)
|
||||
play_sound = returns["soundToPlay"]
|
||||
|
||||
if(play_sound)
|
||||
for(var/mob/M in hearers(VORE_SOUND_RANGE, get_turf(owner))) //so we don't fill the whole room with the sound effect
|
||||
if(!M.is_preference_enabled(/datum/client_preference/digestion_noises))
|
||||
continue
|
||||
if(isturf(M.loc) || (M.loc != src)) //to avoid people on the inside getting the outside sounds and their direct sounds + built in sound pref check
|
||||
if(fancy_vore)
|
||||
M.playsound_local(get_turf(owner), play_sound, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF)
|
||||
else
|
||||
M.playsound_local(get_turf(owner), play_sound, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF)
|
||||
//these are all external sound triggers now, so it's ok.
|
||||
|
||||
if(emote_active)
|
||||
var/list/EL = emote_lists[digest_mode]
|
||||
if(LAZYLEN(EL) && next_emote <= world.time)
|
||||
@@ -79,41 +126,6 @@
|
||||
formatted_message = replacetext(formatted_message, "%countprey", living_count)
|
||||
to_chat(M, "<span class='notice'>[formatted_message]</span>")
|
||||
|
||||
if(!digestion_noise_chance)
|
||||
digestion_noise_chance = DM.noise_chance
|
||||
|
||||
|
||||
///////////////////// Time to actually process mobs /////////////////////
|
||||
for(var/target in touchable_mobs)
|
||||
var/mob/living/L = target
|
||||
if(!istype(L))
|
||||
continue
|
||||
var/list/returns = DM.process_mob(src, target)
|
||||
if(istype(returns) && returns["to_update"])
|
||||
to_update = TRUE
|
||||
if(istype(returns) && returns["soundToPlay"] && !play_sound)
|
||||
play_sound = returns["soundToPlay"]
|
||||
|
||||
/////////////////////////// Make any noise ///////////////////////////
|
||||
if(digestion_noise_chance && prob(digestion_noise_chance))
|
||||
for(var/mob/M in contents)
|
||||
if(M && M.is_preference_enabled(/datum/client_preference/digestion_noises))
|
||||
SEND_SOUND(M, prey_digest)
|
||||
play_sound = pred_digest
|
||||
|
||||
if(play_sound)
|
||||
for(var/mob/M in hearers(VORE_SOUND_RANGE, get_turf(owner))) //so we don't fill the whole room with the sound effect
|
||||
if(!M.is_preference_enabled(/datum/client_preference/digestion_noises))
|
||||
continue
|
||||
if(isturf(M.loc) || (M.loc != src)) //to avoid people on the inside getting the outside sounds and their direct sounds + built in sound pref check
|
||||
if(fancy_vore)
|
||||
M.playsound_local(get_turf(owner), play_sound, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF)
|
||||
else
|
||||
M.playsound_local(get_turf(owner), play_sound, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF)
|
||||
//these are all external sound triggers now, so it's ok.
|
||||
|
||||
if(to_update)
|
||||
updateVRPanels()
|
||||
|
||||
/obj/belly/proc/handle_touchable_atoms(list/touchable_atoms)
|
||||
var/did_an_item = FALSE // Only do one item per cycle.
|
||||
|
||||
@@ -219,3 +219,21 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
|
||||
soundfile = fancy_release_sounds[RTB.release_sound]
|
||||
if(soundfile)
|
||||
playsound(src, soundfile, vol = 100, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises)
|
||||
|
||||
/mob/living/proc/vore_bellyrub(var/mob/living/T)
|
||||
set name = "Give Bellyrubs"
|
||||
set category = "Abilities"
|
||||
set desc = "Provide bellyrubs to either yourself or another mob with a belly."
|
||||
|
||||
if(!T)
|
||||
T = input("Choose whose belly to rub") as null| mob in view(src.loc,1)
|
||||
if(!T)
|
||||
return FALSE
|
||||
if(T.vore_selected)
|
||||
var/obj/belly/B = T.vore_selected
|
||||
if(istype(B))
|
||||
custom_emote_vr(1, "gives some rubs over [T]'s [B].")
|
||||
B.quick_cycle()
|
||||
return TRUE
|
||||
to_chat(src, "<span class='warning'>There is no suitable belly for rubs.</span>")
|
||||
return FALSE
|
||||
@@ -52,6 +52,7 @@
|
||||
M.verbs += /mob/living/proc/insidePanel
|
||||
M.verbs += /mob/living/proc/vore_transfer_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything
|
||||
M.verbs += /mob/living/proc/vore_check_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything
|
||||
M.verbs += /mob/living/proc/vore_bellyrub //CHOMP If mob doesnt have bellies it probably won't be needing this anyway
|
||||
|
||||
//Tries to load prefs if a client is present otherwise gives freebie stomach
|
||||
spawn(2 SECONDS)
|
||||
@@ -544,7 +545,7 @@
|
||||
|
||||
// Their AI should get notified so they can stab us
|
||||
prey.ai_holder?.react_to_attack(user)
|
||||
|
||||
|
||||
//Timer and progress bar
|
||||
if(!do_after(user, swallow_time, prey, exclusive = TASK_USER_EXCLUSIVE))
|
||||
return FALSE // Prey escpaed (or user disabled) before timer expired.
|
||||
|
||||
@@ -889,74 +889,56 @@ No. With a teleporter? Just *no*. - Hawk, YW
|
||||
//catalogue_data = list(/datum/category_item/catalogue/information/organization/khi)
|
||||
sensor_mode = 3
|
||||
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_state = "khi_uniform_i"
|
||||
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = ""
|
||||
icon = 'icons/inventory/uniform/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
|
||||
icon_state = "khi_uniform"
|
||||
|
||||
/obj/item/clothing/under/rank/khi/cmd //Command version
|
||||
name = "GE command suit" //CHOMPedit: Change to GE
|
||||
desc = "Gilthari Exports uniform. An extra-comfortable command one, at that." //CHOMPedit
|
||||
icon_state = "khi_uniform_cmd_i"
|
||||
item_state = "khi_uniform_cmd"
|
||||
worn_state = "khi_uniform_cmd"
|
||||
icon_state = "khi_uniform_cmd"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/khi/sec //Security version
|
||||
name = "GE security suit" //CHOMPedit: Change to GE
|
||||
desc = "Gilthari Exports uniform. This one has angry red security stripes. Keepin' the peace in style." //CHOMPedit
|
||||
icon_state = "khi_uniform_sec_i"
|
||||
item_state = "khi_uniform_sec"
|
||||
worn_state = "khi_uniform_sec"
|
||||
icon_state = "khi_uniform_sec"
|
||||
armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/khi/med //Medical version
|
||||
name = "GE medical suit" //CHOMPedit: Change to GE
|
||||
desc = "Gilthari Exports uniform. The medical version. Why not just get a new body, anyway?"//CHOMPedit
|
||||
icon_state = "khi_uniform_med_i"
|
||||
item_state = "khi_uniform_med"
|
||||
worn_state = "khi_uniform_med"
|
||||
icon_state = "khi_uniform_med"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/khi/eng //Engineering version
|
||||
name = "GE engineering suit" //CHOMPedit: Change to GE
|
||||
desc = "Gilthari Exports uniform. One fit for an engineer, by the looks of it. Building the future, one disaster at a time." //CHOMPedit
|
||||
icon_state = "khi_uniform_eng_i"
|
||||
item_state = "khi_uniform_eng"
|
||||
worn_state = "khi_uniform_eng"
|
||||
icon_state = "khi_uniform_eng"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 10)
|
||||
|
||||
/obj/item/clothing/under/rank/khi/sci //Science version
|
||||
name = "GE science suit" //CHOMPedit: Change to GE
|
||||
desc = "Gilthari Exports uniform. For performing science in, based on the color! Only SCIENCE can save us now." //CHOMPedit
|
||||
icon_state = "khi_uniform_sci_i"
|
||||
item_state = "khi_uniform_sci"
|
||||
worn_state = "khi_uniform_sci"
|
||||
icon_state = "khi_uniform_sci"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 10, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/khi/crg //Cargo version
|
||||
name = "GE cargo suit" //CHOMPedit: Change to GE
|
||||
desc = "A sleek cargo uniform from Gilthari Exports." //CHOMPedit
|
||||
icon_state = "khi_uniform_crg_i"
|
||||
item_state = "khi_uniform_crg"
|
||||
worn_state = "khi_uniform_crg"
|
||||
icon_state = "khi_uniform_crg"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/khi/civ //Science version
|
||||
name = "GE civilian suit" //CHOMPedit: Change to GE
|
||||
desc = "A sleek civilian uniform from Gilthari Exports." //CHOMPedit
|
||||
icon_state = "khi_uniform_civ_i"
|
||||
item_state = "khi_uniform_civ"
|
||||
worn_state = "khi_uniform_civ"
|
||||
icon_state = "khi_uniform_civ"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/under/rank/khi/fluff/aronai //Aro fluff version
|
||||
name = "KHI meditech suit"
|
||||
desc = "An outdated uniform of some sort. You get the sense that whoever wore this must've been very full of themselves"
|
||||
icon_state = "khi_uniform_aro_i"
|
||||
item_state = "khi_uniform_aro"
|
||||
worn_state = "khi_uniform_aro"
|
||||
desc = "An outdated uniform of some sort. You get the sense that whoever wore this must've been very full of themselves" //YW edit
|
||||
icon_state = "khi_uniform_aro"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0)
|
||||
|
||||
//jacobdragon:Earthen Breath
|
||||
@@ -1189,30 +1171,26 @@ Departamental Swimsuits, for general use
|
||||
/obj/item/clothing/under/rank/trek
|
||||
name = "Section 31 Uniform"
|
||||
desc = "Oooh... right."
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = ""
|
||||
icon = 'icons/inventory/uniform/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
|
||||
|
||||
//TOS
|
||||
/obj/item/clothing/under/rank/trek/command
|
||||
name = "Command Uniform"
|
||||
desc = "The uniform worn by command officers in the mid 2260s."
|
||||
icon_state = "trek_command"
|
||||
item_state = "trek_command"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) // Considering only staff heads get to pick it
|
||||
|
||||
/obj/item/clothing/under/rank/trek/eng //CHOMPEdit: Engineering only
|
||||
name = "Operations Uniform"
|
||||
desc = "The uniform worn by operations officers of the mid 2260s. You feel strangely vulnerable just seeing this..."
|
||||
icon_state = "trek_engsec"
|
||||
item_state = "trek_engsec"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) // since they're shared between jobs and kinda moot. //CHOMPEdit: I'll tell you what, the armor values are NOT shared. Removed melee bonus.
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci
|
||||
name = "MedSci Uniform"
|
||||
desc = "The uniform worn by medsci officers in the mid 2260s."
|
||||
icon_state = "trek_medsci"
|
||||
item_state = "trek_medsci"
|
||||
permeability_coefficient = 0.50
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) // basically a copy of vanilla sci/med
|
||||
|
||||
@@ -1220,59 +1198,48 @@ Departamental Swimsuits, for general use
|
||||
/obj/item/clothing/under/rank/trek/command/next
|
||||
desc = "The uniform worn by command officers. This one's from the mid 2360s."
|
||||
icon_state = "trek_next_command"
|
||||
item_state = "trek_next_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/eng/next //CHOMPEdit: Engineering only
|
||||
desc = "The uniform worn by operation officers. This one's from the mid 2360s."
|
||||
icon_state = "trek_next_engsec"
|
||||
item_state = "trek_next_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/next
|
||||
desc = "The uniform worn by medsci officers. This one's from the mid 2360s."
|
||||
icon_state = "trek_next_medsci"
|
||||
item_state = "trek_next_medsci"
|
||||
|
||||
//ENT
|
||||
/obj/item/clothing/under/rank/trek/command/ent
|
||||
desc = "The uniform worn by command officers of the 2140s."
|
||||
icon_state = "trek_ent_command"
|
||||
item_state = "trek_ent_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/eng/ent //CHOMPEdit: Engineering only
|
||||
desc = "The uniform worn by operations officers of the 2140s."
|
||||
icon_state = "trek_ent_engsec"
|
||||
item_state = "trek_ent_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/ent
|
||||
desc = "The uniform worn by medsci officers of the 2140s."
|
||||
icon_state = "trek_ent_medsci"
|
||||
item_state = "trek_ent_medsci"
|
||||
|
||||
//VOY
|
||||
/obj/item/clothing/under/rank/trek/command/voy
|
||||
desc = "The uniform worn by command officers of the 2370s."
|
||||
icon_state = "trek_voy_command"
|
||||
item_state = "trek_voy_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/eng/voy //CHOMPEdit: Engineering only
|
||||
desc = "The uniform worn by operations officers of the 2370s."
|
||||
icon_state = "trek_voy_engsec"
|
||||
item_state = "trek_voy_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/voy
|
||||
desc = "The uniform worn by medsci officers of the 2370s."
|
||||
icon_state = "trek_voy_medsci"
|
||||
item_state = "trek_voy_medsci"
|
||||
|
||||
//DS9
|
||||
|
||||
/obj/item/clothing/suit/storage/trek/ds9
|
||||
name = "Padded Overcoat"
|
||||
desc = "The overcoat worn by all officers of the 2380s."
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "trek_ds9_coat"
|
||||
icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = "trek_ds9_coat_mob"
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
permeability_coefficient = 0.50
|
||||
allowed = list(
|
||||
@@ -1289,23 +1256,21 @@ Departamental Swimsuits, for general use
|
||||
name = "Admiral Overcoat"
|
||||
desc = "Admirality specialty coat to keep flag officers fashionable and protected."
|
||||
icon_state = "trek_ds9_coat_adm"
|
||||
item_state = "trek_ds9_coat_adm_mob"
|
||||
armor = list(melee = 45, bullet = 35, laser = 35, energy = 20, bomb = 0, bio = 40, rad = 55)
|
||||
|
||||
|
||||
/obj/item/clothing/under/rank/trek/command/ds9
|
||||
desc = "The uniform worn by command officers of the 2380s."
|
||||
icon_state = "trek_command"
|
||||
icon_state = "trek_command" // no unique state for this one
|
||||
item_state = "trek_ds9_command"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/eng/ds9 //CHOMPEdit: Engineering only
|
||||
desc = "The uniform worn by operations officers of the 2380s."
|
||||
icon_state = "trek_engsec"
|
||||
icon_state = "trek_engsec" // no unique state for this one
|
||||
item_state = "trek_ds9_engsec"
|
||||
|
||||
/obj/item/clothing/under/rank/trek/medsci/ds9
|
||||
desc = "The uniform undershit worn by medsci officers of the 2380s."
|
||||
icon_state = "trek_medsci"
|
||||
icon_state = "trek_medsci" // no unique state for this one
|
||||
item_state = "trek_ds9_medsci"
|
||||
|
||||
//For general use maybe
|
||||
@@ -1941,7 +1906,7 @@ Departamental Swimsuits, for general use
|
||||
item_icons = list()
|
||||
default_worn_icon = 'icons/vore/custom_clothes_vr.dmi'
|
||||
color = COLOR_NAVY
|
||||
sprite_sheets = null
|
||||
sprite_sheets = list()
|
||||
|
||||
//SweetBlueSylveon:Pip Shyner
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/hop/fluff/pip
|
||||
|
||||
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.5 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 894 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 449 B After Width: | Height: | Size: 975 B |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 127 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 440 KiB After Width: | Height: | Size: 442 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 543 B |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 784 B |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 455 B After Width: | Height: | Size: 738 B |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 215 KiB After Width: | Height: | Size: 195 KiB |
@@ -2589,6 +2589,10 @@
|
||||
/obj/structure/table/marble,
|
||||
/turf/simulated/floor/tiled/eris/cafe,
|
||||
/area/aro3/kitchen)
|
||||
"vP" = (
|
||||
/obj/machinery/gear_dispenser/suit_fancy/aether,
|
||||
/turf/simulated/floor/tiled/eris/steel/panels,
|
||||
/area/aro3/eva_hall)
|
||||
"vQ" = (
|
||||
/obj/structure/table/steel,
|
||||
/obj/item/device/flashlight/lamp,
|
||||
@@ -3953,6 +3957,22 @@
|
||||
/obj/machinery/atmospherics/unary/vent_scrubber/on{
|
||||
dir = 8
|
||||
},
|
||||
<<<<<<< HEAD
|
||||
||||||| parent of df7a88506f... Merge pull request #11032 from VOREStation/Arokha/megaport
|
||||
/obj/machinery/light_switch{
|
||||
dir = 1;
|
||||
pixel_y = -24
|
||||
},
|
||||
/obj/item/device/uav/loaded,
|
||||
=======
|
||||
/obj/machinery/light_switch{
|
||||
dir = 1;
|
||||
pixel_y = -24
|
||||
},
|
||||
/obj/item/device/uav/loaded{
|
||||
nickname = "FoxBot Beta"
|
||||
},
|
||||
>>>>>>> df7a88506f... Merge pull request #11032 from VOREStation/Arokha/megaport
|
||||
/turf/simulated/floor/tiled/eris/dark/gray_perforated,
|
||||
/area/aro3/repair_bay)
|
||||
"Gy" = (
|
||||
@@ -42234,7 +42254,7 @@ el
|
||||
el
|
||||
vZ
|
||||
lu
|
||||
DM
|
||||
vP
|
||||
XF
|
||||
XF
|
||||
Nu
|
||||
|
||||
@@ -343,7 +343,7 @@ speaking of, if some dumbass does take it and fly off solo then get themselves k
|
||||
/obj/item/clothing/under/rank/medical,
|
||||
/obj/item/clothing/under/rank/nurse,
|
||||
/obj/item/clothing/under/rank/orderly,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern,
|
||||
/obj/item/clothing/suit/storage/toggle/fr_jacket,
|
||||
/obj/item/clothing/shoes/white,
|
||||
/obj/item/device/radio/headset/talon,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
"aa" = (/obj/effect/zone_divider,/mob/living/simple_mob/animal/passive/penguin{hovering = 1},/turf/simulated/floor/outdoors/ice,/area/surface/outside/plains/outpost)
|
||||
"ab" = (/turf/simulated/wall/golddiamond,/area/casino/casino_ship/wing_left)
|
||||
"ac" = (/turf/simulated/wall/golddiamond,/area/casino/casino_ship)
|
||||
"af" = (/obj/structure/reagent_dispensers/watertank/high,/turf/simulated/floor/wood/sif,/area/submap/lonehome)
|
||||
@@ -91,7 +92,6 @@
|
||||
"cU" = (/obj/machinery/door/airlock/silver{name = "Sauna"},/obj/structure/fans/tiny,/turf/simulated/floor/wood,/area/casino/casino_ship)
|
||||
"cY" = (/obj/effect/decal/cleanable/dirt,/obj/random/junk,/turf/simulated/floor/wood/sif,/area/submap/lonehome)
|
||||
"cZ" = (/obj/structure/bed/chair/sofa/yellow/corner,/turf/simulated/floor/carpet/oracarpet,/area/casino/casino_ship)
|
||||
"da" = (/obj/structure/wheel_of_fortune{pixel_y = 8},/obj/structure/table/fancyblack,/turf/simulated/floor/carpet/turcarpet,/area/casino/casino_ship)
|
||||
"db" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/log/sif{amount = 25},/obj/item/stack/material/log/sif{amount = 25},/turf/simulated/floor/plating,/area/submap/lonehome)
|
||||
"dc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/outdoors/grass/heavy{outdoors = 0},/area/casino/casino_ship)
|
||||
"dd" = (/obj/machinery/light/small{dir = 1},/obj/machinery/recharge_station,/turf/simulated/floor/tiled/freezer,/area/casino/casino_ship)
|
||||
@@ -1020,7 +1020,6 @@
|
||||
"YV" = (/obj/structure/bed/chair/oldsofa/left{dir = 8},/turf/simulated/floor/carpet/bcarpet,/area/casino/casino_ship)
|
||||
"YX" = (/obj/structure/bed/chair/sofa/yellow/right,/turf/simulated/floor/carpet/oracarpet,/area/casino/casino_ship)
|
||||
"Zc" = (/obj/structure/casino_table/roulette_chart,/turf/simulated/floor/carpet/oracarpet,/area/casino/casino_ship)
|
||||
"Zi" = (/mob/living/simple_mob/animal/passive/penguin{hovering = 1},/obj/effect/zone_divider,/turf/simulated/floor/outdoors/ice,/area/surface/outside/plains/outpost)
|
||||
"Zj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/machinery/door/blast/shutters{dir = 2; id = "Casinodormshutters5"; layer = 3.5; name = "Casino Privacy shutters"},/turf/simulated/floor,/area/casino/casino_ship/dorms)
|
||||
"Zl" = (/obj/structure/bed/chair/comfy/red{dir = 4},/turf/simulated/floor/carpet/oracarpet,/area/casino/casino_ship)
|
||||
"Zn" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/brown/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/casino/casino_ship/wing_left)
|
||||
@@ -1151,7 +1150,7 @@ hPmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNfBwtmNmNmNwtmNmNmNeGmNmNcCmNeGmNmNmNhXmN
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNwtaFmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNcCmNmNmNmNcCmNmNcCmNmNfBmNmNcCfBmNfBmNmNfBfBcCmNmNmNfBcCcCmNmNmNmNcCmNmNmNmNmNmNmNmNmNmNfBmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNdqmNmNbKbKbKbKbKgabKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKmNmNmNmNhXmNmNfBmNmNmNmNmNmNmNmNeGmNmNmNmNmNblmNmNmNmNmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNcCmNmNmNmNmNcjmNmNmNmNmNxrmNmNmNmNfBmNmNmNmNmNaFmNmNmNmNhYmNmNmNmNmNmNmNmNmNeGanmNmNmNmNmNgSmNmNmNmNmNmNmNmNmNmNmNmNmNmNKPmNmNcCmNmNmNmNmNaimNmNcCfBmNfBmNmNmNcCmNcCmNmNmNYhaFmNmNmNwtmNmNmNmNmNmNmNmNmNmNmNcChYmNmNmNmNmNmNbKbKbKbKbKbKbKbKgabKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKmNmNmNmNmNnfmNmNmNeGmNfBmNmNmNmNfBhXmNmNblmNmNmNwtmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNmNcCmNmNmNmNmNmNmNmNcCmNmNmNmNmNmNeGmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNwtmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNeGmNmNmNmNmNhXmNmNmNmNmNmNmNmNcCaFmNmNmNmNfBmNcCmNfBmNcCmNmNmNmNmNfBmNmNmNmNmNmNmNmNmNmNeGmNmNmNmNmNmNmNmNmNmNmNmNbKbKbKbKbKbKbKbKbKgabKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKmNmNmNmNmNmNmNmNfBmNmNmNmNmNmNhXmNmNmNmNblmNmNmNmNmNmNmNav
|
||||
ZLgrgrgrgrgrgrgrgrgrgrgrgrgrgrlFlFxplFlFlFlFlFlFfXlFlFlFlFlFlFlFlFlFlFlFlFlFlFwrlFlFlFlFyPlFlFlFlFpOlFlFlFlFlFlFlFlFlFPBUNlFlFlFlFlFlFlFlFlFlFlFlFlFlFyPlFlFlFlFlFlFlFlFPBlFlFlFlFlFPBlFyPlFlFlFlFlFlFyPlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFyPlFlFlFlFlFlFlFgagagagagagagagagagagagagagagagagagagaZigagagagagagagagagagalFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFDwXflFlFlFlFlFlFbG
|
||||
ZLgrgrgrgrgrgrgrgrgrgrgrgrgrgrlFlFxplFlFlFlFlFlFfXlFlFlFlFlFlFlFlFlFlFlFlFlFlFwrlFlFlFlFyPlFlFlFlFpOlFlFlFlFlFlFlFlFlFPBUNlFlFlFlFlFlFlFlFlFlFlFlFlFlFyPlFlFlFlFlFlFlFlFPBlFlFlFlFlFPBlFyPlFlFlFlFlFlFyPlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFyPlFlFlFlFlFlFlFgagagagagagagagagagagagagagagagagagagaaagagagagagagagagagagalFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFDwXflFlFlFlFlFlFbG
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNcCmNmNmNmNmNaFmNmNmNmNmNcCaFmNmNmNmNmNmNwteGmNmNmNmNeGmNmNmNmNmNmNmNmNmNmNmNmNmNmNcCmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNfBmNmNmNfBmNmNcCmNmNcCcCfBmNmNmNmNcCmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNcCmNmNmNmNmNbKbKbKbKbKbKbKbKbKUdbKgabKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKmNmNmNmNmNhXmNmNmNmNmNmNmNmNmNmNmNmNmNblmNmNmNmNmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNfBmNmNcCXPfBmNmNcCmNmNmNmNdqmNfBmNmNfBmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNhXmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNeGmNmNcncCmNmNmNmNmNmNmNmNcCmNmNmNfBfBOvmNfBmNmNmNmNmNmNmNmNaFmNmNwtmNmNmNmNmNmNmNmNmNmNmNeGmNmNmNmNmNbKbKbKbKbKbKbKbKbKbKbKgabKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKmNmNmNmNmNmNmNmNmNmNdqmNmNmNmNmNmNmNblmNmNmNmNmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNmNaFmNmNmNmNmNmNmNmNmNmNfBmNmNmNmNmNmNaFmNmNmNmNmNmNmNmNeGmNmNfBmNmNmNmNmNeGmNmNmNmNmNmNmNmNcCmNmNmNmNmNmNhXmNmNcCmNmNmNmNmNmNmNmNmNmNmNmNmNmNfBmNfBfBmNmNmNmNmNmNfBmNmNmNmNcCaFmNmNmNmNmNmNmNmNmNmNhYmNmNmNmNmNmNmNdqbKbKbKbKbKbKbKbKbKbKbKgabKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKbKmNmNmNmNmNmNmNmNmNmNmNfBmNmNmNmNmNmNblmNmNmNmNmNdqmNav
|
||||
@@ -1167,7 +1166,7 @@ hPmcmcmcmcmcmcmcmcmcmcmcmcmNmNdqmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmN
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNmNmNmNmNcCmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNhYmNmNmNmNgNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNwtmNmNmNmNmNmNeGmNmNmNmNhYmNmNmNmNmNmNmNwtmNmNmNmNmNmNmNmNmNmNaFmNmNmNmNeGmNcCmNmNmNmNmNmNmNmNmNmNmNeGmNmNmNmNmNmNeGmNmNmNmNmNmNlFmNmNmNmNmNdqmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNfBdqmNfBmNmNblmNmNmNmNmNdqmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNmNmNmNmNmNgNgNgNgNmNgNgNgNmNeGmNmNeGmNmNmNmNmNmNgNgNmNmNmNhYmNmNmNmNmNmNmNmNmNmNmNmNmNgNmNmNgNgNmNmNmNgNgNgNgNgNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNhYmNmNmNmNwtmNmNmNmNmNmNmNmNcCmNmNmNmNmNmNmNwtmNmNmNmNmNmNaFmNmNmNmNaFmNmNmNmNmNmNmNmNmNeGmNmNlFmNmNmNmNmNmNmNmNmNhYmNmNmNmNmNmNmNmNmNmNmNmNmNwtmNmNmNmNmNhXmNmNmNmNmNmNmNmNblmNhYmNmNmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNmNmNgNababababababababababmNmNgNmNmNmNmNmNmNmNmNgNgNmNmNmNmNmNmNgNgNgNmNgNgNmNgNgNmNacbMbPbPbPbWacacacbMbPbPbPbWacmNgNgNgNgNgNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNaFmNmNmNmNmNmNmNhXmNmNmNmNeGmNmNmNeGcCmNmNmNfBmNmNmNmNmNmNmNlFmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNaFmNmNmNmNeGmNmNmNmNmNblmNmNmNmNmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNgNgNgNabababbZcfcgclcwabababababmNgNmNmNmNmNmNgNgNgNgNmNmNmNaccxcycycydKaccxcycycydKacdzfvcDfvfldgdadgflfvcDfvdzacbMbPbPbPbPbPbWacgNmNgNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNaFmNmNmNmNmNmNmNmNmNmNmNmNmNmNhXmNPchXmNmNmNmNcCmNmNlFmNmNcCmNmNmNmNmNmNmNmNmNmNmNdqmNmNmNmNmNmNmNmNmNmNmNhXmNmNfByfmNmNmNmNmNmNwtblmNmNmNmNmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNmNgNgNgNabababbZcfcgclcwabababababmNgNmNmNmNmNmNgNgNgNgNmNmNmNaccxcycycydKaccxcycycydKacdzfvcDfvfldgfpdgflfvcDfvdzacbMbPbPbPbPbPbWacgNmNgNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNaFmNmNmNmNmNmNmNmNmNmNmNmNmNmNhXmNPchXmNmNmNmNcCmNmNlFmNmNcCmNmNmNmNmNmNmNmNmNmNmNdqmNmNmNmNmNmNmNmNmNmNmNhXmNmNfByfmNmNmNmNmNmNwtblmNmNmNmNmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcgNmNmNgNgNgNgNdrcqabdAdJdJdJdRabdTdXabababababgNgNgNmNOuUgUggNgNmNmNacSWekekekkaeOyZyZffyZyZCLdzfvfvfvflfpfpfpflfvfvfvdzfCYjYjfIYjYjHheFacbMbWacmNmNmNgNmNgNmNmNmNgNgNmNgNgNgNgNgNgNmNgNgNgNgNgNgNmNgNgNgNmNmNmNmNmNmNwtmNmNhXmNmNmNfBmNmNmNmNaFhXmNmNfXmNmNmNmNmNmNhXmNmNmNmNcCmNmNmNmNmNmNmNeGmNmNmNmNmNhXmNmNhXmNmNmNmNdqmNmNmNmNblmNmNmNmNhXmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmNgNgNgNgNgNgNdrcqabfQfYgbgcdJgmdJdJgogpgvgAababababababgDgGacacacacacgZqphbhDcMeFeZeZbNeZeZeZdzdzdzdzflflflflfldzdzdzdzIqIqIqbDIqIqeFeFiKgyzlaPjojpjpjpjvaPjwjHjHjHjIaPjJjWjWjWkgaPbMbPbPbPbPbPbPbPbPbPbWacacgNmNmNmNmNmNmNmNmNmNmNmNfBmNmNfBhYmNmNmNlFmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNhXmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNblmNmNwtmNmNmNmNav
|
||||
hPmcmcmcmcmcmcmcmcmcmcmcmcmcmNmNmNgNgNcpgNdrcqabababababababkDdJlRdJdJwHabababababablSlWacnAlXacJcmomvmwmycMeFbNbNbNbNbNbNeFeFeFdzdzdzdzdzdzdzeFeFeFbDbDbDbDbDbDeFeFMzfhNGaPmOKusuMIkTaPmOfGsuMIkTaPmOfGsuMIkTaPoZoZoZikoZqWxzMexexeTxacacacacmNmNgNmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNlFaFmNmNmNmNmNmNmNmNmNmNmNmNhXmNmNmNmNmNmNmNmNwtmNmNmNmNmNmNmNmNmNmNmNmNmNmNmNblmNmNmNmNmNeGmNav
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
/obj/item/clothing/under/rank/chief_medical_officer/skirt,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmo,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/modern/cmo,
|
||||
/obj/item/weapon/cartridge/cmo,
|
||||
/obj/item/clothing/gloves/sterile/latex,
|
||||
/obj/item/clothing/shoes/brown,
|
||||
|
||||
@@ -60,6 +60,10 @@
|
||||
|
||||
allowed_spawns = list("Arrivals Shuttle","Gateway","Cryogenic Storage","Cyborg Storage")
|
||||
|
||||
/datum/map/virgo_minitest/New()
|
||||
..()
|
||||
SSticker.start_immediately = TRUE
|
||||
|
||||
/datum/map_z_level/minitest/station
|
||||
z = Z_LEVEL_MAIN_VIRGO_TESTING
|
||||
name = "Station Level"
|
||||
|
||||
@@ -78,13 +78,21 @@ export const createSearch = (searchText, stringifier) => {
|
||||
};
|
||||
};
|
||||
|
||||
export const isUppercase = chr => {
|
||||
return chr.toUpperCase() === chr;
|
||||
};
|
||||
|
||||
export const capitalize = str => {
|
||||
// Handle array
|
||||
if (Array.isArray(str)) {
|
||||
return str.map(capitalize);
|
||||
}
|
||||
// Handle string
|
||||
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
|
||||
let chr = str.charAt(0);
|
||||
if (isUppercase(chr)) {
|
||||
return str; // Already caps, might be an acronym, so don't mess it up by lowercasing the rest
|
||||
}
|
||||
return chr.toUpperCase() + str.slice(1).toLowerCase();
|
||||
};
|
||||
|
||||
export const toTitleCase = str => {
|
||||
|
||||
@@ -20,14 +20,15 @@ THE SOFTWARE.
|
||||
import argparse, re, sys
|
||||
from collections import defaultdict
|
||||
from os import path, walk
|
||||
from codecs import open
|
||||
|
||||
opt = argparse.ArgumentParser()
|
||||
opt.add_argument('dir', help='The directory to scan for *.dm files with non-matching spans')
|
||||
args = opt.parse_args()
|
||||
|
||||
if(not path.isdir(args.dir)):
|
||||
print('Not a directory')
|
||||
sys.exit(1)
|
||||
print('Not a directory')
|
||||
sys.exit(1)
|
||||
|
||||
# These tuples are expected to be ordered as:
|
||||
# A unique human readable name (henceforth referred to as tuple name), a regex pattern matching an opening tag, a regex pattern matching a closing tag
|
||||
@@ -54,13 +55,13 @@ def get_tag_matches(line):
|
||||
|
||||
# Support def that simply checks if a given dictionary in the format tag/list of unmatched lines has mismatch entries.
|
||||
def has_mismatch(match_list):
|
||||
for tag, list_of_mismatched_lines in match_list.iteritems():
|
||||
for tag, list_of_mismatched_lines in match_list.items():
|
||||
if(len(list_of_mismatched_lines) > 0):
|
||||
return 1
|
||||
return 0
|
||||
|
||||
def arrange_mismatches(mismatches_by_tag, mismatch_line, mismatch_counts):
|
||||
for tag, mismatch_count in mismatch_counts.iteritems():
|
||||
for tag, mismatch_count in mismatch_counts.items():
|
||||
stack_of_existing_mismatches = mismatches_by_tag[tag]
|
||||
for i in range(0, abs(mismatch_count)):
|
||||
if len(stack_of_existing_mismatches) == 0:
|
||||
@@ -83,10 +84,10 @@ def arrange_mismatches(mismatches_by_tag, mismatch_line, mismatch_counts):
|
||||
|
||||
# This section parses all *.dm files in the given directory, recursively.
|
||||
for root, subdirs, files in walk(args.dir):
|
||||
for filename in files:
|
||||
if filename.endswith('.dm'):
|
||||
file_path = path.join(root, filename)
|
||||
with open(file_path, 'r') as file:
|
||||
for filename in files:
|
||||
if filename.endswith('.dm'):
|
||||
file_path = path.join(root, filename)
|
||||
with open(file_path, 'r', encoding='utf-8', errors='ignore') as file:
|
||||
mismatches_by_file[file_path] = defaultdict(list)
|
||||
for line_number, line in enumerate(file, 1):
|
||||
# Then for each line in the file, conduct the tuple open/close matching.
|
||||
@@ -97,10 +98,10 @@ for root, subdirs, files in walk(args.dir):
|
||||
# Loops over all matches and checks if there is a mismatch of tags.
|
||||
# If so, then and only then is the corresponding file path printed along with the number of unmatched open/close tags.
|
||||
total_mismatches = 0
|
||||
for file, mismatches_by_tag in mismatches_by_file.iteritems():
|
||||
for file, mismatches_by_tag in mismatches_by_file.items():
|
||||
if has_mismatch(mismatches_by_tag):
|
||||
print(file)
|
||||
for tag, mismatch_list in mismatches_by_tag.iteritems():
|
||||
for tag, mismatch_list in mismatches_by_tag.items():
|
||||
# A positive number means an excess of opening tag, a negative number means an excess of closing tags.
|
||||
total_mismatches += len(mismatch_list)
|
||||
if len(mismatch_list) > 0:
|
||||
|
||||
@@ -2142,7 +2142,9 @@
|
||||
#include "code\modules\clothing\suits\hooded_vr.dm"
|
||||
#include "code\modules\clothing\suits\hooded_yw.dm"
|
||||
#include "code\modules\clothing\suits\jobs.dm"
|
||||
#include "code\modules\clothing\suits\jobs_vr.dm"
|
||||
#include "code\modules\clothing\suits\labcoat.dm"
|
||||
#include "code\modules\clothing\suits\labcoat_vr.dm"
|
||||
#include "code\modules\clothing\suits\miscellaneous.dm"
|
||||
#include "code\modules\clothing\suits\miscellaneous_vr.dm"
|
||||
#include "code\modules\clothing\suits\solgov.dm"
|
||||
|
||||