So, well, as this thread resubmerged and I have no time or motivation to update my website, here are some inner workings of the Dark Side of the Spoon's Fullscreens.
Boot Intro: Moving Back
Well it's obvious that the background is scrolling with hardscroll. There are 16 screens for the shift... ermm... 16? That's not possible when it has to run in half a meg and plays a modfile and shows logos. Pause the demo and watch the background closely. It not only repeats, but every repeat is displaced by 1 pixel. Bingo, much less memory usage.
One important thing to know about fullscreen is: if you scroll out on the right, the grafics enter on the left, but on the wrong planes. So the colors don't match!
So you have to copy everything at the border by 8 bytes.
If you watch closely the right border you will notics some imperfections, it's the copyroutine. It's just not copying 100% correctly for CPU time reasons. The logos in the middle could be considered as sprites: need to restore background before drawing the next logo on a different place.
Losta scrollers: Playfield screen
well we could have added even more scollers but finally it's just 8 pixel grafics in the background.
Now this fullscreen is the "fullest" screen you can get. Good observers will notice that the top scroller is a background color scroller. So there can't be grafics in there. This means: the top border is NOT opened! Other consequence of this: we can't use the VBL and have some sync for the bgcolor scroller. How to get that stabilized: well the whole VBL is synced. There's one sync at the start and that's it.
Between the top scroller and the start of grafics is just 5 scanlines where the hardscroller (at beginning of normal screen) does his job to move the girl around.
And the music? During the short wait before the screen starts up, the music is precalculated just by playing very fast the complete song.
I don't know anymore if the left-right movement copy routine is better done than in the fullmove screen before.
I guess you all know how the repeating background is done.
The girl's strange movement is another "optimization". She sometimes moves by steps of 16 to the right and after that exactly the same distance again to the left at speed 16. That's just to avoid grafics errors if moving a different speed in one direction than into the other.
Why do we use that playfield stuff so much? Well it's perfect to fit between the left and right border switches
Mainmenu:
well nothing special. The bottom scroller was left out on purpose. More CPU left and bigger scrolling area. The lion can be moved with joystick wich needs reading the Keyboard 4 times per VBL. But the keyboard introduces random waitstates (on a real ST) so there are 4 resynchronizations.
overscan 3D
do the logo distorter while overscan and 3D while not. And silently switcht to 2 VBL for the Gunstick logo without telling.
Unlimited sprites:
5 screens in a loop. ermm... yes. it has a scroller
So that's it.
what?
ah one missing?
ok ok.
Parallax distorter
Cheat code:
push key B
push key U
release key B
push key S
release key U
push key return
release key S
release key return
Now the hardware scroller is disabled, means the screen adress is not changing anymore.
The display area is about 5 screens high.
You can check this by moving around in memory: use the keypad.
scroll up: 8
scroll down: 2
speed up: push gain
stop scrolling: 5
The scroller is displayed at the bottom of the next visible screen. If you pushed 5, you see the scroller moving down. But it only draws a small part. Needs 4 VBLs to draw one scroll line.
Unfortunately I don't remember why I draw the scroller in 4 times.
But what happens, there are 3 other scrollers drawn in parallel on the non visible screens. The whole trick is that the scrolls are 20 pixels high and that I move the screen up by 5 pixels. Just try it. Push 5 times on 8
If you don't pay attention to the grafics, you see a moving wave.
But no readable scroller.
Push 15 more times on 8 (that makes 20) now the screen rushes by at the speed of the scroller's height. The scrolls are aligned but the wave is much too fast.
How to get this correct? it's like TV tuning. Just push more and more on 8. About 13*20 times in total (there are 13 scrollers on screen, or the screen is 260 pixels high). Now the 5 screenfulls rush by in some tenth of a second. But you see then a glimpse of correctly moving scrollers.
Ermm... not really. The wave is going from top to bottom. Wasn't it bottom to top in the original screen? Let's have a look: press ESC. Yeah. Bottom up. That's because it would have been better to keep hammering 260 times the 2 key instead of 8
Oh and now for the bounce... the digisound routine is syncing the bounce so it never gets out of rythm. At the end of the gigit the bounce table is reset to beginning.
The background's bounce is twice the speed but it's distorting is half the speed of the foreground. I did that because half speed background bounce is jerky (the foreground only moves by 1 pixel, so the background would have been moving only every 2 VBLs)
There is so few memory (half meg) left that:
* the font is not preshifted and all CPU time is spend for shifting
* the scroller is 20 pixels high instead of usual 32 because there is not enough CPU. I checked first how much CPU it takes, then asked to get a font of that height. And anyway, a 32 pixel font would have used too much RAM.
* the sound sample is compressed and has 2 parts: part1, part1, part2, part2. The sample is decompressed in realtime from 4 bit to 8 bit. It is played on 2 instead of 3 volume registers. It uses a custome volume conversion table to give the sound the best boom, bang and hiss
From the comments I think it's the table from 68000 ST-Magazin or at least it's based on it.
* the rest of the CPU is burned with lots of NOPs
Any questions?
Georges