diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index c1a2bf0f473..440000a8388 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -1,3 +1,4 @@ +// Repairs robotic limbs and silicon mobs, with a limited number of uses. /obj/item/stack/nanopaste name = "nanopaste" singular_name = "nanite swarm" @@ -10,7 +11,16 @@ amount = 10 surgerysound = 'sound/items/surgery/bonegel.ogg' + desc_extended = "It takes significantly longer to apply nanopaste to yourself than it does to apply it to others. Nanites are best enjoyed with a friend!" + + /// What materials does it take to fabricate nanopaste? var/list/construction_cost = list(DEFAULT_WALL_MATERIAL = 7000, MATERIAL_GLASS = 7000) + /// How long does it take to apply nanopaste? + var/time_to_apply = 2 SECONDS + /// Multiplier applied to time_to_apply, if we want it to take longer in some situations. + var/application_multiplier = 5 + /// Used to prevent applying nanopaste multiple times at once. + var/application_in_progress = FALSE /obj/item/stack/nanopaste/update_icon() var/amount = round(get_amount() / 2) @@ -23,6 +33,8 @@ check_maptext(SMALL_FONTS(7, amount)) /obj/item/stack/nanopaste/attack(mob/living/target_mob, mob/living/user, target_zone) + var/application_time = time_to_apply // Local variant declared inside the proc so changes to it do not persist. + if(!ismob(target_mob) || !istype(user)) return 0 if (!can_use(1, user)) @@ -31,14 +43,26 @@ if (isrobot(target_mob)) //Repairing cyborgs var/mob/living/silicon/robot/R = target_mob if (R.getBruteLoss() || R.getFireLoss() ) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(do_mob(user, target_mob, 7)) - R.adjustBruteLoss(-15) - R.adjustFireLoss(-15) - R.updatehealth() - use(1) - user.visible_message(SPAN_NOTICE("\The [user] applied some [src] at [R]'s damaged areas."),\ - SPAN_NOTICE("You apply some [src] at [R]'s damaged areas.")) + + if(target_mob == user) + application_time *= application_multiplier // It takes longer to apply nanopaste to yourself than to someone else. + + if (application_in_progress == FALSE) + application_in_progress = TRUE + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + user.visible_message(SPAN_NOTICE("\The [user] begins to apply some [src] to \the [target_mob]."),\ + SPAN_NOTICE("You begin to apply some [src] to \the [target_mob].")) + if(do_mob(user, target_mob, application_time)) + R.adjustBruteLoss(-15) + R.adjustFireLoss(-15) + R.updatehealth() + use(1) + user.visible_message(SPAN_NOTICE("\The [user] successfully applies some [src] at [R]'s damaged areas."),\ + SPAN_NOTICE("You successfully apply some [src] at [R]'s damaged areas.")) + application_in_progress = FALSE + else + to_chat(user, SPAN_WARNING("You are too focused applying \the [src] to do it multiple times simultaneously!")) + else to_chat(user, SPAN_NOTICE("All [R]'s systems are nominal.")) @@ -58,13 +82,23 @@ if(H.wear_suit && istype(H.wear_suit,/obj/item/clothing/suit/space)) to_chat(user, SPAN_WARNING("You can't apply [src] through [H.wear_suit]!")) return + if(target_mob == user) + application_time *= application_multiplier // It takes longer to apply nanopaste to yourself than to someone else. + + if (application_in_progress == FALSE) + application_in_progress = TRUE + user.visible_message(SPAN_NOTICE("\The [user] begins to apply some nanite paste at[user != target_mob ? " \the [target_mob]'s" : " \the [user]"] [S.name] with \the [src]."),\ + SPAN_NOTICE("You begin to apply some nanite paste at[user != target_mob ? " \the [target_mob]'s" : " \the [user]"] [S.name] with \the [src].")) + if(do_mob(user, target_mob, application_time)) + S.heal_damage(15, 15, robo_repair = 1) + H.updatehealth() + use(1) + user.visible_message(SPAN_NOTICE("\The [user] successfully applies some nanite paste at[user != target_mob ? " \the [target_mob]'s" : " \the [user]"] [S.name] with \the [src]."),\ + SPAN_NOTICE("You successfully apply some nanite paste at [user == target_mob ? "your" : "[target_mob]'s"] [S.name].")) + application_in_progress = FALSE + else + to_chat(user, SPAN_WARNING("You are too focused applying \the [src] to do it multiple times simultaneously!")) - if(do_mob(user, target_mob, 7)) - S.heal_damage(15, 15, robo_repair = 1) - H.updatehealth() - use(1) - user.visible_message(SPAN_NOTICE("\The [user] applies some nanite paste at[user != target_mob ? " \the [target_mob]'s" : " \the [user]"] [S.name] with \the [src]."),\ - SPAN_NOTICE("You apply some nanite paste at [user == target_mob ? "your" : "[target_mob]'s"] [S.name].")) else to_chat(user, SPAN_NOTICE("Nothing to fix here.")) else @@ -75,6 +109,8 @@ to_chat(user, SPAN_NOTICE("Nothing to fix in here.")) +// Antagonist-specific nanopaste. Functions similarly to usual nanopaste, except that it also applies a surge protection organ to the target. +// This organ protects the target from a specific number of EMPs. Intended to provide antagonist IPCs counterplay to ions. /obj/item/stack/nanopaste/surge name = "modified nanopaste" singular_name = "nanite swarm" diff --git a/html/changelogs/hazelmouse-nanopastebalancechanges.yml b/html/changelogs/hazelmouse-nanopastebalancechanges.yml new file mode 100644 index 00000000000..96348ff90f8 --- /dev/null +++ b/html/changelogs/hazelmouse-nanopastebalancechanges.yml @@ -0,0 +1,60 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: hazelmouse + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - balance: "Nanopaste now takes around twice as long to apply to other mobs as before, and five times as long as that to apply to yourself. If you want to be repaired quickly, find a buddy to apply it for you!" + - balance: "Nanopaste can no longer be applied multiple times simultaneously." + - code_imp: "Expanded documentation to nanopaste code."