/mob/verb/up() set name = "Move Upwards" set category = "IC" if(zMove(UP)) to_chat(src, "You move upwards.") /mob/verb/down() set name = "Move Down" set category = "IC" if(zMove(DOWN)) to_chat(src, "You move down.") /mob/proc/zMove(direction) //if(eyeobj) This probably belongs in AIMove // return eyeobj.zMove(direction) if(!can_ztravel()) to_chat(src, "You lack means of travel in that direction.") return var/turf/start = loc if(!istype(start)) to_chat(src, "You are unable to move from here.") return 0 var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) if(!destination) to_chat(src, "There is nothing of interest in this direction.") return 0 if(!start.CanZPass(src, direction)) to_chat(src, "\The [start] is in the way.") return 0 if(!destination.CanZPass(src, direction)) to_chat(src, "\The [destination] blocks your way.") return 0 var/area/area = get_area(src) if(direction == UP && area.gravity) var/obj/structure/lattice/lattice = locate() in destination.contents if(lattice && held_items.len && size != SIZE_TINY) // We need hands and to be big enough var/pull_up_time = max(5 SECONDS + (src.movement_delay() * 10), 1) to_chat(src, "You grab \the [lattice] and start pulling yourself upward...") destination.visible_message("You hear something climbing up \the [lattice].") if(do_after(src, pull_up_time)) to_chat(src, "You pull yourself up.") else to_chat(src, "You gave up on pulling yourself up.") return 0 else if(!flying) if(ishuman(src)) // Weird way to handle jetpack stuff var/mob/living/carbon/human/H = src if(istype(H.back, /obj/item/weapon/tank/jetpack)) // Finally, jetpacks allow it var/obj/item/weapon/tank/jetpack/J = H.back if(H.lying || (!J.allow_thrust(0.01, src))) to_chat(src, "Gravity stops you from moving upward.") return 0 else to_chat(src, "Gravity stops you from moving upward.") return 0 else if(isrobot(src)) // Weird way to handle jetpack stuff, robot edition var/mob/living/silicon/robot/R = src if(R.module) // Finally, jetpacks allow it for(var/obj/item/weapon/tank/jetpack/J in R.module.modules) if(!J || !istype(J, /obj/item/weapon/tank/jetpack) || !J.allow_thrust(0.01, src)) to_chat(src, "Gravity stops you from moving upward.") return 0 else to_chat(src, "Gravity stops you from moving upward.") return 0 else to_chat(src, "Gravity stops you from moving upward.") return 0 for(var/atom/A in destination) if(!A.Cross(src, start, 1.5, 0)) to_chat(src, "\The [A] blocks you.") return 0 if(!Move(destination)) return 0 return 1 /mob/dead/observer/zMove(direction) var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) if(destination) forceMove(destination) else to_chat(src, "There is nothing of interest in this direction.") /mob/camera/zMove(direction) var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src) if(destination) forceMove(destination) else to_chat(src, "There is nothing of interest in this direction.") /mob/proc/can_ztravel() return flying /mob/dead/observer/can_ztravel() return 1 /mob/living/carbon/human/can_ztravel() if(incapacitated()) return 0 if(Process_Spacemove()) return 1 if(flying) return 1 if(istype(back, /obj/item/weapon/tank/jetpack)) // Finally, jetpacks allow it var/obj/item/weapon/tank/jetpack/J = back if(!lying && (J.allow_thrust(0.01, src))) return 1 /* This would be really easy to implement but let's talk about if we WANT it. if(Check_Shoegrip()) //scaling hull with magboots for(var/turf/simulated/T in trange(1,src)) if(T.density) return 1 */ /mob/living/silicon/robot/can_ztravel() if(incapacitated()) return 0 if(Process_Spacemove()) //Checks for active jetpack return 1 if(flying) return 1 if(module) // Finally, jetpacks allow it for(var/obj/item/weapon/tank/jetpack/J in module.modules) if(J && istype(J, /obj/item/weapon/tank/jetpack)) if(J.allow_thrust(0.01, src)) return 1 /* Same as above, hull scaling discussion pending for(var/turf/simulated/T in trange(1,src)) //Robots get "magboots" if(T.density) return 1*/