Explosion attack log update (#31070)

* Ex_act() logging update

* Fixes

* Priming

* Fixes

* Fixes

* More mob attack logs

* Fixes

* Other carbons

* Forgot these

* Forgot these

* Possible fix

* Last resort

* Obvious typo gets ignored

* Using fingerprints for more logging

* Basis of explosion system using it too, only for plasma cigars for now

* Fix

* Moved here

* TTV log fix

* Formatting ckey in too

Co-authored-by: kanef <kanef9x@protonmail.com>
This commit is contained in:
kane-f
2021-10-16 08:46:34 +01:00
committed by GitHub
parent 4139c12c32
commit 5c2eed6ff3
66 changed files with 151 additions and 128 deletions

View File

@@ -395,16 +395,16 @@
IED = null
..()
/obj/item/weapon/beartrap/ex_act(var/severity)
/obj/item/weapon/beartrap/ex_act(var/severity, var/child = null, var/mob/whodunnit)
switch(severity)
if (1)
qdel(src)
if (2)
if (IED)
IED.prime()
IED.prime(whodunnit)
if (3)
if (IED && prob(50))
IED.prime()
IED.prime(whodunnit)
/obj/item/weapon/beartrap/armed
armed = 1
@@ -691,7 +691,7 @@
message_admins(log_str)
log_game(log_str)
spawn(IED.det_time)
IED.prime()
IED.prime(L)
desc = initial(desc)
overlays.Remove(ied_overlay)
if (trappeduser && trappedorgan?.amputated)//check if they lost their leg, and get them out of the trap
@@ -831,7 +831,7 @@
src.visible_message("The [src.name] beeps, \"Running on wet floors is hazardous to your health.\"")
message_admins("[C] triggered the explosive wet floor sign at [loc] ([x], [y], [z]): <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>, last touched by [fingerprintslast].")
log_game("[C] triggered the explosive wet floor sign at [loc]([x], [y], [z]): <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>, last touched by [fingerprintslast].")
explosion(src.loc,-1,2,0)
explosion(src.loc,-1,2,0, whodunnit = get_mob_by_key(fingerprintslast))
if(ishuman(C))
dead_legs(C)
if(src)

View File

@@ -474,7 +474,7 @@ its easier to just keep the beam vertical.
// 3 is light damage.
//
// child is set to the child object that exploded, if available.
/atom/proc/ex_act(var/severity, var/child=null)
/atom/proc/ex_act(var/severity, var/child=null, var/mob/whodunnit)
return
/atom/proc/mech_drill_act(var/severity, var/child=null)

View File

@@ -158,7 +158,7 @@ rcd light flash thingy on matter drain
var/obj/machinery/M = targets[1]
M.visible_message("<span class='notice'>You hear a loud electrical buzzing sound!</span>")
spawn(50)
explosion(get_turf(M), -1, 1, 2, 3) //C4 Radius + 1 Dest for the machine
explosion(get_turf(M), -1, 1, 2, 3, whodunnit = user) //C4 Radius + 1 Dest for the machine
qdel(M)
/datum/AI_Module/large/place_cyborg_autoborger

View File

@@ -54,7 +54,7 @@
/obj/item/weapon/spellbook/oneuse/fireball/recoil(mob/user)
..()
explosion(user.loc, -1, 0, 2, 3, 0)
explosion(user.loc, -1, 0, 2, 3, 0, whodunnit = user)
qdel(src)
/obj/item/weapon/spellbook/oneuse/smoke

View File

@@ -107,7 +107,7 @@
if(emagged) //Oh shit nigger what are you doing
spark(src, 5)
spawn(15)
explosion(src.loc, -1, 1, 3, adminlog = 0) //Overload
explosion(src.loc, -1, 1, 3, adminlog = 0, whodunnit = user) //Overload
qdel(src) //It exploded, rip
return
usr.put_in_hands(charging)

View File

@@ -306,7 +306,7 @@
return 0
else if(user in cheaters)
to_chat(usr, "<span class='danger'>[enemy_name] throws a bomb at you for trying to cheat him again.</span>")
explosion(holder.loc,-1,0,2)//IED sized explosion
explosion(holder.loc,-1,0,2, whodunnit = user)//IED sized explosion
user.gib()
cheaters = null
qdel(src)

View File

@@ -373,7 +373,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/action(target)
if(can_pre_detonate && grenade)
grenade.prime()
grenade.prime(chassis.occupant)
grenade = null
return
if(!action_checks(target))
@@ -393,7 +393,7 @@
spawn(det_time)
if(grenade)
grenade = null
G.prime()
G.prime(chassis.occupant)
do_after_cooldown()
return

View File

@@ -1037,8 +1037,9 @@ steam.start() -- spawns the effect
var/amount // TNT equivalent
var/flashing = 0 // does explosion creates flash effect?
var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion
var/mob/user //for investigation
/datum/effect/system/reagents_explosion/set_up (amt, loc, flash = 0, flash_fact = 0)
/datum/effect/system/reagents_explosion/set_up (amt, loc, flash = 0, flash_fact = 0, var/mob/whodunnit)
amount = amt
if(istype(loc, /turf/))
location = loc
@@ -1047,6 +1048,7 @@ steam.start() -- spawns the effect
flashing = flash
flashing_factor = flash_fact
user = whodunnit
return
@@ -1078,7 +1080,7 @@ steam.start() -- spawns the effect
for(var/mob/M in viewers(8, location))
to_chat(M, "<span class='warning'>The solution violently explodes.</span>")
explosion(location, devastation, heavy, light, flash)
explosion(location, devastation, heavy, light, flash, whodunnit = user)
/datum/effect/system/reagents_explosion/proc/holder_damage(var/atom/holder)
if(holder)

View File

@@ -19,7 +19,7 @@
trigger(AM)
/obj/effect/mine/proc/trigger(mob/living/carbon/AM)
explosion(loc, 0, 1, 2, 3)
explosion(loc, 0, 1, 2, 3, whodunnit = AM)
qdel(src)
/obj/effect/mine/dnascramble

View File

@@ -28,7 +28,7 @@
var/explosion_shake_message_cooldown = 0
/proc/explosion(turf/epicenter, const/devastation_range, const/heavy_impact_range, const/light_impact_range, const/flash_range, adminlog = 1, ignored = 0, verbose = 1)
/proc/explosion(turf/epicenter, const/devastation_range, const/heavy_impact_range, const/light_impact_range, const/flash_range, adminlog = 1, ignored = 0, verbose = 1, var/mob/whodunnit)
var/explosion_time = world.time
spawn()
@@ -99,8 +99,8 @@ var/explosion_shake_message_cooldown = 0
if(!istype(M.loc,/turf/space))
M << 'sound/effects/explosionfar.ogg'
if(adminlog)
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</A>)")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ([formatJumpTo(epicenter,"JMP")]) [whodunnit ? " caused by [whodunnit] [whodunnit.ckey ? "([whodunnit.ckey])" : "(no key)"] ([formatJumpTo(whodunnit,"JMP")])" : ""]")
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] [whodunnit ? " caused by [whodunnit] [whodunnit.ckey ? "([whodunnit.ckey])" : "(no key)"]" : ""]")
//Pause the lighting updates for a bit.
var/postponeCycles = max(round(devastation_range/8),1)
@@ -118,7 +118,7 @@ var/explosion_shake_message_cooldown = 0
var/z0 = epicenter.z
explosion_destroy(epicenter,epicenter,devastation_range,heavy_impact_range,light_impact_range,flash_range,explosion_time)
explosion_destroy(epicenter,epicenter,devastation_range,heavy_impact_range,light_impact_range,flash_range,explosion_time,whodunnit)
var/took = stop_watch(watch)
//You need to press the DebugGame verb to see these now....they were getting annoying and we've collected a fair bit of data. Just -test- changes to explosion code using this please so we can compare
@@ -135,7 +135,7 @@ var/explosion_shake_message_cooldown = 0
return 1
/proc/explosion_destroy(turf/epicenter, turf/offcenter, const/devastation_range, const/heavy_impact_range, const/light_impact_range, const/flash_range, var/explosion_time)
/proc/explosion_destroy(turf/epicenter, turf/offcenter, const/devastation_range, const/heavy_impact_range, const/light_impact_range, const/flash_range, var/explosion_time, var/mob/whodunnit)
var/max_range = max(devastation_range, heavy_impact_range, light_impact_range)
var/x0 = offcenter.x
@@ -202,13 +202,13 @@ var/explosion_shake_message_cooldown = 0
A.throw_at(throwT,pushback+2,500)
//else A.GotoExplosionThrowDest(throwT, 50)
//world.log << "THROWING [A] AT [throwT]"
A.ex_act(dist)
A.ex_act(dist,null,whodunnit)
T.ex_act(dist)
T.ex_act(dist,null,whodunnit)
CHECK_TICK
explosion_destroy_multi_z(epicenter, offcenter, devastation_range / 2, heavy_impact_range / 2, light_impact_range / 2, flash_range / 2, explosion_time)
explosion_destroy_multi_z(epicenter, offcenter, devastation_range / 2, heavy_impact_range / 2, light_impact_range / 2, flash_range / 2, explosion_time, whodunnit)
proc/secondaryexplosion(turf/epicenter, range)
for(var/turf/tile in trange(range, epicenter))

