Cita de: Texic en Septiembre 12, 2013, 09:41:54 PM
Por cierto gracias por el debug, ha sido el más aplastante en mucho tiempo, pero da en el blanco y muy rápido jaja
Jaja supuse que no te gustaría, pero ni modo de dejarlo todo bugueado y feo :P .

Buff lo anterior fue en broma, a nadie le gusta que le digan sus errores (que siempre por más que lo intentes terminas dejando algo) y mucho menos que sugieran hacer las cosas de otro modo. Aquí estamos para ayudarnos, gracias por el agradecimiento.

Cita de: Texic en Septiembre 12, 2013, 09:41:54 PM
(Ya están reparadas, era un error por usar la función ceil)
Alguna vez discutí con wadk el uso de esa función en lugar de floor y yo estaba a favor de ceil (puede que no tenga que ver con el caso), ahh solo de pensar mis argumentos me siento idiota.

Descargue la versión más nueva. Añadí unas cuantas cosas al personaje para probar y quité esto "var dirx,diry" de step ya que ya las habías declarado en create. Si no es mucha molestia también declara aSlot por código odio las librerías.
[gml]
//Cambio de arma;
if keyboard_check_pressed(ord("1")) {aSlot=0; scr_cambiar_arma(0);}
if keyboard_check_pressed(ord("2")) {aSlot=1; scr_cambiar_arma(1);}
if (mouse_wheel_down() || mouse_wheel_up()) {aSlot=!(aSlot-1)+1; scr_cambiar_arma(aSlot);}

//Recarga manual
if ( ( keyboard_check_pressed( ord("Q") ) || mouse_check_button_pressed(mb_right) ) && scr_balas_arma(2) ) scr_recargar_arma();
[/gml]

P.D: EL cambio de slot no funciona correctamente (no cambia).

Te fijaste teniendo 2 armas? Porque el chequeo está puesto para que cambie si es que hay un arma en el otro slot. Inicialmente el no llevar arma iba a implicar un cuchillo, pero me dijeron que sería inutil así que no puse nada. Fijate que para recoger un arma no es necesario usar el slot actual, es cuestión de hacer un chequeo a mano sobre qué conviene antes de agarrarla
Declaré las variables para debuguear porque tenía que dibujar un par de cosas, siguen ahí porque me olvidé de sacarlas jaja




Cita de: Texic en Septiembre 12, 2013, 11:02:15 PM
Te fijaste teniendo 2 armas? Porque el chequeo está puesto para que cambie si es que hay un arma en el otro slot. Inicialmente el no llevar arma iba a implicar un cuchillo, pero me dijeron que sería inutil así que no puse nada.
Uh eso lo explica todo. No creo que el cuchillo sea innecesario, cuando ya no te quedan balas siempre es útil (creo). En todo caso se tiene que cambiar el código agarrar armas de el jugador:
[gml]
//Tomar un arma
if keyboard_check_pressed( ord("E") ) {
    if (scr_get_arma(2)==""){
        scr_recoger_arma_piso( 2 );
    }else scr_recoger_arma_piso( aSlot );
}
[/gml]
Y estos cambíalos por 1 y 2, que los tenia con 0 y 1.
[gml]
if keyboard_check_pressed(ord("1")) {aSlot=1; scr_cambiar_arma(1);}
if keyboard_check_pressed(ord("2")) {aSlot=2; scr_cambiar_arma(2);}
[/gml]

Otra pregunta es, como funciona el evento 1, se activa siempre que alguien hace ruido (pasos) o solo con disparos. Funciona para todas las habitaciones o solo si está cerca, se puede saber de donde viene el sonido?.

Sabes planeo usar está IA para un juego y así matar 2 pájaros de un tiro, lo único que creo que yo creo le pondría a esto es poder correr (sin poder disparar), aunque supongo tu ya lo habías contemplado.

