Comando
padrão |
||||||||||||||
Além dos dois comandos básicos tratados na página anterior, todo adventure precisa dispor de meios simples e eficientes para lidar com objetos e as três operações básicas são: pegar, soltar e examinar. Mas antes vamos ver um pouco sobre a filosofia de funcionamento do sistema do jogo. Sempre que o jogador tenta executar uma ação com objetos, o sistema monta um nome de script usando para isso o índice do verbo da frase e mais os índices das duas palavras mencionados (objetos ou não), em formato hexadecimal (o zero indica que não há objeto mencionado). Por que duas palavras e não uma ou três? Porque com esse esquema é possível construir comandos complexos, em uma única operação, do tipo: coloque a lanterna na mala. Se tratasse apenas um objeto, essa mesma ação teria que ser desmembrada em pelo menos dois comandos sequenciais. Por outro lado, tratar com múltiplos objetos permite também a construção de comandos interessantes, como comandos compostos do tipo: pegue a mala, a vela, a lanterna e o chapéu. O sistema irá processar esse comando desmembrando-o automaticamente em quatro comandos específicos. A lógica de toda essa funcionalidade está na construção dos comandos básicos, montados de forma genérica. Entenda da seguinte forma: num adventure existem inúmeros objetos e a grande maioria deles não tem nenhuma especificidade em relação às operações básicas (pegar, soltar e examinar). Escrever ou repetir uma a uma essas operações para todos os objetos torna-se portanto uma tarefa monótona. Daí desenvolvermos o uso de instruções genéricas. Por exemplo, ao digitar a frase pegue a mala, o sistema procura por um script comando cujo nome é formado pelo índice do verbo pegar, pelo índice do objeto mala e mais o zero. Não encontrando esse script, o sistema então procura por um script genérico cujo nome contém apenas o índice do verbo em questão. Temos aqui um comando "pegar" que em princípio será executado sempre que o sistema não encontrar nenhum comando específico para uma dada situação. Tal comando não faz menção a nenhum objeto, mas o índice do objeto digitado pelo jogador ainda pode ser resgatado. Se numa instrução for usado o parâmetro OBJ1 ou OBJ2, o sistema irá resgatar exatamente o índice do primeiro ou segundo objeto digitado pelo jogador. Por exemplo, a instrução pega objeto permite as seguintes sintaxes:
Isso faz com que o sistema mude a configuração do objeto MALA, indicando que ele agora está com o jogador. No entanto, a sintaxe:
obriga o sistema a mudar a configuração do primeiro objeto digitado pelo jogador o que, na prática, permite escrever o código apenas uma vez e ele valerá para todos os objetos do jogo, mesmo aqueles que forem criados durando a execução do jogo. O sistema permite ainda que o objeto seja referenciado pelo seu índice. Por exemplo, se sabemos que o índice do objeto MALA é 5, podemos construir o comando desta forma:
Este tipo de construção permite inclusive que a palavra que identifica o objeto (no caso MALA) possa ser mudada durante o jogo e isso não causar prejuizo algum para a performance do comando. Uma vez que os registradores permitem o uso de nominação, ou seja, dar nomes a eles, é possível inclusive usar essa contrução na sintaxe do comando:
sendo que x1 é um nome de um registrador anteriormente definido e válido. Por exemplo: definimos que o registrado 51 terá o nome x1. Assim, toda vez que a instrução pega com essa sintaxe for executada, ela pegará o índice do objeto no conteúdo deste registrador. Usamos todas as demais instruções de registradores para a manipulação do mesmo, contruindo assim comandos altamente dinâmicos. Porém, o ato de pegar um objeto não é tão simples assim. Primeiro é preciso verificar se o objeto que o jogador prentede pegar (o nome que ele digitou) existe no jogo. Se existir, é preciso verificar se ele está na mesma posição que o jogador. Se ele não estiver na mesma posição, mas dentro de outro objeto que esteja na mesma posição e esteja aberto, então na sequência é preciso verificar se o jogador pode de fato carregar mais um objeto. Resolvidas essas questões, então pode-se pegar o objeto. Veja como seria montado esse comando genérico para pegar objetos:
Uma vez que este tipo de operação é muito freqüente, criamos uma instrução que executa todos esses passos automaticamente. Veja como fica então o comando:
Da mesma forma temos um comando sintético x_slt para soltar objetos. Apenas a ação de examinar o objeto é que deve ser escrita na sua forma desmembrada:
Se tiver dúvida em relação ao que faz uma determinada instrução, consulte a lista de instruções, no box de edição de script, para ter uma explicação simplificada. |
||||||||||||||