31 August 2017, 11:27 | #1 |
Registered User
Join Date: Dec 2013
Location: Auckland
Posts: 3,542
|
Blue Thunder and TimeGal - General concepts and Blitz implementation
The two FMV games I worked on were coded in Blitz, I thought it might be worthwhile briefly going over how the engine was developed. Please let me know if there's any specifics you'd be more interested in.
Unlike the CDXL format (which is designed for streamed playback), the FMV in those two games are broken up into numerous files to be loaded into buffers - I've given this custom format the extension ".bank" as it's literally just files intended to be used with Blitz bank commands. There are advantages to this approach: Playback can be more reliable than CDXL - as, in a worst case scenario, the game will pause until the Bank is fully loaded (rather than immediately running into audio and graphical issues). It's also fairly easy to understand and implement. But also disadvantages: Starting from a specific frame is difficult, also instant playback is impossible as an entire bank needs to be loaded first. Each .bank file is made up of: - 1 or more frames, as raw uncompressed bitmaps of fixed size, simply appended end to end. These can each be assigned to a Blitz Bitmap object using CludgeBitmap. - An IFF audio file appended to the end. This can be assigned to a Blitz Sound object using DecodeSound. Say, if the game was configured to play back at 10FPS, and a .bank contained ten frames, then the .bank would also contain one second of audio. So each .bank file contains a fixed-length section of the full FMV video. The engines can be configured with an arbitrary number of buffers (Blitz Bank objects that are constantly reused), but at least two are needed - one is fully loaded before the game can be started, and the others are loaded from disk to memory. The core game loop is handled inside a VBLANK interrupt (SETINT 5), which includes: - Testing for input (aborting the game and jumping to the game over screen if the correct input is not received) - Updating the frame counter and displaying the current frame on screen - Playing audio from the currently loaded bank - Display onscreen control hints (just using Hardware sprites, as this is the easiest way to overlay graphics over top of HAM) Outside of the main game loop, only one function is performed - there's a simple While loop that constantly checks if all of the buffers are in use. If a buffer is free (a buffer is marked is free as soon as the game has finished playing the audio and video from that .Bank file), it immediately loads the next .Bank into that free buffer. Creating the .Bank files themselves was bit of a frankenstein approach - Windows utilities chopped up the source .AVI into individual frames and short sound clips and converted those files into more Amiga friendly formats, and then a custom Blitz tool glued them back together as the .Bank files. |
01 September 2017, 17:38 | #2 |
Banana
Join Date: Jul 2016
Location: Darmstadt
Posts: 1,214
|
How did you load from file at the same time as updating graphics? Were you in Blitz mode?
|
01 September 2017, 20:18 | #3 | |
Registered User
Join Date: Dec 2013
Location: Auckland
Posts: 3,542
|
Quote:
Updates to the graphics are run inside the SetInt 5 block (mostly DisplaySprite for control ques and DisplayBitmap to change frame), while at the same time a simple While loop outside of the Setint block is used to load the next buffer. |
|
01 September 2017, 21:00 | #4 |
Registered User
Join Date: Oct 2014
Location: Europe
Posts: 470
|
Why not consider using the anim cmds, as they are less space and cpu consuming? Well, maybe a liitle more CPU, but there are longer anims possible, maybe even diskplay.
|
01 September 2017, 21:20 | #5 |
Registered User
Join Date: Dec 2013
Location: Auckland
Posts: 3,542
|
Both games were designed with the CD32 in mind as the primary platform. Having a 2x speed CD-Drive, it takes a second to load 300kb. Even if the graphic data was compressed to half that through anim compression, you'd still need to decompress all that on an 020 CPU in half a second in chipram. Disc space is not such a concern as 45 minutes of video can be stored on a CD in that format, CPU is used minimally as the uncompressed bitmap are loaded direct to memory without any conversion at all (Timegal can be played comfortably on an A500 68000 with HDD)
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
"Blue Thunder" CD32 FMV engine prototype | earok | project.CD32 Conversion | 54 | 18 August 2018 14:51 |
Rolling Thunder vs Thunder Jaws | Solo Kazuki | HOL data problems | 1 | 20 June 2016 07:09 |
Amiga design concepts | thinlega | Retrogaming General Discussion | 1 | 22 July 2002 00:23 |
|
|