Knight 'n' Grail casi a punto de publicarse

No tengo tiempo para más, pero no podía dejar pasar este anuncio: está a punto de publicarse el Knight 'n' Grail, un juegazo para Commodore 64 :-)

Mucha más información y pantallas en The quest for the Holy Grail (en inglés).

Este es el cartel del juego:

Actualización con nuevo video:

Solución completa del WonderBoy arcade en video

Desde el artículo original sobre WonderBoy en los orígenes de este blog, muchísima gente pregunta cómo pasar tal o cual nivel, gracias a los comentarios de los visitantes de esta web se han ido revelando muchos secretos e información.

Finalmente decidí buscar un poco y crear la secuencia completa de todo el juego, desde el area 1-1 hasta el 8-4, donde rescata a la princesa (o a su novia o amiga, no sé :P).

Los videos estan divididos en 10 partes, aunque no los he visto completos parece que están todos los niveles, sinceramente por lo que vi mientras controlaba que no falte ningún area, ¡no entiendo como puede un humano llegar al final! :D ¡Hay partes dificilísimas!

Un tema a responder, es sobre el famoso nivel secreto al juntar todas las muñecas, que a estas alturas ya pienso que se trata de una leyenda urbana :D

Bueno, ¡que los disfruteis!

Video 1: desde Area 1-1 hasta 2-1

Video 2: desde Area 2-3 hasta 3-2

Video 3: desde Area 4-1 hasta 4-4

Video 4: desde Area 4-4 hasta 5-3

Video 5: Area 5-4

Video 6: desde Area 6-1 hasta 6-2

Video 7: desde Area 6-3 hasta 7-1

Video 8: desde Area 7-2 hasta 7-4

Video 9: desde Area 7-4 hasta 8-2

Video 10: desde Area 8-3 hasta 8-4 (final)

Relacionados:

Código Assembler del algoritmo de Bresenham

Revisando (muy) antiguos proyectos encontré este trocito de código en ensamblador (o assembler) que hice (o copié, ya no recuerdo) alrededor de 1992, para el juego Defender, que en realidad es un remake de Command Comander, sólo que no sabíamos que se llamaba así... :P

El código en ensamblador es para procesadores 80286, las famosas PC AT 286. Y pinta el pixel en el modo gráfico #13 de las VGA (320x200 pixeles y 256 colores).

Está preparado para funcionar dentro del código fuente del Turbo Pascal, por eso está declarado como una función, con parámetros de coordenada X/Y de inicio y  fin, el color a pintar y otro parámetro que no sé que es :D

No tengo idea si esto le será de utilidad a alguien, espero que sí.

Procedure LineaASM( x1_,y1_,x2_,y2_:Integer; Color_,Poner_:Byte); assembler;
var
x1,
y1,
x2,
y2,
delp,
delr,
delrx,
delry,
deldx,
deldy,
delre,
delde   :Word;

asm

{ tomar parametros }

          mov   ax,x1_
          mov   x1,ax         { X1 }

          mov   ax,y1_
          mov   y1,ax         { Y1 }

          mov   ax,x2_
          mov   x2,ax         { X2 }

          mov   ax,y2_
          mov   y2,ax         { Y2 }

{ inc de perder todo }
          mov   si,1
          mov   di,1

{ calcular /x2-/y1/ }
         mov    dx,y2_
         sub    dx,y1_
         jge    @almay
         neg    di
         neg    dx
@almay:
         mov    deldy,di

{ calcular /x2-x1/ }
         mov    cx,x2
         sub    cx,x1
         jge    @almax
         neg    si
         neg    cx
@almax:
         mov    deldx,si

{ clasificar /y2-y1/ y /x2-x1/  }
         cmp    cx,dx
         jge    @mover
         mov    si,0
         xchg   cx,dx
         jmp    @alma

@mover:
         mov    di,0

{ almacenar delr,delp,delrx y delry }
@alma:
         mov    delr,cx
         mov    delp,dx
         mov    delrx,si
         mov    delry,di

