diff --git a/_maps/map_files/MetaStation/z2.dmm b/_maps/map_files/MetaStation/z2.dmm
index 4dcf9a2797b..446079ebd0c 100644
--- a/_maps/map_files/MetaStation/z2.dmm
+++ b/_maps/map_files/MetaStation/z2.dmm
@@ -4443,7 +4443,7 @@
"mp" = (
/obj/effect/decal/cleanable/blood/splatter,
/obj/structure/rack,
-/obj/item/clothing/suit/space/hardsuit/wizard,
+/obj/item/clothing/suit/space/hardsuit/shielded/wizard,
/turf/unsimulated/floor{
tag = "icon-cultdamage";
icon_state = "cultdamage"
diff --git a/_maps/map_files/RandomZLevels/academy.dmm b/_maps/map_files/RandomZLevels/academy.dmm
index 87f3573eb00..03c8b8919e4 100644
--- a/_maps/map_files/RandomZLevels/academy.dmm
+++ b/_maps/map_files/RandomZLevels/academy.dmm
@@ -238,7 +238,7 @@
/turf/simulated/floor/wood,
/area/awaymission/academy/headmaster)
"aL" = (
-/obj/item/clothing/suit/space/hardsuit/wizard,
+/obj/item/clothing/suit/space/hardsuit/shielded/wizard,
/obj/structure/table/wood,
/obj/item/stack/sheet/mineral/silver{
amount = 20
diff --git a/_maps/map_files/cyberiad/z2.dmm b/_maps/map_files/cyberiad/z2.dmm
index c7620721a8c..ba60ea44f3b 100644
--- a/_maps/map_files/cyberiad/z2.dmm
+++ b/_maps/map_files/cyberiad/z2.dmm
@@ -9053,7 +9053,7 @@
pixel_x = -3;
pixel_y = 3
},
-/obj/item/clothing/suit/space/hardsuit/wizard,
+/obj/item/clothing/suit/space/hardsuit/shielded/wizard,
/obj/item/clothing/suit/space/santa{
pixel_x = 3;
pixel_y = -3
diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm
index ff8a93d3df0..93e4015233b 100644
--- a/code/datums/outfits/outfit_admin.dm
+++ b/code/datums/outfits/outfit_admin.dm
@@ -810,7 +810,7 @@
/datum/outfit/admin/hardsuit/wizard
name = "Wizard Hardsuit"
- suit = /obj/item/clothing/suit/space/hardsuit/wizard
+ suit = /obj/item/clothing/suit/space/hardsuit/shielded/wizard
shoes = /obj/item/clothing/shoes/magboots
/datum/outfit/admin/hardsuit/medical
@@ -1100,7 +1100,7 @@
l_hand = null
backpack_contents = list(
/obj/item/storage/box/engineer = 1,
- /obj/item/clothing/suit/space/hardsuit/wizard = 1,
+ /obj/item/clothing/suit/space/hardsuit/shielded/wizard = 1,
/obj/item/clothing/shoes/magboots = 1,
/obj/item/kitchen/knife/ritual = 1,
/obj/item/clothing/suit/wizrobe/red = 1,
diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm
index 76ac6dc603f..5f2dc094724 100644
--- a/code/game/gamemodes/wizard/rightandwrong.dm
+++ b/code/game/gamemodes/wizard/rightandwrong.dm
@@ -66,7 +66,7 @@ GLOBAL_LIST_INIT(summoned_magic, list(
/obj/item/gun/magic/staff/door,
/obj/item/scrying,
/obj/item/voodoo,
- /obj/item/clothing/suit/space/hardsuit/wizard,
+ /obj/item/clothing/suit/space/hardsuit/shielded/wizard,
/obj/item/immortality_talisman,
/obj/item/melee/ghost_sword))
@@ -83,7 +83,7 @@ GLOBAL_LIST_INIT(summoned_special_magic, list(
GLOBAL_LIST_INIT(summoned_magic_objectives, list(
/obj/item/contract,
/obj/item/blood_contract,
- /obj/item/clothing/suit/space/hardsuit/wizard,
+ /obj/item/clothing/suit/space/hardsuit/shielded/wizard,
/obj/item/gun/magic,
/obj/item/immortality_talisman,
/obj/item/melee/ghost_sword,
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index 69bcfeb4a7a..d2842c21c24 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -444,18 +444,21 @@
category = "Artefacts"
//Weapons and Armors
-/datum/spellbook_entry/item/armor
- name = "Mastercrafted Armor Set"
- desc = "An artefact suit of armor that allows you to cast spells while providing more protection against attacks and the void of space. Comes bundled with Boots of Gripping."
- item_path = /obj/item/clothing/suit/space/hardsuit/wizard
- log_name = "HS"
+/datum/spellbook_entry/item/battlemage
+ name = "Battlemage Armour"
+ desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted."
+ item_path = /obj/item/clothing/suit/space/hardsuit/shielded/wizard
+ limit = 1
category = "Weapons and Armors"
+ log_name = "BMA"
-/datum/spellbook_entry/item/armor/Buy(var/mob/living/carbon/human/user,var/obj/item/spellbook/book)
- . = ..()
- if(.)
- new /obj/item/clothing/shoes/sandal(get_turf(user)) //In case they've lost them.
- new /obj/item/clothing/gloves/color/purple(get_turf(user)) // To complete the outfit
+/datum/spellbook_entry/item/battlemage_charge
+ name = "Battlemage Armour Charges"
+ desc = "A powerful defensive rune, it will grant eight additional charges to a suit of battlemage armour."
+ item_path = /obj/item/wizard_armour_charge
+ category = "Weapons and Armors"
+ cost = 1
+ log_name = "BMAC"
/datum/spellbook_entry/item/mjolnir
name = "Mjolnir"
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 37a99a54682..d37c6fe9807 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -579,6 +579,9 @@ BLIND // can't see anything
else
..() //This is required in order to ensure that the UI buttons for items that have alternate functions tied to UI buttons still work.
+/obj/item/clothing/suit/proc/special_overlays() // Does it have special overlays when worn?
+ return FALSE
+
//Spacesuit
//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together.
// Meaning the the suit is defined directly after the corrisponding helmet. Just like below!
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index a00c1b5270b..9e78a4feb16 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -405,33 +405,6 @@
/obj/item/clothing/head/helmet/space/hardsuit/syndi/freedom/update_icon()
return
-//Wizard hardsuit
-/obj/item/clothing/head/helmet/space/hardsuit/wizard
- name = "gem-encrusted hardsuit helmet"
- desc = "A bizarre gem-encrusted helmet that radiates magical energies."
- icon_state = "hardsuit0-wiz"
- item_state = "wiz_helm"
- item_color = "wiz"
- unacidable = TRUE //No longer shall our kind be foiled by lone chemists with spray bottles!
- armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50)
- heat_protection = HEAD //Uncomment to enable firesuit protection
- max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- magical = TRUE
-
-/obj/item/clothing/suit/space/hardsuit/wizard
- icon_state = "hardsuit-wiz"
- name = "gem-encrusted hardsuit"
- desc = "A bizarre gem-encrusted suit that radiates magical energies."
- item_state = "wiz_hardsuit"
- w_class = WEIGHT_CLASS_NORMAL
- unacidable = TRUE
- armor = list(melee = 40, bullet = 40, laser = 40, energy = 20, bomb = 35, bio = 100, rad = 50)
- allowed = list(/obj/item/teleportation_scroll,/obj/item/tank)
- heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection
- max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- helmettype = /obj/item/clothing/head/helmet/space/hardsuit/wizard
- magical = TRUE
-
//Medical hardsuit
/obj/item/clothing/head/helmet/space/hardsuit/medical
name = "medical hardsuit helmet"
@@ -525,23 +498,24 @@
var/recharge_rate = 1 //How quickly the shield recharges once it starts charging
var/shield_state = "shield-old"
var/shield_on = "shield-old"
- sprite_sheets = null
/obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
+ recharge_cooldown = world.time + recharge_delay
if(current_charges > 0)
do_sparks(2, 1, src)
owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!")
current_charges--
- recharge_cooldown = world.time + recharge_delay
- START_PROCESSING(SSobj, src)
+ if(recharge_rate)
+ START_PROCESSING(SSobj, src)
if(current_charges <= 0)
- owner.visible_message("[owner]'s shield overloads!")
+ owner.visible_message("[owner]'s shield overloads!")
shield_state = "broken"
owner.update_inv_wear_suit()
return 1
return 0
+
/obj/item/clothing/suit/space/hardsuit/shielded/Destroy()
STOP_PROCESSING(SSobj, src)
return ..()
@@ -549,15 +523,18 @@
/obj/item/clothing/suit/space/hardsuit/shielded/process()
if(world.time > recharge_cooldown && current_charges < max_charges)
current_charges = Clamp((current_charges + recharge_rate), 0, max_charges)
- playsound(loc, 'sound/magic/charge.ogg', 50, 1)
+ playsound(loc, 'sound/magic/charge.ogg', 50, TRUE)
if(current_charges == max_charges)
- playsound(loc, 'sound/machines/ding.ogg', 50, 1)
+ playsound(loc, 'sound/machines/ding.ogg', 50, TRUE)
STOP_PROCESSING(SSobj, src)
shield_state = "[shield_on]"
- if(istype(loc, /mob/living/carbon/human))
+ if(ishuman(loc))
var/mob/living/carbon/human/C = loc
C.update_inv_wear_suit()
+/obj/item/clothing/suit/space/hardsuit/shielded/special_overlays()
+ return mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01)
+
//////Syndicate Version
/obj/item/clothing/suit/space/hardsuit/shielded/syndi
@@ -571,14 +548,25 @@
slowdown = 0
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi
jetpack = /obj/item/tank/jetpack/suit
- sprite_sheets = list(
- "Unathi" = 'icons/mob/species/unathi/suit.dmi',
- "Tajaran" = 'icons/mob/species/tajaran/suit.dmi',
- "Skrell" = 'icons/mob/species/skrell/suit.dmi',
- "Vox" = 'icons/mob/species/vox/suit.dmi',
- "Vulpkanin" = 'icons/mob/species/vulpkanin/suit.dmi',
- "Drask" = 'icons/mob/species/drask/suit.dmi'
- )
+
+/obj/item/clothing/suit/space/hardsuit/shielded/syndi/attackby(obj/item/I, mob/user, params)
+ if(ismultitool(I))
+ if(shield_state == "broken")
+ to_chat(user, "You can't interface with the hardsuit's software if the shield's broken!")
+ return
+
+ if(shield_state == "shield-red")
+ shield_state = "shield-old"
+ shield_on = "shield-old"
+ to_chat(user, "You roll back the hardsuit's software, changing the shield's color!")
+
+ else
+ shield_state = "shield-red"
+ shield_on = "shield-red"
+ to_chat(user, "You update the hardsuit's hardware, changing back the shield's color to red.")
+ user.update_inv_wear_suit()
+ return
+ return ..()
/obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi
name = "blood-red hardsuit helmet"
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index 4329f3e04f4..69ccaf53b7b 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -154,4 +154,57 @@
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
unacidable = 0
burn_state = FLAMMABLE
- magical = FALSE
\ No newline at end of file
+ magical = FALSE
+
+//Shielded Armour
+
+/obj/item/clothing/suit/space/hardsuit/shielded/wizard
+ name = "battlemage armour"
+ desc = "Not all wizards are afraid of getting up close and personal."
+ icon_state = "hardsuit-wiz"
+ item_state = "wiz_hardsuit"
+ recharge_rate = 0
+ current_charges = 15
+ recharge_cooldown = INFINITY
+ shield_state = "shield-red"
+ shield_on = "shield-red"
+ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
+ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard
+ armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20, fire = 100, acid = 100)
+ slowdown = 0
+ unacidable = TRUE
+ burn_state = FIRE_PROOF
+ magical = TRUE
+
+/obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard
+ name = "battlemage helmet"
+ desc = "A suitably impressive helmet."
+ icon_state = "hardsuit0-wiz"
+ item_state = "wiz_helm"
+ item_color = "wiz"
+ min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
+ armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 20, bio = 20, rad = 20, fire = 100, acid = 100)
+ actions_types = null //No inbuilt light
+ unacidable = TRUE
+ burn_state = FIRE_PROOF
+ magical = TRUE
+
+/obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard/attack_self(mob/user)
+ return
+
+/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/effects.dmi'
+ icon_state = "electricity2"
+
+/obj/item/wizard_armour_charge/afterattack(obj/item/clothing/suit/space/hardsuit/shielded/wizard/W, mob/user)
+ . = ..()
+ if(!istype(W))
+ to_chat(user, "The rune can only be used on battlemage armour!")
+ return
+ W.current_charges += 8
+ to_chat(user, "You charge [W]. It can now absorb [W.current_charges] hits.")
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 0019aefbad3..19c6b27cfdb 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1573,7 +1573,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
threatcount += 2
//Check for dresscode violations
- if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard))
+ if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard))
threatcount += 2
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 05dfbd0e302..eeda9f87461 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -893,6 +893,11 @@ var/global/list/damage_icon_parts = list()
bloodsies.color = wear_suit.blood_color
standing.overlays += bloodsies
+
+ var/special_overlays = wear_suit.special_overlays()
+ if(special_overlays)
+ standing.overlays += special_overlays
+
standing.alpha = wear_suit.alpha
standing.color = wear_suit.color
overlays_standing[SUIT_LAYER] = standing