STEVE'S YAROZE SITE

YAROZE DIARY

Written by Steven Lewis

INTRODUCTION

Much deliberation was done before finally deciding to add a diary to my site. The reason for this was mainly down to the fact that I wasn't sure if anyone would really be that interested. Still, I kept writing it, just in case I decided to put it up onto my future site. Two months later, with the site ready to upload, I came to the conclusion that nobody really is interested, but I have included it anyway, for those who really have way too much time on their hands.
 
The intention of this diary is mainly to convey my personal Yaroze experiences over to you. My reason for doing this? Well, I am not really sure. At present there is not too much to tell, although some of you may find it amusing to read that I slept through the Amtrak guy knocking on my door...twice, and had to resort to picking up my Yaroze from the Amtrak offices as they refused to re-deliver. It is hoped that as I get to grips with the Yaroze format a little more, and I start producing some stuff of note, this diary will become far more interesting. However, for the time being at least, sit back, relax, and follow the exploits of one guy setting out to make it in a dog-eat-dog world. Hold on tight, it may be a bumpy ride!

DIARY PROLOGUE

"Right, where shall I begin...."

From a very tender age I have always been into computer games. I think I was about seven years old when I convinced my parents to get me a Sinclair Spectrum +2 for Christmas. And, come on, admit it, it was a great machine. To this day I still have fond memories of it. Games like Ghostbusters (the first Spectrum game I ever played), School Daze, Target Renegade, and Chase H.Q. almost bring tears to my eyes. I currently own four of these great machines, having just recently acquired my forth at a local car boot sale for only £3, an absolute bargain!  From time to time I still set one of them up to play a couple of my old favourite games. I have not long turned one of them off following a session on WEC Le Mans, a fantastic game. But I am not here to talk about retrogaming, I am here to talk about programming. In between my gaming sessions, when I was probably about 10 years old, I dabbled in the old Spectrum BASIC. For years I messed around with this language, producing little games that, although extremely poor, seemed great to me at the time. As I got older I went out and brought BASIC reference books, and my games improved. I reached a stage where I was making games with title screens, sampled music, and almost full-screen sprites. I even gave myself a company name to work under, Ninja Software. The last Spectrum game I made was a version of my then favourite arcade game, Street Fighter 2.

However, this is where the programming trail goes a little cold. You see, when I was about twelve, I discovered consoles. It started when I got a Nintendo Entertainment System. Games like Super Mario Bros 3 and Gremlins 2 seemed worlds apart from my dear old Spectrum, as these cartridges always loaded instantly, never crashed, and displayed far more colours on the screen at one time compared with what I had been used to. My poor Spectrum was left to gather dust.

The console bug I had continued and I went on from my NES to get a Super Nintendo Entertainment System (SNES). I fell head over heals for it, and still say it was one of the best games platforms I have ever owned. I remember waiting about a year to get my hands on the conversion of Street Fighter 2, watching as magazines previewed it, seeing it get released in Japan, and then America.  When it was finally released over here and I got to play it I was completely blown away. It was, and to this day is still one of, the best game ever for me, and I remember still playing it constantly eight months later. I played it so much that I developed into a true Street Fighter master, and was unbeatable with Guile. To this day my love of consoles has not diminished, as I am the proud owner of a Sony PlayStation (grey version), Sega Saturn (actually not a bad machine, although mine no longer keeps track of the time and date once it is turned off), and a Nintendo 64 (absolutely fantastic).

Even though I was not physically programming during these console years, I never once pictured myself as anything other than a game programmer. I was always intent on doing a Software Engineering degree at University, where I thought I would be taught everything I needed to know in order to go off into the industry. I used to spend hours, whilst delivering newspapers (I had to earn money to buy games from somewhere, as I was only fourteen at the time!), just thinking about the type of games I would make. In my head I would compose music to accompany my vision of the intro sequence, or I would plan right down to the last detail how the game would actually play. The whole idea of games programming seemed so perfectly suited to me, and I never thought that I would be doing anything else as a full time job after University.

But things change, the games industry has changed, and I have changed. I have acquired that aforementioned level of doubt about what I am going to be doing with my future. I stormed through my GCSE's so I could go on to study A-Levels in Maths and a Science (what I thought I needed back then to do a Software Engineering degree). I didn't do quite so well in my three A-levels, but I got enough points to head to the University I wanted to go to, and study a degree with honours in Computer Software Engineering. "So far so good", you are thinking. Well, not exactly. You see, my vision of being taught everything I needed to know about programming at University has not turned out to be the case. At the end of my second year I have done a paltry six weeks of C and six weeks of C++ (the two languages I wanted to learn). While this has taught me a great deal, there is no way on this earth I can walk into a job interview at, say, Rare, and show them the dodgy Rocket Simulation programs I have written in C and say, "I want to program Perfect Dark!" They would be laughing for weeks, and I would be crying as a result of their laughter. While I am confident of obtaining a first class pass in this degree, I realise now that this will not be enough. I have to get off my butt and do some work myself.

