From 30305feb24eee9877062f1943a9b207c9edd3355 Mon Sep 17 00:00:00 2001 From: EnterTheJake <102721711+EnterTheJake@users.noreply.github.com> Date: Tue, 15 Jul 2025 23:37:46 +0200 Subject: [PATCH] Balance changes to the Wizard MOD and energy shields. (#91932) ## About The Pull Request Wizard MOD is now bio,flash proof, and comes with the no slips module , and the Hilbert DNA lock module installed. Energy shield charges on the battle shield module have been reduced from 15 to 5 but now regenerate over time. energy shield charges are now only consumed if at least 3 damage is dealt to the bubble. ## Why It's Good For The Game atomization of this PR: https://github.com/tgstation/tgstation/pull/91702 so I'm just gonna copypaste the same reasoning. **Wiz Modsuit changes** Despite being the Mod given to arguably the highest possible threat a station should face, this thing is insanely underwhelming. It doesn't come packaged with even some basic immunities we would grant to our common antagonists, the charges are limited and once they expire this suit has nothing to offer besides basic space protection and some decent armor. The suit has been rebalanced to offer a wide array of protections and have the Shield charges regenerate overtime to a maximum of 5, and it no longer has any slowdown. You might also want to reconsider using this as crew.... "That's a lot of stuff Jake, won't this make the suit overpowered?" You can bet your spessman arse it will, Wizard is not supposed to be a balanced antagonist in any way shape or form, but an absolute force of chaos. Given how everything else in the game has been powercept over the Years, we left this poor dude behind, it's time to address that. **Energy Shield MOD changes** I don't think the Shield should expire if no damage (or a pitiful amount of) hits the bubble, these have already been nerfed to only have 1 charge, it shouldn't require so little firepower (or none of) to destroy. ## Changelog :cl: balance: Wiz suit is now bio,flash proof, comes with the no slip and Hilbert dna module installed, slowdown was removed. balance: Energy shield charges on the battlemage module have been reduced to 5 but now regenerate over time. balance: energy shield charges now require a minimum of 3 total damage to be consumed. removal: you can no longer buy additional shield charges for the suit using the spellbook. /:cl: --------- Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com> --- code/datums/components/shielded.dm | 18 ++---------------- .../equipment/spellbook_entries/defensive.dm | 9 ++------- code/modules/clothing/suits/wiz_robe.dm | 8 -------- code/modules/mod/mod_theme.dm | 4 ++-- code/modules/mod/mod_types.dm | 4 ++++ code/modules/mod/modules/modules_antag.dm | 19 +++++++++++-------- 6 files changed, 21 insertions(+), 41 deletions(-) diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index 53fc3308062..8be81267828 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -28,8 +28,6 @@ var/show_charge_as_alpha = FALSE /// The item we use for recharging var/recharge_path - /// Whether or not we lose a charge when hit by 0 damage items or projectiles - var/lose_charge_on_damageless = FALSE /// The cooldown tracking when we were last hit COOLDOWN_DECLARE(recently_hit_cd) @@ -73,7 +71,6 @@ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(lost_wearer)) RegisterSignal(parent, COMSIG_ITEM_HIT_REACT, PROC_REF(on_hit_react)) - RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(check_recharge_rune)) var/atom/shield = parent if(ismob(shield.loc)) var/mob/holder = shield.loc @@ -82,7 +79,7 @@ set_wearer(holder) /datum/component/shielded/UnregisterFromParent() - UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_ITEM_HIT_REACT, COMSIG_ATOM_ATTACKBY)) + UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_ITEM_HIT_REACT)) var/atom/shield = parent if(shield.loc == wearer) lost_wearer(src, wearer) @@ -175,7 +172,7 @@ if(lose_multiple_charges) // if the shield has health like damage we'll lose charges equal to the damage of the hit charge_loss = damage - else if(!lose_charge_on_damageless && !damage) + else if(damage < 3) charge_loss = 0 adjust_charge(-charge_loss) @@ -197,14 +194,3 @@ owner.visible_message(span_danger("[owner]'s shields deflect [attack_text] in a shower of sparks!")) if(current_charges <= 0) owner.visible_message(span_warning("[owner]'s shield overloads!")) - -/datum/component/shielded/proc/check_recharge_rune(datum/source, obj/item/recharge_rune, mob/living/user) - SIGNAL_HANDLER - - if(!istype(recharge_rune, recharge_path)) - return - . = COMPONENT_NO_AFTERATTACK - - adjust_charge(charge_recovery) - to_chat(user, span_notice("You charge \the [parent]. It can now absorb [current_charges] hits.")) - qdel(recharge_rune) diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm index 585385e9d2d..9a55eecd953 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/defensive.dm @@ -147,12 +147,7 @@ if(!user.dropItemToGround(user.wear_suit) || !user.dropItemToGround(user.head)) return mod.quick_activation() - -/datum/spellbook_entry/item/battlemage_charge - name = "Battlemage Armour Charges" - desc = "A powerful defensive rune, it will grant eight additional charges to a battlemage shield." - item_path = /obj/item/wizard_armour_charge - category = SPELLBOOK_CATEGORY_DEFENSIVE - cost = 1 + var/obj/item/mod/module/eradication_lock/lock_module = locate() in mod.modules + lock_module.used() #undef SPELLBOOK_CATEGORY_DEFENSIVE diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index c5d58e0bd16..4c3de4475f5 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -299,11 +299,3 @@ stickman.faction |= summoner.faction - FACTION_NEUTRAL //These bad boys shouldn't inherit the neutral faction from the crew COOLDOWN_START(src, summoning_cooldown, 3 SECONDS) - - -// The actual code for this is handled in the shielded component, see [/datum/component/shielded/proc/check_recharge_rune] -/obj/item/wizard_armour_charge - name = "battlemage shield charges" - desc = "A powerful rune that will increase the number of hits a suit of battlemage armour can take before failing.." - icon = 'icons/effects/anomalies.dmi' - icon_state = "flux" diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 1f9de066352..44e58ef580a 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -1494,8 +1494,8 @@ resistance_flags = FIRE_PROOF|ACID_PROOF max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT siemens_coefficient = 0 - complexity_max = DEFAULT_MAX_COMPLEXITY - 5 - slowdown_deployed = 0.25 + complexity_max = DEFAULT_MAX_COMPLEXITY + slowdown_deployed = 0 ui_theme = "wizard" inbuilt_modules = list(/obj/item/mod/module/anti_magic/wizard) allowed_suit_storage = list( diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm index 1b442ed9619..49d54d2372b 100644 --- a/code/modules/mod/mod_types.dm +++ b/code/modules/mod/mod_types.dm @@ -396,6 +396,10 @@ /obj/item/mod/module/energy_shield/wizard, /obj/item/mod/module/emp_shield/advanced, /obj/item/mod/module/quick_cuff, + /obj/item/mod/module/noslip, + /obj/item/mod/module/welding, + /obj/item/mod/module/rad_protection, + /obj/item/mod/module/eradication_lock, ) /obj/item/mod/control/pre_equipped/ninja diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index 7f9d113b124..27393e06961 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -140,8 +140,6 @@ var/charge_recovery = 1 /// Whether or not this shield can lose multiple charges. var/lose_multiple_charges = FALSE - /// The item path to recharge this shielkd. - var/recharge_path = null /// The icon file of the shield. var/shield_icon_file = 'icons/effects/effects.dmi' /// The icon_state of the shield. @@ -154,8 +152,16 @@ charges = max_charges /obj/item/mod/module/energy_shield/on_part_activation() - mod.AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ - charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, recharge_path = recharge_path, starting_charges = charges, shield_icon_file = shield_icon_file, shield_icon = shield_icon) + mod.AddComponent(\ + /datum/component/shielded, \ + max_charges = max_charges, \ + recharge_start_delay = recharge_start_delay, \ + charge_increment_delay = charge_increment_delay, \ + charge_recovery = charge_recovery, \ + lose_multiple_charges = lose_multiple_charges, \ + starting_charges = charges, \ + shield_icon_file = shield_icon_file, \ + shield_icon = shield_icon) RegisterSignal(mod.wearer, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(shield_reaction)) /obj/item/mod/module/energy_shield/on_part_deactivation(deleting = FALSE) @@ -188,12 +194,9 @@ icon_state = "battlemage_shield" idle_power_cost = 0 //magic use_energy_cost = 0 //magic too - max_charges = 15 - recharge_start_delay = 0 SECONDS - charge_recovery = 8 + max_charges = 5 shield_icon_file = 'icons/effects/magic.dmi' shield_icon = "mageshield" - recharge_path = /obj/item/wizard_armour_charge required_slots = list() ///Magic Nullifier - Protects you from magic.