Merge branch 'master' of github.com:Baystation12/Baystation12

This commit is contained in:
SkyMarshal
2012-01-20 12:53:43 -07:00
12 changed files with 610 additions and 7 deletions

View File

@@ -0,0 +1,337 @@
obj/machinery/atmospherics/tvalve
icon = 'valve.dmi'
icon_state = "tvalve0"
name = "manual switching valve"
desc = "A pipe valve"
dir = SOUTH
initialize_directions = SOUTH|NORTH|WEST
var/state = 0 // 0 = go straight, 1 = go to side
// like a trinary component, node1 is input, node2 is side output, node3 is straight output
var/obj/machinery/atmospherics/node1
var/obj/machinery/atmospherics/node2
var/obj/machinery/atmospherics/node3
var/datum/pipe_network/network_node1
var/datum/pipe_network/network_node2
var/datum/pipe_network/network_node3
update_icon(animation)
if(animation)
flick("tvalve[src.state][!src.state]",src)
else
icon_state = "tvalve[state]"
New()
switch(dir)
if(NORTH)
initialize_directions = SOUTH|NORTH|EAST
if(SOUTH)
initialize_directions = NORTH|SOUTH|WEST
if(EAST)
initialize_directions = WEST|EAST|SOUTH
if(WEST)
initialize_directions = EAST|WEST|NORTH
..()
network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1)
network_node1 = new_network
if(state)
network_node2 = new_network
else
network_node3 = new_network
else if(reference == node2)
network_node2 = new_network
if(state)
network_node1 = new_network
else if(reference == node3)
network_node3 = new_network
if(!state)
network_node1 = new_network
if(new_network.normal_members.Find(src))
return 0
new_network.normal_members += src
if(state)
if(reference == node1)
if(node2)
return node2.network_expand(new_network, src)
else if(reference == node2)
if(node1)
return node1.network_expand(new_network, src)
else
if(reference == node1)
if(node3)
return node3.network_expand(new_network, src)
else if(reference == node3)
if(node1)
return node1.network_expand(new_network, src)
return null
Del()
loc = null
if(node1)
node1.disconnect(src)
del(network_node1)
if(node2)
node2.disconnect(src)
del(network_node2)
if(node3)
node3.disconnect(src)
del(network_node3)
node1 = null
node2 = null
node3 = null
..()
proc/go_to_side()
if(state) return 0
state = 1
update_icon()
if(network_node1)
del(network_node1)
if(network_node3)
del(network_node3)
build_network()
if(network_node1&&network_node2)
network_node1.merge(network_node2)
network_node2 = network_node1
if(network_node1)
network_node1.update = 1
else if(network_node2)
network_node2.update = 1
return 1
proc/go_straight()
if(!state)
return 0
state = 0
update_icon()
if(network_node1)
del(network_node1)
if(network_node2)
del(network_node2)
build_network()
if(network_node1&&network_node3)
network_node1.merge(network_node3)
network_node3 = network_node1
if(network_node1)
network_node1.update = 1
else if(network_node3)
network_node3.update = 1
return 1
attack_ai(mob/user as mob)
return
attack_paw(mob/user as mob)
return attack_hand(user)
attack_hand(mob/user as mob)
src.add_fingerprint(usr)
update_icon(1)
sleep(10)
if (src.state)
src.go_straight()
else
src.go_to_side()
process()
..()
machines.Remove(src)
/* if(open && (!node1 || !node2))
close()
if(!node1)
if(!nodealert)
//world << "Missing node from [src] at [src.x],[src.y],[src.z]"
nodealert = 1
else if (!node2)
if(!nodealert)
//world << "Missing node from [src] at [src.x],[src.y],[src.z]"
nodealert = 1
else if (nodealert)
nodealert = 0
*/
return
initialize()
var/node1_dir
var/node2_dir
var/node3_dir
node1_dir = turn(dir, 180)
node2_dir = turn(dir, -90)
node3_dir = dir
for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir))
if(target.initialize_directions & get_dir(target,src))
node1 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir))
if(target.initialize_directions & get_dir(target,src))
node2 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,node3_dir))
if(target.initialize_directions & get_dir(target,src))
node3 = target
break
build_network()
if(!network_node1 && node1)
network_node1 = new /datum/pipe_network()
network_node1.normal_members += src
network_node1.build_network(node1, src)
if(!network_node2 && node2)
network_node2 = new /datum/pipe_network()
network_node2.normal_members += src
network_node2.build_network(node2, src)
if(!network_node3 && node3)
network_node3 = new /datum/pipe_network()
network_node3.normal_members += src
network_node3.build_network(node3, src)
return_network(obj/machinery/atmospherics/reference)
build_network()
if(reference==node1)
return network_node1
if(reference==node2)
return network_node2
if(reference==node3)
return network_node3
return null
reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
if(network_node1 == old_network)
network_node1 = new_network
if(network_node2 == old_network)
network_node2 = new_network
if(network_node3 == old_network)
network_node3 = new_network
return 1
return_network_air(datum/network/reference)
return null
disconnect(obj/machinery/atmospherics/reference)
if(reference==node1)
del(network_node1)
node1 = null
else if(reference==node2)
del(network_node2)
node2 = null
else if(reference==node3)
del(network_node3)
node2 = null
return null
digital // can be controlled by AI
name = "digital switching valve"
desc = "A digitally controlled valve."
icon = 'digital_valve.dmi'
attack_ai(mob/user as mob)
return src.attack_hand(user)
attack_hand(mob/user as mob)
if(!src.allowed(user))
user << "\red Access denied."
return
..()
//Radio remote control
proc
set_frequency(new_frequency)
radio_controller.remove_object(src, frequency)
frequency = new_frequency
if(frequency)
radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
var/frequency = 0
var/id = null
var/datum/radio_frequency/radio_connection
initialize()
..()
if(frequency)
set_frequency(frequency)
receive_signal(datum/signal/signal)
if(!signal.data["tag"] || (signal.data["tag"] != id))
return 0
switch(signal.data["command"])
if("valve_open")
if(!state)
go_to_side()
if("valve_close")
if(state)
go_straight()
if("valve_toggle")
if(state)
go_straight()
else
go_to_side()
attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (!istype(W, /obj/item/weapon/wrench))
return ..()
if (istype(src, /obj/machinery/atmospherics/tvalve/digital))
user << "\red You cannot unwrench this [src], it's too complicated."
return 1
var/turf/T = src.loc
if (level==1 && isturf(T) && T.intact)
user << "\red You must remove the plating first."
return 1
var/datum/gas_mixture/int_air = return_air()
var/datum/gas_mixture/env_air = loc.return_air()
if ((int_air.return_pressure()-env_air.return_pressure()) > 2*ONE_ATMOSPHERE)
user << "\red You cannot unwrench this [src], it too exerted due to internal pressure."
add_fingerprint(user)
return 1
playsound(src.loc, 'Ratchet.ogg', 50, 1)
user << "\blue You begin to unfasten \the [src]..."
if (do_after(user, 40))
user.visible_message( \
"[user] unfastens \the [src].", \
"\blue You have unfastened \the [src].", \
"You hear ratchet.")
new /obj/item/pipe(loc, make_from=src)
del(src)