This is where my Net Yaroze purchase comes in. About three years ago I read an Edge magazine article about the new Sony development PlayStation called the Yaroze. I immediately fell in love with the idea, as the thought about continuing on from my Spectrum programming days entered my head. "Wow, that is so cool!", I thought, "I could make my own PlayStation games." However, my love soon diminished when I saw the price, which I think was around the £550 mark at that time. "I'd have to sell one of my kidney's to buy that" was my final thought as I turned the page in the magazine, and pondered on what could have been.

The more I heard about the Yaroze format, the better I thought it was, and the more convinced I was that it would be perfect for me. The price was still the only obstacle in my way, as at the tender age of seventeen, £550 may as well of been £5,500,000, there was no way I could get it. Then everything seemed to go a little quiet on the Yaroze front and I kind of forgot that it existed. That is until I was flicking through the Official UK PlayStation Magazine last February. In it was an article about the Net Yaroze, complete with the best news I had heard in ages, "The Yaroze is now selling for the reduced price of £229!" This new price proved to be too tempting for me, as I had just received my University grant cheque from Mr Tony Blair. "I don't need to buy all of those course books anyway" I thought as I cruised to the official Yaroze web site to order an application form. This thought again crossed my mind as I flicked through the nice colour brochure Sony subsequently sent me and filled in the application form, deciding to spend a further £90 on CodeWarrior. As I sealed the application form and cheque into an envelope, I did have a very scary thought about not being able to afford to live. I also came out in a cold sweat as I dropped the envelope into the post-box, but I knew deep down I was making the right decision. "This purchase could prove to be the best you ever make", I said to myself as I walked away from the post-box, quivering slightly as I thought about how much money I had actually spent. "If this gets you a well paid job as a games programmer like you've always wanted, it will be worth it!" I felt a little better after saying that to myself.

And this is where my diary begins. How will my future turn out? Will I ever get my Yaroze to do anything? Will I be stuck in the dodgy office job I have always known I would be forced to fall back on if my programming career fell through? Or preferably will I be part of the programming team that makes Perfect Dark 2? All of these questions will be answered through the course of this diary, and I hope you will find my life to be an interesting read. I don't know what the future will hold, I can only go with the flow, like a twig on the shoulders of a mighty stream, so to speak. To end this diary prologue I shall recite some words of wisdom; words which have been spoken by many a wise man:

"Consider your life to be the pages of a book. What has gone before, what you have experienced and subsequently learnt, are the words already contained within this book. They are available to be looked over and re-read at your discretion, but they can never be altered. Where you now stand, the type of person you have become, is all down to these words. There will be regrets, desire's that were never fulfilled, but no time should be spent looking back on these. The future is where all thoughts should be placed. The reams of blank pages ahead represent what is to come. You can, to a degree, control and shape these pages to suit your desires, as everyday a new page gets written. But when it is all over, once the pen has touched the paper for the last time and there is no more left to write, the most important thing is that you are able to hold the book in your hand and say, "Yes, I have enjoyed this." If you cannot do this, you have not lived."

DIARY ENTRY 1: 14th APRIL 1999

"What is going on?"

For me, 11:00am is a ridiculously early time of day. I am the type of guy who prefers to head to bed at about 2:00am or 3:00am, and then wake up at about midday. I don't know why my body likes to do this, but if my body is happy, then so am I, if you know what I mean. Anyway, due to this habit of mine, it was almost inevitable that I would be in bed when the Amtrak guy came to deliver my Yaroze, unless he came at an appropriate time for me, like any time with a 'pm' after it. But it came as no surprise when he arrived at 9:30am, a stupidly early time of day, and a time of day I try never to see. Despite this it never once crossed my mind that I would sleep through him knocking on the front door. I just thought to myself, "Alright, I'll be in bed when it comes, but I'll just leap out of bed and answer the door. I don't care if I give the guy a fright because I'm only going to be half dressed!"
 
On the morning of my Yaroze delivery I woke up as normal, threw on some clothes, and headed downstairs to the living room to watch some TV. Everything was great, I had no lectures at University and I had no other plans for the day. A few thoughts were ticking through my mind with regards to how I could spend this fine day. "Hmm" I thought, "I never got around to completing that last dungeon in N64 Zelda. Or I could go shopping for clothes...no, bad idea. Hey, I could watch The Empire Strikes Back again..." While I was pondering over the merits of each of these ideas, I walked past a card lying on the hallway floor, just below the letterbox. I cannot remember exactly, but the card read something like, "Mr Lewis, we tried to deliver a parcel to you but received no reply. You are obviously incredibly lazy to stay in bed until such a time of day. Please telephone to arrange another time for delivery." I was not amused, and a doubt whether you were after reading that feeble attempt at a joke. I had been anxiously waiting for my Yaroze now for over two weeks, and to know that it was just outside the front door and, because of my poor sleeping habits, I had to wait longer for it made me very depressed. But I held back the tears while I picked up the phone and asked a very nice women at Amtrak to please bring it back to me as soon as possible, and she told me it would be with me the very next day. "Great", I though, although still determined not to have to get up too early to receive it, I asked if I could specify a rough time of day for the delivery. I was told that this was not possible, due to routes the Amtrak drivers have to follow, or something. And at this point the conversation came to an end, and I was left knowing that, in about 24 hours, I would be the proud owner of a Sony Net Yaroze. With this newly found warm feeling all over, I sat back to watch The Empire Strikes Back, what a great film.