View File

@@ -2311,7 +2311,7 @@ var/global/msg_id = 0
log_admin("[key_name(U)] attempted to blow up [P] with the Detomatix cartridge and succeeded")
message_admins("[key_name_admin(U)] attempted to blow up [P] with the Detomatix cartridge and succeeded", 1)
cartridge:shock_charges--
P.explode()
P.explode(U)
else
U.unset_machine()
U << browse(null, "window=pda")
@@ -2786,7 +2786,7 @@ obj/item/device/pda/AltClick()
if(A.Adjacent(user))
return dev_analys.preattack(A, user, 1)
/obj/item/device/pda/proc/explode() //This needs tuning.
/obj/item/device/pda/proc/explode(var/mob/user) //This needs tuning.
var/turf/T = get_turf(src.loc)
if (ismob(loc))
@@ -2796,7 +2796,7 @@ obj/item/device/pda/AltClick()
if(T)
T.hotspot_expose(700,125,surfaces=istype(loc,/turf))
explosion(T, -1, -1, 2, 3)
explosion(T, -1, -1, 2, 3, whodunnit = user)
qdel(src)
return

View File

@@ -88,7 +88,7 @@
visible_message(message)
if(catastrophic)
spawn(0.5 SECONDS)
explosion(loc, 0, prob(15), 2, 0)
explosion(loc, 0, prob(15), 2, 0, whodunnit = user)
/obj/item/device/camera_bug/Destroy()
camera_bugs -= src

View File

@@ -24,9 +24,9 @@
user.register_event(/event/face, src, /obj/item/device/maracas/proc/chickchicky)
chickchicky()
/obj/item/device/maracas/throw_impact(atom/hit_atom)
/obj/item/device/maracas/throw_impact(atom/hit_atom, var/speed, var/mob/user)
if(emagged)
explosion(get_turf(src), -1 ,1, 3)
explosion(get_turf(src), -1 ,1, 3, whodunnit = user)
qdel(src)
/obj/item/device/maracas/dropped(mob/user)

View File

@@ -469,7 +469,7 @@
icon_state = "fireball_flask"
/obj/item/potion/fireball/imbibe_effect(mob/living/user)
explosion(get_turf(user), -1, 1, 2, 5)
explosion(get_turf(user), -1, 1, 2, 5, whodunnit = user)
/obj/item/potion/fireball/impact_atom(atom/target)
explosion(get_turf(target), -1, 1, 2, 5)

View File

@@ -868,7 +868,7 @@
sleep(50)
say("Someone pass the boombox.")
sleep(5)
explosion(get_turf(src), -1,1,4)
explosion(get_turf(src), -1,1,4, whodunnit = user)
qdel(src)
else
return

View File

