Dropdown Menu

16 de setembro de 2020

Uberasm Tool - O Tutorial Definitivo!

Muitos de vocês já se perguntaram se é possível ir além do tradicional patch, os códigos que afetam a ROM inteira. Até que um belo dia você descobre que aquele HDMA que só foi usado uma vez na sua hack predileta foi inserida com UberASM e então sem nenhuma dúvida você tenta inserir alguma coisa pra essa tool usando Asar e pra sua decepção a hack simplesmente pega fogo e explode. Em lágrimas você procura por ajuda no google e acha esse tutorial aqui.

"Não é o mesmo Uber que você está acostumado a pegar, baby"

O tutorial de hoje vai ser maior do que o normal, porém vou explicar da melhor forma possível, assim todo mundo fica feliz. Primeiro, você precisa baixar o UberASM Tool e extrair em uma pasta dentro da pasta raiz do seu projeto. Abra o List.txt e aonde estiver escrito ROM (é a última linha, literalmente) escreva o nome da cópia da rom da sua hack que você acabou de tacar na pasta da tool.

OBS: Toda vez que você for testar algo faça nessa mesma cópia, jamais aplique diretamente na sua hack sem fazer backup antes. Se você não sabe o que é backup nem a OAB te defende.

Uberasm Tool - Visão Geral
Conhecendo o List.txt e outros memes.

O arquivo de texto List é usado pra definir quais códigos você irá usar em sua hack. O documento é separado em:
- Level List: Códigos que serão usados apenas em fases específicas.
- OW List: Estes códigos irão funcionar APENAS durante mapas.
- Gamemode List: Códigos que irão ser usados durante um Gamemode específico. Ex: Title Screen.

Toda vez que você for inserir um código na lista, você irá seguir um modelo específico, que é [X] + [Nome do seu asm]. Aí você se pergunta "tá mas o que é o X? Não tô afim de fazer conta". Pois bem, o X da questão vai depender do:
- Level: Se for um level vai ser o número da fase. Ex: 105
- Mapa: Se for um mapa, será o número que identifica esse mapa. Ex: 02 (é o Vanilla Dome).
- Gamemode: Se for um Gamemode, precisa indicar qual deles é. Se você não tem idéia do que estou falando confere aí embaixo a lista completa desse meme aí.


Agora que você já sabe pra que o List.txt serve, precisamos conhecer a função de cada pasta. Como podem ver, a tool organiza os códigos dessa forma, tornando tudo mais prático (só jogar o asm lá dentro, sério). As pastas mais importantes no momento são:
- Level: Jogue aqui dentro todo ASM que será usado durante levels.
- Gamemode: Jogue aqui dentro todo ASM que será usado durante Gamemodes.
- Overworld: Isso mesmo, os códigos pra mapas fica bem aqui.
- Other/library: Você não vai usar isso aqui muito não mas se o código for complexo talvez seja útil.
- Asm: Não toque aqui senão cê vai morrê.

Com tudo isso em mente você já deve imaginar o que fazer, não é? Tudo que você precisa é criar/baixar um ASM pra ser usado com UberasmTool, jogar dentro da pasta correspondente, abrir o arquivo de texto (pra adicionar o asm) e executar o bendito UberasmTool.exe que ninguém se importa.
Ainda com dúvida? Vamos testar alguns exemplos então, sim?

Inserindo um HDMA - Gradiente
Porque gradiencia real é mais bonita que a falsa.

Gradiencia é praticamente a primeira coisa que você vai querer inserir em sua hack. Se não sabe do que estou falando, me refiro aquele jogo de cores que surge no cenário de várias hacks e que volta e meia não desaparece quando tu entra no cano simplesmente porque o cidadão não sabe que existe um fix pra isso. Antes de mais nada, baixe uma certa ferramenta EffectTool.

"É assim que nossa fase vai ficar, yay!"

Abra o programinha e vá em BG gradient. Por enquanto, iremos usar praticamente 2 das opções disponíveis: Single e Multi. Enquanto a primeira opção você apenas brinca com um canal puro de RGB, a outra permite fazer o mesmo porém 3 vezes! Em outras palavras, você pode criar novos tons e variações usando jogo de cores (e muito teste). Falando nisso, se liga só no que consegui fazer pro tutorial:

"Parece vanilla 2.0!"

Show. Agora que já acabamos de fazer o gradiente chegou a hora de salvar e, ao contrário do que novatos acreditam não pode salvar o gradiente como patch (a não ser que você queira ver a sua linda hack explodir). E como você salva, você me diz? Clicando primeiro em code e depois em copy to clipboard. Agora, tudo que você precisa fazer é abrir um arquivo vazio na extensão .asm e seguir essa fórmula:

