O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Scripts úteis para GameMaker Studio

Iniciado por Kawthar, 21/10/2017 às 05:40

21/10/2017 às 05:40 Última edição: 17/07/2019 às 19:36 por Kawthar
Tava rondando a net estudando sobre o GMS e acabei me deparando com uns scripts muito úteis pra qualquer projeto em geral. Como acabei reescrevendo neles(alguns até refazendo ._.) decidi aproveitar a pausa das pesquisas pra criar um tópico aqui e compartilhar com vocês.

Fiz questão de deixar cada script documentado(em inglês) com exemplos da funcionalidade mas também farei um resumo aqui(em português).

1- Approach(a, b, amount);
Esse script basicamente muda uma variável(A) em relação a outra variável(B) por uma quantidade(Amount) determinada por você. Esse script é útil porque, além de tornar mais fácil a digitação do processo, ele funciona para ambos os lados. Caso queira mudar a variável A a em relação à variável B ou vice-versa, é da mesma forma que se passa os parâmetros, o próprio script faz a checagem e o ajuste.
Ele também se certifica de não deixar o valor passar da segunda variável. Finalmente, ela retorna o novo valor da variável alterada(pra futura consulta, por que não?)

Exemplo: Approach(hp, max_hp, heal(20));
Fará com que o HP do jogador aumente em 20 em relação ao HP máximo. Caso esse valor passe do HP máximo(digamos, HP 85 | HP Máx. 100. Curou 20 = 105) o valor excedente é ignorado e o script retorna 100(HP Máximo).




2- Chance(chance);
Esse provavelmente é o mais simples da lista(a ponto de não precisar do script), porém extremamente útil.
Ele irá, aleatóriamente, decidir se um código vai ou não ser executado, de acordo com o valor que você passar pra ele (de 0 à 1 = 0% à 100%, mais que 1 é >100%);

Exemplo: Chance(0.7);
O script irá determinar, com 70% de chance a favor e 30% contra, se retornará verdadeiro ou falso. Dá pra simplificar muito um sistema de ataque crítico, por exemplo. Só colocando:

if(Chance(0.5)){
     nextPlayerDmg *= critDMG;
}


Assim, teria 50% de chance dele causar o dano crítico.




3- Wave(from, to, duration, offset);
Ele define um movimento de "onda" pro valor de uma variável.
Quando eu digo "onda", quero dizer um movimento de vai e volta, como na gif a seguir.
No caso dela, eu modifiquei o valor de X pelo retorno do script Wave com os seguintes parâmetros:

Exemplo: x = Wave(45, 200, 5, 0)

(Não zoem meu maguinho)




4- Print(string, value);
Sim, print. O GMS não tem uma função pra print ?-?.
Esse é um script pra substituir o show_debug_message que eu acho um porre.

Nesse script, você pode passar tanto apenas um string, quanto apenas um valor(Integer, float, bool) ou os 2.

Exemplo:

Resultado:





5- Wrap(value, min, max)[Versão slim]
5- Wrap(value, min, max)[Versão completa(não funcional)]
PS: Existem 2 versões desse script, a maior eu não consegui fazer funcionar então recomendo que usem o mais simples mesmo(até por quê, está mais organizado), ou tentem arrumar a maior, eu posso ter feito besteira aqui kkk.
Mas recomendo que pelo menos leiam o maior pra entender mais ou menos como funciona.

Esse é, pra mim, o mais difícil de explicar kkk'
Ele basicamente pega 2 pontos(que você passa pelo min e pelo max) e quando o valor foi maior ou menor que eles, ele teleporta o objeto para o outro ponto.
Suponhamos que seu jogo tenha um portal no canto esquerdo do mapa e um no direito e você quer que quando o jogador entre em um ele saia em outro. É basicamente isso. Você definiria o valor do portal da direita no max e o da esquerda no min.

Exemplo:

x += 5;
x = Wrap(x, 10, room_width-10);




Espero que seja útil pra alguém por ai xD
Qualquer pergunta só comentar ai ou me mandar uma MP.
Lord, if the day comes when I fly through the heavens. I shall approach thee!