mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 00:29:02 +01:00
Adds the Herculean Gravitronic Spinal Implant; An Athletics focused implant. (#84532)
## About The Pull Request Adds the Herculean Gravitronic Spinal Implant. A personal gravity dampener that affords the user improved physical performance without all the effort of actually working out. This implant improves the user's ability in a variety of minor but useful ways Including; 1) Faster climbing speeds with climbing hooks and ladders. (Athletics now also influences this time) 2) Slightly less damage from falling from a height. 3) Faster fireman lifting and placing onto tables. 4) An easier time working out and stronger in boxing. 5) Standing up just a bit faster. 6) Throwing things just a little further. 7) Tackle performance, including offense, defense and safety if you miss. You can improve the implant by using a gravity anomaly core on it, transforming it into an Atlas implant. This implant has considerably better bonuses compared to the baselines fairly minor even if numerous benefits. It also forces personal gravity to normal values. As a result, the total number of gravity anomaly cores is now 6.  Has some little floating rocks around your head while active. ## Why It's Good For The Game I attempted to add something fairly similar in the past, but didn't quite like simply making an entirely combat related implant. Instead, I've changed the concept towards generally improving some minor physical world interactions. Things that you may not really think about or notice. I really enjoy getting just slight tweaks to the small little gameplay activities that come up every so often, and even if this won't appeal to most players, I know someone will see this and think to find a way to make the most of the implant in some way that I didn't even think about. ## Changelog 🆑 add: Adds the Herculean Gravitronic Spinal Implant; an implant that makes you better at athletics. You can upgrade it into an Atlas implant using a gravity anomaly core. balance: Gravity anomaly cores have had their max number of cores reduces from 8 to 6. balance: Your athletic ability allows you to climb faster. /🆑
This commit is contained in:
@@ -86,6 +86,7 @@
|
||||
#define ORGAN_SLOT_MONSTER_CORE "monstercore"
|
||||
#define ORGAN_SLOT_RIGHT_ARM_AUG "r_arm_device"
|
||||
#define ORGAN_SLOT_LEFT_ARM_AUG "l_arm_device" //This one ignores alphabetical order cause the arms should be together
|
||||
#define ORGAN_SLOT_SPINE "spine"
|
||||
#define ORGAN_SLOT_STOMACH "stomach"
|
||||
#define ORGAN_SLOT_STOMACH_AID "stomach_aid"
|
||||
#define ORGAN_SLOT_THRUSTERS "thrusters"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Max amounts of cores you can make
|
||||
#define MAX_CORES_BLUESPACE 3
|
||||
#define MAX_CORES_GRAVITATIONAL 8
|
||||
#define MAX_CORES_GRAVITATIONAL 6
|
||||
#define MAX_CORES_FLUX 8
|
||||
#define MAX_CORES_VORTEX 1
|
||||
#define MAX_CORES_PYRO 8
|
||||
|
||||
@@ -405,6 +405,10 @@
|
||||
if(el_tail && (el_tail.wag_flags & WAG_WAGGING)) // lizard tail wagging is robust and can swat away assailants!
|
||||
defense_mod += 1
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = tackle_target.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
defense_mod += potential_spine.strength_bonus
|
||||
|
||||
// OF-FENSE
|
||||
var/mob/living/carbon/sacker = parent
|
||||
var/sacker_drunkenness = sacker.get_drunk_amount()
|
||||
@@ -437,6 +441,10 @@
|
||||
if(sacker_wing)
|
||||
attack_mod += 2
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = sacker.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
attack_mod += potential_spine.strength_bonus
|
||||
|
||||
if(ishuman(sacker))
|
||||
var/mob/living/carbon/human/human_sacker = sacker
|
||||
|
||||
@@ -500,6 +508,10 @@
|
||||
if(HAS_TRAIT(user, TRAIT_HEAD_INJURY_BLOCKED))
|
||||
oopsie_mod -= 6
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE) // Can't snap that spine if it's made of metal.
|
||||
if(istype(potential_spine))
|
||||
oopsie_mod -= potential_spine.strength_bonus
|
||||
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY))
|
||||
oopsie_mod += 6 //honk!
|
||||
|
||||
|
||||
@@ -98,6 +98,11 @@
|
||||
|
||||
if(honor_check(defender))
|
||||
var/strength_bonus = HAS_TRAIT(attacker, TRAIT_STRENGTH) ? 2 : 0 //Investing into genetic strength improvements makes you a better boxer
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = attacker.get_organ_slot(ORGAN_SLOT_SPINE) //Getting a cyberspine also pushes you further than just mere meat
|
||||
if(istype(potential_spine))
|
||||
strength_bonus *= potential_spine.strength_bonus
|
||||
|
||||
damage += round(athletics_skill * check_streak(attacker, defender) + strength_bonus)
|
||||
grant_experience = TRUE
|
||||
|
||||
|
||||
@@ -50,7 +50,19 @@
|
||||
playsound(user_turf, 'sound/effects/picaxe1.ogg', 50)
|
||||
var/list/effects = list(new /obj/effect/temp_visual/climbing_hook(target, away_dir), new /obj/effect/temp_visual/climbing_hook(user_turf, away_dir))
|
||||
|
||||
if(do_after(user, climb_time, target))
|
||||
// Our climbers athletics ability
|
||||
var/fitness_level = user.mind?.get_skill_level(/datum/skill/athletics)
|
||||
|
||||
// Misc bonuses to the climb speed.
|
||||
var/misc_multiplier = 1
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
misc_multiplier *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
var/final_climb_time = (climb_time - fitness_level) * misc_multiplier
|
||||
|
||||
if(do_after(user, final_climb_time, target))
|
||||
user.forceMove(target)
|
||||
uses--
|
||||
|
||||
|
||||
@@ -58,6 +58,10 @@
|
||||
if (is_heavy_gravity)
|
||||
stamina_exhaustion *= 1.5
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
stamina_exhaustion *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
if(HAS_TRAIT(user, TRAIT_STRENGTH)) //The strong get reductions to stamina damage taken while exercising
|
||||
stamina_exhaustion *= 0.5
|
||||
|
||||
|
||||
@@ -171,10 +171,14 @@
|
||||
var/workout_reps = total_workout_reps[user.mind.get_skill_level(/datum/skill/athletics)] * gravity_modifier
|
||||
// total stamina drain of 1 workout calculated based on the workout length
|
||||
var/stamina_exhaustion = FLOOR(user.maxHealth / workout_reps / WORKOUT_LENGTH, 0.1)
|
||||
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
stamina_exhaustion *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
if(HAS_TRAIT(user, TRAIT_STRENGTH)) //The strong get reductions to stamina damage taken while exercising
|
||||
stamina_exhaustion *= 0.5
|
||||
|
||||
|
||||
user.adjustStaminaLoss(stamina_exhaustion * seconds_per_tick)
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -105,7 +105,20 @@
|
||||
|
||||
/obj/structure/ladder/proc/start_travelling(mob/user, going_up)
|
||||
show_initial_fluff_message(user, going_up)
|
||||
if(do_after(user, travel_time, target = src, interaction_key = DOAFTER_SOURCE_CLIMBING_LADDER))
|
||||
|
||||
// Our climbers athletics ability
|
||||
var/fitness_level = user.mind?.get_skill_level(/datum/skill/athletics)
|
||||
|
||||
// Misc bonuses to the climb speed.
|
||||
var/misc_multiplier = 1
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
misc_multiplier *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
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)
|
||||
|
||||
/// The message shown when the player starts climbing the ladder
|
||||
|
||||
@@ -30,7 +30,14 @@
|
||||
var/mob/living/living_user = user
|
||||
occupied = TRUE
|
||||
living_user.balloon_alert_to_viewers("hauling...")
|
||||
var/succeeded = do_after(living_user, 8 SECONDS, src)
|
||||
|
||||
var/boulder_lift_speed = 8 SECONDS
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = living_user.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
boulder_lift_speed *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
var/succeeded = do_after(living_user, boulder_lift_speed, src)
|
||||
occupied = FALSE
|
||||
if (!succeeded)
|
||||
return
|
||||
|
||||
@@ -275,6 +275,11 @@
|
||||
else if(HAS_TRAIT(user, TRAIT_QUICK_CARRY))
|
||||
tableplace_delay = 2.75 SECONDS
|
||||
skills_space = " quickly"
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = user.get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
tableplace_delay *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
carried_mob.visible_message(span_notice("[user] begins to[skills_space] place [carried_mob] onto [src]..."),
|
||||
span_userdanger("[user] begins to[skills_space] place [carried_mob] onto [src]..."))
|
||||
if(do_after(user, tableplace_delay, target = carried_mob))
|
||||
|
||||
@@ -195,6 +195,11 @@
|
||||
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/internal/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
extra_throw_range += potential_spine.added_throw_range
|
||||
|
||||
newtonian_move(get_dir(target, src))
|
||||
thrown_thing.safe_throw_at(target, thrown_thing.throw_range + extra_throw_range, max(1,thrown_thing.throw_speed + power_throw), src, null, null, null, move_force)
|
||||
|
||||
|
||||
@@ -915,7 +915,7 @@
|
||||
|
||||
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/fitness_level = mind?.get_skill_level(/datum/skill/athletics) - 1
|
||||
if(HAS_TRAIT(src, TRAIT_QUICKER_CARRY))
|
||||
carrydelay -= 2 SECONDS
|
||||
else if(HAS_TRAIT(src, TRAIT_QUICK_CARRY))
|
||||
@@ -924,6 +924,10 @@
|
||||
// can remove up to 2 seconds at legendary
|
||||
carrydelay -= fitness_level * (1/3) SECONDS
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
carrydelay *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
if(carrydelay <= 3 SECONDS)
|
||||
skills_space = " very quickly"
|
||||
else if(carrydelay <= 4 SECONDS)
|
||||
|
||||
@@ -62,6 +62,12 @@
|
||||
. = SEND_SIGNAL(src, COMSIG_LIVING_Z_IMPACT, levels, impacted_turf)
|
||||
if(. & ZIMPACT_CANCEL_DAMAGE)
|
||||
return .
|
||||
// multiplier for the damage taken from falling
|
||||
var/damage_softening_multiplier = 1
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
damage_softening_multiplier *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
// If you are incapped, you probably can't brace yourself
|
||||
var/can_help_themselves = !incapacitated(IGNORE_RESTRAINTS)
|
||||
@@ -108,7 +114,7 @@
|
||||
new /obj/effect/temp_visual/mook_dust(impacted_turf)
|
||||
|
||||
if(body_position == STANDING_UP)
|
||||
var/damage_for_each_leg = round(incoming_damage / 2)
|
||||
var/damage_for_each_leg = round((incoming_damage / 2) * damage_softening_multiplier)
|
||||
apply_damage(damage_for_each_leg, BRUTE, BODY_ZONE_L_LEG, wound_bonus = -2.5 * levels)
|
||||
apply_damage(damage_for_each_leg, BRUTE, BODY_ZONE_R_LEG, wound_bonus = -2.5 * levels)
|
||||
else
|
||||
@@ -678,6 +684,13 @@
|
||||
|
||||
/mob/living/proc/get_up(instant = FALSE)
|
||||
set waitfor = FALSE
|
||||
|
||||
var/get_up_time = 1 SECONDS
|
||||
|
||||
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = get_organ_slot(ORGAN_SLOT_SPINE)
|
||||
if(istype(potential_spine))
|
||||
get_up_time *= potential_spine.athletics_boost_multiplier
|
||||
|
||||
if(!instant && !do_after(src, 1 SECONDS, src, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM), extra_checks = CALLBACK(src, TYPE_PROC_REF(/mob/living, rest_checks_callback)), interaction_key = DOAFTER_SOURCE_GETTING_UP, hidden = TRUE))
|
||||
return
|
||||
if(resting || body_position == STANDING_UP || HAS_TRAIT(src, TRAIT_FLOORED))
|
||||
|
||||
@@ -566,6 +566,24 @@
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_herculean
|
||||
name = "Herculean Gravitronic Spinal Implant"
|
||||
desc = "This gravitronic spinal interface allows the user to reduce the impact of gravity on their body, effectively improving athletic performance."
|
||||
id = "ci-herculean"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
construction_time = 4 SECONDS
|
||||
materials = list(
|
||||
/datum/material/iron =SMALL_MATERIAL_AMOUNT*5,
|
||||
/datum/material/titanium=SMALL_MATERIAL_AMOUNT*3,
|
||||
/datum/material/gold=SMALL_MATERIAL_AMOUNT*3,
|
||||
/datum/material/diamond =SMALL_MATERIAL_AMOUNT*5,
|
||||
)
|
||||
build_path = /obj/item/organ/internal/cyberimp/chest/spine
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_nutriment
|
||||
name = "Nutriment Pump Implant"
|
||||
desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are starving."
|
||||
|
||||
@@ -152,6 +152,7 @@
|
||||
"ci-breather",
|
||||
"ci-nutriment",
|
||||
"ci-thrusters",
|
||||
"ci-herculean",
|
||||
)
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
|
||||
|
||||
|
||||
@@ -260,3 +260,60 @@
|
||||
|
||||
deactivate(silent = TRUE)
|
||||
return FALSE
|
||||
|
||||
/obj/item/organ/internal/cyberimp/chest/spine
|
||||
name = "\improper Herculean gravitronic spinal implant"
|
||||
desc = "This gravitronic spinal interface is able to improve the athletics of a user, allowing them greater physical ability. \
|
||||
Contains a slot which can be upgraded with a gravity anomaly core, improving its performance."
|
||||
implant_color = "#15704c"
|
||||
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 range does our spinal implant grant us.
|
||||
var/added_throw_range = 2
|
||||
/// 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.
|
||||
var/core_applied = FALSE
|
||||
/// The overlay for our implant to indicate that, yes, this person has an implant inserted.
|
||||
var/mutable_appearance/stone_overlay
|
||||
|
||||
/obj/item/organ/internal/cyberimp/chest/spine/emp_act(severity)
|
||||
. = ..()
|
||||
if(!owner || . & EMP_PROTECT_SELF)
|
||||
return
|
||||
to_chat(owner, span_warning("You feel sheering pain as your body is crushed like a soda can!"))
|
||||
owner.apply_damage(20/severity, BRUTE, def_zone = BODY_ZONE_CHEST)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/chest/spine/on_mob_insert(mob/living/carbon/organ_owner, special, movement_flags)
|
||||
. = ..()
|
||||
stone_overlay = mutable_appearance(icon = 'icons/effects/effects.dmi', icon_state = "stone")
|
||||
organ_owner.add_overlay(stone_overlay)
|
||||
if(core_applied)
|
||||
organ_owner.AddElement(/datum/element/forced_gravity, 1)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/chest/spine/on_mob_remove(mob/living/carbon/organ_owner, special)
|
||||
. = ..()
|
||||
if(stone_overlay)
|
||||
organ_owner.cut_overlay(stone_overlay)
|
||||
stone_overlay = null
|
||||
if(core_applied)
|
||||
organ_owner.RemoveElement(/datum/element/forced_gravity, 1)
|
||||
|
||||
/obj/item/organ/internal/cyberimp/chest/spine/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
|
||||
. = ..()
|
||||
if(core_applied)
|
||||
user.balloon_alert(user, "core already installed!")
|
||||
return ITEM_INTERACT_BLOCKING
|
||||
|
||||
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
|
||||
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."
|
||||
qdel(tool)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 911 KiB After Width: | Height: | Size: 912 KiB |
Reference in New Issue
Block a user