Septiembre 26, 2012, 04:58:21 PM Ultima modificación: Octubre 24, 2012, 04:27:17 PM por Samigabacho
Hola a todos y todas,
soy nuevo en la comunidad y llevo muy poco usando GM.

Tras la presentación ahí va mi consulta:

Estoy desarrollando un juego muy sencillo. Se podría decir que es algo muy parecido a un Space Invader aunque con algunas variaciones.
En el juego hay una serie de variables que afectan a lo que sucede en el desarrollo del mismo, como por ejemplo, la aparición de un enemigo, el cambio de color de algunos otros enemigos. Por el momento la gran mayoría de las cosas en el juego suceden de manera aleatoria (v.gr., dando valores con random (); al comienzo de cada alarma), pero mi intención es que estas variables cambien de valor dependiendo de cierto orden preestablecido.
Este orden estará escrito en un archivo (v.gr., un archivo .txt), y desearía saber si hay alguna manera de que al principio del juego pueda "cargar" dicho .txt que dará valores a lo largo del desarrollo del juego a las variables.

Mmmm creo que ha quedado un poco oscura la pregunta, voy a intentar ilustrarlo con un ejemplo:

Variables:
Gran_disparo: 1 o 0 (indica si aparece el evento)
Sprite_enemigo: 1(rojo), 2(verde), 3 (amarillo)

en el archivo .txt:

Milisegundos desde comienzo(linea de tiempo):             1000  2200.............
Gran_disparo:                                                            1        0   ..............
Srite_enemigo:                                                          2         1   .............

Espero haberme hecho entender, en caso contrario decirlo y lo intento de nuevo.
Tengo más dudas pero por el momento, necesito saber si esto es factible antes de seguir.
Muchas gracias.


#1 Septiembre 26, 2012, 05:28:54 PM Ultima modificación: Septiembre 26, 2012, 05:34:01 PM por Mgbu
Si, es como guardar lo que va a pasar en un archivo txt
Es algo que se puede hacer sin el archivo, pero es mas divertido hacer el txt :P

Eso se hace con las funciones de esta sección del manual
Así que vas a tener que escribir el txt y buscar la forma de que el juego lo entienda, no es tan facil, por eso hay ejemplos o scripts que te lo haen más fácil.
Un ejemplo es BD, un conjunto de script y cosas que hacen una tabla (algo así como excel) para guardar y cargar cuando quieras, puede ser un poco dificil pero lo hace más fácil. La BD de que te hablo está aquí, también justo subieron un programita para hacer grids (tablas), también se ve bueno

Lo más fácil es hacer un archivo .ini, el problema es que es mas limitado, porque soporta guardar valores solamente, algo así como:
[Nivel 1]
enemigo1=rojo
enemigo2=verde
enemigo3=rojo
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Muchas gracias compañero Mgbu,
de momento todo lo que me sugieres me suena a chino porque estoy empezando, pero me has dado una gran pista de por dónde puedo comenzar a leer para aprender a hacerlo y sobre todo... al menos ya se que SI se puede hacer, así que voy al lío.

Como vi que ya programabas con codigo oensé que estabas bastante avanzado, pero esta muy bien :P
Para lo que necesitas lo mas facil me parece que es que aprendas a usar grids, y crearlas con el ejemplo que subieron hace poquito que te mostre:
Cita de: Mgbu en Septiembre 26, 2012, 05:28:54 PM
También justo subieron un programita para hacer grids (tablas), también se ve bueno
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Aquí voy de nuevo...  ;)

He descargado el programa que me has sugerido, que si no he entendido mal me permite hacer tablas donde definir diferentes valores que luego podrán exportarse a GM.
Tras generar una posible tabla y "encriptarla" (supongo que esto es transformarla a formato .gml, que me imagino que es el formato de los script por lo que creo haber leído en el manual) me da un archivo .gml.


¿Ese archivo contiene toda la información que la tabla y además en la misma forma? Cuando lo he abierto con un editor las cosas que salían eran casi ilegible.
Si es así, imagino que habrá que añadir el script al juego, pero... ¿cómo se saca la información de este? ¿quizás llamando desde código GML desde otra parte del juego?

#5 Septiembre 26, 2012, 08:31:07 PM Ultima modificación: Septiembre 26, 2012, 08:33:47 PM por Mgbu
Ese programa (que no puedo usar porque no me anda) supongo genera un texto que lee el Game Maker que tiene toda la informacion de la tabla. Luego a ese texto lo guarda en un archivo
Luego tu juego tiene que leer lo que dice el archivo y crear la tabla para ser usada. Para leer el archivo tenés que usar las funciones para leer archivos, guardas lo que tiene el archivo como un string y le pasas el string a la siguiente función: ds_grid_read(id,str)

Es decir, la función que mencioné antes lee un string creado desde un grid, ese string viene del programita, cuando usás esa función reconstruís el grid que había creado el programa. Pero como no me anda no estoy bien seguro de como funciona. Obviamente vas a tener que aprender a usar grids para manejar la informacion del cuadro

Todo esto se puede hacer con un array bidimensional, un array bidimensional es una tabla, en donde vos buscas por ejemplo variable=tabla[6,4], ahí variable tiene el valor de la celda 6,4
hau que hacer que el juego lea un array desde un archivo de texto. Yo te recomiendo usar el programa porque hace muy facil hacer la tabla y te ahorra el trebajo de decodificar el archivo ¿Entendes?
porque o si no vas a tener que hacer un archivo de texto como:
Milisegundos.Gran Disparo.Disparo
2000.1.2
2600.0.1
4000.5.6

