Games Exposed

General software. From trouble with the Banyan Tree to OCP Art Studio, post any general software chat here. Could include game challenges...
User avatar
Lee Bee
Dynamite Dan
Posts: 1392
Joined: Sat Nov 16, 2019 11:01 pm
Location: Devon, England
Contact:

Re: Games Exposed

Post by Lee Bee »

AndyC wrote: Fri May 06, 2022 3:13 pm I was always curious about doing something like this with one of the Dizzy titles. Maybe Treasure Island or Fantasy World, although never really had the time to sit down and try it out.
Incidentally, if it's possible to modify the attribute values in Treasure Island Dizzy, I designed an attractive alternative colour scheme for the game.
User avatar
luny
Manic Miner
Posts: 222
Joined: Wed Apr 20, 2022 8:25 am
Contact:

Re: Games Exposed

Post by luny »

Lee Bee wrote: Sun May 08, 2022 11:37 pm
AndyC wrote: Fri May 06, 2022 3:13 pm I was always curious about doing something like this with one of the Dizzy titles. Maybe Treasure Island or Fantasy World, although never really had the time to sit down and try it out.
Incidentally, if it's possible to modify the attribute values in Treasure Island Dizzy, I designed an attractive alternative colour scheme for the game.
That is the sort of thing I like to jump at, as a side track. But I mustn't, mustn't stop doing my Island game. aaarg! ;)
All we'd have to do is find out how the screens are stored and write a simple decoder / encoder. But.. must resist....
I code to live (Job) and I live to code (Retro). One of them has to give!
User avatar
spider
Dynamite Dan
Posts: 1106
Joined: Wed May 01, 2019 10:59 am
Location: Derby, UK
Contact:

Re: Games Exposed

Post by spider »

luny wrote: Mon May 09, 2022 12:29 pm That is the sort of thing I like to jump at, as a side track. But I mustn't, mustn't stop doing my Island game. aaarg! ;)
All we'd have to do is find out how the screens are stored and write a simple decoder / encoder. But.. must resist....
That does give some thought to perhaps (if you did not want a disassembly) to maybe writing some game editors ? Please, I'm not 'suggesting' this , merely a passing thought as per the posts above.

I do keep meaning myself to see if I can do anything with a couple of games, Motos and Turmoil. The former should be not that hard as there was an editor but it's MIA, tbh the results might even port over to the CPC as its virtually identical (ish) , the latter I think I looked once and could not make a lot of sense of it (may be mistaken for something else) , bit like the way TechTed's screens are 'built' from instructions but that is off topic, sorry.


EDIT... Oh one other game 'suggestion for disassembly' : Hydrofool

:)
AndyC
Dynamite Dan
Posts: 1432
Joined: Mon Nov 13, 2017 5:12 am

Re: Games Exposed

Post by AndyC »

Lee Bee wrote: Sun May 08, 2022 11:37 pm
AndyC wrote: Fri May 06, 2022 3:13 pm I was always curious about doing something like this with one of the Dizzy titles. Maybe Treasure Island or Fantasy World, although never really had the time to sit down and try it out.
Incidentally, if it's possible to modify the attribute values in Treasure Island Dizzy, I designed an attractive alternative colour scheme for the game.
From the prodding around I did inside of it once upon a time, I think every object had a "colour" value from 0-7 and it was always assumed that the paper was black. Can't remember whether that was just stored as a byte that could be expanded to include paper colour or not though (at the time I was trying to hack something in the CPC version which had the same Speccy colours assigned and internally re-mapped them onto the four colours it uses)
User avatar
luny
Manic Miner
Posts: 222
Joined: Wed Apr 20, 2022 8:25 am
Contact:

Re: Games Exposed

Post by luny »

spider wrote: Mon May 09, 2022 12:49 pm
luny wrote: Mon May 09, 2022 12:29 pm That is the sort of thing I like to jump at, as a side track. But I mustn't, mustn't stop doing my Island game. aaarg! ;)
All we'd have to do is find out how the screens are stored and write a simple decoder / encoder. But.. must resist....
That does give some thought to perhaps (if you did not want a disassembly) to maybe writing some game editors ? Please, I'm not 'suggesting' this , merely a passing thought as per the posts above.

I do keep meaning myself to see if I can do anything with a couple of games, Motos and Turmoil. The former should be not that hard as there was an editor but it's MIA, tbh the results might even port over to the CPC as its virtually identical (ish) , the latter I think I looked once and could not make a lot of sense of it (may be mistaken for something else) , bit like the way TechTed's screens are 'built' from instructions but that is off topic, sorry.


EDIT... Oh one other game 'suggestion for disassembly' : Hydrofool

:)
A bit like https://sourceforge.net/projects/zxed/, one of my many unfinished projects...

Sigh!
I code to live (Job) and I live to code (Retro). One of them has to give!
User avatar
Morkin
Bugaboo
Posts: 3290
Joined: Mon Nov 13, 2017 8:50 am
Location: Bristol, UK

Re: Games Exposed

Post by Morkin »

spider wrote: Sun May 08, 2022 12:47 pm Penetrator
That one was my first attempt at a Skoolkit disassembly...

Image

Didn't get too far though - got a bit bored trying to disassemble the s0dding fireworks... :lol:

A lot of the code is the landscape editor, plus the landscape data so it might be a fairly short one if you know what you're doing (I didn't at the time).

I mainly wanted to know how they did the landscape drawing and it's fairly interesting - I got the gist of it before I decided to give up and pick something else...
My Speccy site: thirdharmoniser.com
User avatar
Cosmium
Microbot
Posts: 157
Joined: Tue Dec 04, 2018 10:20 pm
Location: USA

Re: Games Exposed

Post by Cosmium »

spider wrote: Wed May 04, 2022 8:31 pm If you wanted some random suggestions from me (probably not!) as these are probably/maybe not quite what would be seen as popular candidates...

In no particular order:

Turmoil
Space Raiders
Worst Things Happen At Sea
Slippery Sid
Motos
Booty
I think Slippery Sid was actually a BASIC compiled game, though it still might be interesting to see how the compiler went about its business and how efficient/inefficient the code it produced was!
User avatar
spider
Dynamite Dan
Posts: 1106
Joined: Wed May 01, 2019 10:59 am
Location: Derby, UK
Contact:

Re: Games Exposed

Post by spider »

Cosmium wrote: Tue May 10, 2022 2:47 am I think Slippery Sid was actually a BASIC compiled game, though it still might be interesting to see how the compiler went about its business and how efficient/inefficient the code it produced was!
It did give that impression to me too, the way the collision check was only attribute based (iirc) although I did not see from a cursory glance at the code any compiler attributions.

I did think RockMan was compiled Basic too, might be I've not looked at that yet! :)
User avatar
MatGubbins
Dynamite Dan
Posts: 1239
Joined: Mon Nov 13, 2017 11:45 am
Location: Kent, UK

