diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 527578727a2..0dfb63d8877 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -356,6 +356,10 @@ icon_state = "impact_laser_purple" duration = 4 +/obj/effect/temp_visual/impact_effect/yellow_laser + icon_state = "impact_laser_yellow" + duration = 4 + /obj/effect/temp_visual/impact_effect/ion icon_state = "shieldsparkles" duration = 6 diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index c1e40323915..e8c2bf7ef55 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -316,16 +316,16 @@ ..(mimic_type) /obj/item/ammo_casing/energy/detective - projectile_type = /obj/item/projectile/energy/detective + projectile_type = /obj/item/projectile/beam/laser/detective fire_sound = 'sound/weapons/gunshots/gunshot_det_energy.ogg' select_name = "disabler" /obj/item/ammo_casing/energy/detective/tracker_warrant - projectile_type = /obj/item/projectile/energy/detective/tracker_warrant_shot + projectile_type = /obj/item/projectile/beam/laser/detective/tracker_warrant_shot e_cost = 50 select_name = "tracker and warrant generator" /obj/item/ammo_casing/energy/detective/overcharge - projectile_type = /obj/item/projectile/energy/detective/overcharged + projectile_type = /obj/item/projectile/beam/laser/detective/overcharged e_cost = 200 select_name = "overcharged" diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index c4743e80fcb..2f4a2171637 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -161,3 +161,69 @@ var/mob/living/L = target L.visible_message("[L] explodes!") L.gib() + +/obj/item/projectile/beam/laser/detective + name = "energy revolver shot" + icon_state = "omnilaser" + light_color = LIGHT_COLOR_CYAN + impact_effect_type = /obj/effect/temp_visual/impact_effect/blue_laser + damage = 5 + stamina = 25 + eyeblur = 2 SECONDS + +/obj/item/projectile/beam/laser/detective/overcharged + name = "overcharged shot" + icon_state = "spark" + light_color = LIGHT_COLOR_DARKRED + color = LIGHT_COLOR_DARKRED + impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser + damage = 45 + stamina = 15 + eyeblur = 4 SECONDS + +/obj/item/projectile/beam/laser/detective/tracker_warrant_shot + name = "tracker shot" + icon_state = "yellow_laser" + light_color = LIGHT_COLOR_YELLOW + impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser + stamina = 0 + reflectability = REFLECTABILITY_PHYSICAL //No mr cult juggernaught, please don't set me to search! + +/obj/item/projectile/beam/laser/detective/tracker_warrant_shot/on_hit(atom/target) + . = ..() + if(!ishuman(target)) + no_worky(target) + return + start_tracking(target) + set_warrant(target) + +/obj/item/projectile/beam/laser/detective/tracker_warrant_shot/proc/start_tracking(atom/target) + var/obj/item/gun/energy/detective/D = firer_source_atom + if(!D) + no_worky(target) + return + if(D.tracking_target_UID) + no_worky(tracking_already = TRUE) + return + D.start_pointing(target.UID()) + +/obj/item/projectile/beam/laser/detective/tracker_warrant_shot/proc/set_warrant(atom/target) + var/mob/living/carbon/human/target_to_mark = target + var/perpname = target_to_mark.get_visible_name(TRUE) + if(!perpname || perpname == "Unknown") + no_worky(target, warrant_fail = TRUE) + return + var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) + if(!R || (R.fields["criminal"] in list(SEC_RECORD_STATUS_EXECUTE, SEC_RECORD_STATUS_ARREST))) + no_worky(target, warrant_fail = TRUE) + return + set_criminal_status(firer, R, SEC_RECORD_STATUS_SEARCH, "Target tagged by Detective Revolver", "Detective Revolver") + +/obj/item/projectile/beam/laser/detective/tracker_warrant_shot/proc/no_worky(atom/target, tracking_already, warrant_fail) + if(tracking_already) + to_chat(firer, "Weapon Alert: You are already tracking a target!") + return + if(warrant_fail) + to_chat(firer, "Weapon Alert: unable to generate warrant on [target]!") + return + to_chat(firer, "Weapon Alert: unable to track [target]!") diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 2600942c342..d9ed934b1c1 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -147,66 +147,3 @@ armour_penetration = 10 // It can have a little armor pen, as a treat. Bigger than it looks, energy armor is often low. shield_buster = TRUE reflectability = REFLECTABILITY_PHYSICAL //I will let eswords block it like a normal projectile, but it's not getting reflected, and eshields will take the hit hard. Carp still can reflect though, screw you. - -/obj/item/projectile/energy/detective - name = "energy revolver shot" - icon_state = "omnilaser" - light_color = LIGHT_COLOR_CYAN - damage = 5 - stamina = 25 - eyeblur = 2 SECONDS - -/obj/item/projectile/energy/detective/overcharged - name = "overcharged shot" - icon_state = "spark" - light_color = LIGHT_COLOR_DARKRED - color = LIGHT_COLOR_DARKRED - damage = 45 - stamina = 15 - eyeblur = 4 SECONDS - -/obj/item/projectile/energy/detective/tracker_warrant_shot - name = "tracker shot" - icon_state = "yellow_laser" - light_color = LIGHT_COLOR_YELLOW - stamina = 0 - reflectability = REFLECTABILITY_PHYSICAL //No mr cult juggernaught, please don't set me to search! - -/obj/item/projectile/energy/detective/tracker_warrant_shot/on_hit(atom/target) - . = ..() - if(!ishuman(target)) - no_worky(target) - return - start_tracking(target) - set_warrant(target) - -/obj/item/projectile/energy/detective/tracker_warrant_shot/proc/start_tracking(atom/target) - var/obj/item/gun/energy/detective/D = firer_source_atom - if(!D) - no_worky(target) - return - if(D.tracking_target_UID) - no_worky(tracking_already = TRUE) - return - D.start_pointing(target.UID()) - -/obj/item/projectile/energy/detective/tracker_warrant_shot/proc/set_warrant(atom/target) - var/mob/living/carbon/human/target_to_mark = target - var/perpname = target_to_mark.get_visible_name(TRUE) - if(!perpname || perpname == "Unknown") - no_worky(target, warrant_fail = TRUE) - return - var/datum/data/record/R = find_record("name", perpname, GLOB.data_core.security) - if(!R || (R.fields["criminal"] in list(SEC_RECORD_STATUS_EXECUTE, SEC_RECORD_STATUS_ARREST))) - no_worky(target, warrant_fail = TRUE) - return - set_criminal_status(firer, R, SEC_RECORD_STATUS_SEARCH, "Target tagged by Detective Revolver", "Detective Revolver") - -/obj/item/projectile/energy/detective/tracker_warrant_shot/proc/no_worky(atom/target, tracking_already, warrant_fail) - if(tracking_already) - to_chat(firer, "Weapon Alert: You are already tracking a target!") - return - if(warrant_fail) - to_chat(firer, "Weapon Alert: unable to generate warrant on [target]!") - return - to_chat(firer, "Weapon Alert: unable to track [target]!") diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index ca22e157c9c..82fd651d595 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