You are on page 1of 4

' basado en tutorial de:

' https://docs.google.com/document/pub?
id=1vUneCCC18oXLglzoRcJdrMDUSh7vaO_tGDjzjOc8IhU

' variable del sistema que apunta a los UDG


DIM UDG as uInteger AT 23675

' SCREEN
#define SCR 16384

' colores
#define NEGRO 0
#define AZUL 1
#define ROJO 2
#define MORADO 3
#define VERDE 4
#define CIELO 5
#define AMARILLO 6
#define BLANCO 7

#define fmsg1 7
#define fmsg2 13
#define cmsg 7

#define vidas 3

' la pantalla del spectrum es de 32 columnas y 23 filas


' la pantalla del juego sera de 21 columnas y 23 filas (dejamos 11 columnas para
menu)
'const panMaxF as ubyte = 22
'const panMaxC as ubyte = 20
#define panMaxF 22
#define panMaxC 20

dim pantalla(panMaxF,panMaxC) as ubyte => { _


{ 6, 2, 2, 2, 2,2, 2, 2, 2, 2, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2,
7}, _
{ 3, 0, 0, 0, 0,0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3}, _
{ 3, 1, 8, 2, 9,0, 8, 2, 9, 0, 11, 0, 8, 2, 9, 0, 8, 2, 9, 1,
3}, _
{ 3, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3}, _
{ 3, 0, 8, 2, 9,0, 10, 0, 8, 2, 15, 2, 9, 0, 10, 0, 8, 2, 9, 0,
3}, _
{ 3, 0, 0, 0, 0,0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0,
3}, _
{ 4, 2, 2, 2, 7,0, 13, 2, 9,255, 11,255, 8, 2, 12, 0, 6, 2, 2, 2,
5}, _
{255,255,255,255, 3,0, 3,255,255,255,255,255,255,255, 3, 0,
3,255,255,255,255}, _
{255,255,255,255, 3,0, 3,255, 6, 9, 16, 8, 7,255, 3, 0,
3,255,255,255,255}, _
{ 2, 2, 2, 2, 5,0, 11,255, 3,255,255,255, 3,255, 11, 0, 4, 2, 2, 2,
2}, _
{255,255,255,255,255,0,255,255, 3,255,255,255, 3,255,255,
0,255,255,255,255,255}, _
{ 2, 2, 2, 2, 7,0, 10,255, 3,255,255,255, 3,255, 10, 0, 6, 2, 2, 2,
2}, _
{255,255,255,255, 3,0, 3,255, 4, 2, 2, 2, 5,255, 3, 0,
3,255,255,255,255}, _
{255,255,255,255, 3,0, 3,255,255,255,255,255,255,255, 3, 0,
3,255,255,255,255}, _
{ 6, 2, 2, 2, 5,0, 11,255, 8, 2, 15, 2, 9,255, 11, 0, 4, 2, 2, 2,
7}, _
{ 3, 0, 0, 0, 0,0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3}, _
{ 3, 0, 8, 2, 7,0, 8, 2, 9, 0, 11, 0, 8, 2, 9, 0, 6, 2, 9, 0,
3}, _
{ 3, 1, 0, 0, 3,0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 3, 0, 0, 1,
3}, _
{ 13, 2, 9, 0, 11,0, 10, 0, 8, 2, 15, 2, 9, 0, 10, 0, 11, 0, 8, 2,
12}, _
{ 3, 0, 0, 0, 0,0, 3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0,
3}, _
{ 3, 0, 8, 2, 2,2, 14, 2, 9, 0, 11, 0, 8, 2, 14, 2, 2, 2, 9, 0,
3}, _
{ 3, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
3}, _
{ 4, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5}
_
}

sub pantallaMenu()
paper NEGRO: border NEGRO: ink NEGRO: cls
d=16384
o=@menuScr
for i=0 to 32*22
poke d,peek o
next i
exit sub
menuScr:
ASM
org 23296
incbin "scr.bin"
END ASM
end sub

SUB graphicsBank (bank as uByte)

