mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Conflicts: baystation12.dme code/ATMOSPHERICS/components/unary/vent_pump.dm code/ATMOSPHERICS/components/unary/vent_scrubber.dm code/__HELPERS/game.dm code/controllers/shuttle_controller.dm code/datums/datumvars.dm code/datums/supplypacks.dm code/defines/obj/storage.dm code/defines/obj/vending.dm code/defines/obj/weapon.dm code/defines/procs/command_alert.dm code/game/area/Space Station 13 areas.dm code/game/atoms.dm code/game/gamemodes/changeling/modularchangling.dm code/game/gamemodes/cult/runes.dm code/game/gamemodes/events.dm code/game/gamemodes/events/dust.dm code/game/gamemodes/events/miniblob.dm code/game/gamemodes/events/ninja_equipment.dm code/game/gamemodes/factions.dm code/game/gamemodes/game_mode.dm code/game/gamemodes/gameticker.dm code/game/jobs/access.dm code/game/jobs/job/assistant.dm code/game/jobs/job/captain.dm code/game/jobs/job/civilian.dm code/game/jobs/job/engineering.dm code/game/jobs/job/medical.dm code/game/jobs/job/science.dm code/game/jobs/job/security.dm code/game/jobs/job_controller.dm code/game/machinery/alarm.dm code/game/machinery/atmo_control.dm code/game/machinery/atmoalter/area_atmos_computer.dm code/game/machinery/bots/medbot.dm code/game/machinery/computer/HolodeckControl.dm code/game/machinery/computer/ai_core.dm code/game/machinery/computer/atmos_alert.dm code/game/machinery/computer/card.dm code/game/machinery/computer/cloning.dm code/game/machinery/computer/computer.dm code/game/machinery/computer/message.dm code/game/machinery/computer/pod.dm code/game/machinery/computer/prisoner.dm code/game/machinery/computer/syndicate_shuttle.dm code/game/machinery/constructable_frame.dm code/game/machinery/doors/door.dm code/game/machinery/doors/firedoor.dm code/game/machinery/newscaster.dm code/game/machinery/recharger.dm code/game/machinery/spaceheater.dm code/game/machinery/telecomms/broadcaster.dm code/game/machinery/telecomms/logbrowser.dm code/game/machinery/telecomms/machine_interactions.dm code/game/machinery/teleporter.dm code/game/machinery/wishgranter.dm code/game/mecha/mech_fabricator.dm code/game/mecha/working/ripley.dm code/game/objects/items.dm code/game/objects/items/blueprints.dm code/game/objects/items/devices/flashlight.dm code/game/objects/items/devices/radio/encryptionkey.dm code/game/objects/items/devices/uplinks.dm code/game/objects/items/stacks/medical.dm code/game/objects/items/weapons/cards_ids.dm code/game/objects/items/weapons/gift_wrappaper.dm code/game/objects/items/weapons/hydroponics.dm code/game/objects/items/weapons/manuals.dm code/game/objects/items/weapons/secstorage/secstorage.dm code/game/objects/items/weapons/storage/backpack.dm code/game/objects/items/weapons/storage/firstaid.dm code/game/objects/items/weapons/storage/kit.dm code/game/objects/items/weapons/storage/storage.dm code/game/objects/items/weapons/storage/toolbox.dm code/game/objects/items/weapons/storage/uplink_kits.dm code/game/objects/items/weapons/stunbaton.dm code/game/objects/items/weapons/surgery_tools.dm code/game/objects/items/weapons/tools.dm code/game/objects/structures/crates_lockers/closets/secure/cargo.dm code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm code/game/objects/structures/crates_lockers/closets/secure/scientist.dm code/game/objects/structures/crates_lockers/closets/secure/security.dm code/game/objects/structures/electricchair.dm code/game/objects/structures/extinguisher.dm code/game/objects/structures/watercloset.dm code/game/objects/weapons.dm code/game/turfs/turf.dm code/game/vehicles/airtight/airtight.dm code/game/vehicles/vehicle.dm code/global.dm code/modules/DetectiveWork/evidence.dm code/modules/admin/IsBanned.dm code/modules/admin/player_panel.dm code/modules/admin/verbs/diagnostics.dm code/modules/admin/verbs/getlogs.dm code/modules/client/preferences.dm code/modules/clothing/masks/miscellaneous.dm code/modules/clothing/spacesuits/rig.dm code/modules/clothing/suits/miscellaneous.dm code/modules/critters/critter_defenses.dm code/modules/detectivework/scanner.dm code/modules/flufftext/Hallucination.dm code/modules/food/recipes_microwave.dm code/modules/mining/mine_items.dm code/modules/mining/mine_turfs.dm code/modules/mining/satchel_ore_boxdm.dm code/modules/mob/dead/observer/observer.dm code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm code/modules/mob/living/carbon/alien/special/facehugger.dm code/modules/mob/living/carbon/carbon.dm code/modules/mob/living/carbon/carbon_defines.dm code/modules/mob/living/carbon/human/human.dm code/modules/mob/living/carbon/human/human_attackhand.dm code/modules/mob/living/carbon/human/life.dm code/modules/mob/living/carbon/human/say.dm code/modules/mob/living/carbon/human/update_icons.dm code/modules/mob/living/carbon/metroid/metroid.dm code/modules/mob/living/living.dm code/modules/mob/living/silicon/ai/life.dm code/modules/mob/living/silicon/robot/robot.dm code/modules/mob/mob_cleanup.dm code/modules/mob/mob_defines.dm code/modules/mob/mob_transformation_simple.dm code/modules/paperwork/clipboard.dm code/modules/paperwork/folders.dm code/modules/paperwork/paper.dm code/modules/paperwork/paperbin.dm code/modules/paperwork/pen.dm code/modules/power/cable.dm code/modules/projectiles/guns/energy/special.dm code/modules/projectiles/guns/projectile/revolver.dm code/modules/projectiles/projectile/change.dm code/modules/projectiles/projectile/special.dm code/modules/reagents/Chemistry-Reagents.dm code/modules/reagents/reagent_containers/glass.dm code/modules/reagents/reagent_containers/hypospray.dm code/modules/recycling/sortingmachinery.dm code/modules/research/designs.dm config/config.txt html/changelog.html icons/mob/head.dmi icons/mob/hud.dmi icons/mob/items_lefthand.dmi icons/mob/items_righthand.dmi icons/mob/mask.dmi icons/mob/suit.dmi icons/mob/ties.dmi icons/mob/uniform.dmi icons/obj/clothing/hats.dmi icons/obj/clothing/masks.dmi icons/obj/clothing/suits.dmi icons/obj/clothing/ties.dmi icons/obj/grenade.dmi icons/obj/projectiles.dmi Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
311 lines
8.5 KiB
Plaintext
311 lines
8.5 KiB
Plaintext
/obj/machinery/compressor
|
|
name = "compressor"
|
|
desc = "The compressor stage of a gas turbine generator."
|
|
icon = 'icons/obj/pipes.dmi'
|
|
icon_state = "compressor"
|
|
anchored = 1
|
|
density = 1
|
|
var/obj/machinery/power/turbine/turbine
|
|
var/datum/gas_mixture/gas_contained
|
|
var/turf/simulated/inturf
|
|
var/starter = 0
|
|
var/rpm = 0
|
|
var/rpmtarget = 0
|
|
var/capacity = 1e6
|
|
var/comp_id = 0
|
|
|
|
/obj/machinery/power/turbine
|
|
name = "gas turbine generator"
|
|
desc = "A gas turbine used for backup power generation."
|
|
icon = 'icons/obj/pipes.dmi'
|
|
icon_state = "turbine"
|
|
anchored = 1
|
|
density = 1
|
|
var/obj/machinery/compressor/compressor
|
|
directwired = 1
|
|
var/turf/simulated/outturf
|
|
var/lastgen
|
|
|
|
/obj/machinery/computer/turbine_computer
|
|
name = "Gas turbine control computer"
|
|
desc = "A computer to remotely control a gas turbine"
|
|
icon = 'icons/obj/computer.dmi'
|
|
icon_state = "airtunnel0e"
|
|
anchored = 1
|
|
density = 1
|
|
var/obj/machinery/compressor/compressor
|
|
var/list/obj/machinery/door/poddoor/doors
|
|
var/id = 0
|
|
var/door_status = 0
|
|
|
|
// the inlet stage of the gas turbine electricity generator
|
|
|
|
/obj/machinery/compressor/New()
|
|
..()
|
|
|
|
gas_contained = new
|
|
inturf = get_step(src, dir)
|
|
|
|
spawn(5)
|
|
turbine = locate() in get_step(src, get_dir(inturf, src))
|
|
if(!turbine)
|
|
stat |= BROKEN
|
|
|
|
|
|
#define COMPFRICTION 5e5
|
|
#define COMPSTARTERLOAD 2800
|
|
|
|
/obj/machinery/compressor/process()
|
|
if(!starter)
|
|
return
|
|
overlays.Cut()
|
|
if(stat & BROKEN)
|
|
return
|
|
if(!turbine)
|
|
stat |= BROKEN
|
|
return
|
|
rpm = 0.9* rpm + 0.1 * rpmtarget
|
|
var/datum/gas_mixture/environment = inturf.return_air()
|
|
var/transfer_moles = environment.total_moles()/10
|
|
//var/transfer_moles = rpm/10000*capacity
|
|
var/datum/gas_mixture/removed = inturf.remove_air(transfer_moles)
|
|
gas_contained.merge(removed)
|
|
|
|
rpm = max(0, rpm - (rpm*rpm)/COMPFRICTION)
|
|
|
|
|
|
if(starter && !(stat & NOPOWER))
|
|
use_power(2800)
|
|
if(rpm<1000)
|
|
rpmtarget = 1000
|
|
else
|
|
if(rpm<1000)
|
|
rpmtarget = 0
|
|
|
|
|
|
|
|
if(rpm>50000)
|
|
overlays += image('icons/obj/pipes.dmi', "comp-o4", FLY_LAYER)
|
|
else if(rpm>10000)
|
|
overlays += image('icons/obj/pipes.dmi', "comp-o3", FLY_LAYER)
|
|
else if(rpm>2000)
|
|
overlays += image('icons/obj/pipes.dmi', "comp-o2", FLY_LAYER)
|
|
else if(rpm>500)
|
|
overlays += image('icons/obj/pipes.dmi', "comp-o1", FLY_LAYER)
|
|
//TODO: DEFERRED
|
|
|
|
/obj/machinery/power/turbine/New()
|
|
..()
|
|
|
|
outturf = get_step(src, dir)
|
|
|
|
spawn(5)
|
|
|
|
compressor = locate() in get_step(src, get_dir(outturf, src))
|
|
if(!compressor)
|
|
stat |= BROKEN
|
|
|
|
|
|
#define TURBPRES 9000000
|
|
#define TURBGENQ 20000
|
|
#define TURBGENG 0.8
|
|
|
|
/obj/machinery/power/turbine/process()
|
|
if(!compressor.starter)
|
|
return
|
|
overlays.Cut()
|
|
if(stat & BROKEN)
|
|
return
|
|
if(!compressor)
|
|
stat |= BROKEN
|
|
return
|
|
lastgen = ((compressor.rpm / TURBGENQ)**TURBGENG) *TURBGENQ
|
|
|
|
add_avail(lastgen)
|
|
var/newrpm = ((compressor.gas_contained.temperature) * compressor.gas_contained.total_moles())/4
|
|
newrpm = max(0, newrpm)
|
|
|
|
if(!compressor.starter || newrpm > 1000)
|
|
compressor.rpmtarget = newrpm
|
|
|
|
if(compressor.gas_contained.total_moles()>0)
|
|
var/oamount = min(compressor.gas_contained.total_moles(), (compressor.rpm+100)/35000*compressor.capacity)
|
|
var/datum/gas_mixture/removed = compressor.gas_contained.remove(oamount)
|
|
outturf.assume_air(removed)
|
|
|
|
if(lastgen > 100)
|
|
overlays += image('icons/obj/pipes.dmi', "turb-o", FLY_LAYER)
|
|
|
|
|
|
for(var/mob/M in viewers(1, src))
|
|
if ((M.client && M.machine == src))
|
|
src.interact(M)
|
|
AutoUpdateAI(src)
|
|
|
|
/obj/machinery/power/turbine/interact(mob/user)
|
|
|
|
if ( (get_dist(src, user) > 1 ) || (stat & (NOPOWER|BROKEN)) && (!istype(user, /mob/living/silicon/ai)) )
|
|
user.machine = null
|
|
user << browse(null, "window=turbine")
|
|
return
|
|
|
|
user.machine = src
|
|
|
|
var/t = "<TT><B>Gas Turbine Generator</B><HR><PRE>"
|
|
|
|
t += "Generated power : [round(lastgen)] W<BR><BR>"
|
|
|
|
t += "Turbine: [round(compressor.rpm)] RPM<BR>"
|
|
|
|
t += "Starter: [ compressor.starter ? "<A href='?src=\ref[src];str=1'>Off</A> <B>On</B>" : "<B>Off</B> <A href='?src=\ref[src];str=1'>On</A>"]"
|
|
|
|
t += "</PRE><HR><A href='?src=\ref[src];close=1'>Close</A>"
|
|
|
|
t += "</TT>"
|
|
user << browse(t, "window=turbine")
|
|
onclose(user, "turbine")
|
|
|
|
return
|
|
|
|
/obj/machinery/power/turbine/Topic(href, href_list)
|
|
..()
|
|
if(stat & BROKEN)
|
|
return
|
|
if (usr.stat || usr.restrained() )
|
|
return
|
|
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
|
|
if(!istype(usr, /mob/living/silicon/ai))
|
|
usr << "\red You don't have the dexterity to do this!"
|
|
return
|
|
|
|
if (( usr.machine==src && ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
|
|
|
|
|
|
if( href_list["close"] )
|
|
usr << browse(null, "window=turbine")
|
|
usr.machine = null
|
|
return
|
|
|
|
else if( href_list["str"] )
|
|
compressor.starter = !compressor.starter
|
|
|
|
spawn(0)
|
|
for(var/mob/M in viewers(1, src))
|
|
if ((M.client && M.machine == src))
|
|
src.interact(M)
|
|
|
|
else
|
|
usr << browse(null, "window=turbine")
|
|
usr.machine = null
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/obj/machinery/computer/turbine_computer/New()
|
|
..()
|
|
spawn(5)
|
|
for(var/obj/machinery/compressor/C in world)
|
|
if(id == C.comp_id)
|
|
compressor = C
|
|
doors = new /list()
|
|
for(var/obj/machinery/door/poddoor/P in world)
|
|
if(P.id == id)
|
|
doors += P
|
|
|
|
/obj/machinery/computer/turbine_computer/attackby(I as obj, user as mob)
|
|
if(istype(I, /obj/item/weapon/screwdriver))
|
|
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
|
if(do_after(user, 20))
|
|
if (src.stat & BROKEN)
|
|
user << "\blue The broken glass falls out."
|
|
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
|
new /obj/item/weapon/shard( src.loc )
|
|
var/obj/item/weapon/circuitboard/turbine_control/M = new /obj/item/weapon/circuitboard/turbine_control( A )
|
|
for (var/obj/C in src)
|
|
C.loc = src.loc
|
|
M.id = src.id
|
|
A.circuit = M
|
|
A.state = 3
|
|
A.icon_state = "3"
|
|
A.anchored = 1
|
|
del(src)
|
|
else
|
|
user << "\blue You disconnect the monitor."
|
|
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
|
var/obj/item/weapon/circuitboard/turbine_control/M = new /obj/item/weapon/circuitboard/turbine_control( A )
|
|
for (var/obj/C in src)
|
|
C.loc = src.loc
|
|
M.id = src.id
|
|
A.circuit = M
|
|
A.state = 4
|
|
A.icon_state = "4"
|
|
A.anchored = 1
|
|
del(src)
|
|
else
|
|
src.attack_hand(user)
|
|
return
|
|
|
|
/obj/machinery/computer/turbine_computer/attack_hand(var/mob/user as mob)
|
|
user.machine = src
|
|
var/dat
|
|
if(src.compressor)
|
|
dat += {"<BR><B>Gas turbine remote control system</B><HR>
|
|
\nTurbine status: [ src.compressor.starter ? "<A href='?src=\ref[src];str=1'>Off</A> <B>On</B>" : "<B>Off</B> <A href='?src=\ref[src];str=1'>On</A>"]
|
|
\n<BR>
|
|
\nTurbine speed: [src.compressor.rpm]rpm<BR>
|
|
\nPower currently being generated: [src.compressor.turbine.lastgen]W<BR>
|
|
\nInternal gas temperature: [src.compressor.gas_contained.temperature]K<BR>
|
|
\nVent doors: [ src.door_status ? "<A href='?src=\ref[src];doors=1'>Closed</A> <B>Open</B>" : "<B>Closed</B> <A href='?src=\ref[src];doors=1'>Open</A>"]
|
|
\n</PRE><HR><A href='?src=\ref[src];view=1'>View</A>
|
|
\n</PRE><HR><A href='?src=\ref[src];close=1'>Close</A>
|
|
\n<BR>
|
|
\n"}
|
|
else
|
|
dat += "\red<B>No compatible attached compressor found."
|
|
|
|
user << browse(dat, "window=computer;size=400x500")
|
|
onclose(user, "computer")
|
|
return
|
|
|
|
|
|
|
|
/obj/machinery/computer/turbine_computer/Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
|
|
usr.machine = src
|
|
|
|
if( href_list["view"] )
|
|
usr.client.eye = src.compressor
|
|
else if( href_list["str"] )
|
|
src.compressor.starter = !src.compressor.starter
|
|
else if (href_list["doors"])
|
|
for(var/obj/machinery/door/poddoor/D in src.doors)
|
|
if (door_status == 0)
|
|
spawn( 0 )
|
|
D.open()
|
|
door_status = 1
|
|
else
|
|
spawn( 0 )
|
|
D.close()
|
|
door_status = 0
|
|
else if( href_list["close"] )
|
|
usr << browse(null, "window=computer")
|
|
usr.machine = null
|
|
return
|
|
|
|
src.add_fingerprint(usr)
|
|
src.updateUsrDialog()
|
|
return
|
|
|
|
/obj/machinery/computer/turbine_computer/process()
|
|
src.updateDialog()
|
|
return |