- » Blog
- » Back in Blues
09 Nov 2015 - Back in Blues
Sadly it's been almost a year since I've done anything here. For those of you not aware I'm not in the best of health and been on doctors orders not to work for years... After a stay in the ICU back in February most of my projects have been on hold -- including Paku Paku 2.0 for DOS more on that in a bit -- but I'm slowly recovering. Figured it's been WAY overdue for me to give this site some loving, so here we go.
New Page Theme, again
Not really new, I just swapped the colours back to blue. I was trying for C64 tans with the last one, which looked great on my IPS, but when I saw what it looked like on my media center using a TV (purple instead of tan?!?) I figured it's time for a revamp. Last time people complained the blues were too "bright" even though they were darker than the greens before it (that people complained were too bright) -- Is google too bright in whites and blues? I don't hear people bitching about white backgrounds so... blue and white it is.
Paku Paku 2.0 DOS Coming ... sometime
I've slowly been pecking away at the new codebase. Shortly after the release of version 1.6 I found that on an unexpanded PCJr the game left a lot to be desired, and in general found a lot of new ways of doing things and improvements across all platforms. Originally this was going to be a version 1.7 release, but I figured if I'm gonna do it, let's do it right.
As such the new release is a complete rewrite from scratch drawing on experience gained writing the C64 version, as well as some other techniques I've picked up along the way. Much of this code is also going into at least three other games I've been working on ; an as yet unnamed space shooter, an adventure/RPG game, and a side scroller. The last of those may be ice-skating uphill and may have somewhat higher system requirements (AT or even 386 only) than the others.
One of the biggest bottlenecks and time-wasters in the codebase was scorekeeping of all things, as the conversion from a 32 bit integer to something that can be displayed on the screen took far, FAR too long. Switching to a BCD encoding of the score may take slightly more time to add new points to it, but it's paid back ten-fold when it comes time to write it to the screen. I also went with coded sprites instead of copied for the font system in this version, which provides a massive speedup across the board for the game.
Since I went with coded sprites for the fonts, I've switched ALL the sprites to being coded. This too greatly improves performance and brings the painfully slow unexpanded PCJr within spitting distance of the PC version on speed. In fact at the two slower level speeds it is now identical, and only the fastest level speed lags behind -- though that lag is now not even noticeable during gameplay.
New Sound Support
One of the biggest features of the upcoming release is an improvement to the sound stack. I rewrote things to use pointers to the card specific routines using an object instead of specific case statements for each and every card. This not only runs faster, it also makes it WAY easier to add new card support to these games.
The currently supported cards are:
- PC Speaker in 2 voice arpeggio
- Adlib FM
- Creative C/MS / Game Blaster
- Tandy / PCJr / IBM PS/1
- SSI 2001 (C64 SID chip on a PC card)
- MPU 401 Dumb MIDI
- Soundblaster DSP MIDI
So far SSI 2001 has only been tested through DOSBox emulation, but since I've got a pretty good grasp on SID programming from working on the C64, I'm not that worried.
PS/1 support is new. It's the same chips as the Tandy/Jr but it's at a different port -- I wondered why for a long time, but Great Hierophant on the Vintage Computer Forums pointed out the obvious reason, the Tandy/Jr sound sat at the same port address 286/higher machines have their second DMA controller at. I've enhanced the autodetection routines to reflect this, but as always if that fails I allow you to manually set the port from the command line.
Midi Synthesizers supported (interface independant)
- Roland MT-32
- Yamaha FB-01
- General Midi * REQUIRES 24 step pitch bender range!
- User can create custom patch sets for other devices
*Sadly the GM software synthesizer built into modern Windows does NOT allow you to change the pitch bender range, so that is NOT a supported device, even under DOSBox.
Planned for Support (may or may not happen)
These may or may not happen, and are placed in order of likelyhood.
- Mockingboard PC or other AY-3-8910 devices
- Disney Sound Source (may require 286 or higher)
- Covox Speech Thing / LPT Dac (may require 386 or higher)
- IBM Music Feature
- PC Speaker 1.5 bit realtime soft-synth (may require 386 or higher)
The IBM Music Feature has moved way down the list as it, well... pissed me off. It's ridiculously poorly documented (which is one of my pet peeves), the code I've seen for it is gibberish, and as a result I can see why it never caught on. Of course the IMF, Mockingboard PC and SSI-2001 are very hard to develop for as they are rare, I don't own one, and rely on others to test for me. All of that disrupts the testing cycle and can be very frustrating.
Improved Video Support
I've also put more effort into better auto-detection of video capabilities, and added some better tweaks to make sure that EGA cards are properly set to a 200 line mode. This means that the game will now display properly on CGA, EGA, MCGA and VGA without any aspect ratio distortion. To get the EGA working right I ended up connecting one to a CGA display, setting the switches for same, and pulling the CRTC values it sends in that mode. When connected to an EGA display you just send those values the the CRTC and boom, 640x200 resolution 80x25 text mode that's easily tweaked to the 80x100 I need.
On real CGA's I've tried to implement better timing to reduce the snow; sad fact is I'm just writing to the screen too much to ever remove snow completely from those old original IBM cards, but it should be far less distracting than before. As always newer CGA's, better clones, and offshoots like Tandy/Jr graphics won't have this problem.
Even the menu system got major improvements -- the "marquee" effect around the title
Internally I've switched how the map is stored to a RLE format designed specifically to be as fast as possible specifically to each type of data. While I could have used a generic compression, a custom solution taking advantage of how the data is organized pays far greater dividends in both rendering to screen and compression rate.
This is why the new version will have the same or smaller memory footprint despite additional features. Things like the "End of level" flashing is also now so fast that even on an unexpanded PCJr you can no longer see the top to bottom draw of it. (A problem in version 1.x)
The old ghost logic was a bit convoluted, I wrote it on the fly based on the "Pac-Man Dossier" as I've intentionally avoided looking at the actual Pac-Man code. With the C64 version I came up with a few better techniques, and this upcoming DOS version takes it even further. The ghosts are a wee bit smarter, significantly harder to predict despite the fixed patterns of pursue/return to corner -- but best of all? The game logic now takes half the time to execute offering another boost in speed!
Other projects and Articles
I'm probably also going to start writing articles about a variety of topics and throwing them up in here blog style. There's a lot of stuff on a lot of topics I really want to cover, though some of them may go on another domain that I've been sitting on for a decade or more. Originally that was supposed to be a joint-project with a friend who is no longer with us, and I really need to stop letting that domain just sit there and rot given it's a REALLY good one given the subject matter.
So basically there's a lot of stuff coming. Joe only knows when; but I always have seven or eight projects up in the air at any given time... Might be on doctors orders not to work, but I have a hard time just sitting around with my thumb up my backside.