Salvar 24 Switches em uma única variavel

0 membros e 1 visitante (1 bot) estão vendo este tópico no momento.

DevRPG2k Membro
Salvar 24 Switches em uma única variavel
Usando apenas eventos

Seg, 27 de janeiro de 2025, 18:14:33 - Última modificação: Dom, 02 de fevereiro de 2025, 04:39:39 por DevRPG2k
Seguindo a lógica de Binário para Decimal e vice-versa um dos responsáveis por legalizar o Rm2k e Rm2k3 me disse que seria possível salvar até 23 Switches em uma única variável, diferente das engines posteriores Rm2k(3) não possui Self-Switches, aquelas Switches para cada evento que não podem ser compartilhadas. Por padrão todos os eventos que dependam de uma mesma Switch serão ativados. Porém nesse sistema a lógica é usar uma ou mais variáveis para usar as mesmas Switches em vários mapas de modo que não sejam ativados ao mesmo tempo.

A ideia veio de um dos responsáveis por tornar os RPG Makers legalizados no Ocidente, CherryDT que também fez varias correções nos motores e nos editores.

No Rm2k3 nós podemos armazenar o máximo de 7 dígitos em uma variável, então no calculo de potencia chega até 23, já no Rm2k são apenas 6 dígitos, então podemos chegar até 19 Switches.

 Vídeo do sistema funcionando:


Mas como converter um valor binário em decimal? Bem, neste caso eu usei uma formula matemática que:
https://www.geeksforgeeks.org/binary-to-decimal/

Nesse caso é bem fácil criar com eventos, a parte chata é que não é possível verificar cada Switch sem criar um IF pra cada, como não preciso considerar se tiver OFF ficou bem mais limpo.
https://www.geeksforgeeks.org/decimal-to-binary/
Porém isso é bem complicado por eventos por que não tem comando para calculo de potencia, então usei ciclo pra contornar isso, por que se não cada condição ficaria maior e difícil de administrar.

Como a tag de BBCODE para códigos de SCRIPTs está com erro no CSS eu vou postar cada um em uma postagem abaixo, mas não a lista de eventos e sim a lógica aplicada.

No evento comum Var_to_Switches é necessário declarar a ID da primeira Switch 23 Switches definindo o valor da variável, no exemplo vou usar o valor 21, se for necessário mudar isso vai ter que mudar Switch por Switch no evento comum Switches_to_Variable:
@> Control Variables: [0009:Switch-Initial] == 21

Em cada mapa é necessário colocar um evento em processo paralelo que aponte a variável exclusiva do mapa e na sequencia chamar o evento que transcreve a variável para as Switches, digamos que eu queria que um mapa especifico fique registrado exclusivamente na variável 11, lembrando que esses variáveis não precisam ser sequenciais, ao contrário das Switches:
@> Control Variables: [0007:Divid/Base] == 11
@> Erase Event

Download:
https://www.mediafire.com/file/cokkwv3om2wiyi0/Rm2k-2k3-Switches_in_a_Variable.zip/file
A 24ª Switch é o valor negativo na variável (decimal) que vem da subtração do valor pelo limite total + 1.
No caso do Rm2k tem uma 20ª Switch.
Senha para descompactar: rpgmaker
DevRPG2k Membro
Re: Salvar 24 Switches em uma única variavel
Seg, 27 de janeiro de 2025, 18:41:32 - Última modificação: Ter, 28 de janeiro de 2025, 20:48:47 por DevRPG2k
Variavel para Switches (Common Event -> Var_to_Switches):
@> Comment: 
@> Control Switches: [0021..0043] = OFF
@> Comment: 
@> Control Variables: [0008:Mod] = Variable [0007]
@> Control Variables: [0008:Mod] %= 2 
@> Conditional Branch: Variable [0008:Mod] == 1
  @> Comment: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  @> Comment:                 INITIAL SWITCH
  @> Comment: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  @> Control Switches: Variable [0009] = ON
  @>
 : Branch End
@> Loop
  @> Comment: RESET SWITCH
  @> Control Switches: Variable [0009] = OFF
  @> Control Variables: [0009:Switch-Initial] += 1 
  @> Control Variables: [0007:Divid/Base] -= Variable [0008]
  @> Control Variables: [0007:Divid/Base] /= 2 
  @> Conditional Branch: Variable [0007:Divid/Base] < 1
    @> Break Loop
    @>
   : Branch End
  @> Control Variables: [0008:Mod] = Variable [0007]
  @> Control Variables: [0008:Mod] %= 2 
  @> Conditional Branch: Variable [0008:Mod] == 1
    @> Control Switches: Variable [0009] = ON
    @>
   : Branch End
  @>
 : Repeat Above
DevRPG2k Membro
Re: Salvar 24 Switches em uma única variavel
Seg, 27 de janeiro de 2025, 18:43:34
Switches para variavel unica (Common Event -> Switches_to_Variable):
@> Control Variables: Variable [0010] = 0
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0021:Self_Switch1] is ON
  @> Control Variables: Variable [0010] += 1 
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0022:Self_Switch2] is ON
  @> Control Variables: Variable [0010] += 2 
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0023:Self_Switch3] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0007:Divid/Base] *= 2 
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0024:Self_Switch4] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -2 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0025:Self_Switch5] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -3 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0026:Self_Switch6] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -4 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0027:Self_Switch7] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -5 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0028:Self_Switch8] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -6 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0029:Self_Switch9] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -7 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0030:Self_Switch10] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -8 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0031:Self_Switch11] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -9 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0032:Self_Switch12] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -10 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0033:Self_Switch13] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -11 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0034:Self_Switch14] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -12 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0035:Self_Switch15] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -13 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0036:Self_Switch16] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -14 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0037:Self_Switch17] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -15 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0038:Self_Switch18] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -16 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0039:Self_Switch19] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -17 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0040:Self_Switch20] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -18 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0041:Self_Switch21] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -19 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0042:Self_Switch22] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -20 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
@> Comment: :::::::::::::::::::::::::::::::::::::::::::::::
@> Conditional Branch: Switch [0043:Self_Switch23] is ON
  @> Control Variables: [0007:Divid/Base] = 2 
  @> Control Variables: [0006:Exponent] = -21 
  @> Loop
    @> Control Variables: [0007:Divid/Base] *= 2 
    @> Control Variables: [0006:Exponent] += 1 
    @> Conditional Branch: Variable [0006:Exponent] == 0
      @> Break Loop
      @>
     : Branch End
    @>
   : Repeat Above
  @> Control Variables: Variable [0010] += Variable [0007]
  @>
 : Branch End
Criado por Dante, inspirado na versão de 2007 da RPG Menace - A Ameaça RPG, feito com Rails 8.0.0, Ruby 3.3.3 e 💛.