|
57 | 57 | /obj/item/projectile/energy/bolt/large |
58 | 58 | damage = 20 |
59 | 59 |
|
| 60 | +#define BSG_BASE_DAMAGE 90 |
| 61 | + |
60 | 62 | /obj/item/projectile/energy/bsg |
61 | 63 | name = "orb of pure bluespace energy" |
62 | 64 | icon_state = "bluespace" |
63 | 65 | impact_effect_type = /obj/effect/temp_visual/bsg_kaboom |
64 | | - damage = 90 |
| 66 | + damage = BSG_BASE_DAMAGE |
65 | 67 | damage_type = BURN |
66 | 68 | armour_penetration_flat = 50 |
67 | 69 | range = 9 |
|
89 | 91 | ..() |
90 | 92 |
|
91 | 93 | /obj/item/projectile/energy/bsg/proc/kaboom(atom/target) |
| 94 | + // If a lens is modifying the damage of the projectile, the AOE should be impacted as well |
| 95 | + var/damage_multiplier = damage / BSG_BASE_DAMAGE |
92 | 96 | playsound(src, 'sound/weapons/bsg_explode.ogg', 75, TRUE) |
93 | 97 | for(var/mob/living/M in hearers(7, src)) //No stuning people with thermals through a wall. |
94 | 98 | if(M == target) |
|
102 | 106 | if(prob(min(400 / distance, 100))) //100% chance to hit with the blast up to 3 tiles, after that chance to hit is 80% at 4 tiles, 66.6% at 5, 57% at 6, and 50% at 7 |
103 | 107 | if(prob(min(200 / distance, 100)))//100% chance to upgraded to a stun as well at a direct hit, 100% at 1 tile, 66% at 2, 50% at 3, 40% at 4, 33% at 5, 28.5% at 6, and finaly 25% at 7. This is calculated after the first hit however. |
104 | 108 | floored = TRUE |
105 | | - M.apply_damage((rand(60, 80) * (1.1 - distance / 10)), BURN) //reduced by 10% per tile |
| 109 | + M.apply_damage((rand(60, 80) * (1.1 - distance / 10)) * damage_multiplier, BURN) //reduced by 10% per tile |
106 | 110 | add_attack_logs(firer, M, "Hit heavily by [src]") |
107 | 111 | if(floored) |
108 | 112 | to_chat(M, "<span class='userdanger'>You see a flash of briliant blue light as [src] explodes, knocking you to the ground and burning you!</span>") |
|
115 | 119 | else |
116 | 120 | to_chat(M, "<span class='userdanger'>You feel the heat of the explosion of [src], but the blast mostly misses you.</span>") |
117 | 121 | add_attack_logs(firer, M, "Hit lightly by [src]") |
118 | | - M.apply_damage(rand(20, 25), BURN) |
| 122 | + M.apply_damage(rand(20, 25) * damage_multiplier, BURN) |
119 | 123 | if(ROLE_BLOB in M.faction) |
120 | | - M.apply_damage(rand(20, 25), BURN) //Ensures it clears all blob spores on the screen without fail. |
| 124 | + M.apply_damage(rand(20, 25) * damage_multiplier, BURN) //Ensures it clears all blob spores on the screen without fail. |
| 125 | + |
| 126 | +#undef BSG_BASE_DAMAGE |
121 | 127 |
|
122 | 128 | /obj/item/projectile/energy/weak_plasma |
123 | 129 | name = "plasma bolt" |
|
151 | 157 | homing_active = TRUE |
152 | 158 | ..() |
153 | 159 |
|
| 160 | + |
| 161 | +#define ARC_REVOLVER_BASE_DAMAGE 10 |
| 162 | + |
154 | 163 | /obj/item/projectile/energy/arc_revolver |
155 | 164 | name = "arc emitter" |
156 | 165 | icon_state = "plasma_light" |
157 | | - damage = 10 |
| 166 | + damage = ARC_REVOLVER_BASE_DAMAGE |
158 | 167 | damage_type = BURN |
159 | 168 | var/charge_number = null |
160 | 169 |
|
|
167 | 176 | A.duration += 10 SECONDS |
168 | 177 | qdel(src) |
169 | 178 | return |
170 | | - new /obj/effect/abstract/arc_revolver(target, charge_number, immolate) |
| 179 | + new /obj/effect/abstract/arc_revolver(target, charge_number, immolate, damage) |
171 | 180 | qdel(src) |
172 | 181 |
|
173 | 182 |
|
|
180 | 189 | var/successfulshocks = 0 |
181 | 190 | var/wait_for_three = 0 |
182 | 191 | var/our_immolate = 0 |
| 192 | + var/damage_multiplier = 1 |
183 | 193 |
|
184 | | -/obj/effect/abstract/arc_revolver/Initialize(mapload, charge_number, immolate) |
| 194 | +/obj/effect/abstract/arc_revolver/Initialize(mapload, charge_number, immolate, damage) |
185 | 195 | . = ..() |
186 | 196 | charge_numbers += charge_number |
187 | 197 | START_PROCESSING(SSfastprocess, src) |
188 | 198 | GLOB.arc_emitters += src |
189 | 199 | our_immolate = immolate / 5 |
| 200 | + damage_multiplier = damage / ARC_REVOLVER_BASE_DAMAGE |
190 | 201 | build_chains() |
191 | 202 |
|
192 | 203 | /obj/effect/abstract/arc_revolver/proc/build_chains() |
|
255 | 266 | "<span class='userdanger'>You are shocked by the lightning chain!</span>", \ |
256 | 267 | "<span class='italics'>You hear a heavy electrical crack.</span>" \ |
257 | 268 | ) |
258 | | - var/damage = (2 - isliving(B.origin) + 2 - isliving(B.target)) //Damage is upped depending if the origin is a mob or not. Wall to wall hurts more than mob to wall, or mob to mob |
| 269 | + var/damage = (2 - isliving(B.origin) + 2 - isliving(B.target)) * damage_multiplier //Damage is upped depending if the origin is a mob or not. Wall to wall hurts more than mob to wall, or mob to mob |
259 | 270 | L.adjustFireLoss(damage) //time to die |
260 | 271 | if(our_immolate) |
261 | 272 | L.adjust_fire_stacks(our_immolate) |
|
274 | 285 | var/datum/cd = chain |
275 | 286 | if(!chain || QDELETED(cd)) |
276 | 287 | chains -= chain |
| 288 | + |
| 289 | +#undef ARC_REVOLVER_BASE_DAMAGE |
0 commit comments