View File

@@ -800,6 +800,202 @@ obj/machinery/atmospherics/pipe
level = 1
icon_state = "manifold-f"
manifold4w
icon = 'pipe_manifold.dmi'
icon_state = "manifold4w-f"
name = "4-way pipe manifold"
desc = "A manifold composed of regular pipes"
volume = 140
dir = SOUTH
initialize_directions = EAST|NORTH|WEST|SOUTH
var/obj/machinery/atmospherics/node1
var/obj/machinery/atmospherics/node2
var/obj/machinery/atmospherics/node3
var/obj/machinery/atmospherics/node4
level = 1
hide(var/i)
if(level == 1 && istype(loc, /turf/simulated))
invisibility = i ? 101 : 0
update_icon()
pipeline_expansion()
return list(node1, node2, node3, node4)
process()
if(!parent)
..()
else
machines.Remove(src)
/*
if(!node1)
parent.mingle_with_turf(loc, 70)
if(!nodealert)
//world << "Missing node from [src] at [src.x],[src.y],[src.z]"
nodealert = 1
else if(!node2)
parent.mingle_with_turf(loc, 70)
if(!nodealert)
//world << "Missing node from [src] at [src.x],[src.y],[src.z]"
nodealert = 1
else if(!node3)
parent.mingle_with_turf(loc, 70)
if(!nodealert)
//world << "Missing node from [src] at [src.x],[src.y],[src.z]"
nodealert = 1
else if (nodealert)
nodealert = 0
*/
Del()
if(node1)
node1.disconnect(src)
if(node2)
node2.disconnect(src)
if(node3)
node3.disconnect(src)
if(node4)
node4.disconnect(src)
..()
disconnect(obj/machinery/atmospherics/reference)
if(reference == node1)
if(istype(node1, /obj/machinery/atmospherics/pipe))
del(parent)
node1 = null
if(reference == node2)
if(istype(node2, /obj/machinery/atmospherics/pipe))
del(parent)
node2 = null
if(reference == node3)
if(istype(node3, /obj/machinery/atmospherics/pipe))
del(parent)
node3 = null
if(reference == node4)
if(istype(node4, /obj/machinery/atmospherics/pipe))
del(parent)
node3 = null
update_icon()
..()
update_icon()
overlays = new()
if(node1&&node2&&node3&&node4)
var/C = ""
switch(color)
if ("red") C = "-r"
if ("blue") C = "-b"
if ("cyan") C = "-c"
if ("green") C = "-g"
if ("yellow") C = "-y"
if ("purple") C = "-p"
icon_state = "manifold4w[C][invisibility ? "-f" : ""]"
else
icon_state = "manifold4w_ex"
var/icon/con = new/icon('pipe_manifold.dmi',"manifold4w_con")
if(node1)
overlays += new/image(con,dir=1)
if(node2)
overlays += new/image(con,dir=2)
if(node3)
overlays += new/image(con,dir=4)
if(node4)
overlays += new/image(con,dir=8)
if(!node1 && !node2 && !node3 && !node4)
del(src)
return
initialize()
for(var/obj/machinery/atmospherics/target in get_step(src,1))
if(target.initialize_directions & get_dir(target,src))
node1 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,2))
if(target.initialize_directions & get_dir(target,src))
node2 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,4))
if(target.initialize_directions & get_dir(target,src))
node3 = target
break
for(var/obj/machinery/atmospherics/target in get_step(src,8))
if(target.initialize_directions & get_dir(target,src))
node4 = target
break
var/turf/T = src.loc // hide if turf is not intact
hide(T.intact)
//update_icon()
update_icon()
manifold4w/scrubbers
name="Scrubbers pipe"
color="red"
icon_state = ""
manifold4w/supply
name="Air supply pipe"
color="blue"
icon_state = ""
manifold4w/supplymain
name="Main air supply pipe"
color="purple"
icon_state = ""
manifold4w/general
name="Air supply pipe"
color="gray"
icon_state = ""
manifold4w/scrubbers/visible
level = 2
icon_state = "manifold4w-r"
manifold4w/scrubbers/hidden
level = 1
icon_state = "manifold4w-r-f"
manifold4w/supply/visible
level = 2
icon_state = "manifold4w-b"
manifold4w/supply/hidden
level = 1
icon_state = "manifold4w-b-f"
manifold4w/supplymain/visible
level = 2
icon_state = "manifold4w-p"
manifold4w/supplymain/hidden
level = 1
icon_state = "manifold4w-p-f"
manifold4w/general/visible
level = 2
icon_state = "manifold4w"
manifold4w/general/hidden
level = 1
icon_state = "manifold4w-f"
obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if (istype(src, /obj/machinery/atmospherics/pipe/tank))
return ..()

