Foros - Stratos

Stratos => Proyectos => Mensaje iniciado por: rrc2soft en 06 de Agosto de 2004, 11:41:21 AM

Título: Portalengine - De Vaporware A Alphaware
Publicado por: rrc2soft en 06 de Agosto de 2004, 11:41:21 AM
 Hola a todos!

Despues de estar estos meses dandole a la tecla durante casi todo mi tiempo libre, al final he conseguido que mi engine de juegos de rol (con el que llevo en varias versiones... 8 anyos?) sea minimamente jugable. Para celebrarlo (y tambien celebrar que en unas horas vuelvo a Espanya de vacaciones  (uoh) ), he sacado una version alpha que incluye una pequenya demo jugable (alpha, por supuesto  ;)  ). Sus caracteristicas son:
Que la disfruteis!

EDIT: Se me olvidaba, el link a la pagina  :rolleyes:
www.rrc2soft.com
Título: Portalengine - De Vaporware A Alphaware
Publicado por: manko en 06 de Agosto de 2004, 12:15:47 PM
 Asi por encima me parece muy interesante y me estoy leyendo los dos archivos sobre compiladores e interpretes, buen trabajo, me interesa ese tema.

¿ Habeis usado un Lex y Yacc para crear un compilador de vuestro lenguaje script ?

Título: Portalengine - De Vaporware A Alphaware
Publicado por: manko en 06 de Agosto de 2004, 12:30:21 PM
 otra preguntilla:

Teneis un interprete para el guión del juego, verdad. Ese interprete construye las instrucciones adecuadas para que el motor el juego las entienda: entra dialogo(@pascual,'tal') y sale ( hablar(0,'tal...') ) , ¿entonces teneis otro interprete para el motor? que dado un guión de texto adecuadamente escrito realice ya ( printf() , u lo q sea en C ) .

¿es asi o lo he entendido mal?
Título: Portalengine - De Vaporware A Alphaware
Publicado por: rrc2soft en 09 de Agosto de 2004, 05:53:22 PM
 Precisamente el compilador no lo hemos desarrollado nosotros, sino que hemos cogido el Innerfuse Pascal Script  ;) . De todas formas: el compilador primero se encarga de pasar el lenguaje pascal a "codigo maquina" (usando la libreria ifps3comp) que incorpora una seccion de datos (como las cadenas) y una seccion de codigo - pero no se si el autor ha empleado (o se ha apoyado en) lex y yacc para conseguirlo. Luego, usando el interprete (una maquina virtual, localizada en la libreria ifps) se ejecuta el codigo - el cual incluye llamadas a procedimientos externos al script usando assembler puro y duro.

El sistema de ejecucion del innerfuse funciona mas o menos de la siguiente forma:


 (* Recoge los "handles" de nombres y crea un semaforo *)
 RuiDat := Pnj_Dev_Nombre('Rui');
 WolvDat := Pnj_Dev_Nombre('Wolv'); // OJO no recoge el avatar (lo que nos interesa :-P)
 BugDat := Pnj_Dev_Nombre('Bug');
 Sem_Crear(Sem);
 (* ... *)
 Comp_Mirar_A(RuiDat,DIR_ARRIBA);
 Pnj_Dialogo_A(RuiDat,'Bueno, ya estoy aqui. Una hora para encontrar este lugar...');


Por ejemplo, para RuiDat := Pnj_Dev_Nombre('Rui');, el engine primero pone en la pila el parametro ('Rui'), y luego llama a una instruccion que se encarga de ejecutar un procedimiento externo al engine (Pnj_Dev_Nombre, que devuelve el "handle" asociado al nombre 'Rui'). Luego el engine coge el resultado de la funcion y lo guarda, para que en la siguiente instruccion se asigne a la variable RuiDat...

...es decir: El compilador se encarga de ejecutar los procedimientos necesarios (y todo lo demas) en una sola pasada. Ademas, al no ser interpretado (ya que se compila antes de la ejecucion, como si se creara un .EXE), no tiene que analizar cadenas, por lo que va mas rapido.

PD: No se si he contestado a tu pregunta, si no es asi, me lo dices  ;)