Re: Games Exposed

Post by MatGubbins »

spider wrote: Tue May 10, 2022 10:31 am I did think RockMan was compiled Basic too, might be I've not looked at that yet! :)
RockMan (Mastertronic)
A quick look at the code reveals this snippet of text at
60208: ZX COMPILER V2.0 1983 THREEFALL and HODGSON compiled OK
SteveSmith
Manic Miner
Posts: 741
Joined: Mon Nov 26, 2018 1:07 pm
Location: UK
Contact:

Re: Games Exposed

Post by SteveSmith »

Morkin wrote: Wed May 04, 2022 11:35 am Yeah, those are good choices. I'd definitely love to see a disassembly of Chaos - for some reason I might have thought someone would've done it by now.
I'm sure I remember reading about a Chaos disassembly, but it might have been years ago on c.s.s. IIRC, they discovered some unused spells and creatures. I'll see if I can find it.

Edit: Found it, from 1996:
https://groups.google.com/g/comp.sys.si ... xcYU?pli=1
User avatar
Sokurah
Manic Miner
Posts: 288
Joined: Tue Nov 14, 2017 10:38 am
Contact:

Re: Games Exposed

Post by Sokurah »

Many years ago I spent A LOT of time disassembling The Sentinel, in the hope that I could make heads and tails of the landscape generator. I wanted to remake the Spectrum game for the PC and I wasn't going to do it unless I could generate the exact same landscapes. However, although I laid a lot of the code bare, I wasn't able to pinpoint the exact code needed to generate the landscapes. Too bad ... but perhaps also a bit too ambitious :lol:
Website: Tardis Remakes / Mostly remakes of Arcade and ZX Spectrum games.
My games for the Spectrum: Dingo, The Speccies, The Speccies 2, Vallation & Sqij.
Twitter: Sokurah
jimmy
Drutt
Posts: 40
Joined: Sun Nov 24, 2019 9:06 pm

Re: Games Exposed

Post by jimmy »

MatGubbins wrote: Tue May 10, 2022 11:01 am
spider wrote: Tue May 10, 2022 10:31 am I did think RockMan was compiled Basic too, might be I've not looked at that yet! :)
RockMan (Mastertronic)
A quick look at the code reveals this snippet of text at
60208: ZX COMPILER V2.0 1983 THREEFALL and HODGSON compiled OK
Ah yes, good old Mcoder2.
This should be close to the original code, but it won't work as-is because the variables of the 2nd part of the game have been overwritten by the first part. You can't have FOR data=1 TO 90 in ZX Basic. Also the original line numbers are lost, these are approximations. Some of the mathematical expressions might be wrong, but it's better than nothing...

Code: Select all

