Tudo que você precisa saber sobre instruções (por enquanto)


Um script nada mais é do que um texto contendo instruções de programação (que fazem o seu jogo funcionar do jeito que você quer) e alguns comentários. Todas as linhas desse texto que começarem com os caracteres "//" não são processadas. Além disso, o sistema permite apenas uma instrução por linha e sempre executa na sequência, uma de cada vêz.

Texto e imagem em todas as áreas

Existem três instruções que permitem o uso de texto, imagem ou apenas demarcar um retêngulo clicável. São elas: linktel= produz o link na tela gráfica, linkpan= produz o link no painel do jogo e linkfnc= produz o link na área de funções.

  linktel= txt/img,scp/htm,px,py,tw,th,cr
  linkpan= txt/img,scp/htm,px,py,tw,th,cr
  linkfnc= txt/img,scp/htm,px,py,tw,th,cr

Em todas elas, o primeiro parâmetro indica um texto ou imagem nos padrões gif, jpg, ou pgn. Se este parâmetro estiver em branco, nada é mostrado mas a área clicável permanece ativa. O parâmetro seguinte permite selecionar entre um script ou uma página html normal. Os quatro parâmetros seguintes indicam a posição (canto supeior esquerdo) e as dimensões da área clicável.

O parâmero cr indica o tipo de cursor do mouse que será mostrado sobre a imagem ou texto, segundo a lista ao lado. Todas elas possuem sintaxes alternativas tais como: linktela=, lnktel=, linkpainel=, lnkpan=, linkfunc= e lnkfnc=.

Agora você tem mais elementos para se divertir mudando parâmetros, experimentando todas essas instruções etc. Brinque um pouco com as possibilidades e depois volte aqui.

 

Registradores: pau pra toda obra

Tudo o que acontece na partida está relacionada aos registradores. Entenda-os como variáveis numéricas ou alfanuméricas, para uso como indicadores de estado, operações aritiméticas entre valores, frases complexas, palavras, nomes, etc. Existem 250 deles, numerados de 0 a 249. Eles podem receber nomes ou variar a quantidade total, mas isso fica para outro momento.

As mais importantes instruções de uso dos registradores são as de atribuição de conteúdo. São elas:

  reg= rg,vlr

O registrador rg passa a ter o conteúdo vlr, que pode ser um número ou letras (frases ou strings). Todas as instruções que lidam com conteúdo podem referenciar um determinado registrador, usando antes do seu índice o caracter "#". Por exemplo.

  reg= 5,Olá Mundo! - o registrador 5 passa a ter como conteúdo a frase "Olá Mundo!";
  print #5 - coloca na tela o conteúdo do registrador 5.

Na verdade este é um dos recursos mais valiosos do sistema, pois permite flexibilizar praticamente todas as instruções de programação.

  copy rg1,rg2,vzs

Copia (ou duplica) o conteúdo do registrador rg2 no registrado rg1 tantas vezes quantas forem indicadas no parâmetro vzs. Caso não seja declarado um valor para vzs, a cópia ocorrerá apenas uma vez. Se o valor for maior que 1, então os apontadores rg1 e rg2 são incrementados e a cópia continua até zerar vzs. Esta instrução é muito usada para mover blocos de registradores de um lugar ao outro. Esta instrução possui uma sintaxe alternativa: dup.

  swap rg1,rg2

Troca, alterna ou inverte os conteúdos dos registradores rg1 e rg2. Sintaxe alternativa: trocar.

  reg$ rg,vlr

Concatena o valor presente no parâmetro vlr com o conteúdo do registrador rg. Sintaxe alternativa: concat. Acompanhe no exemplo:

  reg= 5,Olá - o registrador 5 passa a ter como conteúdo a palavra "Olá";
  reg$ 5,Mundo! - agora o registrador 5 passa a ter o conteúdo "OláMundo".

Note a falta de espaço entre as palavras "Olá" e "Mundo!". Isso acontece porque durante o processamento das linhas de instruções, os espaços iniciais e finais da linha são eliminados, para otimizar o trabalho. Nestes casos, é preciso forçar a presença de um espaço entre as palavras e isso pode ser feito com o uso do caracter "~" (o til). Veja como:

  reg= 5,Olá - o registrador 5 passa a ter como conteúdo a palavra "Olá";
  reg$ 5,~Mundo! - agora o registrador 5 passa a ter o conteúdo "Olá Mundo".

Este caracter de espaço impositivo pode ser usado em qualquer ponto da string a ser concatenada e quantas vezes ele for necessário.

  trim rg

Elimina todos os espaços no início e no final do conteúdo do registrador rg.

  regtxt= rg,'string'