IF bank=0 then
UDG = @graphicsbank1
ELSE
UDG = @graphicsbank2
END IF

RETURN

graphicsbank1:
ASM
DEFB 000,000,000,024,024,000,000,000 ; A - Dot 0
DEFB 000,024,060,126,126,060,024,000 ; B - Power Pill
DEFB 000,255,255,000,000,255,255,000 ; C - Horizontal Wall
DEFB 102,102,102,102,102,102,102,102 ; D - Vertical Wall 3
DEFB 102,103,099,096,096,127,063,000 ; E - Bottom Left Corner
DEFB 102,230,198,006,006,254,252,000 ; F - Bottom Right Corner
DEFB 000,063,127,096,096,099,103,102 ; G - Top Left Corner 6
DEFB 000,252,254,006,006,198,230,102 ; H - Top Right Corner
DEFB 000,063,127,096,096,127,063,000 ; I - Left Wall End
DEFB 000,252,254,006,006,254,252,000 ; J - Right Wall End 9
DEFB 000,060,126,102,102,102,102,102 ; K - Wall Top End
DEFB 102,102,102,102,102,126,060,000 ; L - Wall Bottom End
DEFB 102,230,198,006,006,198,230,102 ; M - T Junction left 12
DEFB 102,103,099,096,096,099,103,102 ; N - T Junction Right
DEFB 102,231,195,000,000,255,255,000 ; O - T Junction Up
DEFB 000,255,255,000,000,195,231,102 ; P - T Junction Down 15
DEFB 000,000,000,126,126,000,000,000 ; Q - Ghost Gate
END ASM

graphicsbank2:
ASM
DEFB 000,000,000,024,024,000,000,000 ; A - Dot
DEFB 060,126,015,007,007,015,126,060 ; B - Pac-Man Left
DEFB 060,126,240,224,224,240,126,060 ; C - Pac-Man Right
DEFB 000,066,195,195,195,231,255,126 ; D - Pac-Man Up
DEFB 060,126,255,231,195,195,066,000 ; E - Pac-Man Down
DEFB 060,126,255,255,255,255,126,060 ; F - Pac-Man Closed Circle
DEFB 060,030,031,015,015,031,030,060 ; G - Pac Man Dying Frame 2 (Left is Frame 1)
DEFB 012,014,015,015,015,015,014,012 ; H - Pac Man Dying Frame 3 (50%)
DEFB 000,002,007,007,007,007,002,000 ; I - Pac Man Dying Frame 4 (25%)
DEFB 000,000,001,003,003,001,000,000 ; J - Pac Man Dying Frame 5 (12%)
DEFB 066,036,000,000,102,000,036,066 ; K - Pac Man Dying (Pop!)
DEFB 060,126,219,255,255,255,219,219 ; L - Ghost
DEFB 001,003,003,006,014,062,124,224 ; M - Banana
DEFB 002,004,030,063,063,063,063,030 ; N - Apple
DEFB 004,012,018,054,111,111,118,032 ; O - Cherries
END ASM

END SUB

'CLS ' el cls borra el menu!

pantallaMenu()

' DIBUJAR PANTALLA


graphicsBank(0)
for f = 0 to panMaxF
for g = 0 to panMaxC
IF pantalla(f,g) = 255 THEN continue for
elseIF pantalla(f,g) > 1 THEN
INK AZUL: print at f,g;chr$(144+pantalla(f,g))
ELSEIF pantalla(f,g) = 1 THEN
INK MORADO: print at f,g;chr$(144+pantalla(f,g))
ELSE
INK ROJO: print at f,g;chr$(144+pantalla(f,g))
END IF
next
next

pause 0

' mostrar vidas


graphicsBank(1)
c=panMaxC + 4
for i = 1 to vidas
ink AMARILLO: print at fmsg1+2,c;chr$(145)
c=c+2
next

pause 100
ink ROJO
print at fmsg1,cmsg; " READY"
print at fmsg2,cmsg; "PLAYER!"

You might also like