REM Rockman by Mastertronic
REM Is not an exact decompile...
REM ***
REM Program found at 34000
REM ***
10 REM #0
20 RESTORE 30:FOR sys = USR "A" TO USR "D"+7:READ lives:POKE sys,lives:NEXT sys
30 DATA 0,7,31,63,63,127,127,127,0,224,248,252,252,254,254,254,127,127,127,63,63,31,7,0,254,254,254,252,252,248,224,0
40 BORDER 1:PAPER 1:INK 7:CLS:FOR sys = 0 TO 51:PRINT INK 2;PAPER 3;FLASH 1;"\:: \:: \:: \:: \:: \:: \::";:NEXT sys:PRINT AT 1,0;INK 0;PAPER 7;"M A S T E R T R O N I C Presents"'INK 4;PAPER 1;PRINT AT 6,5;"\::\::\b\a\b\a\::\b\b \a\a\b\a\b\a\::\b\a\{v1)\c\{v0)\a"'PRINT AT 7,5;"\::\::\::\::\::\::\::\::\::\{v1)\d\{v0)\::\::\::\::\::\::\::\::\::\::\::"'INK 7;PAPER 4;PRINT AT 8,5;"\::\::\b\a\b\a\::\b\b \a\a\b\a\b\a\::\b\a\{v1)\c\{v0)\a"'PRINT AT 9,5;"\::\..\d\: \ :\:: \''\::\{v0)\{v1)\d\{v0)\d\::\::\::\::\:: \::\::\::\::"'PRINT AT 10,5;"\::\{v1)\b\{v0)\b\: \ :\:: \..\::\::\b\::\c\d\::\::\::\::\::\{v1)\b\{v0)\::"'PRINT AT 11,5;"\d \c\c\d\c\::\d\d\{v1)\b\{v0)\::\c  \d\c \d\c \::"'PRINT AT 12,5;"                    \::"'PRINT AT 13,5;"\a\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\::\d"'INK 7;PAPER 1;PRINT AT 16,13;INK 1;PAPER 5;"BY Smiling Assassin"'PRINT AT 17,13;INK 1;PAPER 5;"\* MASTERTRONIC 1985"
50 PRINT AT 21,0;FLASH 1;PAPER 1;INK 5;"  +++PRESS ANY KEY TO PLAY+++   ":RESTORE 90:FOR sys = 1 TO 21:READ lives:READ sc:IF lives = 3 THEN PAUSE sc
60 IF INKEY$ <> "" THEN GOTO 250
70 IF lives <> 3 THEN BEEP lives / 110,sc:PAUSE 2
80 NEXT sys
90 DATA 3,6,40,20,20,15,40,20,20,15,15,20,15,15,15,20,15,24,50,27,3,5
100 DATA 40,25,20,22,40,25,20,22,15,25,15,22,15,19,15,22,50,15,3,5
110 RESTORE 130:FOR sys = 1 TO 113:READ lives:READ sc:IF INKEY$ <> "" THEN GOTO 250
120 BEEP 4 / 80,lives:BEEP 4 / 220,sc:PAUSE 4:NEXT sys
130 DATA 20,24,20,24,20,24,20,24,20,24,24,24,22,24,20,24,20,24,19,25,19,25,19,25,19,25,22,25,25,25,19,25
140 DATA 20,24,20,24,20,24,20,24,20,24,24,24,22,24,20,24,20,24,19,25,19,25,19,25,19,25,22,25,25,25,19,25
150 DATA 20,24,20,24,20,24,19,25,17,26,17,26,17,26,19,26,15,27,15,27,15,27,15,27,15,27,15,27,15,27,17,26,15,27,15,27,15,27,15,27,15,27,15,27,15,27,17,26
160 DATA 15,27,15,27,15,27,17,27,19,27,19,27,19,27,20,27,22,27,24,27,25,27,26,27,27,27,27,27,27,27,26,27,27,27,27,26,27,25,27,24,27,22,27,20,27,19,27,17,27,15,27,15,27,15,27,15,27,15,27,15,27,15,27
170 DATA 19,27,20,27,20,27,20,27,20,27,20,27,20,27,20,27
180 DATA 19,27,20,27,20,27,20,27,20,27,20,27,20,27,20,27
190 DATA 19,27,20,27,19,27,20,27,19,27,20,27,19,27,20,27,19,27,20,27
200 PAUSE 3:BEEP 5 / 10,24:PAUSE 5:BEEP 1 / 10,-4:BEEP 5 / 10,-4:POKE 60200,255:LET pos$ = "+++PRESS ANY KEY TO PLAY+++ GUIDE THE ROCKMAN AROUND THE CASTLE,HAMMERING DOWN AND PUSHING BLOCKS TO BRIDGE GAPS AND SQUASH THE VAMPACS.COLLECT THE MUSHROOMS IN THE 20 ROOMS TO DISCOVER THE PASSWORDS AND EXIT TO A NEW LEVEL  +++PRESS ANY KEY TO PLAY+++  ":LET t = 1:LET aa = 0
210 PRINT AT 21,0;INK 1;PAPER 5;pos$(t TO t+31):LET t = t+1:IF INKEY$ <> "" THEN GOTO 250
220 LET aa = aa+1:FOR sys = aa TO aa+3:BEEP 2 / 1000,sys:NEXT sys:IF aa > 16 THEN LET aa = 0
230 IF t = 223 THEN BORDER 1:GOTO 50
240 GOTO 210
250 LET bb = 6:POKE 39998,0:BORDER 0:PAPER 0:INK 7:CLS
260 CLS:PRINT AT 0,0;"         R O C K M A N                   \::\::\::\::\::\::\::\::\::\::\::\::\::"'PRINT AT 3,0;"    SELECT BY PRESSING A KEY"'PRINT AT 6,0;"1    KEMPSTON JOYSTICK          "'PRINT 'PRINT "2    CURSOR JOYSTICK            "'PRINT 'PRINT "3    SINCLAIR INTERFACE II      "'PRINT 'PRINT "4    KEYBOARD                  "'PRINT 'PRINT "5    DEFINE YOUR OWN KEYS       "'PRINT AT 16,0;"THEN PRESS '6' TO START THE GAME"'PRINT AT 20,0;" SPACE=PAUSE  Q=RESET  S=RESTART"
270 IF bb > 0 AND bb < 7 THEN PRINT AT (4+bb * 2),0;OVER 1;INK 1;PAPER 5;FLASH 1;"                                "
280 PAUSE 1:PAUSE 0:LET bb = CODE INKEY$-48:IF bb < 1 THEN GOTO 270
290 IF bb > 6 THEN GOTO 270
300 IF INKEY$ = "6" THEN RANDOMIZE USR 40000
310 FOR sys = 39990 TO 39999:POKE sys,0:NEXT sys:IF bb = 1 THEN POKE 39996,113:POKE 39997,32:POKE 39995,115:POKE 39998,99:GOTO 260
320 IF bb = 1 THEN FOR sys = 39990 TO 39994:POKE sys,0:NEXT sys
330 IF bb = 2 THEN POKE 39996,113:POKE 39997,32:POKE 39995,115:POKE 39990,55:POKE 39991,54:POKE 39992,53:POKE 39993,56:POKE 39994,48:GOTO 260
340 IF bb = 4 THEN POKE 39996,53:POKE 39997,32:POKE 39995,48:POKE 39990,113:POKE 39991,97:POKE 39992,111:POKE 39993,112:POKE 39994,109:GOTO 260
350 IF bb = 3 THEN POKE 39996,113:POKE 39997,32:POKE 39995,115:POKE 39990,57:POKE 39991,56:POKE 39992,54:POKE 39993,55:POKE 39994,48:GOTO 260
360 IF bb = 5 THEN INK 7:CLS:PAPER 0:CLS:PRINT AT 0,5;"UP      ";:PAUSE 1:PAUSE 0
370 PRINT INKEY$:POKE 39990,CODE INKEY$
380 PRINT AT 2,5;"DOWN    ";:PAUSE 1:PAUSE 0:IF CODE INKEY$ <> PEEK 39990 THEN GOTO 400
390 GOTO 380
400 PRINT INKEY$:POKE 39991,CODE INKEY$
410 PRINT AT 4,5;"LEFT    ";:PAUSE 1:PAUSE 0:IF CODE INKEY$ <> PEEK 39990 AND CODE INKEY$ <> PEEK 39991 THEN GOTO 430
420 GOTO 410
430 PRINT INKEY$:POKE 39992,CODE INKEY$
440 PRINT AT 6,5;"RIGHT   ";:PAUSE 1:PAUSE 0:IF CODE INKEY$ <> PEEK 39990 AND CODE INKEY$ <> PEEK 39991 AND CODE INKEY$ <> PEEK 39992 THEN GOTO 460
450 GOTO 440
460 PRINT INKEY$:POKE 39993,CODE INKEY$
470 PRINT AT 8,5;"DIG     ";:PAUSE 1:PAUSE 0:IF CODE INKEY$ <> PEEK 39990 AND CODE INKEY$ <> PEEK 39991 AND CODE INKEY$ <> PEEK 39992 AND CODE INKEY$ <> PEEK 39993 THEN GOTO 490
480 GOTO 470
490 PRINT INKEY$:POKE 39994,CODE INKEY$
500 PRINT AT 10,5;"PAUSE   ";:PAUSE 1:PAUSE 0:IF CODE INKEY$ <> PEEK 39990 AND CODE INKEY$ <> PEEK 39991 AND CODE INKEY$ <> PEEK 39992 AND CODE INKEY$ <> PEEK 39993 AND CODE INKEY$ <> PEEK 39994 THEN GOTO 520
510 GOTO 500
520 PRINT INKEY$:POKE 39997,CODE INKEY$
530 PRINT AT 12,5;"RESET   ";:PAUSE 1:PAUSE 0:IF CODE INKEY$ <> PEEK 39990 AND CODE INKEY$ <> PEEK 39991 AND CODE INKEY$ <> PEEK 39992 AND CODE INKEY$ <> PEEK 39993 AND CODE INKEY$ <> PEEK 39994 AND CODE INKEY$ <> PEEK 39997 THEN GOTO 550
540 GOTO 530
550 PRINT INKEY$:POKE 39996,CODE INKEY$
560 PRINT AT 14,5;"RESTART ";:PAUSE 1:PAUSE 0:IF CODE INKEY$ <> PEEK 39990 AND CODE INKEY$ <> PEEK 39991 AND CODE INKEY$ <> PEEK 39992 AND CODE INKEY$ <> PEEK 39993 AND CODE INKEY$ <> PEEK 39994 AND CODE INKEY$ <> PEEK 39997 AND CODE INKEY$ <> PEEK 39996 THEN GOTO 580
570 GOTO 560
580 PRINT INKEY$:POKE 39995,CODE INKEY$:GOTO 260
REM ***
REM Program found at 40000
REM ***
10 REM #0
20 POKE 32505,0:LET sys = 0:LET lives = 5:LET sc = 0:LET pos = 1:LET t = 300:CLS:PRINT AT 10,0;"PLEASE INPUT CODE FOR REQUIRED  ZONE OR PRESS SPACE TO START ":PAUSE 1:PAUSE 0:LET aa = CODE INKEY$:PRINT INKEY$;:IF aa = 32 THEN GOTO 70
30 PAUSE 0:LET bb = CODE INKEY$:PRINT INKEY$;:PAUSE 0:LET cc = CODE INKEY$:PRINT INKEY$;:PAUSE 0:LET dd = CODE INKEY$:PRINT INKEY$;:IF (((aa+bb)+cc)+dd) = 462 THEN LET pos = 5
40 IF (((aa+bb)+cc)+dd) = 451 THEN LET pos = 9
50 IF (((aa+bb)+cc)+dd) = 416 THEN LET pos = 13
60 IF (((aa+bb)+cc)+dd) = 423 THEN LET pos = 17
70 LET mu1 = 0:GOSUB 1270:LET x = 0:LET q = 0:LET wa = 0:LET dir = 2:LET dira = 0:LET dirc = 0:LET roc = 0:LET rx = 21:LET ry = 31:GOSUB 1090:GOSUB 1250:GOSUB 1260:LET ix = 30000:LET x = y+1:LET q = iy:LET a1 = ia+1:LET b1 = ib:LET c1 = ic+1:LET d1 = id:FOR data = USR "I" TO USR "L"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:FOR v = 0 TO 29:LET a = 30-v:POKE 30627,a:POKE 30633,11:POKE 30641,a:PRINT AT y,iy;INK 5;OVER 1;PAPER 0;"\i\j";AT (y+1),iy;"\k\l":RANDOMIZE USR 30626:NEXT v:PRINT AT y,iy;INK 7;PAPER 0;"  ";AT (y+1),iy;"  "
80 LET wa = 0:LET pp = 0:IF (ATTR((x+1),q)) = 2 AND (ATTR((x+2),q)) = 71 THEN LET mu1 = mu1+1:LET sc = sc+100:BEEP 1 / 50,50:PRINT AT (x+1),q;INK 7;PAPER 0;"  ";AT (x+2),q;"  "
90 IF dir = 2 AND (ATTR(x,q+2)) = 71 AND (ATTR((x-1),q+2)) = 2 THEN LET mu1 = mu1+1:BEEP 1 / 50,50:LET sc = sc+100:PRINT AT (x-1),q+2;INK 7;PAPER 0;"  ";AT x,q+2;"  "
100 IF dir = 4 AND (ATTR(x,q-2)) = 71 AND (ATTR((x-1),q-2)) = 2 THEN LET mu1 = mu1+1:BEEP 1 / 50,50:LET sc = sc+100:PRINT AT (x-1),q-2;INK 7;PAPER 0;"  ";AT x,q-2;"  "
110 IF PEEK 39998 <> 99 THEN GOTO 270
120 IF IN 31 <> 1 AND IN 31 <> 2 AND IN 31 <> 4 AND IN 31 <> 8 AND IN 31 <> 16 THEN GOTO 390
130 IF IN 31 = 1 AND dir = 2 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q+2)) = 7 AND q < 30 THEN LET wa = 1
140 IF IN 31 = 1 AND dir = 2 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q+2)) = 23 AND q < 30 THEN LET wa = 1
150 IF IN 31 = 1 AND dir = 2 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q+2)) = dig AND (ATTR(x,q+4)) = 7 AND q < 28 THEN LET wa = 0:LET roc = 2:LET rx = x:LET ry = q+2
160 IF IN 31 = 2 AND dir = 4 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q-2)) = 7 AND q > 0 THEN LET wa = 1
170 IF IN 31 <> 1 AND IN 31 <> 2 AND IN 31 <> 4 AND IN 31 <> 8 AND IN 31 <> 16 THEN GOTO 390
180 IF IN 31 = 2 AND dir = 4 AND (ATTR((x+1),q)) <> 7 AND q > 0 AND (ATTR(x,q-2)) = 23 THEN LET wa = 1
190 IF IN 31 = 2 AND dir = 4 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q-2)) = dig AND (ATTR(x,q-4)) = 7 AND q > 2 THEN LET wa = 0:LET roc = 4:LET rx = x:LET ry = q-2
200 IF IN 31 = 8 AND (ATTR((x-2),q)) = 23 AND x > 1 THEN LET dir = 1:LET wa = 1
210 IF IN 31 = 4 AND (ATTR((x+1),q)) = 23 THEN LET dir = 3:LET wa = 1
220 IF IN 31 = 2 AND dir <> 4 AND dir <> 5 THEN LET dir = 4:LET wa = 0
230 IF IN 31 = 1 AND dir <> 2 AND dir <> 5 THEN LET dir = 2:LET wa = 0
240 IF IN 31 = 16 AND dir = 2 AND (ATTR(x,q+2)) = 7 AND (ATTR((x+1),q+2)) = dig THEN LET ix = 30320:FOR data = USR "I" TO USR "P"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:PRINT AT x,q+2;INK 5;"\k\l";AT (x-1),q+2;"\i\j":PAUSE 1:PAUSE 1:PRINT AT x,q+2;INK 5;"\o\p";AT (x-1),q+2;"\m\n":RANDOMIZE USR 32500:PRINT AT (x-1),q+2;INK 7;PAPER 0;"  ";AT x,q+2;"  ":LET pp = 1
250 IF IN 31 = 16 AND dir = 4 AND (ATTR(x,q-2)) = 7 AND (ATTR((x+1),q-2)) = dig THEN LET ix = 30256:FOR data = USR "I" TO USR "P"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:PRINT AT x,q-2;INK 5;"\k\l";AT (x-1),q-2;"\i\j":PAUSE 1:PAUSE 1:PRINT AT x,q-2;INK 5;"\o\p";AT (x-1),q-2;"\m\n":RANDOMIZE USR 32500:NEXT data:PRINT AT (x-1),q-2;INK 7;PAPER 0;"  ";AT x,q-2;"  ":LET pp = 1
260 GOTO 390
270 IF CODE INKEY$ = PEEK 39993 AND dir = 2 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q+2)) = 7 AND q < 30 THEN LET wa = 1
280 IF CODE INKEY$ = PEEK 39993 AND dir = 2 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q+2)) = 23 AND q < 30 THEN LET wa = 1
290 IF CODE INKEY$ = PEEK 39993 AND dir = 2 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q+2)) = dig AND (ATTR(x,q+4)) = 7 AND q < 28 THEN LET wa = 0:LET roc = 2:LET rx = x:LET ry = q+2
300 IF CODE INKEY$ = PEEK 39992 AND dir = 4 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q-2)) = 7 AND q > 0 THEN LET wa = 1
310 IF CODE INKEY$ = PEEK 39992 AND dir = 4 AND (ATTR((x+1),q)) <> 7 AND q > 0 AND (ATTR(x,q-2)) = 23 THEN LET wa = 1
320 IF CODE INKEY$ = PEEK 39992 AND dir = 4 AND (ATTR((x+1),q)) <> 7 AND (ATTR(x,q-2)) = dig AND (ATTR(x,q-4)) = 7 AND q > 2 THEN LET wa = 0:LET roc = 4:LET rx = x:LET ry = q-2
330 IF CODE INKEY$ = PEEK 39990 AND (ATTR((x-2),q)) = 23 AND x > 1 THEN LET dir = 1:LET wa = 1
340 IF CODE INKEY$ = PEEK 39991 AND (ATTR((x+1),q)) = 23 THEN LET dir = 3:LET wa = 1
350 IF CODE INKEY$ = PEEK 39992 AND dir <> 4 AND dir <> 5 THEN LET dir = 4:LET wa = 0
360 IF CODE INKEY$ = PEEK 39993 AND dir <> 2 AND dir <> 5 THEN LET dir = 2:LET wa = 0
370 POKE 32507,1:IF CODE INKEY$ = PEEK 39994 AND dir = 2 AND (ATTR(x,q+2)) = 7 AND (ATTR((x+1),q+2)) = dig THEN LET ix = 30320:FOR data = USR "I" TO USR "P"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:PRINT AT x,q+2;INK 5;"\k\l";AT (x-1),q+2;"\i\j":PAUSE 1:PAUSE 1:PRINT AT x,q+2;INK 5;"\o\p";AT (x-1),q+2;"\m\n":RANDOMIZE USR 32500:PRINT AT (x-1),q+2;INK 7;PAPER 0;"  ";AT x,q+2;"  ":LET pp = 1
380 IF CODE INKEY$ = PEEK 39994 AND dir = 4 AND (ATTR(x,q-2)) = 7 AND (ATTR((x+1),q-2)) = dig THEN LET ix = 30256:FOR data = USR "I" TO USR "P"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:PRINT AT x,q-2;INK 5;"\k\l";AT (x-1),q-2;"\i\j":PAUSE 1:PAUSE 1:PRINT AT x,q-2;INK 5;"\o\p";AT (x-1),q-2;"\m\n":RANDOMIZE USR 32500:NEXT data:PRINT AT (x-1),q-2;INK 7;PAPER 0;"  ";AT x,q-2;"  ":LET pp = 1
390 LET sys = sys+1:IF sys > 3 THEN LET sys = 0
400 IF ATTR(a1,b1) = dig THEN LET roc = 0:GOSUB 1250
410 IF ATTR(c1,d1) = dig THEN LET roc = 0:GOSUB 1260
420 IF t <= 0 THEN GOTO 1350
430 POKE 32507,0:IF pp = 1 AND dir = 2 AND (ATTR((x+3),q+2)) <> 7 THEN PRINT AT (x+1),q+2;INK 7;PAPER 0;"\\/";AT (x+2),q+2;"/\\":BEEP 1 / 100,40:PRINT AT (x+1),q+2;INK 7;PAPER 0;"  ";AT (x+2),q+2;"  "
440 IF pp = 1 AND dir = 4 AND (ATTR((x+3),q-2)) <> 7 THEN PRINT AT (x+1),q-2;INK 7;PAPER 0;"\\/";AT (x+2),q-2;"/\\":BEEP 1 / 100,40:PRINT AT (x+1),q-2;INK 7;PAPER 0;"  ";AT (x+2),q-2;"  "
450 IF pp = 1 AND dir = 2 AND (ATTR((x+3),q+2)) = 7 THEN LET rx = x+4:LET ry = q+2:LET roc = 3
460 IF pp = 1 AND dir = 4 AND (ATTR((x+3),q-2)) = 7 THEN LET rx = x+4:LET ry = q-2:LET roc = 3
470 IF (ATTR((x+1),q)) = 7 THEN LET dir = 5:LET wa = 1
480 IF dir = 5 AND (ATTR((x+1),q)) <> 7 THEN LET dir = 0:LET wa = 0
490 IF dir = 0 THEN LET ix = 30192
500 IF roc = 0 THEN LET rx = 21:LET ry = 31
510 IF dir = 5 THEN LET ix = 30128
520 IF dir = 1 THEN LET ix = 30192
530 IF dir = 3 THEN LET ix = 30192
540 IF dir = 2 THEN LET ix = 30000
550 IF dir = 4 THEN LET ix = 30064
560 FOR data = USR "I" TO USR "P"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:IF roc <> 2 AND roc <> 4 AND roc <> 3 THEN LET roc = 0
570 IF roc = 3 AND rx < 21 THEN PRINT AT (rx-3),ry;INK 7;"  ";INK dig;AT (rx-2),ry;"\q\r";AT (rx-1),ry;"\s\t"'PRINT AT (rx-2),ry;INK 7;"  ";INK dig;AT (rx-1),ry;"\q\r";AT rx,ry;"\s\t":BEEP 1 / 150,rx
580 IF roc = 2 THEN PRINT AT (rx-1),ry;INK 7;" ";INK dig;"\q\r";AT rx,ry;INK 7;" ";INK dig;"\s\t"'PRINT AT (rx-1),ry+1;INK 7;" ";INK dig;"\q\r";AT rx,ry+1;INK 7;" ";INK dig;"\s\t":BEEP 1 / 100,ry:LET rx = rx:LET ry = ry+2
590 IF roc = 4 THEN PRINT AT (rx-1),ry-1;INK dig;"\q\r";INK 7;" ";AT rx,ry-1;INK dig;"\s\t";INK 7;" "'PRINT AT (rx-1),ry-2;INK dig;"\q\r";INK 7;" ";AT rx,ry-2;INK dig;"\s\t";INK 7;" ":BEEP 1 / 100,ry:LET rx = rx:LET ry = ry-2
600 LET roc = 0:IF (ATTR((rx+1),ry)) = 7 THEN LET roc = 3:LET rx = rx+2
610 LET dirc = 0:LET dira = 0:LET st = RND:LET ar = RND:IF ATTR(a1,b1) = dig THEN LET roc = 0:GOSUB 1250
620 IF ATTR(c1,d1) = dig THEN LET roc = 0:GOSUB 1260
630 IF sys = 3 THEN PRINT AT (a1-1),b1;INK 7;PAPER 8;"  ";AT a1,b1;"  ";AT c1,d1;"  ";AT (c1-1),d1;"  "
640 IF t <= 0 THEN GOTO 1350
650 IF sys = 3 AND q > b1 AND (ATTR(a1,b1+2)) <> dig AND (ATTR(a1,b1+2)) <> 71 AND (ATTR(a1,b1+2)) <> (br * 8)+brp AND b1 < 30 THEN LET dira = 2
660 IF sys = 3 AND q < b1 AND (ATTR(a1,b1-2)) <> dig AND (ATTR(a1,b1-2)) <> 71 AND (ATTR(a1,b1-2)) <> (br * 8)+brp AND b1 > 0 THEN LET dira = 4
670 IF sys = 3 AND st < 17000 AND (ATTR((a1-2),b1)) <> dig AND (ATTR((a1-2),b1)) <> 71 AND (ATTR((a1-2),b1)) <> (br * 8)+brp AND a1 > 1 THEN LET dira = 1
680 IF sys = 3 AND st > 17000 AND (ATTR((a1+2),b1)) <> dig AND (ATTR((a1+2),b1)) <> 71 AND (ATTR((a1+2),b1)) <> (br * 8)+brp AND a1 < 19 THEN LET dira = 3
690 IF sys = 3 AND q > d1 AND (ATTR(c1,d1+2)) <> dig AND (ATTR(c1,d1+2)) <> 71 AND (ATTR(c1,d1+2)) <> (br * 8)+brp AND d1 < 30 THEN LET dirc = 2
700 IF sys = 3 AND q < d1 AND (ATTR(c1,d1-2)) <> dig AND (ATTR(c1,d1-2)) <> 71 AND (ATTR(c1,d1-2)) <> (br * 8)+brp AND d1 > 0 THEN LET dirc = 4
710 IF sys = 3 AND ar > 17000 AND (ATTR((c1-2),d1)) <> dig AND (ATTR((c1-2),d1)) <> 71 AND (ATTR((c1-2),d1)) <> (br * 8)+brp AND c1 > 1 THEN LET dirc = 1
720 IF sys = 3 AND ar < 17000 AND (ATTR((c1+2),d1)) <> dig AND (ATTR((c1+2),d1)) <> 71 AND (ATTR((c1+2),d1)) <> (br * 8)+brp AND c1 < 19 THEN LET dirc = 3
730 PRINT AT 21,10;sc:IF mu1 = bri THEN GOTO 1290
740 PRINT AT 21,2;INK 5;" ";t;" ":IF t <= 10 THEN BEEP 9 / 999,t
750 FOR data = 0 TO 1:PRINT AT (x-1),q;INK 7;PAPER 8;"\m\n";AT x,q;INK 7;PAPER 8;"\o\p":IF dir = 2 AND wa = 1 THEN LET q = q+1
760 IF dir = 4 AND wa = 1 THEN LET q = q-1
770 IF dir = 1 AND wa = 1 THEN LET x = x-1
780 IF dir = 3 AND wa = 1 THEN LET x = x+1
790 IF dir = 5 THEN LET x = x+1
800 IF dira = 2 THEN LET b1 = b1+1
810 IF dira = 4 THEN LET b1 = b1-1
820 IF dira = 1 THEN LET a1 = a1-1
830 IF dira = 3 THEN LET a1 = a1+1
840 IF dirc = 3 THEN LET c1 = c1+1
850 IF dirc = 2 THEN LET d1 = d1+1
860 IF dirc = 4 THEN LET d1 = d1-1
870 IF dirc = 1 THEN LET c1 = c1-1
880 IF sys = 3 AND data = 1 THEN PRINT AT (a1-1),b1;INK 7;PAPER 8;"\a\b";AT a1,b1;"\c\d";AT (c1-1),d1;"\e\f";AT c1,d1;"\g\h"
890 IF sys = 0 AND data = 1 THEN PRINT AT (a1-1),b1;INK 7;PAPER 8;"\e\f";AT a1,b1;"\g\h";AT (c1-1),d1;"\a\b";AT c1,d1;"\c\d"
900 IF data = 0 AND dir <> 1 AND dir <> 3 AND dir <> 5 AND wa = 1 THEN RANDOMIZE USR 32500:GOTO 920
910 IF data = 0 AND dir <> 1 AND dir <> 3 AND dir <> 5 AND wa = 1 THEN RANDOMIZE USR 32500:GOTO 920
920 PAUSE 1:PAUSE 1:IF dir = 2 AND wa = 1 THEN PRINT AT (x-1),q-1;INK 7;PAPER 8;" ";PAPER 8;"\i";PAPER 8;"\j";AT x,q-1;PAPER 8;" ";PAPER 8;"\k";PAPER 8;"\l"
930 IF dir = 4 AND wa = 1 THEN PRINT AT (x-1),q;INK 7;PAPER 8;"\i";PAPER 8;"\j";PAPER 8;" ";AT x,q;PAPER 8;"\k";PAPER 8;"\l";PAPER 8;" "
940 IF dir = 1 AND wa = 1 THEN PRINT AT (x+1),q;INK 7;PAPER 8;"  ";AT (x-1),q;PAPER 8;"\i\j";AT x,q;"\k\l"
950 IF dir = 3 AND wa = 1 THEN PRINT AT (x-2),q;INK 7;PAPER 8;"  ";AT (x-1),q;PAPER 8;"\i\j";AT x,q;"\k\l"
960 IF dir = 5 THEN PRINT AT (x-2),q;INK 7;PAPER 8;"  ";AT (x-1),q;PAPER 8;"\i\j";AT x,q;"\k\l"
970 IF dir = 1 AND wa = 1 THEN LET mush = 30-x:BEEP 1 / 200,mush
980 IF dir = 3 AND wa = 1 THEN LET mush = 30-x:BEEP 1 / 200,mush
990 IF dir = 5 THEN LET mush = 30-x:BEEP 1 / 200,mush
1000 IF sys = 0 AND data = 0 THEN LET t = t-1
1010 IF t <= 0 THEN GOTO 1350
1020 IF (ATTR((x+1),q)) = 71 THEN GOTO 1350
1030 IF a1 = x AND b1 = q THEN GOTO 1350
1040 IF c1 = x AND d1 = q THEN GOTO 1350
1050 IF CODE INKEY$ = PEEK 39997 THEN BEEP 2 / 10,0:PAUSE 1:PAUSE 0
1060 IF CODE INKEY$ = PEEK 39996 THEN LET a1 = ia+1:LET b1 = ib:LET c1 = ic+1:LET d1 = id:GOTO 70
1070 IF CODE INKEY$ = PEEK 39995 THEN RANDOMIZE USR 34000
1080 NEXT data:GOTO 80
1090 LET ix = 30384:FOR data = USR "A" TO USR "P"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:LET ix = 25000+(pos-1) * 250:LET bri = PEEK ix:LET brp = PEEK ix+1:LET br = PEEK ix+2:LET dig = PEEK ix+3:LET qq = PEEK ix+4:BORDER qq:LET ia = PEEK ix+5:LET ib = PEEK ix+6:LET ic = PEEK ix+7:LET id = PEEK ix+8:LET y = PEEK ix+9:LET iy = PEEK ix+10:LET ix = ix+11:FOR data = 0 TO 19:PRINT AT data,0;INK 7;PAPER 0;"                                ":NEXT data:FOR data = 1 TO 50:LET z = PEEK ix:IF z = 1 THEN LET b = PEEK ix+1:LET c = PEEK ix+2:LET w = PEEK ix+3:LET ix = ix+4
1100 IF z = 1 THEN PRINT AT b,c;INK dig;PAPER 0;"\a\b";AT (b+1),c;"\c\d":LET c = c+2:IF c < w THEN GOTO 1100
1110 IF z = 2 THEN LET b = PEEK ix+1:LET c = PEEK ix+2:LET w = PEEK ix+3:LET ix = ix+4
1120 IF z = 2 THEN PRINT AT b,c;INK dig;PAPER 0;"\a\b";AT (b+1),c;"\c\d":LET b = b+2:IF b < w THEN GOTO 1120
1130 IF z = 3 THEN LET b = PEEK ix+1:LET c = PEEK ix+2:LET w = PEEK ix+3:LET ix = ix+4
1140 IF z = 3 THEN PRINT AT b,c;INK brp;PAPER br;"\e\f";AT (b+1),c;"\g\h":LET c = c+2:IF c < w THEN GOTO 1140
1150 IF z = 4 THEN LET b = PEEK ix+1:LET c = PEEK ix+2:LET w = PEEK ix+3:LET ix = ix+4
1160 IF z = 4 THEN PRINT AT b,c;INK brp;PAPER br;"\e\f";AT (b+1),c;"\g\h":LET b = b+2:IF b < w THEN GOTO 1160
1170 IF z = 5 THEN LET b = PEEK ix+1:LET c = PEEK ix+2:LET ix = ix+3
1180 IF z = 5 THEN PRINT AT b,c;INK 2;BRIGHT 0;"\m\n";AT (b+1),c;INK 7;BRIGHT 1;"\o\p"
1190 IF z = 6 THEN LET b = PEEK ix+1:LET c = PEEK ix+2:LET w = PEEK ix+3:LET ix = ix+4
1200 IF z = 6 THEN PRINT AT b,c;INK 7;BRIGHT 1;PAPER 0;"\i\j";AT (b+1),c;"\k\l":LET c = c+2:IF c < w THEN GOTO 1200
1210 IF z = 7 THEN LET b = PEEK ix+1:LET c = PEEK ix+2:LET w = PEEK ix+3:LET ix = ix+4
1220 IF z = 7 THEN PRINT AT b,c;INK 7;BRIGHT 0;PAPER 2;"  ";AT (b+1),c;"  ":LET b = b+2:IF b < w THEN GOTO 1220
1230 IF z = 0 THEN LET data = 0:GOTO 1240
1240 NEXT data:LET ix = 30384:FOR data = USR "Q" TO USR "T"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:RETURN
1250 LET a1 = ia+1:LET b1 = ib:PRINT AT ia,ib;INK 7;PAPER 0;"  ";AT (ia+1),ib;"  ":POKE 30627,6:POKE 30633,50:POKE 30641,9:RANDOMIZE USR 30626:LET ix = 30512:FOR data = USR "A" TO USR "H"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:RETURN
1260 LET c1 = ic+1:LET d1 = id:PRINT AT ic,id;INK 7;PAPER 0;"  ";AT (ic+1),id;"  ":POKE 30627,6:POKE 30633,50:POKE 30641,9:RANDOMIZE USR 30626:LET ix = 30512:FOR data = USR "A" TO USR "H"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:RETURN
1270 BORDER 0:PAPER 0:INK 7:CLS:LET ix = 30576:FOR data = USR "A" TO USR "A"+7:POKE data,PEEK ix:LET ix = ix+1:NEXT data:PRINT AT 20,0;PAPER 1;INK 7;BRIGHT 1;"  TIME:   SCORE  SCREEN  LIVES  ";AT 21,19;INK 4;PAPER 0;CHR$pos+64:IF lives > 0 THEN PRINT AT 21,27;INK 7;BRIGHT 1;lives
1280 RETURN
1290 FOR data = 0 TO t:LET t = t-1:LET sc = sc+1:PRINT AT 21,2;INK 5;" ";t+1;" "'PRINT AT 21,10;sc:POKE 30627,3:POKE 30633,5:POKE 30641,(t+1) / 12 / 10:RANDOMIZE USR 30626:NEXT data:LET pos = pos+1:IF pos = 21 THEN LET sc = sc+1000:LET t = 300:LET pos = 1:GOTO 70
1300 IF pos = 5 THEN PRINT AT 10,5;"'E' CODE ";PAPER 2;FLASH 1;"'onyx'"
1310 IF pos = 9 THEN PRINT AT 10,5;"'I' CODE ";PAPER 2;FLASH 1;"'guru'"
1320 IF pos = 13 THEN PRINT AT 10,5;"'M' CODE ";INK 7;FLASH 1;"'sage'"
1330 IF pos = 17 THEN PRINT AT 10,5;"'Q' CODE ";FLASH 1;PAPER 2;INK 7;"'claw'"
1340 PAUSE 1:PAUSE 0:LET t = 300:GOTO 70
1350 POKE 30627,28:POKE 30633,21:POKE 30641,15:PRINT AT (x-1),q;INK 7;PAPER 0;BRIGHT 1;"\\/";AT x,q;"/\\";:RANDOMIZE USR 32500:LET x = x-1:IF x > 1 THEN GOTO 1360
1360 RANDOMIZE USR 30626:LET lives = lives-1:IF lives > 0 THEN LET t = 300:GOTO 70
1370 PRINT AT 18,0;INK 7;"          GAME OVER                PRESS 'S' TO RE-ENTER MENU   "
1380 FOR data = 1 TO 90:LET qq = 90-data:POKE 30627,5:POKE 30633,10:POKE 30641,data:RANDOMIZE USR 30626:NEXT data:IF INKEY$ = "s" THEN GOTO 1400
1390 GOTO 1380
1400 RANDOMIZE USR 34000
Slippery Sid is compiled using the Softek compiler, but I never got around to decompiling that one...

