mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +00:00
* fix map * Fixing bad syntax * Maybe this will work * Travis wanted me to remove this * Unticking attempt * Unticking attempt 2 * Removing all useless broken zshadow stuff * Maybe now? * Oh weird * Adding up/down pipe sprites * Adding darkness overlay, attempt #1 * Second attempt, now works * Turf tweaks, now much less visually glitchy, plus walls now make blank floors above them for less weirdness * Fix, plus keeps this floor in place * Really bad fix that stops space looking weird * Now everything should work normally, except lighting overlays * Updates the map * Consistency * Adds new fall damage sound * Typo * Jetpack fun * Better * Less bad brackets and parantheses pain * OHhh * These fly too, brooms next whenever I figure those out * Finishing pipe icons * Making it easier to build catwalks and stuff on turfs without clicking the stuff below by mistake * Bringing back zshadow, but with no icon * Oh it's this issue again * Final fix, better attempt at image relay * Now for it looking nice, vis_contents are bad here too * Attempt at refactoring this, light overlays are now finally underneath players, at the cost of blocking everything else, but exxion wanted to testmerge it * Map change * Changing it back, test server stays on box anyways * Removing non-working solution * Removes broken lighting overlays * Finally fixes up floor generation above walls * Adding bones of a 3d implementation of spiral block for git push origin multizfungit push origin multiz * More, almost done * Finalised * Cube option * Logic fix * Syntax * Attempting to make item fall on arc * Compile * Now this is no longer needed * BRACE FOR ENABLING MULTI-Z ZAS * Attempt at fixing glass floor tiles * Splitting off explosion proc into destroy part, bones of calling it recursively and smaller on above and below layers, implementation of multi-z explosion suggested by DeityLink * Missing var * Removing unused var and fixes consistency * Fixing logic and syntax etc, still needs testing before uncomment * Uncommenting, some fixes too * Makes this a seperate function otherwise it won't call at all, MULTI Z EXPLOSIONS NOW CONFIRMED WORKING * Client proc to test this * Adds to list * Typo not drawing red on main layer * Here too * Adding debug logs for clarity * Better * Even better * Experimental multi-Z EMP support, cylindrical effect for now * Better distance falloff * Sound/visual support on other layers? * Z cap for EMP sound * Booms too * Adds back accidentally deleted file * Muuuch more sane check * Attempt at connecting heard speech between multi Z * Cleaner * Missing bracket * Removing zshadow mobs entirely again, no need for them whatsoever * Multi-z visible messages * Emotes * Fix? * Wew * K * Much nicer function * I forget about this define * Ohhhh * Comma fix * Aaa * This might fix * Removing visible message one for now * Trying this solution * Typo * RIP location, hope this won't break anything * Actually location gets to come back, fix is here * I give up, the tests are clearly what's borken * Let's see what this does with those nullspaces test items (yes really) * Indent fix, plus nice comments * MULTI-Z SOUND??? * Woops * Jetpack and etc trails over open space now! * No macros, this is why we can't have nice things * Watch how coder stops potion of levitation, broom and fairy wing wielders from falling with ONE NEAT TRICK * Gotta make leapers not fall somehow * Bad oversight * Fully allows going down stairs with weird border objects * Flying now works properly for humans on open space * Now, fall instantly on stop * Oversight * Oh this function * New helper functions * Oversight again * Replacing lines with abs(), multi z singulo pull attempt * Quick supermatter fix * Don't cut overlays * Move down here * Typo * Now actually works, implementation could be better though * Additional helper function for z distances because BYOND hates comparing z * Reimplementing for sound * abs() to keep positive for max comparisons in line distances * Keeping gas overlays outside of multi-z viewing to stop some glitches * That didn't work * Testing removal from float planes for stuff that never needed to be on it * Fixes gas overlays showing up all wrong in multi Z ZAS * Gutting this controller, no longer needed period, system works fine without it * Now glass floors look mostly perfect on open spaces * Var name change for fun stuff later * Knew I'd miss one * Gravity based fall delay? * Settle with using sleep() for now, what could go wrong? * Lagged the game horribly, so everything * Here all along, huh * Just remove it for now, it kinda works but not ideally at all * Thank you TK code for giving me a nice and working way to do this * Comments, oversights * No wait it was right the first time * Now for the damage multiplier * Knockdown too * Nicer format * This should still be min, plus now have a debug log and shifted around logic * Now for mech stuff * Clamping knockdown * Definition fix * Dusting this off, hopeful fix to things not falling * Probably don't need this, I forget * Hahaha nope, this did nothing * Finally, a way to make fall() call in mid air after a delay without horrible lag * Tunes pipe layering if on same zlevel, getting there * Now fully tuned * Adding bones for pipe item support * Test * z_up pipe item icon state * z_up and z_down pipe item icon state * Adding these to pipe dispensers * Typo * RCDs too * Moved here * Moved back * Makes space work nicer * Oh and here * Fall updates * Don't need this * Oversights everywhere * Fixes * More * More, and new stuff * Even more * Dampening these a bit * So many, so moved to new file * Forgot this * Refactor * Forgot to actually use * Indentation issues * Works better like this * Refactors into nicer proc * One oversight * Stair frames, to construct into stairs * Stack recipe for em * Cutting useless stuff * Fixes * Last fixes * Stops uncrossing at non existant aboves * Better logic * Better logic * Fix * Fixes nullspace checking runtime * Removes redundant check on stairs * Replaces CanPass with Cross, functionality is same and definition is duplicate of it * Missed one * Darkening and falling tweaks * Better call for gravity * Oversight * Stops falling in space, zero-g open space movement fixes etc * Consistency * Fixes slipping on open spaces with catwalks (lattices make sense I guess) and stairs not being snapped down to * Var name fix * Much nicer system with no recursive function or last_fall variable use * Adds buildFrom()s so z-pipes can actually be fitted, stops spam of fall() calls on enter with lock for nicer gravity * Makes z distances pay attention to multi z support * Maybe this is better * Left this in * Adding visible and hidden variants for mapping * Counts glass floors as open space for the purpose of open space checks * Bracket fix * Makes it a macro for easy viewing * Space looks much better like this honestly * Makes schematics actually show up on RPD in multi-z * Making these tied to WORLD_ICON_SIZE * Changes for someone to test * Now the fix actually works * Removes forceMove(), nicer solution * Giving stairs all their dirs * Fixing stair position problem and other things * Stair deconstruction * Removing redundant enter() check to move() * Some updates as requested * .dme and map/file fixes * .dme and map/file fixes * Updating can_falls * Ladder climb fix * Some port notes updates * Docs itself * Removing unused edge_type var * Removing landmark object, converts it code side * Removing unsimmed walls doing it, not necessary * Updated descs * Fixing observer non-standards in file * More file cleanup * Jetpacks allow z-travelling * Now they really do * Robots too * Updating docs * Code cleanup * Catch one * Indent fix * Not sure what that even is * Catching these * Applying some old fixes * Removing unused file * Moving nodes back to original places, or an attempt to * Here too * Removing unused file * Moving these back too * Some fixes for now * Some more * Even more, almost done * Better pipe icons * More icons * Disposal pipe construction * Mixup * List optimisation, new fixes Co-authored-by: Damian <damian@autistici.org> Co-authored-by: kanef <kanef9x@protonmail.com>
129 lines
5.5 KiB
Plaintext
129 lines
5.5 KiB
Plaintext
// ## THE FALLING PROCS ###
|
|
|
|
// Called on everything that falling_atom might hit. Return 1 if you're handling it so handle_fall() will stop checking.
|
|
// If you're soft and break the fall gently, just return 1
|
|
// If the falling atom will hit you hard, call fall_impact() and return its result.
|
|
/atom/proc/CheckFall(var/atom/movable/falling_atom)
|
|
if(density && !(flags & ON_BORDER))
|
|
return falling_atom.fall_impact(src)
|
|
|
|
// By default all turfs are gonna let you hit them regardless of density.
|
|
/turf/CheckFall(var/atom/movable/falling_atom)
|
|
return falling_atom.fall_impact(src)
|
|
|
|
// Obviously you can't really hit open space.
|
|
/turf/simulated/open/CheckFall(var/atom/movable/falling_atom)
|
|
// Don't need to print this, the open space it falls into will print it for us!
|
|
// visible_message("\The [falling_atom] falls from above through \the [src]!", "You hear a whoosh of displaced air.")
|
|
return 0
|
|
|
|
// We return 1 without calling fall_impact in order to provide a soft landing. So nice.
|
|
// Note this really should never even get this far
|
|
/obj/structure/stairs/CheckFall(var/atom/movable/falling_atom)
|
|
return 1
|
|
|
|
// Called by CheckFall when we actually hit something. Oof
|
|
/atom/movable/proc/fall_impact(var/atom/hit_atom)
|
|
if(get_gravity() > 0.5)
|
|
visible_message("\The [src] falls from above and slams into \the [hit_atom]!", "You hear something slam into \the [hit_atom].")
|
|
else
|
|
visible_message("\The [src] drops from above onto \the [hit_atom]!", "You hear something drop onto \the [hit_atom].")
|
|
for(var/atom/movable/AM in hit_atom.contents)
|
|
AM.fall_act(src)
|
|
zs_fallen = 0
|
|
|
|
// Take damage from falling and hitting the ground
|
|
/mob/living/fall_impact(var/turf/landing)
|
|
var/gravity = get_gravity()
|
|
if(gravity > 0.5)
|
|
visible_message("<span class='warning'>\The [src] falls from above and slams into \the [landing]!</span>", \
|
|
"<span class='danger'>You fall off and hit \the [landing]!</span>", \
|
|
"You hear something slam into \the [landing].")
|
|
if(gravity > 0.667)
|
|
for(var/atom/movable/AM in landing.contents)
|
|
AM.fall_act(src)
|
|
playsound(loc, "sound/effects/pl_fallpain.ogg", 25, 1, -1)
|
|
// Bases at ten and scales with the number of Z levels fallen
|
|
// Because wounds heal rather quickly, 10 should be enough to discourage jumping off 1 ledge but not be enough to ruin you, at least for the first time.
|
|
var/damage = ((10 * min(zs_fallen,5)) * gravity)
|
|
apply_damage(rand(0, damage), BRUTE, LIMB_HEAD)
|
|
apply_damage(rand(0, damage), BRUTE, LIMB_CHEST)
|
|
apply_damage(rand(0, damage), BRUTE, LIMB_LEFT_LEG)
|
|
apply_damage(rand(0, damage), BRUTE, LIMB_RIGHT_LEG)
|
|
apply_damage(rand(0, damage), BRUTE, LIMB_LEFT_ARM)
|
|
apply_damage(rand(0, damage), BRUTE, LIMB_RIGHT_ARM)
|
|
log_debug("[src] has taken [src.getBruteLoss()] damage after falling [zs_fallen] z levels with a gravity of [gravity] Gs!")
|
|
AdjustKnockdown((3 * min(zs_fallen,10)) * gravity)
|
|
else
|
|
visible_message("\The [src] drops from above and onto \the [landing].", \
|
|
"You fall off and land on the \the [landing].", \
|
|
"You hear something drop onto \the [landing].")
|
|
zs_fallen = 0
|
|
|
|
/obj/mecha/handle_fall(var/turf/landing)
|
|
// First things first, break any lattice
|
|
var/obj/structure/lattice/lattice = locate(/obj/structure/lattice, loc)
|
|
if(lattice)
|
|
// Lattices seem a bit too flimsy to hold up a massive exosuit.
|
|
lattice.visible_message("<span class='danger'>\The [lattice] collapses under the weight of \the [src]!</span>")
|
|
qdel(lattice)
|
|
|
|
// Then call parent to have us actually fall
|
|
return ..()
|
|
|
|
/obj/mecha/fall_impact(var/atom/hit_atom)
|
|
var/gravity = get_gravity()
|
|
if(gravity > 0.25)
|
|
// Tell the pilot that they just dropped down with a superheavy mecha.
|
|
if(occupant)
|
|
to_chat(occupant, "<span class='warning'>\The [src] crashed down onto \the [hit_atom]!</span>")
|
|
|
|
if(gravity > 0.5)
|
|
var/damage = ((10 * min(zs_fallen,5)) * gravity)
|
|
// Anything on the same tile as the landing tile is gonna have a bad day.
|
|
for(var/mob/living/L in hit_atom.contents)
|
|
visible_message("<span class='danger'>\The [src] crushes \the [L] as it lands on them!</span>")
|
|
L.fall_act(src)
|
|
|
|
// Now to hurt the mech.
|
|
take_damage(rand(damage, 3*damage))
|
|
|
|
// And hurt the floor.
|
|
if(istype(hit_atom, /turf/simulated/floor))
|
|
var/turf/simulated/floor/ground = hit_atom
|
|
ground.break_tile()
|
|
else
|
|
// Tell the pilot that they just plopped lightly onto the low-gravity ground with a superheavy mecha.
|
|
if(occupant)
|
|
to_chat(occupant, "<span class='warning'>\The [src] softly drops down onto \the [hit_atom]!</span>")
|
|
zs_fallen = 0
|
|
|
|
/obj/machinery/power/supermatter/fall_impact(var/atom/hit_atom)
|
|
..()
|
|
Consume(hit_atom)
|
|
|
|
var/global/list/non_items = list(/obj/machinery,/obj/structure)
|
|
|
|
// Opposite of fall_impact, called when something is dropped on someone
|
|
/atom/movable/proc/fall_act(var/atom/hitting_atom)
|
|
return
|
|
|
|
/mob/living/fall_act(var/atom/hitting_atom)
|
|
var/gravity = get_gravity()
|
|
if(ismecha(hitting_atom))
|
|
var/damage = ((10 * min(hitting_atom.zs_fallen,5)) * gravity)
|
|
adjustBruteLoss(rand(3*damage, 5*damage))
|
|
AdjustKnockdown(damage / 2)
|
|
else if(isitem(hitting_atom))
|
|
var/obj/item/I = hitting_atom
|
|
var/damage = (((I.throwforce * min(hitting_atom.zs_fallen,5)) * gravity) * I.w_class)
|
|
adjustBruteLoss(rand(damage, 2*damage))
|
|
AdjustKnockdown(((2 * min(hitting_atom.zs_fallen,5)) * gravity) * I.w_class)
|
|
if(I.w_class == W_CLASS_GIANT)
|
|
gib()
|
|
else if(is_type_in_list(hitting_atom,non_items))
|
|
var/damage = ((3 * min(hitting_atom.zs_fallen,5)) * gravity)
|
|
if(hitting_atom.density)
|
|
damage *= 3
|
|
adjustBruteLoss(rand(damage, 2*damage))
|
|
AdjustKnockdown(damage / 2) |