mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-21 04:57:57 +01:00
lying to lying_angle and set proc (#50018)
* lying angle * duplicate * Documentation * Comments
This commit is contained in:
+2
-2
@@ -650,8 +650,8 @@
|
||||
else
|
||||
return FALSE
|
||||
|
||||
///Called when gravity returns after floating I think
|
||||
/atom/proc/handle_fall()
|
||||
///Used for making a sound when a mob involuntarily falls into the ground.
|
||||
/atom/proc/handle_fall(mob/faller)
|
||||
return
|
||||
|
||||
///Respond to the singularity eating this atom
|
||||
|
||||
@@ -486,9 +486,7 @@
|
||||
/turf/proc/acid_melt()
|
||||
return
|
||||
|
||||
/turf/handle_fall(mob/faller, forced)
|
||||
if(!forced)
|
||||
return
|
||||
/turf/handle_fall(mob/faller)
|
||||
if(has_gravity(src))
|
||||
playsound(src, "bodyfall", 50, TRUE)
|
||||
faller.drop_all_held_items()
|
||||
|
||||
@@ -52,9 +52,7 @@
|
||||
update_transform()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/update_transform() //The old method of updating lying/standing was update_icons(). Aliens still expect that.
|
||||
if(lying)
|
||||
lying = 90 //Anything else looks retarded
|
||||
..()
|
||||
. = ..()
|
||||
update_icons()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/update_inv_handcuffed()
|
||||
|
||||
@@ -217,8 +217,9 @@
|
||||
"<span class='userdanger'>[usr] [internal ? "opens" : "closes"] the valve on your [ITEM.name].</span>", null, null, usr)
|
||||
to_chat(usr, "<span class='notice'>You [internal ? "open" : "close"] the valve on [src]'s [ITEM.name].</span>")
|
||||
|
||||
/mob/living/carbon/fall(forced)
|
||||
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
|
||||
/mob/living/carbon/on_fall()
|
||||
. = ..()
|
||||
loc.handle_fall(src)//it's loc so it doesn't call the mob's handle_fall which does nothing
|
||||
|
||||
/mob/living/carbon/is_muzzled()
|
||||
return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
|
||||
|
||||
@@ -4,15 +4,15 @@
|
||||
var/final_pixel_y = pixel_y
|
||||
var/final_dir = dir
|
||||
var/changed = 0
|
||||
if(lying != lying_prev && rotate_on_lying)
|
||||
if(lying_angle != lying_prev && rotate_on_lying)
|
||||
changed++
|
||||
ntransform.TurnTo(lying_prev , lying)
|
||||
if(!lying) //Lying to standing
|
||||
ntransform.TurnTo(lying_prev , lying_angle)
|
||||
if(!lying_angle) //Lying to standing
|
||||
final_pixel_y = get_standard_pixel_y_offset()
|
||||
else //if(lying != 0)
|
||||
if(lying_prev == 0) //Standing to lying
|
||||
pixel_y = get_standard_pixel_y_offset()
|
||||
final_pixel_y = get_standard_pixel_y_offset(lying)
|
||||
final_pixel_y = get_standard_pixel_y_offset(lying_angle)
|
||||
if(dir & (EAST|WEST)) //Facing east or west
|
||||
final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass
|
||||
if(resize != RESIZE_DEFAULT_SIZE)
|
||||
@@ -21,7 +21,7 @@
|
||||
resize = RESIZE_DEFAULT_SIZE
|
||||
|
||||
if(changed)
|
||||
animate(src, transform = ntransform, time = (lying_prev == 0 || !lying) ? 2 : 0, pixel_y = final_pixel_y, dir = final_dir, easing = (EASE_IN|EASE_OUT))
|
||||
animate(src, transform = ntransform, time = (lying_prev == 0 || lying_angle == 0) ? 2 : 0, pixel_y = final_pixel_y, dir = final_dir, easing = (EASE_IN|EASE_OUT))
|
||||
setMovetype(movement_type & ~FLOATING) // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life().
|
||||
|
||||
/mob/living/carbon
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/mob/living/gib(no_brain, no_organs, no_bodyparts)
|
||||
var/prev_lying = lying
|
||||
var/prev_lying = lying_angle
|
||||
if(stat != DEAD)
|
||||
death(TRUE)
|
||||
|
||||
|
||||
@@ -335,16 +335,12 @@
|
||||
if(SOUTH)
|
||||
animate(M, pixel_x = 0, pixel_y = -offset, 3)
|
||||
if(EAST)
|
||||
if(M.lying == 270) //update the dragged dude's direction if we've turned
|
||||
M.lying = 90
|
||||
M.update_transform() //force a transformation update, otherwise it'll take a few ticks for update_mobility() to do so
|
||||
M.lying_prev = M.lying
|
||||
if(M.lying_angle == 270) //update the dragged dude's direction if we've turned
|
||||
M.set_lying_angle(90)
|
||||
animate(M, pixel_x = offset, pixel_y = 0, 3)
|
||||
if(WEST)
|
||||
if(M.lying == 90)
|
||||
M.lying = 270
|
||||
M.update_transform()
|
||||
M.lying_prev = M.lying
|
||||
if(M.lying_angle == 90)
|
||||
M.set_lying_angle(270)
|
||||
animate(M, pixel_x = -offset, pixel_y = 0, 3)
|
||||
|
||||
/mob/living/proc/reset_pull_offsets(mob/living/M, override)
|
||||
@@ -629,13 +625,8 @@
|
||||
return
|
||||
|
||||
/mob/living/Move(atom/newloc, direct)
|
||||
if(lying)
|
||||
if(direct & EAST)
|
||||
lying = 90
|
||||
if(direct & WEST)
|
||||
lying = 270
|
||||
update_transform()
|
||||
lying_prev = lying
|
||||
if(lying_angle != 0)
|
||||
lying_angle_on_movement(direct)
|
||||
if (buckled && buckled.loc != newloc) //not updating position
|
||||
if (!buckled.anchored)
|
||||
return buckled.Move(newloc, direct)
|
||||
@@ -663,6 +654,16 @@
|
||||
if(!(mobility_flags & MOBILITY_STAND) && !buckled && prob(getBruteLoss()*200/maxHealth))
|
||||
makeTrail(newloc, T, old_direction)
|
||||
|
||||
///Called by mob Move() when the lying_angle is different than zero, to better visually simulate crawling.
|
||||
/mob/living/proc/lying_angle_on_movement(direct)
|
||||
if(direct & EAST)
|
||||
set_lying_angle(90)
|
||||
else if(direct & WEST)
|
||||
set_lying_angle(270)
|
||||
|
||||
/mob/living/carbon/alien/humanoid/lying_angle_on_movement(direct)
|
||||
return
|
||||
|
||||
/mob/living/proc/makeTrail(turf/target_turf, turf/start, direction)
|
||||
if(!has_gravity())
|
||||
return
|
||||
@@ -838,7 +839,7 @@
|
||||
animate(src, pixel_y = pixel_y - 2, time = 10, loop = -1)
|
||||
setMovetype(movement_type | FLOATING)
|
||||
else if(((!on || fixed) && (movement_type & FLOATING)))
|
||||
animate(src, pixel_y = get_standard_pixel_y_offset(lying), time = 10)
|
||||
animate(src, pixel_y = get_standard_pixel_y_offset(lying_angle), time = 10)
|
||||
setMovetype(movement_type & ~FLOATING)
|
||||
|
||||
// The src mob is trying to strip an item from someone
|
||||
@@ -1179,23 +1180,23 @@
|
||||
var/canstand_involuntary = conscious && !stat_softcrit && !knockdown && !chokehold && !paralyzed && (ignore_legs || has_legs) && !(buckled && buckled.buckle_lying)
|
||||
var/canstand = canstand_involuntary && !resting
|
||||
|
||||
var/should_be_lying = !canstand
|
||||
if(buckled)
|
||||
if(buckled.buckle_lying != -1)
|
||||
should_be_lying = buckled.buckle_lying
|
||||
|
||||
if(should_be_lying)
|
||||
if(buckled && buckled.buckle_lying != -1)
|
||||
if(buckled.buckle_lying != 0)
|
||||
mobility_flags &= ~MOBILITY_STAND
|
||||
else
|
||||
mobility_flags |= MOBILITY_STAND
|
||||
set_lying_angle(buckled.buckle_lying)
|
||||
else if(!canstand)
|
||||
mobility_flags &= ~MOBILITY_STAND
|
||||
if(buckled)
|
||||
if(buckled.buckle_lying != -1)
|
||||
lying = buckled.buckle_lying
|
||||
if(!lying) //force them on the ground
|
||||
lying = pick(90, 270)
|
||||
if(lying_angle == 0) //force them on the ground
|
||||
set_lying_angle(pick(90, 270))
|
||||
if(!canstand_involuntary)
|
||||
on_fall()
|
||||
else
|
||||
mobility_flags |= MOBILITY_STAND
|
||||
lying = 0
|
||||
set_lying_angle(0)
|
||||
|
||||
if(should_be_lying || restrained || incapacitated())
|
||||
if(lying_angle != 0 || restrained || incapacitated())
|
||||
mobility_flags &= ~(MOBILITY_UI|MOBILITY_PULL)
|
||||
else
|
||||
mobility_flags |= MOBILITY_UI|MOBILITY_PULL
|
||||
@@ -1214,17 +1215,6 @@
|
||||
stop_pulling()
|
||||
if(!(mobility_flags & MOBILITY_UI))
|
||||
unset_machine()
|
||||
density = !lying
|
||||
if(lying)
|
||||
if(!lying_prev)
|
||||
fall(!canstand_involuntary)
|
||||
if(layer == initial(layer)) //to avoid special cases like hiding larvas.
|
||||
layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs
|
||||
else
|
||||
if(layer == LYING_MOB_LAYER)
|
||||
layer = initial(layer)
|
||||
update_transform()
|
||||
lying_prev = lying
|
||||
|
||||
// Movespeed mods based on arms/legs quantity
|
||||
if(!get_leg_ignore())
|
||||
@@ -1239,9 +1229,9 @@
|
||||
else
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/limbless)
|
||||
|
||||
/mob/living/proc/fall(forced)
|
||||
if(!(mobility_flags & MOBILITY_USE))
|
||||
drop_all_held_items()
|
||||
///Called when mob changes from a standing position into a prone while lacking the ability to stand up at the moment, through update_mobility()
|
||||
/mob/living/proc/on_fall()
|
||||
return
|
||||
|
||||
/mob/living/proc/AddAbility(obj/effect/proc_holder/A)
|
||||
abilities.Add(A)
|
||||
@@ -1429,6 +1419,34 @@
|
||||
log_mapping(ERROR_ERROR_LANDMARK_ERROR)
|
||||
CRASH(ERROR_ERROR_LANDMARK_ERROR)
|
||||
|
||||
/**
|
||||
* Changes the inclination angle of a mob, used by humans and others to differentiate between standing up and prone positions.
|
||||
*
|
||||
* In BYOND-angles 0 is NORTH, 90 is EAST, 180 is SOUTH and 270 is WEST.
|
||||
* This usually means that 0 is standing up, 90 and 270 are horizontal positions to right and left respectively, and 180 is upside-down.
|
||||
* Mobs that do now follow these conventions due to unusual sprites should require a special handling or redefinition of this proc, due to the density and layer changes.
|
||||
* The return of this proc is the previous value of the modified lying_angle if a change was successful (might include zero), or null if no change was made.
|
||||
*/
|
||||
/mob/living/proc/set_lying_angle(new_lying)
|
||||
if(new_lying == lying_angle)
|
||||
return
|
||||
. = lying_angle
|
||||
lying_angle = new_lying
|
||||
if(lying_angle != lying_prev)
|
||||
update_transform()
|
||||
lying_prev = lying_angle
|
||||
if(lying_angle != 0) //We are not standing up.
|
||||
if(layer == initial(layer)) //to avoid things like hiding larvas.
|
||||
layer = LYING_MOB_LAYER //so mob lying always appear behind standing mobs
|
||||
if(. != 0) //We became prone and were not before. We lose density and stop bumping passable dense things.
|
||||
density = FALSE
|
||||
else //We are prone.
|
||||
if(layer == LYING_MOB_LAYER)
|
||||
layer = initial(layer)
|
||||
if(.) //We weren't pone before, so we become dense and things can bump into us again.
|
||||
density = initial(density)
|
||||
|
||||
|
||||
/**
|
||||
* add_body_temperature_change Adds modifications to the body temperature
|
||||
*
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
var/resting = FALSE
|
||||
|
||||
VAR_PROTECTED/lying = 0 ///number of degrees. DO NOT USE THIS IN CHECKS. CHECK FOR MOBILITY FLAGS INSTEAD!!
|
||||
VAR_PROTECTED/lying_angle = 0 ///number of degrees. DO NOT USE THIS IN CHECKS. CHECK FOR MOBILITY FLAGS INSTEAD!!
|
||||
var/lying_prev = 0 ///last value of lying on update_mobility
|
||||
|
||||
var/confused = 0 ///Makes the mob move in random directions.
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
step_y = AM.step_y
|
||||
if(iscarbon(A))
|
||||
var/mob/living/carbon/C = A
|
||||
UNLINT(turn_angle = C.lying) // this is the only place its okay to read lying directly
|
||||
UNLINT(turn_angle = C.lying_angle) // this is the only place its okay to read lying directly
|
||||
. = ..()
|
||||
|
||||
/obj/item/camera/proc/camera_get_icon(list/turfs, turf/center, psize_x = 96, psize_y = 96, datum/turf_reservation/clone_area, size_x, size_y, total_x, total_y)
|
||||
|
||||
Reference in New Issue
Block a user