🤔 Para Refletir :
"Não confunda uma prorrogação em jogo do Juventus com a programação de um jogo por eventos."
- Jazz

Tutorial Reaproveitar as mesmas Switches com uma única variável para cada mapa

DevWithCoffee

Cidadão
Membro
Membro
Juntou-se
02 de Abril de 2019
Postagens
169
Bravecoins
284
Área
Programação
Motor de jogo
RPG Maker 2000
Thumb.png


Isso funciona semelhante à Self Switches que só veio à existir a partir do RMXP, porém ao invés de ser exclusivo para cada evento será exclusivo para o mapa em que o jogador estiver. A lógica da tutorial é usar uma única Variável do jogo para um número limitado de Switches do jogo.

Onde isso pode ser aplicado? A ideia principal deste sistema é reutilizar os mesmos interruptores para eventos simples em diferentes masmorras, como baús, portas e chefes. Imagine um jogo semelhante ao Zelda onde você precisa ir em várias Dungeons onde terão muitas portas, baus e obstáculos removíveis.

Mas também pode ser aplicado a jogos mais complexos, especialmente para ABS, que podem depender de muitos Switches no mapa, principalmente por conta de inimigos e baús.

Outra aplicação possível seria em menus personalizados, conhecidos como CMS (Sistema de Menu Customizado/Custom Menu System), quando você precisa aplicar diferentes funções aos submenus. Imagine que você tenha 4 submenus, cada um com de 1 a 7 opções importantes (no primeiro exemplo) ou de 1 a 24 (no segundo exemplo). Nesse caso, seriam necessárias apenas 4 variáveis para armazenar todas as escolhas do jogador.

Acredito que seja desnecessário explicar que isso é inviável em projetos feitos com outras edições do RPG Maker, já que todas elas conseguem realizar isso usando um script e armazenando os dados como um Array.



Na primeira versão, você pode salvar 6 Switches em uma variável no Rm2k e 7 no Rm2k3 1.12a, cada dígito do número corresponderá a um Switch.
Exemplo:
@> Control Variables: [0007:Switches-Map0002] = 1001010
  • 0 Desliga
  • 1 ou mais Liga
Convert-1-Variable-to-Seven-Switches.png


No entanto, como os Eventos do RPG Maker funcionam apenas com operadores básicos e não conseguem separar os dígitos de um valor nativamente, precisei criar uma fórmula para cada dígito.



No entanto, após uma breve explicação da CherryDT , entendi que poderia armazenar até 23 Switches em uma única variável se tratasse os valores de cada Switch como binários e os convertesse para decimais, o que também não é nativo, já que não há suporte para scripts no Rm2k e Rm2k3, então usei matemática.
Portanto, temos os seguintes valores decimais que podem ser convertidos para binário e aplicados diretamente:

  • 8388607 ativará os primeiros 23 interruptores (19 em Rm2k)
  • -1 ativará todos os 24 interruptores (20 no Rm2k)
  • 5592405 ativará apenas interruptores com ID ímpar.
  • -5592406 ativará apenas interruptores com ID par.
  • 0 vai desligar tudo
  • Clique aqui para ler o 🔗 Tutorial
  • 🔗 YouTube - Tutorial em vídeo
Neste vídeo, eu ainda não havia aplicado o uso de valores negativos para salvar um 24º Switch na variável do mapa.
 
Última edição:
(O tutorial será escrito em breve)

Método para transformar uma variável em 7 interruptores. Este evento deve ser chamado imediatamente após entrar no mapa:
Código:
@> Control Variables: [0005:Get-MapVar] = Variable [0019:Map0020-Switches]
@> Call Event: [Var_to_Switches]

Evento comum -> Var_to_Switches:
Coffeescript:
@> Control Switches: [0011..0017] = OFF
@> Control Variables: [0006:SplitVariable] = Variable [0005:Get-MapVar]
@> Control Variables: [0006:SplitVariable] /= 1000000
@> Conditional Branch: Variable [0006:SplitVariable] == 1
  @> Control Switches: [0011:MapSwitch[1]] = ON
  @>
 : Branch End
@> Control Variables: [0006:SplitVariable] = Variable [0005:Get-MapVar]
@> Control Variables: [0006:SplitVariable] %= 1000000
@> Control Variables: [0006:SplitVariable] /= 100000
@> Conditional Branch: Variable [0006:SplitVariable] == 1
  @> Control Switches: [0012:MapSwitch[2]] = ON
  @>
 : Branch End
@> Control Variables: [0006:SplitVariable] = Variable [0005:Get-MapVar]
@> Control Variables: [0006:SplitVariable] %= 100000
@> Control Variables: [0006:SplitVariable] /= 10000
@> Conditional Branch: Variable [0006:SplitVariable] == 1
  @> Control Switches: [0013:MapSwitch[3]] = ON
  @>
 : Branch End
@> Control Variables: [0006:SplitVariable] = Variable [0005:Get-MapVar]
@> Control Variables: [0006:SplitVariable] %= 10000
@> Control Variables: [0006:SplitVariable] /= 1000
@> Conditional Branch: Variable [0006:SplitVariable] == 1
  @> Control Switches: [0014:MapSwitch[4]] = ON
  @>
 : Branch End
@> Control Variables: [0006:SplitVariable] = Variable [0005:Get-MapVar]
@> Control Variables: [0006:SplitVariable] %= 1000
@> Control Variables: [0006:SplitVariable] /= 100
@> Conditional Branch: Variable [0006:SplitVariable] == 1
  @> Control Switches: [0015:MapSwitch[5]] = ON
  @>
 : Branch End
@> Control Variables: [0006:SplitVariable] = Variable [0005:Get-MapVar]
@> Control Variables: [0006:SplitVariable] %= 100
@> Control Variables: [0006:SplitVariable] /= 10
@> Conditional Branch: Variable [0006:SplitVariable] == 1
  @> Control Switches: [0016:MapSwitch[6]] = ON
  @>
 : Branch End
@> Control Variables: [0006:SplitVariable] = Variable [0005:Get-MapVar]
@> Control Variables: [0006:SplitVariable] %= 10
@> Conditional Branch: Variable [0006:SplitVariable] == 1
  @> Control Switches: [0017:MapSwitch[7]] = ON
  @>
 : Branch End



Para salvar as Switches na variável especificada, a abordagem ideal seria mantê-la no modo de Processo Paralelo:
Código:
@> Call Event: [Switches_to_Var]
@> Control Variables: [0019:Map0020-Switches] = Variable [0005:Get-MapVar]

Evento comum -> Switches_to_Var:
Coffeescript:
@> Control Variables: [0005:Get-MapVar] = 0
@> Conditional Branch: Switch [0011:MapSwitch[1]] is ON
  @> Control Variables: [0005:Get-MapVar] += 1000000
  @>
 : Branch End
@> Conditional Branch: Switch [0012:MapSwitch[2]] is ON
  @> Control Variables: [0005:Get-MapVar] += 100000
  @>
 : Branch End
@> Conditional Branch: Switch [0013:MapSwitch[3]] is ON
  @> Control Variables: [0005:Get-MapVar] += 10000
  @>
 : Branch End
@> Conditional Branch: Switch [0014:MapSwitch[4]] is ON
  @> Control Variables: [0005:Get-MapVar] += 1000
  @>
 : Branch End
@> Conditional Branch: Switch [0015:MapSwitch[5]] is ON
  @> Control Variables: [0005:Get-MapVar] += 100
  @>
 : Branch End
@> Conditional Branch: Switch [0016:MapSwitch[6]] is ON
  @> Control Variables: [0005:Get-MapVar] += 10
  @>
 : Branch End
@> Conditional Branch: Switch [0017:MapSwitch[7]] is ON
  @> Control Variables: [0005:Get-MapVar] += 1
  @>
 : Branch End
 

Espaço reservado para o tutorial sobre 24 Switches em uma Variável​

 
Voltar
Topo Inferior