Ordo
Phew... I made it.
My first "production" for the Amiga is released.
It's Ordo - a visual story about the endless cycle of ORDER and CHAOS.
Soure is available on GitHub - video version is here.
The graphics are fine, but from a technical point of view, it isn't much.
It's 100% blitter , no sprites, no bobs, no copper.
Still so much to learn :-)
Some notes:
- I'm puzzled with the memory management on the Amiga ... I know the audio and graphics chips can only access chip memory, but how do you copy from fast to chip mem?
I would expect that just to be a "CopyMem" operation. This does work on kickstart 3.1 but not on kickstart 1.3. Why? To be investigated.
This is why Ordo needs 1MB of chip ram to run - but the good part is: it does run on a Amiga 500, that was the goal. - I have no idea how to keep the audio and the video in sync. I guess there has to be a main loop dat waits for the VBL signal and that drives both the mod player and screen refreshes. to be investigated.
- I have no idea how to integrate a decompression mechanism. Currently all data files are uncompressed raw data, hence the large filesizes and long loading time. A better approach would be to compress the data files, load those in fast ram and decompress them when needed to chip ram. To be investigated.
- System Friendly C code is slow ... for example the "FillRect" function feels really sluggish, especially on kickstart 1.3. I guess at some point I do want to integrate some assembly into the mix. Maybe use C to orchestrate everything, but use assembly for the low level heavy lifting.
- I'm wondering what the best way is to load graphical data and get it in a usable form: currently I load raw bitplanes into chip memory, create an "Image" with a pointer to that memory, draw that image on a RastPort so I can use it in a View.
That feels like a lot of overhead. There must be a simpeler way.
Still, it was a great experience.
It was released at the RSync Demoparty in Leuven and won 1st place - yay!
The audience seemed to appreciate that is was "different than usual" and it was an actual concept, telling a story.
Of course, it's "different" because I have no idea how to do all those cool effects you see in other demos, haha.
But maybe that "soft area" of the demoscene is not a bad place to operate.
By the way - RSync was GREAT fun! I kind of already figured out I would like the demoscene, but sweet tangerines... it's really remarkable to find so many like minded spirits in one spot ...
Update 1:
Ah - I finally figured out why there are such timing differences between systems. On most of my machines I have fBlit installed, which patches soms system functions to use the CPU instead of the blitter.
Turns out I wasn't using the blitter after all on my development machines :-)
Doh!
Update 2:
Found a simpeler way to preload graphics data in FAST memory.
I didn't realize yet that AllocRaster is very similar to AllocMemory and returns a pointer to the allocated memory.
I can then just CopyMem to that pointer.
The only drawback is that I have to copy each plane separatly.
Example on -> https://github.com/steffest/amiga-c/blob/master/FastToChip/better.c
and for keeping the Audio and video in sync, this seems promising https://eab.abime.net/showthread.php?t=116663