Y crear un código que traduzca eso en un array, que es bastante mas dificil. Bueno, si sabes manejar strings te va a salir

Cualquier cosa en un rato te hago un ejemplito, pero no se si te gustaría mas usar arrays o grids
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


Ante todo... gracias de nuevo amigo Mgbu por tu atención y dicho esto continuo con mis dudas...

sigo intentando dar lógica a lo que hace el programa DB. He leído que tras hacer la tabla (por ejemplo la imagen que puse antes) el encristar la información genera un documento que puede importarse como script.
Y será ese, el fichero que se adjuntará a el juego como script.
En mi caso salio esto:
/*
Encryption script generated from Alasdair Forsythe's GM Database Support Random Encryption Script Generator.
Encryption Script ID = 6858143
argument0 is the string to encrypt/decrypt.
argument1 whether to encrypt (true) or decrypt (false).
*/

//a
if argument1==1
{
argument0=string_replace_all(argument0,' ','è');
argument0=string_replace_all(argument0,'(','²');
argument0=string_replace_all(argument0,')','«');
argument0=string_replace_all(argument0,'*','ü');
argument0=string_replace_all(argument0,'+','Ç');
argument0=string_replace_all(argument0,',','µ');
argument0=string_replace_all(argument0,'-','½');
argument0=string_replace_all(argument0,'.','¼');
argument0=string_replace_all(argument0,'/','Á');
argument0=string_replace_all(argument0,'0','±');
argument0=string_replace_all(argument0,'1','È');
argument0=string_replace_all(argument0,'2','å');
argument0=string_replace_all(argument0,'3','à');
argument0=string_replace_all(argument0,'4','Ó');
argument0=string_replace_all(argument0,'5','Ì');
argument0=string_replace_all(argument0,'6','â');
argument0=string_replace_all(argument0,'7','ã');
argument0=string_replace_all(argument0,'8','Ý');
argument0=string_replace_all(argument0,'9','Ò');
argument0=string_replace_all(argument0,':','×');
argument0=string_replace_all(argument0,';','Ö');
argument0=string_replace_all(argument0,'<','ñ');
argument0=string_replace_all(argument0,'=','À');
argument0=string_replace_all(argument0,'>','õ');
argument0=string_replace_all(argument0,'A','Ú');
argument0=string_replace_all(argument0,'E','´');
argument0=string_replace_all(argument0,'I','Æ');
argument0=string_replace_all(argument0,'O','Ï');
argument0=string_replace_all(argument0,'T','¶');
argument0=string_replace_all(argument0,'U','Ù');
argument0=string_replace_all(argument0,'[','ð');
argument0=string_replace_all(argument0,'\','þ');
argument0=string_replace_all(argument0,']','Ê');
argument0=string_replace_all(argument0,'a','ó');
argument0=string_replace_all(argument0,'b','·');
argument0=string_replace_all(argument0,'c','Ë');
argument0=string_replace_all(argument0,'d','ø');
argument0=string_replace_all(argument0,'e','Ä');
argument0=string_replace_all(argument0,'f','Õ');
argument0=string_replace_all(argument0,'g','ì');
argument0=string_replace_all(argument0,'h','»');
argument0=string_replace_all(argument0,'i','ï');
argument0=string_replace_all(argument0,'j','ý');
argument0=string_replace_all(argument0,'k','ç');
argument0=string_replace_all(argument0,'l','î');
argument0=string_replace_all(argument0,'m','Ü');
argument0=string_replace_all(argument0,'n','ô');
argument0=string_replace_all(argument0,'o','¹');
argument0=string_replace_all(argument0,'p','ú');
argument0=string_replace_all(argument0,'r','ª');
argument0=string_replace_all(argument0,'s','ö');
argument0=string_replace_all(argument0,'t','÷');
argument0=string_replace_all(argument0,'u','á');
argument0=string_replace_all(argument0,'{','Í');
argument0=string_replace_all(argument0,'|','¿');
argument0=string_replace_all(argument0,'}','Ð');
}
else
//b
{
argument0=string_replace_all(argument0,'è',' ');
argument0=string_replace_all(argument0,'²','(');
argument0=string_replace_all(argument0,'«',')');
argument0=string_replace_all(argument0,'ü','*');
argument0=string_replace_all(argument0,'Ç','+');
argument0=string_replace_all(argument0,'µ',',');
argument0=string_replace_all(argument0,'½','-');
argument0=string_replace_all(argument0,'¼','.');
argument0=string_replace_all(argument0,'Á','/');
argument0=string_replace_all(argument0,'±','0');
argument0=string_replace_all(argument0,'È','1');
argument0=string_replace_all(argument0,'å','2');
argument0=string_replace_all(argument0,'à','3');
argument0=string_replace_all(argument0,'Ó','4');
argument0=string_replace_all(argument0,'Ì','5');
argument0=string_replace_all(argument0,'â','6');
argument0=string_replace_all(argument0,'ã','7');
argument0=string_replace_all(argument0,'Ý','8');
argument0=string_replace_all(argument0,'Ò','9');
argument0=string_replace_all(argument0,'×',':');
argument0=string_replace_all(argument0,'Ö',';');
argument0=string_replace_all(argument0,'ñ','<');
argument0=string_replace_all(argument0,'À','=');
argument0=string_replace_all(argument0,'õ','>');
argument0=string_replace_all(argument0,'Ú','A');
argument0=string_replace_all(argument0,'´','E');
argument0=string_replace_all(argument0,'Æ','I');
argument0=string_replace_all(argument0,'Ï','O');
argument0=string_replace_all(argument0,'¶','T');
argument0=string_replace_all(argument0,'Ù','U');
argument0=string_replace_all(argument0,'ð','[');
argument0=string_replace_all(argument0,'þ','\');
argument0=string_replace_all(argument0,'Ê',']');
argument0=string_replace_all(argument0,'ó','a');
argument0=string_replace_all(argument0,'·','b');
argument0=string_replace_all(argument0,'Ë','c');
argument0=string_replace_all(argument0,'ø','d');
argument0=string_replace_all(argument0,'Ä','e');
argument0=string_replace_all(argument0,'Õ','f');
argument0=string_replace_all(argument0,'ì','g');
argument0=string_replace_all(argument0,'»','h');
argument0=string_replace_all(argument0,'ï','i');
argument0=string_replace_all(argument0,'ý','j');
argument0=string_replace_all(argument0,'ç','k');
argument0=string_replace_all(argument0,'î','l');
argument0=string_replace_all(argument0,'Ü','m');
argument0=string_replace_all(argument0,'ô','n');
argument0=string_replace_all(argument0,'¹','o');
argument0=string_replace_all(argument0,'ú','p');
argument0=string_replace_all(argument0,'ª','r');
argument0=string_replace_all(argument0,'ö','s');
argument0=string_replace_all(argument0,'÷','t');
argument0=string_replace_all(argument0,'á','u');
argument0=string_replace_all(argument0,'Í','{');
argument0=string_replace_all(argument0,'¿','|');
argument0=string_replace_all(argument0,'Ð','}');
}



Imagino que ahí estará la misma información que en la tabla pero... ¿de qué manera puedo acceder a esta información mientras el juego va pasando?

He visto en el manual que:
ds_grid_get(id,x,y)
Devuelve el valor de la celda indicada, pero la cosa es que no tengo muy claro que eso contenga celdas.

En verdad el array bidimensional creo que no me vendría bien ya que necesito pasar más de dos variable.
Otra cosa diferente es que pudiera hacer un objeto, que contuviera diferentes arrays para cada una de las variables que quiero ir cambiando y que al leer el archivo guardara en la dichos arrays todos los valores que las variables tomarían a lo largo del juego:
tiempo_ms [tiempo_total];
Color_enemigo [numero_de_cambios];
Gran_ataque [numero_de_cambios];
etc[]

de tal manera que compruebo el tiempo que está pasando comparándolo con los milisegundo donde debe pasar algo (que tengo guardado en tiempo_ms [tiempo_total]) y a la vez recorro los otros arrays asignando el valor que tenga a la variable que corresponda...

lo malo de todo esto es.... que no se como hacerlo en GM8  ;)






Cita de: Samigabacho en Septiembre 26, 2012, 09:40:06 PM
Ante todo... gracias de nuevo amigo Mgbu por tu atención y dicho esto continuo con mis dudas...

sigo intentando dar lógica a lo que hace el programa DB. He leído que tras hacer la tabla (por ejemplo la imagen que puse antes) el encristar la información genera un documento que puede importarse como script.
Y será ese, el fichero que se adjuntará a el juego como script.
En mi caso salio esto:
/*
Encryption script generated from Alasdair Forsythe's GM Database Support Random Encryption Script Generator.
Encryption Script ID = 6858143
argument0 is the string to encrypt/decrypt.
argument1 whether to encrypt (true) or decrypt (false).
*/

//a
if argument1==1
{
argument0=string_replace_all(argument0,' ','è');
argument0=string_replace_all(argument0,'(','²');
argument0=string_replace_all(argument0,')','«');
argument0=string_replace_all(argument0,'*','ü');
argument0=string_replace_all(argument0,'+','Ç');
argument0=string_replace_all(argument0,',','µ');
argument0=string_replace_all(argument0,'-','½');
argument0=string_replace_all(argument0,'.','¼');
argument0=string_replace_all(argument0,'/','Á');
argument0=string_replace_all(argument0,'0','±');
argument0=string_replace_all(argument0,'1','È');
argument0=string_replace_all(argument0,'2','å');
argument0=string_replace_all(argument0,'3','à');
argument0=string_replace_all(argument0,'4','Ó');
argument0=string_replace_all(argument0,'5','Ì');
argument0=string_replace_all(argument0,'6','â');
argument0=string_replace_all(argument0,'7','ã');
argument0=string_replace_all(argument0,'8','Ý');
argument0=string_replace_all(argument0,'9','Ò');
argument0=string_replace_all(argument0,':','×');
argument0=string_replace_all(argument0,';','Ö');
argument0=string_replace_all(argument0,'<','ñ');
argument0=string_replace_all(argument0,'=','À');
argument0=string_replace_all(argument0,'>','õ');
argument0=string_replace_all(argument0,'A','Ú');
argument0=string_replace_all(argument0,'E','´');
argument0=string_replace_all(argument0,'I','Æ');
argument0=string_replace_all(argument0,'O','Ï');
argument0=string_replace_all(argument0,'T','¶');
argument0=string_replace_all(argument0,'U','Ù');
argument0=string_replace_all(argument0,'[','ð');
argument0=string_replace_all(argument0,'\','þ');
argument0=string_replace_all(argument0,']','Ê');
argument0=string_replace_all(argument0,'a','ó');
argument0=string_replace_all(argument0,'b','·');
argument0=string_replace_all(argument0,'c','Ë');
argument0=string_replace_all(argument0,'d','ø');
argument0=string_replace_all(argument0,'e','Ä');
argument0=string_replace_all(argument0,'f','Õ');
argument0=string_replace_all(argument0,'g','ì');
argument0=string_replace_all(argument0,'h','»');
argument0=string_replace_all(argument0,'i','ï');
argument0=string_replace_all(argument0,'j','ý');
argument0=string_replace_all(argument0,'k','ç');
argument0=string_replace_all(argument0,'l','î');
argument0=string_replace_all(argument0,'m','Ü');
argument0=string_replace_all(argument0,'n','ô');
argument0=string_replace_all(argument0,'o','¹');
argument0=string_replace_all(argument0,'p','ú');
argument0=string_replace_all(argument0,'r','ª');
argument0=string_replace_all(argument0,'s','ö');
argument0=string_replace_all(argument0,'t','÷');
argument0=string_replace_all(argument0,'u','á');
argument0=string_replace_all(argument0,'{','Í');
argument0=string_replace_all(argument0,'|','¿');
argument0=string_replace_all(argument0,'}','Ð');
}
else
//b
{
argument0=string_replace_all(argument0,'è',' ');
argument0=string_replace_all(argument0,'²','(');
argument0=string_replace_all(argument0,'«',')');
argument0=string_replace_all(argument0,'ü','*');
argument0=string_replace_all(argument0,'Ç','+');
argument0=string_replace_all(argument0,'µ',',');
argument0=string_replace_all(argument0,'½','-');
argument0=string_replace_all(argument0,'¼','.');
argument0=string_replace_all(argument0,'Á','/');
argument0=string_replace_all(argument0,'±','0');
argument0=string_replace_all(argument0,'È','1');
argument0=string_replace_all(argument0,'å','2');
argument0=string_replace_all(argument0,'à','3');
argument0=string_replace_all(argument0,'Ó','4');
argument0=string_replace_all(argument0,'Ì','5');
argument0=string_replace_all(argument0,'â','6');
argument0=string_replace_all(argument0,'ã','7');
argument0=string_replace_all(argument0,'Ý','8');
argument0=string_replace_all(argument0,'Ò','9');
argument0=string_replace_all(argument0,'×',':');
argument0=string_replace_all(argument0,'Ö',';');
argument0=string_replace_all(argument0,'ñ','<');
argument0=string_replace_all(argument0,'À','=');
argument0=string_replace_all(argument0,'õ','>');
argument0=string_replace_all(argument0,'Ú','A');
argument0=string_replace_all(argument0,'´','E');
argument0=string_replace_all(argument0,'Æ','I');
argument0=string_replace_all(argument0,'Ï','O');
argument0=string_replace_all(argument0,'¶','T');
argument0=string_replace_all(argument0,'Ù','U');
argument0=string_replace_all(argument0,'ð','[');
argument0=string_replace_all(argument0,'þ','\');
argument0=string_replace_all(argument0,'Ê',']');
argument0=string_replace_all(argument0,'ó','a');
argument0=string_replace_all(argument0,'·','b');
argument0=string_replace_all(argument0,'Ë','c');
argument0=string_replace_all(argument0,'ø','d');
argument0=string_replace_all(argument0,'Ä','e');
argument0=string_replace_all(argument0,'Õ','f');
argument0=string_replace_all(argument0,'ì','g');
argument0=string_replace_all(argument0,'»','h');
argument0=string_replace_all(argument0,'ï','i');
argument0=string_replace_all(argument0,'ý','j');
argument0=string_replace_all(argument0,'ç','k');
argument0=string_replace_all(argument0,'î','l');
argument0=string_replace_all(argument0,'Ü','m');
argument0=string_replace_all(argument0,'ô','n');
argument0=string_replace_all(argument0,'¹','o');
argument0=string_replace_all(argument0,'ú','p');
argument0=string_replace_all(argument0,'ª','r');
argument0=string_replace_all(argument0,'ö','s');
argument0=string_replace_all(argument0,'÷','t');
argument0=string_replace_all(argument0,'á','u');
argument0=string_replace_all(argument0,'Í','{');
argument0=string_replace_all(argument0,'¿','|');
argument0=string_replace_all(argument0,'Ð','}');
}


Imagino que ahí estará la misma información que en la tabla pero... ¿de qué manera puedo acceder a esta información mientras el juego va pasando?
He visto en el manual que:
ds_grid_get(id,x,y)
Devuelve el valor de la celda indicada, pero la cosa es que no tengo muy claro que eso contenga celdas.
Ooops,  logré abrir el programa, pero nunca me salió eso :-[
Por lo que veo es para desencriptar un texto, o sea para descifrar un texto codificado
Que programa usaste? el DBMaker?

Según sé estás buscando usar ese programa, así que ahora lo pude abrir te digo que te falta hacer

Primero en el programa hace tu tabla, no es dificil, cualquier cosa pregunta, también con F1 hay ayuda
Despues hay que guardarlo, apretas el diskette y te va a buscar guardar un archivo con extensión .monsterdb, ponele la extensión que más te guste porque es lo mismo
Podés abrir ese archivo con el bloc de notas, vas a ver que son todos numeros en linea, "escritos sin apretar enter"
Después en tu juego hay que leer eso:
Para eso abrimos el archivo que hizo el programa, leemos lo que tiene adentro y lo guardamos en una variable. Cambia "archivo.extensión" por lo que tengas, por defecto el programa crea "New database.monsterdb"
Luego creamos una grid en donde guerdar todo y usamos la función magica de "ds_grid_read"
[gml]archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo

grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid
[/gml]
Supuestamente debería funcionar, pero me da "Unexpected error ocurred during the game", nunca me pasó, no entiendo como se e puede complicar tanto XD
Así que estoy reiniciando mi PC para ver que pasa, si no se arregla voy a abrir un tema para solucionarlo


Cita de: Samigabacho en Septiembre 26, 2012, 09:40:06 PM
En verdad el array bidimensional creo que no me vendría bien ya que necesito pasar más de dos variable.
Otra cosa diferente es que pudiera hacer un objeto, que contuviera diferentes arrays para cada una de las variables que quiero ir cambiando y que al leer el archivo guardara en la dichos arrays todos los valores que las variables tomarían a lo largo del juego:
tiempo_ms [tiempo_total];
Color_enemigo [numero_de_cambios];
Gran_ataque [numero_de_cambios];
etc[]

de tal manera que compruebo el tiempo que está pasando comparándolo con los milisegundo donde debe pasar algo (que tengo guardado en tiempo_ms [tiempo_total]) y a la vez recorro los otros arrays asignando el valor que tenga a la variable que corresponda...

lo malo de todo esto es.... que no se como hacerlo en GM8  ;)
Un array bidimensional puede tener todas las filas y columnas que quieras, ¿Te referis a eso?

Por ejemplo para vos saber el color del enemigo en el instante 3500 primero tenés que saber en qué fila está el instante 3500, así que vas buscando una por una con un for, sría algo así
[gml]
for (i=0;i<=cantidad_filas;i+=1) {
    if array[0,i]=3500 fila=i //La columna es 0 porque es la primera
}
[/gml]
A lo mejor no sabes usar los ciclos for, no importa, copialo y pegalo que es eso nomas XD

Ahora que sabemos la fila buscamos el valor de la columna 1 en la fila conocida:
[gml]
color_enemigo=array[1,fila]
[/gml]

Perdon por hacerlo tan complicado y largo :-[
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


CitarOoops,  logré abrir el programa, pero nunca me salió eso
Por lo que veo es para desencriptar un texto, o sea para descifrar un texto codificado
Que programa usaste? el DBMaker?

La verdad es que el programa que he usado no es DBMaker, no por nada, si no porque el instalador me da un error "bdmaker.exe no es una aplicación Win32 válida", así que he usado otro, que intuyo es parecido, que he encontrado en el foro de la comunidad.
El nombre del programa es GM Database Support v3.1 y no se porqué extraña razón ahora no soy capaz de encontrar donde se encuentra en el foro para hacer el link :D

Siguiendo con lo que planteas... creo que ya lo voy pillando, realmente no hay que incluir el archivo encriptado, lo que hay que hacer es leer el archivo simple que genera, es decir la tabla traducida a una matriz, ¿me equivoco?
En mi esto podría ser un ejemplo:

0
1
{1}<Untitled>{2}
6,6
{1}momento_1{2}momento_2{3}momento_3{4}momento_4{5}momento_5{6}momento_6{7}
{1}ITI ms{2}PRE ms{3}CS ms{4}CONTEXTO{5}CS{6}US{7}
{1}300{2}400{3}700{4}200{5}500{6}300{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}1{2}1{3}1{4}1{5}1{6}1{7}
{1}1{2}1{3}2{4}1{5}2{6}2{7}
{1}1{2}1{3}0{4}1{5}0{6}0{7}


Ya solo faltaría leerlo y hacer lo que me sugieres:
CitarLuego creamos una grid en donde guerdar todo y usamos la función magica de "ds_grid_read"
archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo

grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid
Supuestamente debería funcionar, pero me da "Unexpected error ocurred during the game", nunca me pasó, no entiendo como se e puede complicar tanto
Así que estoy reiniciando mi PC para ver que pasa, si no se arregla voy a abrir un tema para solucionarlo
Siempre y cuando funcione :D

CitarUn array bidimensional puede tener todas las filas y columnas que quieras, ¿Te referis a eso?
Qué zote que estoy hecho, claro! Dos dimensiones no significa dos capacidades si no dos dimensiones. ¿El primer valor del array indica columnas y el segundo filas? Si eso es así, se podría guardar en cada una de las filas el valor de una variable a lo largo del juego ¿no?

for (j=0;j<=cantidad_columbnas;J+=1){
    for (i=0;i<=cantidad_filas;i+=1){
        <hacer_aquí_las_asignaciones>
    }
}


Cita de: Samigabacho en Septiembre 27, 2012, 09:13:05 AM
La verdad es que el programa que he usado no es DBMaker, no por nada, si no porque el instalador me da un error "bdmaker.exe no es una aplicación Win32 válida", así que he usado otro, que intuyo es parecido, que he encontrado en el foro de la comunidad.
El nombre del programa es GM Database Support v3.1 y no se porqué extraña razón ahora no soy capaz de encontrar donde se encuentra en el foro para hacer el link :D

Siguiendo con lo que planteas... creo que ya lo voy pillando, realmente no hay que incluir el archivo encriptado, lo que hay que hacer es leer el archivo simple que genera, es decir la tabla traducida a una matriz, ¿me equivoco?
En mi esto podría ser un ejemplo:

0
1
{1}<Untitled>{2}
6,6
{1}momento_1{2}momento_2{3}momento_3{4}momento_4{5}momento_5{6}momento_6{7}
{1}ITI ms{2}PRE ms{3}CS ms{4}CONTEXTO{5}CS{6}US{7}
{1}300{2}400{3}700{4}200{5}500{6}300{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}1{2}1{3}1{4}1{5}1{6}1{7}
{1}1{2}1{3}2{4}1{5}2{6}2{7}
{1}1{2}1{3}0{4}1{5}0{6}0{7}

Ahhh, muy bien, aunque se llamen parecido los programas en realidad son bastante distintos, bueno, eso es lo que va en el txt. Ahora falta que el juego lea eso, así que tenemos que usar los scripts que vienen en el rar que descargaste. Como hace bastante que no lo uso y para no equivocarme lo descargué de nuevo y esto es lo que tuve que hacer:
1- Hice mi tabla y la guardé como tabla.txt
2- Como el script es tan viejo, no es compatible con GM8, por suerte Ferhand me pasó los scripts arreglados, entonces descargá el gmk que adjunté, es un ejemplo para la carga de tablas como esa. Ese ejemplo está preparado para cargar varias tablas a la vez, así que hay dos arrays que debés conocer:
var_tablas[x,x]: Guarda los datos de las tablas, en [1,1] guarda el nombre de la tabla 1, en [1,2] guarda la cantidad de filas de esa tabla y en [1,3] guarda las columnas de la tabla. Si cargás dos tablas la información de la segunda tabla está en [2,1],[2,2] y [2,3], etc. Se vería algo así como:





Cantidad de tablas 
Nombre tabla 1  Nombre tabla 2 
Cant filas tabla 1  Cant filas tabla 2 
Cant columnas tabla 1  Cant columnas tabla 2 
Los bbcodes no me dejan poner bordes....
var_nombretabla[x,x]: Obviamente tenés que cambiar el "nombretabla" por el nombre de tu tabla, ahí guarda lo que a vos te interesa, en [0,0] guarda el numero que tiene esa tabla en var_tablas[] (no es tan importante). En la primera columna guarda el nombre de las filas y en la primer fila el nombre de las columnas, entonces el array se vería algo así como:




Numero de tabla  Nombre fila 1  Nombre fila 2 
Nombre columna 1-datos-  -datos- 
Nombre columna 2-datos-  -datos- 
Si esto se te hace muy dificil decime que te ajusto el script a lo que necesites, te hago descargar el ejemplo para que veas que funciona, además podés ver bien como se usa

3- Entonces copia el script "scr_cargar" del adjunto a tu juego, ponele el nombre que quieras

4- Llama al script (con el nombre que elejiste), por ejemplo: scr_cargar("tabla.txt"). Fijate que hay que darle como argumento el nombre del archivo a abrir

5- Usar los arrays -al fin! XD-

Cita de: Samigabacho en Septiembre 27, 2012, 09:13:05 AM
Ya solo faltaría leerlo y hacer lo que me sugieres:
CitarLuego creamos una grid en donde guerdar todo y usamos la función magica de "ds_grid_read"
archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo

grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid
Supuestamente debería funcionar, pero me da "Unexpected error ocurred during the game", nunca me pasó, no entiendo como se e puede complicar tanto
Así que estoy reiniciando mi PC para ver que pasa, si no se arregla voy a abrir un tema para solucionarlo
Siempre y cuando funcione :D
No le hagas caso a eso porque es para cuando usas el otro programa, hacé lo de arriba
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy


  Saludos makero Samigabacho:


  El "script" "cargar" que el makero Mgbu te envió es capaz de "cargar" un fichero de base de datos creado con el "GM Database Support" y lo transforma en un objeto con muchos "arrays". Cada "array" se covierte en una tabla de la base de datos y el nombre de cada "array" será el prefijo "tb_" más el nombre de la tabla que representa, osea "tb_nombretabla".

  Si tienes en la BD una tabla llamada "saturno", el "array" creado dentro del objeto será "tb_saturno".

Una vez que quieras salvar la base de datos completa utiliza el "script" "grabar" y le pasas como argumento el nombre del objeto base de datos que has estado utilizando en tu juego. Esto creará un fichero de texto con todos los datos en él.

El problema es que estos "scripts" son viejos y fueron una prueba para lograr algo mejor. Estoy trabajando en los "scripts" mejorados. Estos viejos pueden traer problemas ya que al guardar no seleccionan el fichero BD para escribir la salva en el.

Te prometo para el lunes traerte los "scripts" actualizados.

  Gracias por la atención prestada y disculpen las molestias ocasionadas.   ;D 


Muchas gracias por tu atención compañero ferhand.
La verdad es que todo me sigue pareciendo un poco extraño (será porque aun estoy un poco verde), aunque poco a poco empiezo a comprender.

Esto es el script "cargar":
archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo




y ¿esto es el de "Guardar"?:
grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid


¿no va todo junto?
Y... si va junto imagino que al script se le pasaría un argument0, que sería una cadena con el nombre del archivo (por ejemplo... "mi_BD.txt"), no?

  Saludos makero Samigabacho:


  El primer segmento de código parece mío, pero el segundo definitivamente no. Yo jamás he usado "grids" (cuadrículas).  :-\

  ¡Qué alegría! Vi en tu perfil que tenemos la misma edad.   XD

  Permíteme hacer una pregunta: ¿Cuando hablas de que estás verde, cuán verde estás? Lo digo para orientarte mejor. Si son tus primeros pasos en GM deberías primero seguir ciertos "tutoriales" antes de emprender el camino de hacer tu propio juego. Parece más lento, pero en realidad es mucho más rápido.  :-[

  Espero respuesta compañero de años...  ;D 


El código que puse me lo pasó muy amablemente el compañero  Mgbu, aunque creo que a el le dio cierto error.

En cuanto a mi verdor...
Conozco algo sobre programación orientada a objeto (hace tiempo hice un curso), y más o menos intento aplicar parte de la lógica a lo que voy viendo por aquí, aunque no sé la manera correcta de cómo hacer muchas cosas.
Por el momento, me he leído el manual de la comunidad y ahora estoy viendo algunos videotutoriales en youtube que me están ayudando bastante a entender menor.
De hecho, creo que mi juego (la interfaz) está más que lista para lo que necesito. Es sencillo y si es necesario lo iré perfeccionando con el tiempo.
Pero lo que realmente me interesa saber (ya que si no el propósito de hacer el juego pierde el sentido) es poder decirle al juego en cada momento (en segundos o milisegundos) qué es lo que tienen que hacer algunos objetos (como por ejemplo cambiar de color durante 5 segundos, lanzar un ataque en un segundo concreto, etc...) y además de eso (pero esto lo dejo para el futuro) poder almacenar en variables las respuestas del jugador y el momento en el que las hace con el fin de poder escribir un fichero (por ejemplo un .txt) guardando toda esa información.

¿Es muy complicado? :D

#14 Septiembre 27, 2012, 10:19:51 PM Ultima modificación: Septiembre 27, 2012, 10:59:59 PM por Mgbu
Cita de: Samigabacho en Septiembre 27, 2012, 09:37:39 PM
Muchas gracias por tu atención compañero ferhand.
La verdad es que todo me sigue pareciendo un poco extraño (será porque aun estoy un poco verde), aunque poco a poco empiezo a comprender.

Esto es el script "cargar":
archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo




y ¿esto es el de "Guardar"?:
grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid


¿no va todo junto?
Y... si va junto imagino que al script se le pasaría un argument0, que sería una cadena con el nombre del archivo (por ejemplo... "mi_BD.txt"), no?
No, esperá, ese código no sé de donde salió EDIT: Mirandolo de nuevo ese es el código para cargar lo que hace el programa que no funciona, te estoy mareando mucho :-[. Hagamos una cosa, olvida todos los codigos anteriores y seguí esto.

Haciendo de cuenta que tenés un archivo llamado tabla.txt o como sea,, creado con ESTE programa, el que se llama GM Database Support: Database file creator, el de la foto que me mandaste antes, adentro tiene que tener lo que me dijiste que tenías hecho:
0
1
{1}<Untitled>{2}
6,6
{1}momento_1{2}momento_2{3}momento_3{4}momento_4{5}momento_5{6}momento_6{7}
{1}ITI ms{2}PRE ms{3}CS ms{4}CONTEXTO{5}CS{6}US{7}
{1}300{2}400{3}700{4}200{5}500{6}300{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}1{2}1{3}1{4}1{5}1{6}1{7}
{1}1{2}1{3}2{4}1{5}2{6}2{7}
{1}1{2}1{3}0{4}1{5}0{6}0{7}


Creá un script, con el nombre scr_guardar, y adentro pegá esto:
{
/* 
    La idea es un "script" que le pasamos una base de datos y, a partir
     de ahí crea el objeto base de datos con sus "arrays" correspondientes
*/
    // crear un "array" por cada tabla
    var var_file /*fichero*/, var_linea /*cada línea de la BD*/, var_nombre/**/;
    var_tablas[0,1] = 'tb_nombre';
    var_tablas[0,2] = 'tb_filas';
    var_tablas[0,3] = 'tb_columnas';
    if(file_exists(argument0))
    {
        var_file = file_text_open_read(argument0);          // abrir el fichero para leer
        file_text_readln(var_file);                         // saltar a la segunda linea
        var_tablas[0,0] = file_text_read_real(var_file);    // leer la cantidad de tablas
        file_text_readln(var_file);                         // saltar a la tercera linea       
        var_linea = file_text_read_string(var_file);        // leer los nombres de las tablas 

/* Extraer nombre de cada Tablas */   

        for(i=1;i<var_tablas[0,0]+1;i+=1)                     // Para cada tabla...
        {                                                   // extraer el nombre y guardarlo en el "array" var_tablas
            var_tablas[i,1] = string_copy(var_linea, string_pos('{' + string(i) + '}',var_linea)+2+string_length(string(i)),string_pos('{' + string(i+1) + '}',var_linea)-string_pos('{' + string(i) + '}',var_linea)-(2+string_length(string(i))));
            //var_tablas[i] = var_nombre;
           
        }

/* Crear los "Arrays" "tb_NombreTabla" */
       
       for(i=1;i<var_tablas[0,0]+1;i+=1)
       {
            variable_local_array2_set("tb_"+string(var_tablas[i,1]),0,0,i); // Creo un array por cada tabla llamado "tb_nombretabla" y guardo orden de tabla.
       }

/* Para cada Tabla */

       for(i=1;i<var_tablas[0,0]+1;i+=1) // para cada tabla
       {
            file_text_readln(var_file);                         // saltar a la cuarta linea (columnas, filas)
            var_linea = file_text_read_string(var_file);        // leer (columnas, filas) de las tablas
       
/* Cantidad de Columnas y Filas */
       
            var_tablas[i,2] = real(string_copy(var_linea, string_pos(',',var_linea)+1, string_length(var_linea)-(string_pos(',',var_linea)))     ); // filas de la tabla
            var_tablas[i,3] =  real(string_delete(var_linea, string_pos(',',var_linea), string_length(var_linea)-(string_pos(',',var_linea)-1))  ); // columnas de la tabla
           
            file_text_readln(var_file);                         // saltar a la quinta linea (nombre de columnas)
            var_linea = file_text_read_string(var_file);        // leer (nombre de columnas) de las tablas
           
/* Nombre de Columnas */
           
            for(j=1;j<real(var_tablas[i,3])+1;j+=1) // para cada columna
            {
                variable_local_array2_set("tb_"+string(var_tablas[i,1]), 0, j, string_copy(var_linea, string_pos('{' + string(j) + '}',var_linea)+2+string_length(string(j)),string_pos('{' + string(j+1) + '}',var_linea)-string_pos('{' + string(j) + '}',var_linea)-(2+string_length(string(j)))) );
            }
           
            file_text_readln(var_file);                         // saltar a la sexta linea (nombre de filas)
            var_linea = file_text_read_string(var_file);        // leer (nombre de filas) de las tablas
           
/* Nombre de Filas */
           
            for(j=1;j<real(var_tablas[i,2])+1;j+=1) // para cada fila
            {
                variable_local_array2_set("tb_"+string(var_tablas[i,1]), j, 0, string_copy(var_linea, string_pos('{' + string(j) + '}',var_linea)+2+string_length(string(j)),string_pos('{' + string(j+1) + '}',var_linea)-string_pos('{' + string(j) + '}',var_linea)-(2+string_length(string(j)))) );
            }
           
/*  Llenar Datos de Tablas*/   
         
            for(j=1;j<real(var_tablas[i,2])+1;j+=1) // para cada fila de la tabla
            {
                file_text_readln(var_file);                         // saltar a la septima línea (datos tabla)
                var_linea = file_text_read_string(var_file);        // leer (datos tabla)
               
                for(k=1;k<real(var_tablas[i,3])+1;k+=1) // para cada columna de la fila de la tabla
                {
                    variable_local_array2_set("tb_"+string(var_tablas[i,1]), j, k, string_copy(var_linea, string_pos('{' + string(k) + '}',var_linea)+2+string_length(string(k)),string_pos('{' + string(k+1) + '}',var_linea)-string_pos('{' + string(k) + '}',var_linea)-(2+string_length(string(k)))) );
                }
            }
       }
    }
}

Bueno, ese script debe ser llamado con un argumento que es el nombre del archivo, entonces en el create de un objeto ponés
scr_cargar("tabla.txt")
Con el nombre de archivo que tengas.

Ahora se te habrá creado un array llamado "tb_nombretabla" dependiendo como has llamado a la tabla

Listo, recordá cómo esta escrito el array, como te expliqué antes:
Citarvar_nombretabla[x,x]: Obviamente tenés que cambiar el "nombretabla" por el nombre de tu tabla, ahí guarda lo que a vos te interesa, en [0,0] guarda el numero que tiene esa tabla en var_tablas[] (no es tan importante). En la primera columna guarda el nombre de las filas y en la primer fila el nombre de las columnas,

Ahora tenemos que hacer que el juego haga algo en tal milisegundo, a esto lo expliqué así que lo cito y lo modifico un poco:
Cita de: Mgbu en Septiembre 26, 2012, 11:02:22 PM
Por ejemplo para vos saber el color del enemigo en el instante 3500 primero tenés que saber en qué fila está el instante 3500, así que vas buscando una por una con un for, sría algo así
[gml]
for (i=1;i<=cantidad_filas;i+=1) {
    if array[1,i]=3500 fila=i //La columna es 1 porque es la columna con los milisegundos
}
[/gml]

Ahora que sabemos la fila buscamos el valor de la columna 1 en la fila conocida:
[gml]
color_enemigo=array[2,fila] //Ahora uso la columna 2 porque es la columna de los colores
[/gml]

EDIT: Cualquier cosa si no es molestia pasame el gmk con la tabla que necesites así acomodo todo para que lo puedas usar, obviamente después explico bien todo lo que tuve que hacer
El Manual

- Ley de la gravitación selectiva: toda herramienta se caerá donde produzca el mayor daño.
- Si todo parece estar bien, es obvio que uno no encontró el problema
- Todo aquello que se corte a medida resultara ser demasiado corto.
- Todo archivo borrado era necesario, todo archivo conservado es inutil
- Cuando a usted se le ocurra la solución ideal, alguien habrá resuelto ya el problema.

                                                               Murphy