diff --git a/aurorastation.dme b/aurorastation.dme index 787ed8d49db..56f01b032bb 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1606,6 +1606,9 @@ #include "code\modules\cargo\bounties\slime.dm" #include "code\modules\cargo\bounties\special.dm" #include "code\modules\cargo\bounties\weapon_prototype.dm" +#include "code\modules\cargo\delivery\backpack.dm" +#include "code\modules\cargo\delivery\package.dm" +#include "code\modules\cargo\delivery\receptacle.dm" #include "code\modules\cargo\exports\gear.dm" #include "code\modules\cargo\exports\large_objects.dm" #include "code\modules\cargo\exports\materials.dm" @@ -3734,6 +3737,7 @@ #include "maps\random_ruins\exoplanets\burzsia\burzsia_dead_ipc.dm" #include "maps\random_ruins\exoplanets\burzsia\burzsia_mining.dm" #include "maps\random_ruins\exoplanets\crashed_pod\crashed_pod.dm" +#include "maps\random_ruins\exoplanets\delivery\delivery_site.dm" #include "maps\random_ruins\exoplanets\desert\desert.dm" #include "maps\random_ruins\exoplanets\grove\grove.dm" #include "maps\random_ruins\exoplanets\konyang\jeweler_nest.dm" diff --git a/code/game/objects/items/items_icon.dm b/code/game/objects/items/items_icon.dm index 5f1a080e0a6..b7c7697abd8 100644 --- a/code/game/objects/items/items_icon.dm +++ b/code/game/objects/items/items_icon.dm @@ -1,6 +1,6 @@ var/list/mob_icon_icon_states = list() -/obj/item/proc/get_mob_overlay(var/mob/living/carbon/human/H, var/mob_icon, var/mob_state, var/slot) +/obj/item/proc/get_mob_overlay(var/mob/living/carbon/human/H, var/mob_icon, var/mob_state, var/slot, var/main_call = TRUE) SHOULD_NOT_SLEEP(TRUE) SHOULD_CALL_PARENT(TRUE) RETURN_TYPE(/image) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/operations.dm b/code/game/objects/structures/crates_lockers/closets/secure/operations.dm index a87c3162888..5a2c8c32885 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/operations.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/operations.dm @@ -107,3 +107,21 @@ /obj/structure/closet/secure_closet/merchant name = "merchant's locker" req_access = list(access_merchant) + +// Package Courier +/obj/structure/closet/secure_closet/package_courier + name = "courier's locker" + icon_state = "hangar_tech" + req_access = list(access_cargo) + +/obj/structure/closet/secure_closet/package_courier/fill() + ..() + // presumably the people taking them down to the exoplanet will give them proper suits + // but in some kind of apocalyptic nightmare scenario where there aren't spare suits, these will do + new /obj/item/clothing/head/helmet/space(src) + new /obj/item/clothing/suit/space(src) + new /obj/item/tank/oxygen(src) + new /obj/item/cargo_backpack(src) + new /obj/item/device/gps/mining(src) + new /obj/item/device/flashlight/lantern(src) + new /obj/item/pickaxe(src) diff --git a/code/modules/cargo/delivery/backpack.dm b/code/modules/cargo/delivery/backpack.dm new file mode 100644 index 00000000000..09245a35d86 --- /dev/null +++ b/code/modules/cargo/delivery/backpack.dm @@ -0,0 +1,117 @@ +/obj/item/cargo_backpack + name = "cargo pack" + desc = "A robust set of rigs and buckles that allows the wearer to carry two additional Orion Express delivery packages on their back." + desc_info = "To load packages onto your back, equip this item on the back slot, then click on it with a package in-hand. To unload a package, click on this item with an empty hand." + icon = 'icons/obj/orion_delivery.dmi' + icon_state = "package_pack" + item_state = "package_pack" + contained_sprite = TRUE + w_class = ITEMSIZE_HUGE + slot_flags = SLOT_BACK + drop_sound = 'sound/items/drop/backpack.ogg' + pickup_sound = 'sound/items/pickup/backpack.ogg' + + var/list/contained_packages + +/obj/item/cargo_backpack/Destroy() + QDEL_NULL_LIST(contained_packages) + return ..() + +/obj/item/cargo_backpack/examine(mob/user, distance) + . = ..() + if(length(contained_packages)) + to_chat(user, FONT_SMALL(SPAN_NOTICE("\[?\] There are some packages loaded. \[Show Package Data\]"))) + +/obj/item/cargo_backpack/Topic(href, href_list) + if(href_list["show_package_data"]) + ui_interact(usr) + return ..() + +/obj/item/cargo_backpack/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "CargoPack", "Cargo Pack", 500, 115) + ui.open() + +/obj/item/cargo_backpack/ui_data(mob/user) + var/list/data = list() + + data["cargo_pack_details"] = list() + for(var/obj/item/cargo_package/package in contained_packages) + data["cargo_pack_details"] += list(list("package_id"= ref(package), "delivery_point_sector" = package.delivery_point_sector, "delivery_point_coordinates" = package.delivery_point_coordinates, "delivery_point_id" = package.delivery_point_id)) + + return data + +/obj/item/cargo_backpack/proc/update_state() + if(LAZYLEN(contained_packages)) + slowdown = 1 + else + slowdown = 0 + update_icon() + +/obj/item/cargo_backpack/update_icon() + if(LAZYLEN(contained_packages)) + item_state = "[initial(item_state)]_[length(contained_packages)]" + else + item_state = initial(item_state) + if(ishuman(loc)) + var/mob/living/carbon/human/courier = loc + courier.update_inv_back() + +/obj/item/cargo_backpack/get_mob_overlay(mob/living/carbon/human/courier, var/mob_icon, var/mob_state, var/slot, var/main_call = TRUE) + var/image/mob_overlay = ..() + if(main_call) + var/image/north_overlay = get_mob_overlay(courier, mob_icon, mob_state + "_over", slot, FALSE) + north_overlay.layer = courier.layer + 0.01 // we want the tall backpack to render over hair and helmets + north_overlay.appearance_flags |= KEEP_APART + mob_overlay.add_overlay(north_overlay) + return mob_overlay + +/obj/item/cargo_backpack/attack_hand(mob/living/carbon/human/user) + if(!ishuman(user)) + return ..() + if(!LAZYLEN(contained_packages)) + return ..() + + if(user.species.mob_size < 12) + var/obj/A = user.get_inactive_hand() + if(A) + to_chat(user, SPAN_WARNING("Your other hand is occupied!")) + return + + user.visible_message("[user] starts unloading a package from \the [src]...", SPAN_NOTICE("You start unloading a package from \the [src]...")) + if(do_after(user, 1 SECONDS, src, DO_UNIQUE)) + if(user.species.mob_size < 12) + var/obj/A = user.get_inactive_hand() + if(A) + to_chat(user, SPAN_WARNING("Your other hand is occupied!")) + return + user.visible_message("[user] unloads a package from \the [src]!", SPAN_NOTICE("You unload a package from \the [src]!")) + var/obj/item/cargo_package/package = contained_packages[1] + user.put_in_hands(package) + if(user.species.mob_size < 12) + package.wield(user) + LAZYREMOVE(contained_packages, package) + update_state() + +/obj/item/cargo_backpack/attackby(obj/item/item, mob/living/carbon/human/user) + if(!ishuman(user)) + return ..() + if(user.back != src) + if(istype(item, /obj/item/cargo_package)) + to_chat(user, SPAN_WARNING("Put \the [src] on your back before you load packages onto it!")) + return + return ..() + if(!istype(item, /obj/item/cargo_package)) + return ..() + + if(LAZYLEN(contained_packages) >= 2) + to_chat(user, SPAN_WARNING("\The [src] is already fully loaded!")) + return + + user.visible_message("[user] starts loading \the [item] onto \the [src]...", SPAN_NOTICE("You start loading \the [item] onto \the [src]...")) + if(do_after(user, 1 SECONDS, src, DO_UNIQUE)) + user.visible_message("[user] loads \the [item] onto \the [src]!", SPAN_NOTICE("You load \the [item] onto \the [src]!")) + user.drop_from_inventory(item, src) + LAZYADD(contained_packages, item) + update_state() diff --git a/code/modules/cargo/delivery/package.dm b/code/modules/cargo/delivery/package.dm new file mode 100644 index 00000000000..929a7911906 --- /dev/null +++ b/code/modules/cargo/delivery/package.dm @@ -0,0 +1,85 @@ +/obj/item/cargo_package + name = "cargo package" + desc = "An Orion Express cargo package, these packages generally find their way to researchers bunkered up on exoplanets. Always pays an extra 2% tip to the courier." + desc_info = "You can deliver this package to a delivery site on an exoplanet to get additional funds for the cargo department's account. An additional 2% is added to your account on delivery. Can be loaded into a cargo pack." + icon = 'icons/obj/orion_delivery.dmi' + icon_state = "express_package" + item_state = "express_package" + contained_sprite = TRUE + w_class = ITEMSIZE_HUGE + force = 10 + + slowdown = 1 + + var/delivery_point_id = "" + var/delivery_point_sector = "" + var/delivery_point_coordinates = "" + + var/datum/weakref/associated_delivery_point + var/pay_amount = 69420 + +/obj/item/cargo_package/Initialize(mapload, obj/structure/cargo_receptacle/delivery_point) + . = ..() + pay_amount = rand(4, 7) * 1000 + if(prob(3)) + pay_amount = rand(12, 17) * 1000 + if(delivery_point) + associated_delivery_point = WEAKREF(delivery_point) + delivery_point_id = delivery_point.delivery_id + delivery_point_sector = delivery_point.delivery_sector + delivery_point_coordinates = "[delivery_point.x]-[delivery_point.y]" + +/obj/item/cargo_package/examine(mob/user, distance) + . = ..() + to_chat(user, SPAN_NOTICE("The label on the package reads: SITE: [delivery_point_sector] | COORD: [delivery_point_coordinates] | ID: [delivery_point_id]")) + to_chat(user, SPAN_NOTICE("The price tag on the package reads: [pay_amount]电")) + +/obj/item/cargo_package/do_additional_pickup_checks(var/mob/living/carbon/human/user) + if(!ishuman(user)) + return FALSE + + if(user.species.mob_size < 12) + var/obj/A = user.get_inactive_hand() + if(A) + to_chat(user, SPAN_WARNING("Your other hand is occupied!")) + return + + user.visible_message("[user] tightens their grip on \the [src] and starts heaving...", SPAN_NOTICE("You tighten your grip on \the [src] and start heaving...")) + if(do_after(user, 1 SECONDS, src, DO_UNIQUE)) + user.visible_message("[user] heaves \the [src] up!", SPAN_NOTICE("You heave \the [src] up!")) + // larger mobs, such as industrials, can hold two pieces of cargo + if(user.species.mob_size < 12) + wield(user) + slowdown = 2 + else + slowdown = 0 + return TRUE + return FALSE + +/obj/item/cargo_package/proc/wield(var/mob/living/carbon/human/user) + var/obj/A = user.get_inactive_hand() + if(A) + to_chat(user, SPAN_WARNING("Your other hand is occupied!")) + return + item_state += "_wielded" + var/obj/item/offhand/O = new(user) + O.name = "[initial(name)] - offhand" + O.desc = "Your second grip on \the [initial(name)]." + user.put_in_inactive_hand(O) + +/obj/item/cargo_package/dropped(var/mob/living/user) + ..() + item_state = initial(item_state) + if(user) + var/obj/item/offhand/O = user.get_inactive_hand() + if(istype(O)) + O.unwield() + +/obj/item/cargo_package/can_swap_hands(var/mob/user) + var/obj/item/offhand/O = user.get_inactive_hand() + if(istype(O)) + return FALSE + return TRUE + +/obj/item/cargo_package/too_heavy_to_throw() + return TRUE diff --git a/code/modules/cargo/delivery/receptacle.dm b/code/modules/cargo/delivery/receptacle.dm new file mode 100644 index 00000000000..fe6108c369e --- /dev/null +++ b/code/modules/cargo/delivery/receptacle.dm @@ -0,0 +1,106 @@ +/obj/structure/cargo_receptacle + name = "cargo delivery point" + desc = "An Orion Express automated cargo acceptance device. It's linked to a vast underground network of conveyors and de-sterilizers, transporting it to its final destination. These are generally used by researchers who find themselves bunkered alone on an exoplanet." + desc_info = "This is a delivery point for Orion Express cargo packages. To finish the delivery, have a cargo package in your hand and click on the delivery point." + icon = 'icons/obj/orion_delivery.dmi' + icon_state = "delivery_point" + + var/delivery_id = "" + var/delivery_sector = "" + +/obj/structure/cargo_receptacle/Initialize(mapload) + . = ..() + + delivery_id = "#[rand(1, 9)][rand(1, 9)][rand(1, 9)]" + name += " ([delivery_id])" + + if(current_map.use_overmap) + var/turf/current_turf = get_turf(loc) + var/obj/effect/overmap/visitable/my_sector = map_sectors["[current_turf.z]"] + if(my_sector) + delivery_sector = my_sector.name + else + delivery_sector = "Unknown" + else + delivery_sector = "Unknown" + + var/list/warehouse_turfs = list() + for(var/area_path in typesof(current_map.warehouse_basearea)) + var/area/warehouse = locate(area_path) + if(warehouse) + for(var/turf/simulated/floor/T in warehouse) + if(!turf_contains_dense_objects(T)) + warehouse_turfs += T + + var/package_amount = rand(2, 4) + for(var/i = 1 to package_amount) + var/turf/random_turf = pick_n_take(warehouse_turfs) + if(random_turf) + new /obj/item/cargo_package(random_turf, src) + +/obj/structure/cargo_receptacle/attackby(obj/item/item, mob/user) + if(istype(item, /obj/item/cargo_package)) + var/obj/item/cargo_package/package = item + if(!package.associated_delivery_point) + to_chat(user, SPAN_WARNING("Something's wrong with the cargo package, submit a bug report. ERRCODE: 0")) + return + + if(package.associated_delivery_point.resolve() != src) + playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + visible_message(SPAN_WARNING("\The [src] buzzes harshly, \"Invalid package! Check the delivery ID!\"")) + return + + user.visible_message("[user] starts heaving \the [item] into \the [src]...", SPAN_NOTICE("You start heaving \the [item] into \the [src]...")) + if(do_after(user, 1 SECONDS, src, DO_UNIQUE)) + user.drop_from_inventory(item, src) + pay_account(user, item) + qdel(item) + return + return ..() + +/obj/structure/cargo_receptacle/proc/pay_account(var/mob/living/carbon/human/courier, var/obj/item/cargo_package/package) + var/datum/money_account/supply_account = SScargo.supply_account + if(supply_account && !supply_account.suspended) + supply_account.money += package.pay_amount + + //create a transaction log entry + var/datum/transaction/transaction = new() + transaction.target_name = "Successful Delivery" + transaction.purpose = "Payment for completed Courier Duty" + transaction.amount = "[package.pay_amount]" + transaction.date = worlddate2text() + transaction.time = worldtime2text() + transaction.source_terminal = capitalize_first_letters(name) + SSeconomy.add_transaction_log(supply_account, transaction) + + var/found_user_account = FALSE + var/obj/item/card/id_card = courier.GetIdCard() + if(id_card?.associated_account_number) + var/datum/money_account/courier_account = SSeconomy.get_account(id_card.associated_account_number) + if(courier_account && !courier_account.suspended) + var/tip_amount = package.pay_amount * 0.02 + found_user_account = TRUE + + courier_account.money += tip_amount + + //create a transaction log entry + var/datum/transaction/transaction = new() + transaction.target_name = "Successful Delivery" + transaction.purpose = "2% Tip for completed Courier Duty" + transaction.amount = "[tip_amount]" + transaction.date = worlddate2text() + transaction.time = worldtime2text() + transaction.source_terminal = capitalize_first_letters(name) + SSeconomy.add_transaction_log(courier_account, transaction) + + // if a third party ambushed and stole the package, we want to let them collect the tip wirelessly + if(!found_user_account) + playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, TRUE) + visible_message("\The [src] buzzes harshly, \"[SPAN_WARNING("Delivery complete! User account details not found... printing cash tip...")]\"") + playsound(loc, /singleton/sound_category/print_sound, 50, TRUE) + var/obj/item/spacecash/bundle/cash_tip = new /obj/item/spacecash/bundle(loc) + cash_tip.worth = package.pay_amount * 0.02 + cash_tip.update_icon() + else + visible_message("\The [src] pings, \"[SPAN_NOTICE("Delivery complete! Cash deposited into supply account, tip wirelessly transmitted into courier account.")]\"") + playsound(loc, 'sound/machines/ping.ogg', 50, FALSE) diff --git a/code/modules/maps/ruins.dm b/code/modules/maps/ruins.dm index 5aa6a6afbef..8591875e818 100644 --- a/code/modules/maps/ruins.dm +++ b/code/modules/maps/ruins.dm @@ -32,6 +32,7 @@ var/list/banned_ruin_ids = list() for(var/datum/map_template/ruin/ruin in force_spawn) var/turf/choice = validate_ruin(ruin, zlevels, filter_area = allowed_area, max_x = maxx, max_y = maxy) if(!choice) + log_admin("Ruin \"[ruin.name]\" failed to force-spawned at ([choice.x], [choice.y], [choice.z])!!!") continue log_admin("Ruin \"[ruin.name]\" force-spawned at ([choice.x], [choice.y], [choice.z])!") diff --git a/html/changelogs/geeves-death_stranding_thank_you_kojima.yml b/html/changelogs/geeves-death_stranding_thank_you_kojima.yml new file mode 100644 index 00000000000..6690d18be58 --- /dev/null +++ b/html/changelogs/geeves-death_stranding_thank_you_kojima.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Added the Orion Express Courier System, a new gameplay loop for Hangar Techs. Orion Express packages will now spawn in the hangar that are linked to delivery points on exoplanets, delivering these packages will provide the cargo department with some funds, depending on the package." \ No newline at end of file diff --git a/icons/obj/orion_delivery.dmi b/icons/obj/orion_delivery.dmi new file mode 100644 index 00000000000..5aa58e0a9ea Binary files /dev/null and b/icons/obj/orion_delivery.dmi differ diff --git a/maps/random_ruins/exoplanets/delivery/delivery_site.dm b/maps/random_ruins/exoplanets/delivery/delivery_site.dm new file mode 100644 index 00000000000..b6d5f534d4d --- /dev/null +++ b/maps/random_ruins/exoplanets/delivery/delivery_site.dm @@ -0,0 +1,15 @@ +/datum/map_template/ruin/exoplanet/delivery_site + name = "Delivery Site" + id = "deliverysite" + description = "An Orion Express branded delivery site." + + spawn_weight = 1 + spawn_cost = 1 + + // going with the assumption that most exoplanets in corporate zones have some sort of base on it, maybe searching for phoron? doesn't really matter, it's mostly a gameplay concession + template_flags = TEMPLATE_FLAG_SPAWN_GUARANTEED + // however, it's an orion express system, so they'll obviously only appear in places that corporations have access to + sectors = ALL_CORPORATE_SECTORS + // available to all exoplanets, no filters + ruin_tags = 0 + suffixes = list("delivery/delivery_site.dmm") diff --git a/maps/random_ruins/exoplanets/delivery/delivery_site.dmm b/maps/random_ruins/exoplanets/delivery/delivery_site.dmm new file mode 100644 index 00000000000..f65e23e6c47 --- /dev/null +++ b/maps/random_ruins/exoplanets/delivery/delivery_site.dmm @@ -0,0 +1,131 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ao" = ( +/turf/simulated/wall/concrete, +/area/template_noop) +"aQ" = ( +/obj/effect/landmark/clear, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/unsimulated/floor/concrete, +/area/template_noop) +"aR" = ( +/obj/effect/landmark/clear, +/obj/structure/closet/walllocker/medical{ + pixel_y = 32 + }, +/obj/item/stack/medical/splint/full, +/obj/item/reagent_containers/hypospray/autoinjector/inaprovaline, +/obj/item/reagent_containers/hypospray/autoinjector/inaprovaline, +/obj/item/stack/medical/ointment/full, +/obj/item/stack/medical/ointment/full, +/obj/item/stack/medical/bruise_pack/full, +/obj/item/stack/medical/bruise_pack/full, +/turf/unsimulated/floor/concrete, +/area/template_noop) +"bi" = ( +/obj/effect/landmark/clear, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/unsimulated/floor/concrete, +/area/template_noop) +"bk" = ( +/obj/effect/landmark/clear, +/turf/unsimulated/floor/concrete, +/area/template_noop) +"bA" = ( +/obj/structure/cargo_receptacle, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/unsimulated/floor/concrete, +/area/template_noop) +"bE" = ( +/obj/effect/landmark/clear, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/unsimulated/floor/concrete, +/area/template_noop) +"bP" = ( +/obj/effect/landmark/clear, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/unsimulated/floor/concrete, +/area/template_noop) +"bQ" = ( +/obj/effect/landmark/clear, +/obj/structure/sign/flag/orion_express/unmovable{ + dir = 1; + pixel_y = 32 + }, +/turf/template_noop, +/area/template_noop) +"Ku" = ( +/obj/effect/landmark/clear, +/turf/template_noop, +/area/template_noop) + +(1,1,1) = {" +Ku +Ku +Ku +Ku +Ku +Ku +Ku +"} +(2,1,1) = {" +Ku +ao +ao +ao +ao +ao +Ku +"} +(3,1,1) = {" +Ku +ao +aQ +bk +bE +ao +bQ +"} +(4,1,1) = {" +Ku +ao +aR +bA +bk +bk +Ku +"} +(5,1,1) = {" +Ku +ao +bi +bk +bP +ao +bQ +"} +(6,1,1) = {" +Ku +ao +ao +ao +ao +ao +Ku +"} +(7,1,1) = {" +Ku +Ku +Ku +Ku +Ku +Ku +Ku +"} diff --git a/maps/runtime/code/runtime.dm b/maps/runtime/code/runtime.dm index 114cef75a98..93c351ff0c7 100644 --- a/maps/runtime/code/runtime.dm +++ b/maps/runtime/code/runtime.dm @@ -48,3 +48,4 @@ away_ship_budget = 2 map_shuttles = list(/datum/shuttle/autodock/overmap/runtime) + warehouse_basearea = /area/storage/primary diff --git a/maps/runtime/runtime-1.dmm b/maps/runtime/runtime-1.dmm index 00ac45dfb05..eef48dd11bd 100644 --- a/maps/runtime/runtime-1.dmm +++ b/maps/runtime/runtime-1.dmm @@ -344,8 +344,8 @@ /area/engineering) "aQ" = ( /obj/machinery/door/airlock/glass_engineering{ - name = "Gravity Generator"; - dir = 4 + dir = 4; + name = "Gravity Generator" }, /obj/structure/cable{ d1 = 4; @@ -377,8 +377,8 @@ /area/engineering/gravity_gen) "aT" = ( /obj/machinery/door/airlock/glass_engineering{ - name = "Gravity Generator"; - dir = 4 + dir = 4; + name = "Gravity Generator" }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/dark, @@ -977,8 +977,8 @@ /area/bridge) "cs" = ( /obj/machinery/door/airlock/glass_command{ - name = "Bridge"; - dir = 1 + dir = 1; + name = "Bridge" }, /obj/machinery/door/firedoor, /turf/simulated/floor/tiled, @@ -1413,8 +1413,8 @@ dir = 4 }, /obj/machinery/airlock_sensor{ - pixel_x = -20; - dir = 4 + dir = 4; + pixel_x = -20 }, /obj/effect/map_effect/marker/airlock{ master_tag = "runtime_airlock_1_1"; @@ -1529,6 +1529,7 @@ /area/engineering) "kP" = ( /obj/machinery/firealarm/west, +/obj/structure/table/standard, /turf/simulated/floor/tiled, /area/storage/primary) "mn" = ( @@ -1595,7 +1596,6 @@ }, /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ dir = 8; - pixel_y = 0; pixel_x = 20 }, /obj/effect/map_effect/marker/airlock{ @@ -1764,6 +1764,7 @@ /area/construction) "BP" = ( /obj/machinery/firealarm/east, +/obj/structure/table/standard, /turf/simulated/floor/tiled, /area/storage/primary) "Ct" = ( @@ -1859,9 +1860,9 @@ /area/shuttle/runtime) "JE" = ( /obj/machinery/access_button{ + dir = 1; pixel_x = 27; - pixel_y = 11; - dir = 1 + pixel_y = 11 }, /obj/machinery/door/airlock/external/red, /obj/effect/map_effect/marker/airlock{ @@ -2087,9 +2088,9 @@ dir = 4 }, /obj/machinery/access_button{ + dir = 8; pixel_x = -11; - pixel_y = -27; - dir = 8 + pixel_y = -27 }, /obj/effect/map_effect/marker/airlock{ master_tag = "runtime_airlock_1_1"; @@ -2119,6 +2120,10 @@ /obj/structure/fuel_port/phoron, /turf/simulated/wall/r_wall, /area/shuttle/runtime) +"ZU" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled, +/area/storage/primary) (1,1,1) = {" fX @@ -10833,9 +10838,9 @@ bB bB dn da -da +ZU cZ -da +ZU da cZ da diff --git a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm index b7842e72bd9..280861cfc20 100644 --- a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm +++ b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm @@ -175,9 +175,8 @@ frequency = 1380; id_tag = "intrepid_dock"; name = "\improper Intrepid docking port controller"; - req_one_access = list(74); - dir = 2; - pixel_y = 28 + pixel_y = 28; + req_one_access = list(74) }, /turf/simulated/floor/plating, /area/hangar/intrepid) @@ -737,6 +736,10 @@ icon_state = "8,13" }, /area/shuttle/intrepid/quarters) +"aFa" = ( +/obj/structure/closet/secure_closet/package_courier, +/turf/simulated/floor/tiled, +/area/operations/storage) "aFf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -3714,7 +3717,6 @@ dir = 1 }, /obj/machinery/embedded_controller/radio/simple_docking_controller{ - dir = 2; frequency = 1386; id_tag = "canary_dock"; name = "\improper Canary docking port controller"; @@ -9314,8 +9316,8 @@ no_cargo = 1 }, /obj/item/stack/material/steel/full{ - pixel_y = 15; - pixel_x = 2 + pixel_x = 2; + pixel_y = 15 }, /turf/simulated/floor/plating, /area/maintenance/research_port) @@ -14998,6 +15000,7 @@ /area/engineering/atmos/propulsion/starboard) "kzD" = ( /obj/machinery/alarm/east, +/obj/structure/closet/secure_closet/package_courier, /turf/simulated/floor/tiled, /area/operations/storage) "kzJ" = ( @@ -47099,7 +47102,7 @@ rot qdE iNW kzD -nCV +aFa iNW qdE gkr diff --git a/tgui/packages/tgui/interfaces/CargoPack.tsx b/tgui/packages/tgui/interfaces/CargoPack.tsx new file mode 100644 index 00000000000..6ef4f2c5f37 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CargoPack.tsx @@ -0,0 +1,43 @@ +import { useBackend } from '../backend'; +import { Section, Table } from '../components'; +import { Window } from '../layouts'; + +export type CargoPackData = { + cargo_pack_details: PackageData[]; +}; + +export type PackageData = { + package_id: string; + delivery_point_sector: string; + delivery_point_coordinates: string; + delivery_point_id: string; +}; + +export const CargoPack = (props, context) => { + const { act, data } = useBackend(context); + + return ( + + +
+ + + Site + Coordinates + Delivery ID + + {data.cargo_pack_details.map((cargo_package) => ( + + {cargo_package.delivery_point_sector} + + {cargo_package.delivery_point_coordinates} + + {cargo_package.delivery_point_id} + + ))} +
+
+
+
+ ); +};