================================= Sistema de Experiência de Batalha ================================= Sistema criado por The Necromancer e SorrowEdge Organizado e traduzido por Ribeiro Antes de começarmos, você deve fazer o index das variáveis persistentes. Nessa explicação, Eu vou usar var(40) para cima, então isto deixa muito espaço para o seu personagem usar outras variáveis. Adicione isto na seção [Data] do seu personagem: IntPersistIndex = 40 Variáveis de 40 para cima serão persistentes. Você pode copiar livremente todos os códigos que aparecem nesta explicação. (Não esqueça de dar créditos ao The Necromancer e ao SorrowEdge.) =) ================== Parte 1 ================== Mostrando números a partir de um Sistema Numérico ================================================ Sistema Numérico (para versão 6/27 ou mais nova) ================================================ ;--------------------------------------------------------------------------- Isto serve para mostrar números no mugen. Basicamente equações matemáticas. ;--------------------------------------------------------------------------- Em primeiro lugar nós precisamos de dígitos individuais, digamos que temos uma Var(40) que tem o valor de 359. type = VarRangeSet trigger1 = Time = 0 value = 40 ; Reseta as Vars que nós precisamos first = 41 last = 43 type = VarSet trigger1 = Time = 0 && Var(40) > 99 ; Tenha certeza de que Var(40) tem 3 dígitos Var(41) = Floor(Var(40) / 100) ; Pegue a parte íntegra do centésimo número. Var(41) agora contém o primeiro dígito do nosso número, 3. type = VarSet trigger1 = Time = 0 && Var(40) > 9 ; Tenha certeza de que Var(40) tem 2 dígitos Var(42) = Floor(Var(40) / 10) - (Var(41) * 10) ; Pegue os primeiros 2 dígitos e subtraia o primeiro. Var(42) agora contém o segundo, 5. type = VarSet trigger1 = Time = 0 Var(43) = Var(40) - (Var(41) * 100) - (Var(42) * 10) ; Subtraia o primeiro e o segundo dígitos. Var(43) agora contém o último dígito, 9. Agora que temos os 3 dígitos, nós podemos mostrá-los. Primeiro, tenha certeza de que você tem os números das sprites no sff. Segundo, certeza de que os grupos do air são proporcionais aos números, ie. Se a sprite "0" tem como grupo no air 6000 ou 7000 ou 8920, então a sprite "8" seria 6008 ou 7008 ou 8928, respectivamente. Agora: type = Explod trigger1 = (qualquer) anim = (número do grupo no air da sprite "0") + Var(41) postype = (qualquer) pos = (x), (y) ; Lembre dessa posição. type = Explod trigger1 = (qualquer) anim = (número do grupo no air da sprite "0") + Var(42) postype = (qualquer) pos = (x) + (largura da sprite), (y) ; mostra depois do primeiro dígito type = Explod trigger1 = (qualquer) anim = (número do grupo no air da sprite "0") + Var(43) postype = (qualquer) pos = (x) + (largura da sprite) + (largura da sprite), (y) ; última posição 2.) Note que isto é para mostrar números, não a sua experiência atual. A variável que conta, Var(40) é usada em triggers nos efeitos dos personagens. Você usará esta variável que conta para vários propósitos. 3.) Agora, nós precisamos usar outra variável para saber se o seu personagem está virado para a esquerda ou para a esquerda. Coloque isto no state 5900: ;Verificação de lado para onde o personagem está virado [State 5900: VarSet] type = VarSet trigger1 = Time = 0 var(14) = IfElse(Facing = 1, 1, -1) Isto é usado para mostrar números embaixo do seu personagem. (Veja Var(14) nos códigos abaixo.) ------------------------------------------------------------------------------ Para o Sistema de Experiência de Batalha em personagens de DBZ, os digitos podem ficar muito altos. (Se você quiser o poder de luta próximo ao original.) Copie e cole as equações abaixo. ------------------------------------------------------------------------------ Tirado do arquivo geral do Piccolo. (Created by The Necromancer) Variáveis: Var(40) - Var que conta Var(41) até Var(50) - Dígitos Var(14) - Var de para onde o seu personagem está virado Animação: Use actions de 8000 até 8009. 8000: Número 0 8001: Número 1 8002: Número 2 8003: Número 3 8004: Número 4 8005: Número 5 8006: Número 6 8007: Número 7 8008: Número 8 8009: Número 9 ;--------------------------------------------------------------------------- ;Sistema de Experiência de Batalha - Equação ;1o Dígito do Sistema Numérico - Unidades [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(41) = floor(var(40)/1000000000) ;2o Dígito do Sistema Numérico - Dezenas [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(42) = floor(var(40)/100000000 - var(41) * 10) ;3o Dígito do Sistema Numérico - Centenas [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(43) = floor(var(40)/10000000 - var(41) * 100 - var(42) * 10) ;4o Dígito do Sistema Numérico - Milhares [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(44) = floor(var(40)/1000000 - var(41) * 1000 - var(42) * 100 - var(43) * 10) ;5o Dígito do Sistema Numérico - Dezenas de Milhares [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(45) = floor(var(40)/100000 - var(41) * 10000 - var(42) * 1000 - var(43) * 100 - var(44) * 10) ;6o Dígito do Sistema Numérico - Centenas de Milhares [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(46) = floor(var(40)/10000 - var(41) * 100000 - var(42) * 10000 - var(43) * 1000 - var(44) * 100 - var(45) * 10) ;7o Dígito do Sistema Numérico - Milhões [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(47) = floor(var(40)/1000 - var(41) * 1000000 - var(42) * 100000 - var(43) * 10000 - var(44) * 1000 - var(45) * 100 - var(46) * 10) ;8o Dígito do Sistema Numérico - Dezenas de Milhões [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(48) = floor(var(40)/100 - var(41) * 10000000 - var(42) * 1000000 - var(43) * 100000 - var(44) * 10000 - var(45) * 1000 - var(46) * 100 - var(47) * 10) ;9o Dígito do Sistema Numérico - Centenas de Milhões [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(49) = floor(var(40)/10 - var(41) * 100000000 - var(42) * 10000000 - var(43) * 1000000 - var(44) * 100000 - var(45) * 10000 - var(46) * 1000 - var(47) * 100 - var(48) * 10) ;10o Dígito do Sistema Numérico - Bilhões [State -2: VarSet] type = VarSet trigger1 = TimeMod = 5,0 var(50) = floor(var(40) - var(41) * 1000000000 - var(42) * 100000000 - var(43) * 10000000 - var(44) * 1000000 - var(45) * 100000 - var(46) * 10000 - var(47) * 1000 - var(48) * 100 - var(49) * 10) ;--------------------------------------------------------------------------- ;Sistema de Experiência de Batalha - Animação ;1o Dígito do Sistema Numérico - Unidades [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(41) postype = left pos = ifelse(var(14) = 1, 10, 220),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;2o Dígito do Sistema Numérico - Dezenas [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(42) postype = left pos = ifelse(var(14) = 1, 20, 230),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;3o Dígito do Sistema Numérico - Centenas [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(43) postype = left pos = ifelse(var(14) = 1, 30, 240),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;4o Dígito do Sistema Numérico - Milhares [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(44) postype = left pos = ifelse(var(14) = 1, 40, 250),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;5o Dígito do Sistema Numérico - Dezenas de Milhares [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(45) postype = left pos = ifelse(var(14) = 1, 50, 260),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;6o Dígito do Sistema Numérico - Centenas de Milhares [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(46) postype = left pos = ifelse(var(14) = 1, 60, 270),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;7o Dígito do Sistema Numérico - Milhões [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(47) postype = left pos = ifelse(var(14) = 1, 70, 280),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;8o Dígito do Sistema Numérico - Dezenas de Milhões [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(48) postype = left pos = ifelse(var(14) = 1, 80, 290),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;9o Dígito do Sistema Numérico - Centenas de Milhões [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(49) postype = left pos = ifelse(var(14) = 1, 90, 300),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ;10o Dígito do Sistema Numérico - Bilhões [State -2: Explod] type = Explod trigger1 = 1 anim = 8000 + var(50) postype = left pos = ifelse(var(14) = 1, 100, 310),200 ignorehitpause = 1 sprpriority = 13 ownpal = 1 ================== Parte 2 ================== 1.) Tenha certeza de que o seu personagem tenha o seu próprio arquivo "common1.cns". Edite o state 5900, e remova os parâmetros VarRangeSet. Agora, todas as vars de persistência não serão resetadas durante as lutas com diferentes oponentes. Heh, você também pode fazer intros para o segundo e o terceiro rounds. =D 2.) Agora, use a var persistente, para saber quantas lutas você teve. Para fazer isto, coloque este código no state 5900: [State 5900, VarAdd] type = VarAdd trigger1 = 1 v = * ;Deve ser persistente value = 1 Isto serve para evitar que as pessoas lutem demais, (Apertando a tecla de espaço) e assim ganhando toneladas de experiência em apenas um round. Eu explicarei depois. :) 3.) Use o Sistema Numérico, para que o seu personagem ganhe pontos para velocidade, vida, combos, etc... (Exatamente como um high score.) 4.) Quando o seu personagem atinge certa pontuação, (Exemplo: 5000) ele poderá usar novas técnicas. É aqui que entra o passo 2. Você não deve usar somente a var de pontuação para ganhar novas técnicas, mas a var de números de lutas, para ter certeza de estar no mínimo em um certo estágio, (Exemplo: 3) para ganhar esta nova abilidade. Agora você tem um modo de história completo, quando combinado com um final. Bom, dependendo da sua experiência, agora você pode ter finais diferentes! :) ================== Parte 3 ================== Usando a experiência ganha para aumentar o status do seu personagem. Ao ganhar experiência, os atributos do seu personagem podem crescer. Para implementar isto em parâmetros como HitDef's, você precisará usar um pouco de matemática. Exemplo: [State 200, HitDef] type = HitDef damage = Ceil(20+Var(43)),(5+Var(40)/2) Para calcular os valores dano, tempo e velocidade, você recisará usar a função "Ceiling" para mais rounds, e a função "Floor" para menos round, com parênteses. (coisas) Coloque o trigger de matemática antes de integrar os valores. O resto é basicamente matemática. :) Para calcular valores de velocidade, trigger de matemática não é nescessário. Você pode usar uma FVar para fazer isto. ================== Parte 4 ================== Agora que você implementou todos os fatores nescessários no sistema, você pode adicionar os últimos detalhes para fazer uma boa storyline. Heh, um final não é a única coisa que faz uma história! Você pode fazer cenas especiais que só acontecem uma vez, (ex. Piccolo se fundindo com Nail, durante a Saga de Freeza.) e ganhando pontos de bônus. 1.) Primeiro você precisará de um marcador de estágios. Isto é usado para contar quantas lutas você teve. Coloque este código no state 5900: [State 5900, VarAdd] type = VarAdd trigger1 = RoundNo = 1 v = 0 value = 1 Um GRANDE problema neste código é que se você apertar F4 no primeiro round, o marcador pensará que você progrediu para o próximo estágio. 2.) Cenas especiais: Nós vamos usar a cena de quando Piccolo se fundiu com Nail. Agora, isto pode ser uma intro, que acontece na luta 3, por exemplo. O marcador de estágios nos dirá quando estivermos na terceira luta. Quando isto acontecer, Piccolo poderá fundir com Nail. Então, neste exemplo, nós precisaremos usar este trigger: triggerall = Var(*) = 3 ;Variável que marca o estágio. Este é ativado quando o seu personagem estiver no terceiro estágio. 3.) Ganhando pontos bônus: Bom, é bem auto-explicativo o modo de ganhar experiência. (Acerta o oponente, ganha ** pontos.) Example: [State 200: VarAdd] type = VarAdd trigger1 = MoveHit v = 40 ;Variável que conta value = 20 ;Pontos persistent = 0 ignorehitpause = 1 Mas, podem haver outras maneiras de ganhar experiência. Uma maneira de fazer isto é usando um Marcador de Vitórias Consecutivas. Isto é usado para contar quantas vitórias você teve sem perder. -Você pode fazer um state -2, para adicionar a uma var (VarAdd) quando você ganha, e zerar (VarSet) quando você perde. Sempre que você vencer uma luta, você poderá usar esta simples equação para ganhar experiência, dependendo do número de lutas que você ganhou e do estágio em que você está: -Você pode fazer um state -2 para adicionar os pontos com esta fórmula: triggerall = (Life/2) * ((Número do Estágio) + (Número de Vitórias Consecutivas)) Você pode mudar esta fórmula como desejar. (Esta fórmula não dá muitos pontos, já que não queremos ganhar experiência tão facilmente.)