That night I decided to get to bed early as I wanted to be up fairly early the next day so as not to repeat the previously described experience. So, I headed off to bed at about 11:00pm, and after reading the Official UK PlayStation Magazines feature about the Yaroze once again, I drifted off to sleep, happy and content with the world. The next thing I know it is 9:45am the next day, and although this is not as early as I wanted to get up, I realise that I am only human and that this was as early as I was going to get. I decided that although I had not been woken by a knocking at the front door, I should get dressed to go and check my hallway floor, just in case. And if the Amtrak guy has not yet been, I can sit and wait for him fully clothed, which would make a change from how I would have appeared rushing straight out of bed. I remember getting dressed fairly swiftly, as I was conscious of the fact that there could be a knock at the door any minute, and I certainly didn't want to get caught with my trousers down. Once clothed, I headed downstairs...

Peering into the hallway from the top of the staircase reveals good news, no sign of that dreaded little Amtrak card. Walking down into the hallway confirmed this belief. "Hurrah!" I cried as I went to watch TV, waiting for my little box of joy to arrive. I had some wait though. One hour passed and still no sign of it, and I was getting a little eager to say the least. "Come on, I want to knock up a new version of Street Ninjas before I go to bed" I said loudly in a hope that the Amtrak guy would hear and subsequently hurry up, a long shot I know. For those who care, Street Ninjas was the title of a number of beat-em-up games I made for the Spectrum when I was about 10. Anyway, back to the story. I went to look out of the front window to see if the nice Amtrak guy was walking down the garden path, but he was nowhere to be seen. I repeated this almost religiously every 10 seconds for the next half an hour, but still nothing. That was until, while conducting one of these routine hopeful glances out of the window, something lying on the floor of the porch caught my eye. "OH NO, it surely cannot be!" I thought. But it was, it was a bloody Amtrak card. "F**k you all" I said loudly, again in the hope that the Amtrak guy would hear. I went to pick it up. "Mr Lewis, blah-de-blah tried to deliver a parcel at 9:20am, nobody home etc." To say I was shocked, stunned, and very cheesed off is putting it mildly. Again I held back the tears as I picked up the phone. "Hello. You f**kers don't knock loud enough!" is what I should have said, but I didn't, I was much more polite. "Hello, you tried to deliver a parcel to me this morning but I was unavailable." As soon as I confirmed my address with the women I was talking to she hit me with the news I was kind of expecting. "Sorry, but we only try to deliver twice, after that you must come and collect from us." With a sigh I gracefully thanked the women for her time, so to speak, and said I would be there the next day. 

So the next day came and I was up at 8:30am, a ridiculously early time of day, but I had no choice. I drove my mother to work in her car and set off on my quest to find the Amtrak offices. To be honest, there were times on this terrible journey that made me think, "Is this all worth it, stuff it, I'm going home!", but I persevered. The problem was not down to the amount of traffic on the roads at that time in the morning, but down to the fact that I couldn't for the life of me find the place. On top of that the Amtrak offices are located in such a dodgy area. There were moments when I was scared to drive below 40mph in case someone stole the tyres off the car. But eventually, more by luck than my 'A-Z' reading abilities, I found it. I walked in the door, they thrust a box into my hands and boy, was I glad to see it. Despite concerns that somebody would try to steal the socks I was wearing while I was walking back to the car, I managed to find my way home with the minimum of hassle.

Upon arriving home I rushed into the house and ripped open the box. I pulled out the black Playstation first, which had a box all of it's own, and looked not too dissimilar to the grey Playstation box I already had. Also inside was a funky little box, which looked like a smaller version of the PlayStation box, with all of the manuals and CD's inside. And finally there was a nice black box with the word 'CodeWarrior' written on it. I was very impressed.

Setting up the machine proved to be a fairly painless exercise. I connected the PlayStation up as I had done before with my existing unit, but this time I placed it right next to my PC, in a space I had cleared in preparation some weeks ago. I jammed the serial cable into the back of both the Yaroze and my PC, and after connecting the Yaroze to my TV, I switched on. This was where the problems began. I installed all of the software on the PC CD into two directories, called PSX and GNU, like the manual said, and I edited the batch file like I was supposed to. Turning on the Yaroze brought up a rather bland brick wall screen, but everything seemed to be working. I tried to make, and then run, the 'Check' demo that is described in the 'Getting Started' manual. Now, I followed Sony's documentation to the letter, at least five times, but the program refused to compile. Whenever I typed 'make' at the DOS prompt, I had some error thrown back at me. I can't remember exactly what the error was, but it didn't cheer me up. Right, where did I put that CodeWarrior CD...

