Jump to content
IGNORED

Presenting RBERT - a game I did 30 years ago


jstimson

Recommended Posts

After watching the AMC series "Halt and Catch Fire", I found myself with a renewed interest in my vintage computer collection, with a specific desire to get back into doing something with my TI.

 

Among my disks I found a program I wrote about 30 years ago. At the time I loved Qbert but did not have the cartridge. So with my XB in hand, I wrote a simple clone of it.

 

Looking at it now, there are all kinds of things I would like to do with it. But first, I need to review the code that I did so long ago and get a feel again for what I had in mind.

 

Attached is a text listing of the code as well as the program file (transferred via XMODEM from my TI).

 

Keep in mind that I had no printer for my TI that long ago. I wrote things out by hand and tried to keep my hand-written listing in sync with the actual code. I can't recall if I had my 32k expansion at the time, or just had my XB cartridge and tape drive.

 

In any case, this is the original program with the only modification being the addition of a version remark. As free time permits, I will be studying what I did so long ago, look for ways to speed it up, and also look at adding new features.

 

The instructions are a little unclear on how to lead the snake off of the pyramid. The snake always follow you at 1 level below where you are, so to lead it off you need to go to the bottom row.

 

I am open to suggestions for improvement. My one stipulation is that I want to keep this in XB with the only requirement being 32k expansion.

 

rbert.bmpRBERT_v1.zip

  • Like 8
Link to comment
Share on other sites

Loading this up now! Looks beautiful in your image.

 

Only thing that may go a long way is compiling this...

 

Edit:

 

I just played... I really like the idea of filling the boxes with a square. That keeps things simple.

 

I'd probably make the ball a little smaller. And Coily appeared out of nowhere - in the arcade he's a ball until it hits the bottom.

 

Very impressive - it's definitely Q*Bert! Q*Bert was my favorite. I even owned a machine briefly.

Edited by unhuman
Link to comment
Share on other sites

Thanks. :)

 

I put my hands on a few incarnations, but never gave them much time. At least you have to plug in a joystick and rotate it 45 degrees. Today I only rotated my keyboard, and made quite a few mistakes anyway (because of that (=no joystick)). I'm sure one can get better at anticipating patterns or something, but I'm generally just getting stuck. At other times (games) I must clearly be much more persistent.

 

I had a quick go at the arcade version to get acquainted with this rather nice looking beast. There's definitely a lot of charm there. Then it was on to the TI version by Parker Brothers. Very nice. Missed the obvious option for speech. Then finally on to your version. Of course putting everything into perspective (XB, retrospective, - you know). After a few hilarious rounds, I deleted the MA=MA-1 to get past level one.

 

Nice one. :thumbsup:

Edited by sometimes99er
Link to comment
Share on other sites

 

I appreciate any feedback. As I mentioned, this is from long ago and under pretty primitive conditions for coding. I first need to reverse-engineer what I did so I can see about adding improvements.

 

As for speech, at the time I don't believe I had the synthesizer. So that is something I will definitly be adding to the code. I also want to improve the joystick handling, see about adding some type of transporter discs, refine the graphics, etc.

 

The official qbert for the TI is actually very well done and plays beautifully, along with fantastic graphics, character animations, and sound. I don't see XB getting anywhere close to that level, but there are many areas I can make improvements on my own version.

  • Like 1
Link to comment
Share on other sites

Cool, I'll load it up on my TI this evening and try it out. I'm just now getting documenting the old code but am eager to start adding bells-and-whistles.

 

As a test I added _bert speech to the exit as found in the game. :)

 

 

I'm a bit rusty on Xb programming, what can be used to compile a XB program?

 

 

 

Link to comment
Share on other sites

Hmm, gonna need a little help. The two files in the archive are, presumably, a program file and a disk image file. I have not done much in the emulation side of things so having an issue getting things to run on my real TI.

 

The program file shows up on the TI as a D128 file (used XMODEM to transfer it). As for the disk image, not sure how to handle that. The only emulation I have set up is Classic99 right now.

 

 

As a test I added _bert speech to the exit as found in the game. :)

 

 

I'm a bit rusty on Xb programming, what can be used to compile a XB program?

 

 

 

Link to comment
Share on other sites

The disk image will run under win994a , with speech. (You must turn on the speech under prefs)

 

Maybe someone else can jump in on the best method to get it onto your 994a.

 

I transfer the file by network to another computer with a 3 1/2 drive and use a program called TI-99pc to create a floppy for my TI system.

 

If you only have the 5 1/4 drive, not sure what the best method would be.

 

