tag:blogger.com,1999:blog-70138321044390393322024-03-19T14:11:58.511-07:00SMW TAS brUm blog em português com o intuito de ensinar alguns glitches de Super Mario WorldUnknownnoreply@blogger.comBlogger4125tag:blogger.com,1999:blog-7013832104439039332.post-10403222241991460092016-03-01T15:05:00.000-08:002016-03-07T18:00:08.937-08:00Introdução básica ao emulador lsnes<h2 style="text-align: justify;">
Introdução</h2>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lsnes é um emulador de Super Nintendo e GBC com rerecording, baseado nos cores bsnes e gambatte, respectivamente. Inclui todas as ferramentas necessárias para se fazer um tool-assisted speedrun. A principal diferença em relação aos demais emuladores com rerecording é que um movie está sempre ativo, ainda que o usuário não inicie um formalmente. Assim, é sempre possível recuperar o input após um glitch feito acidentalmente.</div>
<div style="text-align: justify;">
Futuramente, será feito um tutorial mais avançado e completo. Porém, esta página poderá receber atualizações, cujo histórico será listado no final. No presente tutorial, usaremos a versão rr2-beta23.</div>
<div style="text-align: justify;">
<br />
<a name='more'></a></div>
<h2 style="text-align: justify;">
Download</h2>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Site: <a href="http://tasvideos.org/Lsnes.html">http://tasvideos.org/Lsnes.html</a></div>
<div style="text-align: justify;">
Código fonte: <a href="http://repo.or.cz/w/lsnes.git">http://repo.or.cz/w/lsnes.git</a></div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Instalação</h2>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Baixe o instalador ou o pacote 7z, que não requer instalação; o que preferir.</div>
<div style="text-align: justify;">
Se for instalar, evite a pasta Arquivos de Programas, já que o emulador loga todas as informações num arquivo que fica no mesmo diretório e, para poder fazer isso nessa pasta, precisaria de permissão de administrador.</div>
<div style="text-align: justify;">
Então, clique no executável que se encontra na pasta de escolha, dependendo da plataforma desejada:</div>
<ul style="text-align: justify;">
<li>SNES: lsnes-bsnes.exe</li>
<li>Gameboy & variantes: lsnes-gambatte.exe</li>
</ul>
<div style="text-align: justify;">
Duas janelas aparecerão, a principal pro jogo em si e uma auxiliar, com mensagens de log e para depuração, que pode ser fechada a qualquer momento.</div>
<div style="text-align: justify;">
A janela principal possui um painel lateral, que mostra o input e outras informações. Tal painel pode ser ocultado através de <i>Configure > Show status panel</i>.</div>
<div style="text-align: justify;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1E6NKYJBNCIHXfAconYJeNg2Yc5nCFX1lISmP8DNYcjrrc20jtY45UJStStBKAYuMNXvSlwFwEtFiDvwmGqcF07M6JVyCvTNN0npUMUvtRYGVm2Gej6QmgAH9IfbptjrIYLWGbX0cBVw/s1600/lsnes-start.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="395" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1E6NKYJBNCIHXfAconYJeNg2Yc5nCFX1lISmP8DNYcjrrc20jtY45UJStStBKAYuMNXvSlwFwEtFiDvwmGqcF07M6JVyCvTNN0npUMUvtRYGVm2Gej6QmgAH9IfbptjrIYLWGbX0cBVw/s640/lsnes-start.png" width="640" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="color: #0000ee;"><u>tela de início do lsnes</u></span></td></tr>
</tbody></table>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Configurações</h2>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Clicando em <i>Configure > Settings > All as tabs</i>... permite configurar quase todas as opções do emulador. A seguir, enumeraremos de modo breve o propósito de cada aba: </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Advanced:</b> cada linha possui um nome autoexplicativo sobre seu propósito. Basta dar um click duplo para alterar/digitar o valor dessa opção.</div>
<div style="text-align: justify;">
<b>Aliases:</b> um <u>alias</u> é uma sequência de comandos internos do emulador. Executar um alias significa executar cada comando ordenadamente. Exemplo:</div>
<div style="text-align: justify;">
Alias: ResetLuaVM</div>
<div style="text-align: justify;">
Conteúdo (cada comando numa linha): </div>
<div style="text-align: justify;">
<blockquote class="tr_bq">
reset-lua<br />
repaint</blockquote>
</div>
<div style="text-align: justify;">
<b>Bindings:</b> um <u>binding</u> associa uma hotkey a um comando interno do emulador ou alias. Usando o exemplo anterior, poderíamos associar <i>Shift + L</i> ao alias <i>ResetLuaVM</i>. Assim, toda vez que o usuário apertar essa combinação de botões, o emulador executa o alias (que reseta o console Lua e apaga da tela quaisquer desenhos).</div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN-wO0_7UHv7L964BlmVlXZ7QE0n-TYqGUPfDKSjVrUXRrAKgnaJcv6IWor6MotESs-jCqI_Hz5ZahJYIYjwY61WuNsFyQlgoqENpjw_Elswakvh9ArJcLP1qbLRaBDa8yQXNrQIzzZME/s1600/lsnes-binding.png" imageanchor="1"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgN-wO0_7UHv7L964BlmVlXZ7QE0n-TYqGUPfDKSjVrUXRrAKgnaJcv6IWor6MotESs-jCqI_Hz5ZahJYIYjwY61WuNsFyQlgoqENpjw_Elswakvh9ArJcLP1qbLRaBDa8yQXNrQIzzZME/s400/lsnes-binding.png" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Controllers:</b> atribui botões do teclado (ou joystick) aos botões virtuais do console em questão. É possível atribuir que mais de um botão do teclado seja usado pro mesmo propósito. Os modificadores (alt, ctrl, shift, meta) agem como as outras teclas. É possível também configurar autofire, hold e type com um duplo clique sobre o botão.</div>
<div style="text-align: justify;">
<b>Hotkeys:</b> para quem não quer mexer com bindings, essa aba oferece as opções mais usadas. Quaisquer modificações vão parar na aba <i>Bindings</i>.</div>
<div style="text-align: justify;">
<b>Joysticks:</b> autoexplicativo. Útil para configurar eixos.</div>
<div style="text-align: justify;">
<b>URI shortcuts:</b> cria pseudônimos para endereços web que contém um arquivo de movie. Por exemplo, o nome <i>movie1</i> pode ser usado para a seguinte <a href="http://tasvideos.org/movies/lsmv/brunovisnadi%2Camaraticando-supermarioworld-warps.zip" target="_blank">URL</a>. Após fazer essa associação, vá em <i>File > Load > Download Movie</i> e digite <b>movie1:</b> (o dois pontos é necessário se for um pseudônimo) ou cole o endereço real. </div>
<div style="text-align: justify;">
<b>Video:</b> configura o tamanho da tela, tipo de escala e orientação.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Carregar ROM</h2>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para iniciar um jogo, há duas maneiras principais:</div>
<ul style="text-align: justify;">
<li>carregando o arquivo do jogo e soltando sobre a janela do emulador</li>
<li>usando <i>File > Load > ROM...</i></li>
</ul>
<div style="text-align: justify;">
Alguns <a href="https://en.wikipedia.org/wiki/List_of_Super_NES_enhancement_chips#List_of_Super_NES_games_that_use_enhancement_chips" target="_blank">jogos</a> (que usam chips especiais) necessitam de <a href="http://tasvideos.org/Bizhawk/Firmwares.html" target="_blank">firmwares</a> para funcionarem. Isso pode ser configurado através de <i>Configure > Settings > Advanced</i>, no campo <i>Paths > Firmware</i>, de modo que o emulador procurará na pasta selecionada os firmwares necessários. Alguns <a href="http://satellaview.wikia.com/wiki/Slotted_cartridge" target="_blank">jogos exóticos</a> ainda poderão requerer firmwares adicionais: <i>File > Load > Multifile ROM</i>.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Iniciar movie</h2>
<div style="text-align: justify;">
Para iniciar um movie, basta ir em <i>File > New > Movie</i>. Uma janela aparecerá:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijs1FNoss-0GJxNoquRT3Gl3izB3VPTSBqSthI4d292OvgK2v_wF6tvfzNTv4kmW-wq3LC7giEvi7nCqcz4JoFfQ1gilikOjSJAuMlRN6g2W9EfjmiB4GrzwC6hyphenhyphenQNIo-wS7Fov-gxLpM/s1600/lsnes-new-movie.png" imageanchor="1"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijs1FNoss-0GJxNoquRT3Gl3izB3VPTSBqSthI4d292OvgK2v_wF6tvfzNTv4kmW-wq3LC7giEvi7nCqcz4JoFfQ1gilikOjSJAuMlRN6g2W9EfjmiB4GrzwC6hyphenhyphenQNIo-wS7Fov-gxLpM/s400/lsnes-new-movie.png" width="400" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Alternate poll timings:</b> aumenta a precisão da emulação em alguns casos bem específicos, como na execução de código arbitrário. Faltam detalhes sobre como isso funciona.</div>
<div style="text-align: justify;">
<b>Don't support delayed resets:</b> marque caso não queira resetar (usando o interruptor <u>reset</u>) o jogo durante o TAS.</div>
<div style="text-align: justify;">
<b>Emulate saving each frame:</b> salva cada frame virtualmente após a emulação. Faltam detalhes sobre como isso funciona.</div>
<div style="text-align: justify;">
<b>Random initial state:</b> Não marque, a menos que saiba o que estás fazendo. Faz com que a RAM do jogo se inicie num estado aleatório (por padrão, cada byte começa como $#55). A maioria dos jogos zera a RAM durante a inicialização, mas caso isso não ocorra, o estado inicial pode causar diferenças mais tarde (e dessincronizações).</div>
<div style="text-align: justify;">
<b>Support hard resets:</b> marque caso queira que o emulador leve em conta <u>resets frios</u>, em que o jogo é desligado e ligado.</div>
<div style="text-align: justify;">
<b>Support mouse speeds:</b> caso se utilize o mouse do SNES.</div>
<div style="text-align: justify;">
<b>Port <i>n</i> Type:</b> configure o tipo de controle em cada porta do sistema. Em geral, apenas a porta 1 é usada, como gamepad.</div>
<div style="text-align: justify;">
<b>Initial RTC value:</b> não faz diferença e pode ser deixado como está. Apenas um jogo utiliza o chip <a href="https://en.wikipedia.org/wiki/List_of_Super_NES_enhancement_chips#S-RTC" target="_blank">S-RTC</a>.</div>
<div style="text-align: justify;">
<b>Game name:</b> escreva o nome do jogo.</div>
<div style="text-align: justify;">
<b>Save prefix:</b> escreva o prefixo usado nos savestates desse movie. É útil para não misturar com states de outros movies, portando é bom ter um nome único.</div>
<div style="text-align: justify;">
<b>Anchor savestate:</b> estado inicial do sistema. Em geral, deve ficar em branco. Caso queira começar o movie de um snapshot, é preciso salvar um state antes, abri-lo com um compactador de arquivos (7-zip recomendado) e extrair o membro <i>savestate</i>. Usar o arquivo lsmv diretamente irá causar problemas. Ainda não há uma opção de começar o movie "from now", como em outros emuladores.</div>
<div style="text-align: justify;">
<b>SRAM srm:</b> memória duradoura do cartucho. Num TAS oficial, deve ser deixado em branco.</div>
<div style="text-align: justify;">
<b>Authors:</b> deve conter um autor por linha. A parte antes de "<b>|</b>" é o nome real, após o nick. Exemplo:</div>
<div style="text-align: justify;">
<blockquote class="tr_bq">
Clark Kent|Superman<br />
Bruce Wayne|Batman</blockquote>
</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Salvar/carregar states e movies</h2>
<div style="text-align: justify;">
A configuração de hotkeys oferece o meio mais prático de salvar e carregar states numéricos. É possível fazer isso para arquivos quaisquer usando <i>File > Load > State/Movie</i> e <i>File > Save > State/Movie</i>. Além disso, cada state é um movie, pois registra todo o input anterior.</div>
<div style="text-align: justify;">
<br /></div>
<h2 style="text-align: justify;">
Ferramentas</h2>
<h4 style="text-align: justify;">
Lua</h4>
<div style="text-align: justify;">
<a href="http://www.lua.org/portugues.html" target="_blank">Lua</a> é uma linguagem de programação e também o nome do interpretador embutido no emulador, que permite um controle muito maior do usuário sobre o aplicativo. É possível executar um ou mais arquivos Lua, feitos por terceiros. Um tutorial sobre Lua está <a href="http://tasvideos.org/Lsnes/LuaTutorials.html" target="_blank">aqui</a>. O pacote de download oferece um pdf com quase todas as funções disponíveis.</div>
<div style="text-align: justify;">
Para executar um comando Lua através da janela de mensagens, basta digitar <i>L <comando></i> ou <i>evaluate-lua <comando></i>.</div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
Macros</h4>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Macros são ativados através de hotkeys (vide seção hotkeys acima). Um savestate decora se tal macro está ativo ou não. Essa correspondência entre hotkey e macro pode ser feita em <i>Tools > Edit macros</i> e ser salva num arquivo. Cada macro deve possuir um nome e um combo de botões. A sintaxe dos combos é simples:</div>
<ul style="text-align: justify;">
<li>Um botão que não está entre colchetes é injetado sozinho</li>
<li>Uma sequência de botões entre colchetes é injetado de uma vez</li>
<li>Um número após um botão, chave ou colchete indica que o botão ou sequência deverá ser repetido esse número de vezes</li>
</ul>
<div style="text-align: justify;">
Exemplo: <b>(<B)4Ss^2[>A]3</b> <span class="st">→</span> < , B , < , B , < , B , < , B , S , s , ^ , ^ , >A , >A , >A</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A opção <i>enabled</i> serve apenas para permitir que o macro haja.</div>
<div style="text-align: justify;">
A opção <i>Overwrite</i> indica que o combo irá ser o único input levado em conta, ignorando aquilo que o usuário pressiona.</div>
<div style="text-align: justify;">
A opção <i>OR</i> indica que o combo irá se somar ao que o usuário pressionar.</div>
<div style="text-align: justify;">
A opção <i>XOR</i> indica que combo irá se somar ao que o usuário pressionar se, e somente se, determinado botão não está pressionado em ambos.</div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
Memory Watch</h4>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Esta ferramenta permite mostrar ao usuário os valores da memória do jogo ao vivo, seja num painel a parte, seja na tela. Alguns cuidados importantes:</div>
<ul style="text-align: justify;">
<li>a área de memória deve ser especificada (na maioria dos casos deve ser WRAM)</li>
<li>Address pode ser em decimal (exemplo 0015) ou em hexadecimal (0x000F)</li>
<li>Format deve especificar como o valor deve ser mostrado. Deixar em branco mostra em decimal, usar %x mostra em hexadecimal. Outros formatos <a href="http://www.cplusplus.com/reference/cstdio/printf/" target="_blank">aqui</a>.</li>
</ul>
<div style="text-align: justify;">
Caso se opte por mostrar os valores no <i>memory watch</i>, deve-se clicar em <i>Configure > Dedicated memory watch</i> para visualizar.</div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
Memory Search</h4>
<div style="text-align: justify;">
Ferramenta de pesquisa na memória, de natureza eliminatória. Primeiramente, deve-se eliminar áreas de memória indesejáveis, clicando com o botão direito e selecionando <i>Enabled VMAs</i>. Clicar num botão compara cada valor da memória com seu valor durante o clique anterior. Se a comparação é falsa, então o endereço é eliminado. Apenas quando o número de resultados for pequeno, eles aparecem na parte debaixo da janela.</div>
<div style="text-align: justify;">
<br /></div>
<h4 style="text-align: justify;">
Edit movie</h4>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Permite editar o futuro de um movie no modo readonly. Também serve para a edição de <u>branches</u>.</div>
<ul style="text-align: justify;">
<li>O fundo vermelho indica que tal botão já foi computado, não sendo possível sua edição.</li>
<li>Clicar num botão modifica seu status. No caso de um eixo, cria uma janela para a edição de seu valor.</li>
<li>O botão F no início determina se o input seguinte será usado como frame, ao invés de ser usado como subframe. Tenha em mente que praticamente todos os jogos pedem por input apenas uma vez por frame de vídeo, e os subframes são inúteis nessas situações.</li>
<li>O botão R determina se o sistema será resetado logo em seguida, sendo que os números que o seguem determinam em quanto tempo isso ocorrerá.</li>
<li>Ao clicar com o botão direito, várias opções de edição aparecem.</li>
<li>Uma dessas opções é <i>Branches</i>. Um branch é uma ramificação do movie, uma sequência alternativa de inputs. Ao final, apenas um branch será rodado. Só é possível mudar de um branch para outro se ambos possuem um passado idêntico.</li>
</ul>
<div style="text-align: justify;">
<br /></div>
Amaraticandohttp://www.blogger.com/profile/02047790091810775103noreply@blogger.com2tag:blogger.com,1999:blog-7013832104439039332.post-72393992065201865362015-03-24T18:58:00.000-07:002015-03-29T12:00:10.554-07:00Stun Glitch<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;">Stunnar uma sprite, podemos dizer que é meio que transformá-la em outra, porém depende da sprite e de seu slot.</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/Gv4vpUF.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://i.imgur.com/Gv4vpUF.gif" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
</div>
<a name='more'></a><div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;">Primeiramente, você precisa saber sobre o Double-Tongue Glitch. Ele é requerido para fazer o Stun Glitch. O Double-Tongue ocorre quando o Mario solta a língua do Yoshi no momento de uma transformação (Seja pegando um powerup ou transformando o Mario grande em pequeno). Tente primeiro soltar a língua do Yoshi no momento em que você pega um powerup, seja uma Flower, uma Feather ou um Mushroom. Se acertar a frame, a língua do Yoshi irá bugar, e, ao invés de soltar uma língua, ele soltará 2 línguas!</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;">Agora, sabendo desse processo, podemos abusar dele. Para stunnar uma sprite, basta fazer o Double-Tongue Glitch, e, na primeira língua do Yoshi, pegue um item que seja ESTÁVEL na língua do Yoshi, por exemplo, um casco, um p-switch, springboard e etc. Na segunda língua, pegue o sprite que deseja stunnar e faça o Yoshi machucar antes que ele engula a sprite que você quer stunnar. O Yoshi ficará com uma sprite na boca que, ao ser dropada, pode ser uma sprite qualquer dependendo da sprite stunnada. Vamos agora ver uma tabela, que mostra qual sprite é dropada dependendo de qual é stunnada.</span></div>
<div style="text-align: justify;">
<div style="text-align: center;">
<a href="http://pastebin.com/AifjaRPF"><span style="font-family: Times, Times New Roman, serif; font-size: large;">Tabela do Stun Glitch</span></a></div>
</div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;">Mas aí você me pergunta: "E as sprites que não podem ser engolidas pelo Yoshi? Como faço para stunná-las?"</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;">Use um Lua Script para observar o slot (espaço) que está sendo ocupado pela sprite. Após stunná-la, procure a sprite desejada com o mesmo slot, já que os mesmos mudam quando um e você vê outro que estaria nesse slot. Por exemplo: Eu posso fazer o Stun Glitch com um Koopa de slot #07. Se eu saio da visão desse Koopa, outro sprite irá ocupar seu slot, mas apenas se você sair da visão desse sprite e voltar. Eu posso dropar o sprite stunnado apenas na visão de uma plataforma de slot #07!</span></div>
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;">Mas existem sprites que se você stunnar, não aparecerá o sprite desejado. Essas sprites tem um contador, chamado de Stun Timer. Normalmente são sprites que podem ser destruidas com o pé do Yoshi. Um exemplo é o Dino Rino. Se você stunná-lo e spawnar a sprite stunnada, a Keyhole (Resultado do stun de um Dino Rino) não irá aparecer, pois o stun timer está 0! Mas como fazer para ativar o stun timer? Esmague a sprite com o Yoshi e cuspa a sprite bugada antes que a "fumacinha" suma. Enquanto ela dura, o Stun Timer estará maior que zero e assim a Keyhole aparecerá. Apesar do stun timer poder ser ativado com o pé do Yoshi, Bruno Visnadi conseguiu ativar o Stun Timer de um Lakitu apenas girando a capa: <a href="https://www.youtube.com/watch?v=7gE0zT_52yM">Veja o vídeo</a></span></div>
<span style="font-family: Times, Times New Roman, serif; font-size: large;"><br /></span>
<br />
<div style="text-align: center;">
<a href="https://www.youtube.com/watch?v=omI0bFiUjFk"><span style="font-family: Times, Times New Roman, serif; font-size: large;">Demonstração de Stun Glitch</span></a></div>
<span style="font-family: Times, Times New Roman, serif; font-size: large;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-family: Times, Times New Roman, serif; font-size: large;">Nesse vídeo o stun glitch tem duas fases: Na primeira, eu stunno um Yellow Super Koopa para spawnar um Dino Rino. Na segunda fase, eu stunno o Dino Rino para spawnar a Keyhole! Nas fases em que não se tem o sprite desejado, você pode usar outras sprites para "spawná-lo".</span></div>
Anonymoushttp://www.blogger.com/profile/15903251084444851236noreply@blogger.com0tag:blogger.com,1999:blog-7013832104439039332.post-21537620054232878202015-02-20T09:51:00.002-08:002016-09-29T06:05:47.166-07:00Corner Clip<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">O tutorial de hoje é sobre corner clip, se você não faz
ideia do que é corner clip, aqui vai um exemplo:<o:p></o:p></span></div>
</div>
<div class="MsoNormal">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/3CznZ9C.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "times" , "times new roman" , serif; font-size: large;"><img border="0" src="http://i.imgur.com/3CznZ9C.gif" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<a name='more'></a><span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br />
<br />
</span><br />
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">OBS: Não pode ser feito para direita com Mario pequeno.</span></div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
</div>
<div class="MsoNormal">
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">O corner clip consiste basicamente em atravessar blocos, e assim como o walljump, o processo consiste em passar por uma posição específica. Eu irei explicar como fazer apartir desse GIF acima.</span></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">Para realizar um corner clip, é necessário que o Mario atinja uma posição que é referente a posição horizontal do Mario (apenas os pixels, lembrando que essa posição sempre será par) do lado do bloco +2.f (caso esteja indo para a direita) ou -2.0 (caso esteja indo para a esquerda) com a velocidade igual ou maior que 49.</span></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">Mas não é sempre que o Mario atingirá essa posição, por isso é necessário perder subpixels, e para fazer isso é necessário oscilar a velocidade. Primeiramente é necessário saber quantos subpixels é necessário perder, para isso precisamos realizar um calculo simples que é:</span><br />
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">(posição que Mario deve passar) - (posição que Mario passou)</span></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">A posição que o Mario deve passar já foi dita como se obtém, já a posição que Mario passou se obtém indo com velocidade 49 até o bloco, e a primeira posição maior (ou menor se você está indo para esquerda) que a posição que o Mario deve passar.</span></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/Q30xeOJ.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "times" , "times new roman" , serif; font-size: large;"><img border="0" src="http://i.imgur.com/Q30xeOJ.png" height="163" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/YoSCEld.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "times" , "times new roman" , serif; font-size: large;"><img border="0" src="http://i.imgur.com/YoSCEld.png" height="163" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span>
<br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">No caso do exemplo, a posição que o Mario deve passar é 3556.f, mas na hora de fazer o corner clip eu não passei por essa posição, e sim pela posição 3559.a, logo eu precisaria perder 43 subpixels pois:</span></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"></span><br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">3559.a - 3556.f = 43 subpixels</span></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">
</span>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">Foi dito anteriormente que perde subpixels oscilando a velocidade (49 48 47 48 47 49), e cada oscilação perde 6 subpixels, logo para perder 43 subpixels eu preciso fazer 6 oscilações normais uma oscilação perdendo 7 subpixels ao invés de 6, logo a velocidade irá oscilar assim:</span></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"></span><br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">[(49, 48, 47, 48, 47, 49) 6 vezes](49, 48, 48, 47, 48, 47, 49)</span></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">
</span>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">A posição e velocidade vertical são as partes mais fáceis de controlar, você apenas precisa controlar o quão alto vai ser o pulo do Mario, pois é necessário que ele caia dessa forma:</span></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">
</span>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/fnBbxoD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "times" , "times new roman" , serif; font-size: large;"><img border="0" src="http://i.imgur.com/fnBbxoD.png" height="163" width="320" /></span></a></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br />
</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/Rh46W3M.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "times" , "times new roman" , serif; font-size: large;"><img border="0" src="http://i.imgur.com/Rh46W3M.png" height="163" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/73vFAxD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: "times" , "times new roman" , serif; font-size: large;"><img border="0" src="http://i.imgur.com/73vFAxD.png" height="163" width="320" /></span></a></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;">Caso você não saiba calcular quantos subpixels precisa perder <a href="https://www.dropbox.com/s/zg1w45vlh6l4alb/CC.exe?dl=0">clique aqui</a> para baixar um programa que faz isso por você.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: "times" , "times new roman" , serif; font-size: large;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://bin.smwcentral.net/u/24388/CC.lsmv"><span style="font-family: "times" , "times new roman" , serif; font-size: large;">Demonstração</span></a></div>
</div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-7013832104439039332.post-83336058310751601922015-02-19T15:58:00.001-08:002016-09-29T05:59:58.915-07:00Walljump<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: 14.0pt;">Olá
pessoas, esse é um tutorial para aqueles que querem fazer walljump mas nem
sabem por onde começar, esse tutorial tem o intuito de evitar tópicos inúteis
na SMWC como <a href="http://www.smwcentral.net/?p=viewthread&t=75122">esse</a> ou <a href="http://www.smwcentral.net/?p=viewthread&t=75125">esse</a>.<o:p></o:p></span></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/N3QeLun.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://i.imgur.com/N3QeLun.gif" /></a></div>
<br />
<div style="text-align: justify;">
<a name='more'></a><span style="font-family: "times" , "times new roman" , serif; font-size: 18.6666660308838px;"><br /></span></div>
<span style="font-family: "times" , "times new roman" , serif;"></span><br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif;"><span style="font-size: 14pt;">Mas antes, o que a TASVideos diz sobre </span><a href="http://tasvideos.org/GameResources/SNES/SuperMarioWorld.html#Walljumping" style="font-size: 14pt;">walljump</a><span style="font-size: 14pt;">.</span></span></div>
<span style="font-family: "times" , "times new roman" , serif;">
</span>
<br />
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif;"><span style="font-size: 14.0pt;"><br /></span>
</span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<div style="text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: 14.0pt;">TASVideos
diz que:<o:p></o:p></span></div>
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<div style="text-align: justify;">
<i><span style="font-family: "trebuchet ms" , sans-serif;">Walljumping
happens when Mario jumps towards a wall, and his foot catches the wall, stops
his falling speed, and allows him to jump again in mid-air. In order to pull
off a walljump, Mario needs at least a speed of 33 going toward a wall, and
must run into the wall at exactly a block boundary (every 16 pixels). If Mario “catches”
the wall, then conditions are good for a walljump - simply press jump a couple
frames before he snags it.<o:p></o:p></span></i></div>
</div>
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<div style="text-align: justify;">
<i><span style="font-family: "trebuchet ms" , sans-serif;">The
smallest variations in speed and position during the jump onto the wall can
affect whether or not this works correctly. Keep trying!<o:p></o:p></span></i></div>
<div style="text-align: justify;">
<i><span style="font-family: "trebuchet ms" , sans-serif;"><br /></span></i></div>
<div style="margin-bottom: 0.0001pt;">
</div>
<div style="text-align: justify;">
<i><span style="font-family: "trebuchet ms" , sans-serif;">“Walljump
acontece quando Mario pula em direção a uma parede e seus pés agarram a parede,
para sua velocidade de queda e permite que ele pule novamente no meio do ar. A
fim de executar um walljump, Mario precisa de uma velocidade mínima de 33 indo
em direção a parede, e precisa ir na parede na exata divisão de blocos (a cada
16 pixels). Se Mario ‘agarrar’ a parede, então as condições são boas para um
walljump – simplesmente aperte o botão de pulo poucos frames antes dele ‘agarrar’
a parede.</span></i></div>
<span style="font-family: "trebuchet ms" , sans-serif;"><br />
</span><br />
<div style="text-align: justify;">
<span style="font-family: "trebuchet ms" , sans-serif;"><i>As
menores variações na velocidade e posição durante o pulo para a parede pode
pode afetar se isso irá ou não funcionar corretamente. Continue tentando!”</i></span></div>
<span style="font-family: "times" , "times new roman" , serif; font-size: x-small;">
</span>
<br />
<div style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-family: "times" , "times new roman" , serif; font-size: x-small;"><i><br /></i></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;">Agora
irei explicar um pouco mais detalhadamente, o walljump ocorre quando o Mario
pula em direção a parede com velocidade mínima de 33 entre dois blocos de forma
que entre no bloco por 2 pixels ou mais em relação ao lado do bloco, ou seja, não ir entre dois blocos de
qualquer jeito, você precisa ir em certas posições para o walljump ocorrer, neste
exemplo que usarei, eu irei fazer walljump com o Mario a esquerda da parede (indo
para a direita).</span><span style="font-family: "arial" , sans-serif;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: "arial" , sans-serif; font-size: 14.0pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/zJ4h6X7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://i.imgur.com/zJ4h6X7.png" height="164" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;">Repare
que nesta foto há vários números que são informações como velocidade do Mario,
posição do Mario, lados de um bloco etc. Irei mostrar como saber por quais
posições o Mario deve passar para que o walljump ocorra. Eu falei anteriormente
que Mario deve entrar no bloco por 2 pixels ou mais, isso significa que o Mario
deve atingir, no mínimo, dentro do bloco uma posição que é referente ao lado do
bloco +2 (na pratica não ocorre, mas irei explicar isso depois).</span></span><br />
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;"><br /></span></span>
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;">Neste exemplo
o lado esquerdo do bloco é 483.0 (o lado esquerdo de um bloco sempre tem
subpixel “.0” e o lado direito sempre tem subpixel “.f”), logo temos que chegar
a posição 485.0 ou uma posição maior, e para isso precisamos ir em uma posição livre
menor que 483.0 e, dependendo da velocidade há mais possibilidades de posições
que o Mario pode passar para alcançar a posição 485.0 (ou uma posição maior), e para
explicar como isso ocorre eu irei explicar primeiro porque a velocidade mínima é
33, eu disse anteriormente que para fazer walljump é necessário entrar no bloco
por 2 pixels ou mais em relação ao lado do bloco, e nesse exemplo o lado do
bloco é 483.0, logo a posição livre imediatamente menor que 483.0 é 482.f e
usando a matemática:<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;">485.0 –
482.f = 33 subpixels<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;">A partir
disso observa-se que caso a velocidade do Mario seja 33, ele precisa alcançar a
posição 482.f, mas caso a velocidade seja maior, haverá mais possibilidades de
posições, caso a velocidade seja 34 por exemplo, o Mario precisa alcançar a
posição 482.f ou 482.e (caso o Mario alcance a posição 482.e ele entra no bloco
por 2 pixels, caso alcance a posição 482.f ele entra por 2.1 pixels), caso a
velocidade seja 35 ele precisa alcançar as posições 482.f ou 482.e ou 482.d e
assim por diante.<o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;"><br /></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;">No caso
do exemplo, eu estava com velocidade 49, logo para eu fazer walljump eu tenho
que ir numa das posições que vão de 481.f a 482.f (são 16 possibilidades de
posições).<o:p></o:p></span></span><br />
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;"><br /></span></span>
<span style="font-family: "times" , "times new roman" , serif;"><span style="font-size: 18.6666660308838px;">485(pixels) - 49(subpixels) = 481.f</span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;"><br /></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt; text-align: justify;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;">Neste
caso eu passei pela posição 482.d e após isso, dentro do bloco, eu passei pela
posição 484.e, mas de acordo com a matemática deveria ser 485.e, porém o Mario
é imediatamente empurrado para fora da parede por 1 pixel.</span><span style="font-family: "arial" , sans-serif;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: "arial" , sans-serif; font-size: 14.0pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/n7DZybj.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://i.imgur.com/n7DZybj.png" height="164" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/XaIFuAX.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://i.imgur.com/XaIFuAX.png" height="164" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-size: 14pt;"><span style="font-family: "times" , "times new roman" , serif;">Caso você
alcance a posição certa de acordo com a sua velocidade, ele irá ficar de pé na
parede, então basta apertar o botão de pulo poucos frames antes dele ficar de
pé na parede (NÃO ESQUEÇA DE USAR FRAME ADVANCE E SAVE STATE!!).</span><span style="font-family: "arial" , sans-serif;"><o:p></o:p></span></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: "arial" , sans-serif; font-size: 14.0pt;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/t9cKUeP.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://i.imgur.com/t9cKUeP.png" height="164" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://tasvideos.org/userfiles/info/20918610100958774">Demonstração</a></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: "arial" , sans-serif; font-size: 14.0pt;"><br /></span></div>
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<span style="font-family: "arial" , sans-serif; font-size: 14.0pt;"><br /></span></div>
</div>
</div>
<div align="center">
<script src="http://www.counter12.com/ad.js?id=56xxAx3Z" type="text/javascript"></script></div>
Unknownnoreply@blogger.com1