Installing CodeWarrior was easy, and I immediately felt at home with the Windows programming interface, as nearly all of the languages I had programmed in so far were Windows based. Opening the CodeWarrior manual pleased me even more, as it was written in a pleasant style and was easy to follow. It seemed almost as though Metrowerks, the company behind CodeWarrior, knew that Sony's manuals were not up to much, so deliberately aimed their manual at those people who had almost given up hope. Needless to say I was extremely grateful for this. Again the CodeWarrior manual used Check as the example program, but the difference this time was that it worked. Metrowerks had provided two versions of Check, one which you could compile and convert to a PlayStation excecutable yourself, and one which was already made and just had to be downloaded. Programs were sent to the Yaroze via a funky Windows tool called the 'PS Communication Utility', and I was immediately much more fond of this than Siocons. Hearing the 'rather catchy at first' music that accompanies Check and seeing that ball bounce around the screen, coupled with the ability to increase or decrease the number of balls, made me smile. In fact, I think I said, "Damn, this is superb!"

The rest of my first Yaroze day was spent downloading a few demos and messing around with the code for the Check program. By messing around I don't mean I converted it into 3D and added huge rendered explosions, I just added a few 'FntPrint' statements so the text "Hello Steve", and various other comments, appeared on the PlayStation screen. Before this day I had considered myself to be fairly knowledgeable with regards to C, in a C exam at University I was awarded 90%, but just a glance at the Check code made me go weak at the knees. It was full of stuff I was not familiar with, like hexadecimal numbers (which I had no need to use before my Yaroze), and PlayStation specific functions, which took me by surprise at first. When I ordered the Yaroze I was under the impression that, being as the PlayStation was programmed in C, anyone with a little C knowledge would be able to knock up a few simple programs almost straight away with just what they already knew. But this was not the case, and I knew that I had a great deal to learn.
Unfortunately, my Yaroze arrived about a two days before I seriously had to get stuck into some coursework for University, so I couldn't really do any more until it was all finished. I did visit the SCEE Yaroze web site a few times, and downloaded a few documents like the Net Yaroze Programming FAQ, and Ira Rainey's Sprite Tutorial, but I didn't really have time to read them. Subseqently, due to the obscene levels of work I had to do for University, it was two months before I touched my Yaroze again...

DIARY ENTRY 2: 13th - 14th JULY 1999

"Now I can really begin"

At last my second year at University is over. All of the coursework I had to do is handed in (thanks to a few dodgy all night working sessions and lots of Red Bull!), and finally I am ready to really try to program some Yaroze stuff. What should I do first?

The first thing I decided to do is pay a little visit to the SCEE Yaroze web site, where I could 'borrow' as much as possible. Nearly three hours later was still downloading tutorials and programs from almost every available source. Stupidly, I even found myself downloading 3D based tutorials, although I am nowhere near being ready to even think about that yet. After my last demo program had downloaded, and my hard disk was positively bulging with programs you people have worked hard to produce, I feel I am ready to really knuckle down to it. I decide that the next best thing to do is print out everything I will need to read or refer to, like the various tutorials available. After sending about 600 pieces of paper through my printer, I was left holding everything I thought I needed to gain Yaroze knowledge. I also decided to print out some source code so I could look over how various programs were put together and hopefully learn some stuff. This plan does go a little pear-shaped as the CodeWarrior IDE does not tell you how many pages of code you are printing. As I found out to my horror by sending the likes of the Gravitation source to the printer, there can be an awful lot of pages. Subsequently, a new print cartridge and loads more paper needed to be brought.

Finally, when I was left surrounded a veritable forest worth of paper, I began to read, starting with the Sprite Tutorial by Ira Rainey that everyone on the SCEE site had been raving about. My first read through resulted in a frowned expression on my face, and little else. Don't get me wrong, it is an incredibly well written document, and I knew it would eventually prove to be very helpful, but the concepts it discussed were completely foreign to me. "Ordering tables? Frame Buffers? Colour Look Up Tables? What's going on?" So it was back to the beginning with me, and I read through it again, and then once more, until I started to grasp the concepts discussed. And grasp them I did. I then read through other tutorials, like James Chow's Understanding the Basics document, and Scott Evans' Ordering Tables and Double Buffering documents. That night I went to bed positively glowing with talk of Ordering Tables and memory locations for TIM files.

The next day I woke up early, 11:30am, and went straight over to my Yaroze, with hopes set high on writing a program which displays some text onto the screen. I know it doesn't sound like much, but it would make me feel a whole lot better. I sit at my keyboard, open CodeWarrior, and grab my printed copy of James Chow's previously mentioned 'Understanding the Basics' document. I slowly but surely plod through it, trying desperately to understand what I am doing and why I am doing it, and so far so good, it all makes sense. I compile the program - HURRAH! It works. I built the program (what you do when you type 'make'), and again - HURRAH! Then I load up the PS Communication Utility program and turn on the Yaroze, and once connection is established, I download my masterpiece. Everything's good so far, no error messages have occurred. Now, unfortunately, due to the layout of my bedroom, my PC monitor and TV actually face each other on opposite sides of the room. You would not believe how much tension is added to the simple 'download a program' process when you can't see what the output to the TV is until you turn around. So for a few seconds I just sat there, staring at my PC screen, scared to check the TV in case something has gone wrong, in case there is an error in my program that I don't know how to fix. Finally I pluck up the courage and rotate my head to see the following wonderful message written in white letters on a black background:

