[SMS] Hang-On

Iniciado por GabrielTPrado, Agosto 31, 2026, 20:45:57 PM

tópico anterior - próximo tópico

0 Membros e 1 Visitante estão vendo este tópico.

GabrielTPrado


INFORMAÇÕES

Nome: Hang-On
Desenvolvedor: SEGA
Gênero: Corrida
Lançamento: 1985
Console: Master System

CREDITOS

Tradução: Gabriel Teixeira
Ferramenta Utilizada: WindHex32, TableManager, Mmoore

PROGRESSO DA TRADUÇÃO

Menus: 100%
Textos: 100%
Textos da Tela: 0%


OBSERVAÇÕES

● Patch deve ser aplicado na versão (Europe) do jogo original

● Não consegui traduzir esses ícones na tela de Jogo "Score", "Speed" etc. Caso alguém saiba e quiser me indicar algum editor para isso eu faço a tradução dessas palavras, fora isso todos os demais textos estão traduzidos.

SOBRE O JOGO

● Hang-On é um classico dos Arcades e posteriormente portado para consoles como Mega Drive, Master System que é basicamente um jogo de corrida que você disputa as fases contra o tempo afim de fazer a maior pontuação possível.

● É um jogo bem simples nos dias de hoje, mas que rende alguns momentos de diversão.



ØX-Carnage

Boa mano esse jogo é muito legal.
É só essas frases do HUD que você não conseguiu achar, ou tem mais coisas como grafios também?

jairisongs

"Quanto mais me elevo, menor eu pareço aos olhos de quem não sabe voar..."
Friedrich Nietzsche

GabrielTPrado

Citação de: ØX-Carnage online Setembro 01, 2026, 13:31:41 PMBoa mano esse jogo é muito legal.
É só essas frases do HUD que você não conseguiu achar, ou tem mais coisas como grafios também?

Somente essas frases no Hud no demais tudo foi traduzido.

ØX-Carnage

#4
Citação de: GabrielTPrado online Setembro 01, 2026, 18:08:05 PM
Citação de: ØX-Carnage online Setembro 01, 2026, 13:31:41 PMBoa mano esse jogo é muito legal.
É só essas frases do HUD que você não conseguiu achar, ou tem mais coisas como grafios também?

Somente essas frases no Hud no demais tudo foi traduzido.
Bom vi que também não acentuou as fontes. Mas veja se isso ajuda



1. O que realmente acontece com os textos do HUD?

À primeira vista parece que palavras como:

  • SCORE
  • SPEED
  • COURSE
  • LEFT
  • LOW
  • TOP

não existem como ASCII dentro da ROM.

Isso é parcialmente verdade.

As letras que aparecem na tela são tiles gráficos de 8x8 pixels, mas o jogo possui uma pequena tabela de HUD que diz quais tiles devem ser colocados em cada posição.

O interessante é que, para as letras normais, o número do tile foi feito para coincidir com o código ASCII.

Exemplo:

A = 41
B = 42
C = 43
...
L = 4C
O = 4F
P = 50
R = 52
S = 53
T = 54
U = 55
V = 56
...
Z = 5A
espaço = 20

Porém, cada caractere ocupa DOIS bytes no HUD.

O segundo byte normalmente é 09.

Por isso "SCORE" não aparece na ROM desta maneira:

53 43 4F 52 45

Ele aparece assim:

53 09 43 09 4F 09 52 09 45 09
 S    C    O    R    E

O byte 09 é o atributo do tile usado pelo Master System.

Não altere os 09.

Na maioria das traduções basta modificar somente o primeiro byte de cada par.



2. Ferramenta mais simples

Para essas palavras pode ser usado somente um editor hexadecimal, por exemplo o HxD.

Passos:

  • Abra uma cópia da ROM no HxD.
  • Use "Pesquisar > Localizar".
  • Escolha pesquisa por "Valores hexadecimais".
  • Procure uma das sequências indicadas abaixo.
  • Altere os bytes diretamente, sempre em modo Overwrite/Sobrescrever.
  • Nunca insira bytes novos no arquivo.
  • Salve com outro nome e teste no emulador.



3. Endereços exatos do HUD na ROM

A tabela usada para as duas linhas superiores do HUD começa aproximadamente em:

ROM: $08D9

O jogo copia essa tabela para o tilemap do VDP.

As palavras que interessam estão nestes offsets:

SCORE

Offset:
$08DB

