MSX Ninja Love

¡Saludos!

En la anteriores entradas ya comentaba que ademas de la modificación de ROMs, existían otras cosas que ocupaban mi tiempo libre… una de ellas os la voy a presentar hoy.

Ya sabéis de mi afición por la retroinformática y mas particularmente, el cariño que le tengo al estándar MSX. Fue el primer ordenador que tuvimos en casa y que en cierta medida, marco una época de mi infancia, una primera época en la que nuestras visiones del ocio electrónico venían teñidas de la fosforescencia verde del monitor con que venía equipado nuestro MSX Dynadata mientras nuestros oídos retumbaban a golpe de Chiptune y chirridos de carga.

Por aquel entonces yo era muy pequeño, el ordenador era de mi hermano y todo aquello de la programación me parecía casi mágico. Recuerdo dictarle los códigos de las revistas y la ilusión y ceremonia con que recibíamos los paquetes con los cartuchos, que los distribuía en España una empresa con el logotipo de un marciano rosa cuyo nombre no consigo recordar.

El tema es que el estándar cumple ahora 30 años, apenas cuatro inviernos menos que yo. Desde aquel entonces se ha abierto un autentico abismo tecnológico y la mayoría de los que por aquel entonces se sonaban los mocos con las mangas de la camisa, corren tras incansables churumbeles, peinan elegantes canas, o le sacan brillo a su cuero cabelludo.

Soy del pensamiento de que vivir en el pasado no tiene sentido, pero recordarlo y ser conscientes de lo que vivimos, si que la tiene. Es un ver las cosas con retrospectiva y ser conscientes de que somos parte de una historia tecnológica que corre a un ritmo mucho mas acelerado que la de la humanidad. Por la historia podemos hacernos una idea de como se vivia en la sociedad de siglos XIX, pero carecemos de la experiencia que otorga la vivencia directa.

En el aspecto tecnológico, sin embargo las cosas cambian a un ritmo mucho mayor y su repercusion es innegable. Para los que nacimos entre los 70 y 80, los cambios han sido abismales. Conocimos el nacimiento de internet, de la tecnológia celular e inalambrica… y de la impresionante evolución informática.

Volver hoy y programar sobre un micro ordenador ha sido para mi toda una experiencia, sobre todo en MSX Basic, que posee un carácter aun mas primigenio y limitado si cabe. Existen conceptos que hoy se me antojan casi extraterrestres… ¿crear los gráficos de tu juego modificando la definición de caracteres en la memoria de vídeo? ¿Puede (y debe) ser uno capaz de aprenderse el mapeado de su memoria interna? ¿poder ser capaz de ver la ejecución de un for? llevo varios años programando, como la mayoría de las personas, en lenguajes de medio o alto nivel, donde el nivel de abstracción es mucho mayor y la distancia entre el programador y el monstruo que recibe y ejecuta sus instrucciones resulta prácticamente insalvable. Programar en MSXBasic para un micro ordenador ha sido como hablarle a un gato y meterle el dedo en la nariz.

Por otra parte, no deja de impresionarme la cantidad de personas que hay conscientes de la importancia de preservar este fragmento de historia, y que lejos de catalogarla, archivarla y guardarla para si cual decrepito bibliotecario, la mantiene viva y asequible al resto del mundo.

Así que hala, deciros que he programado un juego para MSX. Es un juego simplón y algo lento, pero he disfrutado mucho al crearlo. Como desarrollador (no me considero programador), a sido como ceñirme una casaca y ataviado cual Tercio, adentrarme con mi trabuco en el pasado, dispuesto a vivirlo en primera persona. ¡Y vaya si ha sido emocionante!

Espero que os guste. Si no sabéis como ejecutarlo, no tenéis mas que preguntar.

Ninja Love: un mini juego desarrollado en MSX Basic

Os adjunto también el código fuente, por si queréis aprender un poco. Podría estar mucho mejor programado, pero no era mi intención crear una obra maestra en ese aspecto y mucho menos hacerlo público. Aunque está creado un poco a salto de mata, esta comentado y es fácil de entender. Sobre la “música”… lo sé, es un horror y el ordenador da para mucho mas aunque sea en Basic, pero no soy compositor. A lo mejor un día hago otra versión añadiendo algo mas elaborado, pero no prometo nada.

