diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 3c8e4fc0f57..13ae1e4f2fe 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -186,6 +186,7 @@ equip_delay_other = 40 pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes lace_time = 8 SECONDS + species_exception = list(/datum/species/golem/uranium) /obj/item/clothing/shoes/workboots/mining name = "mining boots" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 89a0c4be332..a8ca6ba29d2 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -634,6 +634,7 @@ armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 20, FIRE = 30, ACID = 45) allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering + species_exception = list(/datum/species/golem/uranium) /obj/item/clothing/head/hooded/winterhood/engineering icon_state = "winterhood_engineer" diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 30c58902013..a6e212a1f97 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -47,6 +47,7 @@ inhand_icon_state = "engi_suit" armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 60, ACID = 20) resistance_flags = NONE + species_exception = list(/datum/species/golem/uranium) /obj/item/clothing/under/rank/engineering/engineer/hazard name = "engineer's hazard jumpsuit" diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 286290cf000..fbadb65b6d3 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -312,27 +312,56 @@ H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM) return 1 -//Radioactive +//Radioactive puncher, hits for burn but only as hard as human, slightly more durable against brute but less against everything else /datum/species/golem/uranium name = "Uranium Golem" id = "uranium golem" fixed_mut_color = "7f0" meat = /obj/item/stack/ore/uranium - info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected." - + info_text = "As an Uranium Golem, your very touch burns and irradiates organic lifeforms. You don't hit as hard as most golems, but you are far more durable against blunt force trauma." + attack_verb = "burn" + attack_sound = 'sound/weapons/sear.ogg' + attack_type = BURN var/last_event = 0 var/active = null + armor = 40 + brutemod = 0.5 + punchdamagelow = 1 + punchdamagehigh = 10 + punchstunthreshold = 9 prefix = "Uranium" special_names = list("Oxide", "Rod", "Meltdown", "235") + COOLDOWN_DECLARE(radiation_emission_cooldown) -/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H) - if(!active) - if(world.time > last_event+30) - active = 1 - radiation_pulse(H, 50) - last_event = world.time - active = null +/datum/species/golem/uranium/proc/radiation_emission(mob/living/carbon/human/H) + if(!COOLDOWN_FINISHED(src, radiation_emission_cooldown)) + return + else + radiation_pulse(H, 50) + COOLDOWN_START(src, radiation_emission_cooldown, 2 SECONDS) + +/datum/species/golem/uranium/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target) + . = ..() + var/obj/item/bodypart/affecting = target.get_bodypart(ran_zone(user.zone_selected)) + var/radiation_block = target.run_armor_check(affecting, RAD) + ///standard damage roll for use in determining how much you irradiate per punch + var/attacker_irradiate_value = rand(user.dna.species.punchdamagelow, user.dna.species.punchdamagehigh) + target.apply_effect(attacker_irradiate_value*5, EFFECT_IRRADIATE, radiation_block) + +/datum/species/golem/uranium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style) ..() + if(COOLDOWN_FINISHED(src, radiation_emission_cooldown) && M != H && M.a_intent != INTENT_HELP) + radiation_emission(H) + +/datum/species/golem/uranium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H) + ..() + if(COOLDOWN_FINISHED(src, radiation_emission_cooldown) && user != H) + radiation_emission(H) + +/datum/species/golem/uranium/on_hit(obj/projectile/P, mob/living/carbon/human/H) + ..() + if(COOLDOWN_FINISHED(src, radiation_emission_cooldown)) + radiation_emission(H) //Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death. /datum/species/golem/sand