LaDDDer ZX (Sinclair ZX Spectrum) by Marco's Retrobits
A downloadable game
LADDDER - ZX Spectrum - EXTREM-256
BASIC 10 Liner videogame for the Sinclair ZX Spectrum (also available for the Commodore 64)
by Marco's Retrobits (Marco Varesio) https://retrobits.itch.io/
Laddder homepage (download/play online): https://retrobits.itch.io/lader3d
YouTube video:
English language blog: https://retrobits.altervista.org/
Italian language blog: https://somebitsofme.altervista.org
Please refer to the attached laddder.pdf file for full documentation and source code explanation.
Laddder is, as the name implies, the... er... "3D" sequel to the Lader (https://retrobits.itch.io/lader) platformer.
It's a pseudo-3D game for the Sinclair ZX Spectrum and Commodore 64 home computers, inspired by the classics 3D Monster Maze (Sinclair ZX81) and Treasure Hunt (PC/DOS).
Oddly, there are no ladders in this game.
You find yourself in a maze, which you must explore in order to find the treasures.
When you find a treasure, you'll score 1 point and will be teleported to a new maze.
Avoid being touched by the ghosts, otherwise you'll lose one life.
If you are in trouble, you can teleport to another maze, but this will cost you 1 point.
Laddder has been coded in ugBASIC (https://ugbasic.iwashere.eu/) 1.18 for the 15th Edition (2026) of the BASIC 10 Liner Contest, EXTREM-256 category.
Instructions
When in the title screen, press any key to start the game.
You will be projected into a randomly generated maze. On the right side of the screen, you can see your current score "S" and remaining lives "L". A compass will help you navigate the maze.
The purpose of the game is to find the treasure chests (depicted as a yellow blocks).
Once you reach the treasure, the border will turn green, you will score 1 point and you will be teleported to a new maze to continue your quest.
Beware of the magenta ghost. The yellow border indicates that at least a ghost is in the nearby, so be careful! If you cannot escape, you can teleport to another maze, but this will cost you 1 point.
The red border indicates that the ghost got you. You'll lose a life and start again in a new maze.
Controls
e: Forward
o: Turn left
p: Turn right
t: Teleport
Emulator instructions (FUSE - the Free Unix Spectrum Emulator: https://fuse-emulator.sourceforge.net/)
* Start the Fuse executable (e.g. fuse.exe)
* Select the "Spectrum 48K" model in "Machine" -> "Select..."
* Make sure that automatic loading of tape image files is enabled, by checking the corresponding options in "Options" -> "Media..."
* Load the laddder_10liner.zx.tap file, either by choosing "File" -> "Open..." or by dragging and dropping it into the Fuse emulator window.
If your emulator of choice does not support automatic tape loading, after mounting the tape image you must manually issue the tape loading command,
by pressing the J key, followed by CTRL+P twice (the SYMBOL SHIFT ZX Spectrum key is usually mapped to CTRL) and then by ENTER.
You might also need to press the "Play" button on the virtual tape manager.
Once the program is loaded, the ugBASIC runtime will prompt you for a command:
ugBASIC Runtime version 1.18
READY
To start the game, type "run" (without quotation marks) and tap ENTER.
To view the listing, type "list" (without quotation marks)and tap ENTER.
ugBASIC listing
0 OpDftTyInt:c=ScCms:s=$5800:ww=63:bb=9:bw=56:yy=118:mm=27:Diz AsWo:P1gzx[l,o,ig]ON ZX:Ifl=0Ano=0An ig=TrTh:PaMg:IkCYAN:Ci80,144,4:Ci80,144,2:Ci103,144,4:Ci103,144,2:Ell91,168,12,4:PaWht:Ei:EePrb:P1dt[l,o,ig]:Srp,z,s,c,yy,mm:Diu AsWo:Div AsWo
1 Foi=p-(3-l)*2Top:u=s+i*c:v=u+22:z=u+11-(3-l)-o*(2*(l=3)+6*(l=2)+12*(l=1)+20*(l=0)):Foj=0To(3-l)*2:Ifz>=u Anz<=v Th:Ifig Th:Poz,mm:El:Poz,yy:Ei:Ei:INC z:Nx:Nx:gzx[l,o,ig]ON ZX:EePrb:dn="WSEN":Didx()AsSgndBy=#{-1,0,1,0}:Didy()AsSgndBy=#{0,1,0,-1}
2 P1dczx ON ZX:Srd,dn,dx,dy:a=27:b=16:IkRe:?At(27,16);"^";:IkGre:Ell220,131,15,15:IkBl:j=d:Foi=3To0Stp-1:Lc a+dx(i),b+dy(i):?Mi(dn,j+1,1);:Adj,-1,0To3:Nx:EePrb:Dif(4,3)=#{0,22,4,4,18,4,8,14,2,10,12,1}:Dim(19,19)AsBy:BoWht:PaWht:IkBl:Cl:Foi=0To87
3 Lni,i Toi,183-i:Ln183-i,i To183-i,183-i:Nx:ng=2:Digx(3),gy(3),g(3):P1 gn[h]:Srx,y,gx,gy,ng:Foi=0Tong:IfAb(gx(i)-x)<h AnAb(gy(i)-y)<h Th:RtTr:Ei:Nx:RtFa:EePrb:P1dg[l,o,x,y]:Srgx,gy,ng:Foi=0Tong:Ifx=gx(i)Any=gy(i)Th:dt[l,o,Tr]:Ei:Nx:EePrb:Diz AsWo:Do
4 Lc8,ScRws-1:?"LaDDDer";:WtKy:RdmTmr:sc%=0:lv=2:Do:BoWht:Lc0,ScRws-1:Cln:Iflv=-1Th:Wt1000MS:Ex:Ei:Film Wi1:Foy=1To17Stp2:Fox=1To17Stp2:m(y,x)=0:a=-1:IfRr(1)>0.4Th:Ifx>1Th:m(y,x-1)=0:a=0:Ei:Ei:Ifa ORRr(1)>0.2Th:Ify>1Th:m(y-1,x)=0:Ei:Ei:Nx:Nx:x=1
5 y=Rr(17)+1:d=Rr(4):b=Rr(17)+1:a=Rr(9)+9:m(b,a)=2:Foi=0Tong:g(i)=i:gx(i)=a:gy(i)=b:Nx:Lc24,2:Cln:?"S:";sc:Lc24,4:Cln:?"L:";lv:Do:z=s:Foi=0To22:Foj=0To22:w=ww:Ifi=11Th:w=bb:Ei:Poz,w:INC z:Nx:z=z+c-23:Nx:Fol=3To0Stp-1:a=dx(d)*l+x:b=dy(d)*l+y
6 If(a>=0Ana<19Anb>=0Anb<19)Th:o=f(l,0):p=f(l,1):q=f(l,2)-1:dm=1:If(d=0ORd=2)Th:dm=-1:Ei:u=a+dy(d)*dm:v=b+dx(d)*dm:Ifm(v,u)=1Th:Foi=o Top:z=s+i*c:Foj=0Too+q:w=bb:Ifj>=o Th:w=bw:Ei:Poz,w:INC z:Nx:Nx:Ei:Ifm(v,u)=2Th:dt[l,-1,0]:Ei:dg[l,-1,u,v]:u=a-dy(d)*dm
7 v=b-dx(d)*dm:Ifm(v,u)=1Th:Foi=o Top:z=s+i*c+p-q:Foj=p-q To22:w=bb:Ifj<=p Th:w=bw:Ei:Poz,w:INC z:Nx:Nx:Ei:Ifm(v,u)=2Th:dt[l,1,0]:Ei:dg[l,1,u,v]:Ifm(b,a)=1Th:Foi=o Top:z=s+i*c+o:Foj=o Top:Poz,bb:INC z:Nx:Nx:Ei:Ifm(b,a)=2Th:dt[l,0,0]:Ei:dg[l,0,a,b]:Ei:Nx
8 dczx[]ON ZX:Ifgn[1]Th:Dclv:BoRe:Wt1000MS:Ex:Ei:Ifm(b,a)=2Th:BoGre:INC sc:Wt1000MS:Ex:Ei:Tmr=0:Do:Ifgn[4]Th:BoYe:El:BoWht:Ei:ko=KyStt(KyO):kp=KyStt(KyP):Ifko ORkp Th:Add,-ko+kp,0To3:Ex:Ei:IfKyStt(KyE)Th:a=x+dx(d):b=y+dy(d):Ifm(b,a)<>1Th:x=a:y=b:Ex:Ei:Ei
9 IfKyStt(KyT)Th:Dcsc:Ifsc<0Th:sc=0:Ei:Ex2:Ei:IfTmr>=25Th:Tmr=0:Foi=0Tong:a=gx(i)+dx(g(i)):b=gy(i)+dy(g(i)):Ifm(b,a)<>1Th:gx(i)=a:gy(i)=b:El:g(i)=Rr(4):Ei:Nx:Ifgn[5]Th:Ex:Ei:Ei:Lp:Lp:Lp:Lp: ' Laddder by marco's retrobits 26 https://retrobits.itch.io
License
Creative Commons Attribution-NonCommercial-ShareAlike (CC BY-NC-SA 3.0): https://creativecommons.org/licenses/by-nc-sa/3.0/
| Status | Released |
| Author | BASIC 10Liner |
| Genre | Action |
| Tags | 10liner, basic, sinclair, ZX Spectrum |

Comments
Log in with itch.io to leave a comment.
Impressive speed!
Thank you! I have thought of making a native Sinclair BASIC version to see the difference and if it would be playable... maybe for the next contest.
BTW, are you going to participate? Can't wait to see your entries! :-)
Yes - I've got a few lined up. No spoilers!
I think a native Sinclair BASIC version of your game would be so slow it would be unplayable. That's just the nature of anything drawing to the screen at that full-screen scale. Perhaps if you stored each possible screen as a 704 character string and just redrew it over the top of itself... Hmmm... But still might be slow or a bit of a slideshow like some of the 8-bit ports of Dragon's Lair.
Cool, looking forward to seeing them!
I think some speed can be gained since the walls are pre-drawn and only the attibutes change. Maybe this and a reduced output window (I didn't think about it until I read your reply) could make it at least worth a try... I'll try a mockup when I'll find the time :)
very ghood
Thank you!!!