User Tools

Site Tools




Author Richard Hopkins
Computer Amstrad PCW 8256 / 8512 / 9512
Year 1988
Gender Arcade
Controls Keyboard
Languages English
Status Preserved



It is a long and quite complicated maze game. A small game that has the best graphics in Mallard Basic.

The idea of ​​the game is not very good, there are several maze-type games that involve a small character that climbs the screen, jumping over objects that kill us when touched.

The strength of the game lies in its graphics which are surprisingly good. This is achieved by redefining a series of characters that combine to form the man and the labyrinth. The author instead of redefining the character set has redefined several of the vague symbols that we only discovered by pressing “ALT” instead of “SHIFT” by accident. It is recommended to restart your computer after playing the game to reset the character set.

The program comes in two parts. The first one redefines the characters that are required and then calls the main program.

Our mission is to reach the end of each screen, jumping the obstacles, taking the elevator that takes us to the successive floors and the dangers that lie in wait for us. We will have to collect the key in the middle level and then get to the door in the upper level. We will have to avoid the bird that will kill us in order to get access to the door. A quite entertaining game although somewhat difficult that will make us spend hours in front of the screen.


  • Listing - ODIOSUM.BAS
5 '********** ODIOSUM.BAS ***************
10 REM
20 REM Programma van Richard Hopkins uit 8000 PLUS
30 REM Juni 1988, pags. 62 + 63
40 REM Bewerking voor JOYCE Nieuws: Rolf van de Kamer
50 GOSUB 720
60 e$=CHR$(27):rv$=e$+"p":nv$=e$+"q":cl$=e$+"E"+e$+"H":on$=e$+"e":of$=e$+"f"
70 me$="*** O D I O S U M *** [q]=Left [e]=Right [p]=Jump [SPACE]=START [z]=END"
80 DEF FNat$(x,y)=CHR$(27)+"Y"+CHR$(31+x)+CHR$(31+y):PRINT of$:GOTO 670
90 x%=20:y%=24:a$=CHR$(160)+CHR$(161):b$=CHR$(162)+CHR$(163):e%=37:ed%=1:e1%=49:ed1%=-1
100 e2%=41:ed2%=1:k%=0
110 PRINT FNat$(x%,y%);"  ";FNat$(x%+1,y%);"  ":in$=INKEY$:IF in$="" THEN GOTO 170
120 IF IN$="q" THEN a$=CHR$(166)+CHR$(167):y%=y%+(y%>31)
130 IF y%/2=INT(y%/2) THEN b$=CHR$(170)+CHR$(171) ELSE b$=CHR$(168)+CHR$(169)
140 IF in$="e" THEN a$=CHR$(160)+CHR$(161):y%=y%-(y%<57)
150 IF y%/2=INT(y%/2) THEN b$=CHR$(164)+CHR$(165) ELSE b$=CHR$(162)+CHR$(163)
151 IF in$="z" THEN GOTO 700
160 IF in$="p" THEN GOTO 210
170 PRINT FNat$(x%,y%);a$;FNat$(x%+1,y%);b$:GOSUB 330
180 IF (y%=56 AND x%=20) OR (y%=56 AND x%=14 AND k%=1) THEN GOSUB 440
190 IF y%>42 AND y%<46 AND x%<15 THEN GOTO 290
200 IF x%=8 AND y%=31 THEN GOTO 650 ELSE GOTO 110
210 IF a$=CHR$(160)+CHR$(161) THEN j%=1 ELSE j%=-1
220 FOR z=-1 TO 1 STEP 0.5:PRINT FNat$(x%,y%);"  ";FNat$(x%+1,y%);"  "
230 x%=x%+(z*2):IF y%>31 AND y%<57 THEN y%=y%+j%
240 IF j%=-1 THEN b$=CHR$(168)+CHR$(169):IF y%/2=INT(y%/2) THEN b$=CHR$(170)+CHR$(171)
250 IF j%=1 THEN b$=CHR$(162)+CHR$(163):IF y%/2=INT(y%/2) THEN b$=CHR$(164)+CHR$(165)
260 PRINT FNat$(x%,y%);a$;FNat$(x%+1,y%);b$
270 IF l%=0 AND x%=11 AND (y%>33 AND y%<37) THEN GOSUB 310
280 GOSUB 330:NEXT:GOTO 170
290 PRINT FNat$(x%,y%);"  ";FNat$(x%+1,y%);"  "
300 x%=x%+1:PRINT FNat$(x%,y%);a$;FNat$(x%+1,y%);b$:GOSUB 330:GOTO 290
310 PRINT FNat$(11,35);"  ";FNat$(x%,y%);a$;CHR$(7):k%=1:FOR n=0 TO 255:OUT 246,n:NEXT
330 GOSUB 490:PRINT FNat$(15,e%);"  ":e%=e%+ed%:PRINT FNat$(15,e%);CHR$(176);CHR$(177)
340 PRINT FNat$(9,e1%);"  ":e1%=e1%+ed1%:PRINT FNat$(9,e1%);CHR$(176);CHR$(177)
350 IF e%=31 OR e%=40 THEN ed%=-ed%
360 IF e1%=48 OR e1%=53 THEN ed1%=-ed1%
370 PRINT FNat$(5,e2%);"    ":e2%=e2%+ed2%
380 IF ed2%=1 AND e2%/2=INT(e2%/2) THEN PRINT FNat$(5,e2%);CHR$(184);CHR$(185);CHR$(186);CHR$(187)
390 IF ed2%=1 AND e2%/2<>INT(e2%/2) THEN PRINT FNat$(5,e2%);CHR$(184);CHR$(190);CHR$(191);CHR$(187)
400 IF ed2%=-1 AND e2%/2=INT(e2%/2) THEN PRINT FNat$(5,e2%);CHR$(180);CHR$(181);CHR$(182);CHR$(183)
410 IF ed2%=-1 AND e2%/2<>INT(e2%/2) THEN PRINT FNat$(5,e2%);CHR$(180);CHR$(188);CHR$(189);CHR$(183)
420 IF e2%=41 OR e2%=47 THEN ed2%=-ed2%
440 PRINT FNat$(x%,y%);"  ";FNat$(x%+1,y%);"  ";FNat$(x%+2,y%-1);" ";STRING$(2,178);" "
450 x%=x%-1:PRINT FNat$(x%,y%);a$;FNat$(x%+1,y%);b$;FNat$(x%+2,y%-1);STRING$(4,179)
460 GOSUB 330:IF x%=14 OR x%=8 THEN RETURN ELSE GOTO 440
470 FOR n=0 TO 91:OUT 245,n:NEXT n
480 me$="Dead ! More luck next time! +++ ":GOTO 670
490 IF (x%=14 AND ABS(e%-y%)<2) OR (x%=8 AND ABS(e1%-y%)<2) THEN GOTO 470
500 IF (x%=5 AND y%-e2%>-2 AND y%-e2%<4) OR (x%=20 AND y%>42 AND y%<46) THEN GOTO 470
520 PRINT cl$:OUT 248,8
530 FOR n=1 TO 25:PRINT FNat$(n,29);CHR$(173);CHR$(173);FNat$(n,59);CHR$(173);CHR$(173)
540 NEXT
550 PRINT FNat$(22,20);STRING$(11,179);rv$;STRING$(24,179);nv$;STRING$(4,179)
560 FOR n=23 TO 25:PRINT FNat$(n,31);rv$;STRING$(28,179);nv$:NEXT
570 PRINT FNat$(27,29);rv$;"   o   d   i   o   s   u   m    ";nv$
580 FOR n=17 TO 21:PRINT FNat$(n,29);"  ":NEXT
590 PRINT FNat$(8,29);CHR$(178);"  ";FNat$(9,29);CHR$(178);" "
600 PRINT FNat$(16,31);STRING$(24,172);FNat$(10,31);STRING$(24,172)
610 PRINT FNat$(16,43);SPACE$(4);FNat$(10,43);SPACE$(4);FNat$(10,20);STRING$(11,179)
620 PRINT FNat$(11,35);CHR$(174);CHR$(175);FNat$(21,44);CHR$(176);CHR$(177)
630 OUT 248,7:RETURN
640 FOR n%=0 TO 91:OUT 245,n%:NEXT
650 FOR N=-255 TO 255:OUT 246,ABS(n):OUT 245,ABS(n):NEXT:OUT 245,91:PRINT CHR$(7)
660 me$="+++ Congratulations - you finished Odiosum "
670 GOSUB 520
680 PRINT FNat$(28,29);rv$;LEFT$(me$,32);nv$:me$=RIGHT$(me$,LEN(me$)-1)+LEFT$(me$,1)
700 PRINT CHR$(27)+"E"+CHR$(27)+"H":CLEAR:END
710 REM ***** Grafische Loaders *****
720 MEMORY &HBFFE:FOR hex=&HC070 TO &HC098:READ pk:POKE hex,pk:NEXT hex
730 DATA 243,62,129,211,241,62,130,211,242,175,95,103,22,184,58,153,192,111,41,41
740 DATA 41,25,17,154,192,235,1,8,0,237,176,62,133,211,241,62,134,211,242,251,201
750 FOR char=160 TO 191:POKE &HC099,char
760 FOR row=1 TO 8:READ binary(row):POKE &HC099+row,(binary(row)):NEXT row
770 cl=&HC070:CALL cl:NEXT char
780 DATA 0,63,63,60,63,63,15,15,0,192,240,192,240,192,0,192
790 DATA 63,255,255,15,63,255,252,255,240,240,60,204,240,60,252,63
800 DATA 63,255,255,63,63,63,63,63,240,240,240,240,192,0,0,192
810 DATA 0,3,15,3,15,3,0,3,0,252,252,60,252,252,240,240
820 DATA 15,15,60,51,15,60,63,252,252,255,255,240,252,255,63,255
830 DATA 15,15,15,15,3,0,0,3,252,255,255,252,252,252,252,252
840 DATA 255,85,170,85,255,0,0,0,85,170,85,170,85,170,85,170
850 DATA 0,0,0,51,204,51,12,0,12,51,192,48,0,0,0,0
860 DATA 15,60,240,240,240,255,63,15,240,252,255,255,63,255,252,240
870 DATA 20,28,20,28,20,28,20,28,186,202,202,189,123,119,205,74
880 DATA 0,0,0,0,63,207,63,0,3,12,51,15,60,243,63,15,48,192,0,63,207,63,255,252,0,0,48,192,240,192,0,0
890 DATA 0,0,12,3,15,3,0,0,12,3,0,252,243,252,255,63,192,48,204,240,60,207,252,240,0,0,0,0,252,243,252,0
900 DATA 0,0,0,15,60,243,63,15,0,0,0,255,207,63,255,252
910 DATA 0,0,0,255,243,252,255,63,0,0,0,240,60,207,252,240
930 REM Einde van de listing


       Q = LEFT
       E = RIGHT
       P = JUMP

Loading the program

 1.- Insert the CP/M disc on side 2
 2.- Write BASIC and wait for it to load
 3.- Remove the CP/M disk and insert the disk containing the game Odiosum
 4.- Type run "Odiosum" and press the "ENTER" key


  • Program listing in high-circulation magazines of the time

odiosum_programa_01.jpg odiosum_programa_02.jpg


  • Odiosum (game in dsk format, compressed with zip)


en/odiosum.txt · Last modified: 2022/06/30 13:47 by jevicac