@@ -190,7 +190,7 @@
say("That is enough for [crackers_to_dispense] crackers!")
if(crackers_to_dispense > 100)
visible_message("<span class = 'warning'>\The [src]'s matter fabrication unit overloads!</span>")
explosion(loc, 0, prob(15), 2, 0)
explosion(loc, 0, prob(15), 2, 0, whodunnit = user)
qdel(src)
return
for(var/x = 1 to crackers_to_dispense)
@@ -452,7 +452,7 @@ var/global/list/alcatraz_stuff = list(
var/datum/organ/external/active_hand = user.get_active_hand_organ()
if(active_hand)
active_hand.explode()
explosion(user, -1, 0, 2)
explosion(user, -1, 0, 2, whodunnit = user)
qdel(src)
/obj/item/clothing/head/helmet/donutgiver/Hear(var/datum/speech/speech, var/rendered_speech="")

View File

@@ -340,7 +340,7 @@ MATCHBOXES ARE ALSO IN FANCY.DM
if(reagents.get_reagent_amount(PLASMA)) //Plasma explodes when exposed to fire
var/datum/effect/system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount(PLASMA)/2.5, 1), get_turf(src), 0, 0)
e.set_up(round(reagents.get_reagent_amount(PLASMA)/2.5, 1), get_turf(src), 0, 0, whodunnit = usr)
e.start()
if(ismob(loc))
var/mob/M = loc
@@ -350,7 +350,7 @@ MATCHBOXES ARE ALSO IN FANCY.DM
if(reagents.get_reagent_amount(FUEL)) //Fuel explodes, too, but much less violently
var/datum/effect/system/reagents_explosion/e = new()
e.set_up(round(reagents.get_reagent_amount(FUEL)/5, 1), get_turf(src), 0, 0)
e.set_up(round(reagents.get_reagent_amount(FUEL)/5, 1), get_turf(src), 0, 0, whodunnit = usr)
e.start()
if(ismob(loc))
var/mob/M = loc

View File

@@ -140,7 +140,7 @@
result = 24
sleep(40)
var/turf/epicenter = get_turf(src)
explosion(epicenter, round(result*0.25), round(result*0.5), round(result), round(result*1.5), 1, cap)
explosion(epicenter, round(result*0.25), round(result*0.5), round(result), round(result*1.5), 1, cap, whodunnit = user)
if(cap)
for(var/obj/machinery/computer/bhangmeter/bhangmeter in doppler_arrays)
if(bhangmeter)
@@ -272,7 +272,7 @@
to_chat(user, "<span class=sinister><B>You get nothing. No curse or reward! </span></B>")
if(13)
to_chat(user, "<span class=sinister><B>You've rolled 13! The cursed dice is broken! </span></B>")
explosion(get_turf(src), 0, 0, 4, 7)
explosion(get_turf(src), 0, 0, 4, 7, whodunnit = user)
to_chat(user, "<span class=danger><B>The dice explosively shatters! </span></B>")
qdel(src)

View File

@@ -143,10 +143,10 @@
to_chat(user, "<span class='notice'>There is no room for \the [I] in the improvised explosive!.</span>")
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
/obj/item/weapon/grenade/iedcasing/prime(var/mob/user) //Blowing that can up
update_mob()
process_shrapnel()
explosion(get_turf(src.loc),-1,0,2)
explosion(get_turf(src.loc),-1,0,2, whodunnit = user)
if(istype(loc, /obj/item/weapon/beartrap))
var/obj/item/weapon/beartrap/boomtrap = loc

View File

@@ -87,7 +87,7 @@
prime(user)
/obj/item/weapon/grenade/proc/prime()
/obj/item/weapon/grenade/proc/prime(var/mob/user)
// playsound(loc, 'sound/items/Welder2.ogg', 25, 1)
var/turf/T = get_turf(src)
if(T)

View File

@@ -6,9 +6,9 @@
origin_tech = Tc_SYNDICATE + "=2" + Tc_COMBAT + "=3"
det_time = 3 SECONDS
/obj/item/weapon/grenade/syndigrenade/prime()
/obj/item/weapon/grenade/syndigrenade/prime(var/mob/user)
..()
explosion(loc, 0, 2, 4, 6) //Explosive grenades pack a decent punch and are perfectly capable of breaking the hull, so beware
explosion(loc, 0, 2, 4, 6, whodunnit = user) //Explosive grenades pack a decent punch and are perfectly capable of breaking the hull, so beware
spawn()
qdel(src)

View File

@@ -38,7 +38,7 @@
var/turf/T = get_turf(M)
M.gib()
explosion(T, 1, 3, 4, 6)
explosion(T, 1, 3, 4, 6, whodunnit = M)
T.hotspot_expose(3500, 125, surfaces = 1)
qdel(src)
@@ -140,7 +140,7 @@ the implant may become unstable and either pre-maturely inject the subject or si
var/turf/T = get_turf(M)
M.gib()
explosion(T, 1, 1, 3, 4)
explosion(T, 1, 1, 3, 4, whodunnit = M)
T.hotspot_expose(3500, 125, surfaces = 1)
qdel(src)

View File

@@ -57,7 +57,7 @@
message_admins("[key_name_admin(user)] detonated [H] and [src], creating an explosion.")
log_game("[key_name(user)] detonated [H] and [src], creating an explosion.")
empulse(T,(20),(40))
explosion(T, 5, 10, 20, 40, 1)
explosion(T, 5, 10, 20, 40, 1, whodunnit = user)
user.gib() //Just to be sure
else
investigation_log(I_SINGULO,"has become a singularity. Caused by [user.key]")

View File

@@ -328,9 +328,9 @@
if(prob(1))
to_chat(user, "<span class='notice'>You hit [pick("a good and caring parent", "a criminal", "someone everyone will miss",
"someone no one will miss", "a thief", "an abusive parent", "a space communist", "an alcoholic", "an adventurer")].</span>")
explosion(target, 0, 0, 1)
explosion(target, 0, 0, 1, whodunnit = user)
/obj/item/weapon/damocles/throw_impact(atom/hit_atom, speed, mob/user)
..()
explosion(get_turf(src), 0, 2, 3)
explosion(get_turf(src), 0, 2, 3, whodunnit = user)
qdel(src)

View File

@@ -267,8 +267,8 @@
var/turf/epicenter = get_turf(loc)
// to_chat(world, "<span class='notice'>Exploding Pressure: [pressure] kPa, intensity: [range]</span>")
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5), 1, cap)
var/mob/user = istype(src.loc,/obj/item/device/transfer_valve) ? get_mob_by_key(loc.fingerprintslast) : get_mob_by_key(fingerprintslast)
explosion(epicenter, round(range*0.25), round(range*0.5), round(range), round(range*1.5), 1, cap, whodunnit = user)
if(cap)
for(var/obj/machinery/computer/bhangmeter/bhangmeter in doppler_arrays)
if(bhangmeter)

