Fala rapaziada, belezinha? Quem não me conhece, eu sou o Zica da Leste. Antes que perguntem, não, não tenho nenhum mod, não lancei nenhum mod, sabe Deus quando barra se eu vou lançar algum, mas eu sou um cara que já tá aí há uns meses estudando o código do jogo, né?
Então já consegue fazer vários avanços. Eu sei que muita gente tem interesse de criar coisas. Eh, eu sei que a quantidade de recurso que a gente tem disponível não é muito grande, então realmente acaba ficando assim confuso para quem tá querendo entrar na parte da criação de mod e começar a fazer as coisas, acaba ficando bem complicadinho assim.
Então, basicamente, eh, eu vou dar algumas instruções aqui. Hoje vai ser meio que só uma dica geral, que eu acredito que tenha bastante serventia aí para muita gente, mas a futuro eu pretendo fazer uma pequena série, não sei de quantos episódios, não sei quanto vai durar cada um deles também, mas para pelo menos conseguir dar um nivelamento aí para quem tiver interesse em dar os primeiros passos ou pelo menos ter um pouco mais de autonomia e assim vai. Então, em alguns dias ou semanas, quando eu tiver com tempo e vontade, eu vou postar um pouquinho explicando para vocês sobre o MIPS, né, explicando para vocês aí sobre HXD, sobre o editor, né, de hexadecimal, sobre como funciona tudo isso.
Então, eu sei que isso daqui a priori a pessoal olha e acha confuso ou difícil demais, mas não é tão bicho de sete cabeças se você entende o que você tá fazendo e tudo mais. E é isso que eu quero conseguir ajudar vocês aí num futuro relativamente próximo, tá? Por hoje, que que eu quero mostrar para vocês?
Eu quero mostrar para vocês uma coisa que para mim é muito importante, que é a questão de espaço, tá? Por quê? Porque tem muita ferramenta que quando vocês vão usar já aparece enorme lá, tipo, não funciona com outra ferramenta ou um tad que às vezes vocês aplicam e quebram tudo.
E não porque o tad tá mal feito ou qualquer coisa do tipo, e sim porque é uma área que na sua sluz já não é mais livre, tá? E tem muito espaço das luzes que parece livre, mas não é livre de verdade, porque é um espaço que durante a execução do jogo vai ser escrito por outras coisas. Então aí já é um pouco mais avançado para você saber qual espaço é seguro, qual espaço não é.
Mas vocês vão perceber aí que grande parte dos mods usam essa área aqui bem mais no finalzinho, já perto de 1 C0. Aí você pode ver que realmente tem bastante espaço. Boa parte desse espaço realmente é vazio mesmo, tá?
Então, basicamente aqui eu tenho um tad que é para você mover os leveis, é, tá certo? Mover as estrelinhas dos monstros. Que que a gente precisa verificar no momento que a gente vai fazer isso?
É importante a gente entender o que tá alterando coisa que já existe no jogo e o que tá adicionando coisas que não existem. Por quê? Porque no momento que a gente faz a alteração de algo que existe no jogo, na grande maioria das vezes a gente vai precisar fazer um jump.
O que seria esse jump? a gente tá redirecionando o fluxo de um lugar pro outro pra gente fazer algo e depois colocar de volta no lugar, tá? É o que acontece quando a gente faz um efeito que aumenta o poder do monstro.
Por exemplo, na rotina de invocação do monstro, a gente para, leva o código para o lugar onde vai fazer essas verificações de se o monstro possui efeito, quem que é para esse monstro afetar e várias outras verificações que são importantes para que o efeito funcione corretamente. Mas depois de tudo isso, a gente vai voltar exatamente pro mesmo lugar. Isso é muito importante de vocês lembrarem, tá?
Então assim, ó. Vamos começar desse jeito. Eu vou copiar esse offset aqui.
Eu vou usar o contrl G, que me permite fazer a busca por offset. Vou colar e vou dar OK. Se vocês forem ver aqui, ó, é um espaço que já tem informação, não é um espaço vazio, não tem um monte de zero.
Então aqui a gente tá alterando o funcionamento de algo que já existia do jogo, certo? Aqui, ó, nesse offset, a mesma coisa, eu acredito, ó. É, ó, aqui tem o 20, já até tá o 20 por padrão.
Acho que colocaram, mas enfim, não faz diferença. Nesse offset aqui, ó, aqui já é um espaço vazio, certo? Então, nesse espaço vazio está sendo adicionada informação que, como vocês viam antes, não existia.
Pode até ser que esse espaço aqui fosse escrito durante o jogo. É isso. Como a gente sobreescreveu coisa lá em cima e esse espaço aqui passa a ser o espaço onde tá esse código, eh, por hora a gente não vai se preocupar muito com isso, tá?
Aí tem aqui os offsets para serem editados, né? Então, esse código aqui, esse primeiro é para e centralizar tudo de uma vez só. E daí depois a gente tem os para mover individualmente por cada uma das estrelas, tudo mais, o offset de cada uma delas.
Mas novamente, que que eu vou mostrar que é importante, ó? Esse endereço aqui, esse 1B0, ele já é bem lá pro finalzinho da sluz. Pode ver que é um endereço vazio que não tem nada.
Mas vamos supor que você já usou algum TAD e esse TAD coloque informação aqui. Isso significa que você não pode mais usar Stad? Não.
Isso significa que se você usar ele, ele vai sobreescrever informação e vai dar problema. Então, o que faz com que você não possa usar ele? é simplesmente a zona para onde ele tá redirecionando o código.
Não é que o TAD não presta, porque se eu pegar esse mesmo código aqui, a, opa, ao invés de eu colar aqui, eu colar aqui, vamos supor, porque aqui é uma área vazia, ele vai funcionar se eu apontar certinho para lá. Então, ó, para vocês terem melhor esse entendimento, a primeira coisa que a gente precisa fazer é isso, o espaço, porque a maioria dos tadios, o Luiz ou quem criou o TAD, deixou uma legendinha do que que vai ser modificado. Então, isso é bem útil para vocês irem aprendendo também.
Então, ó, aqui se eu for pegar isso daqui, eu até tenho um mips. Se eu jogar aqui, ó, ele tá mostrando que é um jump, certo? O jump é justamente a mudança que eu falei de fluxo.
O jump ele vai e não volta mais. Mas enfim, isso daí eu entro mais em detalhes em outro momento. E aqui o endereço eh nas luz.
Esse endereço ele é representado assim como vocês vem no HXD. Mas o que que acontece? Quando o jogo tá funcionando?
Existe uma coisa chamada RAM e essa RAM aumenta o valor do que tá na SLU por um número fixo, tá? Então, sempre que a gente for procurar algo na SLU, a gente vai pegar o endereço sluz daquela informação. Então, deixa eu buscar qualquer coisa aqui só para mostrar para vocês.
Então, ó, vou pegar esse aqui, ó. Eh, oi. Opa, tá certo?
1 C8 400. Sim. E o jogo vai adicionar 8000 F800 em Rex, tá?
É sempre tudo em Rex. Isso vai dar esse 801D 7C00. Beleza?
Então, ó, voltando aqui, ó. Esse é o espaço que eu copiei, ó. Tá vendo?
F1D. Se eu abrir o jogo, opa, abri a tool sem querer. Eh, PCSx Redux.
Se eu abrir o jogo e procurar por esse Rex, aí eu já vou mostrar rapidinho também como que faz esse emulador. Ele tem várias coisas assim, justamente para você conseguir fazer esse trampo de desenvolvimento. Eu simplesmente vou vir aqui no memory observer, tem para você fazer uma busca e aí você pode fazer a busca direto por caracteres, né, por código, ao invés de por valores.
Apesar que você pode ver valores aqui, você pode ver padrões aqui, enfim. Eu vou procurar aqui por esse Rex. Então, ó, 801D 7C00.
801D 7C00. Exatamente aquela informação que eu mostrei, ó. Se eu abrir aqui a parte, vocês vão ver, ó.
É o mesmo código que a gente tinha visto antes lá, ó. Eh, que a visualização assim tá horrível. Deixa eu puxar um pouco mais.
Eu vou ter que destacar aquela janelinha no Memory Observer. Depois eu coloco no lugar de volta. Então, ó, aqui, pronto.
Pode ver que é a mesma coisa, ó. F1D 05 0605, sacou? Então, é assim que você calcula.
E voltando lá à questão do jump, esse jump aqui ele vai ser um jumping run. Então esse zero aqui normalmente no jogo ele é apresentado como 80, tá? Não faz diferença quando você tá vendo aqui.
E dependendo do emulador que você tiver usando, inclusive você não vai poder fazer um jump para 80, você vai ter que fazer para 0 x0. Isso daqui é detalhe de síntax também de cada plataforma que você tá usando. Voltando ao que é relevante pra gente aqui, ó.
Então esse endereço aqui, ó, que tem esse primeiro pulo, tá vendo, ó? Ele é um pulo que vai para 80 09 108. Então, ó, vamos colocar aqui, ó, 809 108.
É isso mesmo, 809 108. É, eu vou subtrair aquele 8000 F800 porque o jump ele já me mostra o valor em RAM. Então, ó, 81 808.
Pode ver, ó, que é justamente o valor onde já tem esse texto. Que que eu quero dizer com isso tudo? Vamos supor que esse lugar aqui estivesse ocupado.
Já existe código aqui. Então, ó, 81 808. Vamos supor que aqui já tivesse ocupado.
A gente conta, né, quanto a gente precisa. Ó, eu ah, isso daqui é importante vocês lembrarem, então já vou adiantar também. Cada sequência de 4 bytes é uma palavra, tá?
Só lembrar isso. As palavras começam no zero. Zero.
Aqui, ó. Se vocês verem o índice onde tá o meu mouse, eu acho que aparece. Ah, não, na gravação não aparece meu mouse.
Eh, mas aqui, ó, onde eu dei o botão direito ali, dá para ver, ó. Então, ó, é do 001 02 03. É uma palavra aqui, ó.
Agora, do 04, 05, 06, 07 é outra palavra. Do 8 9 A, B é outra. E do C, D e F é outra.
Então, ó, a gente conta aqui a quantidade de palavras, ó. 1 2 3 4 5 6 7 8 9 10 11 palavras. Que que significa?
que eu preciso de 11 x 4 bytes para colocar aquele texto, para eu colocar essa sequência de caracteres. E se você for ver a última instrução dela, é muito importante você perceber sempre que no código tiver um 08 no final de uma palavra ou um 0C, ó, 08, eh, 08. Tá vendo?
sempre que tiver no quarto, no quarto byte da palavra, isso é importante. Então, ó, coloquei ali, ó, esse daqui que eu copiei é o que tava aqui, certo? Então, o que que isso quer dizer, ó, F5 A3080 é 008?
É um jump que vai para 802 8F D4. Então, se a gente pegar aqui, ó, 802 8F D4 e subtrair aquele 8000 F800, vai dar em 197D4, certo? Eh, aqui tá aqui, ele já tá jogando para dentro de uma outra rotina, porque já existe de fato uma rotina no jogo.
A gente sobreescreveu um pouquinho dela, eh, mas existe a rotina já que já faria isso. E de fato, se a gente for ver aqui, ó, esse 197 CC, se eu colocar mais 4 e mais 4 de novo, dá justamente o que eu falei, né? É 197 D4.
Sim. Então, basicamente, que que a gente fez? A gente saiu desse 197C.
Então, ó, 197C, 197C, 197CD, 197CE, 197CF. Aí depois vai mudar, vai para 197D0, 197D1, 197D2, 197D3. A próxima seria justamente essa.
Então o que que a gente fez? A gente basicamente sequestrou o código daqui, levou ele pra outra área do da RAM, da SLU, aplicou o que a gente precisava fazer de modificação e devolveu exatamente para onde ele continuaria normalmente. Certo?
Isso é muito importante para sempre que a gente tá fazendo mudança de fluxo de código. Então o que que eu quero dizer com tudo isso? Que se você pegar o endereço assim, ó, mesma coisa aqui, ó.
Esse é para mover individualmente. Copiei aqui, ó. 80 1B FE8.
Vamos lá. 801B FE FE8 - 8 F800 1B06. Ó lá, ó.
1 B066. Então, o que que é importante você entender? Ah, mas nessa parte minha já tem código, cara.
Joga em outro lugar. Você pode simplesmente jogar em outro lugar. Você vai vir aqui onde fez esse pulo para B0668 e você vai fazer assim, por exemplo, lá.
Então, ao invés de fazer o jump para lá, eu vou fazer o jump, sei lá, eu vou ver uma área vazia aqui do código, vou colocar num CA 140. Um C 140 tá vazio, então vou pôr um jump zero. Eh, aí eu preciso fazer a mesma conversão, né?
1 CA 140 + 8000 F8. Então, sempre lembrando, da SLU pro RAM, você vai aumentar, da RAM para sluz diminuir esse valor, tá? Então, vou colocar aqui, ó.
Deixa eu ver se vai. Foi, ó, 50 6608. A única coisa que eu precisaria fazer nesse código para mover seria mudar esses 4 bytes.
E aí esse código ao invés de colocar nessa região, eu colocaria no CA 140 e funcionaria do mesmo jeito. Então, ó, vou fazer, vou fazer rápido aqui. Talvez eu faça alguma, talvez eu faça alguma loucura e não funcione, mas enfim, né?
É mais pra gente, é mais pra gente conseguir pegar esse teste. Então aqui eu tenho mais luz. Deixa eu pôr isso no lugar.
Era aqui embaixo, tá? Então, ó, aqui eu tenho uma sluz normal, é sluz zerada do jogo vanila, tá? Pode ver tudo normalzinho aí.
Eu acho que só é só fiz a modificação para poder colocar mais carta no deck que fica melhor para testar as coisas. Mas então, ó, aqui vocês estão vendo a questão das das estrelas, né? Normal.
Eu vou começar a fazer essas modificações do código. Eu vou fazer no próprio emulador, tá? O certo é você fazer no editor, porque daí vai persistir.
Como eu tô fazendo a critério de teste, eu vou fazer tudo já direto no jogo. Então, ó, eh, 197 cc, eu vou colocar mais 8000 F8, vai dar 802. Isso daqui eu vou procurar esse endereço aqui.
Então, ó, deixa eu pausar o emulador também porque senão às vezes dá uns shibil aqui, ó. 024 0208, ó. É aqui, ó.
024 028 00. Beleza. Aqui eu redirecionei para esse endereço, né?
Então, ó, só pra gente verificar de novo aqui, ó, é pro 8009 108. 809 108 - 8000 F81 808, aquele que eu tinha passado para vocês, tá? que é justamente aqui, ó, onde eu vou redirecionar isso.
Então, beleza. 81 808 + 8800 dá 809 10 é 08. Eu vou para esse lugar agora do meu código no jogo, ó.
Tá aqui esse espaço vazio, né? Deixa eu organizar um pouco essa janela de um jeito que fique melhor para eu fazer isso. Eu vou fechar algumas coisas, depois eu abro de novo porque senão fica Beleza?
Sim. Tá bom. Eh, então, ó, é esse lugar, ó.
809 108. Eu vou colocar todo aquele código, ó. 3A 0061 920F 00 21 80100400 21 24 1 2 3 4 21 10 Opa 414 002 e 2 quer dizer A6 1080 1 3C 1 2 3 4 0 F5 A3008 00 Bom Pronto, coloquei todo o código lá.
Aí agora eu vou salvar, ó. Pode ver que já moveu. Pode ver que já moveu a posição das estrelas.
Certo? Aí nesse offset aqui, deixa só eu ver se tinha mais alguma coisa que precisava fazer. É 802.
Deixa eu copiar isso, jogar aqui. Aqui tá falando para pôr o 20. É, aí eu é, ó, daí esse offset aqui, ó, ele é pra gente fazer a modificação da posição vertical.
Então, se ao invés de 20 eu colocar 22, viu que desceu, aí você consegue ir mexendo aqui até você falar, tipo, ah, beleza, essa posição agora tá certinho, entendeu? Agora eu vou fazer o contrário. Eu vou pegar esse mesmo código, eu vou voltar na posição lá do jump.
O vídeo já tá grande para mas enfim. Eu vou voltar na posição do jump, ó, nesse 80. Aqui eu nem vou precisar converter, né?
809 108. Ó, vou salvar o jogo. Deixa eu pausar de novo.
809 108. Certo. É isso daqui que eu tinha mexido, né?
Deixa eu conferir o código. Isso. Começa no 3a.
Vou apagar tudo, ó. Vou apagar tudo. Pronto, chega.
Agora eu vou lá no 1 CA10. Vou fazer o F800. A gente tem isso daqui, tá?
Então, só para vocês verem, ó. resumir o jogo aqui. Eh, ó, aqui tá daquele mesmo jeito ainda, tá?
Não vai ter alteração feita ainda. Pode ver que tá no mesmo lugar. Então, a primeira coisa que eu vou fazer vai ser restaurar o valor base do jogo.
Isso daqui você não precisa fazer, tá? Eu vou fazer isso daqui só porque eu tô só porque eu tô querendo exemplificar para vocês como que funciona. Mas então aqui os valores originais eram esses aqui, ó.
Eu vou pausar de novo. Vou lá no 80, quanto que é? 809 108.
Então aqui, ó, vou apagar tudo, deixar tudo zerado. Eh, que mais que eu fiz de modificação? Isso daqui era aqui, né?
Esse 197 ccc. 197C + 8000 F8. E aqui, ó, 802.
Eu vou para aqui. Opa, não copiei. Eu vou para esse endereço aqui.
E aqui eu vou colocar os valores originais do jogo, ó. 77004224 042 Opa 0400 22 A6 Vou salvar vou resumir ó pode ver que tá funcionando. Voltou a ser exatamente como era antes, tá?
Então agora sim, ó. 1 CA 140 + 8000 F8 1D 9940, tá? Eu vou para esse lugar aqui e nesse lugar eu vou colocar aquele mesmo código que eu tinha colocado antes.
Beleza? Então, vou vir aqui, ó. Eh, deixa eu apertar bastante a foto do jogo para caber.
Vou pausar o emulador. Então, ó, aqui eu vou colocar 3A0061920F 21 308 08. Quando você faz esse processo aqui no Wind Hex, que é o certo, você simplesmente copia e cola, só que você cola com control B, porque o contrtrl B ele cola sobreescrevendo, ele não adiciona texto a mais.
Você não pode nunca adicionar texto a mais luz, porque senão você desloca as palavras e daí quebra absolutamente tudo do jogo. Nunca faça isso. Mas aqui, ó, ainda tá funcionando normal.
Por quê? Porque eu não alterei o fluxo, eu só coloquei um código que por enquanto o jogo nunca acessa, que tá nesse meu endereço no 801D 9940. Mas aí, ó, se eu vier aqui, que é onde tá aquele pulo, e colocar esse código aqui, ó, 5060708, vamos pegar a posição de novo, ó, 197 CC.
Lembrando, esse cálculo que eu tô fazendo toda hora de mais 8000 F800, menos 8000 F800, é só porque eu já tô mexendo direto no jogo. Para você mexer no IND Rex, você não precisa fazer isso, não precisa ficar fazendo essa conta, não. E é por isso que é o certo fazer direto no ind, porque daí já fica salvo no jogo.
Aqui a vantagem é que eu posso ir testando em tempo real, não preciso ficar montando ISO, desmontando ISO, então torna muito mais prático para mim, apesar de ser de ter etapas a mais, ainda mais seguro para eu testar, certificar de que tá tudo certo, perder menos tempo com montagem de ISO. Então, ó, 802, esse endereço aqui, ó. Vou para lá, vou pausar meu jogo.
E cadê o endereço? Aqui, ó. Daí eu vou mudar.
para esse endereço aqui. 50, opa, 50, 50 66070800. Vou despausar e pronto.
Pode ver que é a mesma coisa, é o mesmo código. Eu simplesmente movi esse TAD me serve porque eu não tô sobrecrevendo outro TAD que eu já tinha aplicado ou código de alguma outra atu que já tava ocupando aquela área, entendeu? Então, eh, o vídeo ficou muito grande porque eu tô mostrando assim de forma bem robusta, só para dar essa esse entendimento mais geral da coisa, né?
Só que no fim o que importa é isso. Sempre que você vai aplicar um TAD, se você quer ter a certeza de que ele não vai conflitar com informação que já existe no mod, com coisa do tipo, são esses os passos que você precisa fazer. Você vai, olha ali as anotações do Luí, que ele geralmente sempre deixa, vê quais são as áreas que vão ser escritas, entendeu?
E vai vendo o que que é a vazia, que que não é. Opa, tem uma parte aqui que ele vai jogar justamente para cima de onde já tem texto. Aí fodeu, aí não dá certo.
Aí você já sabe. Não. Então é só o redirecionar para uma outra área vazia.
Lembrando, usa sempre essas áreas mais pro final das luzes, tá? Eh, porque se for uma área que a que o jogo usa dinamicamente para pôr informação, igual onde ficam os atributos dos monstros, que só vai ser carregado quando o monstro ser invocado ou quando o mão ser puxado pra mão e tal, vai dar ruim. Então, prioriza essas áreas aí pro final lá perto de 1B, eh, 1 B, alguns quebrado, igual faz aqui, ó, 1 B066, 1 C, 1 CA 140 igual uso, já leva mais para essas áreas bem no finalzinho do código, que aí é um pouco mais seguro de não ter nada até essa parte onde o próprio jogo volta a ter informação.
Bem lá no final, depois de um C, tem algum lugar aqui que tem algumas informações que vem no jogo normal. Cadê? Não lembro.
Acho que eu já até passei. Acho que eu já passei, mas tem alguma partezinha aí no final que tem algumas coisas. Bom, enfim.
Eh, aqui, ó, perto de um C9, ó, ainda tem informação. Passou disso daqui, ó, nesse bloco aqui, ó. aqui acaba informação, então a partir de um CA, por exemplo, já é bem safe também.
No mais, é isso. Eh, em algum momento eu faço tutorial separado explicando cada uma das coisas por hora. É isso que você precisa.
Eu vou inclusive postar os HTML disso daqui, tá? Tanto desse quanto desse. São ferramentas bem simples.
Você consegue montar no chat EPT rapidinho, mas aí eu vou postar os HTML. Você simplesmente baixa e cria um arquivo ali no PC, é coisa fácil também. Se não souber, já pergunta no chat GPT, como montar um HTML, que aí você consegue acessar, você não precisa de internet nem nada e você simplesmente vai poder fazer esse espaço.
Então aqui, por exemplo, pode ver que eu não faço mais conta porque eu já tenho minhas ferramentas, tanto para com eh para converter meus jumps, né, direto pro código que eu preciso pôr no jogo, quanto a para converter da linguagem Hex, né, do Hex Little Engine, que é a linguagem de máquina que o jogo usa para eu conseguir converter para MIPS, para eu conseguir ler. Lembrando que aqui vocês por horas só precisam se preocupar com os finais 08 e 0C, porque são eles que estão fazendo essa mudança de fluxo de informação. Vai funcionar para todos os TADs?
Não, pode ter algum que quebre, tá? Mas para essas mudanças mais básicas, isso daí resolve 100% se for para alguma coisa que adiciona cor, que move estrela, que altera tamanho, na grande maioria das vezes vai funcionar. E aí, se não funcionar, é algo que eu vou ajudar vocês a entenderem futuramente quando a gente entrar nos comandos já de brand, porque daí são saltos relativos, então a gente vai precisar ver onde que a gente tá no código, para onde a gente tá saltando para calcular a distância e ver se precisa fazer alguma outra coisa e afins.
Beleza? No mais, é isso, ficou um vídeo enorme, mas eu acredito que seja bastante informação, no mínimo curiosa para quem tem interesse em começar a fazer conteúdo, que tem interesse em começar a fazer modificações do jogo. Então isso daqui talvez atice um pouco a curiosidade de vocês para que vocês queiram aprender mais, beleza?
Então é isso. Eh, qualquer dúvida podem perguntar. Não sei se eu vou responder tão cedo, mas eu tento dar aí um suporte para vocês.
E é isso, valeu aí, abraço, boa semana e é nós.