INIT:
rtl              ; Return
MAIN:
rtl              ; Return

E colar o código embaixo do init e salvar. Eu vou explicar como isso funciona: toda vez que o UberasmTool insere um código (seja por level,mapa,etc) existe 2 formas básicas do código ser processado pelo game. A primeira INIT é antes mesmo do level ser carregado (e não vai aparecer como num piscar de olhos quebrando a magia) e MAIN, que é o lugar principal onde o código será carregado durante o level. Esse esquema não funciona apenas em levels, mas em mapas também.

Tudo ok? Agora salve o arquivo, jogue ele na pasta level do UberasmTool e em seguida copie o nome do asm e adicione a lista seguindo o modelo. Salve ela também e execute o executável (AVÁ). Done!

Inserindo um HDMA - Escuridão
Para a sua creepypasta ficar mais creepy... e pasta.

Você já deve ter percebido que certas hacks de terror possuem umas faixas pretas escurecendo a tela, não é? Isso se chama Darkness e é principalmente usado em sessões de caverna ou assustadoras. Para fazer o nosso próprio HDMA basta abrir o EffectTool e escolher a opção Brightness. Vai surgir como 3 opções mas como aqui é raiz vamos usar a mais prática, mesmo (single):

"Spoooooooky"

Mesma coisa Ai que susto!: do anterior, porém agora complica um pouco pois o programa te dá o código separado em duas colunas: a da esquerda é INIT e a da direita é MAIN. Efetuem o mesmo processo de copiar e colar (lembre-se de fazer isso toda vez que o programa pedir!). No final de todo esse processo meme nossa fase vai ficar bem assim:

"Cade o jumpscare?"

Inserindo um HDMA - Parallax e Waves
Isso aqui não é Tijuana mas o bicho vai pegar.

Você já sabe fazer e inserir seus próprios HDMA básicos, sua hack está mucho buena mas você queri ir além. Depois de ver na sua hack predileta que o cenário se movimenta por camadas você desejou ter um também... e não se esqueça daquela fase épica de água onde tudo treme feito bobinho de postão de gasolina e que era tão chata que você nunca mais voltou nela. Pois bem, é o que vamos fazer AGORA.

"Exemplo de Parallax usado em Sword Master, pra NES!"

Como fazer um Parallax com EffectTool:
Eu sei que isso vai ser bem meme de se dizer, mas a forma que eu faço meus parallaxes é através de um testa-testa usando nada mais do que uma screenshot do cenário do level que eu desejo inserir. Isso porque a ferramenta ainda não possui uma opção de inserir sua screenshot então obviamente vai deixar a minha vida  e a sua um pouco mais desafiadora.

"Assim que o meme começa"

Pois bem: abra o EffectTool, clique em Parallax e logo em seguida em new (pra adicionar uma scanline). Caso não saiba, parallax funciona como um conjunto de linhas que se movimentam por vontade própria ou melhor dizendo em velocidades diferentes do scrolling da camera. As opções que temos são:
- Scanlines: Começa com 10. Quanto mais scanlines você coloca por nova linha, mais retangular ela irá ficar. Oh sim: ela começa a se formar do topo pra baixo, lembre-se disso.
- Multiplier: Isso aqui vai definir a velocidade. Se for menor que 1, é porque vai ficando mais longe. Se for maior que 1 é porque tá cada vez mais perto.
- Speed: Ele serve como um bônus pra opção interior, mas ao contrário de multiplicar ele adiciona.
- Direction: Tu sabe a diferença de esquerda e direita né? sem piada política peloamor.
- Layer: É o local onde o Parallax vai ser inserido.

Se lembra quando disse que ás vezes a ferramenta vai te mandar o código em 2 colunas? Agora é sua vez de fazer o serviço. No final das contas, salve, adicione e re-insira. Done!

"Waves sendo usadas nas chamas do Castlevania de SNES que ninguém gosta"

Como inserir Waves:
Bem mais fácil do que a anterior, inserir waves é simplesmente uma delícia de fazer e testar. O único detalhe é que a visualização da ferramenta pode não mostrar o poder completo da velocidade da onda, isto é: se voce colocar o mais rápido possível no EffectTool, vai ver que ela é quase 2x mais rápida ingame. Sinistro, véi!

"Você consegue fazer alguém vomitar desse jeito, sabia?"

So yeah, parece que não preciso explicar muito sobre essa parte. Speed é o quão rápido o negócio fica já o resto não sei explicar (se bem que você descobre enquanto brinca, lol). Novamente, o programa vai te dar o código em duas colunas... bom, já sabe o que fazer, certo?

