Skip to content

Ferramenta para auxilar edição de fonte do jogo Monkey Island

License

Notifications You must be signed in to change notification settings

dbonates/Monkey-Island-Font-Tool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Monkey Island Font Tool

Python License Platform

Ferramenta para auxilar edição de fonte do jogo Monkey Island (e outros jogos ScummVM).

✨ Funcionalidades

  • Extração: Extrai fontes SCUMM diretamente para BMP em um único comando
  • Importação: Aplica BMPs editados de volta no jogo 🆕
  • Compatibilidade pixel-perfect: Saída idêntica ao scummfont C++ original
  • Suporte a 24 jogos: Monkey Island, Loom, Day of the Tentacle, Sam & Max, e mais

📦 Arquivos Necessários

Para usar standalone, copie apenas 3 arquivos:

scumm_games.py         # Definições dos jogos
scummfont.py          # Manipulação de fontes
mi_font_tool.py # Script principal

🚀 Uso Rápido

Exportar (Extrair) Fonte

# Listar fontes disponíveis
./mi_font_tool.py -g monkeycd -o font.bmp

# Extrair primeira fonte (índice 0)
./mi_font_tool.py -g monkeycd -o font.bmp -c 0

# Extrair segunda fonte (índice 1)
./mi_font_tool.py -g monkeycd -o font.bmp -c 1

Importar (Aplicar) Fonte Editada 🆕

# Aplicar BMP editado de volta no jogo
./mi_font_tool.py -g monkeycd -i font_editado.bmp -c 0

⚠️ IMPORTANTE: Um backup (.bak) é criado automaticamente antes de modificar os arquivos do jogo.

📖 Workflow Completo: Editar uma Fonte

# 1. Extrair fonte do jogo
./mi_font_tool.py -g monkeycd -o monkey_font.bmp -c 1

# 2. Editar monkey_font.bmp em um editor de imagens
#    (Photoshop, GIMP, Aseprite, etc.)
#    IMPORTANTE: Não modifique a paleta!

# 3. Aplicar fonte editada no jogo
./mi_font_tool.py -g monkeycd -i monkey_font.bmp -c 1

# 4. Testar o jogo com ScummVM
scummvm

🎮 Exemplos por Jogo

Monkey Island CD

# Extrair
./mi_font_tool.py -g monkeycd -o mi1.bmp -c 1

# Editar mi1.bmp...

# Importar
./mi_font_tool.py -g monkeycd -i mi1.bmp -c 1

Monkey Island 2

./mi_font_tool.py -g monkey2 -o mi2.bmp -c 0
./mi_font_tool.py -g monkey2 -i mi2_modified.bmp -c 0

Day of the Tentacle

./mi_font_tool.py -g tentacle -o dott.bmp -c 0
./mi_font_tool.py -g tentacle -i dott_modified.bmp -c 0

Sam & Max

./mi_font_tool.py -g samnmax -o sam.bmp -c 0
./mi_font_tool.py -g samnmax -i sam_modified.bmp -c 0

Listar Todos os Jogos

./mi_font_tool.py -L

🎯 Opções Completas

-g, --game-id       ID do jogo (obrigatório)
-p, --game-dir      Diretório do jogo (padrão: .)
-o, --output        EXPORTAR: arquivo BMP de saída
-i, --import-bmp    IMPORTAR: arquivo BMP editado 🆕
-c, --char-index    Índice da fonte (0, 1, 2...)
-k, --keep-dump     Manter dump temporário (debug)
-v, --verbose       Modo verbose
-L, --list-games    Listar jogos suportados

🖼️ Editando Fontes

Editores Recomendados

  1. GIMP (Recomendado)

    • Abra o BMP
    • Edite com Lápis/Pincel
    • Exportar Como > BMP
    • ⚠️ IMPORTANTE: Desmarque "Escrever informações de espaço de cores"
  2. Aseprite

    • Suporte nativo para paletas indexadas
    • Perfeito para pixel art
  3. Paint (Windows XP/7)

    • Simples e funciona perfeitamente
    • Paint moderno (Windows 10+) pode não preservar paleta

⚠️ Regras Importantes

  1. NÃO modifique a paleta - apenas os pixels
  2. NÃO altere as dimensões do BMP
  3. NÃO adicione/remova caracteres
  4. Use modo indexed color (256 cores)
  5. Salve sem compressão

🔧 Detalhes Técnicos

Formato BMP

  • Windows 3.x BMP
  • 8 bits por pixel (indexed)
  • Paleta de 256 cores (fixa)
  • Scanlines bottom-up
  • Sem compressão

Estrutura SCUMM

  • Blocos CHAR dentro de containers LECF/LFLF
  • Fontes versão 1-3 suportadas
  • 1 ou 2 bits por pixel internamente
  • XOR encryption (0x69 para alguns jogos)
  • Big-endian para tags e tamanhos

Importação (Como Funciona) 🆕

  1. Extrai CHAR original do jogo
  2. Carrega BMP editado e valida paleta
  3. Converte BMP de volta para formato CHAR
  4. Cria backup automático (.bak)
  5. Injeta CHAR modificado no arquivo DISK
  6. Atualiza tamanhos dos containers pais (LECF/LFLF)
  7. Reaplica criptografia XOR se necessário

