/*
These are simple defaults for your project.
*/
#define DEBUG
client/preload_rsc = "http://files.byondhome.com/Kamuna/testart.zip"
world
fps = 60 // 25 frames per second
icon_size = 32 // 32x32 icon size by default
view = 6 // show up to 6 tiles outward from center (13x13 view)
// Make objects move 8 pixels per tick when walking
mob
step_size = 8
var/list/overlay_objects = list()
verb/ChangeResource(T as text)
client.preload_rsc = T
icon = 'wow.dmi'
proc/AddOverlay(obj/O)
overlays += O
overlay_objects += O
O.overlay_appearance = overlays[overlays.len]
O.overlay_num = overlays.len
proc/RemoveOverlay(obj/O)
src.overlays -= O
src.overlay_objects -= O
var/list/overlays = src.overlays.Copy()
for(var/i = O.overlay_num to overlays.len)
var/obj/A = src.overlay_objects[i]
//world << "[O.overlay_num] <= [A.overlay_num] <= [overlays.len]"
A.overlay_num -= 1
//world << "[O.overlay_num] <= [A.overlay_num] <= [overlays.len]"
O.overlay_appearance = null
O.overlay_num = 0
Login()
. =..()
spawn()
while(src && src.client)
winset(src,"mainwindow","title=\"Server - CPU Usage: [world.cpu]%\"")
sleep(world.tick_lag)
var/image/I = new
I.icon = 'hat.dmi'
I.loc = src
src.client.images += I
for(var/i = 1 to 22)
var/obj/O = new
O.icon = 'hat.dmi'
//O.pixel_y = 16
O.layer = FLOAT_LAYER
O.color = rgb(rand(0,255),rand(0,255),rand(0,255))
AddOverlay(O)
/*spawn(rand(30,90)/*22/i*/)
RemoveOverlay(O)*/
spawn()
while(O && O.overlay_appearance && O.overlay_num)
//world << O.overlay_num
ChangeOverlayLayer(O.overlay_num, 1)
I.pixel_x = 0
I.pixel_y = 1
sleep(0.5)
I.pixel_x = 1
I.pixel_y = 0
if(O && O.overlay_appearance && O.overlay_num)
ChangeOverlayLayer(O.overlay_num, FLOAT_LAYER)
sleep(0.5)
obj
step_size = 8
var/appearance/overlay_appearance
var/overlay_num
mob/proc/ChangeOverlayColor(olay, clr)
var/list/overlays = src.overlays.Copy()
if(!clr) clr="#fff"
var/i
if(isnum(olay))
i = olay
olay = overlays[i]
else
i = overlays.Find(olay)
if(i)
var/obj/O = overlay_objects[i]
//O.appearance = olay
O.color = clr
O.alpha = 255 // no fair including alpha in the color
overlays[i] = O
src.overlays = overlays
O.overlay_appearance = src.overlays[i]
mob/proc/ChangeOverlayLayer(olay, layer)
var/list/overlays = src.overlays.Copy()
var/i
if(isnum(olay))
i = olay
olay = overlays[i]
else
i = overlays.Find(olay)
if(i)
var/obj/O = overlay_objects[i] //Instead, add and remove and change using "[olay] - [i]"
if(O)
//O.appearance = olay
O.layer = layer
overlays[i] = O
src.overlays = overlays
O.overlay_appearance = src.overlays[i]
mob/proc/ChangeOverlayIcon(olay, icon)
var/list/overlays = src.overlays.Copy()
var/i
if(isnum(olay))
i = olay
olay = overlays[i]
else
i = overlays.Find(olay)
if(i)
var/obj/O = overlay_objects[i] //Instead, add and remove and change using "[olay] - [i]"
if(O)
//O.appearance = olay
O.icon = icon
overlays[i] = O
src.overlays = overlays
O.overlay_appearance = src.overlays[i]
Problem description:
This is a quick test project I had laying around, so please don't mind the sloppiness and the generally bad practices. But Dream Seeker seems to be using up tons of memory without freeing it. It seems to do have something to do with images, appearances, or proc calls. As soon as I changed the code to not remove the overlays and create an image and continuously shake it, DS keeps using memory but never uses existing memory or frees memory.
It does this for my current project (which currently doesn't change any overlays at all, and doesn't use much overlays, but uses a ton of images), but is around 10 to 100 times as bad. Any clue why this is happening? I know DS caches appearances, but after a certain point, it should stop using up memory and just reuse old memory, and yet it doesn't. The server remains fine, no problems with the server at all, which stays at a constant memory usage. The version I am using is 509.1300.
Edit: Tested it on 508.1299, and it doesn't have the problem at all. Uh oh. I guess it's time to make a bug report?