Bonus points for people to see the "real" MCoder III inside Tycoon (involves crosswords). They've tried to cripple it, but if you POKE 60000,42 then RANDOMIZE USR 60000 you should see something. :D
User avatar
luny
Manic Miner
Posts: 222
Joined: Wed Apr 20, 2022 8:25 am
Contact:

Re: Games Exposed

Post by luny »

As I said before, some great suggestions.

Personally from that list I'd like to have a got at:

Dargontorc (As Morkin has already done the hard work on Avalon)
For the data
Brian Bloodaxe
Fireload

For the technical know how
Zynaps
Green Beret

and just because it is an old one which tends have interesting coding styles

Worst Things Happen At Sea.

Starquake has already been exposed for its data http://www.icemark.com/dataformats/starquake/index.html
but it might be interesting to see the code.
I code to live (Job) and I live to code (Retro). One of them has to give!
User avatar
Manu128k
Dizzy
Posts: 83
Joined: Tue Aug 13, 2019 9:45 pm
Location: Spain
Contact:

Re: Games Exposed

Post by Manu128k »

I would like to see Emlyn Hughes inner workings. It amazes me how well they modelled a football match.
User avatar
Turtle_Quality
Manic Miner
Posts: 508
Joined: Fri Dec 07, 2018 10:19 pm

