Ferramenta para auxilar edição de fonte do jogo Monkey Island (e outros jogos ScummVM).
- 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
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
# 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# Aplicar BMP editado de volta no jogo
./mi_font_tool.py -g monkeycd -i font_editado.bmp -c 0.bak) é criado automaticamente antes de modificar os arquivos do jogo.
# 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# 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./mi_font_tool.py -g monkey2 -o mi2.bmp -c 0
./mi_font_tool.py -g monkey2 -i mi2_modified.bmp -c 0./mi_font_tool.py -g tentacle -o dott.bmp -c 0
./mi_font_tool.py -g tentacle -i dott_modified.bmp -c 0./mi_font_tool.py -g samnmax -o sam.bmp -c 0
./mi_font_tool.py -g samnmax -i sam_modified.bmp -c 0./mi_font_tool.py -L-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
-
GIMP (Recomendado)
- Abra o BMP
- Edite com Lápis/Pincel
- Exportar Como > BMP
⚠️ IMPORTANTE: Desmarque "Escrever informações de espaço de cores"
-
Aseprite
- Suporte nativo para paletas indexadas
- Perfeito para pixel art
-
Paint (Windows XP/7)
- Simples e funciona perfeitamente
- Paint moderno (Windows 10+) pode não preservar paleta
- NÃO modifique a paleta - apenas os pixels
- NÃO altere as dimensões do BMP
- NÃO adicione/remova caracteres
- Use modo indexed color (256 cores)
- Salve sem compressão
- Windows 3.x BMP
- 8 bits por pixel (indexed)
- Paleta de 256 cores (fixa)
- Scanlines bottom-up
- Sem compressão
- 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
- Extrai CHAR original do jogo
- Carrega BMP editado e valida paleta
- Converte BMP de volta para formato CHAR
- Cria backup automático (
.bak) - Injeta CHAR modificado no arquivo DISK
- Atualiza tamanhos dos containers pais (LECF/LFLF)
- Reaplica criptografia XOR se necessário
- Sempre faça backup - mas a ferramenta já cria um
.bakautomaticamente - Teste no ScummVM após cada modificação
- A paleta não pode ser modificada - apenas os pixels
- Número de caracteres deve permanecer o mesmo
- Dimensões máximas (largura/altura) devem ser mantidas
- Restaurar backup:
mv MONKEY.001.bak MONKEY.001
# Rode sem -c para ver quantas fontes existem
./mi_font_tool.py -g monkeycd -o test.bmpO 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
# Restaure o backup
cd /path/to/game
mv MONKEY.001.bak MONKEY.001Possíveis causas:
- BMP com dimensões diferentes
- Paleta foi modificada
- Número de caracteres alterado
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
# 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!# 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# Criar fonte mais legível para telas grandes
# Criar fonte temática (gótica, alien, etc.)
# Melhorar anti-aliasing# Melhorar qualidade de fontes degradadas
# Redesenhar caracteres borrados- 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...
- ✅ 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)
MIT License
- Copyright (c) 2025 Daniel Bonates
- Thomas Combeleran - Autor original do scummfont/scummrp em C++
- Comunidade ScummVM - Documentação dos formatos