Inserindo um HDMA - Color Math
Praticamente magia negra.

A coisa agora vai realmente ficar complicada e se eu fosse explicar TUDO teria que criar um novo tutorial e isso vai ser praticamente impossível até porque de color math não sei quase nada. Tudo que eu sei é que você pode usar uma imagem em 256x224 (dimensão original do snes) e usar como mask em seu level. Em outras palavras, tu pode pegar uma imagem com um baita círculo preto no meio que o programa vai identificar apenas a parte colorida (preto nem é cor). Dá uma olhada:

"Uma alternativa a um certo code de Flashlight"

Como podem imaginar, a imagem original que usei pra criar esse efeito (viram como ele tem máxima prioridade? afeta até sprites!) possui cores invertidas pra ferramenta inverter e criar essa peça de código. Pra brincar com isso daí, você primeiro seleciona a opção Color Math e peois clique no quadrado dizendo Load Image. O resto é por sua conta, brinque a vontade escolhendo que camada será afetada ou não.

Inserindo um HDMA no mapa
Se um level pode ficar cool porque não um mapa?

"Tá vendo esse gradiente aí no fundo? Yay"

É possível inserir também HDMA em mapas. Não só apenas gradiencias como qualquer código funcional. Entretanto, o mapa em si pode dar um pouco mais de trabalho simplesmente porque, de acordo com o que quer enfiar, vai precisar fazer algumas coisas:
- hdma fica no fundo: Mapa usam tiles e nenhum deles é transparente. Voce precisa editar parte do mapa com tiles vazios para que o seu efeito apareça.
- hdma fica por cima: Nada de mais, entretanto a borda do mapa irá camuflar boa parte do efeito.
- Literalmente texto: Funciona normalmente e de forma silenciosa. Plug and play.

É super interessante programar pra Uberasm: com conhecimento necessário voce pode fazer coisas malucas que farão sucesso no recreio da escola (só não vai passar voce de ano). Por exemplo, é possível teletransportar o Mario pra um mapa em específico caso ele esteja em certo level. Mas não irei ensinar nada por hora e ASM (até porque não sei muito lol), porém vamos aprender a inserir vários códigos via Uberasm agora e ver a magia do Gamemode.

Inserindo ASM - Código básico
Fácil, extremamente fácil.

"Esse é você depois que conseguiu inserir um código na sua hack"

Um código básico é todo aquele .asm que possui um objetivo simples, plug and play. Muitas vezes você não vai precisar configurar nada e o arquivo faz o serviço por voce. Um exemplo é isso daqui: tudo que o código faz é deixar o Mario invisível e adivinhe só... 2 linhas! Saca só que mamada: como é que eles aceitaram um código de 2 linhas peloamor

Main:
LDA #$FF         ; Carrega tile invisível e...
STA $78            ; e taca no sprite do player
rtl                       ; isso aqui é um branch que avisa que já deu

Esse tipo de coisa é extremamente fácil se você possui conhecimento básico. Em outras palavras, você mesmo pode codar alguma coisa se souber o que está fazendo. Outro exemplo básico é essa coisa linda aqui. Tudo que o código faz é esconder o Mario quando morre e, ao morrer spawnar no local dele uma explosão de Bomb Omb usando a própria rotina de explosão da mesma.
Parece complicado, né? Mas ASM é divertido. quando o seu código funciona pelomenos né

Inserindo ASM - Código mediano
Ainda tá fácil, mas precisa configurar umas parada.

"Esse é você tentando adivinhar o que o código tá pedindo porque não veio com Readme"

Daí tu baixou o código da SMWC e viu que o arquivo tá pedindo coisa. Ele diz "Hey se voce quer personalizar o código só mudar essas paradas aqui" aí tu fica tipo "Bruh não sei o que fazer vou nem usar mesmo". Não se preocupe, baby, isso acabou. Vamos baixar isso daqui: é um código que permite trocar de powerup ao pressionar L/R durante um level ou Gamemode.
Explicando:

!powerup1 = $02     ; powerup que tu vai ganhar se apertar apenas R
!powerup2 = $03     ; powerup que tu vai ganhar se apertar apenas L
!powerup3 = $00     ; powerup que tu vai ganhar se apertar L+R

Caso não saiba, powerups possuem um ID reconhecidos por um endereço em específico. A lista completa é essa daqui e geralmente é aplicada a powerups que vão ser usados na Item Box, a famosa caixinha reserva:

- $00: nada, literalmente vento.
- $01: Cogumelo.
- $02: Fireflower a famosa flor de fogo.
- $03: Starman aka estrelinha da Cotiplás.
- $04: Feather aka peninha que quebra level
- $05: Cogumelo verde aka 1UP

