mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
[Icebox] Half remaps security, deletes the labor shuttle because it made no sense (#95766)
## About The Pull Request Click the triangles to see pictures <Details> <Summary> Top floor security has seen some changes, with EVA being attached to the security lockers, and the firing range being added in the place of the old transfer center </Summary> <img width="1029" height="803" alt="image" src="https://github.com/user-attachments/assets/c84065f6-6e92-4a0a-b6b4-c323f948fc38" /> </Details> <Details> <Summary> The middle floor didn't see a ton of changes, though visitation has shifted left to make room for the new labor camp exit </Summary> <img width="616" height="574" alt="image" src="https://github.com/user-attachments/assets/44658fe1-a048-4c3c-a951-3727d9b710f4" /> </Details> <Details> <Summary> The biggest changes are seen on the bottom floor - the lowest perma-brig floor was trimmed down in size ab it, and the room has been replaced with the Labor camp.</Summary> <img width="993" height="950" alt="image" src="https://github.com/user-attachments/assets/446a1677-3f67-4f8e-933e-92a20d22aa36" /> </Details> This also comes with some mechanic changes to icebox labor, given there's no more shuttle: You still teleport people into the labor camp, but when the amount of points have been achieved, you can walk through the point gate rather than needing to fly a shuttle home. ## Why It's Good For The Game The labor shuttle didn't have much of a reason to exist on icebox, you weren't flying anywhere, you were just walking a few steps downwards Integrating it into the perma-brig allows for a more unique labor experience than other maps, and one that fits the setting a bit more ## Changelog 🆑 Melbert add: [Icebox] Security saw a minor remapping, with most notably the removal of the labor shuttle and the integration of the labor camp into the bottom floor of the perma-brig. /🆑
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,7 @@
|
||||
#define SPAM_CD (3 SECONDS)
|
||||
#define ALLOW_EXIT "allow_exit"
|
||||
#define BLOCK_EXIT "block_exit"
|
||||
#define SKIP_EXIT null
|
||||
|
||||
/obj/machinery/prisongate
|
||||
name = "prison gate scanner"
|
||||
@@ -14,6 +17,7 @@
|
||||
idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION * 0.05
|
||||
active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 0.03
|
||||
anchored = TRUE
|
||||
req_one_access = list(ACCESS_BRIG)
|
||||
/// dictates whether the gate barrier is up or not
|
||||
var/gate_active = TRUE
|
||||
COOLDOWN_DECLARE(spam_cooldown_time)
|
||||
@@ -55,39 +59,74 @@
|
||||
COOLDOWN_START(src, spam_cooldown_time, SPAM_CD)
|
||||
return FALSE
|
||||
var/mob/living/carbon/the_toucher = gate_toucher
|
||||
if(gate_active == FALSE)
|
||||
if(!gate_active)
|
||||
return TRUE
|
||||
for(var/obj/item/card/id/regular_id in the_toucher.get_all_contents())
|
||||
var/list/id_access = regular_id.GetAccess()
|
||||
if(ACCESS_BRIG in id_access)
|
||||
if(COOLDOWN_FINISHED(src, spam_cooldown_time))
|
||||
say("Brig clearance detected. Access granted.")
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, FALSE)
|
||||
COOLDOWN_START(src, spam_cooldown_time, SPAM_CD)
|
||||
return TRUE
|
||||
for(var/obj/item/card/id/advanced/prisoner/prison_id in the_toucher.get_all_contents())
|
||||
if(!prison_id.timed)
|
||||
continue
|
||||
if(prison_id.time_to_assign)
|
||||
say("Prison ID with active sentence detected. Please enjoy your stay in our corporate rehabilitation center, [prison_id.registered_name]!")
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, FALSE)
|
||||
prison_id.time_left = prison_id.time_to_assign
|
||||
prison_id.time_to_assign = initial(prison_id.time_to_assign)
|
||||
prison_id.start_timer()
|
||||
return TRUE
|
||||
if(prison_id.time_left <= 0)
|
||||
say("Prison ID with served sentence detected. Access granted.")
|
||||
prison_id.timed = FALSE //disables the id check from earlier so you can't just throw it back into perma for mass escapes
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, FALSE)
|
||||
return TRUE
|
||||
if(allowed(the_toucher))
|
||||
if(COOLDOWN_FINISHED(src, spam_cooldown_time))
|
||||
say("Prison ID with ongoing sentence detected. Access denied.")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, FALSE)
|
||||
say("Brig clearance detected. Access granted.")
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, FALSE)
|
||||
COOLDOWN_START(src, spam_cooldown_time, SPAM_CD)
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
else if(the_toucher.pulledby && allowed(the_toucher.pulledby))
|
||||
if(COOLDOWN_FINISHED(src, spam_cooldown_time))
|
||||
say("Brig escort detected. Access granted.")
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, FALSE)
|
||||
COOLDOWN_START(src, spam_cooldown_time, SPAM_CD)
|
||||
return TRUE
|
||||
|
||||
for(var/obj/item/card/id/advanced/prisoner/prison_id in the_toucher.get_all_contents())
|
||||
switch(allow_prisoner_id(prison_id))
|
||||
if(ALLOW_EXIT)
|
||||
return TRUE
|
||||
if(BLOCK_EXIT)
|
||||
return FALSE
|
||||
|
||||
if(COOLDOWN_FINISHED(src, spam_cooldown_time))
|
||||
to_chat(the_toucher, span_warning("You try to push through the hardlight barrier with little effect."))
|
||||
COOLDOWN_START(src, spam_cooldown_time, SPAM_CD)
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/prisongate/proc/allow_prisoner_id(obj/item/card/id/advanced/prisoner/prison_id)
|
||||
if(!prison_id.timed)
|
||||
return SKIP_EXIT
|
||||
if(prison_id.time_to_assign)
|
||||
say("Prison ID with active sentence detected. Please enjoy your stay in our corporate rehabilitation center, [prison_id.registered_name]!")
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, FALSE)
|
||||
prison_id.time_left = prison_id.time_to_assign
|
||||
prison_id.time_to_assign = initial(prison_id.time_to_assign)
|
||||
prison_id.start_timer()
|
||||
return ALLOW_EXIT
|
||||
if(prison_id.time_left <= 0)
|
||||
say("Prison ID with served sentence detected. Access granted.")
|
||||
prison_id.timed = FALSE //disables the id check from earlier so you can't just throw it back into perma for mass escapes
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, FALSE)
|
||||
return ALLOW_EXIT
|
||||
if(COOLDOWN_FINISHED(src, spam_cooldown_time))
|
||||
say("Prison ID with ongoing sentence detected. Access denied.")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, FALSE)
|
||||
COOLDOWN_START(src, spam_cooldown_time, SPAM_CD)
|
||||
return BLOCK_EXIT
|
||||
|
||||
/obj/machinery/prisongate/labour
|
||||
name = "labor camp gate scanner"
|
||||
|
||||
/obj/machinery/prisongate/labour/allow_prisoner_id(obj/item/card/id/advanced/prisoner/prison_id)
|
||||
if(!prison_id.goal)
|
||||
return SKIP_EXIT
|
||||
if(prison_id.points >= prison_id.goal)
|
||||
if(COOLDOWN_FINISHED(src, spam_cooldown_time))
|
||||
say("All points served. Access granted.")
|
||||
playsound(src, 'sound/machines/chime.ogg', 50, FALSE)
|
||||
COOLDOWN_START(src, spam_cooldown_time, SPAM_CD)
|
||||
return ALLOW_EXIT
|
||||
if(COOLDOWN_FINISHED(src, spam_cooldown_time))
|
||||
say("[prison_id.goal - prison_id.points] point\s remaining on sentence. Access denied.")
|
||||
playsound(src, 'sound/machines/buzz/buzz-two.ogg', 50, FALSE)
|
||||
COOLDOWN_START(src, spam_cooldown_time, SPAM_CD)
|
||||
return BLOCK_EXIT
|
||||
|
||||
#undef SPAM_CD
|
||||
#undef ALLOW_EXIT
|
||||
#undef BLOCK_EXIT
|
||||
#undef SKIP_EXIT
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
/obj/machinery/mineral/labor_claim_console/proc/register_shuttle_signal()
|
||||
SIGNAL_HANDLER
|
||||
var/obj/docking_port/mobile/laborshuttle = SSshuttle.getShuttle("laborcamp")
|
||||
RegisterSignal(laborshuttle, COMSIG_SHUTTLE_SHOULD_MOVE, PROC_REF(on_laborshuttle_can_move))
|
||||
if(laborshuttle)
|
||||
RegisterSignal(laborshuttle, COMSIG_SHUTTLE_SHOULD_MOVE, PROC_REF(on_laborshuttle_can_move))
|
||||
UnregisterSignal(SSshuttle, COMSIG_SUBSYSTEM_POST_INITIALIZE)
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/Destroy()
|
||||
@@ -77,6 +78,11 @@
|
||||
data["can_go_home"] = can_go_home
|
||||
return data
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/ui_static_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["shuttle_exists"] = !isnull(SSshuttle.getShuttle("laborcamp"))
|
||||
return data
|
||||
|
||||
/obj/machinery/mineral/labor_claim_console/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
||||
. = ..()
|
||||
if(.)
|
||||
@@ -103,6 +109,12 @@
|
||||
COOLDOWN_START(src, say_cooldown, 2 SECONDS)
|
||||
|
||||
if("move_shuttle")
|
||||
if(isnull(SSshuttle.getShuttle("laborcamp")))
|
||||
if(COOLDOWN_FINISHED(src, say_cooldown))
|
||||
say("Shuttle not found.")
|
||||
COOLDOWN_START(src, say_cooldown, 2 SECONDS)
|
||||
return
|
||||
|
||||
var/list/labor_shuttle_mobs = find_labor_shuttle_mobs()
|
||||
if(length(labor_shuttle_mobs) > 1 || labor_shuttle_mobs[1] != user_mob)
|
||||
if(COOLDOWN_FINISHED(src, say_cooldown))
|
||||
@@ -171,6 +183,7 @@
|
||||
/**********************Prisoner Collection Unit**************************/
|
||||
|
||||
/obj/machinery/mineral/stacking_machine/laborstacker
|
||||
name = "labor camp collection unit"
|
||||
force_connect = TRUE
|
||||
damage_deflection = 21 //otherwise prisoners will destroy it
|
||||
///Idle points sitting in the machine left to be claimed.
|
||||
|
||||
@@ -5,20 +5,29 @@ import { Window } from '../layouts';
|
||||
|
||||
export const LaborClaimConsole = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { can_go_home, id_points, ores, status_info, unclaimed_points } = data;
|
||||
const {
|
||||
can_go_home,
|
||||
id_points,
|
||||
ores,
|
||||
status_info,
|
||||
unclaimed_points,
|
||||
shuttle_exists,
|
||||
} = data;
|
||||
return (
|
||||
<Window width={315} height={440}>
|
||||
<Window.Content>
|
||||
<Section>
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Status">{status_info}</LabeledList.Item>
|
||||
<LabeledList.Item label="Shuttle controls">
|
||||
<Button
|
||||
content="Move shuttle"
|
||||
disabled={!can_go_home}
|
||||
onClick={() => act('move_shuttle')}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
{!!shuttle_exists && (
|
||||
<LabeledList.Item label="Shuttle controls">
|
||||
<Button
|
||||
content="Move shuttle"
|
||||
disabled={!can_go_home}
|
||||
onClick={() => act('move_shuttle')}
|
||||
/>
|
||||
</LabeledList.Item>
|
||||
)}
|
||||
<LabeledList.Item label="Points">{id_points}</LabeledList.Item>
|
||||
<LabeledList.Item
|
||||
label="Unclaimed points"
|
||||
@@ -35,13 +44,21 @@ export const LaborClaimConsole = (props) => {
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Section title="Directions">
|
||||
The nearby stacking machine will unload crates and collect smelted
|
||||
materials, points will be calculated based on volume of delivered
|
||||
materials.
|
||||
Collect boulders and ores from the mining area and bring them to the
|
||||
unloading machine. Then, pull the lever to smelt them into sheets. Use
|
||||
the production console to dispense the sheets, and then bring bring
|
||||
them to the claim console to earn points.
|
||||
<br />
|
||||
Please note that only sheets printed with our manufacturer's seal
|
||||
of quality, such as those produced from the work camp furnace, will be
|
||||
accepted as proof of labour.
|
||||
<br />
|
||||
Boulders cannot be smelted directly, and will require additional
|
||||
manual processing - strike them with a pickaxe to break them down
|
||||
further.
|
||||
<br />
|
||||
<br />
|
||||
Sheets smelted from the labor camp's furnace will be stamped with an
|
||||
official seal of quality. Only stamped sheets can be claimed for
|
||||
points - so don't bother trying to strip down tables and chairs for
|
||||
bonus metal.
|
||||
</Section>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
|
||||
Reference in New Issue
Block a user