Como tener un ejecutable y modificar su código?¿

Previous topic - Next topic

mentalthink

Bien el tema es que ando entre manos en quererme hacer un Editor, 2d o 3d o las dos cosas, pero que se pueda meter código, lo más sencillo es usar el mismo lenguaje que GLBasic, me explico:

1 Hago un programa que tiene una pantalla dónde aparecen los monigotes, y luego me hago un editor de texto cutre... Esto en realidad es un .exe que ya está compilado con GLbasic o sea el producto final... pero... [programa 1]

Como hago si en ese editor que he creado pongo unas lineas de código, llamo al compilador de GLBasic, el precompilador el compilador genera un código y se lo meto al [programa 1]

La única opción que veo desde mis pocos conocimientos sería hacer una API, y depende lo que ponga en ese código, digamos que el programa 1, lo tiene interno y sabe que tendrá que mostrar o hacer, pero creo que limitaría mucho todo lo que podría generar con GLbasic directamente...

No se si se entiende la idea, si no dibujo un esquema y os lo muestro.

Merçi.

hardyx

Por lo que entiendo, quieres hacer un ejecutable que sea ampliable mediante código nuevo compilado en GLBasic. Lo que buscas es un sistema de plugins, o un sistema modular ampliable. El programa principal tendría que definir una interfaz API que sea común, y quien quiera pueda hacer plugins (DLLs) que sean compatibles con esa API.

Básicamente se trata de definir funciones que quieras permitir que sean redefinidas en modulos aparte. El programa principal buscaría por ejemplo en un diretorio "plugins" o "módulos", y los inicializaría o llamaría a las funciones que se determine. Lo complejo sería el diseño de la API común para que fuera realmente útil.

A ver si vas a querer hacer un GameMaker :D, en ese caso la API trataría sobre eventos de los objetos, o nuevos objetos definibles. Con propiedades y eventos, como los componentes de muchos lenguajes visuales.

mentalthink

SI hardyx pues aunque te rias algo asi más complejo quiero hacer, obviamente no tengo ni puta idea de programación pero dándole rulas al coco, es que estoy las 24 horas pensando en hacer cógidos, no lo veo muy complejo, pero claro no me voy a comparar con vosotros, que por cierto el libro que me recomendaste el otro dia (dejavú otra vez  :D :D), está de lujo, hay cosas que no me entero pero me hago mis historias en la cabeza entre gráficos y código, y al menos ideas se me ocurren...

El tema es que creo que es mucho más factible hacerse un editor chulo que ir código con código, de hecho por el foro, en la parte dde multimedia dejé un "porgrama" que iba ha hacer de editor para el BlackSun, que a Vekector le gusto mucho, la verdad hice tantos comandos y de una manera tan rara de llamarlos, que cuando me puse ha usarlo no lo entendia ni yo  :D :D :D.

hardyx

Hombre si queres hacer un editor de juegos sencillos, lo suyo sería hacer un script sencillo que pudieras interpretar en la aplicación principal y te quitas de complejidades. Podrías ponerle Lua por ejemplo que es un lenguaje sencillo y de código abierto, o incluso GLBasicScript que es un intérprete que está por el foro.

Si lo que quieres es que se compile a código nativo, puedes hacer un generador de código GLBasic que necesites el lenguaje para poder compilarlo. Pero ahí no a acabo de ver como meter el sistema de plugins. Lo de los plugins es principalmente orientado a programadores. Por ejemplo, muchos juegos tienen un SDK que te permiten mejorar la IA por ejemplo o crear nuevos personajes o comportamientos. Pero eso es un mundo.

mentalthink

 :good:Mirare eso que me comentas del script, lo de lua no lo había pensado aunque no sé hacerlo asi de buenas a primeras si que he visto que algún compañero hizo que lua funcionase en GLbasic...

Ya iré mirando no es que sea la parte que deba ser super importante, también puedo hacer algo similar al gamesalad, pero por darle más versatilidad al programa y no poner millones de botones, o quizás haciendo algo por nodos similar a como se hacne los materiales en 3D, pero orientado ha que hagan comportamientos y cosas...

Ya iré viendo, gracias por la idea.

Hark0

Si no entiendo mal mal el objeto del hilo, creo que es una idea muy interesante, pero a mi tampoco se me ocurre como implementarla...

Por ejemplo, pongamos que el juego que hemos hecho con GLB es un Doom...

E imaginemos que un usuario programa una nueva arma y/o objeto para el juego...

¿Cómo "enlazar/comunicar/intercambiar" información/datos desde el nuevo "exe" y/o "módulo" al Doom nuestro ya programado con GLB?