'STEVE, THIS IS AMAZING'
'YOU ARE WRITING TO THE PLAYSTATION SCREEN'

Superb, I had written my first working PlayStation program, and what a program it was. I suddenly felt better as a person, as though I had instantly climbed up some sort of rankings ladder for humans, where the better people are higher up. A victory dance was certainly called for, and one promptly ensued.

Once I had tired myself out dancing, I sat back down and said to myself, "Right, now for a sprite!" I reached for Ira Rainey's tutorial and, leaving my previous achievement running behind me for encouragement, I opened a new project in CodeWarrior. And away I went again, following every letter, trying to make sure that I remembered how and why everything was done. About two hours later I had finished the program. Taking note of the fact that a sprite had to be no bigger than 320*240 pixels, I went in search of an image I could use. I immediately knew what I wanted, what I would love to turn around and see displayed on my TV, a picture of Anna Kournikova. If you have never heard of Anna Kournikova, shame on you. She is a Russian tennis player who is also fantastically attractive. If you want to see for yourself, download this program (from when I finally got it working) from the 'File Downloads' page. Now, that last sentence has kind of ruined the suspense in this particlar story, as you know that I get the program working. However, there was still much to be done and indeed much to be learnt before Anna's face stared lovingly at me, so please read on. Alright, where was I? Oh yes, so I took a picture of Anna Kournikova and quite literally decapitated her, although I didn't want to do it, so I had a picture (her head) that I thought was smaller than 320*240. Opening the program called 'TIM Utility' and loading my sprite proved that my estimate was almost right, but a little trimming had to be done. After about five miutes of carefully trimming my sprite, loading my sprite in TIM Utility, saying, "Doh!" as it was still too big, and then going back into Paint to re-trim, my sprite was ready. Now, this is where my problems really began, as I had not properly grasped the concept of positioning sprites in the frame buffer. So, when I saved my sprite, made a batch file loading this sprite into a set place in the PlayStation memory and then loading my program, I turned around NOT to be greeted with Anna's lovely head. Instead, there were loads of colours all mashed (for want of a better word) together on screen. A confused look set in upon my face. "But I followed Ira's tutorial to the letter", I said out load, rather bewildered and unsure as of what to do now. The program had compiled correctly, no errors were produced by building it, and it all downloaded correctly, so where could the problem lie? I decided to go and sit in my back garden to re-read Ira's sprite tutorial again (it was a really sunny day outside and it is sometimes best to step away from a problem to find a solution, possibly!) And I did, and as I did, I had a moment of pure genius, a moment exactly mirrored to that of Newton as the apple fell on his head, except for me there was no apple, meaning I had no pain to accompany my inspiration. The moment came as I read about the 'GsDefDispBuff( )' function which is required to define the position of the buffers used within the frame buffer. I thought to myself, "Right, those are the co-ordinates of the buffers used for double buffering within the frame buffer memory. As well as the two double buffer images, I want to store my future wife's (Anna Kournikova's) head in the frame buffer. But I don't want my image to overlap the memory area used by the double buffers as that would corrupt the eventual output…A-HA!" I felt as though I was rising from the chair I was sitting on as I thought this through more and more and it all started to make sense. "There must be a way of using the TIM Utility tool to set the co-ordinates of where you want the sprite to go in the frame buffer. I know it is not done from within the program because Ira had not done it in her tutorial" was my final thought before I ran back indoors to try out my theory. And as soon as I loaded the TIM Utility program, I knew my previous thought must have been a message from a higher power, as I was greeted with the option of setting co-ordinates for my sprite. "Hallelujah!" I cried, as I set the frame buffer area for the sprite to be outside that reserved for double buffering (320,0), and ran my program to be greeted with Anna's face as I turned around. 

Now I felt as though I was making some real progress, and learning at the same time. I felt great. "Next", I thought, "I'm going to get my sprite to move by using the joypad, it can't be that hard?!?". Oh how wrong I was.

DIARY ENTRY 3: 10th - 11th August 1999

"Move, Damn it!"

Between the last diary entry and this I have not really spent that much time messing with my Yaroze. There are a number of reasons for this which I shall now outline so you can try to understand why:

1)	I smashed up my mother's car and it was subsequently written off. It wasn't my fault though...

2)	I had an anxious wait for the results of my second University year. They turned out to be good though.

3) I've had women troubles (who doesn't?).

So as you can see, I've had a few things to deal with. But I am back now, my Yaroze is powered up, and I am ready to move that head (with 'that head' being Anna Kournikova's beautiful cranium. For those who skipped the last entry, it was the first sprite I managed to display on the PlayStation screen, and I am now trying to move it).
 
Before I began to knuckle down to the task in hand, I decided it would be best to brush up on the stuff I learnt from displaying the sprite in the first place. So I sit down and write another program, which this time will hopefully display the TIM file Sony provides Yaroze users with to place at the beginning of their games. You know, the image of the Yaroze with three green bars at the bottom which are used to contain the authors name, how long it took to make the game etc. Whenever you load a Yaroze game from the Official UK PlayStation Magazine cover CD it displays this image first, I'm sure you know the one I mean, I just cannot describe it very well. Anyway, enough of this. The first thing I do is cut the size of the image down so it is smaller than 320*240 pixels. I save this image and convert it to a TIM file using the TIM Utility program, making sure to set the frame buffer address to be outside that of the double buffering area. With all this complete, and Ira Rainey's excellent coding 'borrowed' once again, I run the program to see my sprite displayed on the screen. "Excellent" I thought. "I'm a master now!" And I suppose in my own little way I was.

That night I paid a sneaky visit to the SCEE and SCEA Yaroze sites to see what was on offer. After about an hour of looking around, downloading everything that was not nailed down, I decided it was time to make my presence known to others with a black PlayStation. That night I began work on my web site, a job that I thought would be simple and could be achieved within a few days. If I knew then that three weeks later I would still be working on it, I doubt I would have bothered, but this is another story entirely, and one which will probably appear in a later diary entry. Back to my sprites.

After the success with my second sprite displaying program, I decide it is time to go back to the program I wrote originally and attempt to make the sprite move. I open the appropriate project in CodeWarrior and reach for some example source code to see how it is done. My arm extends and picks up the source code for a game by Nick Ferguson called Amateur Wars. Now, Nick himself has gone on record as saying that this game is poor, but to me, with my current Yaroze knowledge, it is fantastic. But the most important thing for me is that it has moving sprites. I grab both the source for the normal and Special Edition versions of this game and begin to analyse them. "Hmm, I like what he has done there...yes...I like that too...I would have done that a little differently!" I murmured out loud as I read the code, in a vain attempt to sound as though I knew what I was talking about. Certainly, for a guy who really didn't know C before getting his Yaroze, Nick has come a long way to write this sort of code. Whilst looking through the source I started to realise that, when all is said and done, my knowledge of the C language really is not up to much. Although I sort of understand what is going on in Nick's code, I wouldn't know where to begin to write some similar code of my own. Where as up until now I had believed my C knowledge was fairly good, I suddenly realised that what I know is not going to get me very far in life at all. It was time to completely pull out my finger, so to speak, and educate myself in the ways of C. A trip to the local bookshop was needed.

While sitting on the bus on the way to WH Smith (the aforementioned book shop), staring out of the window watching the world go by, I decide that the very best thing for me to do is to start learning C from the very beginning, at its most basic level. Although I was sure that I knew 99% of this stuff already, I thought it was important to establish a thorough foundation to build upon, if you know what I mean. Also, that 1% I didn't know might prove to be important. "Young Steven, when trying to succeed in life, you must always start from the bottom and work up" was a phrase somebody told me when I was younger. I forget who, but it could have been an old teacher, or an old girlfriend! Anyway, I arrive at WH Smith and head over to the programming books. Although I already had a few C and C++ books at home, these were more reference books for those who already knew their stuff, I wanted a book that would teach me from the very beginning. My eyes scanned the shelves. Almost immediately I thought I had found what I was looking for, although the title put me off a little, 'C for Dummies Volume One'. A quick flick through confirmed that this was the book for me. It started from the very beginning, it was extremely thorough in its description of C language concepts, and most importantly, it explained every single detail at least twice, which would hopefully mean that my required knowledge foundation could be built. Of course, a guy about to start his final year of a degree with honours in Software Engineering at University does not want to be seen buying a book entitled C For Dummies. So, before going to the cash desk, I made sure that nobody was in the shop that I knew, and I also planned the quickest route to the cash desk where nobody could see me. I made sure the coast was clear and then quite literally pelted it across the shop to the cashier. Although she gave me a very funny look, I left with the book, and also with a least a little of my pride.

While sitting on the bus heading home I decided to leave Anna Kournikova's head alone for a while until I had gone through the C for Dummies book. I hoped then that I would be able to look at Yaroze programs with a more educated eye, and I could hopefully progress a great deal further than I had to date. This Yaroze break would also give me chance to finish my web site. Yes, I know, that really isn't a very good plan, and to be honest looking back it is possibly the worst plan ever concocted, but it seemed a good idea to me at the time. It was, and still is, very important to me to improve my working knowledge of C. Did my plan work? Well, only time would tell.

DIARY ENTRY 4: 29th August 1999

"At last, I have finally got it up!"

As some of you may have gathered from the above quote, this diary entry has been written to coincide with the uploading of my Yaroze web site. If that is not what you thought I was talking about when reading the above, you have probably been watching way too much late night television, you filthy beast! Yes, anyway I have uploaded the other pages of my web site to the SCEE server (quite a task), and I just thought I would write a quick diary update before uploading this page. I'm sure that somebody out there is curious to know what I have been up to for the past couple of weeks.