View File

@@ -71,15 +71,18 @@
usr << t
/obj/machinery/meter/attack_ai(mob/user as mob)
return attack_hand(user)
/obj/machinery/meter/attack_paw(mob/user as mob)
return attack_hand(user)
/obj/machinery/meter/Click()
/obj/machinery/meter/attack_hand(mob/user as mob)
if(stat & (NOPOWER|BROKEN))
return 1
var/t = null
if (get_dist(usr, src) <= 3 || istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/dead))
if (get_dist(user, src) <= 3 || istype(user, /mob/living/silicon/ai) || istype(user, /mob/dead))
if (src.target)
var/datum/gas_mixture/environment = target.return_air()
if(environment)

View File

@@ -178,8 +178,11 @@
container.layer = initial(container.layer)
if(href_list["modifyOutputAmount"])
outputAmount = text2num(input(usr,"Amount:","Enter new quantity to create",""))
if(outputAmount < 1)
outputAmount = 1
if(!busy)
if(outputAmount < 1)
outputAmount = 1
else
usr << "\red The autolathe is busy. Please wait for completion of previous operation."
if (!busy)
if(href_list["make"])
makeNew:

View File

@@ -17,6 +17,8 @@ Buildable meters
#define PIPE_INSULATED_BENT 12
#define PIPE_GAS_FILTER 13
#define PIPE_GAS_MIXER 14
#define PIPE_MTVALVE 15
#define PIPE_MANIFOLD4W 16
/obj/item/pipe
name = "pipe"
@@ -65,6 +67,10 @@ Buildable meters
src.pipe_type = PIPE_GAS_MIXER
else if(istype(make_from, /obj/machinery/atmospherics/unary/vent_scrubber))
src.pipe_type = PIPE_SCRUBBER
else if(istype(make_from, /obj/machinery/atmospherics/tvalve))
src.pipe_type = PIPE_MTVALVE
else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold))
src.pipe_type = PIPE_MANIFOLD4W
else
src.pipe_type = pipe_type
src.dir = dir
@@ -92,6 +98,8 @@ Buildable meters
"bent insulated pipe", \
"gas filter", \
"gas mixer", \
"t-valve", \
"4-way manifold", \
)
name = nlist[pipe_type+1] + " fitting"
var/list/islist = list( \
@@ -110,6 +118,8 @@ Buildable meters
"insulated", \
"filter", \
"mixer", \
"mtvalve", \
"manifold4w", \
)
icon_state = islist[pipe_type + 1]
@@ -133,6 +143,8 @@ Buildable meters
dir = 1
else if(dir==8)
dir = 4
else if (pipe_type == PIPE_MANIFOLD4W)
dir = 2
//src.pipe_dir = get_pipe_dir()
return
@@ -168,11 +180,11 @@ Buildable meters
return dir|flip
if(PIPE_SIMPLE_BENT, PIPE_INSULATED_BENT, PIPE_HE_BENT)
return dir //dir|acw
if(PIPE_CONNECTOR,PIPE_UVENT,PIPE_SCRUBBER)
if(PIPE_CONNECTOR,PIPE_UVENT,PIPE_SCRUBBER,PIPE_MANIFOLD4W)
return dir
if(PIPE_MANIFOLD)
return flip|cw|acw
if(PIPE_GAS_FILTER, PIPE_GAS_MIXER)
if(PIPE_GAS_FILTER, PIPE_GAS_MIXER,PIPE_MTVALVE)
return dir|flip|cw
return 0
@@ -223,6 +235,8 @@ Buildable meters
dir = 1
else if(dir==8)
dir = 4
else if (pipe_type == PIPE_MANIFOLD4W)
dir = 2
var/pipe_dir = get_pipe_dir()
for(var/obj/machinery/atmospherics/M in src.loc)
@@ -308,6 +322,31 @@ Buildable meters
M.node3.initialize()
M.node3.build_network()
if(PIPE_MANIFOLD4W) //4-way manifold
var/obj/machinery/atmospherics/pipe/manifold4w/M = new( src.loc )
M.dir = dir
M.initialize_directions = pipe_dir
//M.New()
var/turf/T = M.loc
M.level = T.intact ? 2 : 1
M.initialize()
if (!M)
usr << "There's nothing to connect this manifold to! (with how the pipe code works, at least one end needs to be connected to something, otherwise the game deletes the segment)"
return 1
M.build_network()
if (M.node1)
M.node1.initialize()
M.node1.build_network()
if (M.node2)
M.node2.initialize()
M.node2.build_network()
if (M.node3)
M.node3.initialize()
M.node3.build_network()
if (M.node4)
M.node4.initialize()
M.node4.build_network()
if(PIPE_JUNCTION)
var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/P = new ( src.loc )
P.dir = src.dir
@@ -450,6 +489,26 @@ Buildable meters
P.node2.initialize()
P.node2.build_network()
if(PIPE_MTVALVE) //manual t-valve
var/obj/machinery/atmospherics/tvalve/V = new(src.loc)
V.dir = dir
V.initialize_directions = pipe_dir
if (pipename)
V.name = pipename
var/turf/T = V.loc
V.level = T.intact ? 2 : 1
V.initialize()
V.build_network()
if (V.node1)
V.node1.initialize()
V.node1.build_network()
if (V.node2)
V.node2.initialize()
V.node2.build_network()
if (V.node3)
V.node3.initialize()
V.node3.build_network()
playsound(src.loc, 'Ratchet.ogg', 50, 1)
user.visible_message( \
"[user] fastens the [src].", \
@@ -501,3 +560,5 @@ Buildable meters
#undef PIPE_INSULATED_BENT
#undef PIPE_GAS_FILTER
#undef PIPE_GAS_MIXER
#undef PIPE_MTVALVE
#undef PIPE_MANIFOLD4W

View File

@@ -18,7 +18,9 @@
<A href='?src=\ref[src];make=0;dir=1'>Pipe</A><BR>
<A href='?src=\ref[src];make=1;dir=5'>Bent Pipe</A><BR>
<A href='?src=\ref[src];make=5;dir=1'>Manifold</A><BR>
<A href='?src=\ref[src];make=16;dir=1'>4-Way Manifold</A><BR>
<A href='?src=\ref[src];make=8;dir=1'>Manual Valve</A><BR>
<A href='?src=\ref[src];make=15;dir=1'>Manual T-Valve</A><BR>
<b>Devices:</b><BR>
<A href='?src=\ref[src];make=4;dir=1'>Connector</A><BR>
<A href='?src=\ref[src];make=7;dir=1'>Unary Vent</A><BR>