⚠️ Avisos e Segurança

  1. Sempre faça backup - mas a ferramenta já cria um .bak automaticamente
  2. Teste no ScummVM após cada modificação
  3. A paleta não pode ser modificada - apenas os pixels
  4. Número de caracteres deve permanecer o mesmo
  5. Dimensões máximas (largura/altura) devem ser mantidas
  6. Restaurar backup: mv MONKEY.001.bak MONKEY.001

🐛 Troubleshooting

"CHAR index não encontrado"

# Rode sem -c para ver quantas fontes existem
./mi_font_tool.py -g monkeycd -o test.bmp

"Paleta ScummFont original"

O BMP foi modificado com paleta incorreta. Soluções:

  • Use o GIMP: Desmarque "Escrever informações de espaço de cores"
  • Use Aseprite com modo indexed
  • Não converta para RGB/true color

"Jogo não inicia após import"

# Restaure o backup
cd /path/to/game
mv MONKEY.001.bak MONKEY.001

Possíveis causas:

  • BMP com dimensões diferentes
  • Paleta foi modificada
  • Número de caracteres alterado

MD5 diferente após import do mesmo BMP

Isso é normal! O método save_font() pode escrever de forma ligeiramente diferente, mas:

  • ✅ Tamanho do arquivo é idêntico
  • ✅ Jogo funciona normalmente
  • ✅ Fonte é renderizada corretamente

📊 Exemplo Real: Monkey Island CD

# Ver quantas fontes existem
./mi_font_tool.py -g monkeycd -o test.bmp

# Saída:
# [2/3] Procurando arquivos CHAR...
#   ✓ Encontrados 5 arquivo(s) CHAR:
#     [0] CHAR_0001 (2.5 KB)  - 256 chars, 1bpp, 10x8
#     [1] CHAR_0002 (4.5 KB)  - 251 chars, 2bpp, 12x9  ← ESTA!
#     [2] CHAR_0003 (2.0 KB)  - 256 chars, 1bpp, 8x8
#     [3] CHAR_0004 (4.7 KB)  - 226 chars, 2bpp, 18x15
#     [4] CHAR_0005 (3.1 KB)  - 256 chars, 2bpp, 13x14

# Extrair a fonte principal (índice 1)
./mi_font_tool.py -g monkeycd -o monkey_main.bmp -c 1

# Editar monkey_main.bmp no GIMP...

# Aplicar de volta
./mi_font_tool.py -g monkeycd -i monkey_main.bmp -c 1

# Saída:
# Jogo: The Secret of Monkey Island (CD)
# [1/4] Extraindo CHAR original...
# [2/4] Carregando BMP editado...
# ✓ BMP carregado: monkey_main.bmp
# [3/4] Convertendo BMP para formato CHAR...
# Salvando 251 caracteres...
# [4/4] Injetando no jogo...
# Injetando CHAR_modified_0001 (4608 bytes)...
#   Tamanho antigo: 4608 bytes
#   Tamanho novo: 4608 bytes
#   Diferença: +0 bytes
#   Atualizado LECF size: 6653379 -> 6653379
#   Atualizado LFLF size: 245759 -> 245759
#   Backup criado: MONKEY.001.bak
# ✓ CHAR injetado com sucesso em: MONKEY.001
#
# ✓ Fonte importada com sucesso!
# Arquivo modificado: /path/to/MONKEY.001
# Backup criado: /path/to/MONKEY.001.bak
# ⚠️  Teste o jogo para verificar se tudo está correto!

🎯 Casos de Uso

Tradução de Jogos

# Adaptar fonte para caracteres acentuados (português, espanhol, etc.)
./mi_font_tool.py -g monkeycd -o font_original.bmp -c 1
# Edite para adicionar á, é, í, ó, ú, ñ, ç...
./mi_font_tool.py -g monkeycd -i font_ptbr.bmp -c 1

Mods e Customização

# Criar fonte mais legível para telas grandes
# Criar fonte temática (gótica, alien, etc.)
# Melhorar anti-aliasing

Restauração

# Melhorar qualidade de fontes degradadas
# Redesenhar caracteres borrados

📝 Jogos Suportados (24 no total)

  • Maniac Mansion (V1, V2)
  • Zak McKracken (todas as versões)
  • Indiana Jones: Last Crusade (todas)
  • Loom (todas as versões)
  • The Secret of Monkey Island (todas) ⭐
  • Monkey Island 2: LeChuck's Revenge
  • Indiana Jones: Fate of Atlantis
  • Day of the Tentacle
  • Sam & Max Hit the Road
  • Full Throttle
  • The Dig
  • E mais...

🏆 Status do Projeto

  • ✅ Extração pixel-perfect (MD5 match com C++)
  • ✅ Importação funcional
  • ✅ Backup automático
  • ✅ Suporte a 24 jogos
  • ✅ XOR decryption/encryption
  • ✅ Container size updates
  • ⚠️ V1-3 games (parcial)

📄 Licença

MIT License

  • Copyright (c) 2025 Daniel Bonates

🙏 Créditos

  • Thomas Combeleran - Autor original do scummfont/scummrp em C++
  • Comunidade ScummVM - Documentação dos formatos

🔗 Links

About

Ferramenta para auxilar edição de fonte do jogo Monkey Island

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages