From b455c42d96de747121117ebfa301f30daad0363c Mon Sep 17 00:00:00 2001 From: Uristqwerty Date: Sat, 2 Mar 2013 04:17:58 -0500 Subject: [PATCH] Added: Code and icons for tube-based transportation. Just an additional tool that mappers may find interesting or fun. At the moment, they do not use power or any resources, and there is plenty of room to extend and improve them, but they do work. The basic tubes will read their directions from icon_state if they aren't specifically specified, so you can just use the built-in option to generate instances from icon states to get all possible tubes. The tube stations use directions, instead. --- baystation12.dme | 1 + .../Uristqwerty/transit_tube.dmi | Bin 0 -> 12027 bytes .../Uristqwerty/transit_tube_pod.dmi | Bin 0 -> 1586 bytes .../Uristqwerty/transit_tube_station.dmi | Bin 0 -> 7200 bytes .../Uristqwerty/transit_tubes.dm | 405 ++++++++++++++++++ 5 files changed, 406 insertions(+) create mode 100644 code/WorkInProgress/Uristqwerty/transit_tube.dmi create mode 100644 code/WorkInProgress/Uristqwerty/transit_tube_pod.dmi create mode 100644 code/WorkInProgress/Uristqwerty/transit_tube_station.dmi create mode 100644 code/WorkInProgress/Uristqwerty/transit_tubes.dm diff --git a/baystation12.dme b/baystation12.dme index a61e3eb7b11..0b700e0727d 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1457,6 +1457,7 @@ #include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm" #include "code\WorkInProgress\Susan\susan_desert_turfs.dm" +#include "code\WorkInProgress\Uristqwerty\transit_tubes.dm" #include "code\WorkInProgress\virus2\analyser.dm" #include "code\WorkInProgress\virus2\antibodies.dm" #include "code\WorkInProgress\virus2\base.dm" diff --git a/code/WorkInProgress/Uristqwerty/transit_tube.dmi b/code/WorkInProgress/Uristqwerty/transit_tube.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e70870018053792d14320637eaa45997445eb304 GIT binary patch literal 12027 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%0Dy}D(0dp3J_viC zhP?-(-a~Qki&5{(F_zo`?f|#4H|!7K7DW23poRiH^qBN_CB31dhwPh%Avd-MBf~Jy z*F*L#vTRDtu53P*Dt3A>LddNN*vgIQH zLDT+hYMG{t98PmZ{poi`A9u(yR9nFM# z*uE5jvVSB34gV+vTK*9TH2rH6X#3YBK=7|cfZ|`3Kq8Q!1v2GOiWbV17ZbF_OnEs) zTh5ge3bceqIi*5N>C}@-tfW>stwu}hl{Xe>8yn@V724KLd2@-jxmDg?qiyf|k=~DJ zB<~Mg5CA@=^Pc=n?>~7LJ16v?UtXSlF~A}NSX>ZbkpV130IwCmYfk{<3gB`_wIIN9 zK40D%0BXUadk_+U;O#AF0njCx)jF3Izhu+avL&1M0^nUd2=g!09E4O+YV%PFzi3ry zH=?4IS2^HKv%%`4)_<&OeO;FGw%e_j%WL-UtLGJEyZZl3vPS%}-DX=k*lsugYZ_o( z>raKr_a{b*!X^9rJFjrL`ltcuH-rFed+INU`1#+4_(kcKqbQzemTuQHz*-)_ac0kq z1j}W!c)eT(Y^!GRTI2xIyYBpjkvFz{|HigzmhY7T9CZNaJOF+dU9Ag5gA{QPb_0l} zDdIHb2bvRrAW-22B0;FF_54tc7>fCe4W;KUR+x)X*Lp8pt}&NmB>*geQm$(NbS9nG z0O(A+p^OO!pkw24EB6O3c(uFl&FL)&+5v;&0muFR!2ff9;4_SP2c1#)d7b+MUtt*Y zj(X!T{JP5hfoK=U347R`#PKfbx<8O4sqArknk3@;15p&m`-DC2Pxf&f@d@&R!}npo z_vH!>{(gV>=HDOq`KtW01&@N@>xX}TAUPZ|f^-sjoSkW9f8#}yH1mHrB%J#Lzki?E z_s{(&30?9@l9FH-eg6G6?H5I-WS>sCdti28BY zwqKUrO0z*6iwFw;aU7JW%>9ANe{d{Zg<)0p%O1-JjscgT?%2#Qr$y6#(To``gV9NU zJeIFo6+X)kb3C5x^D3520=D!D`QOy~pcrm->9-h~L2ZA-AxP7JB4~|OGQKJQL7KAl zTQC36l?i&nohE0c48vB=RT9)Kc2P5ClmnV9xBvhE07*qoM6N<$g3!X-mjD0& literal 0 HcmV?d00001 diff --git a/code/WorkInProgress/Uristqwerty/transit_tube_station.dmi b/code/WorkInProgress/Uristqwerty/transit_tube_station.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ca8515fded7f283fe9fb3d0b5b1720aee453724d GIT binary patch literal 7200 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 Z-Rt4V$+^}De&q)-xnO?2^qf<~e*sy5_Xq$0 literal 0 HcmV?d00001 diff --git a/code/WorkInProgress/Uristqwerty/transit_tubes.dm b/code/WorkInProgress/Uristqwerty/transit_tubes.dm new file mode 100644 index 00000000000..96fffda15a5 --- /dev/null +++ b/code/WorkInProgress/Uristqwerty/transit_tubes.dm @@ -0,0 +1,405 @@ + +// Basic transit tubes. Straight pieces, curved sections, +// and basic splits/joins (no routing logic). +// Mappers: you can use "Generate Instances from Icon-states" +// to get the different pieces. +/obj/structure/transit_tube + icon = 'transit_tube.dmi' + icon_state = "E-W" + density = 1 + layer = 3.1 + anchored = 1.0 + var/list/tube_dirs = null + var/exit_delay = 2 + var/enter_delay = 1 + + +// A place where tube pods stop, and people can get in or out. +// Mappers: use "Generate Instances from Directions" for this +// one. +/obj/structure/transit_tube/station + icon = 'transit_tube_station.dmi' + icon_state = "closed" + exit_delay = 2 + enter_delay = 3 + var/pod_moving = 0 + var/automatic_launch_time = 100 + + var/const/OPEN_DURATION = 6 + var/const/CLOSE_DURATION = 6 + + + +/obj/structure/transit_tube_pod + icon = 'transit_tube_pod.dmi' + icon_state = "pod" + animate_movement = FORWARD_STEPS + var/moving = 0 + var/datum/gas_mixture/air_contents + + + +/obj/structure/transit_tube/station/New(loc) + ..(loc) + + spawn(automatic_launch_time) + launch_pod() + + +/obj/structure/transit_tube/station/Bumped(mob/AM as mob|obj) + if(!pod_moving && icon_state == "open" && istype(AM, /mob)) + for(var/obj/structure/transit_tube_pod/pod in loc) + if(!pod.moving && pod.dir in directions()) + AM.loc = pod + return + + + +/obj/structure/transit_tube/station/attack_hand(mob/user as mob) + if(!pod_moving) + for(var/obj/structure/transit_tube_pod/pod in loc) + if(!pod.moving && pod.dir in directions()) + if(icon_state == "closed") + open_animation() + + else if(icon_state == "open") + close_animation() + + + +/obj/structure/transit_tube/station/proc/open_animation() + if(icon_state == "closed") + icon_state = "opening" + spawn(OPEN_DURATION) + if(icon_state == "opening") + icon_state = "open" + + + +/obj/structure/transit_tube/station/proc/close_animation() + if(icon_state == "open") + icon_state = "closing" + spawn(CLOSE_DURATION) + if(icon_state == "closing") + icon_state = "closed" + + + +/obj/structure/transit_tube/station/proc/launch_pod() + for(var/obj/structure/transit_tube_pod/pod in loc) + if(!pod.moving && pod.dir in directions()) + spawn(5) + pod_moving = 1 + close_animation() + sleep(CLOSE_DURATION + 2) + if(icon_state == "closed" && pod) + pod.follow_tube() + + pod_moving = 0 + + return + + + +/obj/structure/transit_tube/proc/should_stop_pod(pod, from_dir) + return 0 + + + +/obj/structure/transit_tube/station/should_stop_pod(pod, from_dir) + return 1 + + + +/obj/structure/transit_tube/proc/pod_stopped(pod, from_dir) + return 0 + + + +/obj/structure/transit_tube/station/pod_stopped(obj/structure/transit_tube_pod/pod, from_dir) + pod_moving = 1 + spawn(5) + open_animation() + sleep(OPEN_DURATION + 2) + pod_moving = 0 + pod.mix_air() + + if(automatic_launch_time) + var/const/wait_step = 5 + var/i = 0 + while(i < automatic_launch_time) + sleep(wait_step) + i += wait_step + + if(pod_moving || icon_state != "open") + return + + launch_pod() + + + +// Returns a /list of directions this tube section can +// connect to. +/obj/structure/transit_tube/proc/directions() + return tube_dirs + + + +/obj/structure/transit_tube/proc/has_entrance(from_dir) + from_dir = turn(from_dir, 180) + + for(var/direction in directions()) + if(direction == from_dir) + return 1 + + return 0 + + + +/obj/structure/transit_tube/proc/has_exit(in_dir) + for(var/direction in directions()) + if(direction == in_dir) + return 1 + + return 0 + + + +// Searches for an exit direction within 45 degrees of the +// specified dir. Returns that direction, or 0 if none match. +/obj/structure/transit_tube/proc/get_exit(in_dir) + var/near_dir = 0 + var/in_dir_cw = turn(in_dir, -45) + var/in_dir_ccw = turn(in_dir, 45) + + for(var/direction in directions()) + if(direction == in_dir) + return direction + + else if(direction == in_dir_cw) + near_dir = direction + + else if(direction == in_dir_ccw) + near_dir = direction + + return near_dir + + + +/obj/structure/transit_tube/proc/exit_delay(pod, to_dir) + return exit_delay + +/obj/structure/transit_tube/proc/enter_delay(pod, to_dir) + return enter_delay + + + +/obj/structure/transit_tube_pod/proc/follow_tube() + if(moving) + return + + moving = 1 + + spawn() + var/obj/structure/transit_tube/current_tube = null + var/next_dir + var/next_loc + + for(var/obj/structure/transit_tube/tube in loc) + if(tube.has_exit(dir)) + current_tube = tube + break + + while(current_tube) + next_dir = current_tube.get_exit(dir) + + if(!next_dir) + break + + sleep(current_tube.exit_delay(src, dir)) + next_loc = get_step(loc, next_dir) + + current_tube = null + for(var/obj/structure/transit_tube/tube in next_loc) + if(tube.has_entrance(next_dir)) + current_tube = tube + break + + if(current_tube == null) + dir = next_dir + step(src, dir) + break + + sleep(current_tube.enter_delay(src, next_dir)) + dir = next_dir + loc = next_loc + + if(current_tube && current_tube.should_stop_pod(src, next_dir)) + current_tube.pod_stopped(src, dir) + break + + moving = 0 + + + +// HUGE HACK: Because the pod isn't a mecha, travelling through tubes over space +// won't protect people from space. +// This avoids editing an additional file, so that adding +// tubes to a SS13 codebase is a simple as dropping this code file and the +// required icon files somewhere where BYOND can find them. +/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment) + if(!istype(loc, /obj/structure/transit_tube_pod)) + return ..(environment) + + + +/obj/structure/transit_tube_pod/return_air() + var/datum/gas_mixture/GM = new() + GM.oxygen = MOLES_O2STANDARD * 2 + GM.nitrogen = MOLES_N2STANDARD + GM.temperature = T20C + return GM + +// For now, copying what I found in an unused FEA file (and almost identical in a +// used ZAS file). Means that assume_air and remove_air don't actually alter the +// air contents. +/obj/structure/transit_tube_pod/assume_air(datum/gas_mixture/giver) + return 0 + +/obj/structure/transit_tube_pod/remove_air(amount) + var/oxygen = MOLES_O2STANDARD + var/carbon_dioxide = 0 + var/nitrogen = MOLES_N2STANDARD + var/toxins = 0 + + var/datum/gas_mixture/GM = new() + + var/sum = oxygen + carbon_dioxide + nitrogen + toxins + if(sum>0) + GM.oxygen = (oxygen/sum)*amount + GM.carbon_dioxide = (carbon_dioxide/sum)*amount + GM.nitrogen = (nitrogen/sum)*amount + GM.toxins = (toxins/sum)*amount + + GM.temperature = T20C + GM.update_values() //Needed in ZAS to prevent suffocation. Not present in FEA. Comment/uncomment as nessecary. + + return GM + + + +// Called when a pod arrives at, and before a pod departs from a station, +// giving it a chance to mix its internal air supply with the turf it is +// currently on. +/obj/structure/transit_tube_pod/proc/mix_air() + //Needs to be implemented at some point + + + +// When the player moves, check if the pos is currently stopped at a station. +// if it is, check the direction. If the direction matches the direction of +// the station, try to exit. If the direction matches one of the station's +// tube directions, launch the pod in that direction. +/obj/structure/transit_tube_pod/relaymove(mob/mob, direction) + if(!moving && istype(mob, /mob) && mob.client) + for(var/obj/structure/transit_tube/station/station in loc) + if(!station.pod_moving && (dir in station.directions())) + if(direction == station.dir) + if(station.icon_state == "open") + mob.loc = loc + mob.client.Move(get_step(loc, direction), direction) + + else + station.open_animation() + + else if(direction in station.directions()) + dir = direction + station.launch_pod() + + + +/obj/structure/transit_tube/New(loc) + ..(loc) + + if(tube_dirs == null) + init_dirs() + + + +// Parse the icon_state into a list of directions. +// This means that mappers can use Dream Maker's built in +// "Generate Instances from Icon-states" option to get all +// variations. Additionally, as a separate proc, sub-types +// can handle it more intelligently. +/obj/structure/transit_tube/proc/init_dirs() + tube_dirs = parse_dirs(icon_state) + + if(copytext(icon_state, 1, 3) == "D-") + density = 0 + + + +// Tube station directions are simply 90 to either side of +// the exit. +/obj/structure/transit_tube/station/init_dirs() + tube_dirs = list(turn(dir, 90), turn(dir, -90)) + + + +// Uses a list() to cache return values. Since they should +// never be edited directly, all tubes with a certain +// icon_state can just reference the same list. In theory, +// reduces memory usage, and improves CPU cache usage. +// In reality, I don't know if that is quite how BYOND works, +// but it is probably safer to assume the existence of, and +// rely on, a sufficiently smart compiler/optimizer. +/obj/structure/transit_tube/proc/parse_dirs(text) + var/global/list/direction_table = list() + + if(text in direction_table) + return direction_table[text] + + var/list/split_text = stringsplit(text, "-") + + // If the first token is D, the icon_state represents + // a purely decorative tube, and doesn't actually + // connect to anything. + if(split_text[1] == "D") + direction_table[text] = list() + return null + + var/list/directions = list() + + for(var/text_part in split_text) + var/direction = text2dir_extended(text_part) + + if(direction > 0) + directions += direction + + direction_table[text] = directions + return directions + + + +// A copy of text2dir, extended to accept one and two letter +// directions, and to clearly return 0 otherwise. +/obj/structure/transit_tube/proc/text2dir_extended(direction) + switch(uppertext(direction)) + if("NORTH", "N") + return 1 + if("SOUTH", "S") + return 2 + if("EAST", "E") + return 4 + if("WEST", "W") + return 8 + if("NORTHEAST", "NE") + return 5 + if("NORTHWEST", "NW") + return 9 + if("SOUTHEAST", "SE") + return 6 + if("SOUTHWEST", "SW") + return 10 + else + return 0 \ No newline at end of file