Re: Games Exposed

Post by Turtle_Quality »

Morkin wrote: Mon May 09, 2022 1:57 pm
spider wrote: Sun May 08, 2022 12:47 pm Penetrator
That one was my first attempt at a Skoolkit disassembly...

Image

....
That would be interesting, I saw in an interview with a developer for Beam software that said they wrote Penetrator in such a way that each route in the main loop took the same number of T states. I couldn't really see why as it's not doing anything particularly fancy with colour or sound, maybe they didn't want to use Interrupts to sync the display.
Anyway it could mean there's a fair amount of apparently pointless instructions
Definition of loop : see loop
User avatar
zxbruno
Manic Miner
Posts: 214
Joined: Sun Mar 04, 2018 6:13 am

Re: Games Exposed

Post by zxbruno »

SteveSmith wrote: Tue May 10, 2022 1:20 pm
Morkin wrote: Wed May 04, 2022 11:35 am Yeah, those are good choices. I'd definitely love to see a disassembly of Chaos - for some reason I might have thought someone would've done it by now.
I'm sure I remember reading about a Chaos disassembly, but it might have been years ago on c.s.s. IIRC, they discovered some unused spells and creatures. I'll see if I can find it.

Edit: Found it, from 1996:
https://groups.google.com/g/comp.sys.si ... xcYU?pli=1
I wonder if John Elliott knows about this. I remember he used to be the one who mentioned Chaos the most in the WOS forums. I still remember his website: https://www.seasip.info/
User avatar
Pobulous
Dynamite Dan
Posts: 1393
Joined: Wed Nov 15, 2017 12:51 pm

