4 Comenzado en Agosto 2002
\r
5 En memoria de mi querido padre
\r
7 Engine de juego de aviones/naves
\r
8 Hecho en C, con Allegro y DUMB
\r
10 Kraptor: especificaciones tecnicas
\r
11 ----------------------------------
\r
14 600x4000 [grilla de 40x40]
\r
15 Matriz de 15x100 indica si explota o no el fondo, un numero > 0 indica
\r
16 que esa area es explosiva, al tocar un disparo esa area, descuenta del mapa
\r
17 y finalmente explota, junto con los adyacentes.
\r
19 Matriz de 15x100 tiene un numero, > 0 indica que debe aparecer un enemigo
\r
20 de esa clase-1, 0 = neutro. O sea, por ejemplo: el numero 1 indica que
\r
21 debe aparecer un enemigo de clase 0, 2 de clase 1, etc (o sea, n-1, siendo 0 neutro)
\r
23 NOTA: usar siempre compresion individual de objetos en los datos, no global,
\r
24 ya que ralentiza mucho el tiempo de carga.
\r
27 -------------------------------------------------------
\r
29 Datos principales del programa
\r
32 Contiene los datos principales del juego, tales como enemigos,
\r
33 jugador, armamento, sonido, pirotecnia, premios y secuencia de niveles.
\r
34 Ademas, debe contener los datos opcionales mencioados
\r
35 en los scripts (tales como sprites, sonidos, etc).
\r
36 NO contiene los archivos de cada nivel independiente.
\r
40 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
41 Objetos sueltos necesarios:
\r
42 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
45 Font para dibujar el 'hud', es decir la informacion
\r
46 de puntaje y cantidad de balas.
\r
47 Si no existe, se usa el font de la BIOS
\r
48 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
51 Paleta de 256 colores usada durante TODO el juego
\r
52 Los enemigos, explosiones, particulas, fondos, etc DEBEN ajustarse
\r
53 a esta paleta. Esto NO afecta las cinematicas o los menues.
\r
54 SI afecta a la imagen de fondo del shopping
\r
55 RESPETAR LAS MINUSCULAS EN EL NOMBRE, pal_game!
\r
56 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
59 Imagen de fondo del shopping
\r
60 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
64 Sprites de 40x40 para quemar el fondo.
\r
65 Deben representar un hoyo de quemazon, en escala de grises
\r
66 inversa, el color negro sera transparente, y los tonos
\r
67 de blanco indican profundidad de quemado, siendo 255,255,255(RGB)
\r
69 Deben estar hechos para poder ser rotados arbitrariamente
\r
70 al azar (para dar mas variedad)
\r
71 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
73 Sprite de unos 100x100 que sera usado para generar el efecto de humo.
\r
74 Esto es _opcional_, ya que todavia no funciona muy bien el efecto.
\r
75 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
80 Sprites de explosiones, todas del MISMO tama~o, usadas para renderear
\r
82 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
87 Sonido de explosiones.
\r
88 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
93 Chispas que las naves arrojan al explotar (bolitas de fuego peque~as).
\r
94 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
97 Objeto de texto que contiene un script que indica la sucesion de niveles
\r
98 del juego de manera descriptiva como un archivo de configuracion de Allegro
\r
99 Se van leyendo las secciones [NIVEL_x] hasta que no se encuentra la proxima,
\r
100 con lo cual se asume que el juego termino (el jugador gano).
\r
101 Las cinematicas se pueden suprimir colocando valor `null` (sin las `)
\r
104 La seccion [GAME_INTRO] contiene la cinematica cuando el jugador inicia un juego nuevo.
\r
105 La seccion [GAME_OVER] contiene la cinematica cuando el jugador pierde.
\r
107 Comienza a contar de nivel 1
\r
108 Todo lo que tiene # es comentario
\r
110 Ejemplo (script de 2 niveles):
\r
116 cine = gameover.dat
\r
120 titulo = Primera Batalla
\r
122 # Explicacion, hasta 256 caracteres, usa word-wrap
\r
123 texto = Te aproximas al primer combate, buena suerte!
\r
125 # Cinematica de comienzo de nivel
\r
126 cine_in = intro01.dat
\r
128 # Esto especifica el nivel conteniendo datos de juego
\r
129 level_dat = level1.dat
\r
131 # Cinematica de fin de nivel
\r
134 # Referente al efecto climatico, es opcional
\r
135 # densidad del clima en particulas 0..300
\r
137 # tipo de clima: 0 = lluvia, 1 = nieve
\r
139 # direccion de caida: 0 = izq, 1 = der
\r
146 # Explicacion, hasta 256 caracteres, usa word-wrap
\r
147 texto = Este es el final, mi unico amigo!
\r
149 # Cinematica de comienzo de nivel
\r
152 # Esto especifica el nivel conteniendo datos de juego
\r
153 level_dat = level1.dat
\r
155 # Cinematica de fin de nivel
\r
158 # Al buscar el 3er nivel, el juego finaliza, y va a la tabla de puntos.
\r
160 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
163 Esto contiene una definicion de los sprites, armas y sonidos del jugador
\r
166 # Configuracion del jugador
\r
168 # Sprites del jugador izq,med,der
\r
169 # DEBEN ser del MISMO tama~o y contenidos en este mismo archivo DAT
\r
174 # dinero inicial con que cuenta al comenzar a jugar
\r
177 # bombas iniciales con que cuenta al comenzar a jugar
\r
180 # Referente a la reparacion de la nave en el shopping
\r
182 # Cantidad de unidades que da cada reparacion
\r
184 # Precio cada reparacion de la nave
\r
187 desc = Reparar el 10% de los desperfectos de la nave
\r
188 # Bitmap que representa la reparacion, de 116x124 preferentemente (se estirara)
\r
189 bmp = bitmap_reparar
\r
191 # Referente a la bomba especial de la nave en el shopping
\r
192 [JUGADOR_BOMBA_ESPECIAL]
\r
193 # cantidad de bombas de cada compra
\r
195 # precio de cada item de bomba especial
\r
198 desc = Bomba de pulso de energia
\r
199 # Bitmap que representa en el shopping, de 116x124
\r
201 # sonido de lanzamiento de la bomba (OJO, cuando explota, toca sonido de explosion; esto deberia ser un speech, tipo "bomb fire" o algo asi!)
\r
202 bomba_sonido = speech_bomb_fire
\r
204 # cantidad maxima que se puede comprar
\r
207 # Armamento disponible para el jugador (el arma 0 esta siempre y nunca se acaba)
\r
208 # Va de ARMA_0 hasta ARMA_x [x es un numero]
\r
210 # Referente al modo 'shopping' del arma
\r
211 # bitmap de 116x124 preferentemente (se estirara)
\r
212 arma = dibujo_del_arma_en_el_shop_bitmap
\r
213 # descripcion del arma para el shop: maximo 2048 caracteres
\r
214 desc = Descripcion del arma
\r
215 # descripcion corta para el HUD del juego: max 20 caracteres
\r
216 desc_short = Wpn #0
\r
217 # precio, cuidar que sea relativo a lo que 'gana' el jugador
\r
219 # cantidad de 'balas' por paquete de compra
\r
221 # cantidad maxima de 'balas'
\r
222 cant_ammo_max = 999
\r
224 # Referente al disparo del arma en si
\r
225 spr = sprite_del_disparo
\r
226 snd_0 = sonido_al_disparar_o_null
\r
227 snd_1 = sonido_al_impactar_o_null
\r
235 # Estela del disparo, esto es opcional (si no aparece, no abra estela)
\r
243 est_color_r_min = 128
\r
244 est_color_r_max = 255
\r
245 est_color_g_min = 0
\r
246 est_color_g_max = 0
\r
247 est_color_b_min = 0
\r
248 est_color_b_max = 0
\r
249 # escala aceleracion: 100 = 0.01
\r
254 # tipo de particula
\r
257 # radio de la particula (si es aplicable)
\r
260 # usar transparencia? (-1 = si, 0 = no)
\r
263 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
266 Esto contiene una definicion de los enemigos asi como de sus
\r
267 tipos de armamento, y la IA que utilizan (Ver ia.txt).
\r
270 # clases de enemigos
\r
274 # peso del enemigo (sirve para proporcion de explosion e impacto de colision)
\r
277 # string de ID de programa en bytecodes de IA (ver ia.txt)
\r
279 # la IA debe comenzar en un punto arbitrario del bytecode (al azar = -1, default: 0 = no)
\r
282 # este flag indica que el enemigo es un BOSS, de esa manera, el enemigo
\r
283 # no se va NUNCA hacia abajo de 1/2 de pantalla (como hacen los boss)
\r
284 # (default 0 = no; -1 = si)
\r
287 # sprites de animacion,
\r
288 # se pueden obviar; hay un maximo de 4 (0..3)
\r
289 # si utiliza uno solo, se puede poner spr = dibujo y listo
\r
295 # delay de animacion de los sprites (30 = 1 segundo)
\r
298 # dinero que paga matar a este enemigo
\r
301 # premio (indice del premio) que suelta este enemigo (-1 = ninguno)
\r
303 # probabilidad de soltar el premio al morir (0..100 %)
\r
308 # dibujo del disparo
\r
310 # sonido al disparar
\r
311 snd_0 = sonido_al_disparar_o_null
\r
312 # sonido al impactar
\r
313 snd_1 = sonido_al_impactar_o_null
\r
318 # duracion del disparo en tics (30 = 1 segundo)
\r
320 # golpe del disparo
\r
325 # Estela del disparo, esto es opcional (si no aparece, no abra estela)
\r
333 est_color_r_min = 128
\r
334 est_color_r_max = 255
\r
335 est_color_g_min = 0
\r
336 est_color_g_max = 0
\r
337 est_color_b_min = 0
\r
338 est_color_b_max = 0
\r
339 # ( escala aceleracion: 100 = 0.01)
\r
344 # tipo de particula
\r
347 # radio de la particula (si es aplicable)
\r
350 # usar transparencia? (-1 = si, 0 = no)
\r
353 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
356 Este script configura los premios.
\r
357 Ver el archivo premio.txt para mas informacion.
\r
359 -------------------------------------------------------------------------
\r
361 Nota: los archivos de texto para presentar en pantalla
\r
362 (ej: help, about) deben estar codificados en UTF-8
\r
363 para ello, usar el utilitario de Allegro "textconv.exe"
\r
367 Esto contiene el fondo del menu y otros items utiles.
\r
369 main_menu_bmp <- bitmap de 640x480 que es el fondo del menu
\r
370 main_menu_pal <- paleta de 256 colores del menu
\r
371 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
374 Es un archivo de texto guardado tal cual (modo binario)
\r
375 para mostrar en el menu Ayuda / Ayuda...
\r
376 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
379 Es un archivo de texto guardado tal cual (modo binario)
\r
380 para mostrar en el menu Ayuda / Acerca de...
\r
381 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
384 Es una imagen de tipo BITMAP, que se mostrara en Ayuda / Acerca de...
\r
385 ajustarse a main_menu_pal!
\r
386 Tama~o: 144x168 pixels!
\r
387 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
389 -------------------------------------------------------------------------
\r
394 Esto contiene el fondo (bitmap) y su correspondiente matrices de mapas
\r
395 para los diferentes niveles de dificultad.
\r
396 Se van cargando dinamicamente a medida que avanza el juego.
\r
400 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
403 Esto es la imagen del juego, de 600x4000 pixels.
\r
404 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
407 Informacion binaria (matriz) con los sectores explosivos del mapa.
\r
408 0 indica sector no explosivo, > 0 indica energia de ese sector,
\r
409 al llegar a 0, explota y queda 'quemada' el area.
\r
410 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
411 enem_g -> opcional, dificultad unica
\r
412 enem_g_0 -> dificultad FACIL
\r
413 enem_g_1 -> dificultad MEDIA
\r
414 enem_g_2 -> dificultad DIFICIL
\r
416 Informacion binaria (matriz) con las posiciones de aparicion de enemigos.
\r
417 Contiene 0 donde no aparecen enemigo, > 0 donde aparecen enemigos.
\r
418 El numero indica el indice de clase de enemigo a aparecer, y se le
\r
419 restara 1, asique enemigo 1 en enem_g representa ENEMIGO_0 en
\r
420 las clases de enemigos.
\r
421 Nota, el engine busca el enem_g_[dificultad]
\r
422 Si no existe, intenta obtener enem_g, y si no existe, aborta el programa.
\r
423 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
426 Musica IT, XM o S3M, opcional, se escucha de fondo durante el nivel. :^P
\r
427 En formato IT, XM o S3M, para mas info, ver la documentacion de DUMB
\r
428 (como cargar musica desde un DAT)
\r
429 Debe ser un objeto binario de tipo "IT ", "XM " o "S3M "
\r
430 Los espacios adicionales no son necesarios, el grabber los pone solo.
\r
431 La musica debe durar aproximadamente 133 segundos (2 mins 13 segs)
\r
432 porque es lo que dura un nivel aproximadamente (4000/30 pixels x segundo)
\r
433 -------------------------------------------------------------------------
\r
437 Esto contiene las cinematicas del juego, se cargan dinamicamente a
\r
438 medida que se necesitan.
\r
440 NOTA: el 'lenguaje' usado en el script de cinematicas esta explicado
\r
441 en el archivo cinemati.txt!!
\r
445 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
446 El unico contenido obligatorio es el objeto de texto (TXT)
\r
447 llamado 'guion_txt' que contiene los comandos
\r
448 especificados en cinemati.txt para poder mover la cinematica
\r
449 NOTA: se buscara el guion acorde al lenguaje actual primero,
\r
450 por ejemplo, si es espa~ol, se buscara guion_txt_es primero,
\r
451 y si no existe, se usara guion_txt, y si no existe,
\r
452 se intentara cargar guion_txt_en, y si no existe, se ignorara
\r
454 O sea, para internacionalizar el juego, crear un guion_txt_es (espa~ol)
\r
455 y un guion_txt_en (ingles) y los demas que sean necesarios.
\r
456 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\r
457 -------------------------------------------------------------------------
\r