[Scummvm-devel] ScummVM 1.0.0: Release status 2009-08-11 -- Full feature, freeze

Neil Millstone neil at millstone.demon.co.uk
Sun Aug 16 03:41:42 CEST 2009


Johannes Schickel wrote:
> Johannes Schickel wrote:
>>
>> I remember DrMcCoy moved some video player code from gob into 
>> graphics/. I just asked him and the tables for the video codec of 
>> (yet unsupported) the game Urban Runner take up 72kb. He also says 
>> it's enabled even when gob is disabled. So I guess this might be the 
>> cause for the ~80kb increase. A proper solution would be to only 
>> enable that code when GOB is enabled or when a build supporting 
>> plugins is made. I guess that might fix up the size increase.
>>
>
> Just to be sure you all noticed it. DrMcCoy made a patch for that:
> http://sourceforge.net/tracker/?func=detail&aid=2836424&group_id=37116&atid=418822 
>
>
> // Johannes
>

I was looking at the Saga memory usage again today.  By poking around 
stack dumps when it crashed, I tracked down the ~200Kb alloc which makes 
the game crash to the path finder in Actor::fillPathArray().  This 
function sometimes causes a 16384 element Common::Array of 
PathDirectionData to be created while it is in operation.  This comes to 
196608 bytes.  My (bad) fix for this was just to change the 
PathDirectionData structure in engines/saga/actor.h from this:

struct PathDirectionData {
    int8 direction;
    int x;
    int y;
};

to this:

struct PathDirectionData {
    int8 direction;
    s16 x;
    s16 y;
};

This causes the struct to be only 8 bytes (after padding) instead of 12 
and therefore the large array shrunk to 131072 bytes.  This made it fit 
into RAM.  I'm not really certain that the struct doesn't use the full 
32 bit range, but the game seems to work fine to me with this fix.  
Perhaps someone with knowledge of this code could comment?

Also, the game is still close to the end of memory, but a lot of RAM 
seems to be freed after the first scene with the chess tournament.  Of 
course, I'm not sure if there are more memory intensive sections of the 
game later on, but this is also the case with every other game that I 
run on ScummVM DS.

I also played around with the automatic expansion algorithm of 
Common::Array.  This template doubles the number of elements it can hold 
each time it runs out of memory, which strikes me as a little 
inefficient.   I had a go at some alternatives but unfortunately the 
performance of the pathfinder suffered way too much if the array resizes 
itself too often.

So, if this is okay with everyone else, and it won't break the game, 
I'll commit this fix.

Thanks,

- Neil




More information about the Scummvm-devel mailing list