Como no exemplo do código o powerup vai ser aplicado DIRETO no player, a ID vai mudar um pouco (a diferença é que Starman e Feather são invertidos e ao invés de vento, Mario fica pequeno). Por simples curiosidade você pode inserir não apenas em um level, mas também em TODOS. E como você faz isso? Inserindo o .asm como Gamemode 14.
Basicamente isso:
- Baixe o .asm e jogue o arquivo na pasta Gamemode do UberasmTool
- Edite ele como quiser
- Vá pra o list.txt, e ao invés de adicionar na sessão de levels (que é a primeira) tu insere na última:
   Gamemode + Nome do ASM sem espaços.asm
- Execute a tool e seja feliz!

Inserindo ASM - Código hardcore
Meu filho agora o pau vai comer, bebe água senão você se desidrata.

"Esse é você após ver as 20 pastas que acompanha o código"

Chegamos no chefão final. Aqui, o código não só pede pra editar um muro de opção como também é um RITUAL SATANICO pra fazer funcionar. Muito novato (e até experiente) deixa de usar esse tipo de coisa porque de fato não é nem um pouco amigável ainda mais pra quem está mais perdido que cego em tiroteio. Como exemplo, baixe esse presente divino que esperei dese 2016. Sim, é um código que remove o mapa (talvez você tenha preguiça de fazer mapas ou quer fazer algo mais SMB isso é perfeito). Bom, vamos inserir?

Como pode ver, o .zip vem com 3 bagulho: uma pasta chamada Library, um Readme (graças a deos) e um arquivo explicando o que cada rotina faz pra quem é louco por ASM e quer inventar moda (que não é nosso caso). Pois bem: o que tiver na pasta X do .zip tu joga na pasta correspondente do UberasmTool. Agora abra o readme e vai descobrir que tu precisa fazer um certo meme:
- Abra o arquivo global_code.asm que fica dentro da pasta Other do seu UberasmTool.
- Copie e cole aquela peça de código marota do Readme no main do arquivo. Salve.
- Vá pra pasta Library, abra o NoOverworld.asm e edite o que tá pedindo:
   - !first_level : Qual é a primeira fase do jogo? Nem precisa editar isso btw lol.
   - !final_level : Qual é o último level da hack?  Créditos irão aparecer se tu passar dessa fase.
   - !save_at_midways: Escolha aqui se o jogo vai salvar ao pegar Midway Point.
   - !more_levels_after_credits: Opção caso você queira continuar jogando após os créditos.
   - !save_when_beating_level: Salva quando passar de fase? Se sim, toda vez que tu resetar o console vai começar do ultimo level em que parou.
    - !save_during_transitions: Salva durante transição? Precisa usar Retry system, btw.

Nada tão alarmante, não é? Isso porque esse foi o código mais fácil que encontrei pra dar exemplo (sim tem mais complicado que isso). Se você tiver disposto a sacrificar um bom tempo talvez exista a chance do código precisar não só de configurações, mas blocos e patch extra (vem junto no .zip). Aliás, se você é louco o suficiente pra querer inserir alguma coisa do GHB tipo isso aqui meu filho acho bom você rezar porque o negócio é tão difícil que praticamente ninguém teve a audácia de usar as coisas dele de tão chato que é de configurar.

Bônus - Inserindo mais de um ASM
Um é bom, dois é ótimo e três é um muro de texto.

Existe um método super prático caso você queira inserir mais de 1 .asm em um level/mapa/sei lá na sua hack, evitando assim aquele muro de texto horrível que cansa as vistas. Esse método é o equivalente a chamar scripts no Game Maker Studio: tudo que você precisa fazer é tacar os .asm na pasta Library e então criar um novo .asm na pasta do lugar em que deseja usar. Por exemplo, vamos supor que eu quero tacar 2 HDMA na mesma fase. Nisso você abre esse arquivo e escreve seguindo esse template:
init:
JSL  Nomedoarquivo_init
JSL Nomedooutroarquivo_init
rtl
main:
JSL Nomedoarquivo_main
JSL Nomedooutroarquivo_main
rtl

Eu vou salvar esse arquivo como... Kochobo.asm e esse arquivo vai ser inserido como qualquer outro no list.txt. Esse arquivo vai inserir 2 HDMA usando um arquivo apenas... legal, não é?

Atenção: Se o seu código não possui main ou init (alguns casos) apenas adicione o que ele tiver em correspondencia.

"To morta"

E esse foi o nosso tutorial da vez. Espero que esse novo testamento aqui seja útil á você e se tiver qualquer dúvida em relação pode deixar um comentário bem aqui. Chew!
Bom, até mais!

Um comentário: