O que há de Novo?
Fórum Outer Space - O maior fórum de games do Brasil

Registre uma conta gratuita hoje para se tornar um membro! Uma vez conectado, você poderá participar neste site adicionando seus próprios tópicos e postagens, além de se conectar com outros membros por meio de sua própria caixa de entrada privada!

  • Anunciando os planos GOLD no Fórum Outer Space
    Visitante, agora você pode ajudar o Fórum Outer Space e receber alguns recursos exclusivos, incluindo navegação sem anúncios e dois temas exclusivos. Veja os detalhes aqui.


[Game maker] Uma ajuda com uma variável com o save

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Oi pessoal! Estou fazendo uma pequena empreitada com o game maker e tenho que admitir que não pensei que ia tão longe xD (Já tenho sistema de combate, movimento, save/load e pause)

Mas então vamos ao problema!

No meu projeto tem uma parte que um personagem fala com o jogador de como ele deve atravessar um labirinto, só que esse personagem erra as direções e o jogador morre, ele da load e quando o personagem vai falar novamente para o jogador ele fala OUTRO caminho.

Então o meu problema é como fazer um tipo de variável que se modifica apos o jogador salvar e não voltar ao valor do momento do save quando ele der load.

Se conseguirem me ajudar com essa questão ficarei eternamente grato xDD
 

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Então pessoal, surgiu um outro problema no projeto e não vou fazer outro topico, então vou colocar o problema aqui xDD

Eu tenho duas rooms até agora e as duas são persistentes, mas mesmo assim quando eu mato um inimigo e mudo de sala ele volta! Isso não deveria acontecer!

Alguém tem alguma dica??
 
Mensagens
17
Reações
7
Pontos
13
Eu não manjo de Game maker mas sei um pouco de programação. Posso te ajudar se você me explicar como funciona. Por exemplo na parte do labirinto, como funciona essa parte do save? não seria um checkpoint?
 

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Eu não manjo de Game maker mas sei um pouco de programação. Posso te ajudar se você me explicar como funciona. Por exemplo na parte do labirinto, como funciona essa parte do save? não seria um checkpoint?

Não, pq o personagem pode salvar na hora que ele quiser pq eu fiz um pause menu com a opção de save, mas em algumas salas em desativo essa função (Como num chefe e etc).

Quando o jogador salva ele salva as informações de lvl, hp, sala que ele se encontra e etc, mas o evento que acontece no labirinto é depois do save, então a variável que mudou com a morte é ressetada xD

Aqui o código de save que uso:

/// SCR_save_game();

/// jogador existe
if (!instance_exists (OBJ_Personagem_status)) exit;

/// criando a estrutura do save
var save_data = ds_map_create();

with (OBJ_Personagem_status) {
save_data[? "room"] = previous_room;
save_data[? "x"] = player_xstart;
save_data[? "y"] = player_ystart;
save_data[? "hp"] = hp;
save_data[? "maxhp"] = maxhp;
save_data[? "stamina"] = stamina;
save_data[? "maxstamina"] = maxstamina;
save_data[? "expr"] = expr;
save_data[? "maxexpr"] = maxexpr;
save_data[? "level"] = level;
save_data[? "attack"] = attack;
}

var save_string = json_encode (save_data);
ds_map_destroy (save_data);
save_string = base64_encode (save_string);

var file = file_text_open_write (working_directory + "gamesave.txt");
file_text_write_string (file, save_string);
file_text_close (file);

show_message ("Game saved");
 
Mensagens
17
Reações
7
Pontos
13
Eu tenho que pesquisar melhor como funciona o game maker quando eu tiver um tempo, mas uma solução possível é cada sala ter uma variável, por exemplo em uma sala tem 5 monstros, essa variável vai ser 5, e a cada monstro que é morto recebe -1, na parte do labirinto pode ser 0 e quando você conversa com o personagem já salva como 1.

Não sei se essa era a sua duvida mas posso tentar te ajudar.
 

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Eu tenho que pesquisar melhor como funciona o game maker quando eu tiver um tempo, mas uma solução possível é cada sala ter uma variável, por exemplo em uma sala tem 5 monstros, essa variável vai ser 5, e a cada monstro que é morto recebe -1, na parte do labirinto pode ser 0 e quando você conversa com o personagem já salva como 1.

Não sei se essa era a sua duvida mas posso tentar te ajudar.

Sobre os monstros eu tentei algo parecido, fiz uma variável que quando se mata 4 monstros e vc volta na sala eles são destruíveis, o único problema é que todos os monstros do mesmo tipo são destruíveis em todas as salas xD

Preciso fazer o script entender que é só naquela sala.

Mas acho que a logica é essa mesmo. Vou tentar umas coisas e ver se da certo. Obrigado pela ajuda!!
 


Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Tentei novamente e uso esse escript:
if (global.quarto <= 2){
instance_destroy (OBJ_INI_sprite);
}

Mas da erro dizendo que o que coloquei dentro da "instance_destroy" tá errado, e se eu colocar ela dentro do monstro ele é destruído em todas as salas ><
 
Mensagens
17
Reações
7
Pontos
13
Tentei novamente e uso esse escript:
if (global.quarto <= 2){
instance_destroy (OBJ_INI_sprite);
}

Mas da erro dizendo que o que coloquei dentro da "instance_destroy" tá errado, e se eu colocar ela dentro do monstro ele é destruído em todas as salas ><

Tem como criar os monstros só depois da leitura?

Por exemplo, vc entra na sala e aí dependendo da variável cria os monstros caso contrario não. Acho que seria melhor, ao contrario de destruir.

Eu sou meio inexperiente em relação a engines de jogos.
 

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Tem como criar os monstros só depois da leitura?

Por exemplo, vc entra na sala e aí dependendo da variável cria os monstros caso contrario não. Acho que seria melhor, ao contrario de destruir.

Eu sou meio inexperiente em relação a engines de jogos.

Não sei se tem como criar, vou ter que dar uma olhada, mas é se der certo vai ser uma otima forma de resolver esse problema xDDDD
 

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Bem, demorou mas surgiu outro problema com a programação /o/o/

Estou tentando fazer um esquema de fade out/fade in para a morte, pq estava sendo muito abrupto o modo como ia para a tela de game over. Então decidi fazer um pequeno script para o jogo esperar 2 segundos antes de mandar o player para aquela sala.

Aqui o script que estou usando:

timer = 60;
if (timer <= 0) {
room_goto (RM_Death)
timer = 60;
}
else {
timer -= 1;
}

Tudo bonito, tudo perfeito, mas o problema é que eu espero e espero e nada de mudar de sala ><
Alguem tem alguma ideia do que está dando de errado?
 

_Fabio

Veterano
Mensagens
254
Reações
630
Pontos
108
Aqui o script que estou usando:

timer = 60;
if (timer <= 0) {
room_goto (RM_Death)
timer = 60;
}
else {
timer -= 1;
}

Tudo bonito, tudo perfeito, mas o problema é que eu espero e espero e nada de mudar de sala ><
Alguem tem alguma ideia do que está dando de errado?
Tudo bom Marbow?
Se você colocou esse código assim exatamente da forma como está (ou seja, todo esse bloco no mesmo evento), a variável timer está sendo inicializada com o valor 60 o tempo todo, ex:
timer = 60 //aqui o valor é 60
if... //condição não é verdadeira ainda
timer -= 1 //agora timer é 59
recomeça o ciclo acima e timer é = 60 novamente xD
 

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Tudo bom Marbow?
Se você colocou esse código assim exatamente da forma como está (ou seja, todo esse bloco no mesmo evento), a variável timer está sendo inicializada com o valor 60 o tempo todo, ex:
timer = 60 //aqui o valor é 60
if... //condição não é verdadeira ainda
timer -= 1 //agora timer é 59
recomeça o ciclo acima e timer é = 60 novamente xD

Ah, agora eu fui muito nb xD

Vou arrumar isso e testar. Vlw mesmo!!
 

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Tudo bom Marbow?
Se você colocou esse código assim exatamente da forma como está (ou seja, todo esse bloco no mesmo evento), a variável timer está sendo inicializada com o valor 60 o tempo todo, ex:
timer = 60 //aqui o valor é 60
if... //condição não é verdadeira ainda
timer -= 1 //agora timer é 59
recomeça o ciclo acima e timer é = 60 novamente xD

Testei aqui. Coloquei a variavel no "create" do personagem e quando ele é destruído o script começa a contar, mas continua com o mesmo problema, não ocorre a transição
 

_Fabio

Veterano
Mensagens
254
Reações
630
Pontos
108
Testei aqui. Coloquei a variavel no "create" do personagem e quando ele é destruído o script começa a contar, mas continua com o mesmo problema, não ocorre a transição
Mas qual objeto está controlando essa contagem? Se tu destrói o personagem e nele mesmo faz a manipulação do timer, não vai mais haver timer depois que ele (instância) é destruído.
Não sei se é o caso (você não dá muitos detalhes de como está estruturando isso), mas penso que não está fazendo uso de um "objeto controlador".
 

Marbow

Bam-bam-bam
Mensagens
5.559
Reações
6.740
Pontos
344
Mas qual objeto está controlando essa contagem? Se tu destrói o personagem e nele mesmo faz a manipulação do timer, não vai mais haver timer depois que ele (instância) é destruído.
Não sei se é o caso (você não dá muitos detalhes de como está estruturando isso), mas penso que não está fazendo uso de um "objeto controlador".

Se antes eu fui nb agora eu fui idiota xD

Já resolvi. A inteligencia rara tinha esquecido de tirar o "timer = 60" do contador.

Vlw pela ajuda!!
 
Topo Fundo