{ obtener valores iniciales para x e y }
         mov    si,x1
         mov    di,y1

{ calcular valor inicial e incrementos para la funcion de error }
         mov    ax,delp
         sal    ax,1
         mov    delre,ax

         sub    ax,cx
         mov    bx,ax

         sub    ax,cx
         mov    delde,ax

{ ajustar contador }
         inc    cx
{ ------------------------------ }
{ estructura del bucle principal }
{ ------------------------------ }

@bucle:
{ dibujar punto en (x,y) }

         push bx
         push ax
         push cx
         push es


         mov  BX,SI           { si=x }
         mov  AX,DI           { di=y }

{ PQLL:         AX = coordenada y (0-199)
;               BX = coordenada x (399)
;
; Devuelve:     BX = desplazamiento de byte en el buffer
;               ES = segmento del buffer de v¡deo}

               xchg    ah,al           { AX := 256 * y     }
               add     bx,ax           { BX := 256 * y + x }
               shr     ax,1
               shr     ax,1            { AX := 64 * y      }
               add     bx,ax           { BX := 320 * y + x }

               mov     ax, $A000
               mov     es,ax           { ES:BX := direcci¢n de byte del pixel }


         { pone el punto }
               mov     al,Color_      { Color }
               mov     es:[bx],al

         pop   es
         pop   cx
         pop   ax
         pop   bx

         cmp   bx,0
         jge   @diagonal

{ caso linea recta }
@recta:
         add   si,delrx
         add   di,delry
         add   bx,delre
         loop  @bucle
         jmp   @fin

{ caso linea diagonal }
@diagonal:
         add   si,deldx
         add   di,deldy
         add   bx,delde
         loop  @bucle

{ restaurar registros afectados }
@fin:
end;

Relacionado: El algoritmo de Bresenham

Un interesante aporte: Proyectos robóticos

En la web Proyectos robóticos se pueden encontrar programas con ejemplos del Algoritmo de Bresenham para 2D, 3D... hasta 6D. Este algoritmo no sólo sirve para hacer líneas.

En mi caso lo uso para coordinar los movimientos de un simulador de Brazo Robot de 5 grados de libertad (la mano no se cuenta como grado de libertad). Todo el brazo se mueve a la vez para la realización de cualquier trayectorias. En mis simuladores el brazo robot llega a dibujar. Para esta tarea uso los ficheros de extensión ".PLT" (HPGL).

Los ejemplos están escrito en FreeBasic y en este caso compatibles con QBasic. Las variables están declaras en tipo, así que es bien fácil traducirlo a cualquier lenguaje de programación.

RetroInvaders: nuevos blogs de retro informática

Últimos blogs que se han agregado al planeta Retro Invaders:

Epi-Mundo: Frikadas varias de mi vida

Contenidos de Commodore 64 y más cosas frikis de este argentino.

Enlace: Epi-Mundo: Frikadas varias de mi vida

The Mojon Twins

Grupo de desarrolladores dedicados a crear juegos para Spectrum y Amstrad.

Enlace: The Mojon Twins

HeadSpeccy: el Blog Spectrumero

Un blog dedicado al Spectrum.

Enlace: HeadSpeccy: el Blog Spectrumero

QBlog

Blog sobre Sinclair QL en castellano.

Enlace: QBlog

Adiós a Internet Explorer 6

IE6 a la papelera... basura

Hace un tiempo vi un código javascript que detecta IE6 y muestra un aviso que nos anima a actualizar el explorador o usar una alternativa mejor.
Ahora he visto una nueva versión de este aviso, pero sin javascript, cosa que me gusta más.

He decidido incluirlo en mis webs y al mismo tiempo también he decidido dejar de dar soporte a la versión 6 de Microsoft Internet Explorer. Demasiados quebraderos de cabeza he tenido ya con este tema. Además hace bastante que está funcionando la versión 7 y está por salir la versión IE8, no tiene sentido seguir dedicando (perdiendo) el tiempo para corregir los errores de visualización de IE6.

