diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index ea2854480a8..f028cef8a2f 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -10,7 +10,7 @@ active_power_usage = 40000 //40 kW var/efficiency = 40000 //will provide the modified power rate when upgraded var/obj/item/charging = null - var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/suit_cooling_unit/emergency, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit, /obj/item/ammo_casing/microbattery, /obj/item/device/paicard) //VOREStation Add - NSFW Batteries + var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/suit_cooling_unit/emergency, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit, /obj/item/ammo_casing/microbattery, /obj/item/device/paicard, /obj/item/device/personal_shield_generator) //VOREStation Add - NSFW Batteries var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" var/icon_state_idle = "recharger0" //also when unpowered diff --git a/code/game/objects/items/devices/personal_shield_generator_vr.dm b/code/game/objects/items/devices/personal_shield_generator_vr.dm index 541eaa38cdb..06e306c3e92 100644 --- a/code/game/objects/items/devices/personal_shield_generator_vr.dm +++ b/code/game/objects/items/devices/personal_shield_generator_vr.dm @@ -38,6 +38,7 @@ var/has_weapon = 1 // Backpack units generally have weapons. var/shield_active = 0 // If the shield gen is active. + var/effect_color = "#99FFFF" // Allows for changing shield colors. Default cyan. /obj/item/device/personal_shield_generator/get_cell() return bcell @@ -101,6 +102,18 @@ add_overlay("[initial(icon_state)]-nocell") */ +/obj/item/device/personal_shield_generator/emp_act(severity) + if(bcell) + switch(severity) + if(1) //Point blank EMP shots have a good chance of burning the cell charge." + if(prob(50)) + bcell.emp_act(severity) + bcell.corrupt() + else + if(prob(25)) + bcell.emp_act(severity) + ..() + /obj/item/device/personal_shield_generator/ui_action_click() toggle_shield() @@ -156,6 +169,10 @@ active_weapon.power_supply = null //No power cell anymore! to_chat(user, "You remove the cell from \the [src].") update_icon() + else if(istype(W,/obj/item/device/multitool)) + var/new_color = input(usr, "Choose a color to set the shield to!", "", effect_color) as color|null + if(new_color) + effect_color = new_color else return ..() @@ -198,6 +215,7 @@ to_chat(user, "You activate the shield!") user.remove_modifiers_of_type(/datum/modifier/shield_projection) //Just to make sure they aren't using two at once! user.add_modifier(modifier_type) //TESTING. + user.update_modifier_visuals() //Forces coloration to WORK. START_PROCESSING(SSobj, src) //Let's only bother draining power when we're being used! update_icon() @@ -240,6 +258,7 @@ to_chat(user, "The shield deactivates.!") user.remove_modifiers_of_type(/datum/modifier/shield_projection) STOP_PROCESSING(SSobj, src) + update_icon() @@ -384,30 +403,44 @@ // Mining belts /obj/item/device/personal_shield_generator/belt/mining - name = "mining personal shield generator" + name = "mining PSG" desc = "A personal shield generator designed for mining. It has a warning on the back: 'Do NOT expose the shield to stun-based weaponry.'" modifier_type = /datum/modifier/shield_projection/mining /obj/item/device/personal_shield_generator/belt/mining/loaded bcell = /obj/item/weapon/cell/device/shield_generator -/* +/obj/item/device/personal_shield_generator/belt/mining/update_icon() + if(shield_active) + icon_state = "shield_belt_mining_active" + else + icon_state = "shield_belt_mining" + +/obj/item/borg/upgrade/shield_upgrade + name = "mining PSG upgrade disk." + desc = "A upgrade disk that, when slotted into a mining shield generator, upgrades the efficiency of the internal software, providing a stronger shield \ + in exchange for being weaker to stun-based weaponry." + icon = 'icons/obj/objects_vr.dmi' + icon_state = "modkit" + w_class = ITEMSIZE_SMALL + /obj/item/device/personal_shield_generator/belt/mining/attackby(obj/item/weapon/W, mob/user, params) - if(modifier_type == /datum/modifier/shield_projection/mining/strong)) + if(modifier_type == /datum/modifier/shield_projection/mining/strong) to_chat(user, "This shield generator is already upgraded!") return - if(istype(W, /obj/item/borg/upgrade/modkit/shield_upgrade)) + if(istype(W, /obj/item/borg/upgrade/shield_upgrade)) modifier_type = /datum/modifier/shield_projection/mining/strong + to_chat(user, "You upgrade the [src] with the [W]!") user.drop_from_inventory(W) qdel(W) else ..() -*/ + //Security belts /obj/item/device/personal_shield_generator/belt/security - name = "security personal shield generator" + name = "security PSG" desc = "A personal shield generator designed for security." modifier_type = /datum/modifier/shield_projection/security/weak @@ -426,7 +459,7 @@ bcell = /obj/item/weapon/cell/device/shield_generator /obj/item/device/personal_shield_generator/belt/parry //The 'provides one second of pure immunity to brute/burn/halloss' belt. - name = "personal shield generator variant-P" //Not meant to be used in any serious capacity. + name = "PSG variant-P" //Not meant to be used in any serious capacity. desc = "A personal shield generator that sacrifices long-term usability in exchange for a strong, short-lived shield projection, enabling the user to be nigh \ impervious for a second." modifier_type = /datum/modifier/shield_projection/parry @@ -440,7 +473,7 @@ // HOWEVER, be careful with these. They come loaded with a gun in them, so they shouldn't be handed out willy-nilly. /obj/item/device/personal_shield_generator/security - name = "security personal shield generator" + name = "security PSG" desc = "A personal shield generator designed for security." modifier_type = /datum/modifier/shield_projection/security @@ -465,6 +498,7 @@ /obj/item/weapon/cell/device/shield_generator/backpack //The base power cell the backpack units come with. Double the charge vs the belt. maxcharge = 4800 + charge_amount = 160 /obj/item/weapon/cell/device/shield_generator/upgraded //A stronger version of the normal cell. Double the maxcharge, halved charge time. maxcharge = 4800 @@ -473,6 +507,5 @@ /obj/item/weapon/cell/device/shield_generator/parry //The cell for the 'parry' shield gen. maxcharge = 100 - self_recharge = TRUE charge_amount = 100 charge_delay = 20 //Starts charging two seconds after it's discharged. \ No newline at end of file diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm index c100a7a9bc9..09e5a692a6e 100644 --- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm @@ -170,6 +170,7 @@ EQUIPMENT("Thalers - 1000", /obj/item/weapon/spacecash/c1000, 10000), EQUIPMENT("Umbrella", /obj/item/weapon/melee/umbrella/random, 200), EQUIPMENT("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 125), + EQUIPMENT("Mining PSG Upgrade Disk", /obj/item/borg/upgrade/shield_upgrade, 2500), ) prize_list["Extra"] = list() // Used in child vendors //VOREStation Edit End diff --git a/code/modules/mob/_modifiers/modifiers_vr.dm b/code/modules/mob/_modifiers/modifiers_vr.dm index 1f925a76b56..35de7983ae8 100644 --- a/code/modules/mob/_modifiers/modifiers_vr.dm +++ b/code/modules/mob/_modifiers/modifiers_vr.dm @@ -1,4 +1,7 @@ /datum/modifier + var/effect_color // Allows for coloring of modifiers. + var/coloration_applied = 0 // Tells the game is coloration has been applied already or not. + var/icon_override = 0 // Tells the game if it should use modifer_effects_vr.dmi or not. // ENERGY CODE. Variables to allow for energy based modifiers. var/energy_based // Sees if the modifier is based on something electronic based. var/energy_cost // How much the modifier uses per action/special effect blocked. For base values. @@ -91,9 +94,10 @@ on_created_text = "Your shield generator buzzes on." on_expired_text = "Your shield generator buzzes off." - mob_overlay_state = "repel_missiles" //Looks actually pretty good. Could use a better sprite, but that'll work! stacks = MODIFIER_STACK_FORBID //No stacking shields. If you put one one your belt and backpack it won't work. + icon_override = 1 + mob_overlay_state = "deflect" siemens_coefficient = 2 //Stun weapons drain 100% charge per point of damage. They're good at blocking lasers and bullets but not good at blocking stun beams! energy_based = 1 energy_cost = 99999 //This is changed to the shield_generator's energy_cost. @@ -128,7 +132,7 @@ var/obj/item/device/personal_shield_generator/shield_generator //This is the shield generator you're wearing! -/datum/modifier/shield_projection/on_applied() //Don't need to modify this! +/datum/modifier/shield_projection/on_applied() return /datum/modifier/shield_projection/on_expire() //Don't need to modify this! @@ -139,24 +143,24 @@ var/mob/living/carbon/human/H = holder if(istype(H.get_equipped_item(slot_back), /obj/item/device/personal_shield_generator)) shield_generator = H.get_equipped_item(slot_back) //Sets the var on the modifier that the shield gen is their back shield gen. - energy_source = shield_generator.bcell - energy_cost = shield_generator.generator_hit_cost - energy_modifier = shield_generator.energy_modifier else if(istype(H.get_equipped_item(slot_belt), /obj/item/device/personal_shield_generator)) shield_generator = H.get_equipped_item(slot_belt) //No need for other checks. If they got hit by this, they just turned it on. - energy_source = shield_generator.bcell - energy_cost = shield_generator.generator_hit_cost - energy_modifier = shield_generator.energy_modifier else if(istype(H.get_equipped_item(slot_s_store), /obj/item/device/personal_shield_generator) ) //Rigsuits. shield_generator = H.get_equipped_item(slot_s_store) + else + expire(silent = TRUE) + if(shield_generator) //Sanity. energy_source = shield_generator.bcell energy_cost = shield_generator.generator_hit_cost energy_modifier = shield_generator.energy_modifier - else - expire(silent = TRUE) + effect_color = shield_generator.effect_color + if(!coloration_applied) //Does a check if colors have been applied. If not, updates the color. + H.update_modifier_visuals() //This can only happen on the next tick, unfortunately, not the same tick the modifier is applied. Thus, must be done here. + coloration_applied = 1 else expire(silent = TRUE) + /datum/modifier/shield_projection/tick() //When the shield generator runs out of charge, it'll remove this naturally. if(holder.stat == DEAD) expire(silent = TRUE) //If you're dead the generator stops protecting you but keeps running. @@ -200,8 +204,8 @@ max_fire_resistance = 0.5 //SECURITY VARIANTS -/datum/modifier/shield_projection/security // Security backpack. 50% resistance at full charge. 90% resistance for the last shot taken. - max_brute_resistance = 0.5 +/datum/modifier/shield_projection/security // Security backpack. 50% resistance at full charge. 10% resistance for the last shot taken. + max_brute_resistance = 0.50 min_brute_resistance = 0.9 effective_brute_resistance = 1 @@ -213,6 +217,8 @@ min_hal_resistance = 0.9 effective_hal_resistance = 1 + disable_duration_percent = 0.75 + /datum/modifier/shield_projection/security/weak // Security belt. max_brute_resistance = 0.75 min_brute_resistance = 0.95 @@ -225,15 +231,16 @@ max_fire_resistance = 0.25 max_hal_resistance = 0.25 siemens_coefficient = 1.5 //Not as weak as normal, but still weak. + disable_duration_percent = 0.5 //MINING VARIANTS -/datum/modifier/shield_projection/mining //Base mining belt. 45% resistance that fades to 15% resistance - max_brute_resistance = 0.55 +/datum/modifier/shield_projection/mining //Base mining belt. 30% resistance that fades to 15% resistance + max_brute_resistance = 0.70 min_brute_resistance = 0.85 effective_brute_resistance = 1 - max_fire_resistance = 0.55 + max_fire_resistance = 0.70 min_brute_resistance = 0.85 effective_fire_resistance = 1 @@ -243,10 +250,10 @@ disable_duration_percent = 0.75 //Miners often come into contact with things that can stun them. -/datum/modifier/shield_projection/mining/strong // Mining belt, but upgraded. Even weaker to halloss! It also scales from .5 to .75 instead of back to 1.0! - max_brute_resistance = 0.5 +/datum/modifier/shield_projection/mining/strong // Mining belt, but upgraded. Even weaker to halloss! + max_brute_resistance = 0.55 min_brute_resistance = 0.75 - max_fire_resistance = 0.5 + max_fire_resistance = 0.55 min_fire_resistance = 0.75 disable_duration_percent = 0.5 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index c7350d39355..33fc69c562f 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1127,8 +1127,14 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() var/image/effects = new() for(var/datum/modifier/M in modifiers) if(M.mob_overlay_state) - var/image/I = image(icon = 'icons/mob/modifier_effects.dmi', icon_state = M.mob_overlay_state) - effects.overlays += I // Leaving this as overlays += + if(M.icon_override) //VOREStation Edit. Override for the modifer icon. + var/image/I = image(icon = 'icons/mob/modifier_effects_vr.dmi', icon_state = M.mob_overlay_state) + I.color = M.effect_color + effects.overlays += I // Leaving this as overlays += + else + var/image/I = image(icon = 'icons/mob/modifier_effects.dmi', icon_state = M.mob_overlay_state) + I.color = M.effect_color + effects.overlays += I // Leaving this as overlays += overlays_standing[MODIFIER_EFFECTS_LAYER] = effects diff --git a/icons/mob/modifier_effects_vr.dmi b/icons/mob/modifier_effects_vr.dmi new file mode 100644 index 00000000000..108fff4f968 Binary files /dev/null and b/icons/mob/modifier_effects_vr.dmi differ diff --git a/icons/obj/items_vr.dmi b/icons/obj/items_vr.dmi index 52da93a6b8a..eaab38c51ee 100644 Binary files a/icons/obj/items_vr.dmi and b/icons/obj/items_vr.dmi differ