Sunday 29 June 2008

Code Orgy

Well, today has been a long day. I was hoping to go home for the weekend and spend some time with my family, but alas, it was not to be.

So, in a bit of a sulk, I decided to sulk in a corner and finish getting the data files written. I didn't realise it would take me 14 hours. Cue major league sulk! :-)

I now have 20 files, one for each level containing:
  • Sprite frames for monsters
  • Speech data
  • Level name
  • Character set colours for the character sets (the 9929 video processor divides the ASCII set up into groups of 8 characters, each group can have different foreground and background colours)
The character sets on the 9929 make it a pain to organise which characters (having the same colour attributes) should be grouped together, nevertheless it is done now.

In addition, an additional file holds the 8x8 character graphics used on the levels - the graphics are re-used quite a bit on different levels, so rather than re-define the same graphics time after time, I've just defined them once. Each level then consists of a table of pointers that point to appropriate places to take the data from. Much more economical. I was going to use the sprite editor that I wrote to do the Manic Miner sprites to do the 8x8 graphics, but in the end I just used JSWED to display the characters in a grid, and worked out the hex in my head by eye (if that makes sense). Geeky? Yes. Fun? Er, no, not really!

Finally, for a bit of fun (!), I managed to get the ZX Spectrum character set out of the ZX ROM, so I've created a data file for that also - so the game should play with the real Sinclair character set.

Next step: screen layout for the levels. I'm thinking RLE (run-length encoding) is probably the best way to go, economical without trying to be too clever.

I think tomorrow I'll cut my first lines of code, instead of working with purely (boring) graphic data.

Funky.

Thursday 26 June 2008

Sprites

Concentrating on getting the sprites done. Most of the sprites in Manic Miner have 8 frame animation sequences. I've been concentrating on getting these captured.

I've been using JSWED (Jet Set Willy Editor, a great PC program) to display the sprites using JSWED's built in sprite editor. Then, I recreate them 'on the TI' (which is actually running in an emulator, called Win994a) using a sprite editor that I have written in C, pretty much for this project, although I have released the sprite editor to the public, with source.

Here's a video of it in action:



Using this program, I can recreate each frame, and animate them to check they look ok. The program then saves them to 'disk' for me in HEX, the easiest and 'standard' format in the TI world for dealing with sprite graphics. Makes it very easy to import the sprite definitions into assembly source code files.

I guess I could have just taken a Manic Miner Z80 snapshot file and written a bit of C or .Net to find the sprites and extract them, but somehow, that takes the fun out of it! it's far more 'fun' to write an sprite editor in C first, even before you start your main project!

Even worse than that, I wrote version 1 of the sprite editor in TI Extended Basic. Yeah, yeah, I know, I know!

Mark.

Sunday 22 June 2008

Greets

For a while now I've had a burning desire to do a version of Manic Miner on the TI-99/4A. There is clearly some masochistic kink in my personality which leads me to do these non-trivial, yet pretty much pointless things.

Then again, why do people climb mountains? For the view? I don't think so. To prove to others that they can do it? Well, I guess there's some of that. But I think most mountain climbers climb simply to prove to themselves that they can do it. I think this is the case with me and this project.

As with most things, I mull these things over in my mind for a long while before I start them. A sort of mental 'batch-job' runs, steadily gathering data over a long period of time, and one day, completely unexpectedly you understand, the batch-job completes and either returns true, or false. In this particular case, the job returned true.

Shit.

So, this blog (I hate blogs. I mean, how sad are blogs? Haven't people got more interesting things to do? I mean get a life for God's sake. Er, yes. Right) will detail the travails of my effort to re-produce Manic Miner on the TI-99/4A. It will also serve as a bloody useful reminder to me about how the code works as it becomes more complex!

For anyone that's interested, the TI-99/4A was produced in the early 80's by Texas Instruments. A 16 bit machine with powerful graphics and sound (for the time) features, including 32 hardware sprites.

