As instruções secretas
do Zeus
Conheça as instruções não documentadas do sistema


Todo sistema complexo possui recursos não documentados. Eles são incluidos por vários motivos: segurança, testes especiais, soluções específicas, etc. Porém a mais importante razão de termos recursos não documentados é a herança.

No caso do Zeus, o sistema de controle de jogo e o editor propriamente dito vem sendo desenvolvido desde o início da década de 80, quando ainda rodava em computadores compatíveis com o TRS 80. Ao longo dos anos ele foi sofrendo aperfeiçoamentos tais que o tornaram tão flexível como é hoje.

No caso específico do Zeus, ele surgiu como uma versão mais enxuta do Sistema Editor de Adventures, combinando seus recursos com as implementações do Editor de Adventures Interativos, ambos da TILT. Ao invés de simplesmente retirar os recursos ainda não efetivamente validados, a opção de todo desenvolvedor é mantê-los no sistema, porém sem dar publicidade a eles. Com o tempo eles vão sendo liberados.

No entanto, o Zeus é um projeto aberto e portanto nada mais coerente do que listar as principais funções e instruções que ainda não estão elencadas como oficiais. Até porque, em nossos jogos algumas delas já estão sendo usadas.

No entanto, o autor ou programador que desejar usar esses recursos deve atentar para o fato de que nem todas foram exaustivamente testadas nesse novo ambiente colaborativo do Zeus. Use-as com cuidado e moderação e caso alguma coisa pareça não estar funcionando como deveria, mande-nos um report.

Da nossa parte, podemos garantir que daremos atenção especial a algum caso reportado de não funcionando e mesmo que alguma delas não se torne "oficial", não alteraremos a sua sintaxe ou funcionalidade, para que não haja repercussão em seu uso nos jogos.

Uma dessas instruções (ou procedimentos) iremos abordar de forma independente, pois é um recurso de grande importância: o funcionamento (ou modos) do visor do jogo, tratado na matéria Os modos de operação do visor principal. Os demais veremos aqui mesmo.

 

Plano Z: trata-se de um recurso visual para ser usado nos jogos. Por default, tudo que acontece no jogo deve estar restrito e dimensionado dentro do painel principal. No entanto é possível extraploar esse painel e usar uma imagem especial para ilustrar todo o fundo do monitor.

 
//Instrução: planoz img ou planoz= img
//
// onde img = nome de uma imagem jpeg ou bmp
  ...
  planoz image1.jpg
  // ou
  planoz
  ...

Esta instrução faz com que a image1.jpg seja colocada como pano de fundo do painel do jogo. Se a instrução for usada sem parâmetro algum, o plano Z é desligado.

Carregue o script planoz (no Jogo Teste Inicial) e execute-o para ter uma idéia do funcionando da instrução.

 

Scroll no visor: este é um tipo especial de efeito gráfico, que desloca uma imagem qualquer para cima, abrindo espaço na parte inferior da mesma. Foi implementado no Zeus para facilitar a simulação do scroll que ocorre nos programas e sistemas operacionais antigos, quando toda a tela deslocava-se para cima, dando espaço para mais informações e/ou comandos.

 
//Instrução: scrolltel ou scrollbuf X,Y,W,H,Z,Cor
//
//onde X = coordenada X do canto superior esquerdo
//     Y = coordenada Y do canto superior esquerdo
//     W = largura da área a ser scrollada
//     H = altura da área a ser scrollada
//     Z = altura ou tamano do "salto" do scroll
//   cor = cor de preenchimento da área vaga
  ...
  scrolltel 0,0,510,250,10,FFFFFF
  ...

O efeito pode ser aplicado diretamente sob a imagem do visor (tela / scrolltel) ou no buffer de tela (scrollbuf). O parâmetro Z determina o espaço liberado na parte de baixo da imagem ou seja, a altura do salto.

Para evitar erros no deslocamento da área, calcule o parâmetro Z a partir da altura da imagem. Por exemplo, se H for igual a 250, então podemos usar um Z igual a 10, passando a ter então 25 "linhas" de 10 pixels na área. Ou Z igual a 25, tendo então 10 "linhas" de 25 pixels cada.

Carregue o script oldmonit (no Jogo Teste Inicial) e execute-o para ter uma idéia do funcionando do scroll.

 

Desenho ponto a ponto: o sistema permite algumas operações simples para desenho e maipulação de pixels, na tela do visor ou no buffer. As instruções são:

 
//Instrução: pixel X,Y,Cor ou putpix X,Y,Cor
//
//onde X = coordenada X do pixel
//     Y = coordenada Y do pixel
//   cor = cor do pixel
  ...
  pixel 10,10,FFFFFF
  ...

Esta instrução permite colocar um ponto (pixel) em qualquer coordenada da imagem que aparece no visor do jogo. Pode ser diretamente na tela ou no buffer.

 
//Instrução: buftelpix X,Y ou telbufpix X,Y
//
//onde X = coordenada X do pixel
//     Y = coordenada Y do pixel
  ...
  buftelpix 10,10
  ...

Esta instrução transfere, ou melhor copia, um ponto (pixel) na coordenada especificada da tela para o buffer ou vice versa. Por default, o pixel possui 1 de espessura, que pode ser alterada mudando o valor do registrador 45.

 
//Instrução: moveto X,Y ou bfmvto X,Y
//
//onde X = coordenada X do pixel
//     Y = coordenada Y do pixel
  ...
  moveto 10,10
  ...

Esta instrução "move" a posição de plotagem para as coordenadas especificadas. Isso equivale a algo como "mover uma caneta de desenho, sem deixar traço algum sob o papel". Tanto na tela quanto no buffer.

 
//Instrução: lineto X,Y,cor ou bflnto X,Y,cor
//
//onde X = coordenada X do pixel
//     Y = coordenada Y do pixel
//   cor = cor do pixel
  ...
  lineto 100,100,000000
  ...