Well, for that one person who is interested, I have been ploughing through the C For Dummies book like a man possessed. Although I have to say that I have not really covered anything yet that I didn't already know, the book is very well written and has refreshed my memory of some of the smaller, less widely used C concepts. It has been a good source of revision for me. I certainly recommend it to anyone who is also looking to strengthen their C knowledge foundation, although for most of you Yaroze owners it may be best to start with the second book in the series. That is unless you feel your understanding of the 'printf' statement is not what it should be.

As well as educating myself in the ways of C, I have finally finished putting together a web site that I am fairly happy with. I've lost count of the number of times it has been redesigned, or I've changed the title, or I've written pages and then decided that I didn't want them included. It truly has been a nightmare, but I hope you don't hate what you see. This is the first web site I have put together, and I was using FrontPage Express, so I think I have done well considering. Of course, if you do hate it, let me know what you hate and I will look into changing it.

"What about my Yaroze coding?" I hear you cry, "This is supposed to be a Yaroze Diary isn't it!" Well, yes, you are quite right, and I am afraid I do not have too much to report. I have messed around with Anna Kournikova's head a little, looking at other people's game code to see how sprite movement is achieved, then trying to get it to move. But as of yet, nothing has worked. I have experienced quite a few error messages, in fact I have seen more error messages than one guy has a right to. I have been learning though, and I shall battle on, I'm sure I am pretty close to seeing that head move, as it were.  I have had chance to tidy up the code a little.  I put in a loop that enables 4, 8, or 16 bit sprites to be displayed, which I was quite impressed with when I finally got it to work. If you want to look at this code head to the download page and get the Sprite Display file. The code can also be seen in the 'Displaying a Sprite' technical document from the Technical Area.

Well, that is pretty much all I have to say for the time being. I apologise for the lack of length and detail to this entry, but I am just very anxious to see my page up and running. Normal service will be resumed for the next entry. Speaking of which, in an ideal world, my next diary entry (which should occur sometime in September to coincide with the uploading of the C Programming Area), will contain information on how I successfully made Anna's head move, before going on to program the ultimate 3D racing game and then marrying the women herself. Unfortunately, we don't live in an ideal world, and I doubt that two of the last three things mentioned will happen, but you never know...

DIARY ENTRY 5: 16th September 1999

"Hold me back…"

Wow, so much has happened in the past couple of weeks.  Since my last diary entry my Yaroze abilities have gone from zero to…well, about 0.2 to be honest, but I am moving in the right direction.  The troubles I had in moving Anna Kournikova's head are a thing of the past, and I have now moved on to having a whole heap of new Yaroze related problems that are far harder to solve, but more on these later.  The past 18 days have seen me sleep far less than any human being in the history of the world, but I have thoroughly enjoyed them.  Do you want to know what I have been up to?  Do you?  Well, I'm going to tell you anyway.

Ooh, where do I begin?  Well, after finally getting my web page up and running (see last diary entry), I decided to once and for all get Anna's head shooting around the screen in response to joypad inputs.  I sat in front of my computer at about 6:00pm on the same day I uploaded my site and said to myself, "Steve, you are not moving from this chair again until Anna's head does!"  Move that is, and I didn't.  I sat looking over source code and reading tutorials until I had come up with some code that finally made Anna's head whiz around.  I cannot tell you how relieved I was to see it move.  It was the sort of relief that you feel when your favourite football team goes three goals down, only to come back and win 4-3. To be honest I am fairly sure the pleasure gained would have been far greater had it not been 5:00am until I finally saw some come back from my efforts.  At that time in the morning not even a gift from above is enough to make you happy, if you know what I mean.  Still, I decided not to turn in until I had also thrown some rotation and scaling in there, but that was pretty simple once I knew how to read inputs from the pad.  By about 5:30am Anna's head was zooming and rotating all over the place, and my eye lids were getting closer and closer together.  As I lay on my bed feeling pretty pleased with myself, I couldn't help but feel a little embarrassed.  The reason for this was nothing to do with the fact that I had been sitting in my computer chair for about 12 hours (although I was a little numb).  The reason for my embarrassment was down to me having made extremely hard work of grasping a Yaroze concept that turned out to be really simple.  All I needed to do in order to see Anna's head move was to make a global variable for storing the input from the pad, and then place a few 'if' statements in to say what to do depending on the value held by this global variable, like this:

	if(padCheck & PADLleft)
		sprite.x -= 5;

And that was it.  I started thinking about my value as not just a Yaroze owner, but as a human being.  I mean, how could I expect to make games when I struggle to even do something as simple as this.  I would have made myself far more depressed had I not fallen asleep right after having this thought.

