Alguns elementos
e estruturas do jogo estão organizadas em uma tabela
(bytes) especialmente formatada, para conter os códigos
de definição das palavras, os códigos dos
objetos, os parâmetros das posições, dados
de configuração para arquivos AVIs
(filmes), os códigos dos comandos, funções
e animações. Além disso, esse arquivo ainda
contém a quantidade total de sons, páginas de
imagens e links AVIs do jogo. Trata-se portanto de um arquivo
binário dinâmico, que pode conter até 65
mil bytes.
Quando o jogo
inicia, ou seja, quando o jogador executa o arquivo exe
correspondente ao jogo, o arquivo nome_do_jogo.tbl
é carregado para a memória e os apontadores das
tabelas são transferidos para as suas respectivas variáveis.
Porém,
podem existir algumas situações fora do normal,
onde seja interessante que o programador altere ou verifique
determinado valor, dentro das tabelas. Para isso existe o controle
Dump, dentro da
edição das tabelas.
Mas muita atenção:
antes de alterar algum valor e mesmo dispondo de um sistema
de undo, é
recomendável que se faça um backup de todo o jogo.
Determinadas alterações podem comprometer todo
o sistema de endereçamento das informações.
Ao acionar o recurso
Dump, o programador
terá acesso a uma lista de apontadores e seus respectivos
conteúdos, bem como a visão (dump) dos bytes que
compõem as tabelas, apresentados em formato hexadecimal
e ascii, para facilitar a visualização do conteúdo.
Sempre que esse
recurso for acionado, ele irá gravar uma cópia
do conteúdo original, que pode ser recuperada pelo acionamento
da tecla Oooops!.
Para entender como
as tabelas são compostas, é preciso conhecer bem
o modo de endereçamento de 16 bits (usando
dois bytes). O primeiro byte é chamado de byte menos
significativo e o segundo é chamado de
byte mais significativo.
Assim, um endereço ou condeúdo cujo valor seja
de 16 bits, deve ser obtido pela multiplicação
do byte mais significativo por 256 e somando
ao byte menos significativo. Os primeiros 36 bytes da tabela
contém os apontadores para o início dos respectivos
dados e a quantidade de elementos da tabela.
Por exemplo: os
endereços $0002 e $0003
contém o endereço do início da tabela dos
códigos que definem as palavras ($0024).
Os endereços $0004 e $0005
contém a quantiade de palavras criadas no jogo ($0003).
Se olhar o endereço $0024, a partir
dele verá os seguintes 4
valores $81, $01, $02,
$FF. Recorrendo ao manual, na página
que explica a definição
de palavras, temos:
O valor $81,
em decimal, representa o valor 129, ou seja,
o primeiro substantivo criado no jogo, a palavra LOCAL
(na verdade é o segundo substantivo, pois esse é
um erro presente desde as primeiras versões do editor
para Windows). Os valors $01 e $02
indicam respectivamente que as palavras 2 e
3 representam os objetos 1
e 2. O valor $FF nada mais
é que o delimitador de tabela, ou seja, indica que ela
termina alí. Ao criar uma nova palavra, todo o conteúdo
a partir do $FF é deslocado para a frente
e o seu código é então inserido no final
da tabela de palavras. Os apontadores são então
realinhados.
Note que na coluna
à esquerda existem dois grupos de valores. Os valores
em azul indicam o que a matriz na memória contém
(que é a base de gravação do arquivo .tbl).Os
valors em cinza representam o que as variáveis usadas
no jogo estão usando como endereços e para onde
estão apontado. É portanto imprescindível
que esses dois conjuntos sejam rigorosamente iguais, senão
o sistema pode perder totalmente o controle do que acontece
no jogo.
Os elementos palavras,
objetos, posições,
mensagens e verbos possuem
mais um valor cinca, indicador de quantidade. Esses elementos
possuem tabelas próprias, formadas por textos ascii
em arquivos txt separados. Esses valores são
obtidos diretamente dos contadores dos componentes que contém
esses arquivos e devem igualmente ser idênticos à
quantidade de elementos criados. Se houver discrepância,
pode ser necessário corrigir o arquivos txt correspondente.
Ao clicar num byte
das tabelas, o seu endereço é destacado e um cursor
retangular o marcará. O programador pode então
alterar o seu valor, digitando na sequência: byte menos
significativo, mais significativo. A tecla End
posiciona esse cursor no final das tabelas. As tabelas sublinhadas,
se clicadas, delocam o cursor para o início da tabela
correspondente.
Se houver alguma
discrepância entre os apontadores, será preciso
realinhar as tabelas, clicando no botão correspondente.