A PAck of classic GAMEs for BEnnugd

Started by DCelso, November 05, 2008, 12:03:38 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

QuoteEspero que sirva de algo, si no es para el proyecto, para cualquier uso.
je je, a mi ya me sirvió para revisar lo referente al uso de realloc y la gestión de memoria, gracias splinter, te doy un karma.


pd: se me ocurre que para que no existan problemas en cuanto a que el dcb y el prg...!!! se puede agregar primero una linea que compile como

nombre_arhcivo //con extención prg
ret = exec( _P_WAIT, "bgdc", 1, &nombre_archivo );
y luego el del bgdi
... por supuesto, esta linea se puede evitar, y además aumentar la velociada si se crea un bat que haga el dcb la primera vez que se ejecuta el juego, o si se distribuyen los dcb dentro de la carpeta del juego.
:)

es solo una idea, no le hagan mucho caso...
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

Claro que si, es posible, todo esto podria ser configurable o usar un comportamiento determinado... o si hay un exe ejecutar el exe, si hay un dcb el dcb y si hay un prg, compilarlo y ejecutarlo (todos estos projecto.extension)

Esto es un borrador, para poder tener algo simple, para arrancar con algo si se quiere implementar en el proyecto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

#303
Esta seria la idea.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

TYCO

RET me duelve -1, algún path no está bien programado.

ret = exec( _P_WAIT, "bgdi", 1, &args );

Y no habría que poner un ESPACIO detrás de BGDI??? es decir esto: "bgdi "???? o lo separa automáticamente???

Estaba buscando a ver si RET valía 3 y haber donde ponía el "hello word" y me he encontrado con eso.
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

#305
no, no hay que poner espacio, tenes que tener el bgdi en el path del sistema o en la carpeta del juego o ponerlo en la carpeta del apagame4b y cambiar la linea del exec, y poner en vez de "bgdi":

currdir + "/bgdi"

EDIT:
o

"../../bgdi"
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

TYCO

Con esto:
args[0] = game_name[option]+".dcb >Log.txt 2>Error.txt";
ret = exec( _P_WAIT, "../../bgdi.exe", 1, &args );


No consigo ver HELLO WORD en ningún sito ni un SAY que he añadido (no me crea los archivos LOG.TXT ni ERROR.TXT), y eso que en TEST.PRG he añadido esto:
import "mod_say";
import "mod_proc";

begin
    say("hello world MIO");
    exit ("hello world", 3);
end
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

#307
jejeje... eso no es posible...

ahi solo pasas 1 argumento que es:

game_name[option]+".dcb >Log.txt 2>Error.txt"

la redireccion es solo un "feature" del shell, pero el comando exec no ejecuta ninguna shell, ejecuta el proceso directamente, por lo que los ">" pasan como parte del argumento.

proba agregar este codigo como un juego mas:


import "mod_say";

private
i;
begin

    for(i = 0; i < argc; i++)
        say ("argv["+i+"]="+argv[i]);
    end
end

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

tyco

intenta poner
"bgdi.exe"
(si usas windows)


Splinter, en windows si no pones el archivo con extención exe sale el mensaje:

Quote> Executing: C:\Archivos de programa\ConTEXT\ConExec.exe "C:\Bennu\bin\bgdi.exe" nuevo_editor

1852
visualizador_de_graficos: don't exist or isn't version 7 DCB compatible
> Execution finished.

el 1852 es el código que retorna (obtenido con say), y el mensaje aparece en la consola

si existe el dcb lo compila sin necesidad de pasarlo al bgdi, es extraño, pero muy interesante...  ;)
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

No hace falta poner .exe, ya lo probe.

No entiendo lo que decis el conexec.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

#310
vamos de nuevo ok...
tengo las librerìas de hace 3 dìas,

tengo un còdigo que dice asì:

[code language="bennu" options="singleline"]exec(_P_NOWAIT, "visualizador_de_graficos", 0, NULL);[/code]

y me escribe en la consola:

Quote> Executing: C:\Archivos de programa\ConTEXT\ConExec.exe "C:\Bennu\bin\bgdi.exe" nuevo_editor

visualizador_de_graficos: don't exist or isn't version 7 DCB compatible
visualizador_de_graficos: don't exist or isn't version 7 DCB compatible
visualizador_de_graficos: don't exist or isn't version 7 DCB compatible
> Execution terminated by user.

(por supuesto, el dcb no existe, pero el exe si)

si pongo

[code language="bennu" options="singleline"]exec(_P_NOWAIT, "visualizador_de_graficos", 0, NULL);[/code]

en la consola no escribe nada, y no solo eso, sino que funciona de maravilla (todo va bien)

____________   __________________    ______________     ___________________     _____________    _____
hice otra prueba: 

[code language="bennu" options="singleline"]say(exec(_P_NOWAIT, "visualizador_de_graficos", 0, NULL));[/code]

en la carpeta tenía el archivo: visualizador_de_graficos.dcb, y funcionó a la perfección, aunque el código que la función regresó fue el de abajo (lo de abajo es mi consola en el context).

