Skip to content

Commit

Permalink
Merge pull request #2089 from SierraBay/upstream-pr-34549
Browse files Browse the repository at this point in the history
[MIRROR] Gyrotron damage fix & emitter damage refactor
  • Loading branch information
UEDCommander authored May 22, 2024
2 parents 12879ca + b637900 commit fdc7b7a
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 15 deletions.
6 changes: 2 additions & 4 deletions code/modules/power/fusion/gyrotron/gyrotron.dm
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,8 @@
/obj/machinery/power/emitter/gyrotron/get_burst_delay()
return rate * 10

/obj/machinery/power/emitter/gyrotron/get_emitter_beam()
var/obj/item/projectile/beam/emitter/E = ..()
E.damage = mega_energy * 50
return E
/obj/machinery/power/emitter/gyrotron/get_emitter_damage()
return mega_energy * 50

/obj/machinery/power/emitter/gyrotron/on_update_icon()
ClearOverlays()
Expand Down
26 changes: 16 additions & 10 deletions code/modules/power/singularity/emitter.dm
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
var/shot_number = 0
var/state = EMITTER_LOOSE
var/locked = FALSE
/// Type path (Type of `/obj/item/projectile`). The projectile type this emitter fires.
var/projectile_type = /obj/item/projectile/beam/emitter
core_skill = SKILL_ENGINES

uncreated_component_parts = list(
Expand Down Expand Up @@ -173,19 +175,15 @@
fire_delay = get_rand_burst_delay()
shot_number = 0

//need to calculate the power per shot as the emitter doesn't fire continuously.
var/burst_time = (min_burst_delay + max_burst_delay) / 2 + 2 * (burst_shots - 1)
var/power_per_shot = (active_power_usage * efficiency) * (burst_time / 10) / burst_shots

if (prob(35))
var/datum/effect/spark_spread/s = new /datum/effect/spark_spread
s.set_up(5, 1, src)
s.start()

var/obj/item/projectile/beam/emitter/A = get_emitter_beam()
playsound(loc, A.fire_sound, 25, TRUE)
A.damage = round (power_per_shot / EMITTER_DAMAGE_POWER_TRANSFER)
A.launch( get_step(loc, dir) )
var/obj/item/projectile/proj = new projectile_type(get_turf(src))
proj.damage = get_emitter_damage()
playsound(loc, proj.fire_sound, 25, TRUE)
proj.launch( get_step(loc, dir) )

/obj/machinery/power/emitter/post_anchor_change()
if (anchored)
Expand Down Expand Up @@ -287,8 +285,16 @@
/obj/machinery/power/emitter/proc/get_burst_delay()
return 0.2 SECONDS // This value doesn't really affect normal emitters, but *does* affect subtypes like the gyrotron that can have very long delays

/obj/machinery/power/emitter/proc/get_emitter_beam()
return new /obj/item/projectile/beam/emitter(get_turf(src))

/**
* Calculates the damage the emitter should fire with its projectile.
*/
/obj/machinery/power/emitter/proc/get_emitter_damage()
//need to calculate the power per shot as the emitter doesn't fire continuously.
var/burst_time = (min_burst_delay + max_burst_delay) / 2 + 2 * (burst_shots - 1)
var/power_per_shot = (active_power_usage * efficiency) * (burst_time / 10) / burst_shots
return round(power_per_shot / EMITTER_DAMAGE_POWER_TRANSFER)


/singleton/public_access/public_method/toggle_emitter
name = "toggle emitter"
Expand Down
2 changes: 1 addition & 1 deletion code/modules/projectiles/projectile/beams.dm
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@
name = "emitter beam"
icon_state = "emitter"
fire_sound = 'sound/weapons/emitter.ogg'
damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm
damage = 0 // The actual damage is computed in `/obj/machinery/power/emitter/proc/get_emitter_damage()`

muzzle_type = /obj/projectile/laser/emitter/muzzle
tracer_type = /obj/projectile/laser/emitter/tracer
Expand Down

0 comments on commit fdc7b7a

Please sign in to comment.