diff --git a/baystation12.dme b/baystation12.dme index f58c6eba48c..f092d22a12b 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -140,6 +140,7 @@ #define FILE_DIR "code/unused/pda2" #define FILE_DIR "code/unused/spacecraft" #define FILE_DIR "code/WorkInProgress" +#define FILE_DIR "code/WorkInProgress/Cael_Aislinn" #define FILE_DIR "code/WorkInProgress/mapload" #define FILE_DIR "code/WorkInProgress/Mini" #define FILE_DIR "code/WorkInProgress/organs" @@ -999,6 +1000,7 @@ #include "code\WorkInProgress\buildmode.dm" #include "code\WorkInProgress\detective_work.dm" #include "code\WorkInProgress\explosion_particles.dm" +#include "code\WorkInProgress\Cael_Aislinn\MultiZ.dm" #include "code\WorkInProgress\mapload\dmm_suite.dm" #include "code\WorkInProgress\mapload\reader.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/MultiZ.dm b/code/WorkInProgress/Cael_Aislinn/MultiZ.dm new file mode 100644 index 00000000000..2e12e95b983 --- /dev/null +++ b/code/WorkInProgress/Cael_Aislinn/MultiZ.dm @@ -0,0 +1,189 @@ +/obj/multiz + icon = 'multiz.dmi' + density = 0 + opacity = 0 + anchored = 1 + var/istop = 1 + + CanPass(obj/mover, turf/source, height, airflow) + return airflow || !density + +/obj/multiz/proc/targetZ() + return src.z + (istop ? 1 : -1) + +/obj/multiz/ladder + icon_state = "ladderdown" + name = "ladder" + desc = "A Ladder. You climb up and down it." + +/obj/multiz/ladder/New() + ..() + if (!istop) + icon_state = "ladderup" + else + icon_state = "ladderdown" + +/obj/multiz/ladder/attack_paw(var/mob/M) + return attack_hand(M) + +/obj/multiz/ladder/attackby(var/W, var/mob/M) + return attack_hand(M) + +/obj/multiz/ladder/attack_hand(var/mob/M) + M.Move(locate(src.x, src.y, targetZ())) +/* +/obj/multiz/ladder/blob_act() + var/newblob = 1 + for(var/obj/blob in locate(src.x, src.y, targetZ())) + newblob = 0 + if(newblob) + new /obj/blob(locate(src.x, src.y, targetZ())) +*/ +//Stairs. var/dir on all four component objects should be the dir you'd walk from top to bottom +//active = bump to move down +//active/bottom = bump to move up +//enter = decorative downwards stairs +//enter/bottom = decorative upward stairs +/obj/multiz/stairs + name = "Stairs" + desc = "Stairs. You walk up and down them." + icon_state = "ramptop" + +/obj/multiz/stairs/New() + icon_state = istop ^ istype(src, /obj/multiz/stairs/active) ? "ramptop" : "rampbottom" + +/obj/multiz/stairs/enter/bottom + istop = 0 + +/obj/multiz/stairs/active + density = 1 + +/obj/multiz/stairs/active/Bumped(var/atom/movable/M) + if(istype(src, /obj/multiz/stairs/active/bottom) && !locate(/obj/multiz/stairs/enter) in M.loc) + return //If on bottom, only let them go up stairs if they've moved to the entry tile first. + //If it's the top, they can fall down just fine. + if(ismob(M) && M:client) + M:client.moving = 1 + M.Move(locate(src.x, src.y, targetZ())) + if (ismob(M) && M:client) + M:client.moving = 0 + +/obj/multiz/stairs/active/Click() + if(!istype(usr,/mob/dead/observer)) + return ..() + usr.client.moving = 1 + usr.Move(locate(src.x, src.y, targetZ())) + usr.client.moving = 0 +/obj/multiz/stairs/active/bottom + istop = 0 + opacity = 1 + +/turf/simulated/floor/open + name = "open space" + intact = 0 + icon_state = "open" + pathweight = 100000 //Seriously, don't try and path over this one numbnuts + var/icon/darkoverlays = null + var/turf/floorbelow + //floorstrength = 1 + mouse_opacity = 2 + + New() + ..() + spawn(1) + if(!istype(src, /turf/simulated/floor/open)) //This should not be needed but is. + return + floorbelow = locate(x, y, z + 1) + if(floorbelow) + //Fortunately, I've done this before. - Aryn + if(istype(floorbelow,/turf/space) || floorbelow.z > 4) + new/turf/space(src) + else if(!istype(floorbelow,/turf/simulated/floor)) + new/turf/simulated/floor/plating(src) + else + //if(ticker) + //find_zone() + update() + else + new/turf/space(src) + + Del() + . = ..() + + Enter(var/atom/movable/AM) + if (..()) //TODO make this check if gravity is active (future use) - Sukasa + spawn(1) + if(AM) + AM.Move(locate(x, y, z + 1)) + if (istype(AM, /mob)) + AM:bruteloss += 20 //You were totally doin it wrong. 5 damage? Really? - Aryn + AM:weakened = max(AM:weakened,5) + AM:updatehealth() + return ..() + + attackby() + //nothing + + proc/update() //Update the overlayss to make the openspace turf show what's down a level + if(!floorbelow) return + /*src.clearoverlays() + src.addoverlay(floorbelow) + for(var/obj/o in floorbelow.contents) + src.addoverlay(image(o, dir=o.dir, layer = TURF_LAYER+0.05*o.layer)) + var/image/I = image('ULIcons.dmi', "[min(max(floorbelow.LightLevelRed - 4, 0), 7)]-[min(max(floorbelow.LightLevelGreen - 4, 0), 7)]-[min(max(floorbelow.LightLevelBlue - 4, 0), 7)]") + I.layer = TURF_LAYER + 0.2 + src.addoverlay(I) + I = image('ULIcons.dmi', "1-1-1") + I.layer = TURF_LAYER + 0.2 + src.addoverlay(I)*/ + +var/maxZ = 1 +var/minZ = 1 + +// Maybe it's best to have this hardcoded for whatever we'd add to the map, in order to avoid exploits +// (such as mining base => admin station) +// Note that this assumes the ship's top is at z=1 and bottom at z=4 +/obj/item/weapon/tank/jetpack/proc/move_z(cardinal, mob/user as mob) + if (user.z > 1) + user << "\red There is nothing of interest in that direction." + return + if(allow_thrust(0.01, user)) + switch(cardinal) + if (UP) // Going up! + if(user.z > maxZ) // If we aren't at the very top of the ship + var/turf/T = locate(user.x, user.y, user.z - 1) + // You can only jetpack up if there's space above, and you're sitting on either hull (on the exterior), or space + //if(T && istype(T, /turf/space) && (istype(user.loc, /turf/space) || istype(user.loc, /turf/space/*/hull*/))) + //check through turf contents to make sure there's nothing blocking the way + if(T && istype(T, /turf/space)) + var/blocked = 0 + for(var/atom/A in T.contents) + if(T.density) + blocked = 1 + user << "\red You bump into [T.name]." + break + if(!blocked) + user.Move(T) + else + user << "\red You bump into the ship's plating." + else + user << "\red The ship's gravity well keeps you in orbit!" // Assuming the ship starts on z level 1, you don't want to go past it + + if (DOWN) // Going down! + if (user.z < 1) // If we aren't at the very bottom of the ship, or out in space + var/turf/T = locate(user.x, user.y, user.z + 1) + // You can only jetpack down if you're sitting on space and there's space down below, or hull + if(T && (istype(T, /turf/space) || istype(T, /turf/space/*/hull*/)) && istype(user.loc, /turf/space)) + var/blocked = 0 + for(var/atom/A in T.contents) + if(T.density) + blocked = 1 + user << "\red You bump into [T.name]." + break + if(!blocked) + user.Move(T) + else + user << "\red You bump into the ship's plating." + else + user << "\red The ship's gravity well keeps you in orbit!" + diff --git a/code/WorkInProgress/Cael_Aislinn/multiz.dmi b/code/WorkInProgress/Cael_Aislinn/multiz.dmi new file mode 100644 index 00000000000..8e7e6d03102 Binary files /dev/null and b/code/WorkInProgress/Cael_Aislinn/multiz.dmi differ diff --git a/code/WorkInProgress/Cael_Aislinn/multiz_pipe.dmi b/code/WorkInProgress/Cael_Aislinn/multiz_pipe.dmi new file mode 100644 index 00000000000..a3bbbee0b28 Binary files /dev/null and b/code/WorkInProgress/Cael_Aislinn/multiz_pipe.dmi differ