Merge pull request #14113 from silicons/piggybacking

fixes piggybacking initial offsets. Also, adds the ability to carry around pAIs, because this totally won't result in more metaclique drama.
This commit is contained in:
Lin
2021-01-31 23:33:59 -06:00
committed by GitHub
5 changed files with 24 additions and 14 deletions

View File

@@ -37,7 +37,7 @@
qdel(src) qdel(src)
/datum/component/riding/proc/vehicle_mob_buckle(datum/source, mob/living/M, force) /datum/component/riding/proc/vehicle_mob_buckle(datum/source, mob/living/M, force)
handle_vehicle_offsets() handle_vehicle_offsets(M.buckled?.dir)
/datum/component/riding/proc/handle_vehicle_layer(dir) /datum/component/riding/proc/handle_vehicle_layer(dir)
var/atom/movable/AM = parent var/atom/movable/AM = parent

View File

@@ -938,24 +938,25 @@
admin_ticket_log(src, msg) admin_ticket_log(src, msg)
/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user) /mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user)
if(pulling == target && grab_state >= GRAB_AGGRESSIVE && stat == CONSCIOUS) var/GS_needed = istype(target, /mob/living/silicon/pai)? GRAB_PASSIVE : GRAB_AGGRESSIVE
if(pulling == target && grab_state >= GS_needed && stat == CONSCIOUS)
//If they dragged themselves and we're currently aggressively grabbing them try to piggyback //If they dragged themselves and we're currently aggressively grabbing them try to piggyback
if(user == target && can_piggyback(target)) if(user == target && can_piggyback(target))
piggyback(target) piggyback(target)
return return
//If you dragged them to you and you're aggressively grabbing try to fireman carry them //If you dragged them to you and you're aggressively grabbing try to fireman carry them
else if(user != target) else if(user == src)
if(user.a_intent == INTENT_GRAB) if(user.a_intent == INTENT_GRAB)
fireman_carry(target) fireman_carry(target)
return return
. = ..() . = ..()
//src is the user that will be carrying, target is the mob to be carried //src is the user that will be carrying, target is the mob to be carried
/mob/living/carbon/human/proc/can_piggyback(mob/living/carbon/target) /mob/living/carbon/human/proc/can_piggyback(mob/living/target)
return (istype(target) && target.stat == CONSCIOUS) return (iscarbon(target) || ispAI(target)) && target.stat == CONSCIOUS
/mob/living/carbon/human/proc/can_be_firemanned(mob/living/carbon/target) /mob/living/carbon/human/proc/can_be_firemanned(mob/living/carbon/target)
return (ishuman(target) && !CHECK_MOBILITY(target, MOBILITY_STAND)) return (ishuman(target) && !CHECK_MOBILITY(target, MOBILITY_STAND)) || ispAI(target)
/mob/living/carbon/human/proc/fireman_carry(mob/living/carbon/target) /mob/living/carbon/human/proc/fireman_carry(mob/living/carbon/target)
var/carrydelay = 50 //if you have latex you are faster at grabbing var/carrydelay = 50 //if you have latex you are faster at grabbing
@@ -974,7 +975,6 @@
if(do_after(src, carrydelay, TRUE, target)) if(do_after(src, carrydelay, TRUE, target))
//Second check to make sure they're still valid to be carried //Second check to make sure they're still valid to be carried
if(can_be_firemanned(target) && !incapacitated(FALSE, TRUE)) if(can_be_firemanned(target) && !incapacitated(FALSE, TRUE))
target.set_resting(FALSE, TRUE)
buckle_mob(target, TRUE, TRUE, 90, 1, 0, TRUE) buckle_mob(target, TRUE, TRUE, 90, 1, 0, TRUE)
return return
visible_message("<span class='warning'>[src] fails to fireman carry [target]!") visible_message("<span class='warning'>[src] fails to fireman carry [target]!")
@@ -992,13 +992,13 @@
if(target.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE)) if(target.incapacitated(FALSE, TRUE) || incapacitated(FALSE, TRUE))
target.visible_message("<span class='warning'>[target] can't hang onto [src]!</span>") target.visible_message("<span class='warning'>[target] can't hang onto [src]!</span>")
return return
buckle_mob(target, TRUE, TRUE, FALSE, 1, 2, FALSE) buckle_mob(target, TRUE, TRUE, 0, 1, 2, FALSE)
else else
visible_message("<span class='warning'>[target] fails to climb onto [src]!</span>") visible_message("<span class='warning'>[target] fails to climb onto [src]!</span>")
else else
to_chat(target, "<span class='warning'>You can't piggyback ride [src] right now!</span>") to_chat(target, "<span class='warning'>You can't piggyback ride [src] right now!</span>")
/mob/living/carbon/human/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, lying_buckle = FALSE, hands_needed = 0, target_hands_needed = 0, fireman = FALSE) /mob/living/carbon/human/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, lying_buckle = 0, hands_needed = 0, target_hands_needed = 0, fireman = FALSE)
if(!force)//humans are only meant to be ridden through piggybacking and special cases if(!force)//humans are only meant to be ridden through piggybacking and special cases
return return
if(!is_type_in_typecache(target, can_ride_typecache)) if(!is_type_in_typecache(target, can_ride_typecache))
@@ -1010,6 +1010,9 @@
riding_datum.ride_check_rider_restrained = TRUE riding_datum.ride_check_rider_restrained = TRUE
if(buckled_mobs && ((target in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled) if(buckled_mobs && ((target in buckled_mobs) || (buckled_mobs.len >= max_buckled_mobs)) || buckled)
return return
if(istype(target, /mob/living/silicon/pai))
hands_needed = 1
target_hands_needed = 0
var/equipped_hands_self var/equipped_hands_self
var/equipped_hands_target var/equipped_hands_target
if(hands_needed) if(hands_needed)

View File

@@ -71,7 +71,7 @@
var/list/datum/bioware = list() var/list/datum/bioware = list()
var/creamed = FALSE //to use with creampie overlays var/creamed = FALSE //to use with creampie overlays
var/static/list/can_ride_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot)) var/static/list/can_ride_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot, /mob/living/silicon/pai))
var/lastpuke = 0 var/lastpuke = 0
var/account_id var/account_id
var/last_fire_update var/last_fire_update

View File

@@ -143,6 +143,10 @@
custom_holoform.Grant(src) custom_holoform.Grant(src)
emitter_next_use = world.time + 10 SECONDS emitter_next_use = world.time + 10 SECONDS
/mob/living/silicon/pai/deployed/Initialize()
. = ..()
fold_out(TRUE)
/mob/living/silicon/pai/ComponentInitialize() /mob/living/silicon/pai/ComponentInitialize()
. = ..() . = ..()
if(possible_chassis[chassis]) if(possible_chassis[chassis])

View File

@@ -675,3 +675,6 @@ TURF_DIRT_THRESHOLD 100
## Default alpha of dirt on spawn ## Default alpha of dirt on spawn
DIRT_ALPHA_STARTING 127 DIRT_ALPHA_STARTING 127
## Allows pAI custom holoforms
PAI_CUSTOM_HOLOFORMS