Bytes originais:
53 09 43 09 4F 09 52 09 45 09
 S    C    O    R    E

A pesquisa por:
53 09 43 09 4F 09 52 09 45 09

leva diretamente para o lugar correto nesta ROM.

COURSE

Offset:
$0903

Bytes:
43 09 4F 09 55 09 52 09 53 09 45 09
 C    O    U    R    S    E

SPEED

Offset:
$091B

Bytes:
53 09 50 09 45 09 45 09 44 09
 S    P    E    E    D

LEFT

Offset:
$0943

Bytes:
4C 09 45 09 46 09 54 09
 L    E    F    T

Essas quatro sequências aparecem de forma única na ROM Europe CRC32 071B045E.



4. Exemplo prático de tradução

Por exemplo, para trocar:

COURSE -> FASE

COURSE possui espaço para 6 caracteres.

Original:
43 09 4F 09 55 09 52 09 53 09 45 09
 C    O    U    R    S    E

Pode ser substituído por:
46 09 41 09 53 09 45 09 20 09 20 09
 F    A    S    E    espaço espaço

Portanto não é preciso desenhar "FASE" como gráfico.

O jogo já possui os tiles:

F = 46
A = 41
S = 53
E = 45


--------------------------------------------------

Outro exemplo:

SPEED -> VELOC

Original:
53 09 50 09 45 09 45 09 44 09

Novo:
56 09 45 09 4C 09 4F 09 43 09
 V    E    L    O    C

Existe ainda um espaço depois desse campo antes dos números da velocidade.

--------------------------------------------------

Para SCORE, uma tradução de 5 caracteres pode ser feita sem mexer no código.

Exemplo:

SCORE -> PONTO
50 09 4F 09 4E 09 54 09 4F 09
 P    O    N    T    O

Se for obrigatório usar PONTOS com 6 caracteres, veja a seção mais abaixo, pois é preciso mover o placar numérico um tile para a direita.

--------------------------------------------------

Para LEFT, uma abreviação de 4 caracteres também é simples.

Exemplo:

LEFT -> FALT

Bytes:
46 09 41 09 4C 09 54 09
 F    A    L    T

Também é possível usar FALTA, mas existe um pequeno ajuste adicional explicado abaixo.



5. LOW e TOP são diferentes

Aqui existe uma exceção importante.

LOW e TOP NÃO são montados usando três letras normais.

O programador desenhou cada palavra comprimida em apenas dois tiles de 8x8.

Ou seja:
LOW = tiles $16C + $16D
TOP = tiles $16E + $16F

Na tabela do HUD aparecem somente os números baixos desses tiles.

LOW

Offset:
$08FD

Original:
6C 09 6D 09

TOP

Offset:
$093D

Original:
6E 09 6F 09

Isso explica por que procurar:
  • LOW
  • TOP

em ASCII não encontra nada.



6. Forma fácil de traduzir LOW/TOP

Como existem dois espaços de tile para cada palavra, a solução mais simples é usar abreviações de duas letras.

Por exemplo:

LOW -> BX (Baixa)

Trocar em $08FD:
6C 09 6D 09

por:
42 09 58 09
 B    X

E:

TOP -> AL (Alta)

Trocar em $093D:
6E 09 6F 09

por:
41 09 4C 09
 A    L

Dessa forma não é necessário mexer na compressão gráfica.

Será usada a mesma fonte normal do HUD.



7. Se quiser manter LOW/TOP como gráficos personalizados

Se a intenção for desenhar algo especial no mesmo estilo compacto do original, aí é necessário mexer nos gráficos.

Na versão analisada, o bloco que contém:

  • estrada
  • fonte
  • HUD
  • nuvens
  • montanhas

está comprimido na ROM em:

$3F00 - $4E1F

Tamanho comprimido reservado:
  • $0F20 bytes
  • 3872 bytes

IMPORTANTE:

Não tente abrir diretamente $3F00 no Tile Molester ou YY-CHR esperando enxergar as letras.

O conteúdo está comprimido.

Depois de descomprimido, esse bloco possui:
$1900 bytes
6400 bytes
200 tiles


Ele corresponde aos tiles:
$100 até $1C7

Cada tile do Master System ocupa:
32 bytes

Os gráficos especiais de LOW/TOP ficam nestes offsets dentro do ARQUIVO DESCOMPRIMIDO:

  • Tile $16C = $0D80-$0D9F
  • Tile $16D = $0DA0-$0DBF
  • Tile $16E = $0DC0-$0DDF
  • Tile $16F = $0DE0-$0DFF

Portanto:
$16C + $16D = LOW
$16E + $16F = TOP


O procedimento avançado é:

  • Extrair $3F00-$4E1F da ROM.
  • Descomprimir o bloco usando o formato usado pelo jogo.
  • Abrir os 6400 bytes resultantes como gráficos 4bpp do Master System.
  • Editar somente os tiles $16C-$16F.
  • Recomprimir.
  • Reinserir em $3F00.

O arquivo recomprimido não pode ultrapassar 3872 bytes, porque em $4E20 já começa outro bloco de dados do jogo. Cao passe é necessario expandir para o final da rom.



8. Caso seja obrigatório usar PONTOS

O campo original SCORE possui 5 tiles.

É possível usar 6 letras porque existe um tile imediatamente ao lado, mas o número do placar começa ali durante o jogo.

Por isso é necessário mover o placar numérico um tile para a direita.

Primeiro escreva PONTOS começando em $08DB:

50 09 4F 09 4E 09 54 09 4F 09 53 09
 P    O    N    T    O    S

Depois vá ao offset:
$3599

Original:
0E

Troque por:
10

Isso altera no código:
VRAM $780E
    ↓
VRAM $7810

Ou seja, os seis dígitos do placar são deslocados 1 tile para a direita.

Eles continuam cabendo antes do gráfico seguinte do HUD.

Portanto, para PONTOS:
$08DB = escrever PONTOS
$3599 = 0E -> 10




9. Caso seja obrigatório usar FALTA

Também é possível usar cinco letras.

Em $0943 escreva:
46 09 41 09 4C 09 54 09 41 09
 F    A    L    T    A

Para manter um espaço entre FALTA e o número, podemos deslocar o contador de distância um tile para a direita.

No offset:
$370C

troque:
76

por:
78

Isso muda:
VRAM $7876
    ↓
VRAM $7878

Também troque o placeholder existente em:
$094D

de:
30

para:
20

Assim aquele tile passa de "0" para espaço.

Resultado lógico:
FALTA 3.86

em vez de:
LEFT 3.86

Os quatro caracteres do valor X.YY continuam cabendo até o final da linha.



10. Resumo dos offsets importantes

HUD/TILEMAP
-----------------------------
  • SCORE      $08DB
  • LOW        $08FD
  • COURSE     $0903
  • SPEED      $091B
  • TOP        $093D
  • LEFT       $0943

Código para mover SCORE
-----------------------------
$3599
0E -> 10
necessário se usar PONTOS

Código para mover distância
-----------------------------
$370C
76 -> 78
útil se usar FALTA com espaço

Gráficos comprimidos
-----------------------------
$3F00-$4E1F

LOW/TOP após descompressão
-----------------------------
$16C -> $0D80
$16D -> $0DA0
$16E -> $0DC0
$16F -> $0DE0



Conclusão

Para SCORE, SPEED, COURSE e LEFT não é necessário redesenhar a fonte nem descomprimir gráficos.

O método mais simples é editar diretamente a tabela de tiles no editor.


Já LOW e TOP são gráficos compactados em dois tiles cada. Mesmo assim, é possível substituí-los facilmente, sem tocar na compressão.

RodrigoF.

#5
:cuteeyes:

Que aula hein, muito obrigado por compartilhar esse conhecimento. :torico:

Tenho uma tradução parada de GBA por causa desse mesmo problema, acredito eu. Os textos dos diálogos eu tabelei perfeitamente. Agora dos menus e "huds" teria que desvendar como são armazenados, não é possível encontra-los através da busca relativa.

Moderação: Por favor, não mencione aquele post todo.

ØX-Carnage

#6
Citação de: RodrigoF. online Setembro 02, 2026, 23:54:50 PM:cuteeyes:

Que aula hein, muito obrigado por compartilhar esse conhecimento. :torico:

Tenho uma tradução parada de GBA por causa desse mesmo problema, acredito eu. Os textos dos diálogos eu tabelei perfeitamente. Agora dos menus e "huds" teria que desvendar como são armazenados, não é possível encontra-los através da busca relativa.
Qual jogo?
Abre um topico lá na sessão de ajuda e posta as informações, se tiver save do local ajuda também. Quem sabe não posso ajudar nesse também.