Vamos falar (coisas cabulosas) sobre os objetos


Objetos são elementos manipuláveis, dentro de uma narrativa. Possuem uma referência textual ou mesmo gráfica. Por exemplo na frase "Você está num imenso salão de armas, com uma armadura de cavaleiro servindo de guarda na porta principal.". Vale também uma imagem retratando essa situação.

A armadura mencionada pode ser um objeto manipulável, ainda que não necessariamente "carregável". Portanto, podemos definir objetos como elementos dinâmicos dentro de uma narrativa, que podem tanto conter outros objetos dentro de sí mesmos, como ser contidos por outros objetos.

Todo objeto possui dois conjuntos de parâmetros praticamente idênticos. Um deles contém das definições inciais do objeto, ou seja, seu estado quando a aventura é iniciada ou reiniciada. O outro conjunto retrata as condições do objeto no exato momento em que o jogador está se aventurando pela partida.

Basicamente esses parâmetros são Nome: é o nome (sempre em caixa baixa) pelo qual o objeto é reconhecido dentro da programação; Descrição: string simples e básica que define o objeto, geralmente para compor uma frase de listagem de objetos; Local: posição onde o objeto se encontra - a palavra jog indica que o objeto está com o jogador e se a palavra for um outro objeto, então significa que está dentro dele; Shape: é a imagem do objeto (opcional); Tags 1, 2 e 3: são marcadores ou variáveis alfanuméricas específicas de cada objeto, para uso genérico (como o programador desejar).

É possível, na edição da aventura (ferramentas / objetos), definir todos os objetos que farão parte da narrativa, ou então deixar para criá-los durante a partida. O parâmetro Local, se for uma string vazia, indica que o objeto, para todos os efeitos, (ainda) não existe no jogo. Isto é usado normalmente quando dois um mais objetos usados para construir um terceiro objeto, que passa a existir assim que o parâmetro Local receba um valor.

Vamos pegar o exemplo da lanterna, visto na página anterior. Na verdade, são 3 objetos distintos: a lantarna, a lâmpada e as pilhas (para efeito de exemplificação vamos tratar as duas pilhas como apenas uma).

As configurações dos parâmetros seriam mais ou menos como se segue, na figura abaixo.