Hopefully someone will step forward to help you.

Link to comment
Share on other sites

Just as an update on how I'm splitting my time, one thing I'm doing is running benchmark tests on various ways to do the same things in XB. For example, in my RBERT code, I used SGN() in various spots to determine the sign of a number and to act accordingly. That is probably the logical way to do it. However I found that doing a simple compare instead saves a full millisecond each time I do it. For example, "IF SGN(X)=1 THEN ...." is ever so slightly slower than "IF X>0 THEN...". So one thing I'll do is update each use of SGN() in my code. I'll also be sure to replace my calls to the terribly slow RND statement with the PEEK that gets me a random number. Even with having to RANDOMIZE before every PEEK, I can get a random number about 30% faster than using RND by itself.

 

At some point I'm intending to share my various benchmark findings so others can take advantage of them as well.

Edited by jstimson
  • Like 1
Link to comment
Share on other sites

Hmm, gonna need a little help. The two files in the archive are, presumably, a program file and a disk image file. I have not done much in the emulation side of things so having an issue getting things to run on my real TI.

 

The program file shows up on the TI as a D128 file (used XMODEM to transfer it). As for the disk image, not sure how to handle that. The only emulation I have set up is Classic99 right now.

 

 

 

MagicFM is great for transferring from XModem capable term on the PC side, but the trick is to get the disk on the TI side first.

 

Easiest thing really for transferring is a straight through serial cable and cfhdxs1 on the TI side, and HDX server on the peecee side.. Or if you want a project, a hdx daughterboard on the tI rs232 card gets you HDX software in DSR so you can use HDX1. as a device to access the pc side. I can send you a floppy with the cfhdxs1 software AND magicfm if you like just pm me with the address.. this works with properly designed usb->rs232 devices for the newer pc's without rs232 ports.. stay away from the 10$ cheapy chinese ones.. I got it working under wine in linux as well as in windows.. cfhdxs1 is basically disk manager 2000 that includes the hdx drive functionality in software.... with the daughterboard you can use DM2k or whatever.. OLD HDX1.PROGRAM etc..

 

daughter-boards available here: http://www.arcadeshopper.com/wp/?page_id=11#!/HDX-pcboard-(bare-PCB-no-parts)/p/21147033/category=5051340

if you want to buy a modded card here: http://www.arcadeshopper.com/wp/?page_id=11#!/Texas-Instruments-RS232-Card-with-HDX-modification-installed/p/36126191/category=5051340

 

lots of info in those links on hdx and to the author's site (Fred Kaal)

 

Greg

Link to comment
Share on other sites

Hmm, gonna need a little help. The two files in the archive are, presumably, a program file and a disk image file. I have not done much in the emulation side of things so having an issue getting things to run on my real TI.

 

The program file shows up on the TI as a D128 file (used XMODEM to transfer it). As for the disk image, not sure how to handle that. The only emulation I have set up is Classic99 right now.

 

 

 

ok.. if you send a file without a tifiles header to the TI with xmodem it will default to adding a tifiles header of df128.. if you look at the file with tidir.. it will show you the type of file it is (v9t9 or tifiles) and allow you to convert it to either or format .. if your xmodeming to the TI you want it in tifiles format.. that will send the proper file type over xmodem and create it on the TI side correctly. a lot of emulation likes things in the v9t9 format rather than tifiles.. thanks to v9t9 being the emulation file/disk standard that everything's gone with.. classic99 will read both...

 

tidir is here: ftp://ftp.whtech.com/Users/fredkaal

 

Greg

Edited by arcadeshopper
Link to comment
Share on other sites

Sounds like you're 90% of the way there. The folder that ends in @ is the one you want to transfer to the TI, and it sound like you are at that point. Then you just have to use Archiver 3.03 to unpack the files and put them on a disk. If you don't have Archiver on your TI you can transfer it from disk 1 in Classic 99. You can also get an earlier version from the development resources at the top of the page. This does not have XB256 built into it, but is a bit more compact.

 

After unpacking the files for the compiler with archiver, go to Vorticon's post #7 above and go to the thread about the compiler. Go to post #48 in that thread (the last post) and make the change to RUNTIME1

 

If you use Win994a you can simply drop the disk image into the Win99 folder that contains disks.

 

The disk image and the file with the @ contain the same files; just different ways of doing it.

 

If it makes a difference, the compiler does not support speech.

Edited by senior_falcon
Link to comment
Share on other sites