El evento 1 se activa cuando un enemigo dispara o recarga cerca (en el caso del disparo a una distancia de 300 y en la recarga 200 ya que hace menos ruido). En ese preciso momento se activa el evento y se pueden obtener sus datos de manera normal con el script scr_ver_enemigos, duran apenas un pestañeo, nuestra ia puede saber por el sonido de dónde vino, qué arma se usó y qué tipo de acción se realizó (también se puede obtener la vida, cosa que no es realista, pero es una nimiedad)




  Saludos Makeros:


   ¡Muchas gracias a todos los que intervinieron en este nuevo GIA!

   Por lo que ya pude observar está muy trabajado y va a ser todo un reto para programar una buena IA...

  Tengo alguna dudas...

  1 - ¿Si los enemigos no colisionan con el "raycasting" cómo se ven los enemigos? ¿A una distancia específica? ¿Cual?

  2 - El "script" "scr_girar" dice "//hace que la IA gire hacia una dirección para detectar enemigos o realizar disparos". ¿Se detectan los enemigos a partir del frente del personaje?

  3 - Mi personaje se atasca cuando se pega a una pared de marcha atrás y luego intenta deslizarce a lo largo de la pared  mirando en dirección de la misma. ¿Es esto un "bug", que la máscara no es homogénea o que las colisiones son precisas?

  Por el momento son estás mis preguntas...

  Felicidades a Texic, Daz, Ciberman y Jesus por este nuevo GIA.

  ¡A Makear...! ;D 


El engine calcula un rango de visión para el personaje (para que el personaje no vea a través de cajas y eso). Hay un script llamado scr_ver_enemigos que te devuelve la cantidad de enemigos en vista, y los demás scripts sirven para obtener sus datos. El rango de visión se calcula hacia donde estás mirando, no importa qué dirección tomes para moverte. Bueno, no debería atascarse técnicamente, pero por la naturaleza de las máscaras circulares y los giros a partir de un punto medio puede meterse en una esquina al girar con un pixel en cada lado y eso te imposibilitaría salir con el script de mover (todavía trabajo para arreglarlo), sin embargo podés salir facilmente calculando un camino, que es mucho más fiable que el script mover




Sí, el problema con las colisiones se da ya que la mascara gira (odio que gm haga eso). Creo que esto no es un problema para las IAs, por lo mismo no había dicho nada, de todos modos lo resolví en mi editable para poder moverme con fluidez mientras juego contra mi IA. Si quieren saber cómo, simplemente eliminen todas las referencias a image_angle del objeto IA y en draw ponen esto:
[gml]draw_sprite_ext(sprite_index, image_index, x, y, image_xscale, image_yscale, _visdir, image_blend, image_alpha);[/gml]

También se puede hacer la mascara cuadrada.

Ya eliminé las referencias a image_angle a ver si soluciona el error, gracias por el tip bruno, no había trabajado mucho con top-down antes




#23 Septiembre 13, 2013, 06:22:11 AM Ultima modificación: Septiembre 13, 2013, 06:26:55 AM por brunoxzx
Cita de: Texic en Septiembre 13, 2013, 02:17:34 AM
Ya eliminé las referencias a image_angle a ver si soluciona el error, gracias por el tip bruno, no había trabajado mucho con top-down antes
Amo los top down. Mis primeros juegos fueron top down y aún actualmente sigo con eso, llevo unos cuantos meses trabajando en top down en gm:studio (AMAZING) así que se podría decir que estoy lleno de "tips" para esto.

Bueno aprovecho para decirte que el objeto de la luz de los disparos no se crea en el angulo al que miras, debido a lo de image_angle. También ya que tendrás que volverlo () subir cambia el código del jugador por esté para poder recargar cuando quieras y cambiar de arma con el mouse.

[spoiler]
[gml]
//Movimiento con teclas
var dirx,diry;
dirx=keyboard_check( ord("D" ))-keyboard_check( ord("A") );
diry=keyboard_check( ord("S") )-keyboard_check( ord("W") );
if abs(dirx) or abs(diry) scr_mover( point_direction(0, 0, dirx, diry) );

//Giro con el mouse
var diff;
diff=-( (( (( scr_get_direccion()-point_direction(x, y, mouse_x, mouse_y) )mod 360) +540)mod 360)-180 );
scr_girar( median( diff , 7, -7) );

//Cambio de arma;
if keyboard_check_pressed(ord("1")){ scr_cambiar_arma(1); aSlot=1}
if keyboard_check_pressed(ord("2")){ scr_cambiar_arma(2); aSlot=2}
if (mouse_wheel_down() || mouse_wheel_up()) {aSlot=!(aSlot-1)+1; scr_cambiar_arma(aSlot);}

//Recarga manual
if ( ( keyboard_check_pressed( ord("Q") ) || mouse_check_button_pressed(mb_right) ) && scr_balas_arma(2) ) scr_recargar_arma();

//Tomar un arma
if keyboard_check_pressed( ord("E") ) {
    if (scr_get_arma(2)==""){
        scr_recoger_arma_piso( 2 );
    }else scr_recoger_arma_piso( aSlot );
}

//Disparar
if mouse_check_button(mb_left){
    if !scr_balas_arma(1){
        if scr_balas_arma(2) scr_recargar_arma();
    }else{
        scr_disparar();
    }
}
[/gml]
[/spoiler]

