Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

¿Así que quieres hacer videojuegos sencillos?

–La trampa de los game developers principiantes–

Cuenta la leyenda que un día un reportero entrevistó a un escultor muy famoso, cuando le preguntó como hacía sus impresionantes estatuas el artista contestó: -“El primer paso para hacer una escultura es conseguir una piedra, una vez que la tienes tomas las herramientas, le quitas todo lo que sobra y ya tienes tu escultura”.

desmotivacional

El tema de esta entrada es sobre eso que algunos llaman ‘juegos sencillos’ y lo escribo a petición de uno de mis followers de twitter que le interesa el desarrollo de videojuegos y a cualquier otra persona que se interese en entrar en el desarrollo de videojuegos pero que le da miedo por cualquier razón personal. Para muchos yo no soy el indicado para hablar de esto porque no soy un ‘PROOOOOO’ de ‘la industria’ pero tengo suficiente experiencia en el infame mundo de los programadores autodidactas como para opinar. Para empezar, hay dos motivos por los que un desarrollador quiere hacer eso que llaman juegos sencillos y son el miedo y la falta de interés. Por ahora vamos a ignorar a la gente que no le interesan los videojuegos y solo quiere pasar una materia de programación y me voy a centrar en los que les da miedo esto de programar.

Primero vamos a ver ese concepto de sencillo, para un pájaro es sencillo volar, para un pez es sencillo nadar, para un atleta es sencillo correr los 100 metros con obstáculos, para un norteamericano es sencillo hablar inglés y para un programador de videojuegos puede ser sencillo hacer un juego X. El punto es que algo puede ser muy sencillo o muy dificil dependiendo de las capacidades que uno tenga. Por ejemplo para mi puede ser secillo hacer un código para desplegar el modelo en 3D de un rostro humano pero crear un rostro humano en 3D que resultara agradable a los jugadores me sería muy dificil porque no tengo conocimientos de anatomía y proporciones estéticas mientras que a un experto en las artes plásticas tal cosa le resultaría muy sencilla. En todo caso, lo primero que uno tiene que ver es con que habilidades cuenta, o por lo menos cuales son las áreas que mas le interesan.

El juego mas sencillo como por ejemplo adivinar un número del 1 al 5 puede ser un verdadero reto para alguien que no ha programado en toda su vida. Por otro lado, muchos principiantes creen que solo porque un juego fue hecho hace décadas y no tiene gráficos avanzados es fácil de hacer. ¡Gran error! Aún un humilde pacman cuenta con algoritmos de inteligencia artificial que la mayoría de los ingenieros en computación ni siquiera han escuchado nombrar. Mi consejo para todos los que se quieren iniciar en el desarrollo de videojuegos de manera independiente es que primero obtengan un mínimo de habilidades generales que pueden aprender sin problemas en tutoriales de internet. Estas habilidades mínimas serían por ejemplo hacer programitas del tipo ‘hola mundo’ en cualquier lenguaje y sistema operativo vigente en la época en que viven; poder hacer dibujos mas o menos reconocibles con software de diseño gráfico (aunque sea el Paint); jugar con cualquier editor de sonido de uso libre como el audacity (sonido) o el hydrogen (música). Una vez que sean capaces de hacer un programa que pueda leer y desplegar los monitos que hicieron en el software de dibujo y reproducir los sonidos que crearon en los editores de audio ya estarán en posición de buscar cual es para ustedes el juego mas sencillo de hacer. No puedo detallarles como llegar a este punto, pero les aconsejo que lean todo lo que puedan sobre el lenguaje de programación, y los editores de gráficos y sonido, así como todo lo que necesiten saber para que el programa que muestre imagen y sonido funcione.

Ahora bien, aquí es donde uno decide que juego es ese juego sencillo que van a poder hacer. Puedo asegurarles que una vez que hayan terminado ese programita que despliega ruidos y dibujos sus habilidades van a estar desbalanceadas. Algunos de ustedes les va a interesar mas el funcionamiento interno de la computadora y habrán encontrado por cuenta propia mas información técnica de su hardware e incluso unos cuantos algoritmos, otros se habrán interesado mas por el dibujo y no solo habrán probado diversos programas de diseño grafico sino que incluso habrán practicado otras formas de arte tradicional y hasta habrán querido igualar la técnica de sus autores de comic y animación favoritos mientras que algunos mas les habrá interesado tanto el tema del sonido que incluso aprendieron como leer partituras y ya hasta habran logrado hacer sus propias composiciones musicales. Lo que hace la diferencia entre un desarrollador de videojuegos y otro es precisamente esa diferencia de intereses sobre el camino que decidió tomar. Lo mas importante es que la senda que hayan elegido haya sido porque realmente les guste hacer eso y no porque les haya dado miedo otro camino. Por ejemplo un artista que decidió dibujar porque eso es lo que le gusta va a crear mejores personajes que otro que decidió hacerse artista porque le daba miedo programar.