Just as an update on how I'm splitting my time, one thing I'm doing is running benchmark tests on various ways to do the same things in XB. For example, in my RBERT code, I used SGN() in various spots to determine the sign of a number and to act accordingly. That is probably the logical way to do it. However I found that doing a simple compare instead saves a full millisecond each time I do it. For example, "IF SGN(X)=1 THEN ...." is ever so slightly slower than "IF X>0 THEN...". So one thing I'll do is update each use of SGN() in my code. I'll also be sure to replace my calls to the terribly slow RND statement with the PEEK that gets me a random number. Even with having to RANDOMIZE before every PEEK, I can get a random number about 30% faster than using RND by itself.

 

At some point I'm intending to share my various benchmark findings so others can take advantage of them as well.

RXB next release will have a much faster RND than normal XB or any other 110 versions.

Some tests indicate it is extremely faster.

https://www.youtube.com/user/CarbonicHolyPally?feature=mhee

  • Like 1
Link to comment
Share on other sites

ti99dir solved my file problem. Used it to convert the v9t9 file to a normal TI program file and xmodem'ed it over to my TI no problem.

 

The actual qbert sound effect at the end is very nice. As I optimize the program and add features, I definitely want to add touches like that to bring it to life.

  • Like 2
Link to comment
Share on other sites

That speech is a fairly close representation of the speech at the end of the arcade game.

Glad you like it.

 

BTW I read the developers had trouble creating speech for the game, and chose to use the garbled speech to match the

speech balloons in the game.

Also the character is designed the way it looks because it was suppose to shoot using it's nose.

 

 

PM me if I can help

Link to comment
Share on other sites

  • 2 weeks later...

Well well well, I'm happy to say I've actually been able to work on this old program and update a lot of the code. It's amazing how being able to print out a listing can make a difference. I didn't have a printer 30 years ago, so everything was written on paper. Good times.

 

I've done a lot of code cleanup. I'm not sure that the gameplay is any faster, but I did get rid of a lot of inefficiencies, redundant calculations, etc. Also changing variable names to be meaningful, more use of references instead of hard coded values, etc. I'm keeping track with rem statements in a version header.

 

Current code is attached as a TIFILES file.

 

Now I am going to start looking at real upgrades to the game. Things I have in mind are to make the actual pyramid closer to the Qbert one. Right now it does not have enough rows of blocks. To do that though will mean a complete change in scale of things. I will have to remake everything in 1/2 the current scale as well as take the sprites down to a magnification of 3 instead of 4. This will be the largest change to the program.

 

Other changes I want to do are to implement the transporter disks (or something like them). Right now the coil must be lead off the bottom of the pyramid, but with transporter disks it would need to be lead off the sides.

 

Funny enough, I expect the change in scale to actually improve gameplay. Sprites will have 1/2 the distance to travel on each move. Also having a full 7 rows on the pyramid means not being trapped into a bad position as often, there are more escape options.

 

Here's a list of changes direct from the code....

 

210 REM ************

220 REM * R*BERT *

230 REM ************

240 REM BY JEFF STIMSON

250 REM ORIGINAL VERSION FROM EARLY 80'S V.1.0

260 REM 11 SEP 14 CHANGE SGN TO REGULAR COMPARES

270 REM USE PEEK FOR RANDOM NUMBERS

280 REM USE DONATED SOUND FILE FOR ENDGAME

290 REM 13 SEP 14 CLEAN UP INSTRUCTIONS AND KEY INPUT

300 REM REMOVE EXPLICIT ROW/COL VARS AND MATH

310 REM 14 SEP 14 BETTER VARIABLE NAMING

320 REM CLEANER RBERT POSITION TRACKING

330 REM 19 SEP 14 CREATE VARIABLES FOR SPRITES AND CHARS

340 REM CHANGE RBERT CHAR ONLY WHEN REQUIRED

350 REM SIMPLIFY COIL ANIM CODE

360 REM USE MATH INSTEAD OF CALL COINC

370 REM 20 SEP 14 CLEAN UP COIL DIRECTION FINDER

380 REM MORE VARIABLE CLEANUP

390 REM CLEAN UP COIL AND BALL POSITION MATH

400 REM ADD ANOTHER LEVEL COLOUR

410 REM USE CALL SOUND FOR TIMING

420 REM 21 SEP 14 REPLACE GCHAR FOR BALL WITH YPOS CHECK

430 REM PLACE RBERT MOVEMENT AFTER JOYSTICK CALL

440 REM NO MORE MYSTERY VARIABLES

450 REM 23 SEP 14 REVIEW AND CALL IT A DAY

460 REM STAMP AS VERSION 1.5

RBERT_1_5.zip

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...