Manic Miner was written by a 16 year old in Liverpool by the name of Matthew Smith, who, rather inexplicably it would appear, had no interest in either Dire Straits or girls (I know, I know, go figure) for the Sinclair ZX Spectrum. The game, a platform game, has garnered legendary cult status*, particularly in Britain, where it sold by the shed load.

Both machines hold fond places in my heart. The TI-99/4A was purchased for me by my step father, who, tired of pulling me out of the local supermarket to come and eat dinner (I was in the computer section of our local Co-Op writing code on the Spectrum's, Vic 20's, C64's, Orics etc and generally trying to teach myself about them) had noticed my fascination, and decided that he ought to encourage this, as 'computers will be the future'.

This would have been 1983. The year TI ceased making the machine. Thatchers Britain, in 1983 was a pretty grim place. The Falklands war had just ended, miners strike about to kick off (IIRC), and three million un-employed. Including my step-father. Despite this, he scrimped, saved, and did odd-jobs to get enough money together to buy a £199 TI-99/4A. We spent hours and hours and hours and hours in front of that machine (plugged into the living-room telly) typing in games from magazines and changing them to see how they worked. Happy days. I learned a lot about BASIC programming.

The 4A was/is a great machine, but it just didn't do well in the UK. The home computer wars were about to kick off, and TI just didn't do a good job of promoting it in the UK. It had a number of problems. The closed architecture of the machines meant it was impossible to harness the power of the machine without the hideously-expensive (and weighty) Peripheral Expansion Box, and it got left behind by the ZX Spectrum and Commodore machine that gave full access to the casual user of all the machines resources. Also, the game cartridges for the 4A, although generally excellent (my school mates sat in awe at Parsec and Alpiner) they required the selling of a body organ, or a short stint dealing in contra-band or arms running to purchase them.

My step-father flogged the TI. Shit. What was I going to do now? My mates had Spectrums, ZX81's, Vics, C64s, and the only thing I had now was a shitty old Philips Videopac (although I wish I still had it!). This was a bad day. He apologised for selling the TI, but said when he had some more money, he'd buy me another computer. Yeah, right.

Christmas 1984. My step-father had got a job as a care-taker at a local shopping mall in Shrewsbury, Shropshire. Things were looking up. On that Christmas morning, I ripped the paper off an innocuous looking box to reveal a shiny new Sinclair ZX Spectrum 48K.

And it was all mine.

Oh joy of joys. Now I could join the computer elite at school. No longer on the fringes. Instead of listening to my friends tales of rubber-keyed fetishism, I could be one of them. Anyway, sod all that, it meant I could swap cassettes with them on the play ground (we had an Amstrad TS88 tower system that was perfect for tape-to-tape copying!)

The TI was forgotten. I had a Speccy. It didn't get any better than this. I learned BASIC on it, Z80 on it, and played one or two (million) games on it. Bliss.

For some bizarre reason that I'm not really aware of, I bought another TI-99/4A. It would have been around 1998. I can't even remember how or from whom I got the machine. But I stuck with it. I liked using it. I joined the TI UK user group, and started reading TI*MES, their monthly magazine. Before I knew it, I was writing my own articles for the magazine. Oh the fame.

After a getting a full expansion system and tons of software, I eventually sold the lot circa 1997 after buying a PC. A completely dumb move that I've regretted ever since. I had tons of really cool hardware, Ramdisks, the lot. What a twonk.

About three years ago, I re-discovered the TI for the third time via the beauty of emulation. I now get my TI fix via Classic99 and Win994A. The ultimate portable TI. (I also have ZX32, a great Speccy emulator!)

Since then I've been writing assembly language, dabbling here and there. But this is it. The real deal. A big project.

Will I pull it off (ooer, missus, oooh matron etc)? Who knows, stay tuned and find out.

It could be a wild ride, there again it could be like a Sunday drive in a Trabant: A lot of noise, without really going anywhere... Time will tell...

Mark.

* and then some