View File

@@ -674,23 +674,23 @@ var/list/admin_verbs_mod = list(
set desc = "Cause an explosion of varying strength at your location."
var/turf/epicenter = mob.loc
var/list/choices = list("Small Bomb (1,2,3)", "Medium Bomb (2,3,4)", "Big Bomb (3,5,7)", "Custom Bomb")
var/list/choices = list("Small Bomb (1,3,4)", "Medium Bomb (3,7,14)", "Big Bomb (7,14,28)", "Custom Bomb")
var/choice = input("What size explosion would you like to produce?") in choices | null
switch(choice)
if(null)
return 0
if("Small Bomb (1,2,3)")
explosion(epicenter, 1, 2, 3, 3)
if("Medium Bomb (2,3,4)")
explosion(epicenter, 2, 3, 4, 4)
if("Big Bomb (3,5,7)")
explosion(epicenter, 3, 5, 7, 5)
if("Small Bomb (1,3,4)")
explosion(epicenter, 1, 3, 4, 4, whodunnit = usr)
if("Medium Bomb (3,7,14)")
explosion(epicenter, 3, 7, 14, 14, whodunnit = usr)
if("Big Bomb (7,14,28)")
explosion(epicenter, 7, 14, 28, 28, whodunnit = usr)
if("Custom Bomb")
var/devastation_range = input("Devastation range (in tiles):") as num
var/heavy_impact_range = input("Heavy impact range (in tiles):") as num
var/light_impact_range = input("Light impact range (in tiles):") as num
var/flash_range = input("Flash range (in tiles):") as num
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range)
explosion(epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, whodunnit = usr)
log_admin("[key_name(usr)] creating an admin explosion at [epicenter.loc] ([epicenter.x],[epicenter.y],[epicenter.z]).")
message_admins("<span class='notice'>[key_name_admin(src)] creating an admin explosion at [epicenter.loc] ([epicenter.x],[epicenter.y],[epicenter.z]) (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[epicenter.x];Y=[epicenter.y];Z=[epicenter.z]'>JMP</A>).</span>")

View File

@@ -3879,7 +3879,7 @@
feedback_add_details("admin_secrets_fun_used","SC")
var/choice = input("You sure you want to destroy the universe and create a large explosion at your location? Misuse of this could result in removal of flags or hilarity.") in list("NO TIME TO EXPLAIN", "Cancel")
if(choice == "NO TIME TO EXPLAIN")
explosion(get_turf(usr), 8, 16, 24, 32, 1)
explosion(get_turf(usr), 8, 16, 24, 32, 1, whodunnit = usr)
new /turf/unsimulated/wall/supermatter(get_turf(usr))
SetUniversalState(/datum/universal_state/supermatter_cascade)
message_admins("[key_name_admin(usr)] has managed to destroy the universe with a supermatter cascade. Good job, [key_name_admin(usr)]")

View File

