diff --git a/code/__HELPERS/trait_helpers.dm b/code/__HELPERS/trait_helpers.dm index 4672f249459..0cfe2282881 100644 --- a/code/__HELPERS/trait_helpers.dm +++ b/code/__HELPERS/trait_helpers.dm @@ -265,6 +265,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai //quirk traits #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" +#define TRAIT_TABLE_LEAP "table_leap" //traits that should be properly converted to genetic mutations one day #define TRAIT_LASEREYES "laser_eyes" diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index ab5000d45d0..feedd77ab72 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -77,7 +77,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FLATTENED" = TRAIT_FLATTENED, "TRAIT_SM_HALLUCINATION_IMMUNE" = SM_HALLUCINATION_IMMUNE, "TRAIT_CONTORTED_BODY" = TRAIT_CONTORTED_BODY, - "TRAIT_DEFLECTS_PROJECTILES" = TRAIT_DEFLECTS_PROJECTILES + "TRAIT_DEFLECTS_PROJECTILES" = TRAIT_DEFLECTS_PROJECTILES, + "TRAIT_TABLE_LEAP" = TRAIT_TABLE_LEAP ), /obj/item = list( "TRAIT_SHOW_WIRE_INFO" = TRAIT_SHOW_WIRE_INFO, diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 44a234f3f49..e92418a3fae 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -164,6 +164,7 @@ singlemutcheck(H, GLOB.soberblock, MUTCHK_FORCED) H.dna.default_blocks.Add(GLOB.soberblock) H.check_mutations = 1 + ADD_TRAIT(H, TRAIT_TABLE_LEAP, ROUNDSTART_TRAIT) @@ -205,6 +206,7 @@ return var/datum/martial_art/cqc/under_siege/justacook = new justacook.teach(H) + ADD_TRAIT(H, TRAIT_TABLE_LEAP, ROUNDSTART_TRAIT) /datum/job/hydro diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 724c3269131..4b6c23dbddf 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -71,21 +71,30 @@ var/turf/T = src.loc if(!T || !istype(T)) return FALSE - usr.visible_message("[user] starts climbing onto \the [src]!") climber = user - if(!do_after(user, 50, target = src)) - climber = null - return FALSE + if(HAS_TRAIT(climber, TRAIT_TABLE_LEAP)) + user.visible_message("[user] gets ready to vault up onto [src]!") + if(!do_after(user, 0.5 SECONDS, target = src)) + climber = null + return FALSE + else + user.visible_message("[user] starts climbing onto [src]!") + if(!do_after(user, 5 SECONDS, target = src)) + climber = null + return FALSE if(!can_touch(user) || !climbable) climber = null return FALSE var/old_loc = usr.loc - usr.loc = get_turf(src) - usr.Moved(old_loc, get_dir(old_loc, usr.loc), FALSE) + user.loc = get_turf(src) + user.Moved(old_loc, get_dir(old_loc, usr.loc), FALSE) if(get_turf(user) == get_turf(src)) - usr.visible_message("[user] climbs onto \the [src]!") + if(HAS_TRAIT(climber, TRAIT_TABLE_LEAP)) + user.visible_message("[user] leaps up onto [src]!") + else + user.visible_message("[user] climbs onto [src]!") climber = null return TRUE