Vamos y vuelvo con la sugerencia de correr, correr es necesario en esté tipo de juegos, daría muchas más posibilidades a las IAs ademas de más realismo.

P.D:Quizás sea molesto, pero intento sugerir todas las cosas que pueda hoy que es primer día ya que más tarde es probable que no se puedan implementar como dice el viejo dicho: "habla ahora o calla para siempre". Te envió un mp con otras cosas que tal vez podrías implementar.

Listo, ya está arreglado. Sobre correr, si, es una buena idea a implementar, pero es muy complicada por los tipos de movimiento involucrados, además de que habría que meter un chequeo en varios scripts para no ejecutarse si está corriendo, y el hecho de que la variable que maneja si estás corriendo o no debería durar 2 steps en vez de 1 y eso complicaría más las cosas. Es una buena sugerencia pero lamentablemente no puedo hacer un cambio así de grande en el engine a estas alturas, podría buguear o inhabilitar muchas cosas




Ya te envie el mp texic. La idea sería que puedas decidir la velocidad con la que caminas, y dependiendo de está tu puntería disminuya. De ese modo no tendrías que bloquear nada del engine, simplemente hacer el rango de aleatoriedad relativo a tu velocidad y de hecho quedaría genial. Implementar un sistema de cansancio podría estar bueno, pero eso si podría llegar a ser algo complicado.

Si hay alguna idea que te gusté pero no la vayas implementar por tiempo, quizá pueda ayudarte con eso que tengo algo de tiempo libre.

#26 Septiembre 13, 2013, 07:32:48 PM Ultima modificación: Septiembre 13, 2013, 08:55:28 PM por Mgbu
Como se cruzan las puertas? si  me muevo manualmente puedo, pero si calculo un camino no puedo

Tambien me aparece este error cuando me quiero fijar el tipo de un objeto (supongo que es Vida, ya que es el unico objeto cercano)
In script scr_tipo_objeto:
Error in code at line 3:
   return (ds_list_find_value(_objetos,argument0-1)).tipo
                                                     ^
at position 52: Unknown variable tipo


Y por último el sprite de el objeto vida no está centrado, es decir que si me quiero mover hasta su posición debo escribir vida.x+16, vida.y+16
Perdón, esto estaba aclarado en la Nota 2

Ah, y por las dudas, ¿las preguntas de este tipo van acá?
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


Estoy pensando seriamente en participar, pero ese REGLAMENTO me dejó KO! (No intento ser prejuicioso, pero... ¡Cuantas reglas!) JAJA, en fin. Intentaré llegarle al nivel de todos los buenos makeros de esta comunidad  ;D

Cita de: Masterkey en Septiembre 13, 2013, 08:29:07 PM
Estoy pensando seriamente en participar, pero ese REGLAMENTO me dejó KO! (No intento ser prejuicioso, pero... ¡Cuantas reglas!) JAJA, en fin. Intentaré llegarle al nivel de todos los buenos makeros de esta comunidad  ;D
Yo es la primera vez que participo y me parece un poco raro lo de las tres hojas en el evento create, no las entiendo, que son las hojas?
Citar10. Trabajar sobre hojas distintas a las que utilizan los scripts defaults que ya vienen con el editable.
  11. En las hojas se deberá incluir un // indicando si la hoja va antes o después del script default y en caso de ser varias numerarlas.
Como varias hojas? Que script default?
Pueden actualizar el SDK poniendo esas hojas así el participante las edita?
Obviamente no hay ningun apuro, ya mucho esfuerzo están poniendo en organizar el concurso!
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


Con ojas se refiere a la librería de "execute a piece of code". El script default es el que se llama "scr_init_ia" que está en el "obj_ia".

Y lo de comentar los códigos básicamente es hacer algo como esto:

[gml]//Antes:
xx=0;
yy=0;
busqueda[0]=0;
busqueda[1]=0;
//Esta sería mi hoja que va antes de ejecutar el script default[/gml]
[gml]Libreria--Exeute script: scr_init_ia--[/gml]
[gml]
//Despues:
xvel=0;
yvel=0;
slot=1;
ver=0;
//Está es mi hoja que va después del script default
[/gml]

En el caso del "obj_ia_player" no existe el "script default" por lo que la librería "Call the inherited event" toma su función y si pones un código antes de ella debes especificar que ese código va antes, lo mismo si lo pones después. Aunque en realidad lo más probable es que no tengas que poner ningún código antes.