Ahora si: Elige tu juego sencillo.

Como discutimos al principio, un juego sencillo es aquel que tiene muchos elementos de las áreas que dominas y pocas de las que no sabes casi nada o no te interesan. Si lo que mas te gustó e investigaste fue la programación estarás en condiciones de hacer juegos de acción muy rápida pero que tengan pocos elementos artísticos, si tu punto fuerte es el arte podrás crear muchos mundos, personajes y animaciones aunque los juegos tendrán que ser mucho mas ‘apacibles’ que los que podría hacer el programador, y si lo tuyo es la música y el sonido te sorprendería saber que hay muchos juegos basados en ritmo que tienen una programación muy elemental y unos gráficos que en su mayoría solo están de adorno. Ahora veamos algunos ejemplos concretos:

Juego Sencillo para un programador:
Shoot’em Up!

matando moscas

Para un programador es relativamente facil hacer uno de estos juegos, en especial un juego como Galaga! (fotos) o Space Invaders. Estos dos juegos tienen de interesante que usan muy poco arte y que no tiene mucho detalle, como muestra se ve que todo el arte del Galaga no son mas que 5 sprites y unos cuantos puntos y lineas. Este tipo de juegos no necesitan de escenografías o pantallas móviles como en otros juegos mas avanzados y su física es lo bastante elemental para ser comprendida por un estudiante de secundaria. Puede que la parte mas complicada sea lograr que los insectos sigan una ruta definida por el programador pero fuera de eso todo son movimientos en linea recta y contacto de sprites.

Algo que deben saber a la hora de hacer uno de estos jueguitos es que deben de tener un mínimo de gusto por las matemáticas. De hecho es posible ver que un programador de videojuegos es un verdadero programador es por la manera como se lleva con las matemáticas. Cualquier persona que se dedique al desarrollo de videojuegos que niegue estos temas podrá ser cualquier otra cosa menos un programador. De hecho muchos de los comportamientos de los personajes controlador por el CPU son programados con base en cálculos matemáticos que aunque sencillos no dejan de ser cálculos. El primero que se me viene a la mente es el de hacer que una unidad corra directo hacia el jugador para tratar de estrellarse contra él. O conocer las ecuaciones básicas del movimiento con aceleración para lograr que las cosas lleguen a donde se supone que deben llegar. Aunque no es para asustarse, pues todo son matemáticas que se ven a nivel secundaria o preparatoria. Otro ejemplo de esto es el de saber algo de trigonometría basica para poder hacer rotaciones realistas y unidades que puedan moverse en otras direcciones además de horizontal y verticalmente.

Juego Sencillo para un Artista:
Aventura Gráfica

A primera vista pueden parecer muy elaboradas, pero una buena aventura gráfica tiene un nivel de programación casi inexistente si se le compara con la cantidad y calidad de los dibujos y animaciones que la componen. La única programación que una aventura gráfica necesita es la capacidad de detectar el lugar donde el jugador hace click con el ratón y el poder leer los archivos de imagen del disco y desplegarlos en pantalla. No hay algoritmos complicados de detección de colisiones o navegación ni físicas complicadas ni mucho menos se requiere de hacer código muy optimizado porque en las aventuras gráficas lo que predomina son los acertijos y la investigación. Incluso hay algunas aventuras gráficas muy buenas que solo necesitan de gráficos estáticos o con animaciones de muy pocos frames, texto y algunos menús que puedan ser operados con dos o tres botones como por ejemplo Snatchers de Konami. Por contra la cantidad de dibujos que son necesarios para hacer una aventura gráfica que sea interesante son muchos, pero si se usan algoritmos de compresión de imagen es posible hacer una buena aventura gráfica que mida apenas unas cuantas docenas de megabytes.

Juego Sencillo para un Músico:
Juego de Ritmo

Este tipo de juegos pueden parecer sencillos pero la verdad es que hacer un juego de ritmo que resulte entretenido requiere de buenos conocimientos musicales. A nivel programación solo hay que hacer un ciclo que cuente el tiempo y tome como buenas las entradas que ocurren dentro de ciertos intervalos permitidos. En cuanto a la parte gráfica estos juegos pueden reducirse a solo mostrar sprites que aparecen y desaparecen para indicar el tiempo en que deben de oprimirse los botones o animaciones sencillas que indiquen la secuencia de teclas que hay que oprimir en que momento; en estos juegos el elemento gráfico apenas si se usa para mantener informado al jugador. La parte dificil de estos juegos es que requieren cierto conocimiento musical de ritmos, compaces, tiempos y otros términos que la gente que estudia estas cosas les puede explicar mejor (yo solo soy un programador de ensamblador). Un desarrollador inteligente compondría una serie de canciones que tuvieran la misma cadencia para poder usar las mismas secuencias de teclas con todas ellas. Por cierto, el archivo de música mas apropiado para hacer uno de estos juegos es el MIDI.