Re: Games Exposed

Post by Pobulous »

spider wrote: Tue May 10, 2022 10:31 am
Cosmium wrote: Tue May 10, 2022 2:47 am I think Slippery Sid was actually a BASIC compiled game, though it still might be interesting to see how the compiler went about its business and how efficient/inefficient the code it produced was!
It did give that impression to me too, the way the collision check was only attribute based (iirc) although I did not see from a cursory glance at the code any compiler attributions.
It's harder to tell with 16K games, but it says SOFTEK at #6392, so it certainly looks like it.
highrise
Manic Miner
Posts: 322
Joined: Fri Mar 20, 2020 11:29 pm

Re: Games Exposed

Post by highrise »

following your great work with TNN and Dun Darach it would be great to see you take on Marsport, to see how the engine evolved.
User avatar
luny
Manic Miner
Posts: 222
Joined: Wed Apr 20, 2022 8:25 am
Contact:

Re: Games Exposed

Post by luny »

It's always been on the 'to do' list. It would be great to see the differences. I bet there are quite a few improvements.

Time and work as usual gets in the way of great plans. If you know of a way to raise £350k, I can leave work and get on with the more important retro projects. ;)
I code to live (Job) and I live to code (Retro). One of them has to give!
User avatar
spider
Dynamite Dan
Posts: 1106
Joined: Wed May 01, 2019 10:59 am
Location: Derby, UK
Contact:

