This commit is contained in:
zerothebigboy
2021-06-13 18:19:01 -04:00
50 changed files with 477 additions and 117 deletions

View File

@@ -12,12 +12,9 @@
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"workbench.editorAssociations": [
{
"filenamePattern": "*.dmi",
"viewType": "imagePreview.previewEditor"
}
],
"workbench.editorAssociations": {
"*.dmi": "imagePreview.previewEditor"
},
"files.eol": "\n",
"gitlens.advanced.blame.customArguments": ["-w"],
"tgstationTestExplorer.project.resultsType": "json",

View File

@@ -14064,6 +14064,25 @@
},
/turf/open/space,
/area/space/nearstation)
"bbJ" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"bbQ" = (
/obj/structure/sign/poster/random,
/turf/closed/wall,
@@ -20284,6 +20303,29 @@
/obj/effect/turf_decal/tile/blue,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
"bFm" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"bFD" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -23429,9 +23471,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/structure/cable/white{
icon_state = "1-4"
},
@@ -30106,9 +30145,6 @@
/turf/open/floor/plasteel,
/area/security/brig)
"cgW" = (
/obj/structure/cable/white{
icon_state = "1-8"
},
/obj/structure/cable/white{
icon_state = "4-8"
},
@@ -30125,6 +30161,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/structure/cable/white{
icon_state = "1-4"
},
/turf/open/floor/plasteel,
/area/security/brig)
"cgX" = (
@@ -32693,9 +32732,6 @@
/obj/structure/cable/white{
icon_state = "1-4"
},
/obj/structure/cable/white{
icon_state = "1-2"
},
/obj/structure/cable/white{
icon_state = "1-8"
},
@@ -36366,6 +36402,10 @@
},
/turf/open/floor/plating,
/area/maintenance/port)
"cEA" = (
/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engineering/atmos)
"cFF" = (
/turf/open/floor/engine{
name = "Holodeck Projector Floor"
@@ -46132,8 +46172,8 @@
},
/obj/effect/turf_decal/delivery,
/obj/machinery/atmospherics/components/binary/valve/digital{
icon_state = "dvalve_map-2";
dir = 8
dir = 8;
icon_state = "dvalve_map-2"
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
@@ -72111,6 +72151,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"ewA" = (
@@ -74589,8 +74630,10 @@
/turf/open/floor/wood,
/area/service/library)
"fsx" = (
/obj/machinery/portable_atmospherics/canister/air,
/turf/open/floor/engine/air,
/obj/machinery/light{
dir = 4
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
"fsP" = (
/obj/structure/table/wood,
@@ -77511,8 +77554,8 @@
/area/engineering/main)
"grf" = (
/obj/machinery/atmospherics/pipe/simple/orange/hidden{
icon_state = "pipe11-2";
dir = 5
dir = 5;
icon_state = "pipe11-2"
},
/turf/closed/wall/r_wall,
/area/science/xenobiology)
@@ -77848,8 +77891,8 @@
dir = 8
},
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
icon_state = "inje_map-2";
dir = 4
dir = 4;
icon_state = "inje_map-2"
},
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
@@ -83374,6 +83417,28 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/command/storage/eva)
"ipc" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 4
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"ipl" = (
/obj/structure/rack,
/obj/item/book/manual/wiki/engineering_hacking{
@@ -92073,7 +92138,6 @@
/turf/closed/wall,
/area/commons/storage/primary)
"lkg" = (
/obj/machinery/portable_atmospherics/canister/toxins,
/obj/machinery/atmospherics/miner/toxins,
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
@@ -93634,7 +93698,6 @@
/turf/open/floor/plasteel,
/area/engineering/main)
"lNq" = (
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/atmospherics/miner/nitrogen,
/turf/open/floor/engine/n2,
/area/engineering/atmos)
@@ -94989,6 +95052,10 @@
},
/turf/open/floor/plasteel/dark,
/area/engineering/atmos)
"mmq" = (
/obj/effect/turf_decal/vg_decals/atmos/nitrogen,
/turf/open/floor/engine/n2,
/area/engineering/atmos)
"mmC" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -100471,7 +100538,6 @@
/turf/open/floor/plasteel/dark,
/area/service/library)
"ohX" = (
/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
/obj/machinery/atmospherics/miner/carbon_dioxide,
/turf/open/floor/engine/co2,
/area/engineering/atmos)
@@ -102237,6 +102303,27 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"oOQ" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"oOV" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -102476,9 +102563,6 @@
/turf/open/floor/plasteel,
/area/engineering/break_room)
"oTt" = (
/obj/machinery/portable_atmospherics/canister/nitrous_oxide{
valve_open = 1
},
/obj/machinery/atmospherics/miner/n2o,
/turf/open/floor/engine/n2o,
/area/engineering/atmos)
@@ -103357,6 +103441,28 @@
},
/turf/open/floor/plating,
/area/cargo/qm)
"pkY" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"plb" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -105873,6 +105979,7 @@
dir = 1;
name = "atmospherics camera"
},
/obj/effect/turf_decal/vg_decals/atmos/mix,
/turf/open/floor/engine/vacuum,
/area/engineering/atmos)
"qbJ" = (
@@ -105921,6 +106028,10 @@
},
/turf/open/floor/plating,
/area/engineering/atmos)
"qcm" = (
/obj/effect/turf_decal/vg_decals/atmos/plasma,
/turf/open/floor/engine/plasma,
/area/engineering/atmos)
"qcW" = (
/obj/machinery/firealarm{
pixel_y = 26
@@ -108117,6 +108228,10 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmospherics_engine)
"qYy" = (
/obj/effect/turf_decal/vg_decals/atmos/oxygen,
/turf/open/floor/engine/o2,
/area/engineering/atmos)
"qYD" = (
/obj/machinery/atmospherics/pipe/simple/yellow/visible{
dir = 9
@@ -109796,6 +109911,10 @@
dir = 6
},
/area/science/circuit)
"rCx" = (
/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide,
/turf/open/floor/engine/n2o,
/area/engineering/atmos)
"rCK" = (
/obj/machinery/button/door{
id = "teleporterhubshutters";
@@ -115966,6 +116085,10 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"tBF" = (
/obj/effect/turf_decal/vg_decals/atmos/air,
/turf/open/floor/engine/air,
/area/engineering/atmos)
"tBH" = (
/obj/machinery/door/airlock/atmos/glass/critical{
heat_proof = 1;
@@ -116977,7 +117100,6 @@
/turf/open/floor/plasteel,
/area/cargo/storage)
"tWb" = (
/obj/machinery/portable_atmospherics/canister/oxygen,
/obj/machinery/atmospherics/miner/oxygen,
/turf/open/floor/engine/o2,
/area/engineering/atmos)
@@ -122614,6 +122736,29 @@
},
/turf/open/floor/plasteel/dark,
/area/service/chapel/office)
"wcM" = (
/obj/structure/window/reinforced{
dir = 4
},
/obj/structure/window/reinforced{
dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"wei" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
@@ -124381,6 +124526,29 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
"wIV" = (
/obj/structure/window/reinforced{
dir = 1;
layer = 2.9
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
/obj/machinery/light/small{
dir = 1
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
"wJE" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/blood/old,
@@ -134718,7 +134886,7 @@ bkF
pQq
hzs
hzs
hzs
ipc
hzs
uSd
fWX
@@ -134726,7 +134894,7 @@ gxc
gxc
gxc
gxc
gxc
bFm
gxc
kdA
brN
@@ -135253,12 +135421,12 @@ cab
bPC
bRO
ivC
gxc
bFm
gxc
eCQ
hzs
oMz
hzs
ipc
hzs
rew
brN
@@ -136000,7 +136168,7 @@ ajr
ajr
ajr
bkF
tBB
bbJ
brO
aad
btH
@@ -136031,7 +136199,7 @@ cdt
cdt
aad
bkE
tBB
oOQ
brM
ajr
ajr
@@ -138056,7 +138224,7 @@ ajr
ajr
ajr
bkF
tBB
bbJ
brO
aad
btH
@@ -138087,7 +138255,7 @@ cdt
cdt
aad
bkE
tBB
oOQ
brM
ajr
ajr
@@ -138851,12 +139019,12 @@ cam
bPC
bRO
ygA
gxc
wcM
gxc
eCQ
hzs
xaW
hzs
pkY
hzs
elb
brN
@@ -139344,7 +139512,7 @@ bkF
mdI
hzs
hzs
hzs
pkY
hzs
uhb
fWX
@@ -139352,7 +139520,7 @@ gxc
gxc
gxc
tzE
gxc
wcM
gxc
xic
brN
@@ -141414,7 +141582,7 @@ aad
bNF
aad
bRP
swP
wIV
stE
evL
aJD
@@ -149868,15 +150036,15 @@ aSQ
iio
iMu
ohX
hFW
cEA
iio
sEM
lkg
kRS
qcm
iio
rUo
oTt
lbI
rCx
iio
kcG
kcG
@@ -152950,13 +153118,13 @@ fcn
lfN
oUP
hlN
lXg
fsx
rmJ
lXg
lXg
lXg
xQQ
lXg
fsx
lXg
lXg
mhk
@@ -157318,16 +157486,16 @@ aaa
aad
iio
wTN
fsx
lEq
tBF
iio
wjw
tWb
sCm
qYy
iio
eFu
lNq
skw
mmq
iio
aMN
emZ

View File

@@ -7,8 +7,9 @@
var/left_hand
var/inv_slots
var/proctype //if present, will be invoked on headwear generation.
var/escape_on_find = FALSE //if present, will be released upon the item being 'found' (i.e. opening a container or pocket with it present)
/datum/element/mob_holder/Attach(datum/target, worn_state, alt_worn, right_hand, left_hand, inv_slots = NONE, proctype)
/datum/element/mob_holder/Attach(datum/target, worn_state, alt_worn, right_hand, left_hand, inv_slots = NONE, proctype, escape_on_find)
. = ..()
if(!isliving(target))
@@ -20,6 +21,7 @@
src.left_hand = left_hand
src.inv_slots = inv_slots
src.proctype = proctype
src.escape_on_find = escape_on_find
RegisterSignal(target, COMSIG_CLICK_ALT, .proc/mob_try_pickup)
RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/on_examine)
@@ -55,6 +57,8 @@
to_chat(user, "<span class='notice'>You pick [source] up.</span>")
source.drop_all_held_items()
var/obj/item/clothing/head/mob_holder/holder = new(get_turf(source), source, worn_state, alt_worn, right_hand, left_hand, inv_slots)
holder.escape_on_find = escape_on_find
if(proctype)
INVOKE_ASYNC(src, proctype, source, holder, user)
user.put_in_hands(holder)
@@ -78,6 +82,7 @@
w_class = WEIGHT_CLASS_BULKY
dynamic_hair_suffix = ""
var/mob/living/held_mob
var/escape_on_find
/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/target, worn_state, alt_worn, right_hand, left_hand, slots = NONE)
. = ..()
@@ -189,3 +194,9 @@
if(ismob(location))
return location.loc.remove_air(amount)
return location.remove_air(amount)
// escape when found if applicable
/obj/item/clothing/head/mob_holder/on_found(mob/living/finder)
if(escape_on_find)
finder.visible_message("[finder] accidentally releases the [held_mob]!")
release()

View File

@@ -18,8 +18,6 @@ GLOBAL_LIST_INIT(meteorsB, list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/m
GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
GLOBAL_LIST_INIT(meteorsCat, list(/obj/effect/meteor/cat)) //for cat meteors
///////////////////////////////
//Meteor spawning global procs
@@ -347,17 +345,6 @@ GLOBAL_LIST_INIT(meteorsCat, list(/obj/effect/meteor/cat)) //for cat meteors
..()
if(prob(20))
explosion(src.loc,2,4,6,8)
/obj/effect/meteor/cat
name = "space cat"
icon_state = "catmeteor"
desc = "Meow."
hits = 1
heavy = FALSE
meteorsound = 'sound/effects/meow1.ogg'
meteordrop = list(/mob/living/simple_animal/pet/cat/space)
threat = 0
dropamt = 1
//////////////////////////
//Spookoween meteors

View File

@@ -1,7 +1,10 @@
/obj/machinery/computer/bank_machine
name = "bank machine"
desc = "A machine used to deposit and withdraw station funds."
icon = 'goon/icons/obj/goon_terminals.dmi'
icon = 'icons/obj/computer.dmi'
icon_state = "computer"
icon_screen = "vault"
icon_keyboard = "security_key"
idle_power_usage = 100
var/siphoning = FALSE

View File

@@ -3,7 +3,7 @@
desc = "A culinary marvel that uses matter-to-energy conversion to store dishes and shards. Convenient! \
Additional features include a vacuum function to suck in nearby dishes, and an automatic transfer beam that empties its contents into nearby disposal bins every now and then. \
Or you can just drop your plates on the floor, like civilized folk."
icon = 'goon/icons/obj/kitchen.dmi'
icon = 'icons/obj/kitchen.dmi'
icon_state = "synthesizer"
idle_power_usage = 8 //5 with default parts
active_power_usage = 13 //10 with default parts

View File

@@ -1,7 +1,7 @@
/obj/item/singularityhammer
name = "singularity hammer"
desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows."
icon_state = "mjollnir0"
icon_state = "singularity_hammer0"
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
flags_1 = CONDUCT_1
@@ -25,7 +25,7 @@
/obj/item/singularityhammer/ComponentInitialize()
. = ..()
AddComponent(/datum/component/two_handed, force_multiplier=4, icon_wielded="mjollnir1")
AddComponent(/datum/component/two_handed, force_multiplier=4, icon_wielded="singularity_hammer1")
/// triggered on wield of two handed item
/obj/item/singularityhammer/proc/on_wield(obj/item/source, mob/user)
@@ -36,7 +36,7 @@
wielded = FALSE
/obj/item/singularityhammer/update_icon_state()
icon_state = "mjollnir0"
icon_state = "singularity_hammer0"
/obj/item/singularityhammer/Destroy()
STOP_PROCESSING(SSobj, src)

View File

@@ -13,15 +13,16 @@
return 0
. = ..()
// Exists to work around the minimum 700 cr price for goodies / small items
/obj/structure/closet/secure_closet/goodies
// Exists to work around the minimum 700 cr price for goodies / small items / materials
/obj/structure/closet/secure_closet/cargo
name = "cargo locker"
icon_state = "goodies"
desc = "A sturdier card-locked storage unit used for bulky shipments."
max_integrity = 500 // Same as crates.
melee_min_damage = 25 // Idem.
/obj/structure/closet/secure_closet/goodies/owned
name = "private locker"
/obj/structure/closet/secure_closet/cargo/owned
name = "private cargo locker"
desc = "A locker designed to only open for who purchased its contents."
///Account of the person buying the crate if private purchasing.
var/datum/bank_account/buyer_account
@@ -32,18 +33,18 @@
///Is the crate being bought by a person, or a budget card?
var/department_purchase = FALSE
/obj/structure/closet/secure_closet/goodies/owned/examine(mob/user)
/obj/structure/closet/secure_closet/cargo/owned/examine(mob/user)
. = ..()
. += "<span class='notice'>It's locked with a privacy lock, and can only be unlocked by the buyer's ID.</span>"
/obj/structure/closet/secure_closet/goodies/owned/Initialize(mapload, datum/bank_account/_buyer_account)
/obj/structure/closet/secure_closet/cargo/owned/Initialize(mapload, datum/bank_account/_buyer_account)
. = ..()
buyer_account = _buyer_account
if(istype(buyer_account, /datum/bank_account/department))
department_purchase = TRUE
department_account = buyer_account
/obj/structure/closet/secure_closet/goodies/owned/togglelock(mob/living/user, silent)
/obj/structure/closet/secure_closet/cargo/owned/togglelock(mob/living/user, silent)
if(privacy_lock)
if(!broken)
var/obj/item/card/id/id_card = user.get_idcard(TRUE)

View File

@@ -96,7 +96,7 @@
var/static/list/blacklisted_error = typecacheof(list(
/obj/structure/closet/crate/secure,
/obj/structure/closet/crate/large,
/obj/structure/closet/secure_closet/goodies
/obj/structure/closet/secure_closet/cargo
))
if(is_type_in_list(container, blacklisted_error))
P.errors &= ~MANIFEST_ERROR_ITEM

View File

@@ -22,8 +22,8 @@
/datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account)
var/obj/structure/closet/crate/C
if(paying_account)
if(ispath(crate_type, /obj/structure/closet/secure_closet/goodies)) // lets ensure private orders don't come in crates when the original one comes in lockers
C = new /obj/structure/closet/secure_closet/goodies/owned(A, paying_account) // that would lead to infinite money exploits
if(ispath(crate_type, /obj/structure/closet/secure_closet/cargo)) // lets ensure private orders don't come in crates when the original one comes in lockers
C = new /obj/structure/closet/secure_closet/cargo/owned(A, paying_account) // that would lead to infinite money exploits
else
C = new /obj/structure/closet/crate/secure/owned(A, paying_account)
C.name = "[crate_name] - Purchased by [paying_account.account_holder]"

View File

@@ -14,56 +14,56 @@
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/materials/cardboard50
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "50 Cardboard Sheets"
desc = "Create a bunch of boxes."
cost = 300 //thrice their export value
contains = list(/obj/item/stack/sheet/cardboard/fifty)
/datum/supply_pack/materials/glass50
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "50 Glass Sheets"
desc = "Let some nice light in with fifty glass sheets!"
cost = 300 //double their export value
contains = list(/obj/item/stack/sheet/glass/fifty)
/datum/supply_pack/materials/metal50
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "50 Metal Sheets"
desc = "Any construction project begins with a good stack of fifty metal sheets!"
cost = 300 //double their export value
contains = list(/obj/item/stack/sheet/metal/fifty)
/datum/supply_pack/materials/plasteel20
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "20 Plasteel Sheets"
desc = "Reinforce the station's integrity with twenty plasteel sheets!"
cost = 4000
contains = list(/obj/item/stack/sheet/plasteel/twenty)
/datum/supply_pack/materials/plastic50
crate_type = /obj/structure/closet/secure_closet/goodies
name = "50 Plastic Sheets"
/datum/supply_pack/materials/plastic20
crate_type = /obj/structure/closet/secure_closet/cargo
name = "20 Plastic Sheets"
desc = "Build a limitless amount of toys with fifty plastic sheets!"
cost = 200 // double their export
contains = list(/obj/item/stack/sheet/plastic/twenty)
/datum/supply_pack/materials/sandstone30
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "30 Sandstone Blocks"
desc = "Neither sandy nor stoney, these thirty blocks will still get the job done."
cost = 150 // five times their export
contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty)
/datum/supply_pack/materials/wood20
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "20 Wood Planks"
desc = "Turn cargo's boring metal groundwork into beautiful panelled flooring and much more with twenty wooden planks!"
cost = 400 // 6-7 planks shy from having equal import/export prices
contains = list(/obj/item/stack/sheet/mineral/wood/twenty)
/datum/supply_pack/materials/rcdammo
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "Large RCD ammo Single-Pack"
desc = "A single large compressed RCD matter pack, to help with any holes or projects people might be working on."
cost = 600

View File

@@ -370,7 +370,7 @@
//////////////////////////////////////////////////////////////////////////////
/datum/supply_pack/misc/carpet
crate_type = /obj/structure/closet/secure_closet/goodies
crate_type = /obj/structure/closet/secure_closet/cargo
name = "Classic Carpet Single-Pack"
desc = "Plasteel floor tiles getting on your nerves? This 50 units stack of extra soft carpet will tie any room together."
cost = 200

View File

@@ -56,7 +56,7 @@
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
icon_state = "tactifool"
item_state = "bl_suit"
has_sensor = TRUE
has_sensor = HAS_SENSORS
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0, "wound" = 5)
/obj/item/clothing/under/syndicate/cosmetic/skirt
@@ -64,6 +64,7 @@
icon_state = "tactifool_skirt"
fitted = FEMALE_UNIFORM_TOP
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
can_adjust = FALSE
/obj/item/clothing/under/syndicate/sniper
name = "Tactical turtleneck suit"

View File

@@ -1,11 +0,0 @@
/datum/round_event_control/meteor_wave/cat
name = "Meteor Wave: CATastrophic"
typepath = /datum/round_event/meteor_wave/cat
weight = 10
max_occurrences = 1
/datum/round_event/meteor_wave/cat
wave_name = "cat"
/datum/round_event/meteor_wave/cat/announce(fake)
priority_announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert", "meteors")

View File

@@ -56,8 +56,6 @@
wave_type = GLOB.meteorsC
if("halloween")
wave_type = GLOB.meteorsSPOOKY
if("cat")
wave_type = GLOB.meteorsCat
else
WARNING("Wave name of [wave_name] not recognised.")
kill()

View File

@@ -213,7 +213,7 @@
)
result = /obj/item/reagent_containers/food/snacks/salad/gumbo
subcategory = CAT_MEAT
/datum/crafting_recipe/food/goliathcalamari
name = "Goliath Calamari"
reqs = list(
@@ -221,4 +221,4 @@
/datum/reagent/consumable/cooking_oil = 10
)
result = /obj/item/reagent_containers/food/snacks/goliathcalamari
subcategory = CAT_MEAT

View File

@@ -58,12 +58,17 @@
var/icon_base = "bee"
var/static/beehometypecache = typecacheof(/obj/structure/beebox)
var/static/hydroponicstypecache = typecacheof(/obj/machinery/hydroponics)
var/held_icon = "" // bees are small and have no held icon (aka the coder doesn't know how to sprite it)
/mob/living/simple_animal/hostile/poison/bees/Initialize()
. = ..()
generate_bee_visuals()
AddComponent(/datum/component/swarming)
/mob/living/simple_animal/hostile/poison/bees/ComponentInitialize()
. = ..()
AddElement(/datum/element/mob_holder, held_icon, escape_on_find = TRUE)
/mob/living/simple_animal/hostile/poison/bees/Destroy()
if(beehome)
beehome.bees -= src

View File

@@ -63,4 +63,4 @@
if(printer_slot)
. += "It has a printer installed."
if(user_is_adjacent)
. += "The printer's paper levels are at: [printer_slot.stored_paper]/[printer_slot.max_paper].</span>]"
. += "The printer's paper levels are at: [printer_slot.stored_paper]/[printer_slot.max_paper].</span>"

View File

@@ -114,6 +114,12 @@
update_icon()
if(user && istype(user))
ui_interact(user) // Re-open the UI on this computer. It should show the main screen now.
if("eject_pen")
if(istype(src, /obj/item/modular_computer/tablet))
var/obj/item/modular_computer/tablet/self = src
if(self.can_have_pen)
self.remove_pen()
return
if("PC_killprogram")
var/prog = params["name"]

View File

@@ -18,6 +18,69 @@
var/has_variants = TRUE
var/finish_color = null
//Pen stuff
var/list/contained_item = list(/obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/flashlight/pen, /obj/item/clothing/mask/cigarette)
var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above.
var/can_have_pen = TRUE
/obj/item/modular_computer/tablet/examine(mob/user)
. = ..()
if(inserted_item && (!isturf(loc)))
. += "<span class='notice'>Ctrl-click to remove [inserted_item].</span>"
/obj/item/modular_computer/tablet/Initialize()
. = ..()
if(can_have_pen)
if(inserted_item)
inserted_item = new inserted_item(src)
else
inserted_item = new /obj/item/pen(src)
/obj/item/modular_computer/tablet/proc/insert_pen(obj/item/pen)
if(!usr.transferItemToLoc(pen, src))
return
to_chat(usr, "<span class='notice'>You slide \the [pen] into \the [src]'s pen slot.</span>")
inserted_item = pen
playsound(src, 'sound/machines/button.ogg', 50, 1)
/obj/item/modular_computer/tablet/proc/remove_pen()
if(hasSiliconAccessInArea(usr) || !usr.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
return
if(inserted_item)
usr.put_in_hands(inserted_item)
to_chat(usr, "<span class='notice'>You remove [inserted_item] from \the [src]'s pen slot.</span>")
inserted_item = null
else
to_chat(usr, "<span class='warning'>\The [src] does not have a pen in it!</span>")
/obj/item/modular_computer/tablet/CtrlClick(mob/user)
. = ..()
if(isturf(loc))
return
if(can_have_pen)
remove_pen(user)
/obj/item/modular_computer/tablet/attackby(obj/item/W, mob/user)
if(can_have_pen && is_type_in_list(W, contained_item))
if(inserted_item)
to_chat(user, "<span class='warning'>There is \a [inserted_item] blocking \the [src]'s pen slot!</span>")
return
else
insert_pen(W)
return
. = ..()
/obj/item/modular_computer/tablet/Destroy()
if(istype(inserted_item))
QDEL_NULL(inserted_item)
return ..()
/obj/item/modular_computer/tablet/ui_data(mob/user)
. = ..()
.["PC_showpeneject"] = inserted_item ? 1 : 0
/obj/item/modular_computer/tablet/update_icon_state()
if(has_variants)
if(!finish_color)
@@ -64,6 +127,7 @@
var/datum/computer_file/program/robotact/robotact
///IC log that borgs can view in their personal management app
var/list/borglog = list()
can_have_pen = FALSE
/obj/item/modular_computer/tablet/integrated/Initialize(mapload)
. = ..()

View File

@@ -126,7 +126,8 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list(
var/value = 0
var/purchases = 0
var/list/goodies_by_buyer = list() // if someone orders more than GOODY_FREE_SHIPPING_MAX goodies, we upcharge to a normal crate so they can't carry around 20 combat shotties
// var/list/lockers_by_buyer = list() // TODO, combine orders that come in lockers into a single locker to not crowd the shuttle
var/list/lockers_by_buyer = list() // used to combine orders that come in lockers into a single locker to not crowd the shuttle
for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
if(!empty_turfs.len)
break
@@ -147,11 +148,15 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list(
D.bank_card_talk("Goody order size exceeds free shipping limit: Assessing [CRATE_TAX] credit S&H fee.")
else
D = SSeconomy.get_dep_account(ACCOUNT_CAR)
if(D)
if(!D.adjust_money(-price))
if(SO.paying_account)
D.bank_card_talk("Cargo order #[SO.id] rejected due to lack of funds. Credits required: [price]")
continue
else if(ispath(SO.pack.crate_type, /obj/structure/closet/secure_closet/cargo))
LAZYADD(lockers_by_buyer[D], SO)
if(SO.paying_account)
if(SO.pack.goody)
@@ -164,7 +169,7 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list(
SSshuttle.orderhistory += SO
QDEL_NULL(SO.applied_coupon)
if(!SO.pack.goody) //we handle goody crates below
if(!SO.pack.goody && !ispath(SO.pack.crate_type, /obj/structure/closet/secure_closet/cargo)) //we handle goody crates and material closets below
SO.generate(pick_n_take(empty_turfs))
SSblackbox.record_feedback("nested tally", "cargo_imports", 1, list("[SO.pack.cost]", "[SO.pack.name]"))
@@ -198,6 +203,33 @@ GLOBAL_LIST_INIT(cargo_shuttle_leave_behind_typecache, typecacheof(list(
misc_contents[buyer] += item
misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] "
// handling locker bundles
for(var/D in lockers_by_buyer)
var/list/buying_account_orders = lockers_by_buyer[D]
var/buyer
if(!istype(D, /datum/bank_account/department)) // department accounts break the secure closet for some reason
var/obj/structure/closet/secure_closet/cargo/owned/our_closet = new /obj/structure/closet/secure_closet/cargo/owned(pick_n_take(empty_turfs))
var/datum/bank_account/buying_account = D
buyer = buying_account.account_holder
our_closet.buyer_account = buying_account
our_closet.name = "private cargo locker - purchased by [buyer]"
miscboxes[buyer] = our_closet
else
var/obj/structure/closet/secure_closet/cargo/our_closet = new /obj/structure/closet/secure_closet/cargo(pick_n_take(empty_turfs))
buyer = "Cargo"
miscboxes[buyer] = our_closet
misc_contents[buyer] = list()
for(var/O in buying_account_orders)
var/datum/supply_order/our_order = O
for(var/item in our_order.pack.contains)
misc_contents[buyer] += item
misc_order_num[buyer] = "[misc_order_num[buyer]]#[our_order.id] "
for(var/I in miscboxes)
var/datum/supply_order/SO = new/datum/supply_order()
SO.id = misc_order_num[I]

View File

@@ -0,0 +1,7 @@
/datum/unit_test/crafting_recipes/Run()
for(var/i in GLOB.crafting_recipes)
var/datum/crafting_recipe/R = i
if(!R.subcategory)
Fail("Invalid subcategory on [R] ([R.type]).")
if(!R.category && (R.cateogry != CAT_NONE))
Fail("Invalid category on [R] ([R.type])")

Binary file not shown.

Before

Width:  |  Height:  |  Size: 951 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -50,6 +50,12 @@
-->
<div class="commit sansserif">
<h2 class="date">12 June 2021</h2>
<h3 class="author">silicons updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">xenos are now truly immune to stamina damage.</li>
</ul>
<h2 class="date">10 June 2021</h2>
<h3 class="author">Arturlang updated:</h3>
<ul class="changes bgimages16">

View File

@@ -29443,3 +29443,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
zeroisthebiggay:
- bugfix: Fixed an exploit allowing you to grab people from anywhere with a clowncar.
- balance: revenant essence objective reduced
2021-06-12:
silicons:
- bugfix: xenos are now truly immune to stamina damage.

View File

@@ -1,4 +0,0 @@
author: "silicons"
delete-after: True
changes:
- bugfix: "xenos are now truly immune to stamina damage."

View File

@@ -0,0 +1,4 @@
author: "SandPoot"
delete-after: True
changes:
- bugfix: "The cosmetic turtleneck and skirtleneck no longer start with broken sensors."

View File

@@ -0,0 +1,8 @@
author: "TripleShades"
delete-after: True
changes:
- rscadd: "Lights to AI Sat Walkways"
- rscadd: "Lights to Atmospherics"
- rscadd: "Floor labels to Atmospherics Gas Miner containment units"
- rscdel: "Gas canisters from Gas Miner containment units"
- rscdel: "Excessive wiring in Security and Detective's Office"

View File

@@ -0,0 +1,5 @@
author: "SandPoot"
delete-after: True
changes:
- rscadd: "Tablet computers now have a pen slot, they can almost replace your pda!"
- spellcheck: "Removed a bracket from printer's examine."

View File

@@ -0,0 +1,5 @@
author: "qweq12yt"
delete-after: True
changes:
- bugfix: "Locker orders now properly bundle together in a single locker (still separated by buyer)."
- bugfix: "Changed some package names to be more accurate."

View File

@@ -0,0 +1,4 @@
author: "timothyteakettle"
delete-after: True
changes:
- rscadd: "bees can go in containers and are released upon opening the container"

View File

@@ -0,0 +1,4 @@
author: "zeroisthebiggay"
delete-after: True
changes:
- imageadd: "new water cooler sprite"

View File

@@ -0,0 +1,5 @@
author: "zeroisthebiggay"
delete-after: True
changes:
- imageadd: "new bank machine sprite"
- imagedel: "unused goon coffin sprite"

View File

@@ -0,0 +1,4 @@
author: "zeroisthebiggay"
delete-after: True
changes:
- imageadd: "new singularity hammer sprite"

View File

@@ -0,0 +1,4 @@
author: "zeroisthebiggay"
delete-after: True
changes:
- imageadd: "new singularity hammer sprite"

View File

@@ -0,0 +1,4 @@
author: "timothyteakettle"
delete-after: True
changes:
- rscadd: "7 more round tips have been added"

View File

@@ -0,0 +1,4 @@
author: "MrJWhit"
delete-after: True
changes:
- balance: "Removes cat meteors."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 KiB

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 113 KiB

View File

@@ -303,3 +303,11 @@ You do not regenerate as much stamina while in combat mode. Resting (being on th
Keybinds can be reassigned in character setup on the keybindings tab. This is extremely useful, especially if you know how to use independent binds.
If your suit sensors have been shorted out, you can use cable coil to fix them by using the coil on your suit. Your suit needs to be in proper condition, however.
Most clothing when damaged can be repaired using cloth, but there may be some clothes out there that will require different stacks of materials.
You should under no circumstances, teleport bread.
Food made from upgraded machines has a higher quality. Food with a high enough quality can give good moodlets even if your species dislikes the kind of food!
Frying something makes it edible, while still maintaining its original functionality.
Slimepeople are damaged by most things that heal toxin damage, and healed by most things that deal it. You can recognise people with this functionality through them having a cyan coloured species name when examined!
EMPs can be created by mixing uranium and iron. The power of the pulse is determined by the distance from its epicentre, and the maximum distance is determined by the volume of the reaction!
Lizards start with a disabled mutation that allows them to breath fire. This can be unlocked through the usage of genetics!
Several loadout items can be unlocked through progress in parts of the game. The progress for these can be tracked in the loadout menu.

View File

@@ -28,6 +28,7 @@ export const NtosWindow = (props, context) => {
PC_stationtime,
PC_programheaders = [],
PC_showexitprogram,
PC_showpeneject,
} = data;
return (
<Window
@@ -78,6 +79,17 @@ export const NtosWindow = (props, context) => {
src={resolveAsset(PC_apclinkicon)} />
</Box>
)}
{!!PC_showpeneject && (
<Button
width="26px"
lineHeight="22px"
textAlign="center"
color="transparent"
icon="pen-alt"
tooltip="Eject pen"
tooltipPosition="bottom-left"
onClick={() => act('eject_pen')} />
)}
{!!PC_showexitprogram && (
<Button
width="26px"

File diff suppressed because one or more lines are too long

View File

@@ -7563,7 +7563,7 @@ __metadata:
glob: ^7.1.6
source-map: ^0.7.3
stacktrace-parser: ^0.1.10
ws: ^7.4.3
ws: ^7.4.6
languageName: unknown
linkType: soft
@@ -8311,7 +8311,7 @@ typescript@^4.1.5:
languageName: node
linkType: hard
"ws@npm:^7.2.3, ws@npm:^7.3.1, ws@npm:^7.4.3":
"ws@npm:^7.2.3, ws@npm:^7.3.1":
version: 7.4.3
resolution: "ws@npm:7.4.3"
peerDependencies:
@@ -8326,6 +8326,21 @@ typescript@^4.1.5:
languageName: node
linkType: hard
"ws@npm:^7.4.6":
version: 7.4.6
resolution: "ws@npm:7.4.6"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ^5.0.2
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
checksum: ffeb626d92f14aa3a67aa3784824c1d290131e25d225f4ca6b1b6b6d7ea754fca67694d89a5b99b144382365e1bccf1f7ec2f92df56f0d25f44939b070452f06
languageName: node
linkType: hard
"xml-name-validator@npm:^3.0.0":
version: 3.0.0
resolution: "xml-name-validator@npm:3.0.0"