Algunos juegos musicales van mas allá de reproducir una canción y leer botones e incluso usan una estructura de datos similar a un arbol para acortar las canciones a los jugadores torpes e interpretar partes ocultas de las composiciones a los jugadores que tengan mas ritmo. Una cosa interesante de este tipo de juegos es que tanto la estructura de arbol como el código para determinar si los botones entraron en el orden y tiempo adecuado son exactamente las mismas que se usan en los juegos de peleas para poder detectar las secuencias de movimientos especiales sin interrumpir la accción de las peleas.

Una Nota final sobre los juegos sencillos

Ya para terminar me gustaría dejar claro algo sobre eso que algunos llaman juegos sencillos. Un consejo que he visto que varios prooooo de la industria le dan a los principiantes es el de que comiencen haciendo juegos sencillos que puedan terminar. Este consejo es muy bueno, el problema es cuando un desarrollador ha dejado de ser un principiante para convertirse en prooooo y sigue haciendo esta clase de jueguitos sencillos. Y con eso de PROOOOOO me refiero a la tan mal usada palabra ‘profesional’. No voy a cuestionar la habilidad de ningún desarrollador pero al menos yo considero que en el momento que alguien recibe dinero por su trabajo ya no puede seguir haciendo esta clase de jueguitos “sencillos”. He visto gente que recibe un salario fijo por trabajar haciendo juegos y da pena ver como a pesar de contar con presupuestos millonarios, hardware de desarrollo muy exclusivo y contratos de licencia con verdaderas empresas de videojuegos lo único que pueden hacer son jueguitos que no le llegan a los antiguos juegos de la era de los 16 bits pero que necesitan el hardware mas actual para poder funcionar. Realmente da pena ir a una tienda de videojuegos y ver como hay juegos muy buenos que incluso son mas baratos que las porquerías de aficionado que hacen estos studios. Si se tratara de juegos independientes y no lucrativos (lo que los japoneses llaman juegos doujin) no habría problema; pero me enfurece ver gente que no solo cobra un sueldo por hacer esos jueguitos de mierda, sino que encima van por el mundo dando conferencias en las que les dicen a los asistentes en su cara que no son dignos ni de pisarles la sombra. Lo que estos PROO no saben es que cada vez que ellos se burlan de un ingenuo estudiante que se acerca a querer trabajar con ellos, un gamer comenta en algún website de videojuegos que sus juegos apestan. Por fortuna la selección natural de Darwin también aplica a las empresas y si no cambian esto van a acabar como los de esa oficina de Santa Fe donde hace unas horas se vio a sus empleados llevándose sus cosas en cajas de cartón. No tengo pruebas de nada, pero a juzgar por las noticias, los chismes en los foros y un interesante delirio que uno de sus programadores subió a internet, muy probablemente lo que ocurrió es que se los acaba de cargar il Pagliaccio

Anuncios

abril 12, 2011 - Posted by | Uncategorized | , ,

3 comentarios »

  1. Muy interesante el blog! Felicitaciones!!

    Lo conocia desde hace un tiempo, pero hoy me puse a recorrerlo y leer distintos articulos. Me gusta ver como trabaja todo en bajo nivel, y comparto tu criterio en muchas cuestiones!

    Espero ke sigas con el blog por mucho tiempo mas! Tiene mucho valor leer las cosas directamente del puño y letra de kien las comprende! A veces cansa ver tanto copy-paste en la web! =)

    Comentario por salvador | mayo 16, 2011 | Responder

  2. Te felicito por este excelente articulo, dices absolutamente toda la verdad, en especial de aquellos imbeciles que se sienten “PROFESIONALES” por hacer porquerias super sencillas en java o flash. Es bueno tambien programar a bajo nivel pero en cierto grado, porque por ejemplo, programar un juego en emsablador puede acabar en frustracion!, esto si es solo para PROS, pero mientras se adquiere conocimientos de “UN VERDADERO PROFESIONAL” es mejor ir haciendo juegos en alto nivel en lenguajes como Ruby o Python.

    Comentario por Robinson | mayo 30, 2011 | Responder

  3. eiiii muy buenooo pues yo ando en busqueda del aprendizaje del desarrollo de videojuegos y me gusto mucho lo q redactaste :D… gracs por el apoyo amigo

    Comentario por ZerOo Peña Rashid | junio 27, 2012 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: