2012/12/08

Starting a Super Mario World TAS: informations, techniques, glitches and useful links

Versão em português aqui...

This article presupposes that the reader has some knowledge of what Tool-Assisted Speedrun is, how to make it in a general way and some of the basic programs. For more information, read the tutorials at TASVideos. Furthermore, we assume that the reader is able to perform the basic features of the emulator Snes9x, spacially version 1.43, in which the Lua Scripts will work.
Now, we are gonna show a set of useful links, with a brief description about them.

Lua Scripts:

TASers: Just some of them...

2012/11/21

Interação entre o Mario e um bloco sólido (hitbox)

 

Para que você não se perca nessa postagem, é recomendado usar o Script de Utilidade, para poder visualizar a cada frame, a posição horizontal e vertical de Mario. Durante o jogo, nenhum outro "objeto" vai interagir mais com o personagem do que os blocos sólidos, que constituem o chão, o teto e a parede que, a princípio, não podem ser atravessadas.

É muito bem sabido que o piso, as paredes e o teto do jogo se comportam como se fossem todos feitos a partir de um monte de blocos sólidos de cimento, que aparece no topo da postagem. Ainda que o design seja diferente e aparente ser contínuo, a mecânica do jogo segue invariável, a menos que edições mais profundas sejam feitas.

A fim de analisar a interação, vamos montar um cenário em que haja apenas um bloco e que Mario esteja pequeno. Se ele estivesse grande ou montado no Yoshi, os resultados seriam diferentes. Se ele estiver encolhido (como quando se aperta para 'baixo'), os resultados serão idênticos. Assim, consideraremos as coordenadas (x,y) do Mario, como se ele fosse um ponto material e veremos quando ele estará em contato com o bloco.

Topo:
Vemos que y oscilará seus subpixel, mas manterá seu valor na casa dos 320. No intervalo de 421.0 até 442.F, o Mario não irá cair do bloco. Entretanto, qualquer movimento para fora o fará cair.

 
Lados:
A lateral esquerda é limitada por x = 419.0. Qualquer valor menor que esse não restringirá o movimento do Mario. Mas, na figura à esquerda, se ele se movesse sequer um subpixel para a direita, haveria uma interação com o bloco e sua posição seria de 418.0, ao invés de 419.0.
Na figura da esquerda a situação é similar. Ir um subpixel para a esquerda iria fazer Mario ir de x = 445.0 para x = 444.F, caso não houvesse bloco. Mas como há, tal posição iria ser imediatamente transferida um pixel para a direita, ou seja, para 445.F.


Base: 
Colocando Mario embaixo do bloco e pulando, veremos que ele jamais irá obter um y < 351.0 (lembre-se, o eixo do y está virado de cabeça para baixo, altos valores de y significam que Mario está mais para baixo). Além disso, somente para y na casa dos 351 pixels, não importando os subpixels, é que ele baterá a cabeça no teto e passará de uma velocidade vertical negativa (subindo) para uma positiva (caindo).


Vértices:
A mera observação da figura nos revela algo interessante. A interação não é semelhante a uma interação entre um ponto e um retângulo. No intervalo horizontal [419.0 , 420.F], Mario não poderia estar em cima do bloco e cairia, mas também seria empurrado para fora. O mesmo se pode dizer a respeito do intervalo [443.0 , 444.F]. Tais "buracos" nas partes superiores são a chave para se realizar a técnica corner clip.

A parte da base tem "buracos" ainda maiores, conforme nos mostram as ilustrações abaixo.




O teto não existe no intervalo horizontal [419.0 , 423.F]; também não existe em [440.0 , 444.F]. Entretanto, nesses intervalos há paredes que expulsam o Mario pra fora. Mas, como vemos no "buraco" de baixo na esquerda, a parede só age para y < 346.0.

Resumo:
Nessas condições, eu fiz um esquema aproximado de como é o formato real de um bloco, lembrando que o Mario é pequeno e tratado como um ponto no plano cartesiano:





  • A interação é calculada a cada frame e depende apenas da posições horizontais e verticais do Mario e do bloco (em pixels). Subpixels são irrelevantes no procedimento.
  • O bloco tem "buracos" em cima e em baixo. O comprimento horizontal dos de cima são de 2 pixels; dos de baixo são de 5 pixels.
  • As paredes empurram o Mario para fora numa taxa de 1 pixel por frame. Isso será útil na hora de entrar temporariamente dentro da parede.
  • O topo e a base funcionam de maneira diferente, pois "expulsam" Mario imediatamente, não a 1 pixel por frame.
  • Outros blocos do jogo têm o mesmo comportamento. Até mesmo este:

2012/09/17

Começando um TAS de Super Mario World: informações, técnicas, glitches e links úteis

English version here...

Este artigo pressupõe que o leitor já tenha conhecimentos sobre o que é um Tool-Assisted Speedrun, como fazê-lo de uma maneira genérica e quais são os programas necessários. Para mais informações, leia os tutoriais do TASVideos. Além disso, presume-se que o leitor esteja utilizando o emulador Snes9x, especialmente a versão 1.43, onde os Lua Scripts rodarão.

Agora, mostraremos uma sequências de sites úteis, com uma breve descrição sobre eles.

  • http://tasvideos.org/GameResources/SNES/SuperMarioWorld.htm
    Página que é atualizada de tempos em tempos e que contém informação necessária para entender a maioria dos movies já publicados. Ela pressupõe que o jogador nada saiba sobre os detalhes técnicos do jogo, apenas que tenha familiaridade com o mesmo, que saiba jogá-lo no console. Alguns bugs são mal explicados e muitos são omitidos, especialmente aqueles que só são necessários em hacks ou que salvam pouco tempo. Entretanto, é uma boa maneira de se começar. Como SMW tem muitos bugs, é necessário mais que uma página html para explicá-los com detalhes.

  • http://www.smwcentral.net/?p=viewthread&t=30450
    Tópico no fórum do smwcentral que se dedica a ensinar vários truques e falhas da programação do jogo. Muitos glitches, mas pouca explicação para cada um deles. É recomendado para quem já conhece um pouco mais do jogo.

  • http://tasvideos.org/forum/viewtopic.php?t=1571
    Tópico no fórum do TASvideos, onde os foristas e jogadores discutem e expõem técnicas, descobertas, etc. Por ser um tópico com muitas páginas, eu farei uma filtragem com as postagens mais importantes...
     
  • http://www.smwiki.net/wiki/Main_Page
    Uma enciclopédia wiki muito útil para quem quer fazer hacks e também para quem quer competir em SMW. Digite o nome do objeto/assunto a ser pesquisado (e.g., Key ou Pokey) e boa sorte.
     
  • Uma lista que contém 100% dos endereços na memória RAM do jogo. Muito útil para se investigar o jogo mais a fundo. Os endereços mais úteis estão listados no primeiro link

    EndereçoSignificado
    7E007B (1-byte signed)Velocidade Horizontal
    7E007D (1-byte signed)Velocidade Vertical
    7E0094 (2-byte)Posição Horizontal
    7E13DA (1-byte)Sub-pixel Horizontal
    7E0096 (2-byte)Posição Vertical
    7E13DC (1-byte)Sub-pixel Vertical
    7E13E4 (1-byte)P-meter
    7E149F (1-byte)Takeoff Meter (para voar)
    7E01F2 (1-byte)Indicador de Lag no level
    7E0F34 (2-byte)Score (pontuação)
    7E0019 (1-byte)Powerup Status
    7E0076 (1-byte)Direção do Movimento
    7E14AD (1-byte)Cronômetro do P-Switch Azul
    7E14AE (1-byte)Cronômetro do P-SwitchCinza
    7E186B (1-byte)Cronômetro do Bloco com Várias Moedas
    7E190C (1-byte)Cronômetro das Moedas Direcionais
    7E1891 (1-byte)Cronômetro do Balão
    7E1490 (1-byte)Cronômetro da Estrela
    7E1497 (1-byte)Cronômetro de Invisibilidade do Mario (após se ferir)

  • http://www.smwcentral.net/?p=map&type=rom
    Umas lista que contém boa parte dos endereços da memória ROM do jogo. Se você quiser entender como o jogo executa suas mais variadas rotinas, é preciso ler essa página. Obviamente, não é exibido um código fonte do jogo, apenas breves descrições de como algumas porções de código se comportam. Partes do jogo que já foram "desmontadas" estão constadas no site smwcentral, mas esse é um tópico mais avançado no qual eu não tenho familiaridade.

  • http://code.google.com/p/smw-tas/source/browse/
    Navegue através dos diretórios para ter acesso a arquivos smv, projetos e Lua Scripts. Atualmente, os wips (work in progress, ou seja, partes parciais do TAS em construção) de SMW (96 saídas) e SMW (apenas pequeno) estão sendo colocados no site.
     
  • http://deanyd.net/smw/index.php?title=Main_Page
    Enciclopédia wiki mais apropriada para quem quer fazer speedrun no jogo, embora seja útil para TAS.
     
  • http://www.smwcentral.net/?p=viewforum&f=69
    Sub-fórum do site smwcentral sobre Kaizo hacks. Como o site não aceita oficialmente Kaizo hacks, este é o local adequado para ver novas hacks... É útil checar estes tópicos [1][2].

Lua Scripts:

TASers: Como existem muitos TASers, vou incluir aqui aqueles que eu conheço e que têm algum trabalho feito fora do youtube. Para conhecer os outros, basta ver em quem os primeiros estão inscritos. Sinta-se livre para indicar novos TASers/link nos comentários.

2012/09/12

A first post on the blog SMW-TAS

My name is Amaraticando and I play and TAS Super Mario World and some hacks of this game. If you don't know what "TAS" stands for, please take a look at those sites:

The objective of this blog is to expose, to research and to discuss the science, art and techniques concerning SMW. The main kind of hack that I will consider are the pit hacks, the extreme difficult ones that can't be completed without emulator and some good knowledge of the game.
I'm not a fluent english speaker, so you are going to forgive me (and correct me, if you want so) for any casual mistake. I don't know yet whether I will always write in english, in portuguese or in both languages, it depends on who will frequent the blog... Feel free to use the comments, without being disrespectful.

--------

Meu nome é Amaraticando e eu jogo e "TASso" Super Mario World, e algumas hacks desse jogo. Se você não sabe o que é "TAS", então dê uma olhada nestes sites:

O objetivo desse blog é expor, pesquisar e discutir a ciência, arte e técnicas que dizem respeito a SMW. O tipo principal de hack que me interessa são as pit hacks, aquelas extremamente difíceis, que não podem ser completadas sem emulador e um bom conhecimento do jogo.
Eu não falo inglês fluentemente, portanto alguns erros serão inevitáveis. Eu não sei ainda se eu escreverei sempre em inglês, ou em português ou ambos, isso depende de quem vai frequentar o blog...

---