@@ -744,7 +744,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if (alert(src, "Are you sure you want to do this? It will laaag.", "Confirmation", "Yes", "No") == "No")
return
explosion(O, devastation, heavy, light, flash)
explosion(O, devastation, heavy, light, flash, whodunnit = usr)
log_admin("[key_name(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])")
message_admins("[key_name_admin(usr)] created an explosion ([devastation],[heavy],[light],[flash]) at ([O.x],[O.y],[O.z])", 1)
feedback_add_details("admin_verb","EXPL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -50,7 +50,7 @@
for(var/turf/T in get_area_turfs(thearea.type))
L+=T
var/loc = pick(L)
explosion(loc,2,5,11)
explosion(loc,2,5,11, whodunnit = usr)
reload = 0
/*mob/proc/openfire()

View File

@@ -983,7 +983,7 @@ obj/item/clothing/suit/cassock
var/message_say = user.handle_suicide_bomb_cause()
to_chat(viewers(user), "<span class='danger'>[user] activates the [src]! It looks like \he's going out with a bang!</span>")
user.say(message_say)
explosion(user, 1, 3, 6)
explosion(user, 1, 3, 6, whodunnit = user)
message_admins("[user] has detonated \the [src]!")
qdel(src) //Just in case
return SUICIDE_ACT_CUSTOM
@@ -992,7 +992,7 @@ obj/item/clothing/suit/cassock
var/mob/living/carbon/human/H = loc
if(!ishuman(H) || !active)
return
explosion(H, 1, 3, 6)
explosion(H, 1, 3, 6, whodunnit = H)
message_admins("[H] has detonated \the [src]!")
qdel(src) //Just in case

View File

@@ -390,7 +390,7 @@
if(ourVendor)
ourVendor.forceMove(loc)
else
explosion(loc, 1,2,2)
explosion(loc, 1,2,2, whodunnit = src)
..(gibbed)
qdel(src)

View File

@@ -38,7 +38,7 @@
l_store.emp_act(severity)
..()
/mob/living/carbon/alien/humanoid/ex_act(severity)
/mob/living/carbon/alien/humanoid/ex_act(severity, var/child=null, var/mob/whodunnit)
if(flags & INVULNERABLE)
return
@@ -52,6 +52,7 @@
switch (severity)
if(1)
b_loss += 500
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Gibbed", admin_warn = TRUE)
gib()
return
@@ -61,6 +62,7 @@
f_loss += 60
ear_damage += 30
ear_deaf += 120
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: [shielded ? "60" : "120"]", admin_warn = TRUE)
if(3)
b_loss += 30
@@ -68,6 +70,7 @@
Paralyse(TRUE)
ear_damage += 15
ear_deaf += 60
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 30", admin_warn = TRUE)
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)

View File

@@ -43,7 +43,7 @@
..(amount)
/mob/living/carbon/alien/larva/ex_act(severity)
/mob/living/carbon/alien/larva/ex_act(severity, var/child=null, var/mob/whodunnit)
if(flags & INVULNERABLE)
return
@@ -55,6 +55,7 @@
switch (severity)
if(1)
b_loss += 500
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Gibbed", admin_warn = TRUE)
gib()
return
if(2)
@@ -62,12 +63,14 @@
f_loss += 60
ear_damage += 30
ear_deaf += 120
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 120", admin_warn = TRUE)
if(3)
b_loss += 30
if(prob(50))
Paralyse(1)
ear_damage += 15
ear_deaf += 60
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 30", admin_warn = TRUE)
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)

View File

@@ -261,7 +261,7 @@
if(H && B)
to_chat(H, "<span class='danger'>You were disintegrated by [B.my_rel.deity_name]'s bolt of lightning.</span>")
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Farted on a bible and suffered [B.my_rel.deity_name]'s wrath.</font>")
explosion(get_turf(H),-1,-1,1,5) //Tiny explosion with flash
explosion(get_turf(H),-1,-1,1,5, whodunnit = H) //Tiny explosion with flash
H.dust()
//Ayy lmao

View File

@@ -408,7 +408,7 @@ emp_act
w_uniform.apply_luminol()
update_inv_w_uniform(update)
/mob/living/carbon/human/ex_act(var/severity, var/noblind = FALSE)
/mob/living/carbon/human/ex_act(var/severity, var/child=null, var/mob/whodunnit, var/noblind = FALSE)
if(flags & INVULNERABLE)
return FALSE
@@ -424,6 +424,7 @@ emp_act
b_loss += 300
if(!prob(gotarmor)) //Percent chance equal to their armor resist to not gib instantly.
gib()
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Gibbed", admin_warn = TRUE)
return
else
var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
@@ -441,10 +442,12 @@ emp_act
if (BLOB_ACT_MEDIUM)
if (stat == 2 && client)
gib()
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Gibbed", admin_warn = TRUE)
return
else if (stat == 2 && !client)
gibs(loc, virus2)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Gibbed", admin_warn = TRUE)
qdel(src)
return
@@ -526,6 +529,7 @@ emp_act
if(LIMB_LEFT_ARM)
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if(update)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity]", admin_warn = TRUE)
UpdateDamageIcon()

View File

@@ -229,7 +229,7 @@
powerlevel = 0 // oh no, the power!
..()
/mob/living/carbon/slime/ex_act(severity)
/mob/living/carbon/slime/ex_act(severity, var/child=null, var/mob/whodunnit)
if(flags & INVULNERABLE)
return
@@ -246,16 +246,19 @@
switch (severity)
if (1.0)
b_loss += 500
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Gibbed", admin_warn = TRUE)
return
if (2.0)
b_loss += 60
f_loss += 60
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 120", admin_warn = TRUE)
if(3.0)
b_loss += 30
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 30", admin_warn = TRUE)
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)

View File

@@ -433,7 +433,7 @@ var/list/ai_list = list()
message_admins("[key_name_admin(src)] called the shuttle due to being hit with an EMP.'.")
..()
/mob/living/silicon/ai/ex_act(severity)
/mob/living/silicon/ai/ex_act(severity, var/child=null, var/mob/whodunnit)
if(flags & INVULNERABLE)
return
@@ -445,13 +445,16 @@ var/list/ai_list = list()
if(!isDead())
adjustBruteLoss(100)
adjustFireLoss(100)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 200", admin_warn = TRUE)
if(2.0)
if(!isDead())
adjustBruteLoss(60)
adjustFireLoss(60)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 120", admin_warn = TRUE)
if(3.0)
if(!isDead())
adjustBruteLoss(30)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 30", admin_warn = TRUE)
updatehealth()

View File

@@ -48,7 +48,7 @@
visible_message("<span class='danger'>[name] begins to spark violently!</span>")
playsound(src, 'sound/machines/Alarm_short.ogg', 75, FALSE)
spawn(30)
explosion(src.loc, 2, 5, 8, 10)
explosion(src.loc, 2, 5, 8, 10, whodunnit = src)
gibbed = TRUE
gib()

View File

@@ -4,7 +4,7 @@
stat = DEAD
icon_state = "ai-crash"
spawn(10)
explosion(loc, 3, 6, 12, 15)
explosion(loc, 3, 6, 12, 15, whodunnit = src)
gib()
return ..(gibbed)

View File

@@ -44,7 +44,7 @@
if(connected_ai.explosive_cyborgs)
visible_message("<span class='notice'>You hear a soft beep.</span>")
spawn(10)
explosion(src.loc, 1, 4, 5, 6)
explosion(src.loc, 1, 4, 5, 6, whodunnit = src)
gib()
return
if(!gibbed)

View File

@@ -456,7 +456,7 @@
return FALSE
/mob/living/silicon/robot/ex_act(severity)
/mob/living/silicon/robot/ex_act(severity, var/child=null, var/mob/whodunnit)
if(flags & INVULNERABLE)
to_chat(src, "The bus' robustness protects you from the explosion.")
return
@@ -468,15 +468,18 @@
if(!isDead())
adjustBruteLoss(100)
adjustFireLoss(100)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 200", admin_warn = TRUE)
gib()
return
if(2.0)
if(!isDead())
adjustBruteLoss(60)
adjustFireLoss(60)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 120", admin_warn = TRUE)
if(3.0)
if(!isDead())
adjustBruteLoss(30)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 30", admin_warn = TRUE)
updatehealth()

View File

@@ -164,7 +164,7 @@
src.name = "Spider-bot ([M.brainmob.name])"
/mob/living/simple_animal/spiderbot/proc/explode() //When emagged.
explosion(get_turf(loc), -1, -1, 3, 5)
explosion(get_turf(loc), -1, -1, 3, 5, whodunnit = src)
death()
/mob/living/simple_animal/spiderbot/update_icon()

View File

@@ -373,5 +373,5 @@
sleep(10)
var/turf/eloc = get_turf(loc)
qdel(src)
explosion(eloc,1,2,3)
explosion(eloc,1,2,3, whodunnit = src)
new /obj/item/weapon/gun/gatling(eloc)

View File

@@ -91,7 +91,7 @@
..(TRUE)
explosion(T, -1, 1, 2)
explosion(T, -1, 1, 2, whodunnit = src)
/obj/effect/landmark/corpse/skellington
name = "skellington"

View File

@@ -189,7 +189,7 @@
var/turf/T = get_turf(src)
new /obj/effect/gibspawner/generic(T)
qdel(src)
explosion(T, -1, 1, 4)
explosion(T, -1, 1, 4, whodunnit = src)
/mob/living/simple_animal/hostile/necromorph/puker
desc = "A twisted, engorged husk of what was once human. It reeks of stomach acid."

View File

@@ -160,7 +160,7 @@
walk(src,0)
spawn(rand(50,80))
if(!disabled && exploding)
explosion(get_turf(src), 0, 1, 4, 7)
explosion(get_turf(src), 0, 1, 4, 7, whodunnit = src)
//proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1)
return ..()

View File

@@ -805,7 +805,7 @@
if(istype(held_item, /obj/item/weapon/grenade))
var/obj/item/weapon/grenade/G = held_item
G.forceMove(src.loc)
G.prime()
G.prime(src)
to_chat(src, "You let go of [held_item]!")
held_item = null
return 1

View File

@@ -580,22 +580,24 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
..(gibbed)
/mob/living/simple_animal/ex_act(severity)
/mob/living/simple_animal/ex_act(severity, var/child=null, var/mob/whodunnit)
if(flags & INVULNERABLE)
return
..()
switch (severity)
if (1.0)
adjustBruteLoss(500)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Gibbed", admin_warn = TRUE)
gib()
return
if (2.0)
adjustBruteLoss(60)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 60", admin_warn = TRUE)
if(3.0)
adjustBruteLoss(30)
add_attacklogs(src, whodunnit, "got caught in an explosive blast from", addition = "Severity: [severity], Damage: 30", admin_warn = TRUE)
/mob/living/simple_animal/adjustBruteLoss(damage)

View File

@@ -40,7 +40,7 @@
var/turf/gloc = get_turf(loc)
visible_message("<span class='danger'><B>[src] shudders violently and explodes!</B>","<span class='warning'>You feel your body rupture!</span></span>")
gib()
explosion(gloc, -1, -1, 3, 5)
explosion(gloc, -1, -1, 3, 5, whodunnit = src)
/mob/living/simple_animal/vox/armalis/attackby(var/obj/item/O as obj, var/mob/user as mob)
user.delayNextAttack(8)

View File

@@ -148,12 +148,12 @@ var/global/list/visible_spaces = list(/turf/simulated/open, /turf/simulated/floo
multi_z_spiral_block(epicenter,max_range,inward,1,shape)
// Halves above and below, as per suggestion by deity on how to handle multi-z explosions
/proc/explosion_destroy_multi_z(turf/epicenter, turf/offcenter, const/devastation_range, const/heavy_impact_range, const/light_impact_range, const/flash_range, var/explosion_time)
/proc/explosion_destroy_multi_z(turf/epicenter, turf/offcenter, const/devastation_range, const/heavy_impact_range, const/light_impact_range, const/flash_range, var/explosion_time, var/mob/whodunnit)
if(HasAbove(offcenter.z) && (devastation_range >= 1 || heavy_impact_range >= 1 || light_impact_range >= 1 || flash_range >= 1))
var/turf/upcenter = GetAbove(offcenter)
if(upcenter.z > epicenter.z)
explosion_destroy(epicenter, upcenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, explosion_time)
explosion_destroy(epicenter, upcenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, explosion_time, whodunnit)
if(HasBelow(offcenter.z) && (devastation_range >= 1 || heavy_impact_range >= 1 || light_impact_range >= 1 || flash_range >= 1))
var/turf/downcenter = GetBelow(offcenter)
if(downcenter.z < epicenter.z)
explosion_destroy(epicenter, downcenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, explosion_time)
explosion_destroy(epicenter, downcenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, explosion_time, whodunnit)

View File

@@ -834,7 +834,7 @@ Note that amputating the affected organ does in fact remove the infection from t
owner.visible_message("<span class='danger'>\The [owner]'s [display_name] explodes violently!</span>", \
"<span class='danger'>Your [display_name] explodes violently!</span>", \
"<span class='danger'>You hear an explosion followed by a scream!</span>")
explosion(get_turf(owner), -1, -1, 2, 3)
explosion(get_turf(owner), -1, -1, 2, 3, whodunnit = owner)
spark(src, 5, FALSE)
if(organ)

View File

@@ -54,7 +54,7 @@
if(exploding && !exploded)
message_admins("AME explosion at ([x],[y],[z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[x];Y=[y];Z=[z]'>JMP</a>) - Last touched by [fingerprintslast]",0,1)
exploded=1
explosion(get_turf(src),8,10,12,15)
explosion(get_turf(src),8,10,12,15, whodunnit = get_mob_by_key(fingerprintslast))
if(src)
qdel(src)

View File

@@ -113,7 +113,7 @@
message_admins("LOG: Rigged power cell explosion, last touched by [fingerprintslast]")
charge = 0
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range)
explosion(T, devastation_range, heavy_impact_range, light_impact_range, flash_range, whodunnit = get_mob_by_key(fingerprintslast))
qdel(src)

View File

@@ -260,7 +260,7 @@ var/global/list/obj/machinery/light/alllights = list()
log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]")
message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]")
explode()
explode(get_mob_by_key(fingerprintslast))
else if( prob( min(60, current_bulb.switchcount*current_bulb.switchcount*0.01) ) )
if(current_bulb.status == LIGHT_OK && trigger)
current_bulb.status = LIGHT_BURNED
@@ -342,7 +342,7 @@ var/global/list/obj/machinery/light/alllights = list()
log_admin("LOG: Rigged light explosion, last touched by [fingerprintslast]")
message_admins("LOG: Rigged light explosion, last touched by [fingerprintslast]")
explode()
explode(get_mob_by_key(fingerprintslast))
else
to_chat(user, "This type of light requires a [fitting].")
return
@@ -583,11 +583,11 @@ var/global/list/obj/machinery/light/alllights = list()
/*
* Explode the light.
*/
/obj/machinery/light/proc/explode()
/obj/machinery/light/proc/explode(var/mob/user)
spawn(0)
broken() // Break it first to give a warning.
sleep(2)
explosion(get_turf(src), 0, 0, 2, 2)
explosion(get_turf(src), 0, 0, 2, 2, whodunnit = user)
sleep(1)
qdel(src)

View File

@@ -31,7 +31,7 @@
return
/obj/item/projectile/missile/proc/explode()
explosion(src.loc, 1, 1, 2, 7, 0)
explosion(src.loc, 1, 1, 2, 7, 0, whodunnit = firer)
playsound(src.loc, "explosion", 50, 1)
del(src)

View File

@@ -295,7 +295,7 @@
return 0
if(prob(max(0, fire_delay/2-5)))
var/turf/T = get_turf(loc)
explosion(T, 0, 1, 3, 5)
explosion(T, 0, 1, 3, 5, whodunnit = M)
M.drop_item(src, force_drop = 1)
qdel(src)
to_chat(M, "<span class='danger'>\The [src] explodes!.</span>")

View File

@@ -259,7 +259,7 @@
to_chat(user, "<span class='danger'>\The [src]'s firing mechanism fails!</span>")
loaded_item.forceMove(user.loc)
loaded_item = null
explosion(user, -1, 0, 2)
explosion(user, -1, 0, 2, whodunnit = user)
qdel(src)
return

View File

@@ -388,9 +388,9 @@
admin_warn(user)
add_fingerprint(user)
update_icon()
fuse_burn()
fuse_burn(user)
/obj/item/cannonball/fuse_bomb/proc/fuse_burn()
/obj/item/cannonball/fuse_bomb/proc/fuse_burn(var/mob/user)
set waitfor = 0
if(src && src.fuse_lit)
@@ -398,9 +398,9 @@
sleep(10)
src.seconds_left--
src.update_icon()
.()
.(user)
else
src.detonation()
src.detonation(user)
return
/obj/item/cannonball/fuse_bomb/extinguish()
@@ -408,12 +408,12 @@
fuse_lit = 0
update_icon()
/obj/item/cannonball/fuse_bomb/proc/detonation()
explosion(get_turf(src), -1, 0, 4) //buff range to compensate for this somehow breaching
/obj/item/cannonball/fuse_bomb/proc/detonation(var/mob/user)
explosion(get_turf(src), -1, 0, 4, whodunnit = user) //buff range to compensate for this somehow breaching
qdel(src)
/obj/item/cannonball/fuse_bomb/admin/detonation() //okay, this one can breach if it wants
explosion(get_turf(src), -1, 1, 3)
/obj/item/cannonball/fuse_bomb/admin/detonation(var/mob/user) //okay, this one can breach if it wants
explosion(get_turf(src), -1, 1, 3, whodunnit = user)
qdel(src)
/obj/item/cannonball/fuse_bomb/update_icon()
@@ -459,8 +459,8 @@
bombers += log_str
log_game(log_str)
/obj/item/cannonball/fuse_bomb/ex_act(severity)//MWAHAHAHA
detonation()
/obj/item/cannonball/fuse_bomb/ex_act(severity, var/child = null, var/mob/whodunnit)//MWAHAHAHA
detonation(whodunnit)
/obj/item/cannonball/fuse_bomb/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//consistency
..()

View File

@@ -83,7 +83,7 @@
else //Needed to get that shitty default suicide_act out of the way
user.visible_message("<span class='danger'>[user] fiddles with \the [src]'s safeties and suddenly aims it at \his feet! It looks like \he's trying to commit suicide.</span>")
sleep(1 SECONDS) //RUN YOU IDIOT, RUN
explosion(src.loc, -1, 1, 4, 8)
explosion(src.loc, -1, 1, 4, 8, whodunnit = user)
if(src) //Is the rocket launcher somehow still here ?
qdel(src) //This never happened
return SUICIDE_ACT_BRUTELOSS
@@ -152,7 +152,7 @@
else
user.visible_message("<span class='danger'>[user] fiddles with \the [src]'s safeties and suddenly aims it at \his feet! It looks like \he's trying to commit suicide.</span>")
sleep(1 SECONDS) //RUN YOU IDIOT, RUN
explosion(src.loc, 1, 3, 5, 8) //Using the actual rocket damage, instead of the very old, super nerfed value
explosion(src.loc, 1, 3, 5, 8, whodunnit = user) //Using the actual rocket damage, instead of the very old, super nerfed value
return SUICIDE_ACT_BRUTELOSS
/obj/item/weapon/gun/projectile/rocketlauncher/nikita/attackby(var/obj/item/A as obj, mob/user as mob)

View File

@@ -216,7 +216,7 @@ obj/item/projectile/bullet/suffocationbullet
/obj/item/projectile/bullet/burstbullet/on_hit(var/atom/target, var/blocked = 0)
..()
explosion(target, 0,1,1,5)
explosion(target, 0,1,1,5, whodunnit = firer)
qdel(src)
/obj/item/projectile/bullet/boombullet
@@ -388,7 +388,7 @@ obj/item/projectile/bullet/suffocationbullet
var/heavy_impact_range = 0.5
var/light_impact_range = 1
var/flash_range = light_impact_range
explosion(target.loc, devastation_range, heavy_impact_range, light_impact_range, flash_range)
explosion(target.loc, devastation_range, heavy_impact_range, light_impact_range, flash_range, whodunnit = firer)
qdel(src)
/obj/item/projectile/bullet/osipr

View File

@@ -56,7 +56,7 @@
var/A_turf = get_turf(A)
..()
if(special_collision == PROJECTILE_COLLISION_DEFAULT || special_collision == PROJECTILE_COLLISION_BLOCKED)
explosion(A_turf, exdev, exheavy, exlight, exflash)
explosion(A_turf, exdev, exheavy, exlight, exflash, whodunnit = firer)
if(!gcDestroyed)
qdel(src)
@@ -246,7 +246,7 @@
return 1
/obj/item/projectile/rocket/nikita/proc/detonate(var/atom/A)
explosion(A, exdev, exheavy, exlight, exflash)
explosion(A, exdev, exheavy, exlight, exflash, whodunnit = firer)
if(!gcDestroyed)
qdel(src)

View File

@@ -187,7 +187,7 @@
msg_admin_attack("[key_name(Proj.firer)] shot [src]/([formatJumpTo(src)]) with a [Proj.type] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[Proj.firer.x];Y=[Proj.firer.y];Z=[Proj.firer.z]'>JMP</a>)") //BS12 EDIT ALG
else
msg_admin_attack("[src] was shot by a [Proj.type] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[src.x];Y=[src.y];Z=[src.z]'>JMP</a>)") //BS12 EDIT ALG
explode()
explode(Proj.firer)
return ..()
/obj/structure/reagent_dispensers/fueltank/suicide_act(var/mob/living/user)
@@ -227,15 +227,15 @@
if(car.occupant && istype(car.occupant, /mob/living/carbon/human))
var/mob/living/carbon/human/H = car.occupant
H.audible_scream("fueltank_crash")
explode()
explode(car.occupant)
/obj/structure/reagent_dispensers/fueltank/proc/explode()
/obj/structure/reagent_dispensers/fueltank/proc/explode(var/mob/user)
if (reagents.total_volume > 500)
explosion(src.loc,1,2,4)
explosion(src.loc,1,2,4, whodunnit = user)
else if (reagents.total_volume > 100)
explosion(src.loc,0,1,3)
explosion(src.loc,0,1,3, whodunnit = user)
else
explosion(src.loc,-1,1,2)
explosion(src.loc,-1,1,2, whodunnit = user)
if(src)
qdel(src)

View File

@@ -102,7 +102,7 @@
if(prob(Proj.damage/2))
if(Proj.firer)
msg_admin_attack("[key_name(Proj.firer)] blew up [src]/([formatJumpTo(src)]) with a [Proj.type] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[Proj.firer.x];Y=[Proj.firer.y];Z=[Proj.firer.z]'>JMP</a>)")
explosion(get_turf(src), 1, 2, 3, 3)
explosion(get_turf(src), 1, 2, 3, 3, whodunnit = Proj.firer)
src.investigation_log(I_ARTIFACT, "|| blew up after taking damage from || [Proj.type] || fired by [Proj.firer ? "[key_name(Proj.firer)]" : "something"].")
qdel(src)
return ..()
@@ -115,7 +115,7 @@
src.visible_message("<span class='warning'>\The [user] damages \the [src] with \the [O].</span>")
if(prob(O.force/2))
msg_admin_attack("[user] blew up [src]/([formatJumpTo(src)]) with [O] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
explosion(get_turf(src), 1, 2, 3, 3)
explosion(get_turf(src), 1, 2, 3, 3, whodunnit = user)
src.investigation_log(I_ARTIFACT, "|| blew up after taking damage from || [O] || attacked by [key_name(user)].")
qdel(src)
else

View File

@@ -144,7 +144,7 @@
if(prob(Proj.damage/2))
if(Proj.firer)
msg_admin_attack("[key_name(Proj.firer)] blew up [src]/([formatJumpTo(src)]) with a [Proj.type] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[Proj.firer.x];Y=[Proj.firer.y];Z=[Proj.firer.z]'>JMP</a>)")
explosion(get_turf(src), -1, 2, 3, 3)
explosion(get_turf(src), -1, 2, 3, 3, whodunnit = Proj.firer)
src.investigation_log(I_ARTIFACT, "|| blew up after taking damage from || [Proj.type] || fired by [Proj.firer ? "[key_name(Proj.firer)]" : "something"].")
qdel(src)
return ..()
@@ -158,7 +158,7 @@
if(prob(O.force/2))
msg_admin_attack("[user] blew up [src]/([formatJumpTo(src)]) with [O] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
src.investigation_log(I_ARTIFACT, "|| blew up after taking damage from || [O] || attacked by [key_name(user)].")
explosion(get_turf(src), -1, 2, 3, 3)
explosion(get_turf(src), -1, 2, 3, 3, whodunnit = user)
qdel(src)
else
src.visible_message("<span class='warning'>\The [user] taps \the [src] with \the [O].</span>")

View File

@@ -35,7 +35,7 @@
/spell/targeted/projectile/dumbfire/fireball/prox_cast(var/list/targets, spell_holder)
for(var/mob/living/M in targets)
apply_spell_damage(M)
explosion(get_turf(spell_holder), ex_severe, ex_heavy, ex_light, ex_flash)
explosion(get_turf(spell_holder), ex_severe, ex_heavy, ex_light, ex_flash, whodunnit = spell_holder)
return targets
/spell/targeted/projectile/dumbfire/fireball/choose_prox_targets(mob/user = usr, var/atom/movable/spell_holder)

View File

@@ -123,7 +123,7 @@
radio_connection = null
. = ..()
/obj/machinery/power/supermatter/proc/explode()
/obj/machinery/power/supermatter/proc/explode(var/mob/user)
has_exploded++
var/turf/T = get_turf(src)
if (has_exploded <= 1)
@@ -131,7 +131,7 @@
var/turf/turff = get_turf(src)
new /turf/unsimulated/wall/supermatter(turff)
SetUniversalState(/datum/universal_state/supermatter_cascade)
explosion(turff, explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1)
explosion(turff, explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1, whodunnit = user)
empulse(turff, 100, 200, 1)
else if (has_exploded == 2)// yeah not gonna report it more than once to not flood the logs if it glitches badly
log_admin("[name] at [T.loc] has tried exploding despite having already exploded once. Looks like it wasn't properly deleted (gcDestroyed = [gcDestroyed]).")
@@ -141,11 +141,11 @@
if (has_exploded > 1)
stack_trace("[name] at [T.loc] has tried exploding despite having already exploded once. Looks like it wasn't properly deleted (gcDestroyed = [gcDestroyed]).")
/obj/machinery/power/supermatter/shard/explode()
/obj/machinery/power/supermatter/shard/explode(var/mob/user)
has_exploded++
var/turf/T = get_turf(src)
if (has_exploded <= 1)
explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1)
explosion(get_turf(src), explosion_power, explosion_power * 2, explosion_power * 3, explosion_power * 4, 1, whodunnit = user)
empulse(get_turf(src), 100, 200, 1)
else if (has_exploded == 2)// yeah not gonna report it more than once to not flood the logs if it glitches badly
log_admin("[name] at [T.loc] has tried exploding despite having already exploded once. Looks like it wasn't properly deleted (gcDestroyed = [gcDestroyed]).")
@@ -158,12 +158,12 @@
Consume(AM)
return TRUE
/obj/machinery/power/supermatter/ex_act(severity)
/obj/machinery/power/supermatter/ex_act(severity,var/mob/whodunnit)
switch(severity)
if(3.0)
return //Should be improved
else
return explode()
return explode(whodunnit)
/obj/machinery/power/supermatter/shard/singularity_act(current_size, obj/machinery/singularity/S)
var/super = FALSE