diff --git a/code/__DEFINES/~~bubber_defines/traits.dm b/code/__DEFINES/~~bubber_defines/traits.dm index ec675566419..201be5fd1d0 100644 --- a/code/__DEFINES/~~bubber_defines/traits.dm +++ b/code/__DEFINES/~~bubber_defines/traits.dm @@ -1 +1,2 @@ #define TRAIT_HYDROPHILIC "hydrophilic" +#define TRAIT_CAN_BE_PICKED_UP "can_be_picked_up" diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 3bed8145222..d5c24c7a50c 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -37,6 +37,9 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list( list(/datum/quirk/oversized, /datum/quirk/freerunning), list(/datum/quirk/oversized, /datum/quirk/item_quirk/settler), //SKYRAT EDIT ADDITION END + //BUBBER EDIT ADDITION BEGIN + list(/datum/quirk/featherweight, /datum/quirk/oversized), + //BUBBER EDIT ADDITION END )) GLOBAL_LIST_INIT(quirk_string_blacklist, generate_quirk_string_blacklist()) diff --git a/modular_zubbers/code/datums/components/datums/riding_mob.dm b/modular_zubbers/code/datums/components/datums/riding_mob.dm new file mode 100644 index 00000000000..08f2928c1ae --- /dev/null +++ b/modular_zubbers/code/datums/components/datums/riding_mob.dm @@ -0,0 +1,63 @@ +#define DEFAULT_IN_HAND_OFFSET_X 3 +#define DEFAULT_IN_HAND_OFFSET_Y 0 + +/datum/component/riding/creature/human + var/obj/item/bodypart/used_hand + +/datum/component/riding/creature/human/Initialize(mob/living/riding_mob, force, ride_check_flags, potion_boost) + . = ..() + var/mob/living/carbon/human/human_parent = parent + if(ride_check_flags & CARRIER_NEEDS_ARM && HAS_TRAIT(riding_mob, TRAIT_CAN_BE_PICKED_UP)) + human_parent.buckle_lying = 0 + used_hand = human_parent.get_active_hand() + ADD_TRAIT(riding_mob, TRAIT_UNDENSE, VEHICLE_TRAIT) + + +/datum/component/riding/creature/human/vehicle_mob_unbuckle(datum/source, mob/living/former_rider, force = FALSE) + . = ..() + former_rider.set_density(TRUE) + if((ride_check_flags & CARRIER_NEEDS_ARM) && HAS_TRAIT(former_rider, TRAIT_CAN_BE_PICKED_UP)) + REMOVE_TRAIT(former_rider, TRAIT_UNDENSE, VEHICLE_TRAIT) + +/datum/component/riding/creature/human/handle_vehicle_offsets(dir) + . = ..() + var/mob/living/carbon/human/human_parent = parent + + for(var/mob/living/rider in human_parent.buckled_mobs) + if(!HAS_TRAIT(rider, TRAIT_CAN_BE_PICKED_UP)) + continue + + var/target_pixel_y = DEFAULT_IN_HAND_OFFSET_X + var/target_pixel_x = DEFAULT_IN_HAND_OFFSET_Y + var/offset_hand = used_hand.body_zone + + if(dir == NORTH && offset_hand == BODY_ZONE_L_ARM) + target_pixel_x -= 6 + else if(dir == NORTH && offset_hand == BODY_ZONE_R_ARM) + target_pixel_x += 6 + else if(dir == SOUTH && offset_hand == BODY_ZONE_L_ARM) + target_pixel_x += 6 + else if(dir == SOUTH && offset_hand == BODY_ZONE_R_ARM) + target_pixel_x -= 6 + else if(dir == EAST) + target_pixel_x += 3 + else + target_pixel_x -= 3 + + rider.pixel_y = target_pixel_y + rider.pixel_x = target_pixel_x + +/datum/component/riding/creature/human/handle_vehicle_layer(dir) + . = ..() + var/mob/living/carbon/human/human_parent = parent + + for(var/mob/living/rider in human_parent.buckled_mobs) + if(!HAS_TRAIT(rider, TRAIT_CAN_BE_PICKED_UP)) + continue + var/target_layer = MOB_ABOVE_PIGGYBACK_LAYER + 0.10 + if(dir == NORTH) + target_layer -= 0.30 + rider.layer = target_layer + +#undef DEFAULT_IN_HAND_OFFSET_X +#undef DEFAULT_IN_HAND_OFFSET_Y diff --git a/modular_zubbers/code/game/traits/positive.dm b/modular_zubbers/code/game/traits/positive.dm new file mode 100644 index 00000000000..6c8af13de62 --- /dev/null +++ b/modular_zubbers/code/game/traits/positive.dm @@ -0,0 +1,11 @@ +/datum/quirk/featherweight + name = "Featherweight" + desc = "Your body is lighter than others'. You can be picked up by the scruff or collar with ease." + value = 1 + icon = FA_ICON_FEATHER + medical_record_text = "Subject's body is lighter than usual, they can be carried with relative ease." + gain_text = "Your body feels lighter!" + lose_text = "Your body feels slightly more dense." + quirk_flags = QUIRK_HUMAN_ONLY + mob_trait = TRAIT_CAN_BE_PICKED_UP + mail_goodies = list(/obj/item/food/lollipop) diff --git a/tgstation.dme b/tgstation.dme index 00fb2c7ecd3..ba0f8c33b38 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8210,6 +8210,7 @@ #include "modular_zubbers\code\datums\components\crafting\utility.dm" #include "modular_zubbers\code\datums\components\crafting\crafting\furniture.dm" #include "modular_zubbers\code\datums\components\crafting\crafting\melee_weapon.dm" +#include "modular_zubbers\code\datums\components\datums\riding_mob.dm" #include "modular_zubbers\code\datums\computer_datums\protolathe_modifications.dm" #include "modular_zubbers\code\datums\diseases\advance\presets.dm" #include "modular_zubbers\code\datums\greyscale\config_types\greyscale_configs\greyscale_clothes.dm" @@ -8296,6 +8297,7 @@ #include "modular_zubbers\code\game\objects\structures\plaques\static_plaques.dm" #include "modular_zubbers\code\game\traits\negative.dm" #include "modular_zubbers\code\game\traits\neutral.dm" +#include "modular_zubbers\code\game\traits\positive.dm" #include "modular_zubbers\code\game\turfs\change_turf.dm" #include "modular_zubbers\code\game\turfs\closed\lunar_cave.dm" #include "modular_zubbers\code\game\turfs\closed\lunar_surface.dm"