Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - Mgbu

316
Cita de: Silver_light en Septiembre 26, 2012, 10:44:25 PM
Acerca de la funcion maligna(?
Cito: (Lease en inglés)
Citar
They make execution of your game slower. When Game Maker starts, it converts all scripted GML into a byte-coded representation, by verifying the syntax, checking the parameters and converting them into something that GM can execute much faster. Your game runs faster because this first step of interpretation of your programming takes place the start of the executable, and not while it is actually running the game. But execute_string() and execute_file() always apply this parsing during the game, when these commands are called. This can introduce a performance drop in your game, especially when used in continuously (step, draw) and semi-continuously (key, collision) triggered events.
Lo he sacado de:www.gmc.yoyogames.com/index.php?showtopic=322492

Viendo que es una funcion sumamente lenta, suponiendo para juegos más complejos, utilizar Switch no está mal, sin embargo sería engorroso, pero de todas formas no creo que afecte el rendimiento como lo haría execute_string, a menos que tengas miles de Cheat's XD
P/D: por cierto, agregaste nuevamente execute_string() debajo de todo el Switch
Esta bien, lo voy a cambiar, va a ser mejor, total no complica nada
Dejé el execute_string abajo... porque me olvide de sacarlo XD
317
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 :-[
318
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
319
Me dice que no es una aplicacion Win32 válida, lo descargué dos veces por las dudas y sigue igual, ¿Por que será?
320
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
321
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
322
Cita de: Silver_light en Septiembre 26, 2012, 02:41:44 AM
Hola Mgbu, tu Script es interesante, nunca había intentado ejecutar un script de esa forma, es más... ni siquiera sabía que se podía XD
Vaya...

Mirando el comentario de Maitreya:
Cita de: Maitreya en Septiembre 26, 2012, 02:09:32 AM
Tienes que usar execute_string, es decir, puedes encontrar otra forma de hacerlo sin esa funcion? tiene muy mala fama de ser lenta.
Supongo que podrías replazar la dicha linea:
[GML] execute_string('scr_cheat_'+cheats+'()') //Ejecutar un script[/GML]
por:
[GML]script_execute(i);[/GML]
puesto que la conicidencia se logra en el elemento i, verdad?

EDIT: De hecho, lo he comprobado y solo funcionaría si los indices de los scripts fueran creados en orden.
Uuy, no sabia que era lenta, justo esa función (execute_string) me encanta porque hace de todo XD

Se puede reemplazar por un switch, algo así como:
[gml]
if keyboard_lastkey>=ord('A') and keyboard_lastkey<=ord('Z') { //Si la tecla apretada es una letra
    for (i=0;i<cantcheats;i+=1) { //Probar con cada truco
        largo=string_length(cheats) //largo = largo del truco
        largoescrito=string_length(keyboard_string) //largoescrito = largo de keyboard_string
        escrito=string_copy(keyboard_string,largoescrito-largo+1,largo) //escrito = ultimos caracteres de keyboard_string (si el truco mide 6 se fija los ultimos 6, si el truco mide 5 se fija los ultimos 5 y así)
        if escrito=cheats { //Si lo escrito es igual al truco
            switch (cheats)
            case medico: {
                //Codigo a ejecutar si se escribio "medico"
            }
            case rambo: {
                //Codigo a ejecutar si es "rambo"
            }
            case piratas: {
                //Codigo a ejecutar si es "piratas"
            }
            execute_string('scr_cheat_'+cheats+'()') //Ejecutar un script
        }
    }
}
[/gml]
¿Que les parece si lo cambio por eso?
323
Para los trofeos o logros no creo que haga falta hacer nada. En el evento en donde ganas el logro haces que ganes el logro y listo XD
Podés guardar en un ini que logros ganaste y cuáles no para mostrarlos después

Gracias por pasar ;D
324
Preguntas y respuestas / Re:GM en Youtube
Septiembre 25, 2012, 09:54:31 PM
Ah, pero igual me parece que les guste a Yoyo o no, es lo mismo. Yo lo nombraría para que sepan de que es y por el tema de las tags. Tampoco vi ningún video bloqueado porque Yoyo quería
325
Como vi que lo preguntaron bastante pero no hay un engine en esta sección hice uno bien simple:

Nombre del creador
Yo, Mgbu

Breve descripción de la función
Es un código que se fija continuamente si has escrito alguna de las palabras clave para ejecutar un código, en ese código podés darle más vida al jugador, darle municiones, puntos o lo que sea

Versión de GM utilizada
GM 8.0

Código de la función

Es un objeto que se fija continuamente si has escrito un truco para el juego.. Chequea cada vez que apretas una tecla desde la A a la Z, buscando si acabas de escribir el truco. Así que no hace falta apretar enter, abrir un cuadro de texto ni nada. Apenas uno termina de escribir la clave se ejecuta lo que uno quiere

Este es el código, esto va en un objeto obj_cheats (o como quieras llamarlo). Tiene que estar cuando lo necesitas, así que es bueno ponerlo en la primera room y hacerlo persistente. Pero cuidado que no se duplique!
Esto va en el evento Key Press>Any Key
[gml]
//Seteamos los trucos, esto puede ir en create/////
cantcheats=3  //Cantidad de trucos               //
cheats[0]='medico'                               //
cheats[1]='rambo'                                //
cheats[2]='piratas'                              //
///////////////////////////////////////////////////

if keyboard_lastkey>=ord('A') and keyboard_lastkey<=ord('Z') { //Si la tecla apretada es una letra
    for (i=0;i<cantcheats;i+=1) { //Probar con cada truco
        largo=string_length(cheats) //largo = largo del truco
        largoescrito=string_length(keyboard_string) //largoescrito = largo de keyboard_string
        escrito=string_copy(keyboard_string,largoescrito-largo+1,largo) //escrito = ultimos caracteres de keyboard_string (si el truco mide 6 se fija los ultimos 6, si el truco mide 5 se fija los ultimos 5 y así)
        if escrito=cheats { //Si lo escrito es igual al truco
            switch (cheats)
            case medico: {
                //Codigo a ejecutar si se escribio "medico"
            }
            case rambo: {
                //Codigo a ejecutar si es "rambo"
            }
            case piratas: {
                //Codigo a ejecutar si es "piratas"
            }
        }
    }
}
[/gml]

Después de resumirlo queda mas lindo pero mas dificil de entender, esto es lo mismo que lo que escribí antes
[gml]
//Seteamos los trucos, esto puede ir en create/////
cantcheats=3  //Cantidad de trucos               //
cheats[0]='medico'                               //
cheats[1]='rambo'                                //
cheats[2]='piratas'                              //
///////////////////////////////////////////////////

if keyboard_lastkey>=ord('A') and keyboard_lastkey<=ord('Z') { //Si la tecla apretada es una letra
    for (i=0;i<cantcheats;i+=1) { //Probar con cada truco
        if string_copy(keyboard_string,string_length(keyboard_string)-string_length(cheats)+1,string_length(cheats))=cheats { //Obtener lo último escrito y compararlo con el truco
            switch (cheats)
            case medico: {
                //Codigo a ejecutar si se escribio "medico"
            }
            case rambo: {
                //Codigo a ejecutar si es "rambo"
            }
            case piratas: {
                //Codigo a ejecutar si es "piratas"
            }
        }
    }
}
[/gml]

Luego lo que falta es escribir en los case, ahí pones lo que queres que se ejecute cuando se escribió el truco
326
Preguntas y respuestas / Re:GM en Youtube
Septiembre 25, 2012, 06:42:21 PM
No creo que te borren ningun video, hasta a Yoyo le conviene que hagas tutoriales para difundir el lenguaje. Además no le veo forma a que sepan que tu GM no es original
327
Preguntas y respuestas / Re:creacion de juego dragon ball
Septiembre 24, 2012, 11:28:25 PM
En realidad tenés que buscarle la forma vos y si no te sale algo preguntar, o sea que el que empieza a hacer el juego sos vos. No se que es Buyu retsuden pero encontré un engine de Dragon Ball Z en las descargas (tampoco tengo mucha idea de Dragon Ball pero bueno...)
328
Desarrolladores / BernardiGames
Septiembre 24, 2012, 08:51:45 PM


Mgbu
Julio de 2011
Argentina

Puse el nombre BernardiGames por primera vez como chiste, en el juego TANQUES! (mi tercer juego) y decía "Copyright 2012 BernardiGames (R)" eso fue en Julio de 2011. Y nada más, solamente un nombre de chiste.


- El Explorador (Perdí el .exe y el .gmk)
- SiMaCa
- TANQUES!
- T2
- Mach 0,5
- Guerrita
- Bloques
- Pioneer



Actualmente nada en Game Maker :(
De todos modos puedes ver avances de otros juegos en Facebook


bernardigames.tk
Wordpress de BernardiGames
Facebook de BernardiGames


martinber.710@gmail.com
329
Muy bueno, es muy util, ojala lo hubiera tenido antes :P
330
Preguntas y respuestas / Re:Saber nombre de objeto
Septiembre 19, 2012, 07:04:59 PM
Oh dios, hay una variable que se llama object_index :o. Me debo estar durmiendo, pero... no puedo borrar el tema XD
Lo autosolucioné en 20 segundos, New Highscore! XD