Adds shield generators.

Kinda WIP but it functions ATM.
This commit is contained in:
C.L
2022-09-09 22:20:56 -04:00
parent 21cdbc66e1
commit e77ea39458
8 changed files with 495 additions and 1 deletions
+4
View File
@@ -64,6 +64,10 @@
var/siemens_coefficient = null // Similar to above two vars but 0 = full protection, to be consistant with siemens numbers everywhere else.
var/vision_flags // Vision flags to add to the mob. SEE_MOB, SEE_OBJ, etc.
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.
var/energy_modifier // How much energy is used when numbers are involed. For values, such as taking damage. Ex: (Damage*energy_modifier)
var/obj/item/weapon/cell/energy_source = null // The source of the above.
/datum/modifier/New(var/new_holder, var/new_origin)
holder = new_holder
+67 -1
View File
@@ -30,4 +30,70 @@
if(water_floor.depth < 1) //You're not in deep enough water anymore.
expire(silent = FALSE)
else
expire(silent = FALSE)
expire(silent = FALSE)
/datum/modifier/shield_projection
name = "Shield Projection"
desc = "You are currently protected by a shield, rendering nigh impossible to hit you through conventional means."
on_created_text = "<span class='notice'>Your shield generator buzzes on.</span>"
on_expired_text = "<span class='warning'>Your shield generator buzzes off.</span>"
mob_overlay_state = "repel_missiles" //Looks alright, I guess. Placeholder.
stacks = MODIFIER_STACK_FORBID //No stacking shields. If you put one one your belt and backpack it won't work.
siemens_coefficient = 2 //Stun weapons drain 100% charge per damage. They're good at blocking lasers and bullets but not good at blocking stun beams!
incoming_brute_damage_percent = 0
incoming_fire_damage_percent = 0
incoming_hal_damage_percent = 0
energy_based = 1
energy_cost = 99999 //This is changed to the shield_genertor's energy_cost.
energy_modifier = 50 //This is how much battery is used per damage unit absorbed. Higher damage means higher charge use per damage absorbed. Changed below!
var/obj/item/device/personal_shield_generator/shield_generator //This is the shield generator you're wearing!
/datum/modifier/shield_projection/on_applied()
return
/datum/modifier/shield_projection/on_expire()
return
/datum/modifier/shield_projection/check_if_valid() //Let's check to make sure you got the stuff and set the vars.
if(ishuman(holder)) //Only humans can use this!
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)
energy_source = shield_generator.bcell
energy_cost = shield_generator.generator_hit_cost
energy_modifier = shield_generator.energy_modifier
else
expire(silent = TRUE)
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.
if(!shield_generator || !shield_generator.slot_check()) //No shield to begin with/shield is not on them any longer.
expire(silent = FALSE)
var/shield_efficiency = 1-(energy_source.charge/energy_source.maxcharge) //0 = complete resistance. 1 = no resistance.
incoming_brute_damage_percent = shield_efficiency //Less charge means less resistance!
incoming_fire_damage_percent = shield_efficiency
incoming_hal_damage_percent = shield_efficiency