The next day (well, the same day) I woke up bright eyed and bushy tailed, at about 12:30pm, with thoughts of animating a sprite.  The first thing I did was open up Microsoft Paint and create a couple of images that, when linked together, would create an animation of sorts.  Now this is when I realised why I had never pursued Art passed GCSE level.  I have the drawing abilities of a very small child.  I can visualise an image in my head, but when I try to transfer it onto the PC screen, or even paper for that matter, it ends up looking like a hamster on steroids.  No matter what I try to draw, a house, a car, a beautiful landscape, it always ends up looking like a hamster on steroids. I can remember my days at junior school when occasionally the teacher would take us outside to draw a tree or somthing.  She would sit us on the floor in a straight line to draw this tree, and would walk along looking at everyone's drawing.  Whenever she got to me she would always say, "Steven!  You are meant to be drawing that tree, not a hamster on steroids."  It is not my fault, I can spend hours on a drawing, trying to utilise colour and depth, but no matter what, it never turns out the way I visualise.  So as you can image, I found it hard enough just drawing one image, let alone a series of images that could create an animation.  Many frustrating hours followed of drawing, then rubbing out, drawing, and then rubbing out. Finally I produced a series of images that could be called an animation, albeit only just.  It was a stick man running, nothing more, nothing less.  But I was so proud, it was my stick man, and I loved him.  However, the hard work was still to be done, I had to make this animation run on the PlayStation.

That night I sat up trying to write some code that would run this animation on the PlayStation screen.  I found the hardest part of doing this was trying to get the PlayStation to load in four different TIM images.  I had done one before, but I wasn't sure how to handle four.  Still, I found the answer after reading through some game source code, namely Amateur Wars by Nick Ferguson.  I converted my 'GsSprite' structure into an array, loaded all of the images in with the help of a 'currentSprite' variable, and Bob was quite literally my uncle, so to speak.  With a swift animation loop placed in my code, my little stick man was up and running, if you excuse the pun, and by only 2:00am to boot.  I could get my first early night in ages (?!?).

Have you ever heard of something called the 'zone'.  Apparently someone has entered the zone when they can do no wrong.  For example, if you play the piano, and you wake up one day to find that you can play every song you know perfectly first time when you have never been able to do that before, you are said to be in the zone.  Well, at this point I believed I was in my Yaroze zone.  It seemed that no matter what I turned my hand to I was able to get it working with the minimum of effort.  Take my next Yaroze goal as an example.  After my success with animation, I thought I would turn my hand to backgrounds.  The first thing I did was to get two 160*240 TIM files to be displayed on the screen next to each other.  Once again my artistic talents left something to be desired, as all I managed to come up with was a little bit of grass and some blue sky, but it didn't really matter. When I had got them up onto the screen, I decided to have a go at scrolling it.  Now this is where I really amazed myself.  I had a glance at some code written by George Bain, decided that I didn't like the way he had done it, and set about writing my own code so the two images scrolled from right to left.  I was truly surprised when my background moved more or less first time.  I thought I was ready to take on the world.      

Unfortunately a person does not stay in the zone for very long, as I quickly discovered.  The problems started when I decided to begin work on my first Yaroze game.  Do you remember a game called Track n' Field?  It is an old arcade game made by Konami, and you had to compete in many athletic events but tapping the buttons found on the arcade cabinet as fast as was humanly possible.  If you are not familiar with this version you may remember an update released for the PlayStation a while ago called International Track n' Field.  Anyway, my reason for this brief history lesson is because I had a vision of creating a game along similar lines to the original Track n' Field.  Except, and this is a rather large exception, my game was going to be called Track n' No Field, simply because I thought it would be very hard to include field events with my current Yaroze knowledge.  Despite this obvious limitation, I still think a fairly good game can be made consisting of events such as the 100m, the 200m, and erm, maybe the 400m as well.   I wanted the player to have to tap left and right on the joypad as fast as they could in order to win races against seven computer opponents, and maybe even a second human player.  I even thought about including various game options as well, such as winner stays on.  Another reason why I was so keen to do this was down to the fact that I didn't think anyone had done anything like it on the Yaroze before.  I may be wrong about this, but I certainly don't remember seeing anything similar.  

Work started more or less straight away on Track n' No Field after my scrolling background success.  To date it is coming along quite nicely.  I have finished putting together a one player 100 meters race, albeit without any computer characters as yet, and I have just started implementing a two-player mode.  I have certainly learnt a great deal from my time working on this game, and I am beginning to feel as though I have come a long way in a very short space of time.  I cannot believe that only 18 days ago I was writing about being unable to move a sprite around the screen, and now I am talking about adding a two-player mode in the game I am working on.  Progress is swift, as they say.

Well, that is more of less where I am up to at this moment in time.  I have to say that if I have learnt only one thing in the passed couple of weeks, it is that I am really glad I brought a Yaroze.  It has brought back to me the joy that can be gained from making your own games, and the community atmosphere that exists between Yaroze members is second to none.  My Yaroze has also made me realise how much I enjoy programming.  Recently at University I had found myself becoming a little bored with it.  Knocking up Windows based programs didn't really interest me, and I had begun to have thoughts about doing something else with my future that wasn't programming based.  But all of that has changed now, and it is all thanks to Sony and their Yaroze program.  They have helped me to rediscover the joy I gained from programming on the Spectrum, and I am grateful.  It was just what I needed to gain some direction for the future.