mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-10 01:34:01 +00:00
Herculean/Atlas implants get a few additional BOULDER/Equipment related benefits. Boulders are more robust. Natural Athletics gains. (#87469)
## About The Pull Request Herculean/Atlas spinal implants allow you to break boulders to process them manually. Doing so also grants athletics experience. They also increase the speed at which you throw objects, and also increase the range further. The Atlas version also allows you to reduce equipment movespeed penalties. (Fikou wanted me to do this for specifically modsuits, but I don't see any reason this can't apply to more than that, modsuits are just generally the slowest equipment you could wear) Boulders have 30 throw force, are by default HUGE, but have no throw range at all and really weak tk throw range. You need a throwing booster to throw boulders around. (They do extra damage to SPECIAL mobs, like lavaland bosses, because it's funny to kill a god-like being with a huge rock while slow as shit) You naturally get athletics experience by doing some actions. Fireman carrying, climbing tables/crates, climbing rope and climbing ladders give you a slow and steady stream of experience. Rope gives a larger amount if only because the process for doing so is destructive in some way (you have to get more climbing rope eventually, so there is an associated cost). Spinal implants now improve climbing speed for climbing over objects. ## Why It's Good For The Game I just had this strange compulsion to make the spinal implant make you good at throwing boulders at lethal speeds. It already has some cool rock-based special effects around you. Having mastery over rock throwing just kind of made sense. Additionally, I thought it would be a funny method for someone to be able to kill a boss via way of thrown boulders. Or some hapless nuclear operative unprepared for a bunch of assistants lobbing boulders at them. Additionally, I also think it letting you break boulders for ore is a fairly minor but fun addition. Pull boulders out of the vents, smash them. Good work out. Particularly for miners. I talked a while ago with I think Jacq about adding some natural methods for accumulating athletics experience over the course of a round that doesn't involve the dedicated weight lifting machinery/boxing bag. I thought any method for doing that should probably be relatively slow and definitely nonviable for significant athletics gains beyond novice level. Mooost people will hit novice on a multi-z map if they go up and down ladders enough. Or climb a lot of tables/crates. The results aren't going to have much noticeable impact, however, as you only gain appreciable benefits above novice. Probably just greater visibility of fitness in a round. (Rather nice for the RD, who gets to show off how swole they are more regularly). <details> <summary>Spoiler warning</summary>  </details> ## Changelog 🆑 balance: Herculean/Atlas spinal implants make you better at climbing tables, throw objects much faster and throw them much further. You can also break boulders with your bare hands. balance: Atlas implants let you offset the weight of worn/carried equipment (like boulders). balance: Boulders have no throw range, but if you can throw them via throwing range boosters (such as the spinal implant), they deal fairly large amounts of damage. Especially to powerful mobs like lavlaand bosses. balance: You naturally gain a small amount of athletics experience doing some tasks, such as climbing rope, ladders and tables/crates, fireman carrying, or smashing open boulders. /🆑
This commit is contained in:
@@ -62,8 +62,19 @@
|
||||
climbed_thing.add_fingerprint(user)
|
||||
user.visible_message(span_warning("[user] starts climbing onto [climbed_thing]."), \
|
||||
span_notice("You start climbing onto [climbed_thing]..."))
|
||||
// Time in deciseoncds it takes to complete the climb do_after()
|
||||
var/adjusted_climb_time = climb_time
|
||||
// Time in deciseonds that the mob is stunned after climbing successfully.
|
||||
var/adjusted_climb_stun = climb_stun
|
||||
// Our climbers fitness level, which removes some climb time and speeds up our climbing do_after, assuming they worked out
|
||||
var/fitness_level = user.mind?.get_skill_level(/datum/skill/athletics) - 1
|
||||
adjusted_climb_time = clamp(adjusted_climb_time - fitness_level, 1, climb_time) //Here we adjust the number of deciseconds we shave off per level of fitness, with a minimum of 1 decisecond and a maximum of climb_time (just in case)
|
||||
|
||||
var/obj/item/organ/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
adjusted_climb_time *= potential_spine.athletics_boost_multiplier
|
||||
adjusted_climb_stun *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
if(HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) //climbing takes twice as long without help from the hands.
|
||||
adjusted_climb_time *= 2
|
||||
if(isalien(user))
|
||||
@@ -88,6 +99,7 @@
|
||||
if(istype(buckle_target))
|
||||
if(buckle_target.is_buckle_possible(user))
|
||||
buckle_target.buckle_mob(user)
|
||||
user.mind?.adjust_experience(/datum/skill/athletics, 5) //Get a bit fitter with every climb.
|
||||
else
|
||||
to_chat(user, span_warning("You fail to climb onto [climbed_thing]."))
|
||||
LAZYREMOVEASSOC(current_climbers, climbed_thing, user)
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
if(do_after(user, final_climb_time, target))
|
||||
user.forceMove(target)
|
||||
uses--
|
||||
user.mind?.adjust_experience(/datum/skill/athletics, 50) //get some experience for our trouble, especially since this costs us a climbing rope use
|
||||
|
||||
if(uses <= 0)
|
||||
user.visible_message(span_warning("[src] snaps and tears apart!"))
|
||||
|
||||
@@ -119,14 +119,14 @@
|
||||
var/final_travel_time = (travel_time - fitness_level) * misc_multiplier
|
||||
|
||||
if(do_after(user, final_travel_time, target = src, interaction_key = DOAFTER_SOURCE_CLIMBING_LADDER))
|
||||
travel(user, going_up)
|
||||
travel(user, going_up, grant_exp = TRUE)
|
||||
|
||||
/// The message shown when the player starts climbing the ladder
|
||||
/obj/structure/ladder/proc/show_initial_fluff_message(mob/user, going_up)
|
||||
var/up_down = going_up ? "up" : "down"
|
||||
user.balloon_alert_to_viewers("climbing [up_down]...")
|
||||
|
||||
/obj/structure/ladder/proc/travel(mob/user, going_up = TRUE, is_ghost = FALSE)
|
||||
/obj/structure/ladder/proc/travel(mob/user, going_up = TRUE, is_ghost = FALSE, grant_exp = FALSE)
|
||||
var/obj/structure/ladder/ladder = going_up ? up : down
|
||||
if(!ladder)
|
||||
balloon_alert(user, "there's nothing that way!")
|
||||
@@ -138,6 +138,9 @@
|
||||
var/turf/target = get_turf(ladder)
|
||||
user.zMove(target = target, z_move_flags = ZMOVE_CHECK_PULLEDBY|ZMOVE_ALLOW_BUCKLED|ZMOVE_INCLUDE_PULLED)
|
||||
|
||||
if(grant_exp)
|
||||
user.mind?.adjust_experience(/datum/skill/athletics, 10) //get a little experience for our trouble
|
||||
|
||||
if(!is_ghost)
|
||||
show_final_fluff_message(user, ladder, going_up)
|
||||
|
||||
|
||||
@@ -9,7 +9,10 @@
|
||||
icon_state = "ore"
|
||||
icon = 'icons/obj/ore.dmi'
|
||||
item_flags = NO_MAT_REDEMPTION | SLOWS_WHILE_IN_HAND
|
||||
throw_range = 2
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
throwforce = 30 // Under normal circumstances, pretty much nobody can throw this.
|
||||
throw_range = 0
|
||||
tk_throw_range = 1 // Sorry, this is too cheesy, but maybe you can smash down doors with it.
|
||||
throw_speed = 0.5
|
||||
slowdown = 1.5
|
||||
drag_slowdown = 1.5 // It's still a big rock.
|
||||
@@ -28,6 +31,7 @@
|
||||
register_context()
|
||||
AddComponent(/datum/component/two_handed, require_twohands = TRUE, force_unwielded = 0, force_wielded = 5) //Heavy as all hell, it's a boulder, dude.
|
||||
AddComponent(/datum/component/sisyphus_awarder)
|
||||
AddElement(/datum/element/bane, mob_biotypes = MOB_SPECIAL, added_damage = 20, requires_combat_mode = FALSE)
|
||||
|
||||
/obj/item/boulder/Destroy(force)
|
||||
SSore_generation.available_boulders -= src
|
||||
@@ -144,6 +148,7 @@
|
||||
to_chat(user, span_notice("You finish working on \the [src], and it crumbles into ore."))
|
||||
playsound(src, 'sound/effects/rock/rock_break.ogg', 50)
|
||||
user.mind?.adjust_experience(/datum/skill/mining, MINING_SKILL_BOULDER_SIZE_XP * 0.2)
|
||||
user.mind?.adjust_experience(/datum/skill/athletics, MINING_SKILL_BOULDER_SIZE_XP * 0.2)
|
||||
qdel(src)
|
||||
return
|
||||
var/msg = (durability == 1 ? "is crumbling!" : "looks weaker!")
|
||||
|
||||
@@ -170,6 +170,13 @@
|
||||
if(start_T && end_T)
|
||||
log_combat(src, thrown_thing, "thrown", addition="grab from tile in [AREACOORD(start_T)] towards tile at [AREACOORD(end_T)]")
|
||||
var/power_throw = 0
|
||||
var/extra_throw_range = HAS_TRAIT(src, TRAIT_THROWINGARM) ? 2 : 0
|
||||
|
||||
var/obj/item/organ/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
power_throw += potential_spine.added_throw_speed
|
||||
extra_throw_range += potential_spine.added_throw_range
|
||||
|
||||
if(HAS_TRAIT(src, TRAIT_HULK))
|
||||
power_throw++
|
||||
if(HAS_TRAIT(src, TRAIT_DWARF))
|
||||
@@ -200,11 +207,6 @@
|
||||
visible_message(span_danger("[src] [verb_text][plural_s(verb_text)] [thrown_thing][power_throw_text]"), \
|
||||
span_danger("You [verb_text] [thrown_thing][power_throw_text]"))
|
||||
log_message("has thrown [thrown_thing] [power_throw_text]", LOG_ATTACK)
|
||||
var/extra_throw_range = HAS_TRAIT(src, TRAIT_THROWINGARM) ? 2 : 0
|
||||
|
||||
var/obj/item/organ/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
extra_throw_range += potential_spine.added_throw_range
|
||||
|
||||
var/drift_force = max(0.5 NEWTONS, 1 NEWTONS + power_throw)
|
||||
if (isitem(thrown_thing))
|
||||
|
||||
@@ -935,10 +935,13 @@
|
||||
var/carrydelay = 5 SECONDS //if you have latex you are faster at grabbing
|
||||
var/skills_space
|
||||
var/fitness_level = mind?.get_skill_level(/datum/skill/athletics) - 1
|
||||
var/experience_reward = 5
|
||||
if(HAS_TRAIT(src, TRAIT_QUICKER_CARRY))
|
||||
carrydelay -= 2 SECONDS
|
||||
experience_reward *= 3
|
||||
else if(HAS_TRAIT(src, TRAIT_QUICK_CARRY))
|
||||
carrydelay -= 1 SECONDS
|
||||
experience_reward *= 2
|
||||
|
||||
// can remove up to 2 seconds at legendary
|
||||
carrydelay -= fitness_level * (1/3) SECONDS
|
||||
@@ -946,6 +949,7 @@
|
||||
var/obj/item/organ/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
carrydelay *= potential_spine.athletics_boost_multiplier
|
||||
experience_reward += experience_reward * potential_spine.athletics_boost_multiplier
|
||||
|
||||
if(carrydelay <= 3 SECONDS)
|
||||
skills_space = " very quickly"
|
||||
@@ -963,6 +967,8 @@
|
||||
visible_message(span_warning("[src] fails to fireman carry [target]!"))
|
||||
return
|
||||
|
||||
mind?.adjust_experience(/datum/skill/athletics, experience_reward) //Get a bit fitter every time we fireman carry successfully. Deadlift your friends for gains!
|
||||
|
||||
return buckle_mob(target, TRUE, TRUE, CARRIER_NEEDS_ARM)
|
||||
|
||||
/mob/living/carbon/human/proc/piggyback(mob/living/carbon/target)
|
||||
|
||||
@@ -265,8 +265,10 @@
|
||||
slot = ORGAN_SLOT_SPINE
|
||||
/// How much faster does the spinal implant improve our lifting speed, workout ability, reducing falling damage and improving climbing and standing speed
|
||||
var/athletics_boost_multiplier = 0.8
|
||||
/// How much additional throwing speed does our spinal implant grant us.
|
||||
var/added_throw_speed = 1
|
||||
/// How much additional throwing range does our spinal implant grant us.
|
||||
var/added_throw_range = 2
|
||||
var/added_throw_range = 4
|
||||
/// How much additional boxing damage and tackling power do we add?
|
||||
var/strength_bonus = 4
|
||||
/// Whether or not a gravity anomaly core has been installed, improving the effectiveness of the spinal implant.
|
||||
@@ -285,16 +287,20 @@
|
||||
. = ..()
|
||||
stone_overlay = mutable_appearance(icon = 'icons/effects/effects.dmi', icon_state = "stone")
|
||||
organ_owner.add_overlay(stone_overlay)
|
||||
add_organ_trait(TRAIT_BOULDER_BREAKER)
|
||||
if(core_applied)
|
||||
organ_owner.AddElement(/datum/element/forced_gravity, 1)
|
||||
add_organ_trait(TRAIT_STURDY_FRAME)
|
||||
|
||||
/obj/item/organ/cyberimp/chest/spine/on_mob_remove(mob/living/carbon/organ_owner, special)
|
||||
. = ..()
|
||||
remove_organ_trait(TRAIT_BOULDER_BREAKER)
|
||||
if(stone_overlay)
|
||||
organ_owner.cut_overlay(stone_overlay)
|
||||
stone_overlay = null
|
||||
if(core_applied)
|
||||
organ_owner.RemoveElement(/datum/element/forced_gravity, 1)
|
||||
remove_organ_trait(TRAIT_STURDY_FRAME)
|
||||
|
||||
/obj/item/organ/cyberimp/chest/spine/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
. = ..()
|
||||
@@ -304,14 +310,26 @@
|
||||
|
||||
if(istype(tool, /obj/item/assembly/signaler/anomaly/grav))
|
||||
user.balloon_alert(user, "core installed.")
|
||||
athletics_boost_multiplier = 0.25
|
||||
added_throw_range += 2
|
||||
strength_bonus += 4
|
||||
name = /obj/item/organ/cyberimp/chest/spine/atlas::name
|
||||
desc = /obj/item/organ/cyberimp/chest/spine/atlas::desc
|
||||
athletics_boost_multiplier = /obj/item/organ/cyberimp/chest/spine/atlas::athletics_boost_multiplier
|
||||
added_throw_range = /obj/item/organ/cyberimp/chest/spine/atlas::added_throw_range
|
||||
added_throw_speed = /obj/item/organ/cyberimp/chest/spine/atlas::added_throw_speed
|
||||
strength_bonus = /obj/item/organ/cyberimp/chest/spine/atlas::strength_bonus
|
||||
core_applied = TRUE
|
||||
name = "\improper Atlas gravitonic spinal implant"
|
||||
desc = "This gravitronic spinal interface is able to improve the athletics of a user, allowing them greater physical ability. \
|
||||
This one has been improved through the installation of a gravity anomaly core, allowing for personal gravity manipulation."
|
||||
icon_state = "herculean_implant_core"
|
||||
update_appearance()
|
||||
qdel(tool)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
/obj/item/organ/cyberimp/chest/spine/atlas
|
||||
name = "\improper Atlas gravitonic spinal implant"
|
||||
desc = "This gravitronic spinal interface is able to improve the athletics of a user, allowing them greater physical ability. \
|
||||
This one has been improved through the installation of a gravity anomaly core, allowing for personal gravity manipulation. \
|
||||
Not only can you walk with your feet planted firmly on the ground even during a loss of enviromental gravity, but you also \
|
||||
carry heavier loads with relative ease."
|
||||
icon_state = "herculean_implant_core"
|
||||
athletics_boost_multiplier = 0.25
|
||||
added_throw_speed = 6
|
||||
added_throw_range = 8
|
||||
strength_bonus = 8
|
||||
core_applied = TRUE
|
||||
|
||||
Reference in New Issue
Block a user