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

Como usar essa função?

Iniciado por DarlesLSF, 04/11/2019 às 07:38

04/11/2019 às 07:38 Última edição: 06/11/2019 às 12:36 por Syureri
Olá jovens, depois de tanto tempo usando o rm2k, nunca usei a função destacada e nem sei como funciona. Alguém poderia me explicar? Mesmo lendo o help do rm2k, continuo sem entender kkk
Darles LSF

Se não me engano, você usa o valor de uma variável para definir o ID do que está alterando. Por exemplo:

Variable[Variable] = 3


A variável que está recebendo o valor 3 é a do ID igual ao valor da que está sendo passada como argumento. Se o valor desta é 70, então a variável de ID 70 terá o valor 3.

Fiz meus testes aqui e entendi como funciona, porém não consigo imaginar um uso pra isso dentro do jogo. Creio que me falta experiência ainda kkk
Darles LSF

Este sistema é para uso bem especifico de sistemas avançados, pra ser franco é dificil imaginar um cenário de um rpg comum para ser usado.
Eu já vi ser usado em Puzzles e jogos que não tem visual de Rpg, principalmente para amarzenamento de coordenadas para muitos objetos.
Eu via isso na época da Rpg Menace, no caso o único que consegui abrir pra ver o código foi o muito reconhecido Tetris do JKB.

Então, a lógica é modificar um parâmetro de um objeto que você não sabe qual é. Por exemplo, suponha uma batalha de um sistema personalizado. Você tem variáveis definindo os personagens:

ID do personagem = Variável 1


Supondo que seja um ABS, e que um inimigo use um golpe que acerta todos os personagens dentro de determinada área, você não tem como saber quem estará lá para levar o dano, certo? Daí você usaria o seguinte comando.

HP do personagem atingido[ID do Personagem] -= Dano


Que é mais ou menos definido assim:

Variável que informa o parâmetro do objeto[variável com a lista de objetos possíveis] (operador) [Valor a ser calculado]


Como o Crixus disse, é uma função bem específica. É idealmente usada quando você não tem como prever com exatidão o que poderá acontecer em um combate, quebra-cabeça ou mesmo em uma ramificação de enredos.

Citação de: DarlesLSF online 04/11/2019 às 21:58
Fiz meus testes aqui e entendi como funciona, porém não consigo imaginar um uso pra isso dentro do jogo. Creio que me falta experiência ainda kkk

Utilizo muito esse esquema no RPG Maker 2000, por meio do Destiny Script.
É uma função bastante útil quando queremos criar um resultado de acordo com o ID de uma switch ou variável.
Podemos utilizá-la quando queremos ligar/desligar uma switch, de acordo com uma variável, ou alterar uma variável de acordo com outra; de qualquer forma, não podemos pré-definir esse resultado, visto que ele irá variar conforme as ações do player.

Ex de comando no Destiny Script do rm2k:
$
s[v[1]] = false;
Com esse código, iremos desligar a switch cujo ID será o valor da variável de ID 1.
Se a variável for igual a 1, desligaremos a switch 1; se for 2, desligaremos a switch 2; e assim, sucessivamente.
Com isso, podemos criar um conjunto de condições para determinar se todos os monstros foram derrotados, por exemplo.
Se s[1], s[2] e s[n] = false, então derrotamos todos os inimigos.
Unique Destiny | um novo conceito de RPG Maker 2000!

Eu tava lendo uns tutos desse tipo de sistema no rm2k(3), mas continuo com dificuldades, porque do jeito que eles escreveram os tutoriais, parece que pulam algumas partes da explicação.

https://rpgmaker.net/tutorials/523/
https://rpgmaker.net/tutorials/479/
Darles LSF

Olha esse site aqui, tem vários exemplos de jogos com essa técnica.

https://uniquedestiny.weebly.com/curso-de-jogos.html
Unique Destiny | um novo conceito de RPG Maker 2000!

Vejam a imagem abaixo com as variáveis:


Na hora em que eu for causar dano ou apanhar, devo criar uma variável (ex. de nome: damage) e definila com o valor igual ao da ID da variável que eu desejo subtrair o valor do dano e após utilizar a opção "variable" com a variável damage selecionada? Seria isso?
Darles LSF

Tem um sistema simples deste nos dialogos, estou apenas colocando aqui pro pessoal poder explorar essa possibilidade.

Manipular cores:
@> Control Variables: [0010] = 5


\c[\v[10]]Nome do personagem:\c[0]
Dialogo, dialogo, dialogo...


Resultado com Systemset da RTP do Rm2k3:
CitarNome do personagem:
Dialogo, dialogo, dialogo...




Nome do personagem atual em caso de um jogo que possa alternar:
Personagem 1: Alex
Personagem 2: Brian
Personagem 3: Ash

@> Control Variables: [0011] = 3


\n[\v[11]]:
Dialogo, dialogo, dialogo...


Resultado:
CitarAsh:
Dialogo, dialogo, dialogo...

Citação de: DarlesLSF online 06/11/2019 às 21:11
(...)

(...)

No caso, vc deveria fazer por seções, por células. Um bloco para o HP, um para o MP, outro para ATK, DEF; e, assim, sucessivamente.

Por exemplo:
v[1] = Monstro HP ID
v[2] = Monstro 1 HP
v[3] = Monstro 2 HP

Situação hipotética: quero que o monstro que tiver HP igual a 0 "morra".
$
if (v[v[1]] == 0)

"v[1] é a ID do monstro. Se v[1] = 2, então a condição vai ser v[2] == 0, que representa o HP do Monstro 1. Se v[1] = 3, então a condição vai ser v[3] == 0, que representa o HP do Monstro 2.
Obs: v[1] deve ser maior que 1, pois a v[1] é o ID que utilizamos, e deve ser menor ou igual à quantidade máxima de monstros."


// Comandos quando o monstro morre.

endif;
Unique Destiny | um novo conceito de RPG Maker 2000!

Citação de: Avenger_B7 online 07/11/2019 às 09:15
No caso, vc deveria fazer por seções, por células. Um bloco para o HP, um para o MP, outro para ATK, DEF; e, assim, sucessivamente.

Por exemplo:
v[1] = Monstro HP ID
v[2] = Monstro 1 HP
v[3] = Monstro 2 HP

Situação hipotética: quero que o monstro que tiver HP igual a 0 "morra".
$
if (v[v[1]] == 0)

"v[1] é a ID do monstro. Se v[1] = 2, então a condição vai ser v[2] == 0, que representa o HP do Monstro 1. Se v[1] = 3, então a condição vai ser v[3] == 0, que representa o HP do Monstro 2.
Obs: v[1] deve ser maior que 1, pois a v[1] é o ID que utilizamos, e deve ser menor ou igual à quantidade máxima de monstros."


// Comandos quando o monstro morre.

endif;

Entendi, já estou adaptando meu cbs. E mais uma dúvida: eu crio um bloco separado para os status do jogador (hp/mp/atk/etc)?
Darles LSF

Citação de: DarlesLSF online 07/11/2019 às 18:59
Entendi, já estou adaptando meu cbs. E mais uma dúvida: eu crio um bloco separado para os status do jogador (hp/mp/atk/etc)?

De preferência, porque essa organização é importante para a gente estabelecer um padrão; no caso, o contador não encontraria nenhum tipo de conflito.
Vamos supor que você crie um "for". Ele iria ler os atributos em sequência. Se vc construir um banco de dados organizado por NPC, e não por atributo, ficará bem mais difícil construir esse contador, você teria que adaptar, se possível, à essa forma de organização.
Unique Destiny | um novo conceito de RPG Maker 2000!