[SMS] Aprendendo Rom-Hacking com Ultima IV - Quest of the Avatar.

Iniciado por eulondon, Novembro 11, 2020, 04:11:31 AM

tópico anterior - próximo tópico

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

eulondon

Estou aprendendo a traduzir in live no youtube!
Graças ao ótimo tutorial de Anime_World

E sim graças ao ano super estranho que tivemos não deu de comprar um xbox e ainda tive que vender o que tinha :-|
Então ao invés de ficar vendo unboxings resolvi me ocupar com algo mais útil.

O Jogo     >>> Ultima IV Quest of the Avatar
Plataforma >>> Sega Master System.

Caso alguém queira acompanhar e aprender junto será bem vindo.
Não espere eficiência pois nunca traduzi nada, mas já morei em Londres oito anos e isso me deu confiança em iniciar este projeto, afinal gostaria de deixar minha contribuição, pois quando não sabia inglês lembro de baixar minha primeira tradução no geocities do evil's gambit lair não lembro se era Dragon Quest ou Breath of fire ou Chrono Trigger.
Desde os tempos antigos tenho sido um usuário esporádico de traduções.
Esse jogo me pareceu dentro das minhas capacidades de programação e com um pouco de esforço talvez eu termine isso um dia.

Porém como nunca joguei nenhum Ultima por mais de 30 minutos, caso alguém queira dar pitacos será bem vindo. Principalmente porque sou péssimo em português e por esse jogo ter um inglês meio Shakespeariano/Renascentista/Formal - vide https://www.youtube.com/watch?v=2cGT1wfRfr4

O script encontra-se no Gamefaqs.
https://gamefaqs.gamespot.com/sms/588164-ultima-iv-quest-of-the-avatar/faqs/57997

Youtube ou Google Pesquise
eulondon youtube ultima iv

https://www.youtube.com/channel/UC0smIJIKcUYuDH6cUl8XecQ

Até lá.



[spoiler][/spoiler]

Já houve uma tentativa por "emuman" mas parece que foi abandonada pois não achei quase nada à respeito exceto 6 posts no fórum da smspower.

Ps. Moderadores - Tendo em vista que meu objetivo é a aprendizagem conjunta, achei mais apropriado postar na seção Tutoriais, apesar de não deixar de ser um projeto. Lamento se cometi um engano.


Um dia irei traduzir algo para retribuir.

Anime_World

Fico contente que os tutoriais estejam sendo úteis para formar uma nova geração de romhackers.
nonononono

kuroi

Olha só que iniciativa legal! Dá um toque aí que na próxima Live vou bater o cartão, hein!

Até mais!!
君の夢が叶うのは誰かの影じゃないぜ。
風の強い日を選んで走ってきた。

eulondon

Geralmente depois da novela das nove. Mas se durante o dia o barulho aqui em casa diminui um pouco eu faço também entra lá e ativa o sininho para para receber todas as notificações quando eu entro.
Nossa parece até que eu sou famoso, com frase pronta. kkkk

Um dia irei traduzir algo para retribuir.

Anime_World

#4
Citação de: eulondon online Novembro 14, 2020, 08:04:48 AM
Geralmente depois da novela das nove. Mas se durante o dia o barulho aqui em casa diminui um pouco eu faço também entra lá e ativa o sininho para para receber todas as notificações quando eu entro.
Nossa parece até que eu sou famoso, com frase pronta. kkkk

Mexi aqui e mapeei a estrutura do bloco de menus:

arch sms.cpu
endian lsb

origin $00000000
insert "ultimaIV.sms"
output "ultimaIV_br.sms" ,create

constant ENDSTRING($00)
constant ENDBLOCK($FF)

macro LINE(NO) {
    db $13, ({NO}*2)


// Header
origin $7FF0
db "TMR SEGA"
db $FF,$FF ; RESERVED
db $AA,$42 ; CHECKSUM
db %00000001, %10010101, %00000000                      ; PRODUCT CODE; bit 4-24
; VERSION; bit 0-4
db %01000000 ; REGION; bit 4-8
; ROM SIZE; bit 0-4 (0=256kb 1=512kb)

// Instruções Z80
origin $8032
    ld hl, ponteiros_menu_1
origin $865E
    ld hl, ponteiros_menu_2
origin $8961
    ld hl, ponteiros_menu_3
origin $8B47
    ld hl, ponteiros_menu_4
origin $9273
    ld hl, ponteiros_menu_5


// Tabela de Ponteiros
origin $9582
ponteiros_menu_1:
dw menu_talk
dw menu_attack
dw menu_magic
dw menu_getchest
dw menu_use
dw menu_ready
dw menu_search
dw menu_camp

// Conteúdo do Menu
db LINE(1)
menu_talk:
db "Talk", ENDSTRING
db LINE(2)
menu_attack:
db "Attack", ENDSTRING
db LINE(3)
menu_magic:
db "Magic", ENDSTRING
db LINE(4)
menu_getchest:
db "Get Chest", ENDSTRING
db LINE(5)
menu_use:
db "Use", ENDSTRING
db LINE(6)
menu_ready:
db "Ready", ENDSTRING
db LINE(7)
menu_search:
db "Search", ENDSTRING
db LINE(8)
menu_camp:
db "Camp", ENDSTRING, ENDBLOCK


// Tabela de Ponteiros
origin $95D5
ponteiros_menu_2:
dw menu_castspell
dw menu_mixreagents

// Conteúdo do Menu
db LINE(1)
menu_castspell:
db "Cast Spell", ENDSTRING
db LINE(2)
menu_mixreagents:
db "Mix Reagents", ENDSTRING, ENDBLOCK


// Tabela de Ponteiros
origin $95F6
ponteiros_menu_3:
dw menu_equipments
dw menu_items

db LINE(1)
menu_equipments:
db "Equipment", ENDSTRING
db LINE(2)
menu_items:
db "Items", ENDSTRING, ENDBLOCK

// Tabela de Ponteiros
origin $960F
ponteiros_menu_4:
dw menu_weapon
dw menu_armour

// Conteúdo do Menu
db LINE(1)
menu_weapon:
db "Weapon", ENDSTRING
db LINE(2)
menu_armour:
db "Armour", ENDSTRING, ENDBLOCK

// Tabela de Ponteiros
origin $9626
ponteiros_menu_5:
dw menu_rest
dw menu_neworder
dw menu_status
dw menu_save

// Conteúdo do Menu
db LINE(1)
menu_rest:
db "Rest", ENDSTRING
db LINE(2)
menu_neworder:
db "New Order", ENDSTRING
db LINE(3)
menu_status:
db "Status", ENDSTRING
db LINE(4)
menu_save:
db "Save", ENDSTRING, ENDBLOCK


Realmente não existe calculo nos ponteiros, o problema é relacionado ao mapeamento do banco.
Como o menu reside no banco 2, precisa encontrar a instrução pra troca-lo para outro banco com espaço.
Outra coisa interessante é que existe um byte de controle para a linha na tela a ser escrita.
nonononono