Coloca no registrador rg o conteúdo da string apresentada, delimitada por aspas simples e sem restrição de linhas. Por exemplo:

  regtxt= 5,'Olá Mundo, hoje eu acordei
             de bom humor, pensando em assistir
             a um filme bem legal.'

Essa instrução permite a definição de frases longas, colocadas nos registradores, de forma a ficarem mais compreensíveis na edição do jogo. Pode ser necessário o uso do caracter "~" para forçar espaços em algumas situações.

  regtxt$ rg,'string'

Concatena com o conteúdo do registrador rg o conteúdo da string apresentada, delimitada por aspas simples e sem restrição de linhas. Esta instrução possui uma sintaxe alternativa: regtxt+.

A seguir temos a lista das instruções que permitem operações aritiméticas com os registradores. São elas:

  reg+ rg,vlr

Soma ao conteúdo do registrador rg o valor vlr. Certifique-se que ambos contenham valores numéricos.

  inc rg

Incrementa em 1 o conteúdo do registrador rg.

  reg- rg,vlr

Subtrai do conteúdo do registrador rg o valor vlr. Certifique-se que ambos contenham valores numéricos.

  dec rg

Decrementa em 1 o conteúdo do registrador rg.

  reg* rg,vlr

Multiplica o conteúdo do registrador rg pelo o valor vlr. Certifique-se que ambos contenham valores numéricos.

  reg: rg,vlr

Divide o conteúdo do registrador rg pelo o valor vlr. O resultado apresentado será em ponto flutuante, ou seja, com casas decimais.

  reg/ rg,vlr

Divide o conteúdo do registrador rg pelo o valor vlr. O resultado será um inteiro arredondado.

  reg? rg,max

Soma ao conteúdo do registrador rg com um valor aleatório entre 0 e max. O registrador rg deve ser inicailizado com um valor base. Por exemplo:

  reg= 5,0 - o registrador 5 é inicializado com o valor 0;
  
reg? 5,6 -
o registrador 5 terá um valor entre 0 e 6.

  reg= 5,3 - o registrador 5 é inicializado com o valor 3;
  
reg? 5,6 -
o registrador 5 terá um valor entre 3 e 9.

Os registradores também podem ser usados em instruções de desvio de execução. Para marcar um ponto (ou linha) de destino, use um label, que começa sempre com o caracter ":". As principais são:

  ifreg= rg,vlr,label

Se o valor contido no registrador rg for igual a vlr então desvia a execução para o label indicado. Caso contrário prossiga para a próxima instrução. Por exemplo:

  ifreg= 5,0,Zerado - se o registrado 5 for igual a 0, salta para o label Zerado;
  
...

  ...

:Zerado
  inc 5 - prossegue com o processamento das instruções

O salto para o label independe de se ele está à frente ou anterior à instrução de salto condicional.

  ifreg> rg,vlr,label

Se o valor contido no registrador rg for maior que vlr então desvia a execução para o label indicado. Caso contrário prossiga para a próxima instrução.

  ifreg< rg,vlr,label

Se o valor contido no registrador rg for menor que vlr então desvia a execução para o label indicado. Caso contrário prossiga para a próxima instrução.

  ifreg# rg,vlr,label

Se o valor contido no registrador rg for diferente de vlr então desvia a execução para o label indicado. Caso contrário prossiga para a próxima instrução.

  ifreg~ rg,vl1,vl2,label

Se o valor contido no registrador rg estiver entre os valores vl1 e vl2 (inclusive esses valores) então desvia a execução para o label indicado. Caso contrário prossiga para a próxima instrução.

 

Mais instruções de desvio condicional

Toda posição do jogo tem um nome, que é declarado logo no começo do script, com o uso da instrução posic=. Desvios condicionais podem ser programados de duas formas:

  ifpos= nome,label

Se o nome da posição for igual a nome, salta para o label indicado. Esta instrução tem a seguinte sintaxe alternativa: ifloc=.

  ifpos# nome,label

Se o nome da posição for diferente de nome, salta para o label indicado. Esta instrução tem a seguinte sintaxe alternativa: ifloc#.

Existe também um conjunto básico de desvio condicional que, se verdadeiro, executa a sequência de parâmetros a seguir como se fosse uma linha normal de instrução. Lembrando apenas que entre o menmônico e seus parâmetros, o delimitador de campo passa a ser uma vírgula e não espaço.

  if= reg,vlr,instr,1,2,3,4,5,6

Se o valor do registrador indicado em reg for igual a vlr, então o que vem a seguir é uma linha de comando a ser executada, com a instrulção instr e até seis parâmetros seguintes.

  if# reg,vlr,instr,1,2,3,4,5,6

Se o valor do registrador indicado em reg for diferente de vlr, então o que vem a seguir é uma linha de comando a ser executada, com a instrulção instr e até seis parâmetros seguintes.

  if> reg,vlr,instr,1,2,3,4,5,6

Se o valor do registrador indicado em reg for maior do que e vlr, então o que vem a seguir é uma linha de comando a ser executada, com a instrulção instr e até seis parâmetros seguintes.

  if< reg,vlr,instr,1,2,3,4,5,6

Se o valor do registrador indicado em reg for menor do que e vlr, então o que vem a seguir é uma linha de comando a ser executada, com a instrulção instr e até seis parâmetros seguintes.

  if~ reg,vl1,vl2,instr,1,2,3,4,5

Se o valor do registrador indicado em reg estiver dentro do internalo vl1 e vl2, então o que vem a seguir é uma linha de comando a ser executada, com a instrulção instr e até cinco parâmetros seguintes.

 

Instruções genéricas (mas que são uma mão na roda)

Existem instruções para uso geral e que não se enquadram em nenhuma categoria específica, mas o seu conhecimento e compreensão são fundamentais.

  end

É sabido que o script é executado até a sua última linhas porém essa finalização pode ocorrer em qualquer outra linha do fonte, bastando para isso uma instrução end. Sintaxe alternativa fim.

  posic= scp

Indica o nome da posição atual do jogador. Geralmente é o mesmo nome do script que a descreve.

  telpos= arq

Apresenta a imagem, no visor principal, da posição definida pelo script.

  retscp= scp

Indica o nome do script que será usado para "retorno" a um local anteriormente visitado, após ter sido executado um script genérico (menu de opções por exemplo).

  script scp

Encerra a execução do script atual e passa a executar o script scp. Sintaxe alternativa script=.

  delay vlr,on/off

Suspende o processamento do script por vlr milissegundos. O complemento on indica que o applicativo continua operante e respondendo às funções básicas como teclao e mouse. O complemento off indica que ele só retorna à operação normal no final dp ciclo. Obviamente que esta instrução é a base para pequenas animações dentro do jogo.

  fonte nome,size,cor,bold,italic,underline

Redefine a fonte default para a indicada pelo nome, corpo size, cor de impressão e os atributos bold, italic e undeline (basta qualquer caracter nesses três campos para indicar o estilo a ser usado). Vale ressaltar que essas alterações permanecem apenas dentro da execução do script atual. No próximo a ser executado, os valores originais desses atributos são recuperados. Sintaxe equivalente fonte=.

  corfnd cor

Redefine a cor de fundo default para a nova cor. Vale ressaltar que essa alteração permanece apenas dentro da execução do script atual. No próximo a ser executado, o valor original dessa cor é recuperado. O valor da cor é definido por 6 dígitos hexadecimais, represento as 3 compinentes básicas RGB. Por exempo 00000 é a cor preta e FFFFFF é a cor branca. Sintaxe equivalente corfnd=.

  cortxt cor

Redefine a cor de texto default para a nova cor. Vale ressaltar que essa alteração permanece apenas dentro da execução do script atual. No próximo a ser executado, o valor original dessa cor é recuperado. O valor da cor é definido por 6 dígitos hexadecimais, represento as 3 compinentes básicas RGB. Por exempo 00000 é a cor preta e FFFFFF é a cor branca. Sintaxe equivalente corfnd=.

  gosub scp

Interrompe a execução do script atual e passa a executar o script scp como uma subrotina dele. Ao terminar essa execussão, retorna o processamento no ponto de chamada do script anterior.

  return

Interrompe a execução do script subrotina e retorna o processamento no ponto de chamada do script anterior. Sintaxe alternativa: ret.

  cleartela cor,px,py,tw,th

Limpa a área gráfica principal (tela) com a cor default. Se existir o parâmetro cor, ele será usado para a limpeza e se os parâmetros px,py,tw,th existirem, eles delimitarão a área a ser limpa.

  clearfunc cor,px,py,tw,th

Limpa a área de funções com a cor default. Se existir o parâmetro cor, ele será usado para a limpeza e se os parâmetros px,py,tw,th existirem, eles delimitarão a área a ser limpa.

  clearpainel cor,px,py,tw,th

Limpa a área do painel do jogo com a cor default. Se existir o parâmetro cor, ele será usado para a limpeza e se os parâmetros px,py,tw,th existirem, eles delimitarão a área a ser limpa.

  encerrar tmp

Encerra a aventura imediatamente e para a execução total do aplicativo. Se o parâmetro tmp, for declarado então haverá uma pausa de alguns segundos antes do encerramento ocorrer. Sintaxe equivalente terminate.