Quote> Executing: C:\Archivos de programa\ConTEXT\ConExec.exe "C:\Bennu\bin\bgdi.exe" nuevo_editor

1896
1848
1852
> Execution terminated by user.

mi conclusión:

en linux funciona sin extención, en windows necesita la extención, de lo contrario busca el archivo con extención dcb, y si lo encuentra lo lanza sin necesidad de que le digas dónde está el intérprete (no me preguntes cómo, ni me veas raro, eso me sucede, en serio).


PD:visualizador_de_graficos es un exe creado con bennu, un dcb creado con bennu y un prg, todo está en la misma carpeta...

PD2: sería bueno que alguien más lo intente, para ver qué le da  ;)

pd3: en la consola aparecen 3 mensajes, porque ejecuto el exec 3 veces para ver qué pasa...

____________   __________________    ______________     ___________________     _____________    _____
hice otra prueba... resultados:

say(exec(_P_NOWAIT, "calc", 0, NULL));

funciona muy bien,

say(exec(_P_NOWAIT, "dxdiag", 0, NULL));

funciona muy bien

ante esto sólo se me ocurrió quitar el prg del "visualizador_de_graficos" y el dcb ...
pero me pasó lo mismo que antes, buscaba el dcb, y no ejecutaba nada, sólo enviaba el mensaje de que no encuentra el dcb...
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

SplinterGU

:P :P :P !!!

1) http://forum.bennugd.org/index.php?topic=562.msg7064#msg7064 en este post

Quote
Returns

INT
-1    - Error.
mode==_P_WAIT:    - The exit status of the executable.
mode==_P_NOWAIT:    - The process ID of the executable. This is not a ProcessID, it is a process ID of the operating system.

2) Si tenes el bgdi renombrado como "visualizador_de_graficos.exe" pero no tenes el dcb, no va a funcionar. Eso es basico del bgdi.
Lo que pongas como parametro de programa a ejecutar debe ser un ejecutable valido.
No es la funcion exec la que busca el dcb, sino el bgdi o bgdi renombrado.

No, no lanza ningun dcb.

Yo ya lo probe en windows (con wine) y lo acabo de volver a probar en un windows real... y funciona de maravillas como digo.

Repito:

a) Funciona sin extension.
b) Lo que lanzas deben ser ejecutables.
c) No lanza ningun dcb. Si intentas lanzar un dcb, no se ejecuta, por mas que este asociado al bgdi.
Que te funciono cuando tenias el dcb, es porque tenias tambien el .exe llamado igual que el dcb, y en realidad solo se estaba ejecutando el exe y no el dcb, el dcb es un requisito del exe, por eso cuando no lo tenes no funciona.

A ver, pensemoslo un poco detenida y tranquilamente, y repasemos las reglas de ejecucion basicas de programas de un sistema operativo (no es ninguna ciencia).

1) Los ejecutables solo se ejecutan si estan en el PATH del sistema (variable PATH) o si se les especifica el path donde se encuentran.
2) Los argumentos son todos aquellos parametros que les pasamos a un ejecutable, el delimitador de estos parametros es el espacio no "scapeado" (entiendase barra espacio '\ ' ) o no encomillado (entre comillas dobles)
Un parametro es un parametro, si ponemos 2 parametros como 1, no pretendamos ver 2 desde el ejecutable. Poner 2 parametros desde en un argv[] es como encomillarlos.
3) Los retornos de los programas son enteros numericos (errorlevel) de 0 a 255.
4) Las redirecciones son features de la shell, no son parte de la ejecucion. Desde un programa para capturar las redirecciones hay que trabajar sobre redireccionamiento stdout y stderr, mediante pipes, u otras tecnicas. (cosa que escapa ahora del api bennu)

Esos son basicamente los tips que ahora mismo se me ocurren.

Por otro lado, la string que la funcion exit de bennu pide como parametro, es simplemente una string que se escribe en el stdout, es como hacer un say. Y esta string no se puede obtener con la funcion exec, escapa a cualquier valor de estado de la ejecucion del proceso, es solo un output (say/printf/etc) del ejecutable.


Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Prg

en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

TYCO

Ya me ejecuta el TEST.dbc desde el menú, pero sigo sin ver HELLO WORD en ningún sito.

import "mod_say";
import "mod_proc";

begin
    say("hello world MIO");
    exit ("hello world", 3);
end



Añadí al código esto:
args[0] = game_name[option];
args[1] = ">Log.txt";
args[2] = "2>Error.txt";

El valor 3 si lo veo bien desde consola que RET = 3. Pero... ¿Dónde se mete el HELLO WORD? Nunca llego a verlo.
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

en la consola de ejecucion... nunca lo veras.

Repito:

1) el ejecutable solo retorna numeros, lo otro sale por la consola del operativo (a menos que ejecutes desde consola no saldra)
2) No podes hacer redirecciones asi. En todo caso deberias llamar a la shell (cmd.exe en winnt, command.com en w9x o sh en linux) como ejecutable y no al bgdi, sino el bgdi como parametro de la shell
3) 2 posts atras explique que estas cosas no se pueden.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2