Re: Games Exposed

Post by spider »

Pobulous wrote: Tue May 17, 2022 9:13 am It's harder to tell with 16K games, but it says SOFTEK at #6392, so it certainly looks like it.
Thanks. :) Yes it gave the 'feel' of compiled Basic but I must of missed that. Its not a bad little game all in all, I still like it.
luny wrote: Tue May 17, 2022 10:13 am It's always been on the 'to do' list. It would be great to see the differences. I bet there are quite a few improvements.

Time and work as usual gets in the way of great plans. If you know of a way to raise £350k, I can leave work and get on with the more important retro projects. ;)
I'm sure its appreciated. :D

350K ? hmm ;) Aside from a quick RND routine to pick some lotto numbers no :(
highrise
Manic Miner
Posts: 322
Joined: Fri Mar 20, 2020 11:29 pm

Re: Games Exposed

Post by highrise »

regarding Marsport, are the original authors still on the scene? it would be interesting to know more about the unmade sequels.
User avatar
luny
Manic Miner
Posts: 222
Joined: Wed Apr 20, 2022 8:25 am
Contact:

Re: Games Exposed

Post by luny »

highrise wrote: Tue May 17, 2022 4:19 pm regarding Marsport, are the original authors still on the scene? it would be interesting to know more about the unmade sequels.
No they went into IT.
I code to live (Job) and I live to code (Retro). One of them has to give!
User avatar
Morkin
Bugaboo
Posts: 3290
Joined: Mon Nov 13, 2017 8:50 am
Location: Bristol, UK

Re: Games Exposed

Post by Morkin »

Turtle_Quality wrote: Mon May 16, 2022 10:04 pm That would be interesting, I saw in an interview with a developer for Beam software that said they wrote Penetrator in such a way that each route in the main loop took the same number of T states. I couldn't really see why as it's not doing anything particularly fancy with colour or sound, maybe they didn't want to use Interrupts to sync the display.
Anyway it could mean there's a fair amount of apparently pointless instructions
I didn't get anywhere near far enough with the main routine to check but I recall finding at least one routine that at first glance seemed to be 'padded' like that - e.g. so each fork of a condition would take roughly the same time. Though it was a bit advanced for my simplistic z80 skillz at the time.

I suppose as the player can create their own maps, landscapes can have floor and/or roof sections, different numbers of missiles, radars or laser shots at any height on screen, all of which are animated, so it might've been tricky to use interrupts. And of course we're talking about a 1982 game here.

There's definitely some noticeable speed difference if you compare the start, flat section in the game with some of the cavern sections, but on the whole I think the game keeps its pace quite nicely throughout.
My Speccy site: thirdharmoniser.com
User avatar
luny
Manic Miner
Posts: 222
Joined: Wed Apr 20, 2022 8:25 am
Contact:

Re: Games Exposed

Post by luny »

In order to complete 'my set', I have decide to take a look at Marsport in order to see how the code progressed from Dun Darach.
Yesterday I went through the memory looking for all the text. This has led to finding some of the routines, including the basic print routines and the saved / load routines used in the game. My first draft can be found at http://luny.co.uk/gargoyle/marsport/.

The next step is fairly easy and that is to find all the bitmaps and expand on those.
I code to live (Job) and I live to code (Retro). One of them has to give!
User avatar
druellan
Dynamite Dan
Posts: 1476
Joined: Tue Apr 03, 2018 7:19 pm

Re: Games Exposed

Post by druellan »

I love to see the disassemblies, I usually learn curious things about the code and the author, and to learn a little detail you didn't know about a game you played for so long, make my day.

If I could peek a title to work in, might be Xcel https://spectrumcomputing.co.uk/entry/5 ... ctrum/Xcel I was always curious about this title and how technically precise it feels.
Post Reply