Files
Paradise/code/modules/power/apc/apc_construction.dm
Migratingcocofruit db555b4c28 Powernet separation (#29348)
* Adds reinforced APCs and frames for them.

* farragus WIP

* more farragus stuff

* more faragus stuff

* more farragus

* uses plastic for insulation instead

* box and faragus changes

* Box changes

* cerebron changes

* more meta updates

* fixes short on box station

* fixes shorts on meta station

* delta changes

* adds reinforced apcs with bigger cells

* emerald things

* more diagoras

* cleaning up cables in diagoras

* switches elecmaints smes to the engineering type on diagoras

* adds more grid monitors to cyberiad

* various corrections

* 2 doors on cyberiad electrical maints

* boxstation fixes

* Kerberos fixes

* cerebron fixes

* some faragus fixes

* more cyberiad fixes

* meta fixes

* more kerberos fixes

* faragus and cyberiad fixes

* emerald fixes

* farragus fixes

* emerald fixes

* farragus fixes

* emerald fixes

* diagoras fix

* more map fixes

* more CI fixes

* final fixes I hope

* Update emeraldstation.dmm

* finish merging metastation

* reset meta to master version

* redoing some of the meta changes

* Update metastation.dmm

* clear merge conflict

* Update metastation.dmm

* Update metastation.dmm

* Update metastation.dmm

* meta resolution

* emerald resolution

* delta resolution

* fartgas resolution

* box box

* stay out stay out

* metastation fixes

* faragus fix

* delta fix

* meta changes

* Starting over with farragus

* Starting over in faragus

* faragus changes

* Update cerestation.dmm

* Update cerestation.dmm

* Update cerestation.dmm

* Update cerestation.dmm

* Update cerestation.dmm

* resolving some faragus conflicts

* resolve faragus conflicts

* resolves delta conflicts

* resolves cyberiad conflicts

* resolves emerald conflicts

* fixes cables in faragus

* fixes meta cables

* fixes delta cables

* more meta fixes

* more farragus cable fixes

* more cable fixes

* meta and faragus fixes

* box and delta fixes

* more mapping fixes

* hopefully the last fix

* Update metastation.dmm

* Update metastation.dmm

* fixes shorts on cyberiad cerebron and farragus

* CI fixes

* Update cerestation.dmm

* resolve faragus conflicts

* resolve emerald conflict

* fix some faragus cabling

* more cabling correction in faragus

* more cable fixes

* Update cerestation.dmm

* remove doubled scrubber pipe on tile

* resolves faragus conflict

* changes the default power input of engineering SMES to 200kw and 80kW respectively

* connects power monitoring computers to the grid that weren't

* meta station elec maints improvements

* adds missing power monitoring computers on box and delta

* removes dirt from wall

* corrects area boundry on meta

* adds missing cable on box sci

* removes dirt from wall on box

* connects cyberiad bridge to the rest of the powernet

* connects box brig to powernet

* Adds catwalks to box maints

* adds catwalks to meta

* Adds catwalks to delta

* Update deltastation.dmm

* adds ability to insulate cables

* Moves stations to using extra insulated cables for high power network

* Removes catwalks from meta

* Removes catwalks from box

* Removes catwalks from delta

* resolves box conflicts

* Update cable.dm

* remove floating request console

* corrects position of fire alarm and removes extra intercom on metastation

* resolves faragus conflict

* fixes a stray light bulb and light switch in maints as well as a doubled power

* wires kerberos security checkpoint to the grid

* Update cerestation.dmm

* Removes stray extinguisher cabinet from meta station

* resolves area conflict on faragus

* resolves more faragus issues

* fixes faragus cabling issues

* Update cerestation.dmm

* removes another stray fire extinguisher cabinet

* insulates the APC in delta PTL room

* connect delta fore starboard solars to the high power grid instead of the low power

* Update deltastation.dmm

* deconflict

* solves some unconnected cables

* connects delta customs to network and finishes resolving conflicts

* Update deltastation.dmm

* adds the new cables. needs coils and mapping

* moves connection perms to the heavy duty cables. toggled with engineering permission ID. box gets new cables

* sorts cables on stations

* faragus cable connections

* cable corrections. Adds heavy duty cables to the autolathe

* CI fix

* more fixes and makes the new cables show up on t ray scanners

* box station mapping fixes

* delta mapping fixes

* meta fix

* Update deltastation.dmm

* delta and faragus fixes

* Update emeraldstation.dmm

* adds diagonal sprites to heavy duty cables. allows sillicons to toggle them and

* Makes borg versions of the heavy duty cable coil

* palete consolidation

* Improves visibility of high power cables

* fixes a wrong wire under the pet store maints door in delta station

* resolve conflicts

* migrates new cable type to new attack chain

* Update cable_coil.dm
2025-09-22 12:52:15 +00:00

188 lines
5.8 KiB
Plaintext

/obj/machinery/power/apc/proc/has_electronics()
return electronics_state != APC_ELECTRONICS_NONE
/obj/machinery/power/apc/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
if(!(stat & BROKEN))
set_broken()
if(opened != APC_COVER_OFF)
opened = APC_COVER_OFF
cover_locked = FALSE
visible_message(
"<span class='warning'>The cover falls off [src]!</span>",
"<span class='warning'>You hear a small flat object falling to the floor!</span>"
)
update_icon()
/obj/machinery/power/apc/crowbar_act(mob/living/user, obj/item/I)
. = TRUE
if(!I.tool_start_check(src, user, 0))
return
// 1. Opened APC
if(opened)
if(cell)
if(opened == APC_OPENED) // Do not magically create a new cover if it broke off.
opened = APC_CLOSED
cover_locked = TRUE //closing cover relocks it
update_icon()
user.visible_message(
"<span class='notice'>[user] closes the cover of [src].</span>",
"<span class='notice'>You close the cover of [src].</span>")
return
else
to_chat(user, "<span class='warning'>Remove the cell first!</span>")
return
if(electronics_state == APC_ELECTRONICS_NONE)
to_chat(user, "<span class='warning'>There's nothing inside!</span>")
return
if(terminal)
to_chat(user, "<span class='warning'>Disconnect the wires first!</span>")
return
if(I.use_tool(src, user, FALSE, volume = I.tool_volume))
if(has_electronics())
electronics_state = APC_ELECTRONICS_NONE
if(stat & BROKEN)
user.visible_message(
"<span class='notice'>[user] rips out the broken the APC electronics inside [src]!</span>",
"<span class='notice'>You break the charred APC electronics and remove the remains.</span>",
"<span class='warning'>You hear metallic levering and a crack.</span>")
stat |= MAINT
update_icon()
return
if(emagged) // We emag board, not APC's frame
emagged = FALSE
user.visible_message(
"<span class='notice'>[user] has discarded the shorted APC electronics from [src]!</span>",
"<span class='notice'>You discarded the shorted board.</span>",
"<span class='warning'>You hear metallic levering.</span>"
)
stat |= MAINT
update_icon()
return
if(malfhack) // AI hacks board, not APC's frame
user.visible_message(\
"<span class='notice'>[name] has discarded the strangely programmed APC electronics from [src]!</span>",
"<span class='notice'>You discarded the strangely programmed board.</span>",
"<span class='warning'>You hear metallic levering.</span>"
)
malfai = null
malfhack = FALSE
stat |= MAINT
update_icon()
return
user.visible_message(
"<span class='notice'>[user] has removed the APC electronics from [src]!</span>",
"<span class='notice'>You remove the APC electronics.</span>",
"<span class='warning'>You hear metallic levering.</span>"
)
new /obj/item/apc_electronics(loc)
stat |= MAINT
update_icon()
return
// 2. Closed APC
if(!(stat & BROKEN))
if(panel_open) // wires are exposed
to_chat(user, "<span class='warning'>Exposed wiring prevents you from opening [src]!</span>")
return
if(cover_locked && !(stat & MAINT)) // locked...
to_chat(user, "<span class='warning'>The cover of [src] is locked!</span>")
return
to_chat(user, "<span class='notice'>You open the cover of [src].</span>")
opened = APC_OPENED
update_icon()
// 3. Broken, closed APC
if((stat & BROKEN) && opened == APC_CLOSED)
if(!I.use_tool(src, user, 1 SECONDS, volume = I.tool_volume))
return
user.visible_message(
"<span class='notice'>[user] rips the cover off [src].</span>",
"<span class='notice'>You rip the cover off [src].</span>",
"<span class='warning'>You hear metallic levering and a small flat object falling to the floor!</span>"
)
panel_open = FALSE // Avoid wacky behavour with wires.
opened = APC_COVER_OFF
update_icon()
/obj/machinery/power/apc/screwdriver_act(mob/living/user, obj/item/I)
. = TRUE
if(opened)
to_chat(user, "<span class='warning'>Close the APC first!</span>")
return
if(emagged)
to_chat(user, "<span class='warning'>The interface is broken!</span>")
return
if(!I.use_tool(src, user, FALSE, volume = I.tool_volume))
return
panel_open = !panel_open
to_chat(user, "<span class='notice'>The wires have been [panel_open ? "exposed" : "unexposed"]</span>")
update_icon()
/obj/machinery/power/apc/wirecutter_act(mob/living/user, obj/item/I)
. = TRUE
if(terminal && opened)
if(!I.use_tool(src, user, FALSE, volume = I.tool_volume))
return
terminal.dismantle(user, I)
return
if(panel_open && !opened)
if(!I.use_tool(src, user, FALSE, volume = I.tool_volume))
return
wires.Interact(user)
/obj/machinery/power/apc/multitool_act(mob/living/user, obj/item/I)
. = TRUE
if(panel_open && !opened)
if(!I.use_tool(src, user, FALSE, volume = I.tool_volume))
return
wires.Interact(user)
/obj/machinery/power/apc/welder_act(mob/user, obj/item/I)
if(!opened || has_electronics() || terminal)
return
. = TRUE
if(!I.tool_use_check(user, 3))
return
WELDER_ATTEMPT_SLICING_MESSAGE
if(I.use_tool(src, user, apc_frame_welding_time, amount = 3, volume = I.tool_volume))
if((stat & BROKEN) || opened == APC_COVER_OFF)
new sheet_type(loc)
if(shock_proof)
new /obj/item/stack/sheet/plastic(loc, 10)
user.visible_message(\
"<span class='notice'>[user] has cut [src] apart with [I].</span>",
"<span class='notice'>You disassembled the broken APC frame.</span>",
"<span class='warning'>You hear welding.</span>"
)
else
new frame_type(loc)
user.visible_message(\
"<span class='notice'>[user] has cut [src] from the wall with [I].</span>",
"<span class='notice'>You cut the APC frame from the wall.</span>",
"<span class='warning'>You hear welding.</span>"
)
qdel(src)