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