Nesta configuração, tanto a lámpada quanto as pilhas estão dentro da lanterna e podemos usar a Tag1 da lâmpada para indicar se ela está apagada (-), acesa (*) ou queimada (#). A Tag1 das pilhas indicará a quantidade de carga que elas contém ou mesmo a quantidade de vezes que a lanterna pode ser acesa, antes de queimar a lâmpada. O autor decide como usar esses parâmetros.

Na programação propriamente dita existem várias instruções que nos permitem manipular os objetos. Seguem abaixo as mais importantes:

  pegaobj obj

Pega o objeto obj pelo jogador. Atenção: esta instrução apenas coloca o objeto na posse do jogador, sem fazer nenhum tipo de avaliação, tipo: se o objeto está por perto, se ele pode ser carregado, se o jogador pode possuí-lo ou se o jogador já tem esse objeto. Tudo isso deve ser feito, na programação, antes da instrução ser executada.

  soltaobj obj

Solta o objeto obj que está (em teoria) com o jogador, na posição atual dele. Atenção: esta instrução apenas coloca o objeto na posição do jogador, sem fazer nenhum tipo de avaliação, tipo: se o objeto está realmente com, se ele pode ser solto naquele local, se o jogador pode de desfazer dele. Tudo isso deve ser feito, na programação, antes da instrução ser executada.

  poeobj obj,ond

Coloca o objeto obj no local ond, sendo que este local tanto pode ser o jogador, um local ou página da aventura, dentro de outro objeto ou simplesmente mandar o objeto para o vácuo (deixa de existir formalmente no jogo). Atenção: esta instrução apenas coloca o objeto no local indicado, sem fazer nenhuma avaliação, do tipo: se o objeto existe, se pode ir para o local indicado e assim por diante.

  criaobj obj,ond

Cria o objeto obj no local ond, sendo que este local tanto pode ser o jogador, um local ou página da aventura, dentro de outro objeto ou simplesmente mandar o objeto para o vácuo (deixa de existir formalmente no jogo). Atenção: esta instrução funciona exatamente como a instrução poeobj porém, caso o objeto não tenha sido definido na criação da aventura, ele será inserido nela naquele momento.

É preciso ter cuidado com essa instrução e principalmente no ponto da programação onde ela é usada porque alguns parâmetros do objeto precisarão ser declarados logo em sequida, tipo sua imagem, valor das tags, etc.

  temos? obj,label

Faz um teste rápido se o jogador possui o objeto obj. Se estiver com ele, salta para o label indicado.

  getobj= reg,obj,prm

Coloca no registrador indicado pelo parâmetro reg, valor do parâmetro prm do objeto obj. Os parâmetros são nom, dsc, loc, shp, tag1, tag2 e tag3. Os parâmetros dos objetos podem ser carregados para um registrador para então sofrer todo tipo de processamento possível, inclusive testes para desvios.

  setobj= obj,prm,vlr

Coloca no parâmetro prm do objeto obj o valor indicado pelo parâmetro vlr. Os parâmetros são nom, dsc, loc, shp, tag1, tag2 e tag3. Os parâmetros dos objetos podem ser carregados por um valor direto ou referenciados pelo conteúdo de um registrador.

  tiratudo ond,loc

Tira todos os objetos que estão no local ond e os transfere para o local loc. Lembrando que tanto o local origem quanto o local destino podem ser os locais propriamente ditos da aventura, o jogador ou simplesmente outro objeto. Esta instrução tem a seguinte sintaxe equivalente: poetudo.

  ifobj= obj,ond,label

Se o objeto obj estiver no local ond salta para o label indicado. Lembrando que o parâmetro ond pode indicar um local, outro objeto ou o jogador.

  ifobj# obj,ond,label

Se o objeto obj não estiver no local ond salta para o label indicado. Lembrando que o parâmetro ond pode indicar um local, outro objeto ou o jogador.

  iftag1= obj,vlr,label - se igual
  iftag2= obj,vlr,label
  iftag3= obj,vlr,label

  iftag1# obj,vlr,label - se diferente
  iftag2# obj,vlr,label
  iftag3# obj,vlr,label

  iftag1> obj,vlr,label - se maior
  iftag2> obj,vlr,label
  iftag3> obj,vlr,label

  iftag1< obj,vlr,label - se menor
  iftag2< obj,vlr,label
  iftag3< obj,vlr,label

As tags dos objetos (tag1, tag2 e tag3) podem ser testadas diretamente e as instruções seguem basicamente o mesmo procedimento: obj é o nome do objeto, vlr é o valor a ser testado e label o desvio caso o teste resulte em verdadeiro.

  cont ond,reg

Conta a quantidade de objetos que estão num determinado local (ond), no local do jogador, com ele ou dentro de outro objeto e coloca o resultado no registrador indicado reg.
Se

  listobj reg,ond

Monta, no registrador reg, uma lista em texto dos objetos que estão no local, com o jogador ou dentro de outro objeto.

  listobjlink reg,ond

Monta uma lista de objetos no mesmo formato que a instrução listobj porém os nomes dos objetos na lista passam a ter links que os levam aos seus respectivos scripts.

 dispobj obj,ond,px,py,wd,ht,qt

Monta um quadro gráfico com o canto superior esquerdo na posição px,py, com lagura wd e altura ht, usando os shapes dos objetos que estão (obj) no local do jogador loc, com o jogador jog ou dentro de um determinado objeto. O parâmetro qt indica quantos objetos serão mostrados na horizontal do quadro e o parâmetro ond indica onde o quadro será mostrado tel na tela, pan no painel ou fnc na área de funções especiais.