• Nenhum resultado encontrado

28.5 Usando Variáveis

No documento Levelord - Doom Bible (páginas 72-79)

Uma das coisas legais de se fazer com o ZDoom são as variáveis, elas são simples e podem gerar efeitos complexos e bem divertidos em um mapa.

Por exemplo, é possível fazer uma variável em que o jogador precise ativar 5 alavancas para que uma porta se levante, e se alguém tentar abrir essa porta antes de ter ativado as 5 alavancas, a porta

‘fala’ que você deve ativar essas alavancas.

Guia do Levelord – Black Edition

Esse ‘int;’ será o comando para definir uma variável, você pode usar qualquer nome para ela por exemplo, vamos usar o exemplo das 5 alavancas, vamos colocar o nome da nossa variável de ‘alavacnt’.

#include "zcommon.acs" int alavacnt;

script 1 (void) ou script 1 open {

commandos // Aqui serão colocados os comandos }

Já definimos nossa variável, ela tem o valor 0 (zero), isso significa que ela não está ativada, e também significa que enquanto ela não estiver com o valor 1, ela estará executando outros comandos.

Não entendeu? Fique calmo, eu explico.

O ACS trabalha com variáveis da seguinte maneira:

Basicamente enquanto a variável ‘X’ não estiver com seu valor verdadeiro (TRUE), serão ativados os comandos falsos (FALSE). Em um script quando escrevemos uma variável e ela não está sendo usada, ela não tem valor nenhum, isso quer dizer que ela não tem nem mesmo o valor 0 (zero), significa também que ela não será utilizada, enquanto não for chamada por um script.

Para usá-la em um script você deve lembrar que o ZDoom trabalha com operadores lógicos, isso significa que você vai basicamente trabalhar com operações matemáticas. Ou seja, se você é péssimo em matemática, não use variáveis!!!

Lembra-se que ela não está ativa porque não estamos usando-a em um script? Então vamos usá-la, para usá-la vamos fazer o seguinte script:

// Esses traços aqui são comentários, nos deixamos isso no script para // que eles ajam como notas para programadores ou pessoas que queriam // modificar o script. Eles não influenciam nas ações em si

#include "zcommon.acs"

// Aqui a variável está sendo definida int alavacnt;

// Esse script irar executar antes do mapa abrir script 1 (open)

{

{if (alavacnt==5); // Se o contador for igual a 5 ativação OK door_open(12,5,13); acs_terminate(1,0); } else { delay(16); restart; } }

Parece um monte de numero sem conexão não é mesmo? Mas a engine irá identificar esses valores e interpretar o conteúdo do script. Observe como isso funciona. Quando colocamos esse ‘IF’ a engine lê o script da seguinte maneira:

Guia do Levelord – Black Edition

door_open(12,5,13); acs_terminate(1,0);

Lembra-se que era só para quando o jogador ativar as 5 alavancas que a porta deveria abrir? Pois o ‘door_open’ só é ativado quando as 5 alavancas forem ativadas, o ‘acs_terminate’, irá terminar o script dessas alavancas assim que elas estiverem ativadas, assim você não corre o risco de ter erros.

Mas o que acontece se as alavancas não estiverem ativadas? Simples! Você lembra que no meio daquele script tem um ‘else’ (equivalente a ‘se não’). Ele funciona da seguinte maneira, lembra-se que no ‘script 1’ tinha o contador de alavancas, e que se o valor delas não estivesse em 5 a porta não iria abrir, então o else funciona em uma variável da seguinte maneira.

//Se as 5 alavancas não estiverem ativadas execute esses comandos else {

delay(16); restart; }

}

Entendeu ? Não?? Calma que eu explico.

Esse ‘delay’ é um intervalo para que o ZDoom possa calcular o script, se não houvesse esse intervalo o script sairia correndo ‘literalmente’ e iria ocasionar um erro. O infame ‘Runaway Script’.

O ‘restart’ indica que o script deve ser executado várias vezes para que assim a engine possa trabalhar com a variável.

Bom você se lembra que nossa variável esta com valor 0 (FALSE) e que precisamos começar a colocar valores nela certo? Então como fazer? Simples! Com os operadores lógicos, recapitulando que o ZDoom trabalha com os seguintes operadores lógicos:

= atribua o valor na variável. A = 1;

+ = adicione ao valor já na variável. A + = 1; Isso é o mesmo A = A + 1. - = subtraia do valor já na variável. A - = 1; Isso é o mesmo A = A - 1. * = multiplique ao valor já na variável. A * = 2; Isso é o mesmo A = A * 2. * = divida pelo valor já na variável. A/= 2; Isso é o mesmo A = A/2.

% = atribua o restante (módulos) à variável. Um % = 3; Isso é o mesmo que A = A % 3. + + adiciona 1 ao valor já na variável. A++; Este é o mesmo A = A + 1.

- - subtraia 1 do valor já na variável. Um --; isto é o mesmo A = A - 1.

Então o que temos que fazer é que a somatória da nossa variável chegue até 5, assim a porta se abre! E para fazer isso vamos usar o operador lógico ‘+=’ assim ele soma valores na nossa variável. Para fazer com que a nossa variável ganhe valores vamos definir o ‘script 2’.

script 2 (void) {

alavacnt+=1; }

Guia do Levelord – Black Edition

#include "zcommon.acs" //definindo a variável int alavacnt;

script 1 (open)

//se a variável estiver com valor 5 executar esses comandos {

{if (alavacnt==5); door_open(12,5,13); acs_terminate(1,0); }

// caso não esteja executar esses comandos else {

delay(16); restart; }

}

//somando valores na variável script 2 (void) { alavacnt+=1; } script 3 (void) { alavacnt+=1; } script 4 (void) { alavacnt+=1; } script 5 (void) { alavacnt+=1; } script 6 (void) { alavacnt+=1; }

Assim que a variável estivesse com valor 5 todos os comandos abaixo dela seriam ativados, no nosso caso uma porta seria aberta, e esse script seria encerrado.

Bom isso é tudo que precisamos, mas vamos deixar as coisas mais interessantes.

Você pode usar mais de 1 script do tipo ‘OPEN’ no seu WAD, então que tal fazermos o seguinte, cada vez que o jogador ativar os scripts que somam valores na nossa variável uma mensagem diz quantas alavancas ou quantas ativações faltam?

Você se lembra que a nossa variável começa com valor 0 (zero), e que só quando ela alcançar o valor 5 é que a porta será aberta, então vamos colocar um script para que a cada vez que ela receber um valor, ela faça algo, usando a mesma variável.

Guia do Levelord – Black Edition

script 6 open {

{if (alavacnt==1);

print(s:"4 activations left"); acs_terminate(6,0); } else { delay(16); restart; } }

Esse script manda uma mensagem (print) sempre que a alavanca estiver com um valor 1, lembra que a porta só abre quando tiver com o valor 5, então apenas coloque vários scripts antes da variável tomar o valor 5.

script 6 open {

{if (alavacnt==1);

print(s:"4 activations left"); acs_terminate(6,0); } else { delay(16); restart; } } script 7 open { {if (alavacnt==2);

print(s:"3 activations left"); acs_terminate(7,0); } else { delay(16); restart; } } script 8 open { {if (alavacnt==3);

print(s:"2 activations left"); acs_terminate(8,0);

} else { delay(16);

Guia do Levelord – Black Edition

{if (alavacnt==4);

print(s:"1 activations left"); acs_terminate(9,0); } else { delay(16); restart; } }

Observe que a cada vez que a pessoa colocar um valor na variável as mensagens aparecem! Se quiser colocar um script onde a pessoa fica sabendo quantas ativações faltam apenas copie e cole esse script abaixo. O script esta limitado a 5 ativações mas você pode mudar isso, ele está devidamente comentado, isso irá ajudá-lo a lembrar-se de substituir os comandos de acordo com os rótulos e valores que você quer.

//Switch Script //by [DBR]Megamanx3 #include "zcommon.acs" //identificando a variável int alavacnt;

//limite de ativações, se quiser mude para a quantidade que quiser na linha //{if (alavacnt==5);

//Lembre-se de que mudando a quantidade você terá que colocar mais scripts. script 1 open { {if (alavacnt==5); print(s:"seguence complete"); door_open(tag,speed,amount); // door_open(rotulo,velocidade,quantidade) acs_terminate(1,0); } else { delay(16); restart; } } script 2 open { {if (alavacnt==4);

Guia do Levelord – Black Edition

}

script 3 open {

{if (alavacnt==3);

print(s:"two activations left"); acs_terminate(3,0); } else { delay(16); restart; } } script 4 open { {if (alavacnt==2);

print(s:"three activations left"); acs_terminate(4,0); } else { delay(16); restart; } } script 5 open { {if (alavacnt==1);

print(s:"four activations left"); acs_terminate(5,0); } else { delay(16); restart; } }

Esse é o script que insere valores na variável, coloque esse script nas linhas que o jogador deve ativar.

script 6 (void) { alavacnt+=1 }

Guia do Levelord – Black Edition

29 - Criando um Script

No documento Levelord - Doom Bible (páginas 72-79)

Documentos relacionados