Hacer saltos diagonales o hacia arriba o abajo

Started by BlySntK, March 08, 2012, 07:55:39 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BlySntK

Buenas... esa es mi duda... He probado con el algoritmo de salto que tengo poner al inicio del salto father.y--; father.x--; pero no me lo soluciona. El personaje no se mueve en un camino recto como un plataformas corriente, sino que el camino es ancho y puedo moverse de arriba hacia abajo hasta unos límites laterales, al saltarme me salta pero se me queda en el lateral superior (es lo que tiene al ser funcionalmente un plataformas). Algún consejo?
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

Yawin

No entiendo que tiene que hacer el personaje qué hace. Si pudieses explicarlo un poco mejor...
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

BlySntK

Veamos, un plataformas normal y corriente, el personaje va en línea recta (no puede ni andar hacia arriba o hacia abajo (como en un RPG o Betem'up -Tipo Final Fight-) y al saltar pues salta normal, o a la derecha o a la izquierda. Lo que necesito es que salte, por ejemplo, en diagonal; hacia abajo si vamos abajo, a la derecha si vamos a bajo y a la derecha o abajo y a la izquierda. Y viceversa para cuando queramos ir hacia arriba.
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

Rein (K´)ah Al-Ghul

poniendo gravedad mas con un if independiente del de movimiento horizontal (osea que no este en el ELSE del de izquierda derecha)
de forma que pueda pasar por ambas condiciones independientemente

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

BlySntK

Quote from: Rein (K´)ah Al-Ghul on March 08, 2012, 09:25:26 PM
poniendo gravedad mas con un if independiente del de movimiento horizontal (osea que no este en el ELSE del de izquierda derecha)
de forma que pueda pasar por ambas condiciones independientemente

No pillo :S Yo tengo un proceso gravedad general que se ocupa de todo el movimiento del personaje en todos los procesos, hay que modificar el proceso gravedad incluyendo un if que compare los movimientos del personaje o cómo...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

Rein (K´)ah Al-Ghul

del mismo modo que haces que se mueva para izquierda/derecha
pero hacia arriba (poniendo un limite al salto claro)
por ejemplo:
PosicionY += ImpulosVertical - Gravedad
ImpulsoVertical -= gravedad

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

BlySntK

#6
pero claro, el if del movimiento verticial arriba/abajo, independentemente del movimiento normal arriba/abajo, me dices que debo ponerle el mismo impulso que le pongo cuando le diga saltar, no?

yo tempo por ejemplo:


//Esto lo tengo para que salte
if(key(_space))
fuerza_de_gravedad=fuerza_de_salto;

//Esto para que se mueva
if(key(_left))
x-=3;

//Esto para arriba/abajo
if(key(_up))
y-=3;


Cómo sería entonces, poner otro impulsor al movimiento de arriba o abajo aplicándole la fuerza de gravedad?

algo así?

if(key(_up))
fuerza_de_gravedad=fuerza_de_salto;

pero en su proceso salto, es así?

También mencionar que la gravedad la tengo en un proceso y está más o menos entre medio de los movimientos y justo antes del salto
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

Yawin

O sea, lo que quieres es aplicar una gravedad, no?
En ese caso, en vez de asignarle a la y un valor. Asígnaselo a una variable a la que por ejemplo llames grav_y y vete sumándosela poco a poco a la y. No se si me explico.
Te voy a dejar el código del prota de un plataformas que hice, para ver si se entiende lo que digo. Espero que te ayude.


process prota(int eq, int iy)
   private
      int grav_y=0,grav_x=0;
      int i,j,k,idm;
      bool salto=false;
   end
   begin
      file=fpgs[1];
      graph=10;
      ctype=c_scroll;
      scroll[0].camera=id;
      size=23;
      z=0;
     
      /*delete_text(0);
      write_var(fnts[1],20,20,3,x);
      write_var(fnts[1],80,40,3,y);*/
     
      x=eq;
      y=iy;
      flags=0;
      graph=10;
      grav_y=0;
      grav_x=0;
               
      loop
         while(anim==true)
            frame;
         end
         
         if(key(_d) && map_get_pixel(fpgs[2],1,x+6,y)!=map_get_pixel(fpgs[0],6,3,0))
            // Animación de andar /////
               if(caja!=true)
                  j++;
                  if(j==2)
                     j=0;
                     if(graph<11)
                        graph=11;
                     end
                     graph++;
                     if(graph>=19)
                        graph=11;
                     end
                  end
               else
                  j++;
                  if(j==2)
                     j=0;
                     if(graph<111)
                        graph=111;
                     end
                     graph++;
                     if(graph>=119)
                        graph=111;
                     end
                  end
               end
            ////////////////////////////////
            grav_x=3;
            direc=false;
         end
         
         if(key(_a) && map_get_pixel(fpgs[2],1,x-6,y)!=map_get_pixel(fpgs[0],6,2,0))
            // Animación de andar /////
               if(caja!=true)
                  j++;
                  if(j==2)
                     j=0;
                     if(graph>9)
                        graph=8;
                     end
                     graph--;
                     if(graph<=1)
                        graph=9;
                     end
                  end
               else
                  j++;
                  if(j==2)
                     j=0;
                     if(graph>109)
                        graph=108;
                     end
                     graph--;
                     if(graph<=101)
                        graph=109;
                     end
                  end
               end
            ////////////////////////////////           
            grav_x=-3;
            direc=true;
         end
         
         if(grav_y<15)
            grav_y++;
         end
     
         if(gravedad!=false)
            flags=0;   
            if(grav_y>0)
               for(i=0;i<grav_y;i++)
                  if(!collision(type objetos) &&  !collision(type objetos) &&  map_get_pixel(fpgs[2],1,x,y+13)!=map_get_pixel(fpgs[0],6,0,0) && map_get_pixel(fpgs[2],1,x,y+13)!=map_get_pixel(fpgs[0],6,5,0))
                     y++;
                  else
                     if(grav_y>13 && salto!=false)
                        salto=false;
                        graph=10;
                     end
                  end
               end
            else
               for(i=grav_y;i<0;i++)
                  if(map_get_pixel(fpgs[2],1,x,y-13)!=map_get_pixel(fpgs[0],6,4,0))
                     y--;
                  else
                     grav_y=0;
                  end
               end
            end
         else
            flags=2;
            if(grav_y>0)
               for(i=0;i<grav_y;i++)
                  if(!collision(type objetos) &&  !collision(type objetos) && map_get_pixel(fpgs[2],1,x,y-13)!=map_get_pixel(fpgs[0],6,1,0) && map_get_pixel(fpgs[2],1,x,y-13)!=map_get_pixel(fpgs[0],6,4,0))
                     y--;
                  else
                     if(grav_y>13 && salto!=false)
                        salto=false;
                        graph=10;
                     end
                  end
               end
            else
               for(i=grav_y;i<0;i++)
                  if(map_get_pixel(fpgs[2],1,x,y+13)!=map_get_pixel(fpgs[0],6,5,0))
                     y++;
                  else
                     grav_y=0;
                  end
               end           
            end
         end
                 
         if(key(_space))
            if(grav_x>=0)
               graph=19;
            else
               graph=1;
            end
            if(grav_y>-15 && salto!=true)
               grav_y-=5;
            elsif(salto!=true)
               salto=true;
            end
         end


         x+=grav_x;
         if(grav_x<0)
            grav_x++;
         elsif(grav_x>0)
            grav_x--;
         else
            if(salto!=true)
               if(caja!=true)
                  graph=10;
               else
                  graph=110;
               end
            end
         end
         
         frame;
         
         if(y>640 && gravedad==true)
            break;
         elsif(y<0 && gravedad==false)
            break;
         elsif(idm=collision(type malos))
            break;
         end
      end
      //Si pasamos por aqui es que hemos muerto
      muerto=true;     
   end
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

BlySntK

#8
Quote from: Yawin on March 09, 2012, 09:13:42 AM
O sea, lo que quieres es aplicar una gravedad, no?
En ese caso, en vez de asignarle a la y un valor. Asígnaselo a una variable a la que por ejemplo llames grav_y y vete sumándosela poco a poco a la y. No se si me explico.
Te voy a dejar el código del prota de un plataformas que hice, para ver si se entiende lo que digo. Espero que te ayude.


process prota(int eq, int iy)
   private
      int grav_y=0,grav_x=0;
      int i,j,k,idm;
      bool salto=false;
   end
   begin
      file=fpgs[1];
      graph=10;
      ctype=c_scroll;
      scroll[0].camera=id;
      size=23;
      z=0;
     
      /*delete_text(0);
      write_var(fnts[1],20,20,3,x);
      write_var(fnts[1],80,40,3,y);*/
     
      x=eq;
      y=iy;
      flags=0;
      graph=10;
      grav_y=0;
      grav_x=0;
               
      loop
         while(anim==true)
            frame;
         end
         
         if(key(_d) && map_get_pixel(fpgs[2],1,x+6,y)!=map_get_pixel(fpgs[0],6,3,0))
            // Animación de andar /////
               if(caja!=true)
                  j++;
                  if(j==2)
                     j=0;
                     if(graph<11)
                        graph=11;
                     end
                     graph++;
                     if(graph>=19)
                        graph=11;
                     end
                  end
               else
                  j++;
                  if(j==2)
                     j=0;
                     if(graph<111)
                        graph=111;
                     end
                     graph++;
                     if(graph>=119)
                        graph=111;
                     end
                  end
               end
            ////////////////////////////////
            grav_x=3;
            direc=false;
         end
         
         if(key(_a) && map_get_pixel(fpgs[2],1,x-6,y)!=map_get_pixel(fpgs[0],6,2,0))
            // Animación de andar /////
               if(caja!=true)
                  j++;
                  if(j==2)
                     j=0;
                     if(graph>9)
                        graph=8;
                     end
                     graph--;
                     if(graph<=1)
                        graph=9;
                     end
                  end
               else
                  j++;
                  if(j==2)
                     j=0;
                     if(graph>109)
                        graph=108;
                     end
                     graph--;
                     if(graph<=101)
                        graph=109;
                     end
                  end
               end
            ////////////////////////////////           
            grav_x=-3;
            direc=true;
         end
         
         if(grav_y<15)
            grav_y++;
         end
     
         if(gravedad!=false)
            flags=0;   
            if(grav_y>0)
               for(i=0;i<grav_y;i++)
                  if(!collision(type objetos) &&  !collision(type objetos) &&  map_get_pixel(fpgs[2],1,x,y+13)!=map_get_pixel(fpgs[0],6,0,0) && map_get_pixel(fpgs[2],1,x,y+13)!=map_get_pixel(fpgs[0],6,5,0))
                     y++;
                  else
                     if(grav_y>13 && salto!=false)
                        salto=false;
                        graph=10;
                     end
                  end
               end
            else
               for(i=grav_y;i<0;i++)
                  if(map_get_pixel(fpgs[2],1,x,y-13)!=map_get_pixel(fpgs[0],6,4,0))
                     y--;
                  else
                     grav_y=0;
                  end
               end
            end
         else
            flags=2;
            if(grav_y>0)
               for(i=0;i<grav_y;i++)
                  if(!collision(type objetos) &&  !collision(type objetos) && map_get_pixel(fpgs[2],1,x,y-13)!=map_get_pixel(fpgs[0],6,1,0) && map_get_pixel(fpgs[2],1,x,y-13)!=map_get_pixel(fpgs[0],6,4,0))
                     y--;
                  else
                     if(grav_y>13 && salto!=false)
                        salto=false;
                        graph=10;
                     end
                  end
               end
            else
               for(i=grav_y;i<0;i++)
                  if(map_get_pixel(fpgs[2],1,x,y+13)!=map_get_pixel(fpgs[0],6,5,0))
                     y++;
                  else
                     grav_y=0;
                  end
               end           
            end
         end
                 
         if(key(_space))
            if(grav_x>=0)
               graph=19;
            else
               graph=1;
            end
            if(grav_y>-15 && salto!=true)
               grav_y-=5;
            elsif(salto!=true)
               salto=true;
            end
         end


         x+=grav_x;
         if(grav_x<0)
            grav_x++;
         elsif(grav_x>0)
            grav_x--;
         else
            if(salto!=true)
               if(caja!=true)
                  graph=10;
               else
                  graph=110;
               end
            end
         end
         
         frame;
         
         if(y>640 && gravedad==true)
            break;
         elsif(y<0 && gravedad==false)
            break;
         elsif(idm=collision(type malos))
            break;
         end
      end
      //Si pasamos por aqui es que hemos muerto
      muerto=true;     
   end


Con el proceso personaje así, salta tanto izquierda/derecha como aribba/abajo o diagonal izquierda/derecha? Si es así lo estudiaré. Por lo visto, las variables grav_y y grav_x serán utilizadas con un proceso gravedad, no? Aunque por lo que observo... son privadas, asi que... la gravedad estará integrada en el proceso protagonita... O me estoy equivocando? Si no es como creo, díme de qué manera se podrían usar estas variables dentro de un proceso que controle la gravedad general del programa. Por ahora, yo uso dicho proceso con una única variable que recoge la gravedad exterior.
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

Yawin

No hace exactamente lo que tú necesitas. Pero salta. Si entiendes cómo va, no te resultará dificil hacer lo que quieres hacer.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

BlySntK

Quote from: Yawin on March 09, 2012, 11:53:22 AM
No hace exactamente lo que tú necesitas. Pero salta. Si entiendes cómo va, no te resultará dificil hacer lo que quieres hacer.

Sinceramente el código, viendolo tal como esta, lo entiendo bien y sé que cambiando el contexto de algunas condiciones me funcionaría... pero, me pierdo si he de pensar en dónde y qué es lo que debo meter para conseguir lo que necesito... :S
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

Yawin

Pues no modifiques el mio. Haz el tuyo desde 0 recordando lo que has aprendido del mio. Y, una recomendación muy importante: hazte esquemas. Los programadores usamos mucho papel.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

BlySntK

Quote from: Yawin on March 10, 2012, 08:24:14 AM
Pues no modifiques el mio. Haz el tuyo desde 0 recordando lo que has aprendido del mio. Y, una recomendación muy importante: hazte esquemas. Los programadores usamos mucho papel.

Lo sé... si soy partidario de los diagramas de flujo y dejarme explicaciones de cómo quiero los procesos internamente pero... da una pereza... a veces me sale más rentable hacerlo "sobre la marcha" aunque me salgan mucho más errores (claro que mirándolo así rentable no es...)
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

haitortiya

#13
Bueno creo que puedo ayudarte, ademas es muy sencillo, mira lo hacemos asi, solo sigue tres pasos:

- Tu copias el codigo que te paso ya echo, llamado gravedad y lo incluyes en tu juego
- Al campeon le aplicas una frase muy cortita
- Luego simplemente, restale la Y, y caera solo.

(Si entiendo bien lo que has querido decir, tu quieres aplicar gravedad, este es el mejor caso que vas a tener, espero :) , y
con solo reestarle Y el tiempo que quieras, luego bajara ( Funciona con Collisiones con el mapa de durezas segun pixeles ) )
*Si necesitas ayuda por que no entiendes muy bien como funciona, dimelo y me curro mas la explicacion, ahora simplemente te lo paso

Aqui el codigo que añadiras a tu juego
PROCESS gravedad(int POINTER velocidad_gravedad,int mapa,RGB_suelo,RGB_techo);
//Proceso encargado de gestionar la gravedad de un proceso
PRIVATE
    vgravedad; // Variable para guardar temporalmente la gravedad
BEGIN
    // Coge la coordenada y a partir de la gravedad del protagonista (padre)
    vgravedad=(*velocidad_gravedad+=1); // Pero incrementada en 2
    IF (vgravedad>16) // Si es mayor de 16
        *velocidad_gravedad=16; // Haz que sea 16 la gravedad del protagonista
        vgravedad=16; // Y tambi‚n la variable temporal
    end
    IF (vgravedad<0) // Si la gravedad es negativa
        WHILE (vgravedad++!=0) // Mientras no sea cero, la incrementa
        // Si no se da con el techo
            IF (map_get_pixel( grafico [ mapa_durezas ],mapa,father.x,(father.y-graphic_info(father.file,father.graph,G_HEIGHT)*father.size/200))<>RGB_techo)
                father.y--; // Haz que el protagonista suba
            ELSE // Si no pon la gravedad a cero
                *velocidad_gravedad=0;
                BREAK;
            END
        END
    ELSE// Si la gravedad es cero o positiva
        father.y+=vgravedad; // Se suma a la coordenada del protagonista
        // Comprueba el rango vertical del movimiento del protagonista
        FROM vgravedad=-16 TO 7; // Acaba el proceso si se toca el suelo
            IF (map_get_pixel( grafico [ mapa_durezas ],mapa,father.x,(father.y+vgravedad+graphic_info(father.file,father.graph,G_HEIGHT)*father.size/200))==RGB_suelo)
                BREAK; // Sal si se encuentra con el suelo
            END
        END
        IF (vgravedad< // Si se encuentra con el suelo
            father.y+=vgravedad; // Se actualiza con el m ximo que se pueda mover
            *velocidad_gravedad=0; // Y se pone la gravedad a 0
        END
    END
END


Aqui la Linea que deveras poner en tu protagonista dentro del Loop
gravedad(&velocidad_gravedad,mapa_durezas,durezas_suelo,durezas_techo);

Y te recuerdo que...
- Donde dice mapa_durezas es un identificador, constante que identifica el mapa de dureza que estas utilizando
- Durezas_suelo, esta puesto en el codigo de gravedad, y hace referencia a el Pixel con el cual chocara en el mapa dureza
   y hara de suelo
- Dureza_techo, pues lo mismo pero de techo

*Si quieres modular la velocidad con la que afectara la gravedad, a el campeon le pones Velocidad_gravedad = ?? ( lo que
tu quieras ), yo nunca lo cambio

Si hces esto, con todos tus personajes, enemigos etc, simplemente le pones la barra esa, y le aplicas gravedad, y saltos como tu quieras.

Espero haberte ayudado, Un saludo
Mi pagina web, donde cuelgo todos mis Proyectos

Gracias por entrar y ver su contenido

http://haitortiyagames.com.ar/

El Ultimo Dominador!!!!
http://haitortiyagames.com.ar/elultimodominador/inicio.html

BlySntK

Quote from: haitortiya on March 10, 2012, 11:31:29 PM
Bueno creo que puedo ayudarte, ademas es muy sencillo, mira lo hacemos asi, solo sigue tres pasos:

- Tu copias el codigo que te paso ya echo, llamado gravedad y lo incluyes en tu juego
- Al campeon le aplicas una frase muy cortita
- Luego simplemente, restale la Y, y caera solo.

(Si entiendo bien lo que has querido decir, tu quieres aplicar gravedad, este es el mejor caso que vas a tener, espero :) , y
con solo reestarle Y el tiempo que quieras, luego bajara ( Funciona con Collisiones con el mapa de durezas segun pixeles ) )
*Si necesitas ayuda por que no entiendes muy bien como funciona, dimelo y me curro mas la explicacion, ahora simplemente te lo paso

Aqui el codigo que añadiras a tu juego
PROCESS gravedad(int POINTER velocidad_gravedad,int mapa,RGB_suelo,RGB_techo);
//Proceso encargado de gestionar la gravedad de un proceso
PRIVATE
    vgravedad; // Variable para guardar temporalmente la gravedad
BEGIN
    // Coge la coordenada y a partir de la gravedad del protagonista (padre)
    vgravedad=(*velocidad_gravedad+=1); // Pero incrementada en 2
    IF (vgravedad>16) // Si es mayor de 16
        *velocidad_gravedad=16; // Haz que sea 16 la gravedad del protagonista
        vgravedad=16; // Y tambi‚n la variable temporal
    end
    IF (vgravedad<0) // Si la gravedad es negativa
        WHILE (vgravedad++!=0) // Mientras no sea cero, la incrementa
        // Si no se da con el techo
            IF (map_get_pixel( grafico [ mapa_durezas ],mapa,father.x,(father.y-graphic_info(father.file,father.graph,G_HEIGHT)*father.size/200))<>RGB_techo)
                father.y--; // Haz que el protagonista suba
            ELSE // Si no pon la gravedad a cero
                *velocidad_gravedad=0;
                BREAK;
            END
        END
    ELSE// Si la gravedad es cero o positiva
        father.y+=vgravedad; // Se suma a la coordenada del protagonista
        // Comprueba el rango vertical del movimiento del protagonista
        FROM vgravedad=-16 TO 7; // Acaba el proceso si se toca el suelo
            IF (map_get_pixel( grafico [ mapa_durezas ],mapa,father.x,(father.y+vgravedad+graphic_info(father.file,father.graph,G_HEIGHT)*father.size/200))==RGB_suelo)
                BREAK; // Sal si se encuentra con el suelo
            END
        END
        IF (vgravedad< // Si se encuentra con el suelo
            father.y+=vgravedad; // Se actualiza con el m ximo que se pueda mover
            *velocidad_gravedad=0; // Y se pone la gravedad a 0
        END
    END
END


Aqui la Linea que deveras poner en tu protagonista dentro del Loop
gravedad(&velocidad_gravedad,mapa_durezas,durezas_suelo,durezas_techo);

Y te recuerdo que...
- Donde dice mapa_durezas es un identificador, constante que identifica el mapa de dureza que estas utilizando
- Durezas_suelo, esta puesto en el codigo de gravedad, y hace referencia a el Pixel con el cual chocara en el mapa dureza
   y hara de suelo
- Dureza_techo, pues lo mismo pero de techo

*Si quieres modular la velocidad con la que afectara la gravedad, a el campeon le pones Velocidad_gravedad = ?? ( lo que
tu quieras ), yo nunca lo cambio

Si hces esto, con todos tus personajes, enemigos etc, simplemente le pones la barra esa, y le aplicas gravedad, y saltos como tu quieras.

Espero haberte ayudado, Un saludo

Muchas gracias por haberte molestado en ayudarme haitortiya, lamentablemente esa es exactamente la gravedad que uso (y va de perlas, cierto ^_^) Pero hay un añadido en la línea clave que maneja la colision del personaje con el mapa de durezas que yo lo pongo algo más corto, quizás sea por eso por lo que sólo me salta hacia la derecha u izquierda. Usando la función map_info conseguiría, ademas de que se moviera por todo el camino (de arriba a abajo, teniendo por limites las paredes laterales) que saltara libremente al lugar que le indicara? O como ya tenía entendido, simplemente salta cuanto quiera yo ponerle...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)