A couple of things to try:
Whenever you are done deleting images or objects (changing levels or scenes) try the command
FLUSH VIDEO MEMORY
You will have to reload all the textures that you want to use though.
Another thing that may help: Instead of deleting your objects, save different meshes to memblocks then save the memblocks as a series of files. Instead of deleting and reloading an object, load the memblock mesh and use the command
CHANGE MESH FROM MEMBLOCK. You, in essence, replace the specific limb (including limb 0) with new mesh info changing the shape of your object. You'll most likely have to retexture it. You could also store your textures in memblocks and use MAKE IMAGE FROM MEMBLOCK. If you have an object with limbs, you can change the mesh of each limb individually.
The other thing that I've discovered is, whenever I use GET IMAGE, I have to follow it with a sync or a wait 0. Sometimes I can get away with not doing it - but I can't find the consistancy to say when that should be the case.
If you are using any DLLs, I find that depending on the DLL, the speed of the function is faster than DBC can handle and I can get unpredictable results - including systems crashes. Again, if I place a sync or wait 0 after the DLL call, it gives DBC time to catch up to the function - or putting the DLL call inside of a DBC function seems to do the trick as well.
If you've used/are using the windows GDI to capture images or screen shots, you have to manage the DC's very carefully or you can use up your resources in the blink of an eye.
Always make sure you are using the correct size (and pointers if you are using them) of your memblocks. If you are off by a byte here or there, it can bleed into areas of memory you didn't intend and cause problems.
Undim arrays that are hanging around doing nothing.
Avoid recursion in functions.
Also try loading textures directly into video memory or using compression
Load image <name>,<img>,1 : rem load directly to video memory
load image <name>,<img>,2 : rem compressed texture
Unless you are very careful wih your management and cleanup of objects, images, bitmaps, memblocks, file nums, etc., avoid code like:
objectnum=0
repeat
inc objectnum
until object exist(objectnum)=0
make object something, objectnum
load object something, objectnum
This can leave you with a bunch of objects as numbers you don't even know are around. But if you are careful with management and cleanup after such calls, you should be ok. I only use these types of calls when I'm creating a temporary something that I will soon be deleting. I think it's better to declare outright what value you are going to use for what if something is going to have permanence in your program.
I'd be curious to know if any of this helped...
Quote: "I do wonder if it has something to do with MP3s, as I know Vista has a major issue with some of them "
Maybe try using .ogg files and a DLL to play them.
Enjoy your day.