hmmmm
http://litiopixel.blogspot.com
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica Development Indie Videogames · Pixel-Art · Retrocomputing · Electronic

hardyx

Quote from: Hark0 on 2013-Jun-13
Por ejemplo, pongamos que el juego que hemos hecho con GLB es un Doom...

E imaginemos que un usuario programa una nueva arma y/o objeto para el juego...

¿Cómo "enlazar/comunicar/intercambiar" información/datos desde el nuevo "exe" y/o "módulo" al Doom nuestro ya programado con GLB?

hmmmm
Pues eso lo hacen muchos juegos con Lua, un script sencillo que permite llamar a objetos Lua desde el programa principal. Todo sería hacer el wrapper para GLBasic, ya que el intérprete de Lua está en C y es código abierto.

Juegos como Crysis, SimCity o Civilization usan Lua para definir la IA.
http://www.lua.org/about.html




Hark0

De acuerdo...

Ahora bien... ¿cómo hacerlo con GLB?

Vuelvo al ejemplo Doom...

Programamos con GLB un Doom, y metemos las tipicas funciones de logica, render, control, etc...

Metemos un listado de armas, por ejemplo... y programamos cada arma con un efecto etc...

Pero... ¿como añadimos A POSTERIORI una nueva arma/item?

¿Como "inyectamos" en el ejecutable ese nuevo item?

Hace tiempo se me ocurrió algún tipo de funcionalidad así pero empleando ficheros INI...

De manera que declarando en un INI el tipo de objeto nuevo a introducir en el juego, las variables que afecta, los sprites a cargar etc...

mmmm
http://litiopixel.blogspot.com
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica Development Indie Videogames · Pixel-Art · Retrocomputing · Electronic

hardyx

Quote from: Hark0 on 2013-Jun-14
De acuerdo...

Ahora bien... ¿cómo hacerlo con GLB?

Vuelvo al ejemplo Doom...

Programamos con GLB un Doom, y metemos las tipicas funciones de logica, render, control, etc...

Metemos un listado de armas, por ejemplo... y programamos cada arma con un efecto etc...

Pero... ¿como añadimos A POSTERIORI una nueva arma/item?

¿Como "inyectamos" en el ejecutable ese nuevo item?
Para eso tienes que leer la documentación de Lua :D

No lo he probado mucho, pero el intérprete de Lua son unos cuantos ficheros en C, ese intérprete se puede incluir en las aplicaciones e interactuar con objetos del programa C o GLBasic. Sería como llamar a una función externa en otro lenguaje, pero con la facilidad de que es dinámica. Eso si, habría que hacer un wrapper o módulo para GLB que recubra esas funciones del intérprete de Lua.

Los scripts Lua son ficheros de texto simple. Se puede usar para definir comportamientos u objetos programables sencillos. Por ejemplo, un programador o un diseñador sin saber mucho de programación podría definir animaciones o comportamientos. Incluso el programador podría probar cosas o añadir funcionalidad sin tocar el ejecutable.

Sobre el ejemplo de las armas que preguntas, pues imagina que tienes una función en Lua GetNumArmas() y te da el número de armas disponibles y otra GetPropsArma(indice) que te da las propiedades de un arma. Pues esas funciones las llamas desde GLB y se ejecutan en Lua. Cuando quieras añadir una nueva arma, actualizas las funciones del script y listo. Todo ello sin recompilar la aplicación.

Es un tema curioso para investigar.

mentalthink

Lo que os decía que aqui hay un Wrapper.. lo que no se si va bien o no...
http://www.glbasic.com/forum/index.php?topic=8281.0

hardyx

Quote from: mentalthink on 2013-Jun-15
Lo que os decía que aqui hay un Wrapper.. lo que no se si va bien o no...
http://www.glbasic.com/forum/index.php?topic=8281.0
Ese es un buen ejemplo de las cosas que se pueden hacer con Lua. Llama a una función de Lua desde GLBasic, e incluso desde el código Lua pinta rectángulos y texto llamando a funciones de GLBasic (previamente registradas). Según dicen en el post sólo implementa algunos comandos de Lua, pero es un buen comienzo.

mentalthink

No se mucho de esto pero he leído que le Lua lo usan empresas grandes, de hecho Shiva3d el script era basado en Lua, y en otro soft que hay, incluso uno que van a savar los de Havock, que son los que hacen las físicas o hacian la físicas del 3ds max, el Editor de niveles los Scripts van por lua, yo lo que no entiendo demasiado, como una función puede retornar 16 valores, y el tema de que las cosas no se declaren me lia un poco, es similar a Python, bueno de ahí viene, eso de que un variable a sea lo que sea y no se va a quejar, a mi me lia un poco...