mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 03:33:21 +00:00
Minor optimisations for explosions (again). Only removed some unnecessary lists, nothing major. Added some logging to world.log which gives explosion location/duration etc so we actually have something to compare it to whenever that damn code gets changed again :P
Added a shortcut to player notes into the investigate verb. Just type investigate notes git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4132 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -1,69 +1,62 @@
|
|||||||
//TODO: Flash range does nothing currently
|
//TODO: Flash range does nothing currently
|
||||||
|
|
||||||
|
//A very crude linear approximatiaon of pythagoras theorem.
|
||||||
|
/proc/cheap_pythag(var/dx, var/dy)
|
||||||
|
dx = abs(dx); dy = abs(dy);
|
||||||
|
if(dx>=dy) return dx + (0.5*dy) //The longest side add half the shortest side approximates the hypotenuse
|
||||||
|
else return dy + (0.5*dx)
|
||||||
|
|
||||||
|
|
||||||
proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1)
|
proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1)
|
||||||
spawn()
|
spawn(0)
|
||||||
|
var/start = world.timeofday
|
||||||
|
epicenter = get_turf(epicenter)
|
||||||
if(!epicenter) return
|
if(!epicenter) return
|
||||||
|
|
||||||
|
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])")
|
||||||
|
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
|
||||||
|
|
||||||
|
playsound(epicenter, 'explosionfar.ogg', 100, 1, round(devastation_range*2,1) )
|
||||||
|
playsound(epicenter, "explosion", 100, 1, round(devastation_range,1) )
|
||||||
|
|
||||||
|
tension_master.explosion()
|
||||||
|
|
||||||
if(defer_powernet_rebuild != 2)
|
if(defer_powernet_rebuild != 2)
|
||||||
defer_powernet_rebuild = 1
|
defer_powernet_rebuild = 1
|
||||||
|
|
||||||
if (!istype(epicenter, /turf))
|
|
||||||
epicenter = get_turf(epicenter.loc)
|
|
||||||
|
|
||||||
playsound(epicenter.loc, 'explosionfar.ogg', 100, 1, round(devastation_range*2,1) )
|
|
||||||
playsound(epicenter.loc, "explosion", 100, 1, round(devastation_range,1) )
|
|
||||||
|
|
||||||
if (adminlog)
|
|
||||||
message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
|
|
||||||
log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range]) in area [epicenter.loc.name] ")
|
|
||||||
|
|
||||||
tension_master.explosion()
|
|
||||||
|
|
||||||
if(heavy_impact_range > 1)
|
if(heavy_impact_range > 1)
|
||||||
var/datum/effect/system/explosion/E = new/datum/effect/system/explosion()
|
var/datum/effect/system/explosion/E = new/datum/effect/system/explosion()
|
||||||
E.set_up(epicenter)
|
E.set_up(epicenter)
|
||||||
E.start()
|
E.start()
|
||||||
|
|
||||||
var/list/expTurfs = range(epicenter, max(devastation_range, heavy_impact_range, light_impact_range))
|
var/x0 = epicenter.x
|
||||||
|
var/y0 = epicenter.y
|
||||||
|
var/z0 = epicenter.z
|
||||||
|
|
||||||
// Hello future editors, please note that 1000 calls to spawn will not speed this up, but this exact amount has been tested
|
for(var/turf/T in range(epicenter, max(devastation_range, heavy_impact_range, light_impact_range)))
|
||||||
// Now, tonnes of calls to spawn will allow other stuff to happen, but I believe we may as well let explosions
|
var/dist = cheap_pythag(T.x - x0,T.y - y0)
|
||||||
// Get over with and blow up like an explosion would
|
|
||||||
|
|
||||||
var/list/dTurfs = list()
|
|
||||||
var/list/hTurfs = list()
|
|
||||||
var/list/lTurfs = list()
|
|
||||||
|
|
||||||
for(var/turf/T in expTurfs) // This doesn't slow it down at all, even 100,100,100 bombs
|
|
||||||
var/dist = approx_dist(epicenter, T)
|
|
||||||
|
|
||||||
if(dist < devastation_range)
|
if(dist < devastation_range)
|
||||||
dTurfs.Add(T)
|
dist = 1
|
||||||
else if(dist < heavy_impact_range)
|
else if(dist < heavy_impact_range)
|
||||||
hTurfs.Add(T)
|
dist = 2
|
||||||
else // The expTurfs list only has turfs that are in it's range, so no if here for light_impact
|
else if(dist < light_impact_range)
|
||||||
lTurfs.Add(T)
|
dist = 3
|
||||||
|
|
||||||
// Lag from hereon
|
|
||||||
for(var/turf/T in dTurfs)
|
|
||||||
if(prob(10))
|
|
||||||
T.ex_act(2)
|
|
||||||
else
|
else
|
||||||
T.ex_act(1)
|
continue
|
||||||
for(var/atom/object in T.contents)
|
|
||||||
object.ex_act(1)
|
|
||||||
for(var/turf/T in hTurfs)
|
|
||||||
T.ex_act(2)
|
|
||||||
for(var/atom/object in T.contents)
|
|
||||||
object.ex_act(2)
|
|
||||||
|
|
||||||
for(var/turf/T in lTurfs)
|
T.ex_act(dist)
|
||||||
T.ex_act(3)
|
if(T)
|
||||||
for(var/atom/object in T.contents)
|
for(var/atom/object in T.contents)
|
||||||
object.ex_act(3)
|
object.ex_act(dist)
|
||||||
|
|
||||||
if(defer_powernet_rebuild != 2)
|
if(defer_powernet_rebuild != 2)
|
||||||
defer_powernet_rebuild = 0
|
defer_powernet_rebuild = 0
|
||||||
|
|
||||||
|
//here util we get explosions to be less laggy, might help us identify issues after changes to splosions (because let's face it we've had a few)
|
||||||
|
world.log << "## Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [(world.timeofday-start)/10] seconds."
|
||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,17 +30,15 @@
|
|||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
|
||||||
/proc/get_turf(turf/location as turf)
|
/proc/get_turf(turf/location)
|
||||||
while (location)
|
while(location)
|
||||||
if (istype(location, /turf))
|
if(isturf(location))
|
||||||
return location
|
return location
|
||||||
|
|
||||||
location = location.loc
|
location = location.loc
|
||||||
return null
|
return null
|
||||||
|
|
||||||
/proc/get_turf_or_move(turf/location as turf)
|
/proc/get_turf_or_move(turf/location)
|
||||||
location = get_turf(location)
|
return get_turf(location)
|
||||||
return location
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
F << "<small>[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>"
|
F << "<small>[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z])</small> || [src] [message]<br>"
|
||||||
|
|
||||||
//ADMINVERBS
|
//ADMINVERBS
|
||||||
/client/proc/investigate_show( subject in list("hrefs","singulo") )
|
/client/proc/investigate_show( subject in list("hrefs","notes","singulo") )
|
||||||
set name = "Investigate"
|
set name = "Investigate"
|
||||||
set category = "Admin"
|
set category = "Admin"
|
||||||
if(!holder) return
|
if(!holder) return
|
||||||
@@ -44,3 +44,5 @@
|
|||||||
else
|
else
|
||||||
src << "<font color='red'>Error: admin_investigate: Href Logging is not on.</font>"
|
src << "<font color='red'>Error: admin_investigate: Href Logging is not on.</font>"
|
||||||
return
|
return
|
||||||
|
if("notes")
|
||||||
|
holder.notes_show()
|
||||||
|
|||||||
@@ -73,7 +73,7 @@
|
|||||||
update_canmove()
|
update_canmove()
|
||||||
|
|
||||||
//Update our name based on whether our face is obscured/disfigured
|
//Update our name based on whether our face is obscured/disfigured
|
||||||
name = get_visible_name() //TODO: this was broken by the dismemberment revert ~Carn
|
name = get_visible_name()
|
||||||
|
|
||||||
handle_regular_hud_updates()
|
handle_regular_hud_updates()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user