Enlace de descarga: Ninja Love

Listado:

10 SCREEN 1,2,0: CLS: KEY OFF: COLOR 15,1,1
20 LOCATE 3,10: PRINT”DAME UN MINUTO, ME ESTOY”: LOCATE 5,12: PRINT”ACABANDO EL COLACAO”
30 MX%=100: MY%=94: TS%=0
40 EX%=255: UX%=196: FX%=32: CE%=1
50 VI%=2: C1%=10: CT$=”p”: AN%=0: PT%=500: EN%=0: DN%=0
60 ‘
70 ‘## DEFINICION SPRITES ##
80 ‘
90 FOR S=1 TO 32
100 READ A
110 B$=B$+CHR$(A)
120 C$=B$
130 NEXT S
140 SPRITE$(0) = B$: B$=””
150 ‘
160 FOR S=1 TO 32
170 READ A
180 B$=B$+CHR$(A)
190 NEXT S
200 SPRITE$(1) = B$: B$=””
210 ‘
220 FOR S=1 TO 32
230 READ A
240 B$=B$+CHR$(A)
250 NEXT S
260 SPRITE$(2)= B$: B$=””
270 ‘
280 FOR S=1 TO 32
290 READ A
300 B$=B$+CHR$(A)
310 NEXT S
320 SPRITE$(3) = B$: B$=””
330 ‘
340 FOR S=1 TO 32
350 READ A
360 B$=B$+CHR$(A)
370 NEXT S
380 SPRITE$(4) = B$: B$=””
390 ‘
400 FOR S=1 TO 32
410 READ A
420 B$=B$+CHR$(A)
430 NEXT S
440 SPRITE$(5) = B$: B$=””
450 ‘
460 ‘## REDEFINICION CHR ##
470 ‘
480 ‘ 91:[ 112:p 123:{ 95:_
490 ‘ 104:h
500 ‘
510 RESTORE 2100
520 FOR C=0 TO 7: READ T: VPOKE 95*8+C,T: NEXT C
530 FOR C=0 TO 7: READ T: VPOKE 123*8+C,T: NEXT C
540 FOR C=0 TO 7: READ T: VPOKE 112*8+C,T: NEXT C
550 FOR C=0 TO 7: READ T: VPOKE 93*8+C,T: NEXT C
560 FOR C=0 TO 7: READ T: VPOKE 104*8+C,T: NEXT C
570 FOR C=0 TO 7: READ T: VPOKE 46*8+C,T: NEXT C
580 FOR C=0 TO 7: READ T: VPOKE 97*8+C,T: NEXT C
590 FOR C=0 TO 7: READ T: VPOKE 98*8+C,T: NEXT C
600 FOR C=0 TO 7: READ T: VPOKE 99*8+C,T: NEXT C
610 FOR C=0 TO 7: READ T: VPOKE 100*8+C,T: NEXT C
620 FOR C=0 TO 7: READ T: VPOKE 101*8+C,T: NEXT C
630 FOR C=0 TO 7: READ T: VPOKE 122*8+C,T: NEXT C
640 FOR C=0 TO 7: READ T: VPOKE 105*8+C,T: NEXT C
650 ‘
660 ‘## COLOR CHR ##
670 ‘
680 VPOKE 8203,4*16+0 ‘_
690 VPOKE 8207,6*16+0 ‘{
700 VPOKE 8206,12*16+0’p
710 VPOKE 8205,13*16+0 ‘h
720 VPOKE 8204,10*16+0 ‘a
730 ‘
740 ‘## MENU DE INICIO ##
750 ‘
760 CLS
770 LOCATE 5,4: PRINT”zz  z zz   zz  z”: LOCATE 5,5: PRINT”z z z z z   z z z”: LOCATE 5,6: PRINT”z z z z z   z z z”: LOCATE 5,7: PRINT”z z z z z z z zzz”: LOCATE 5,8: PRINT”z z z z z zzz z z”
780 FOR I=5 TO 21: LOCATE I,12: PRINT “e”: NEXT I
790 FOR I=5 TO 21: LOCATE I,20: PRINT “e”: NEXT I
800 LOCATE 18,10: PRINT”LOVE”
810 LOCATE 10,14: PRINT”1-JUGAR”
820 LOCATE 10,16: PRINT”2-HISTORIA”
830 LOCATE 10,18: PRINT”3-SALIR”
840 LOCATE 5,22: PRINT”ONIRIC FACTOR 2013″
850 K$=INKEY$: IF K$<>”1″ AND K$<>”2″AND K$<>”3″ THEN GOTO 800: ELSE IF K$=”3″ THEN SCREEN0: END: ELSE IF K$=”1″ THEN CLS: ELSE IF K$=”2″ THEN CLS: GOTO 2280
860 ‘
870 ‘## DIBUJO FONDO ##
880 ‘
890 LOCATE 0,14: PRINT “_____________________________”
900 LOCATE 0,7: PRINT “{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{“
910 LOCATE 0,8: PRINT “{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{“
920 LOCATE 0,9: PRINT “{{{{{{{{{{{{{{{{{{{{{{{{{{{{{“
930 LOCATE 0,17: PRINT “eeeeeeeeeeeeeeeeeeeeeeeeeeeee”
940 LOCATE 0,21: PRINT “eeeeeeeeeeeeeeeeeeeeeeeeeeeee”
950 LOCATE 25,5: PRINT”]”
960 LOCATE 15,3: PRINT”]”
970 LOCATE 8,2: PRINT”]”
980 LOCATE 2,4: PRINT”]”
990 LOCATE 29,0: PRINT”]”
1000 LOCATE 3,1: PRINT”]”
1010 LOCATE 10,4: PRINT”.”
1020 LOCATE 1,1: PRINT”.”
1030 LOCATE 20,3: PRINT”.”
1040 LOCATE 15,5: PRINT”.”
1050 LOCATE 6,6: PRINT”.”
1060 LOCATE 12,2: PRINT”.”
1070 LOCATE 18,2: PRINT”.”
1080 LOCATE 28,4: PRINT”.”
1090 LOCATE 23,1: PRINT”b”
1100 LOCATE 23,2: PRINT”a”
1110 LOCATE 24,2: PRINT”c”
1120 LOCATE 24,1: PRINT”d”
1130 ‘
1140 ‘## BUCLE PRINCIPAL ##
1150 ‘
1160 REM
1170 ‘
1180 ‘## DIBUJO SPRITES ##
1190 ‘
1200 IF PT%>0 THEN PT%=PT%-1 ELSE GOTO 2420
1210 ‘
1220 AN%=AN%+1: IF AN%>1 THEN PUT SPRITE 0,(MX%,MY%),10,0: PUT SPRITE 1,(MX%,MY%),6,2: AN%=0 ELSE IF MY%<>80 THEN PUT SPRITE 0,(MX%,MY%),10,1: PUT SPRITE 1,(MX%,MY%),6,3
1230 ‘
1240 EN%=EN%+1: IF EN%>1 THEN PUT SPRITE 4,(EX%,94),8,5: EN%=0: ELSE PUT SPRITE 4,(EX%,94),8,4
1250 ‘
1260 DN%=DN%+1: IF CE%<>1 THEN IF DN%>1 THEN PUT SPRITE 5,(UX%,94),8,5: DN%=0: ELSE PUT SPRITE 5,(UX%,94),8,4 ELSE PUT SPRITE 5,(255,94),0,5
1270 ‘
1280 IF CE%=3 OR CE%=4 THEN LOCATE FX%,11: PRINT “h”: LOCATE FX%+1,11: PRINT” “
1290 ‘
1300 ‘## COLISION ##
1310 ‘
1320 IF MY%<>80 THEN IF ABS(MX%-EX%)<12 :="" abs="" ex="" fx="" if="" locate="" or="" print="" then="" ux="" vi="">1 THEN VI%=VI%-1: CE%=1: GOTO 890 ELSE CE%=1: GOTO 1670
1330 ‘
1340 IF MY%=80 THEN IF ABS(MX%-FX%*8)<12 fx="" if="" locate="" print="" then="" ux="" vi="">1 THEN VI%=VI%-1: CE%=1: GOTO 890 ELSE CE%=1: GOTO 1670
1350 ‘
1360 ‘## MOVIMIENTO ##
1370 ‘
1380 IF STICK(0)=1 AND MY%<>80 THEN MY%=80
1390 IF MY%=80 THEN TS%=TS%+1: IF TS%>4 THEN MY%=94: TS%=0
1400 ‘
1410 ‘## MOV. ENEMIGO ##
1420 ‘
1430 IF CE%=1 THEN IF EX%>16 THEN EX%=EX%-16: ELSE EX%=255: UX%=255: IF RND(1)>.5 THEN CE%=2: EX%=255: UX%=204: ELSE IF RND(1)>.5 THEN CE%=1: EX%=255: UX%=255: ELSE CE%=3: EX%=239: FX%=32
1440 ‘
1450 IF CE%=2 THEN IF UX%>8 THEN UX%=UX%-8: EX%=EX%-8: ELSE UX%=255: EX%=255: IF RND(1)>.5 THEN CE%=2: UX%=204: EX%=255: ELSE IF RND(1)>.5 THEN CE%=1: EX%=255: UX%=255: ELSE CE%=4: EX%=255: UX%=168: FX%=24
1460 ‘
1470 IF CE%=3 THEN IF FX%>8 THEN FX%=FX%-1: EX%=EX%-8: ELSE LOCATE FX%,11: PRINT ” “: FX%=32: EX%=255: UX%=255: IF RND(1)>.5 THEN CE%=1: ELSE CE%=2:UX%=204
1480 ‘
1490 IF CE%=4 THEN IF UX%>0 THEN FX%=FX%-1: EX%=EX%-8: UX%=UX%-8: ELSE LOCATE FX%,11: PRINT ” “: FX%=32: EX%=255: UX%=255: IF RND(1)>.5 THEN CE%=1: ELSE UX%= 204: CE%=2
1500 ‘
1510 ‘## MOV FONDO ##
1520 ‘
1530 IF C1%>0 THEN C1%=C1%-1: LOCATE C1%,13: PRINT CT$:LOCATE C1%+1,13: PRINT” “: ELSE LOCATE 0,13: PRINT” “: C1%=31: LOCATE C1%,13
1540 ‘
1550 ‘## MARCADOR ##
1560 ‘
1570 LOCATE 3,19: PRINT “VIDAS:”;VI%: LOCATE 15,19: PRINT”METROS:”;PT%
1580 ‘
1590 ‘## REPRODUCE NOTAS##
1600 ‘
1610 IF PLAY(1)<>-1 THEN READ X$: IF X$ <>”X” THEN PLAY X$ ELSE RESTORE 2230
1620 ‘
1630 ‘## FIN BUCLE ##
1640 ‘
1650 GOTO 1200
1660 ‘
1670 ‘## GAME OVER ##
1680 ‘
1690 CLS: LOCATE 6,10: VI%=2: PT%=500
1700 PUT SPRITE0,(0,0),0: PUT SPRITE1,(0,0),0: PUT SPRITE 2,(0,0),0: PUT SPRITE3,(0,0),0: PUT SPRITE4,(0,0),0: PUT SPRITE5,(0,0),0
1710 LOCATE 9,11: PRINT”GAME OVER”: FOR I=0 TO 1000: NEXT I
1720 GOTO 740
1730 ‘
1740 ‘## FINAL ##
1750 ‘
1760 ‘
1770 ‘## DATOS SPRITES ##
1780 ‘
1790 DATA 0,0,0,1,0,0,0,1
1800 DATA 32,9,2,16,48,32,0,0
1810 DATA 0,0,0,64,0,0,0,64
1820 DATA 4,144,128,4,28,24,0,0
1830 ‘
1840 DATA 0,0,0,0,0,0,0,0
1850 DATA 0,0,0,0,3,0,4,3
1860 DATA 0,0,0,0,0,160,0,0
1870 DATA 0,128,64,128,32,0,0,192
1880 ‘
1890 DATA 3,23,15,30,7,3,15,30
1900 DATA 27,2,5,15,14,0,0,0
1910 DATA 192,224,224,0,224,224,240,184
1920 DATA 216,64,96,240,96,0,0,0
1930 ‘
1940 DATA 0,0,3,7,31,15,23,3
1950 DATA 7,7,7,7,0,3,3,0
1960 DATA 0,0,192,224,224,0,224,224
1970 DATA 192,64,128,96,192,192,128,0
1980 DATA 0,0,0,8,0,1,3,39
1990 DATA 15,31,63,63,59,61,31,13
2000 DATA 0,0,32,0,8,4,136,192
2010 DATA 212,248,252,252,220,188,248,176
2020 ‘
2030 DATA 0,4,1,1,19,3,7,15
2040 DATA 15,31,31,27,29,31,13,7
2050 DATA 8,32,8,128,132,200,224,228
2060 DATA 240,248,248,216,184,248,176,224
2070 ‘
2080 ‘## DATOS TILES ##
2090 ‘
2100 DATA 223,171,117,174,90,16,0,0
2110 DATA 123,32,0,32,221,2,0,2
2120 DATA 0,0,64,32,36,88,254,0
2130 DATA 16,0,16,170,16,0,16,0
2140 DATA 32,65,254,65,32,0,0,0
2150 DATA 0,0,0,16,0,0,0,0
2160 DATA 63,117,3,63,31,30,60,240
2170 DATA 240,60,30,15,31,3,11,63
2180 DATA 208,208,224,128,0,0,0,0
2190 DATA 0,0,0,0,128,224,176,208
2200 DATA 0,195,36,16,8,36,195,0
2210 DATA 126,129,191,161,173,189,129,126
2220 DATA 0,66,60,129,129,60,66,0
2230 ‘
2240 ‘## DATOS MUSICA ##
2250 ‘
2260 DATA F-64,F-64,R64,F-64,F-64,F-64,F-64,A#64,A#64,R64,A#64,R64,A#64,A#64,A#64
2270 DATA R64,F#64,F#64,R64,F#64,R64,F#64,F#64,F#64,C#64,C#64,R64,C#64,C#64,C#64,C#64,X
2280 LOCATE 0,1: PRINT”eeeeeeeeeeeeeeeeeeeeeeeeeeeee”
2290 LOCATE 0,4: PRINT”ESTA NOCHE HAS QUEDADO CON TU “
2300 LOCATE 0,5: PRINT”CHURRI PARA SALIR DE PARRANDA”
2310 LOCATE 0,6: PRINT”PERO TU PERVERSO SUEGRO, AUN”
2320 LOCATE 0,7: PRINT”ENFADADO POR TU ALEGRE BROMA”
2330 LOCATE 0,8: PRINT”DEL MOCO EN EL POLLO FENSUI,”
2340 LOCATE 0,9: PRINT”HA DECIDIDO MATARTE UN POCO”
2350 LOCATE 0,11: PRINT “ANIMO NINJA, EVITA TOSTARTE”
2360 LOCATE 0,12: PRINT “EL CULO O ABRIRTE EL CRANEO,”
2370 LOCATE 0,14: PRINT “!TU PIVA AMARILLA TE ESPERA!”
2380 LOCATE 1,20: PRINT ” PULSA “1” PARA CONTINUAR “
2390 LOCATE 0,18: PRINT”eeeeeeeeeeeeeeeeeeeeeeeeeeeee”
2400 QQ$=INKEY$: IF QQ$<>”1″ THEN GOTO 2400 ELSE CLS: GOTO 740
2410 ‘
2420 ‘## FINAL ##
2430 ‘
2440 CLS: PUT SPRITE0,(0,0),0: PUT SPRITE1,(0,0),0: PUT SPRITE 2,(0,0),0: PUT SPRITE3,(0,0),0: PUT SPRITE4,(0,0),0: PUT SPRITE5,(0,0),0
2450 LOCATE 0,6: PRINT”eeeeeeeeeeeeeeeeeeeeeeeeeeeee”
2460 LOCATE 0,8: PRINT”ESTAS HECHO TODO UN NINJA”
2470 LOCATE 0,9: PRINT”RECORRISTE EL CAMINO MORTAL”
2480 LOCATE 0,11: PRINT”ESTE DOMINGO EN LA CENA TE”
2490 LOCATE 0,12: PRINT”VAS A MEAR EN LA SOPA”
2500 LOCATE 0,14: PRINT”!VERAS QUE RISAS!”
2510 LOCATE 0,16: PRINT”eeeeeeeeeeeeeeeeeeeeeeeeeeeee””
2520 LOCATE 3,18: PRINT” PULSA 1 PARA TERMINAR “
2530 QQ$=INKEY$: IF QQ$<>”1″ THEN GOTO 2450 ELSE SCREEN 0: END



2 comentarios sobre “MSX Ninja Love

Deja un comentario