Wow, thanks Paul. Great to get a response from you. I'll try and address the things you've raised as best I can:
Quote: "you can use SetRawWritePath(GetDocumentsPath()) on Android to write to the SDCard"
That is super handy to know. Thanks for that!
Quote: "I assume the culling was for 3D tower objects?"
Correct. I don't actually use many sprites. Just UI stuff. Even my billboards are 3D plane objects as I couldn't get sprites to pass behind parts of the tower, etc. Made for a lot of fun doing animated textures, lemme tell you, but I got it working.
Quote: "Out of interest what culling method did you use?"
I'm using GetObjectInScreen, which I am told is the same as the default for AppGameKit, and yet I get better framerates when I do it myself to when I let AppGameKit handle it for me, which is perplexing.
Quote: "Are there a lot of transparent 3D objects?"
For the sake of performance, the entire tower is made of fully opaque objects. The only 3D objects which use transparency are the billboards I mentioned earlier - so all the monsters and particles. On these, I've purely used Alpha Masking to prevent any semitransparent particles and increase performance. Also the Alpha colour channel of all objects is set to 255. No fading occurs except in the UI sprites, of which there are few.
Quote: "how many different types of object are created an in what order?"
Actually a lot of objects. The tower is 12 segments around and 50 segments high. Each segment is a clone of one of eight object types which is then moved into place accordingly. None of the objects are animated. All movement around the tower is done by moving the camera, rather than the tower itself. The game makes no use of shaders whatsoever, and no custom lights are made to help the cartoon look of the game. Even all the billboards have their light mode set to zero.
I didn't realise, however, that the way you described it was how the rendering system of AppGameKit worked. It definitely gives me a little to mull over...
Quote: "use an atlas texture containing as many images as possible"
For construction of the tower itself, I do just this. Every tower object is textured from the same file (which makes loading in new purchased skins very easy). For all particles, monsters, pickups, etc, they each use their own individual texture, however, due to the number of frames in each one. All in all it leads to me loading in about 150 images to texture and animate everything in the game. I keep all of my files as small as possible, though, and 9 times out of 10 the game runs just fine. That being said, I could probably condense things further, especially with non-animated textures for things such as particles.
Quote: "all instances should be created together if possible."
It'd take a re-write of my tower construction module to make that happen, but it wouldn't be too tricky. That being said, the tower's assembly is done during the loading phase and not mid-game. The only things which are created mid-game are particles and the pick-ups in the game, and all of them are single polygon plane objects, so not really straining on the memory.
Quote: "If you want to get really advanced you can take over the 3D render order manually"
This may actually help a lot with the diagnosis of what's going on here... Thanks for that tip! My theory is that figuring all this stuff out on this game will make my development process on future games a lot smoother...
Hopefully my responses here are clear! If I can provide any other info then please let me know! I'm hoping to make this game be a little bit of an advertisement for AppGameKit, too, as I really think it's an amazing tool and want to get the word out.