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