Imported contents: kraptor_final_apr_03_2004.tar.gz
[kraptor.git] / extras / doc / es / ia.txt
blobc8e0ba84fe5505e1c4273d8576cc56b9dd15840e
1 Kraptor - Sistema de Inteligencia Artificial
4 Por Kronoman
5 En memoria de mi querido padre.
7 --------------------------------------------------------------------------
8 Este documento describe como funciona el sistema de inteligencia artificial.
11 Espacio fisico en disco:
13 Los archivos de IA son _objetos binarios_ (DAT_BINARY) 
14 con la propiedad tipo "IA" (mayusculas), guardados en el archivo de "grabber", "ia.dat", 
15 usando compresion _individual_ de objetos.
16 Recomiendo que cada objeto tenga el prefijo ia_[nombre]
17 y que su nombre no supere los 256 caracteres, ya que sera la ID
18 para identificarlo al cargar las clases de enemigos.
19 Ejemplo: ia_agresiva, ia_simple, etc...
21 --------------------------------------------------------------------------
22 Mantenimiento en RAM:
24 Al principio del juego, se carga el archivo krap_ia.dat,
25 y entonces, se crea un cache donde van todas los scripts,
26 ya traducidos de binario al formato de la plataforma.
27 Todo esto se hace con memoria dinamica y listas enlazadas.
28 Luego, cada vez que se carga una clase de enemigo,
29 se le asigna un puntero a la IA correspondiente en la lista 
30 enlazada previamente cargada.
32 Es decir:
33 - cargar krap_ia.dat
34 - copiar y traducir los scripts a una nueva lista
35 - descargar krap_ia.dat
36 - cargar clase de enemigos, y para cada clase, asignarle
37   el puntero a la IA asignada.
39 --------------------------------------------------------------------------
40 Del lenguaje de scripting:
42 Las instrucciones se escriben en un archivo de texto plano, 
43 luego se pasan por el compilador, el cual las convierte 
44 a un fichero semi-binario (es un archivo de texto con formato simple), 
45 el cual es agregado usando "grabber" al archivo krap_ia.dat
46 Lo interesante es que el "lenguaje" para el script 
47 contiene UNA sola instruccion, ya que es muy especializada
48 para el manejo de los enemigos, la cual contiene
49 el movimiento por ciclo del enemigo (30 ciclos = 1 segundo).
51 NOTA: el "compilador" es extremadamente BASICO, por lo tanto
52       NO EXISTEN COMENTARIOS, NO PONER ESPACIOS EXTRA, 
53       NI NADA "RARO"; SOLO PONER LAS LINEAS CON LA SINTAXIS
54       ESPECIFICADA!
56 La sintaxis para el codigo de texto plano es la siguiente:
57 [x1],[x2],[y1],[y2],[weapon],[loop]
59 Donde:
60 [x1],[x2] son rangos de movimiento en X para el enemigo
61           por ejemplo, 1,2 indica un movimiento entre +1 y +2
62           -5, 5 indica un movimiento entre -5 y +5 (-4,-3...0,1,etc)             
63 [y1],[y2] funcionan igual a [x1],[x2], pero en el eje Y
64 [weapon] indica que el enemigo debe disparar ese numero de clase de arma.
65          un valor de -1 indica NO disparar.
67 [loop] indica la cantidad de veces que se debe repetir esta accion
68        la duracion de cada instruccion es 1/30 de segundo, asique
69        un valor de 30, repetira la accion 1 segundo completo.
70        
71 Luego, el texto plano se pasa por un compilador, el cual
72 interpreta la secuencia y la salva a disco en un archivo semi-binario.
73 El archivo semi-binario tiene el formato de texto ASCII, donde
74 se colocan los numeros separados por comas, todos en una sola linea larga,
75 lo que permite parsearlo en tiempo de ejecucion facilmente.
76 ej:
77 1,2,3,4,5,6,7,8,9,0,1,2 [...]
78 --------------------------------------------------------------------------