El mensaje que aparece con este código es muy discreto y fácilmente modificable para que se adapte a nuestro gusto. Sólo hace falta copiar un pequeño código HTML dentro de la plantilla de la web -yo lo puse después del <body>- y luego un par de lineas dentro de la hoja de estilos CSS.

Ambos códigos se pueden copiar desde aqui: Maestros del web: Aprendamos de los noruegos y digamos adiós al IE6.

Banners para Retro Invaders, mi planet de retro informática

He creado algunos banners para Retroinvaders.

Por si no sabes de que se trata: es una web donde se agrupan los blogs que tratan sobre ordenadores antiguos de 8 bits, 16 bits, Spectrum, Commodore 64, Amstrad, MSX, Amiga, Atari, Apple, PC XT, consolas Nintendo, Sega, Sony, Aquarius, Oddysey, Wonderswan, desarrollo de remakes, demakes, emuladores, análisis, noticias y un laguísimo etc. y genera una nueva semilla RSS para tener todos los artículos en un solo espacio.

En la página de suscripción del retro planet estan los correspondientes códigos HTML de cada uno y se pueden usar libremente.

Banner de Retro invaders Banner de Retro invaders Banner de Retro invaders Banner de Retro invaders
Banner de Retro invaders Banner de Retro invaders
Banner de Retro invaders Banner de Retro invaders

Religulous, El documental del ridículo de la religión

Vía El retorno de los charlatanes me entero de Religulous, un documental del cómico Bill Maher.
El nombre (Religulous) es un juego de palabras juntando las palabras religión y ridículo en inglés, digamos que aunque me he reido mucho con este documental, muchas veces parece una tragicomedia...
Realmente qué ingenua que puede ser la gente siguiendo a tipos que son chantas de pies a cabeza. Luego los trucos para ¡¡saltarse el Sabbath son una risa!! y el cierre es muy bueno.

El objetivo de este documental es demostrar no sólo lo absurdo que son las creencias religiosas sino, sobre todo, su enorme peligro y el costo que están teniendo los fanatismos en vidas humanas, igual en Irak que en Madrid, Nueva York, Gaza, Israel, Londres, Holanda, etc.
Recomendable no sólo para ateos, sino para los que no lo son, especialmente si les ha parecido que el "bus ateo" es más ofensivo que la pederastia sacerdotal o los terroristas suicidas.


Para una buena calidad mejor descargarse la película directamente: Torrent Religulous subtitulado español), ya que el video que puse aquí tiene un problema que sólo permite ver unos 70 minutos... luego hay que esperar no se cuanto para seguir viendolo, pero yo volví a abrir el video en otra ventana y pude terminar de verlo.

Regiliculous, El documental del ridiculo de la religion

Cómo personalizar Blueprint CSS

Blueprint logotipoHace un tiempo hablé de Blueprint, y como dije en su día me resulta sumamente práctico usarlo para según qué proyectos.
Ahora estoy codificando el HTML y CSS en una web del tipo ideal para usar Blueprint, aunque me encontré un inconveniente ya que el diseño es de 980 pixels de ancho y Blueprint está pensado para un ancho de 960 pixels, así que tras una muy pequeña búsqueda llegué a una web que permite generar un "Blueprint a medida" y descargarlo.
Simplemente hay que ingresar el ancho de las columnas, margen, cantidad de columnas y la aplicación nos genera un nuevo juego de estilos de acuerdo a lo que necesitamos. Yo conseguí los 980 pixels usando 22 columnas de 35 pixels de ancho :)

200 años de Charles Darwin

Hoy se cumplen 200 años del nacimiento del padre de la teoría de la evolución: Charles Darwin.
Su libro El origen de las especies revolucinó el mundo en su época, y lo sigue haciendo en la actualidad ya que hay corrientes religiosas que siguen negando la evolución.

En el Museo de Ciencias Naturales de Londres no pude evitar hacer esta foto con el maestro :)

Darwin en el museo de Ciencias Natural de Londres

El origen de las especies

El origen de las especies (The origin of species, en inglés) o más exactamente El origen de las especies mediante la selección natural o la conservación de las razas favorecidas en la lucha por la vida, es un libro escrito por Charles Darwin (1809-1882), publicado el 24 de noviembre de 1859 (John Murray, Londres); agotó los 1.250 ejemplares impresos en el primer día. En él, expuso por primera vez sus ideas sobre la selección natural y la teoría de la evolución.
Esta obra es un trabajo fundamental dentro de la historia de la ciencia y la biología. En él, Darwin argumenta largamente su teoría sobre cómo los organismos evolucionan gradualmente por medio de la selección natural, presentando evidencias de su teoría acumuladas en su viaje en el HMS Beagle en los años 1831-1836. Su teoría se oponía ampliamente a las teorías vigentes en su época, creacionismo y catastrofismo.
El libro puede ser leído por no especialistas. Aunque las ideas presentadas constituyen la base de la biología moderna continúan siendo controvertidas para ciertos grupos religiosos quienes se apoyan en una interpretación literal de textos religiosos a favor de explicaciones creacionistas.

CodeIgniter, primeros pasos con este framework PHP

Por sugerencia de LordTaran (que hace poco se ha decidido a incursionar en CodeIgniter) voy a escribir algo de CI. Hoy cuento cómo y porqué uso este framework PHP.

De CakePHP a CodeIgniter

Con CakePHP fue mi primer contacto con esto de los frameworks, y la verdad es que ¡me encantó! Después de un par de años programando en PHP "a mano", de repente poder hacer las cosas de forma mucho más fácil y rápida fue un gran avance para mi, pude hacer aplicaciones que antes me hubiera tomado muchísimo más tiempo y tampoco hubieran quedado tan bien.
Pero no todo fue "maravilloso", CakePHP exige aprender a hacer las cosas a su manera y es casi otro lenguaje. Sumado eso con el hecho de no tener tanta experiencia con PHP hizo que perdiera muchísimo tiempo para hacer algunas cosas a la manera de CakePHP.
Un día veo este comentario de Rasmus Lerdorf (creador de PHP) que hablaba sobre los frameworks PHP (no le gustan) y de CodeIgniter como el más ligero y con mejor rendimiento. Así que como tantos otros programas, librerías, efectos y plug-ins que pruebo continuamente, decidí probar este framework.
Lo primero que hice fue hacer los ejemplos de los video-tutoriales, que me gustaron.

CakePHP vs CodeIgniter

En esos días había puesto en marcha la primer versión de Retro Invaders (mi proyecto de planet de blogs de retro informática), así que para hacer algo concreto con CI decidí convertir el código del Retro Invaders hecho con CakePHP, fue más fácil de lo que pensaba aunque a base de "chapucear" un poco (sobre todo por desconocimiento de CI).

Rasmus Lerdorf - PHP - CakePHP - CodeIgniter

Al final logré tener dos aplicaciones casi gemelas, una con CI y otra con CakePHP 1.1xxx. Y no resistí hacer comparaciones de rendimiento y velocidad de ambas versiones, sobre el mismo servidor y con los mismos datos. El resultado fue que CI era el doble o triple más rápido que CakePHP, tampoco me tomo estas pruebas muy a pecho, porque seguro que en ambos casos se podría optimizar de diferentes maneras.
A partir de allí fui haciendo cada vez más cosas con CI y cada vez sintiéndome más y más cómodo con estas librerías. Por momentos extraño ciertas facilidades que da CakePHP, pero de a poco fui creando mi flujo de trabajo y ya llevo varios proyectos hechos con CodeIgniter, por lo que puedo decir que ahora es mi "framework php oficial".

CodeIngiter 1.7.1

De paso aprovecho para anunciar que se ha publicado una nueva versión: CodeIgniter 1.7.1 Released
Básicamente: muchas nuevas funciones, mejoras, bugs solucionados y una actualización de seguridad para la validación de formularios. Listado completo de esta actualización: Change Log Version 1.7.1

 
#