[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