diff --git a/.vscode/settings.json b/.vscode/settings.json index 849a5165e1..bfce9bda7c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -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", diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 2e84b729e7..92e0f7a5b9 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -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 diff --git a/code/datums/elements/mob_holder.dm b/code/datums/elements/mob_holder.dm index f73826d899..92ee9be7d2 100644 --- a/code/datums/elements/mob_holder.dm +++ b/code/datums/elements/mob_holder.dm @@ -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, "You pick [source] up.") 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() diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 64b950a417..9953b593d9 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -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 diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 882d0b989c..79fff2a76a 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -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 diff --git a/code/game/machinery/dish_drive.dm b/code/game/machinery/dish_drive.dm index 3cfd8fdfc4..869d583037 100644 --- a/code/game/machinery/dish_drive.dm +++ b/code/game/machinery/dish_drive.dm @@ -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 diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index 7a6c159160..e58dbc23ce 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -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) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 5b78ca323c..4266f006ec 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -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) . = ..() . += "It's locked with a privacy lock, and can only be unlocked by the buyer's ID." -/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) diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index ad9fa2018e..c2c7897f0f 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -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 diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 3e3aeff592..13f1e77441 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -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]" diff --git a/code/modules/cargo/packs/materials.dm b/code/modules/cargo/packs/materials.dm index 94f14fb503..90629706b5 100644 --- a/code/modules/cargo/packs/materials.dm +++ b/code/modules/cargo/packs/materials.dm @@ -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 diff --git a/code/modules/cargo/packs/misc.dm b/code/modules/cargo/packs/misc.dm index d72ee231a8..91663dbe0f 100644 --- a/code/modules/cargo/packs/misc.dm +++ b/code/modules/cargo/packs/misc.dm @@ -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 diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index d7ee4de62c..58d5d26e86 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -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" diff --git a/code/modules/events/cat_wave.dm b/code/modules/events/cat_wave.dm deleted file mode 100644 index 155da8ca08..0000000000 --- a/code/modules/events/cat_wave.dm +++ /dev/null @@ -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") diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm index 9aa9cac258..e69af1df13 100644 --- a/code/modules/events/meteor_wave.dm +++ b/code/modules/events/meteor_wave.dm @@ -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() diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index 769bf1dc19..edd30ab1a9 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -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 diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 0a3cde3ef8..399a403ce7 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -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 diff --git a/code/modules/modular_computers/computers/_modular_computer_shared.dm b/code/modules/modular_computers/computers/_modular_computer_shared.dm index 77888fdf01..0aca92f9d8 100644 --- a/code/modules/modular_computers/computers/_modular_computer_shared.dm +++ b/code/modules/modular_computers/computers/_modular_computer_shared.dm @@ -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].]" + . += "The printer's paper levels are at: [printer_slot.stored_paper]/[printer_slot.max_paper]." diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index a9f353bca4..d9d9e5c876 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -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"] diff --git a/code/modules/modular_computers/computers/item/tablet.dm b/code/modules/modular_computers/computers/item/tablet.dm index 72e1283553..d4d3ef52c2 100644 --- a/code/modules/modular_computers/computers/item/tablet.dm +++ b/code/modules/modular_computers/computers/item/tablet.dm @@ -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))) + . += "Ctrl-click to remove [inserted_item]." + +/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, "You slide \the [pen] into \the [src]'s pen slot.") + 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, "You remove [inserted_item] from \the [src]'s pen slot.") + inserted_item = null + else + to_chat(usr, "\The [src] does not have a pen in it!") + +/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, "There is \a [inserted_item] blocking \the [src]'s pen slot!") + 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) . = ..() diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 6044e8131d..bfda6c453c 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -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] diff --git a/code/modules/unit_tests/crafting_recipes.dm b/code/modules/unit_tests/crafting_recipes.dm new file mode 100644 index 0000000000..33803bd111 --- /dev/null +++ b/code/modules/unit_tests/crafting_recipes.dm @@ -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])") diff --git a/goon/icons/obj/closet.dmi b/goon/icons/obj/closet.dmi deleted file mode 100644 index 6083923033..0000000000 Binary files a/goon/icons/obj/closet.dmi and /dev/null differ diff --git a/goon/icons/obj/goon_terminals.dmi b/goon/icons/obj/goon_terminals.dmi deleted file mode 100644 index 6452c9fc09..0000000000 Binary files a/goon/icons/obj/goon_terminals.dmi and /dev/null differ diff --git a/goon/icons/obj/kitchen.dmi b/goon/icons/obj/kitchen.dmi deleted file mode 100644 index b45307a647..0000000000 Binary files a/goon/icons/obj/kitchen.dmi and /dev/null differ diff --git a/html/changelog.html b/html/changelog.html index fe3a0fe1b5..5537637776 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,12 @@ -->
+

12 June 2021

+

silicons updated:

+ +

10 June 2021

Arturlang updated: