Um
adventure completo é construido com os scripts que descrevem
as posições, objetos, funções especiais
(como terminar ou selecionar alguma opção) e soluções
especiais, que determinam o andamento da partida. A primeira que
vamos elaborar é a questão da lua.
O
jogo se passa em 10 dias, podendo o jogador efetuar 10
ações por dia. Portanto, sempre que ele olhar para
a lua, pra ver o quanto falta para terminar o tempo, estará
recebendo a mesma mensagem, definida no script lua.scp.
Vamos mudar isso.
//===
Situação atual da lua ======================
setmode= 4,900,420
cleartela
cleartxt
ifobj# pergaminho,jog,Cont
setshpobj= pergaminho,perga2.png
:Cont
gosub comum
shape= lua0.png,100,0,700,220
//montar o nome do arquivo que mostra a lua
reg= 1,5
reg= 0,lua
reg$ 0,#1
reg$ 0,.png
shape= #0,190,30,130,130
reg= 0,1
reg? 0,10
if= 0,1,reg=,4,O dia fatídico está chegando...
if= 0,2,reg=,4,A luz da lua queima minha visão...
if= 0,3,reg=,4,Que luão^ heim?
if= 0,4,reg=,4,Mais cedo ou mais tarde teremos lua cheia...
if= 0,5,reg=,4,Aaauuuuuuuuuuuuuuuuuuuuuu...
if= 0,6,reg=,4,O tempo está passando...
if= 0,7,reg=,4,Essa lua me chama...
if= 0,8,reg=,4,Sentimento selvagem ao olhar essa lua...
if= 0,9,reg=,4,Em breve ela estará manchada de
sangue!
if= 0,10,reg=,4,A lua de sangue se aproxima...
printx #4,100,230,700,190
shape= tic.gif,100,390,20,30
shape= ret.gif,130,390,140,30,xvlt
Note
o esquema de preparar o registrador zero para receber um
valor aleatório entre 0 e 10, via instrução
reg?. Em seguida sorteamos
que frase mostrar ao jogador, para que o jogo não fique repetitivo.
Ela será colocada no registrador 4 e então
mostrada via instrução printx.
Outra
questão importante: quando o jogo é executado pela
primeira vez, os objetos recebem os valores constantes na definição
de situação inicial mas ao ser reiniciado,
executando novamente o script start.scp,
será preciso informar ao sistema, via instrução
reset, para repor esse valores
iniciais.
//===
Script inicial ========================
setmode= 4,900,420
reset objs
//- Indica o dia atual da partida
O
primeiro parâmetro (objs)
indica que o reset se dará com os objetos e se não
houver um segundo parâmetro, todos os objetos serão
resetados. Se houver um segundo parâmetro e ele for o nome
de um objeto, então apenas esse objeto será
resetado.
Agora
precisamos definir o que acontece quando o décimo
dia termina, sem que a maldição tenha sido quebrada,
ou seja, o jogador vira lobisomem. Usamos o script saida.scp
para deixar o jogador decidir se joga novamente ou não. Com
um pequeno truque, usando o registrador 5 como buffer
de mensagem, podemos fazer esse script dar ao jogador uma mensagem
específica.
//===
Procedimentos de finalização do jogo ========
setmode= 4,900,420
clearscreen
cleartxt
shape= aber.png,100,0,700,326
reg$ 5,Quer jogar novamente?
printx #5,100,350,700,30
reg= 5,
shape= tic.gif,100,390,20,30
shape= sim.gif,130,390,60,30,start
shape= nao.gif,200,390,60,30,final
Desta
forma, no script comum.scp, onde acontece a contagem de tempo, colocamos
o desvio final.
//===
Procedimentos comuns a posições ==============
shape= menu.gif,840,0,45,69,menu
shape= sair.png,840,350,45,69,final
dispobj= jog,,10,10,80,400,1
dispobj= loc,,810,90,80,240,1
reg- 2,1
ifreg= 2,0,FimDoDia
return
:FimDoDia
reg= 2,10
reg+ 1,1
ifreg= 1,11,VirouLobo
script dormir
:VirouLobo
reg= 5,Não foi possível quebrar a maldição.~
script saida
Agora
faremos a segunda alternativa, ou seja, o jogador quebra a maldição.
Em primeiro lugar ele precisa da estatueta do lobo e na inicialização
ela está no limbo dos objetos, Desta forma, o objeto não
está no jogo e só estará disponível
no oitavo dia.
Esta
questão pode ser resolvida no script intro.scp,
que colocará a estatueta dentro do buraco, perto da árvore.
//===
Introdução e apresentação do jogo ===========
setmode= 4,900,420
retscp= intro
clearscreen
cleartxt
ifreg= 1,1,Dia1
ifreg= 1,2,Dia2
ifreg= 1,3,Dia3
ifreg= 1,4,Dia4
ifreg= 1,5,Dia5
ifreg= 1,6,Dia6
ifreg= 1,7,Dia7
ifreg= 1,8,Dia8
ifreg= 1,9,Dia9
ifreg= 1,10,Dia10
:Dia8
shape= aga.gif,100,6,18,19
'~~oje é o dia 8.'
poeobj= lobo,dentrobur
goto Saida
Para
piorar a situação, ela só poderá ser
quebrada diante da árvore maldita. ou seja, em nenhuma outra
posição isso terá o efeito desejado. Desta
forma, o script lobo.scp conterá a solução
para a finalização "boa" do jogo.
//===
Objeto: lobo =================
setmode= 4,900,420
cortxt= FF0000
cleartela
cleartxt
gosub comum
shape= lobo.png,100,0,358,358,
'O Lobo na Floresta
§§Estatueta de um lobo uivando, esculpida
em
madeira. Segundo algumas tradições antigas
essas
peças possuem um poder místico e geralmente
são
atribuidas a elas toda sorte de maldições.'
reg= 3,lobo
temos? lobo,VoceTem
' §§Você pode @pegar|pegar| a estatueta.'
goto Cont1
:VoceTem
' §§Você pode @soltar|soltar| a estatueta.'
ifloc#
arvore,Cont1
' §§Ou @quebrá-la|quebrar|, para desfazer
a
maldição.'
:Cont1
printx $,460,10,240,400
shape= tic.gif,100,390,20,30
shape= ret.gif,130,390,140,30,xvlt
fim
Note
que ao "ter" o objeto e logo após dar a opção
de soltá-lo, o sistema verifica se o jogador não
está na posição da árvore.
Se estiver, então ele libera o script quebrar.scp
para ser executado.
//===
Quebrar a estatua do lobo ==================
reg= 5,Parabéns^ a maldição foi
quebrada.~
script saida
Estamos usando o registrador 5 para complementar a frase
"Quer jogar novamente?" e neste caso a frase de
parabenização tem uma vírgula. Porém,
nas instruções a vírgula é usada como
delimitador de campo e portanto teremos que usar o caracter "^"
no seu lugar.
Agora
só falta o pergaminho ser colocado no jogo e faremos isso
no quinto dia, dando uma dica de que ele contém instruções
do que fazer, para quebrar a maldição.
|