Ports the radiation subsystem and cleans up damage flags. (#15715)

This commit is contained in:
Matt Atlas
2023-02-07 13:22:47 +01:00
committed by GitHub
parent 5527fc0810
commit 31c73ead85
198 changed files with 981 additions and 649 deletions
+82
View File
@@ -0,0 +1,82 @@
/obj/item/device/geiger
name = "geiger counter"
desc = "A handheld device used for detecting and measuring radiation in an area."
icon = 'icons/obj/geiger_counter.dmi'
icon_state = "geiger_off"
item_state = "multitool"
w_class = ITEMSIZE_SMALL
action_button_name = "Toggle geiger counter"
var/scanning = 0
var/radiation_count = 0
var/datum/sound_token/sound_token
var/geiger_volume = 0
var/sound_id
/obj/item/device/geiger/Initialize()
. = ..()
sound_id = "[type]_[sequential_id(type)]"
/obj/item/device/geiger/proc/update_sound(playing)
if(playing && !sound_token)
sound_token = sound_player.PlayLoopingSound(src, sound_id, "sound/items/geiger.ogg", volume = geiger_volume, range = 4, falloff = 3, prefer_mute = TRUE)
else if(!playing && sound_token)
QDEL_NULL(sound_token)
/obj/item/device/geiger/Destroy()
. = ..()
STOP_PROCESSING(SSprocessing, src)
update_sound(0)
/obj/item/device/geiger/process()
if(!scanning)
return
radiation_count = SSradiation.get_rads_at_turf(get_turf(src))
update_icon()
/obj/item/device/geiger/examine(mob/user)
. = ..()
var/msg = "[scanning ? "ambient" : "stored"] Radiation level: [radiation_count ? radiation_count : "0"] IU/s."
if(radiation_count > RAD_LEVEL_LOW)
to_chat(user, SPAN_WARNING("[msg]"))
else
to_chat(user, SPAN_NOTICE("[msg]"))
/obj/item/device/geiger/attack_self(mob/user)
scanning = !scanning
if(scanning)
START_PROCESSING(SSprocessing, src)
else
STOP_PROCESSING(SSprocessing, src)
update_icon()
to_chat(user, SPAN_NOTICE("[icon2html(src, user)] You switch [scanning ? "on" : "off"] [src]."))
/obj/item/device/geiger/update_icon()
if(!scanning)
icon_state = "geiger_off"
update_sound(0)
return 1
if(!sound_token) update_sound(1)
switch(radiation_count)
if(null) icon_state = "geiger_on_1"
if(-INFINITY to RAD_LEVEL_LOW)
icon_state = "geiger_on_1"
geiger_volume = 0
sound_token.SetVolume(geiger_volume)
if(RAD_LEVEL_LOW + 0.01 to RAD_LEVEL_MODERATE)
icon_state = "geiger_on_2"
geiger_volume = 10
sound_token.SetVolume(geiger_volume)
if(RAD_LEVEL_MODERATE + 0.1 to RAD_LEVEL_HIGH)
icon_state = "geiger_on_3"
geiger_volume = 25
sound_token.SetVolume(geiger_volume)
if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH)
icon_state = "geiger_on_4"
geiger_volume = 40
sound_token.SetVolume(geiger_volume)
if(RAD_LEVEL_VERY_HIGH + 1 to INFINITY)
icon_state = "geiger_on_5"
geiger_volume = 60
sound_token.SetVolume(geiger_volume)
@@ -43,7 +43,7 @@
to_chat(user, SPAN_WARNING("You break \the [src] apart, spilling its contents everywhere!"))
fuel = 0
new /obj/effect/decal/cleanable/greenglow(get_turf(user))
user.apply_damage(rand(15,30), IRRADIATE, damage_flags = DAM_DISPERSED)
user.apply_damage(rand(15,30), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
qdel(src)
return
+1 -1
View File
@@ -51,7 +51,7 @@
/obj/item/target/bullet_act(var/obj/item/projectile/Proj)
var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!"
var/p_y = Proj.p_y + pick(0,0,0,0,0,-1,1)
var/decaltype = (Proj.damage_flags & DAM_BULLET) ? DECAL_BULLET : DECAL_SCORCH
var/decaltype = (Proj.damage_flags & DAMAGE_FLAG_BULLET) ? DECAL_BULLET : DECAL_SCORCH
virtual_icon = new(icon, icon_state)
+2 -2
View File
@@ -69,8 +69,8 @@ obj/item/clothing/mask/chewable/Destroy()
/obj/item/clothing/mask/chewable/proc/damagecrunch(mob/living/carbon/human/user)
if(src == user.wear_mask) // are we still chewing the gum?
user.apply_damage(damage_per_crunch, BRUTE, BP_HEAD)
user.apply_damage(damage_per_crunch/2, PAIN, BP_HEAD)
user.apply_damage(damage_per_crunch, DAMAGE_BRUTE, BP_HEAD)
user.apply_damage(damage_per_crunch/2, DAMAGE_PAIN, BP_HEAD)
to_chat(user, SPAN_DANGER("You bite down hard on \the [name]!"))
crunching = FALSE
@@ -853,9 +853,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(user.IgniteMob())
user.visible_message(SPAN_DANGER("<b>[user]</b> accidentally sets themselves on fire!"))
if(user.l_hand == src)
user.apply_damage(2, BURN,BP_L_HAND)
user.apply_damage(2, DAMAGE_BURN,BP_L_HAND)
else
user.apply_damage(2, BURN,BP_R_HAND)
user.apply_damage(2, DAMAGE_BURN,BP_R_HAND)
if(last_open <= world.time - 20) //Spam limiter.
last_open = world.time
user.visible_message(SPAN_DANGER("After a few attempts, <b>[user]</b> manages to light \the [src], they however burn their finger in the process."), range = 3)
@@ -71,7 +71,7 @@
/obj/item/dnainjector/proc/inject(mob/M as mob, mob/user as mob)
if(istype(M,/mob/living))
var/mob/living/L = M
L.apply_effect(rand(5,20), IRRADIATE, blocked = 0)
L.apply_damage(rand(5,20), DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED)
if (NOT_FLAG(M.mutations, NOCLONE)) // prevents drained people from having their DNA changed
if (buf.types & DNA2_BUF_UI)
+1 -1
View File
@@ -136,7 +136,7 @@
H.attack_log += text("\[[time_stamp()]\] <span class='warning'>[s] ([H.ckey])</span>")
log_attack("[s] ([H.ckey])",ckey=key_name(H))
if(O.take_damage(3, 0, damage_flags = DAM_SHARP|DAM_EDGE, used_weapon = "teeth marks"))
if(O.take_damage(3, 0, damage_flags = DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE, used_weapon = "teeth marks"))
H:UpdateDamageIcon()
last_chew = world.time
@@ -45,7 +45,7 @@
part.take_damage(burn = 15, used_weapon = "Electronics meltdown")
else
var/mob/living/M = imp_in
M.apply_damage(15,BURN)
M.apply_damage(15,DAMAGE_BURN)
name = "melted implant"
desc = "Charred circuit in melted plastic case. Wonder what that used to be..."
icon_state = "implant_melted"
@@ -49,7 +49,7 @@
damage_coef -= 0.2
return
if(H.apply_damage(25 * damage_coef, BRUTE, affecting))
if(H.apply_damage(25 * damage_coef, DAMAGE_BRUTE, affecting))
H.updatehealth()
if(H.can_feel_pain())
@@ -54,7 +54,7 @@
for(var/thing in O.implants)
var/obj/S = thing
usr.visible_message("<span class='notice'>[usr] starts carefully digging out something in [H == usr ? "themselves" : H]...</span>")
O.take_damage(8, 0, DAM_SHARP|DAM_EDGE, src)
O.take_damage(8, 0, DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE, src)
H.custom_pain("<font size=3><span class='danger'>It burns!</span></font>", 50)
if(do_mob(usr, H, 100))
H.remove_implant(S, FALSE)
@@ -36,7 +36,7 @@
return FALSE
/obj/item/material/sword/perform_technique(var/mob/living/carbon/human/target, var/mob/living/carbon/human/user, var/target_zone)
var/armor_reduction = target.get_blocked_ratio(target_zone, BRUTE, DAM_EDGE|DAM_SHARP, damage = force)*100
var/armor_reduction = target.get_blocked_ratio(target_zone, DAMAGE_BRUTE, DAMAGE_FLAG_EDGE|DAMAGE_FLAG_SHARP, damage = force)*100
var/obj/item/organ/external/affecting = target.get_organ(target_zone)
if(!affecting)
return
@@ -605,7 +605,7 @@
icon_state = "flag_hegemony0"
base_icon = "flag_hegemony"
contained_sprite = TRUE
damtype = BURN
damtype = DAMAGE_BURN
/obj/item/material/twohanded/pike/silver/Initialize(newloc, material_key)
. = ..(newloc, MATERIAL_SILVER)
@@ -26,7 +26,7 @@
user.Weaken(3 * force)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2*force, BRUTE, BP_HEAD)
H.apply_damage(2*force, DAMAGE_BRUTE, BP_HEAD)
else
user.take_organ_damage(2*force)
return
@@ -96,14 +96,14 @@
user.Weaken(3 * force)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.apply_damage(2 * force, BRUTE, BP_HEAD)
H.apply_damage(2 * force, DAMAGE_BRUTE, BP_HEAD)
else
user.take_organ_damage(2 * force)
return
if(..() && user.a_intent == I_DISARM)
if(ishuman(target))
var/mob/living/carbon/human/T = target
T.apply_damage(40, PAIN, target_zone)
T.apply_damage(40, DAMAGE_PAIN, target_zone)
return
return ..()
+4 -4
View File
@@ -533,7 +533,7 @@
T.visible_message("<span class='danger'>\The [src] turns on.</span>")
playsound(loc, 'sound/items/welder_activate.ogg', 50, 1)
force = 15
damtype = BURN
damtype = DAMAGE_BURN
w_class = ITEMSIZE_LARGE
welding = TRUE
hitsound = SOUNDS_LASER_MEAT
@@ -552,7 +552,7 @@
T.visible_message("<span class='warning'>\The [src] turns off.</span>")
playsound(loc, 'sound/items/welder_deactivate.ogg', 50, 1)
force = 3
damtype = BRUTE
damtype = DAMAGE_BRUTE
w_class = initial(w_class)
welding = FALSE
hitsound = /singleton/sound_category/swing_hit_sound
@@ -946,10 +946,10 @@
if(!user.gloves)
var/UserLoc = get_equip_slot()
if(UserLoc == slot_l_hand)
user.apply_damage(5, BURN, BP_L_HAND)
user.apply_damage(5, DAMAGE_BURN, BP_L_HAND)
to_chat(user, SPAN_DANGER("The steel wool burns your left hand!"))
else if(UserLoc == slot_r_hand)
user.apply_damage(5, BURN, BP_R_HAND)
user.apply_damage(5, DAMAGE_BURN, BP_R_HAND)
to_chat(user, SPAN_DANGER("The steel wool burns your right hand!"))
new /obj/effect/decal/cleanable/ash(get_turf(src))
+1 -1
View File
@@ -90,7 +90,7 @@
else
target_zone = pick(BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG)
var/success = L.apply_damage(30, BRUTE, target_zone, used_weapon = src, armor_pen = activated_armor_penetration)
var/success = L.apply_damage(30, DAMAGE_BRUTE, target_zone, used_weapon = src, armor_pen = activated_armor_penetration)
if(!success)
return FALSE