Esta instrução traça uma linha reta entre a coordenada anteriormente definida pelas instruções pixel ou moveto, até a coordenada definida pelos parâmetros.

 
//Instrução: telaret bufrect ou panrect X,Y,W,H,cor
//
//onde X = coord X do canto sup esquerdo
//     Y = coord Y do canto sup esquerdo
//     W = largura do retângulo
//     H = altura do retângulos
//   cor = cor do pixel
  ...
  telarect 10,10,100,100,000000
  ...

Esta instrução traça um retângulo vazado a partir da posição X,Y com W de largura e H de altura, na cor especificada. Pode ser desenhado diretamente na tela do visor (telarect), no buffer (bufrect) ou no painel do jogo (panrect).

 
//Instrução: telabox bufbox ou panbox X,Y,W,H,cor
//
//onde X = coord X do canto sup esquerdo
//     Y = coord Y do canto sup esquerdo
//     W = largura do retângulo
//     H = altura do retângulos
//   cor = cor do pixel
  ...
  telabox 10,10,100,100,000000
  ...

Esta instrução traça um retângulo sólido a partir da posição X,Y com W de largura e H de altura, na cor especificada. Pode ser desenhado diretamente na tela do visor (telabox), no buffer (bufbox) ou no painel do jogo (panbox).

Carregue o script desenho (no Jogo Teste Inicial) e execute-o para ter uma idéia do funcionando do scroll.

 

Transferir imagem : Normalmente, na programação do jogo, usamos o buffer para as manipulações gráficas e no final o conteúdo é transferido para a tela (ou visor). No entanto, ao desenhar ou escrever diretamente na tela, ficamos sem uma "cópia" do que foi feito.

 
//Instrução: captela
  ...
  captela
  ...

Esta instrução faz o inverso da instrução refresh, ou seja, copia o conteúdo atual da tela do visor para o buffer.

 

Teste de posição: Na programação, quando usamos coordenadas X,Y, pode ser necessário verificar de uma deternimada coordenada está dentro de um "retângulo" virtual. Por exemplo, se o jogador clicou dentro de uma área da tela.

 
//Instrução: xytest X,Y,X1,Y1,W1,H1,label
//
//onde X = coordenada X do ponto a ser testado
//     Y = coordenada Y do ponto a ser testado
//    X1 = coord X do canto superior esquerdo da área
//    Y1 = coord Y do canto superior esquerdo da área
//    W1 = largura da área
//    H1 = altura da área
// label = para onde será desviado se estiver dentro

Um dos usos dessa instrução pode ser o teste para verificar se um determinado pixel aleatório "acertou" um alvo ou não.

 

Salvando partidas: No modo tradicional de funcionamento do Zeus, o jogador sempre retorna ao ponto de saida, quando dá um load no jogo. No entanto, com a implantação do modo independente e do jogador "anonimo" passou a ser necessário o recurso de "gravar" ou "carregar" uma determinada partida do jogo.

 
//Instrução: savegame ou loadgame nome
//
//onde nome = nome da partida
  ...
  savegame meujogo
  ...

Com o uso dessa instrução é possivel também criar "pontos" de retorno para o jogador, afim de que ele não tenha que retornar sempre ao início, quando morre. O nome .

 

Botões especiais: o Zeus permite a definição, ativação e uso de até cinco botões especiais, que podem aparecer dentro do painel do jogo. Uma única instrução dá conta de operacionalizar toda a sistemática desses botões.

 
//Instrução: btndef bt,cr,x,y,imgup,imgdw,scpt
//
//onde   bt = número (1 a 5) do botão
         cr = cursor utilizado pelo botão
          x = coord X do canto sup esquerdo do botão
          y = coord Y do canto sup esquerdo do botão
      imgup = arquivo .bmp do botão posição normal
      imgdw = arquivo .bmp do botão posição clicado
       scpt = nome do script que será executado
  ...
  btndef 1,1,540,60,saidaup,saidadw,ClicouSaida
...

Os botões são numerados de 1 a 5 e por defalut ficam desativados ou invisíveis ao jogador. Ao definir um botão, ele torna-se automaticamente ativo/visivel. Quando o jogador clica nesse botão, o script definido para ele é automaticamente executado.

A definição do cursor segue o mesmo padrão de numeração do cursor nos links clicáveis. As imagens do botão são sempre em formato .bmp, sem a necessidade de colocar a extensão na definição do botão.

Como complementação da instrução, após o número do botão (parâmetro bt) pode-se usar outras funcionalidades, bastando para isso informá-la junto com a instrução:

 
  ...
  btndef X,on
  ...

Torna o botão X ativado e funcional.

 
  ...
  btndef X,off
  ...

Torna o botão X inoperante (porém o botão permanece visível).

 
  ...
  btndef X,vis
  ...

Torna o botão X visível.

 
  ...
  btndef X,inv
  ...

Torna o botão X invisível.

 
  ...
  btndef X,pushup
  ...

Coloca o botão X na posição normal (up) e passa a usar um click pra baixar e um click para levantar o botão. O estado atual do botão pode ser acompanhado pelo resitrador 48, onde 1 indica up e 2 indica down.

 
  ...
  btndef X,pushdw
  ...

Coloca o botão X na posição clicado (down) e passa a usar um click pra baixar e um click para levantar o botão. O estado atual do botão pode ser acompanhado pelo resitrador 48, onde 1 indica up e 2 indica down.

 
  ...
  btndef X,pushof
  ...

Desliga esse tipo de operação alternado.

 

ZEUS MAGAZINE - revista de programação de adventures