mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Pixel adjustments to mobs are now sourced / Refactors riding (#89320)
Fixes #85980 - Pixel adjustments are now sourced When tweaking a mob's pixel w, x, y, z, is is now done via `add_offsets` and must have a source string associated - Refactors riding Refactors how riding component selects the offsets to use. It's now all done via the getter rather than a weird mix of a var, a cache, and a getter. - Moves a bunch of animations to use `pixel_w` / `pixel_z` Largely to prevent conflicts with adjustments to a mob's pixel position, but also as many animations are not actual movements, but visual movements. Floating is one such example. It just works 🆑 Melbert fix: Fixed grab offsets not showing for anything but passive grab fix: Fix jank with mob offsets when riding things refactor: Refactored riding component, particularly how it selects layer and offsets. Report any oddities refactor: Refactored pixel offsets of mobs. Report any oddities /🆑
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
/// Offsets applied for people riding something
|
||||
#define RIDING_SOURCE "riding"
|
||||
/// Offsets applied for something being ridden
|
||||
#define BEING_RIDDEN_SOURCE "being_ridden"
|
||||
|
||||
/**
|
||||
* This is the riding component, which is applied to a movable atom by the [ridable element][/datum/element/ridable] when a mob is successfully buckled to said movable.
|
||||
*
|
||||
@@ -9,22 +14,14 @@
|
||||
/datum/component/riding
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE
|
||||
|
||||
///tick delay between movements, lower = faster, higher = slower
|
||||
/// Tick delay between movements, lower = faster, higher = slower
|
||||
var/vehicle_move_delay = 2
|
||||
|
||||
/**
|
||||
* If the driver needs a certain item in hand (or inserted, for vehicles) to drive this. For vehicles, this must be duplicated on the actual vehicle object in their
|
||||
* [/obj/vehicle/var/key_type] variable because the vehicle objects still have a few special checks/functions of their own I'm not porting over to the riding component
|
||||
* quite yet. Make sure if you define it on the vehicle, you define it here too.
|
||||
*/
|
||||
var/keytype
|
||||
|
||||
/// position_of_user = list(dir = list(px, py)), or RIDING_OFFSET_ALL for a generic one.
|
||||
var/list/riding_offsets = list()
|
||||
/// ["[DIRECTION]"] = layer. Don't set it for a direction for default, set a direction to null for no change.
|
||||
var/list/directional_vehicle_layers = list()
|
||||
/// same as above but instead of layer you have a list(px, py)
|
||||
var/list/directional_vehicle_offsets = list()
|
||||
/// allow typecache for only certain turfs, forbid to allow all but those. allow only certain turfs will take precedence.
|
||||
var/list/allowed_turf_typecache
|
||||
/// allow typecache for only certain turfs, forbid to allow all but those. allow only certain turfs will take precedence.
|
||||
@@ -47,11 +44,10 @@
|
||||
COOLDOWN_DECLARE(vehicle_move_cooldown)
|
||||
|
||||
|
||||
/datum/component/riding/Initialize(mob/living/riding_mob, force = FALSE, buckle_mob_flags= NONE)
|
||||
/datum/component/riding/Initialize(mob/living/riding_mob, force = FALSE, buckle_mob_flags = NONE)
|
||||
if(!ismovable(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
handle_specials(riding_mob)
|
||||
riding_mob.updating_glide_size = FALSE
|
||||
ride_check_flags |= buckle_mob_flags
|
||||
|
||||
@@ -72,25 +68,21 @@
|
||||
if(!can_force_unbuckle)
|
||||
RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(force_unbuckle))
|
||||
|
||||
/**
|
||||
* This proc handles all of the proc calls to things like set_vehicle_dir_layer() that a type of riding datum needs to call on creation
|
||||
*
|
||||
* The original riding component had these procs all called from the ridden object itself through the use of GetComponent() and LoadComponent()
|
||||
* This was obviously problematic for componentization, but while lots of the variables being set were able to be moved to component variables,
|
||||
* the proc calls couldn't be. Thus, anything that has to do an initial proc call should be handled here.
|
||||
*/
|
||||
/datum/component/riding/proc/handle_specials()
|
||||
return
|
||||
|
||||
/// This proc is called when a rider unbuckles, whether they chose to or not. If there's no more riders, this will be the riding component's death knell.
|
||||
/datum/component/riding/proc/vehicle_mob_unbuckle(datum/source, mob/living/rider, force = FALSE)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
restore_rider_layer_and_offsets(rider)
|
||||
handle_unbuckle(rider)
|
||||
|
||||
/datum/component/riding/proc/handle_unbuckle(mob/living/rider)
|
||||
var/atom/movable/movable_parent = parent
|
||||
restore_position(rider)
|
||||
if(movable_parent.has_buckled_mobs())
|
||||
update_parent_layer_and_offsets(movable_parent.dir, animate = TRUE)
|
||||
else
|
||||
restore_parent_layer_and_offsets()
|
||||
qdel(src)
|
||||
|
||||
/datum/component/riding/proc/handle_unbuckle(mob/living/rider)
|
||||
unequip_buckle_inhands(rider)
|
||||
rider.updating_glide_size = TRUE
|
||||
UnregisterSignal(rider, COMSIG_LIVING_TRY_PULL)
|
||||
@@ -98,18 +90,17 @@
|
||||
if (HAS_TRAIT(parent, trait))
|
||||
REMOVE_TRAIT(rider, trait, REF(src))
|
||||
rider.remove_traits(rider_traits, REF(src))
|
||||
if(!movable_parent.has_buckled_mobs())
|
||||
qdel(src)
|
||||
|
||||
/// This proc is called when a rider buckles, allowing for offsets to be set properly
|
||||
/datum/component/riding/proc/vehicle_mob_buckle(datum/source, mob/living/rider, force = FALSE)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/atom/movable/movable_parent = parent
|
||||
handle_vehicle_layer(movable_parent.dir)
|
||||
handle_vehicle_offsets(movable_parent.dir)
|
||||
update_parent_layer_and_offsets(movable_parent.dir, animate = TRUE)
|
||||
handle_buckle(rider)
|
||||
|
||||
if(rider.pulling == source)
|
||||
/datum/component/riding/proc/handle_buckle(mob/living/rider)
|
||||
if(rider.pulling == parent)
|
||||
rider.stop_pulling()
|
||||
RegisterSignal(rider, COMSIG_LIVING_TRY_PULL, PROC_REF(on_rider_try_pull))
|
||||
|
||||
@@ -117,7 +108,6 @@
|
||||
if (HAS_TRAIT(parent, trait))
|
||||
ADD_TRAIT(rider, trait, REF(src))
|
||||
rider.add_traits(rider_traits, REF(src))
|
||||
post_vehicle_mob_buckle(movable_parent, rider)
|
||||
|
||||
/// This proc is called when the rider attempts to grab the thing they're riding, preventing them from doing so.
|
||||
/datum/component/riding/proc/on_rider_try_pull(mob/living/rider_pulling, atom/movable/target, force)
|
||||
@@ -127,24 +117,6 @@
|
||||
ridden.balloon_alert(rider_pulling, "not while riding it!")
|
||||
return COMSIG_LIVING_CANCEL_PULL
|
||||
|
||||
///any behavior we want to happen after buckling the mob
|
||||
/datum/component/riding/proc/post_vehicle_mob_buckle(atom/movable/ridden, atom/movable/rider)
|
||||
return TRUE
|
||||
|
||||
/// Some ridable atoms may want to only show on top of the rider in certain directions, like wheelchairs
|
||||
/datum/component/riding/proc/handle_vehicle_layer(dir)
|
||||
var/atom/movable/AM = parent
|
||||
var/static/list/defaults = list(TEXT_NORTH = OBJ_LAYER, TEXT_SOUTH = ABOVE_MOB_LAYER, TEXT_EAST = ABOVE_MOB_LAYER, TEXT_WEST = ABOVE_MOB_LAYER)
|
||||
. = defaults["[dir]"]
|
||||
if(directional_vehicle_layers["[dir]"])
|
||||
. = directional_vehicle_layers["[dir]"]
|
||||
if(isnull(.)) //you can set it to null to not change it.
|
||||
. = AM.layer
|
||||
AM.layer = .
|
||||
|
||||
/datum/component/riding/proc/set_vehicle_dir_layer(dir, layer)
|
||||
directional_vehicle_layers["[dir]"] = layer
|
||||
|
||||
/// This is called after the ridden atom is successfully moved and is used to handle icon stuff
|
||||
/datum/component/riding/proc/vehicle_moved(datum/source, oldloc, dir, forced)
|
||||
SIGNAL_HANDLER
|
||||
@@ -157,8 +129,7 @@
|
||||
ride_check(buckled_mob)
|
||||
if(QDELETED(src))
|
||||
return // runtimed with piggy's without this, look into this more
|
||||
handle_vehicle_offsets(dir)
|
||||
handle_vehicle_layer(dir)
|
||||
update_parent_layer_and_offsets(dir)
|
||||
|
||||
/// Turning is like moving
|
||||
/datum/component/riding/proc/vehicle_turned(datum/source, _old_dir, new_dir)
|
||||
@@ -173,61 +144,80 @@
|
||||
/datum/component/riding/proc/ride_check(mob/living/rider, consequences = TRUE)
|
||||
return TRUE
|
||||
|
||||
/datum/component/riding/proc/handle_vehicle_offsets(dir)
|
||||
var/atom/movable/AM = parent
|
||||
var/AM_dir = "[dir]"
|
||||
var/passindex = 0
|
||||
if(!AM.has_buckled_mobs())
|
||||
#define GET_X_OFFSET(offsets) (length(offsets) >= 1 ? offsets[1] : 0)
|
||||
#define GET_Y_OFFSET(offsets) (length(offsets) >= 2 ? offsets[2] : 0)
|
||||
#define GET_LAYER(offsets, default) (length(offsets) >= 3 ? offsets[3] : default)
|
||||
|
||||
/datum/component/riding/proc/update_parent_layer_and_offsets(dir, animate = FALSE)
|
||||
var/atom/movable/seat = parent
|
||||
if(!seat.has_buckled_mobs())
|
||||
return
|
||||
|
||||
for(var/m in AM.buckled_mobs)
|
||||
var/passindex = 0
|
||||
for(var/mob/living/buckled_mob as anything in seat.buckled_mobs)
|
||||
passindex++
|
||||
var/mob/living/buckled_mob = m
|
||||
var/list/offsets = get_offsets(passindex)
|
||||
buckled_mob.setDir(dir)
|
||||
dir_loop:
|
||||
for(var/offsetdir in offsets)
|
||||
if(offsetdir == AM_dir)
|
||||
var/list/diroffsets = offsets[offsetdir]
|
||||
buckled_mob.pixel_x = diroffsets[1]
|
||||
if(diroffsets.len >= 2)
|
||||
buckled_mob.pixel_y = diroffsets[2]
|
||||
if(diroffsets.len == 3)
|
||||
buckled_mob.layer = diroffsets[3]
|
||||
break dir_loop
|
||||
var/static/list/default_vehicle_pixel_offsets = list(TEXT_NORTH = list(0, 0), TEXT_SOUTH = list(0, 0), TEXT_EAST = list(0, 0), TEXT_WEST = list(0, 0))
|
||||
var/px = default_vehicle_pixel_offsets[AM_dir]
|
||||
var/py = default_vehicle_pixel_offsets[AM_dir]
|
||||
if(directional_vehicle_offsets[AM_dir])
|
||||
if(isnull(directional_vehicle_offsets[AM_dir]))
|
||||
px = AM.pixel_x
|
||||
py = AM.pixel_y
|
||||
else
|
||||
px = directional_vehicle_offsets[AM_dir][1]
|
||||
py = directional_vehicle_offsets[AM_dir][2]
|
||||
AM.pixel_x = px
|
||||
AM.pixel_y = py
|
||||
update_rider_layer_and_offsets(dir, passindex, buckled_mob)
|
||||
|
||||
/datum/component/riding/proc/set_vehicle_dir_offsets(dir, x, y)
|
||||
directional_vehicle_offsets["[dir]"] = list(x, y)
|
||||
var/list/offsets = get_parent_offsets_and_layers()?["[dir]"]
|
||||
var/px = GET_X_OFFSET(offsets)
|
||||
var/py = GET_Y_OFFSET(offsets)
|
||||
var/layer = GET_LAYER(offsets, seat.layer)
|
||||
|
||||
//Override this to set your vehicle's various pixel offsets
|
||||
/datum/component/riding/proc/get_offsets(pass_index) // list(dir = x, y, layer)
|
||||
. = list(TEXT_NORTH = list(0, 0), TEXT_SOUTH = list(0, 0), TEXT_EAST = list(0, 0), TEXT_WEST = list(0, 0))
|
||||
if(riding_offsets["[pass_index]"])
|
||||
. = riding_offsets["[pass_index]"]
|
||||
else if(riding_offsets["[RIDING_OFFSET_ALL]"])
|
||||
. = riding_offsets["[RIDING_OFFSET_ALL]"]
|
||||
if(isliving(seat))
|
||||
var/mob/living/living_seat = seat
|
||||
living_seat.add_offsets(BEING_RIDDEN_SOURCE, x_add = px, y_add = py, animate = animate)
|
||||
else
|
||||
seat.pixel_x = px + seat.base_pixel_x
|
||||
seat.pixel_y = py + seat.base_pixel_y
|
||||
seat.layer = layer
|
||||
|
||||
/datum/component/riding/proc/set_riding_offsets(index, list/offsets)
|
||||
if(!islist(offsets))
|
||||
return FALSE
|
||||
riding_offsets["[index]"] = offsets
|
||||
/datum/component/riding/proc/update_rider_layer_and_offsets(dir, passindex, mob/living/rider, animate = FALSE)
|
||||
if(rider.dir != dir)
|
||||
rider.setDir(dir)
|
||||
|
||||
/datum/component/riding/proc/set_vehicle_offsets(list/offsets)
|
||||
if(!islist(offsets))
|
||||
return FALSE
|
||||
directional_vehicle_offsets = offsets
|
||||
var/list/diroffsets = get_rider_offsets_and_layers(passindex, rider)?["[dir]"]
|
||||
var/x_offset = GET_X_OFFSET(diroffsets)
|
||||
var/y_offset = GET_Y_OFFSET(diroffsets)
|
||||
var/layer = GET_LAYER(diroffsets, rider.layer)
|
||||
|
||||
// if they are intended to be buckled, offset their existing offset
|
||||
var/atom/movable/seat = parent
|
||||
if(seat.buckle_lying && rider.body_position == LYING_DOWN)
|
||||
y_offset += (-1 * PIXEL_Y_OFFSET_LYING)
|
||||
|
||||
rider.add_offsets(RIDING_SOURCE, x_add = x_offset, y_add = y_offset, animate = animate)
|
||||
rider.layer = layer
|
||||
|
||||
#undef GET_X_OFFSET
|
||||
#undef GET_Y_OFFSET
|
||||
#undef GET_LAYER
|
||||
|
||||
/**
|
||||
* Determines where riders get offset while riding
|
||||
*
|
||||
* * pass_index: The index of the rider in the list of buckled mobs
|
||||
* * mob/offsetter: The mob that is being offset
|
||||
*/
|
||||
/datum/component/riding/proc/get_rider_offsets_and_layers(pass_index, mob/offsetter) as /list // list(dir = x, y, layer)
|
||||
RETURN_TYPE(/list)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0),
|
||||
TEXT_SOUTH = list(0, 0),
|
||||
TEXT_EAST = list(0, 0),
|
||||
TEXT_WEST = list(0, 0),
|
||||
)
|
||||
|
||||
/**
|
||||
* Determines where the parent gets offset while riders are riding
|
||||
*/
|
||||
/datum/component/riding/proc/get_parent_offsets_and_layers() as /list // list(dir = x, y, layer)
|
||||
RETURN_TYPE(/list)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_EAST = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_WEST = list(0, 0, ABOVE_MOB_LAYER),
|
||||
)
|
||||
|
||||
/**
|
||||
* This proc is used to see if we have the appropriate key to drive this atom, if such a key is needed. Returns FALSE if we don't have what we need to drive.
|
||||
@@ -245,15 +235,22 @@
|
||||
return user.is_holding_item_of_type(keytype)
|
||||
|
||||
//BUCKLE HOOKS
|
||||
/datum/component/riding/proc/restore_position(mob/living/buckled_mob)
|
||||
if(isnull(buckled_mob))
|
||||
return
|
||||
buckled_mob.pixel_x = buckled_mob.base_pixel_x
|
||||
buckled_mob.pixel_y = buckled_mob.base_pixel_y
|
||||
/datum/component/riding/proc/restore_rider_layer_and_offsets(mob/living/buckled_mob)
|
||||
buckled_mob.remove_offsets(RIDING_SOURCE)
|
||||
buckled_mob.layer = initial(buckled_mob.layer)
|
||||
var/atom/source = parent
|
||||
SET_PLANE_EXPLICIT(buckled_mob, initial(buckled_mob.plane), source)
|
||||
if(buckled_mob.client)
|
||||
buckled_mob.client.view_size.resetToDefault()
|
||||
buckled_mob.client?.view_size.resetToDefault()
|
||||
|
||||
/datum/component/riding/proc/restore_parent_layer_and_offsets()
|
||||
var/atom/movable/seat = parent
|
||||
if(isliving(seat))
|
||||
var/mob/living/living_seat = seat
|
||||
living_seat.remove_offsets(BEING_RIDDEN_SOURCE)
|
||||
else
|
||||
seat.pixel_x = seat.base_pixel_x
|
||||
seat.pixel_y = seat.base_pixel_y
|
||||
seat.layer = initial(seat.layer)
|
||||
|
||||
//MOVEMENT
|
||||
/datum/component/riding/proc/turf_check(turf/next, turf/current)
|
||||
@@ -327,3 +324,6 @@
|
||||
SIGNAL_HANDLER
|
||||
for (var/mob/passenger as anything in ridden.buckled_mobs)
|
||||
passenger.Bump(supermatter)
|
||||
|
||||
#undef RIDING_SOURCE
|
||||
#undef BEING_RIDDEN_SOURCE
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
living_parent.stop_pulling() // was only used on humans previously, may change some other behavior
|
||||
log_riding(living_parent, riding_mob)
|
||||
riding_mob.set_glide_size(living_parent.glide_size)
|
||||
handle_vehicle_offsets(living_parent.dir)
|
||||
update_parent_layer_and_offsets(living_parent.dir)
|
||||
|
||||
if(can_use_abilities)
|
||||
setup_abilities(riding_mob)
|
||||
@@ -109,14 +109,8 @@
|
||||
var/mob/living/living_parent = parent
|
||||
step(living_parent, direction)
|
||||
var/modified_move_delay = vehicle_move_delay
|
||||
if(ishuman(user) && HAS_TRAIT(user, TRAIT_ROUGHRIDER)) // YEEHAW!
|
||||
var/mob/living/carbon/human/rough_rider = user
|
||||
var/ride_benefit = null
|
||||
if(HAS_TRAIT(rough_rider, TRAIT_PRIMITIVE)) // closer to a beast than a man; you don't need to think to ride!
|
||||
ride_benefit = SANITY_LEVEL_GREAT
|
||||
else
|
||||
ride_benefit = rough_rider.mob_mood.sanity_level
|
||||
switch(ride_benefit)
|
||||
if(HAS_TRAIT(user, TRAIT_ROUGHRIDER)) // YEEHAW!
|
||||
switch(HAS_TRAIT(user, TRAIT_PRIMITIVE) ? SANITY_LEVEL_GREAT : user.mob_mood?.sanity_level)
|
||||
if(SANITY_LEVEL_GREAT)
|
||||
modified_move_delay *= 0.8
|
||||
if(SANITY_LEVEL_NEUTRAL)
|
||||
@@ -216,7 +210,8 @@
|
||||
else if(ride_check_flags & CARRIER_NEEDS_ARM) // fireman
|
||||
human_parent.buckle_lying = 90
|
||||
|
||||
/datum/component/riding/creature/post_vehicle_mob_buckle(mob/living/ridden, mob/living/rider)
|
||||
/datum/component/riding/creature/handle_buckle(mob/living/rider)
|
||||
var/mob/living/ridden = parent
|
||||
if(!require_minigame || ridden.faction.Find(REF(rider)))
|
||||
return
|
||||
ridden.Shake(duration = 2 SECONDS)
|
||||
@@ -260,81 +255,55 @@
|
||||
/datum/component/riding/creature/human/proc/check_carrier_fall_over(mob/living/carbon/human/human_parent)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
for(var/i in human_parent.buckled_mobs)
|
||||
var/mob/living/rider = i
|
||||
for(var/mob/living/rider as anything in human_parent.buckled_mobs)
|
||||
human_parent.unbuckle_mob(rider)
|
||||
rider.Paralyze(1 SECONDS)
|
||||
rider.Knockdown(4 SECONDS)
|
||||
human_parent.visible_message(span_danger("[rider] topples off of [human_parent] as they both fall to the ground!"), \
|
||||
span_warning("You fall to the ground, bringing [rider] with you!"), span_hear("You hear two consecutive thuds."), COMBAT_MESSAGE_RANGE, ignored_mobs=rider)
|
||||
human_parent.visible_message(
|
||||
span_danger("[rider] topples off of [human_parent] as they both fall to the ground!"),
|
||||
span_warning("You fall to the ground, bringing [rider] with you!"),
|
||||
span_hear("You hear two consecutive thuds."),
|
||||
COMBAT_MESSAGE_RANGE,
|
||||
ignored_mobs = rider,
|
||||
visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
|
||||
)
|
||||
to_chat(rider, span_danger("[human_parent] falls to the ground, bringing you with [human_parent.p_them()]!"))
|
||||
|
||||
/datum/component/riding/creature/human/handle_vehicle_layer(dir)
|
||||
var/atom/movable/AM = parent
|
||||
if(!AM.buckled_mobs || !AM.buckled_mobs.len)
|
||||
AM.layer = MOB_LAYER
|
||||
return
|
||||
/datum/component/riding/creature/human/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
var/mob/living/carbon/human/seat = parent
|
||||
// fireman carry
|
||||
if(seat.buckle_lying)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 6, MOB_ABOVE_PIGGYBACK_LAYER),
|
||||
TEXT_SOUTH = list(0, 6, MOB_BELOW_PIGGYBACK_LAYER),
|
||||
TEXT_EAST = list(0, 6, MOB_BELOW_PIGGYBACK_LAYER),
|
||||
TEXT_WEST = list(0, 6, MOB_BELOW_PIGGYBACK_LAYER),
|
||||
)
|
||||
// piggyback
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 8, MOB_ABOVE_PIGGYBACK_LAYER),
|
||||
TEXT_SOUTH = list( 0, 8, MOB_BELOW_PIGGYBACK_LAYER),
|
||||
TEXT_EAST = list(-6, 8, MOB_BELOW_PIGGYBACK_LAYER),
|
||||
TEXT_WEST = list( 6, 8, MOB_BELOW_PIGGYBACK_LAYER),
|
||||
)
|
||||
|
||||
for(var/mob/M in AM.buckled_mobs) //ensure proper layering of piggyback and carry, sometimes weird offsets get applied
|
||||
M.layer = MOB_LAYER
|
||||
/datum/component/riding/creature/human/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0),
|
||||
TEXT_SOUTH = list(0, 0),
|
||||
TEXT_EAST = list(0, 0),
|
||||
TEXT_WEST = list(0, 0),
|
||||
)
|
||||
|
||||
if(!AM.buckle_lying) // rider is vertical, must be piggybacking
|
||||
if(dir == SOUTH)
|
||||
AM.layer = MOB_ABOVE_PIGGYBACK_LAYER
|
||||
else
|
||||
AM.layer = MOB_BELOW_PIGGYBACK_LAYER
|
||||
else // laying flat, we must be firemanning the rider
|
||||
if(dir == NORTH)
|
||||
AM.layer = MOB_BELOW_PIGGYBACK_LAYER
|
||||
else
|
||||
AM.layer = MOB_ABOVE_PIGGYBACK_LAYER
|
||||
|
||||
/datum/component/riding/creature/human/get_offsets(pass_index)
|
||||
var/mob/living/carbon/human/H = parent
|
||||
/* BUBBER EDIT REMOVAL START
|
||||
if(H.buckle_lying)
|
||||
return list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(0, 6), TEXT_WEST = list(0, 6))
|
||||
else
|
||||
return list(TEXT_NORTH = list(0, 6), TEXT_SOUTH = list(0, 6), TEXT_EAST = list(-6, 4), TEXT_WEST = list( 6, 4))
|
||||
*/ // BUBBER EDIT REMOVAL END
|
||||
// BUBBER EDIT ADDITION BEGIN - Oversized Overhaul, Taur riding
|
||||
if(H.buckle_lying)
|
||||
return HAS_TRAIT(H, TRAIT_OVERSIZED) ? list(
|
||||
TEXT_NORTH = list(0, OVERSIZED_OFFSET),
|
||||
TEXT_SOUTH = list(0, OVERSIZED_OFFSET),
|
||||
TEXT_EAST = list(0, OVERSIZED_OFFSET),
|
||||
TEXT_WEST = list(0, OVERSIZED_OFFSET),
|
||||
) : list(
|
||||
TEXT_NORTH = list(0, REGULAR_OFFSET),
|
||||
TEXT_SOUTH = list(0, REGULAR_OFFSET),
|
||||
TEXT_EAST = list(0, REGULAR_OFFSET),
|
||||
TEXT_WEST = list(0, REGULAR_OFFSET),
|
||||
)
|
||||
else if (!(ride_check_flags & RIDING_TAUR)) // BUBBER EDIT CHANGE - ORIGINAL: else
|
||||
return HAS_TRAIT(H, TRAIT_OVERSIZED) ? list(
|
||||
TEXT_NORTH = list(0, OVERSIZED_OFFSET),
|
||||
TEXT_SOUTH = list(0, OVERSIZED_OFFSET),
|
||||
TEXT_EAST = list(-OVERSIZED_SIDE_OFFSET, OVERSIZED_OFFSET),
|
||||
TEXT_WEST = list(OVERSIZED_SIDE_OFFSET, OVERSIZED_OFFSET),
|
||||
) : list(
|
||||
TEXT_NORTH = list(0, REGULAR_OFFSET),
|
||||
TEXT_SOUTH = list(0, REGULAR_OFFSET),
|
||||
TEXT_EAST = list(-REGULAR_OFFSET, REGULAR_SIDE_OFFSET),
|
||||
TEXT_WEST = list(REGULAR_OFFSET, REGULAR_SIDE_OFFSET)
|
||||
)
|
||||
|
||||
if (ride_check_flags & RIDING_TAUR)
|
||||
var/obj/item/organ/taur_body/taur_body = H.get_organ_slot(ORGAN_SLOT_EXTERNAL_TAUR)
|
||||
return taur_body.get_riding_offset(oversized = HAS_TRAIT(H, TRAIT_OVERSIZED))
|
||||
//BUBBER EDIT END
|
||||
|
||||
/datum/component/riding/creature/human/force_dismount(mob/living/dismounted_rider, throw_range = 8, throw_speed = 3, gentle = FALSE)
|
||||
var/atom/movable/AM = parent
|
||||
AM.unbuckle_mob(dismounted_rider)
|
||||
dismounted_rider.Paralyze(1 SECONDS)
|
||||
dismounted_rider.Knockdown(4 SECONDS)
|
||||
dismounted_rider.visible_message(span_warning("[AM] pushes [dismounted_rider] off of [AM.p_them()]!"), \
|
||||
span_warning("[AM] pushes you off of [AM.p_them()]!"))
|
||||
/datum/component/riding/creature/human/force_dismount(mob/living/rider, throw_range = 8, throw_speed = 3, gentle = FALSE)
|
||||
var/atom/movable/seat = parent
|
||||
seat.unbuckle_mob(rider)
|
||||
rider.Paralyze(1 SECONDS)
|
||||
rider.Knockdown(4 SECONDS)
|
||||
rider.visible_message(
|
||||
span_warning("[seat] pushes [rider] off of [seat.p_them()]!"),
|
||||
span_warning("[seat] pushes you off of [seat.p_them()]!"),
|
||||
)
|
||||
|
||||
|
||||
//Now onto cyborg riding//
|
||||
@@ -350,65 +319,88 @@
|
||||
Unbuckle(user)
|
||||
to_chat(user, span_warning("You can't grab onto [robot_parent] with no hands!"))
|
||||
|
||||
/datum/component/riding/creature/cyborg/handle_vehicle_layer(dir)
|
||||
var/atom/movable/robot_parent = parent
|
||||
if(dir == SOUTH)
|
||||
robot_parent.layer = MOB_ABOVE_PIGGYBACK_LAYER
|
||||
else
|
||||
robot_parent.layer = MOB_BELOW_PIGGYBACK_LAYER
|
||||
|
||||
/datum/component/riding/creature/cyborg/get_offsets(pass_index) // list(dir = x, y, layer)
|
||||
return list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(-6, 3), TEXT_WEST = list( 6, 3))
|
||||
|
||||
/datum/component/riding/creature/cyborg/handle_vehicle_offsets(dir)
|
||||
/datum/component/riding/creature/cyborg/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
var/mob/living/silicon/robot/robot_parent = parent
|
||||
return robot_parent.model?.ride_offsets || DEFAULT_ROBOT_RIDING_OFFSETS
|
||||
|
||||
for(var/mob/living/rider in robot_parent.buckled_mobs)
|
||||
rider.setDir(dir)
|
||||
if(istype(robot_parent.model))
|
||||
rider.pixel_x = robot_parent.model.ride_offset_x[dir2text(dir)]
|
||||
rider.pixel_y = robot_parent.model.ride_offset_y[dir2text(dir)]
|
||||
/datum/component/riding/creature/cyborg/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, MOB_BELOW_PIGGYBACK_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, MOB_ABOVE_PIGGYBACK_LAYER),
|
||||
TEXT_EAST = list(0, 0, MOB_ABOVE_PIGGYBACK_LAYER),
|
||||
TEXT_WEST = list(0, 0, MOB_ABOVE_PIGGYBACK_LAYER),
|
||||
)
|
||||
|
||||
//now onto every other ridable mob//
|
||||
/datum/component/riding/creature/mulebot
|
||||
|
||||
/datum/component/riding/creature/mulebot/handle_specials()
|
||||
. = ..()
|
||||
var/atom/movable/movable_parent = parent
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 12), TEXT_SOUTH = list(0, 12), TEXT_EAST = list(0, 12), TEXT_WEST = list(0, 12)))
|
||||
set_vehicle_dir_layer(SOUTH, movable_parent.layer) //vehicles default to ABOVE_MOB_LAYER while moving, let's make sure that doesn't happen while a mob is riding us.
|
||||
set_vehicle_dir_layer(NORTH, movable_parent.layer)
|
||||
set_vehicle_dir_layer(EAST, movable_parent.layer)
|
||||
set_vehicle_dir_layer(WEST, movable_parent.layer)
|
||||
/datum/component/riding/creature/mulebot/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 12),
|
||||
TEXT_SOUTH = list(0, 12),
|
||||
TEXT_EAST = list(0, 12),
|
||||
TEXT_WEST = list(0, 12),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/mulebot/get_parent_offsets_and_layers()
|
||||
return null
|
||||
|
||||
/datum/component/riding/creature/cow/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/creature/cow
|
||||
|
||||
/datum/component/riding/creature/pig/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/creature/cow/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 8),
|
||||
TEXT_SOUTH = list( 0, 8),
|
||||
TEXT_EAST = list(-2, 8),
|
||||
TEXT_WEST = list( 2, 8),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/pony/handle_specials()
|
||||
. = ..()
|
||||
vehicle_move_delay = 1.5
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 9), TEXT_SOUTH = list(0, 9), TEXT_EAST = list(-2, 9), TEXT_WEST = list(2, 9)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/creature/cow/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/pig
|
||||
|
||||
/datum/component/riding/creature/pig/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 8),
|
||||
TEXT_SOUTH = list( 0, 8),
|
||||
TEXT_EAST = list(-2, 8),
|
||||
TEXT_WEST = list( 2, 8),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/pig/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/pony
|
||||
vehicle_move_delay = 1.5
|
||||
COOLDOWN_DECLARE(pony_trot_cooldown)
|
||||
|
||||
/datum/component/riding/creature/pony/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 9),
|
||||
TEXT_SOUTH = list( 0, 9),
|
||||
TEXT_EAST = list(-2, 9),
|
||||
TEXT_WEST = list( 2, 9),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/pony/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/pony/driver_move(atom/movable/movable_parent, mob/living/user, direction)
|
||||
. = ..()
|
||||
|
||||
@@ -422,51 +414,80 @@
|
||||
playsound(movable_parent, 'sound/mobs/non-humanoids/pony/clown_gallup.ogg', 50)
|
||||
COOLDOWN_START(src, pony_trot_cooldown, 500 MILLISECONDS)
|
||||
|
||||
/datum/component/riding/creature/bear/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 8), TEXT_SOUTH = list(1, 8), TEXT_EAST = list(-3, 6), TEXT_WEST = list(3, 6)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(WEST, ABOVE_MOB_LAYER)
|
||||
/datum/component/riding/creature/bear
|
||||
|
||||
/datum/component/riding/creature/bear/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 1, 8),
|
||||
TEXT_SOUTH = list( 1, 8),
|
||||
TEXT_EAST = list(-3, 6),
|
||||
TEXT_WEST = list( 3, 6),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/bear/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_WEST = list(0, 0, ABOVE_MOB_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/carp
|
||||
override_allow_spacemove = TRUE
|
||||
|
||||
/datum/component/riding/creature/carp/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 13), TEXT_SOUTH = list(0, 15), TEXT_EAST = list(-2, 12), TEXT_WEST = list(2, 12)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/creature/carp/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 13),
|
||||
TEXT_SOUTH = list(0, 15),
|
||||
TEXT_EAST = list(-2, 12),
|
||||
TEXT_WEST = list( 2, 12),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/carp/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/megacarp/handle_specials()
|
||||
. = ..()
|
||||
var/atom/movable/movable_parent = parent
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 8), TEXT_SOUTH = list(1, 8), TEXT_EAST = list(-3, 6), TEXT_WEST = list(3, 6)))
|
||||
set_vehicle_dir_offsets(SOUTH, movable_parent.pixel_x, 0)
|
||||
set_vehicle_dir_offsets(NORTH, movable_parent.pixel_x, 0)
|
||||
set_vehicle_dir_offsets(EAST, movable_parent.pixel_x, 0)
|
||||
set_vehicle_dir_offsets(WEST, movable_parent.pixel_x, 0)
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/creature/megacarp
|
||||
|
||||
/datum/component/riding/creature/megacarp/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(1, 8),
|
||||
TEXT_SOUTH = list(1, 8),
|
||||
TEXT_EAST = list(-3, 6),
|
||||
TEXT_WEST = list(3, 6),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/megacarp/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/vatbeast
|
||||
override_allow_spacemove = TRUE
|
||||
can_use_abilities = TRUE
|
||||
|
||||
/datum/component/riding/creature/vatbeast/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 15), TEXT_SOUTH = list(0, 15), TEXT_EAST = list(-10, 15), TEXT_WEST = list(10, 15)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/creature/vatbeast/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 15),
|
||||
TEXT_SOUTH = list(0, 15),
|
||||
TEXT_EAST = list(-10, 15),
|
||||
TEXT_WEST = list(10, 15),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/vatbeast/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/goliath
|
||||
keytype = /obj/item/key/lasso
|
||||
@@ -486,38 +507,58 @@
|
||||
goliath.remove_movespeed_modifier(/datum/movespeed_modifier/goliath_mount)
|
||||
return ..()
|
||||
|
||||
/datum/component/riding/creature/goliath/handle_specials()
|
||||
. = ..()
|
||||
set_vehicle_offsets(list(TEXT_NORTH = list(-12, 0), TEXT_SOUTH = list(-12, 0), TEXT_EAST = list(-12, 0), TEXT_WEST = list(-12, 0)))
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 12), TEXT_SOUTH = list(0, 12), TEXT_EAST = list(-4, 12), TEXT_WEST = list(3, 12)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/creature/goliath/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 12),
|
||||
TEXT_SOUTH = list( 0, 12),
|
||||
TEXT_EAST = list(-4, 12),
|
||||
TEXT_WEST = list( 3, 12),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/glutton/handle_specials()
|
||||
. = ..()
|
||||
var/atom/movable/movable_parent = parent
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 24), TEXT_SOUTH = list(0, 24), TEXT_EAST = list(-16, 24), TEXT_WEST = list(16, 24)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(WEST, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_offsets(SOUTH, movable_parent.pixel_x, 0)
|
||||
set_vehicle_dir_offsets(NORTH, movable_parent.pixel_x, 0)
|
||||
set_vehicle_dir_offsets(EAST, movable_parent.pixel_x, 0)
|
||||
set_vehicle_dir_offsets(WEST, movable_parent.pixel_x, 0)
|
||||
/datum/component/riding/creature/goliath/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(-12, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(-12, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_EAST = list(-12, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(-12, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/glutton
|
||||
|
||||
/datum/component/riding/creature/glutton/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 24),
|
||||
TEXT_SOUTH = list( 0, 24),
|
||||
TEXT_EAST = list(-16, 24),
|
||||
TEXT_WEST = list( 16, 24),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/glutton/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_WEST = list(0, 0, ABOVE_MOB_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/guardian
|
||||
can_be_driven = FALSE
|
||||
|
||||
/datum/component/riding/creature/guardian/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(-6, 3), TEXT_WEST = list(6, 3)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(WEST, ABOVE_MOB_LAYER)
|
||||
/datum/component/riding/creature/guardian/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 4),
|
||||
TEXT_SOUTH = list( 0, 4),
|
||||
TEXT_EAST = list(-6, 3),
|
||||
TEXT_WEST = list( 6, 3),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/guardian/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_WEST = list(0, 0, ABOVE_MOB_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/guardian/ride_check(mob/living/user, consequences = TRUE)
|
||||
var/mob/living/basic/guardian/charger = parent
|
||||
@@ -527,22 +568,34 @@
|
||||
|
||||
/datum/component/riding/creature/goldgrub
|
||||
|
||||
/datum/component/riding/creature/goldgrub/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(11, 3), TEXT_SOUTH = list(11, 3), TEXT_EAST = list(9, 3), TEXT_WEST = list(14, 3)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/creature/goldgrub/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(11, 3),
|
||||
TEXT_SOUTH = list(11, 3),
|
||||
TEXT_EAST = list( 9, 3),
|
||||
TEXT_WEST = list(14, 3),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/goldgrub/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/leaper
|
||||
can_force_unbuckle = FALSE
|
||||
can_use_abilities = TRUE
|
||||
ride_check_flags = JUST_FRIEND_RIDERS
|
||||
|
||||
/datum/component/riding/creature/leaper/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(17, 46), TEXT_SOUTH = list(17,51), TEXT_EAST = list(27, 46), TEXT_WEST = list(6, 46)))
|
||||
/datum/component/riding/creature/leaper/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(17, 46),
|
||||
TEXT_SOUTH = list(17, 51),
|
||||
TEXT_EAST = list(27, 46),
|
||||
TEXT_WEST = list( 6, 46),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/leaper/Initialize(mob/living/riding_mob, force = FALSE, ride_check_flags = NONE)
|
||||
. = ..()
|
||||
@@ -557,7 +610,6 @@
|
||||
return
|
||||
basic_parent.melee_attack(pointed)
|
||||
|
||||
|
||||
/datum/component/riding/leaper/handle_unbuckle(mob/living/rider)
|
||||
. = ..()
|
||||
UnregisterSignal(rider, COMSIG_MOVABLE_POINTED)
|
||||
@@ -592,16 +644,28 @@
|
||||
for(var/mob/living/buckled_mob in living_parent.buckled_mobs)
|
||||
force_dismount(buckled_mob, throw_range = 2, gentle = TRUE)
|
||||
|
||||
/datum/component/riding/creature/raptor/handle_specials()
|
||||
. = ..()
|
||||
/datum/component/riding/creature/raptor/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
if(!SSmapping.is_planetary())
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(7, 7), TEXT_SOUTH = list(2, 10), TEXT_EAST = list(12, 7), TEXT_WEST = list(10, 7)))
|
||||
else
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 7), TEXT_SOUTH = list(0, 10), TEXT_EAST = list(-3, 9), TEXT_WEST = list(3, 9)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
return list(
|
||||
TEXT_NORTH = list( 7, 7),
|
||||
TEXT_SOUTH = list( 2, 10),
|
||||
TEXT_EAST = list(12, 7),
|
||||
TEXT_WEST = list(10, 7),
|
||||
)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 7),
|
||||
TEXT_SOUTH = list( 0, 10),
|
||||
TEXT_EAST = list(-3, 9),
|
||||
TEXT_WEST = list( 3, 9),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/raptor/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/creature/raptor/fast
|
||||
vehicle_move_delay = 1.5
|
||||
|
||||
@@ -101,8 +101,7 @@
|
||||
|
||||
if(QDELETED(src))
|
||||
return
|
||||
handle_vehicle_layer(movable_parent.dir)
|
||||
handle_vehicle_offsets(movable_parent.dir)
|
||||
update_parent_layer_and_offsets(movable_parent.dir)
|
||||
return TRUE
|
||||
|
||||
/datum/component/riding/vehicle/atv
|
||||
@@ -110,38 +109,54 @@
|
||||
ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER
|
||||
vehicle_move_delay = 1.5
|
||||
|
||||
/datum/component/riding/vehicle/atv/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/vehicle/atv/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 4),
|
||||
TEXT_SOUTH = list(0, 4),
|
||||
TEXT_EAST = list(0, 4),
|
||||
TEXT_WEST = list(0, 4),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/atv/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/bicycle
|
||||
ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER
|
||||
vehicle_move_delay = 0
|
||||
|
||||
/datum/component/riding/vehicle/bicycle/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
|
||||
|
||||
/datum/component/riding/vehicle/bicycle/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 4),
|
||||
TEXT_SOUTH = list(0, 4),
|
||||
TEXT_EAST = list(0, 4),
|
||||
TEXT_WEST = list(0, 4),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/lavaboat
|
||||
ride_check_flags = NONE // not sure
|
||||
keytype = /obj/item/oar
|
||||
/// The one turf we can move on.
|
||||
var/allowed_turf = /turf/open/lava
|
||||
|
||||
/datum/component/riding/vehicle/lavaboat/handle_specials()
|
||||
/datum/component/riding/vehicle/lavaboat/Initialize(mob/living/riding_mob, force, ride_check_flags, potion_boost)
|
||||
. = ..()
|
||||
allowed_turf_typecache = typecacheof(allowed_turf)
|
||||
|
||||
/datum/component/riding/vehicle/lavaboat/dragonboat
|
||||
vehicle_move_delay = 1
|
||||
|
||||
/datum/component/riding/vehicle/lavaboat/dragonboat/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 2), TEXT_SOUTH = list(1, 2), TEXT_EAST = list(1, 2), TEXT_WEST = list( 1, 2)))
|
||||
/datum/component/riding/vehicle/lavaboat/dragonboat/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(1, 2),
|
||||
TEXT_SOUTH = list(1, 2),
|
||||
TEXT_EAST = list(1, 2),
|
||||
TEXT_WEST = list(1, 2),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/lavaboat/dragonboat
|
||||
vehicle_move_delay = 1
|
||||
@@ -151,19 +166,31 @@
|
||||
/datum/component/riding/vehicle/janicart
|
||||
keytype = /obj/item/key/janitor
|
||||
|
||||
/datum/component/riding/vehicle/janicart/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 7), TEXT_EAST = list(-12, 7), TEXT_WEST = list( 12, 7)))
|
||||
/datum/component/riding/vehicle/janicart/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, 4),
|
||||
TEXT_SOUTH = list( 0, 7),
|
||||
TEXT_EAST = list(-12, 7),
|
||||
TEXT_WEST = list( 12, 7),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/scooter
|
||||
ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER
|
||||
|
||||
/datum/component/riding/vehicle/scooter/handle_specials(mob/living/riding_mob)
|
||||
. = ..()
|
||||
if(iscyborg(riding_mob))
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0), TEXT_SOUTH = list(0), TEXT_EAST = list(0), TEXT_WEST = list(2)))
|
||||
else
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(2), TEXT_SOUTH = list(-2), TEXT_EAST = list(0), TEXT_WEST = list(2)))
|
||||
/datum/component/riding/vehicle/scooter/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
if(iscyborg(offsetter))
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 2),
|
||||
TEXT_SOUTH = list(0, 2),
|
||||
TEXT_EAST = list(0, 2),
|
||||
TEXT_WEST = list(2, 2),
|
||||
)
|
||||
return list(
|
||||
TEXT_NORTH = list( 2, 2),
|
||||
TEXT_SOUTH = list(-2, 2),
|
||||
TEXT_EAST = list( 0, 2),
|
||||
TEXT_WEST = list( 2, 2),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/scooter/skateboard
|
||||
vehicle_move_delay = 1.5
|
||||
@@ -171,12 +198,21 @@
|
||||
///If TRUE, the vehicle will be slower (but safer) to ride on walk intent.
|
||||
var/can_slow_down = TRUE
|
||||
|
||||
/datum/component/riding/vehicle/scooter/skateboard/handle_specials()
|
||||
. = ..()
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/vehicle/scooter/skateboard/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 5),
|
||||
TEXT_SOUTH = list(0, 5),
|
||||
TEXT_EAST = list(0, 5),
|
||||
TEXT_WEST = list(2, 5),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/scooter/skateboard/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/scooter/skateboard/RegisterWithParent()
|
||||
. = ..()
|
||||
@@ -294,17 +330,13 @@
|
||||
vehicle_move_delay = 1.75 // SKYRAT EDIT - ORIGINAL: 0
|
||||
can_slow_down = FALSE
|
||||
|
||||
/datum/component/riding/vehicle/scooter/skateboard/wheelys/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0), TEXT_SOUTH = list(0), TEXT_EAST = list(0), TEXT_WEST = list(0)))
|
||||
|
||||
/datum/component/riding/vehicle/scooter/skateboard/wheelys/rollerskates
|
||||
vehicle_move_delay = 1.5
|
||||
|
||||
/datum/component/riding/vehicle/scooter/skateboard/wheelys/skishoes
|
||||
vehicle_move_delay = 1
|
||||
|
||||
/datum/component/riding/vehicle/scooter/skateboard/wheelys/skishoes/handle_specials()
|
||||
/datum/component/riding/vehicle/scooter/skateboard/wheelys/skishoes/Initialize(mob/living/riding_mob, force, ride_check_flags, potion_boost)
|
||||
. = ..()
|
||||
allowed_turf_typecache = typecacheof(list(/turf/open/misc/asteroid/snow, /turf/open/misc/snow, /turf/open/floor/holofloor/snow, /turf/open/misc/ice, /turf/open/floor/fake_snow))
|
||||
|
||||
@@ -313,10 +345,13 @@
|
||||
vehicle_move_delay = 1.75
|
||||
ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER
|
||||
|
||||
/datum/component/riding/vehicle/secway/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
|
||||
set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
|
||||
/datum/component/riding/vehicle/secway/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 4),
|
||||
TEXT_SOUTH = list(0, 4),
|
||||
TEXT_EAST = list(0, 4),
|
||||
TEXT_WEST = list(0, 4),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/secway/driver_move(mob/living/user, direction)
|
||||
var/obj/vehicle/ridden/secway/the_secway = parent
|
||||
@@ -334,48 +369,87 @@
|
||||
override_allow_spacemove = TRUE
|
||||
ride_check_flags = RIDER_NEEDS_LEGS | RIDER_NEEDS_ARMS | UNBUCKLE_DISABLED_RIDER
|
||||
|
||||
/datum/component/riding/vehicle/speedbike/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, -8), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(-10, 5), TEXT_WEST = list( 10, 5)))
|
||||
set_vehicle_dir_offsets(NORTH, -16, -16)
|
||||
set_vehicle_dir_offsets(SOUTH, -16, -16)
|
||||
set_vehicle_dir_offsets(EAST, -18, 0)
|
||||
set_vehicle_dir_offsets(WEST, -18, 0)
|
||||
/datum/component/riding/vehicle/speedbike/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
return list(
|
||||
TEXT_NORTH = list( 0, -8),
|
||||
TEXT_SOUTH = list( 0, 4),
|
||||
TEXT_EAST = list(-10, 5),
|
||||
TEXT_WEST = list( 10, 5),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/speedbike/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(-16, -16, OBJ_LAYER),
|
||||
TEXT_SOUTH = list(-16, -16, ABOVE_MOB_LAYER),
|
||||
TEXT_EAST = list(-18, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_WEST = list(-18, 0, ABOVE_MOB_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/speedwagon
|
||||
vehicle_move_delay = 0
|
||||
|
||||
/datum/component/riding/vehicle/speedwagon/handle_specials()
|
||||
. = ..()
|
||||
set_riding_offsets(1, list(TEXT_NORTH = list(-10, -4), TEXT_SOUTH = list(16, 3), TEXT_EAST = list(-4, 30), TEXT_WEST = list(4, -3)))
|
||||
set_riding_offsets(2, list(TEXT_NORTH = list(19, -5, 4), TEXT_SOUTH = list(-13, 3, 4), TEXT_EAST = list(-4, -3, 4.1), TEXT_WEST = list(4, 28, 3.9)))
|
||||
set_riding_offsets(3, list(TEXT_NORTH = list(-10, -18, 4.2), TEXT_SOUTH = list(16, 25, 3.9), TEXT_EAST = list(-22, 30), TEXT_WEST = list(22, -3, 4.1)))
|
||||
set_riding_offsets(4, list(TEXT_NORTH = list(19, -18, 4.2), TEXT_SOUTH = list(-13, 25, 3.9), TEXT_EAST = list(-22, 3, 3.9), TEXT_WEST = list(22, 28)))
|
||||
set_vehicle_dir_offsets(NORTH, -48, -48)
|
||||
set_vehicle_dir_offsets(SOUTH, -48, -48)
|
||||
set_vehicle_dir_offsets(EAST, -48, -48)
|
||||
set_vehicle_dir_offsets(WEST, -48, -48)
|
||||
for(var/i in GLOB.cardinals)
|
||||
set_vehicle_dir_layer(i, BELOW_MOB_LAYER)
|
||||
/datum/component/riding/vehicle/speedwagon/get_rider_offsets_and_layers(pass_index, mob/offsetter)
|
||||
switch(pass_index)
|
||||
if(1)
|
||||
return list(
|
||||
TEXT_NORTH = list(-10, -4, LYING_MOB_LAYER),
|
||||
TEXT_SOUTH = list( 16, -4, LYING_MOB_LAYER),
|
||||
TEXT_EAST = list( -4, 30, LYING_MOB_LAYER),
|
||||
TEXT_WEST = list( 4, -3, LYING_MOB_LAYER),
|
||||
)
|
||||
if(2)
|
||||
return list(
|
||||
TEXT_NORTH = list( 19, -5, MOB_LAYER),
|
||||
TEXT_SOUTH = list(-13, 3, MOB_LAYER),
|
||||
TEXT_EAST = list( -4, -3, ABOVE_MOB_LAYER),
|
||||
TEXT_WEST = list( 4, 28, VEHICLE_LAYER),
|
||||
)
|
||||
if(3)
|
||||
return list(
|
||||
TEXT_NORTH = list(-10, -18, ABOVE_MOB_LAYER + 0.1),
|
||||
TEXT_SOUTH = list( 16, 25, VEHICLE_LAYER),
|
||||
TEXT_EAST = list(-22, 30, LYING_MOB_LAYER),
|
||||
TEXT_WEST = list( 22, -3, ABOVE_MOB_LAYER),
|
||||
)
|
||||
if(4)
|
||||
return list(
|
||||
TEXT_NORTH = list( 19, -18, ABOVE_MOB_LAYER + 0.1),
|
||||
TEXT_SOUTH = list(-13, 25, VEHICLE_LAYER),
|
||||
TEXT_EAST = list(-22, 3, VEHICLE_LAYER),
|
||||
TEXT_WEST = list( 22, 28, LYING_MOB_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/speedwagon/get_parent_offsets_and_layers()
|
||||
. = ..()
|
||||
return list(
|
||||
TEXT_NORTH = list(-48, -48, BELOW_MOB_LAYER),
|
||||
TEXT_SOUTH = list(-48, -48, BELOW_MOB_LAYER),
|
||||
TEXT_EAST = list(-48, -48, BELOW_MOB_LAYER),
|
||||
TEXT_WEST = list(-48, -48, BELOW_MOB_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/wheelchair
|
||||
vehicle_move_delay = 0
|
||||
ride_check_flags = RIDER_NEEDS_ARMS
|
||||
|
||||
/datum/component/riding/vehicle/wheelchair/handle_specials()
|
||||
. = ..()
|
||||
set_vehicle_dir_layer(SOUTH, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(NORTH, ABOVE_MOB_LAYER)
|
||||
set_vehicle_dir_layer(EAST, OBJ_LAYER)
|
||||
set_vehicle_dir_layer(WEST, OBJ_LAYER)
|
||||
/datum/component/riding/vehicle/wheelchair/get_parent_offsets_and_layers()
|
||||
return list(
|
||||
TEXT_NORTH = list(0, 0, OBJ_LAYER),
|
||||
TEXT_SOUTH = list(0, 0, ABOVE_MOB_LAYER),
|
||||
TEXT_EAST = list(0, 0, OBJ_LAYER),
|
||||
TEXT_WEST = list(0, 0, OBJ_LAYER),
|
||||
)
|
||||
|
||||
/datum/component/riding/vehicle/wheelchair/hand
|
||||
/// Magic number used in calculating the speed of the wheelchair
|
||||
var/delay_multiplier = 6.7
|
||||
|
||||
// special messaging for those without arms
|
||||
/datum/component/riding/vehicle/wheelchair/hand/driver_move(obj/vehicle/vehicle_parent, mob/living/user, direction)
|
||||
var/delay_multiplier = 6.7 // magic number from wheelchair code
|
||||
vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * delay_multiplier) / clamp(user.usable_hands, 1, 2)
|
||||
return ..()
|
||||
|
||||
/datum/component/riding/vehicle/wheelchair/motorized
|
||||
|
||||
/datum/component/riding/vehicle/wheelchair/motorized/driver_move(obj/vehicle/vehicle_parent, mob/living/user, direction)
|
||||
var/obj/vehicle/ridden/wheelchair/motorized/our_chair = parent
|
||||
var/speed = our_chair.speed
|
||||
|
||||
Reference in New Issue
Block a user