Usando ACS global [tutorial]

Mapas, Editores e tudo mais relacionado a Edição de DooM você encontra aqui.
Regras do fórum
LEIA COM ATENÇÃO
Antes de postar alguma dúvida utilize a função de pesquisar do fórum, pois a sua dúvida talvez já tenha sido respondida!
Avatar do usuário
Ravick
Mensagens: 1135
Registrado em: Seg Nov 30, 2009 2:58 pm
Answers: 0
14
Contato:

Usando ACS global [tutorial]

Mensagem por Ravick »

Bom, depois que aprendi a usar "scripts globais" nos meus pwads, resolvi criar um tutorial em português pra facilitar a quem quiser aprender também.

Links:

LOADACS - http://zdoom.org/wiki/Global_ACS
Bibliotecas - http://zdoom.org/wiki/Libraries
BEHAVIOR - http://zdoom.org/wiki/BEHAVIOR
ACC - http://zdoom.org/wiki/ACC (download: http://www.zdoom.org/download.html)

O que se chama de "script global", ou "global ACS", são os scripts que a gente cria e que são carregados em todos os mapas do nosso wad, sem que a gente precise escrevê-los no Doom Builder durante a criação dos mapas. Aliás, mesmo que você jogue os mapas originais dos iwads, eles também serão carregados.

Para isso é, óbvio, indispensável saber escrever os scripts ACS. Se você ainda não sabe usar, este tutorial será de pouca ajuda no momento. Também é preciso ter alguma noção de como criar lumps dentro dos wads, e saber usar programas como o Slumped.

LOADACS

A primeira coisa a saber é que o lump onde a gente diz ao jogo quais os lumps que têm os nossos scrpits é chamado de "LOADACS". Cada vez que um mapa é aberto no ZDoom e seus derivados, o jogo olha se tem alguma ordem para ele no LOADACS. A sintaxe dentro dele é muito simples: Basta escrever o nome do lump onde está o nosso script.

Por exemplo, no meu pwad eu os escrevi num lump chamado "JOGADOR", então dentro do meu LOADACS está escrito apenas:

JOGADOR

Simples, ahn? Agora vamos ao lump de scripts propriamente dito.

BIBLIOTECAS, ou LIBRARIES

As bibliotecas são os lumps onde nós escrevemos os scripts de verdade. Você pode fazer quantas bibliotecas quiser/precisar, apenas precisará escrever o nome de toodas elas no LOADACS.
Porém, elas precisam estar entre markers chamados "A_START" e "A_END" (da mesma forma que fazemos com sprites e texturas, por exemplo). Se alguma biblioteca estiver fora destes markers, não vai ser carregada pelo jogo.
(Importante: AS BIBLIOTECAS devem ficar entre estes markers, mas o LOADACS NÃO PODE estar entre eles.)

Escrever as bibliotecas é exatamente como escrever os scripts dos mapas. A única diferença é que no comecinho a gente sempre deve escrever o seguinte:

#include "zcommon.acs"
#library "NOMEDABIBLIOTECA"


Por exemplo, eu fiz um para que a health do jogador subisse 1 ponto por segundo sempre caísse abaixo de 20, mas ainda acima de 0:


#include "zcommon.acs"
#library "JOGADOR"

Script 999 ENTER
{
If (CheckInventory("Health") < 20)
{
delay (1);
If (CheckInventory("Health") > 0)
{
GiveInventory("Health",1);
}
}
Else
{
Delay(1);
}
Delay(35);
Restart;
}


Com esse script, a health do jogador aumenta 1 ponto por segundo sempre que estiver abaixo de 20, exceto se ele morrre (se for zero). Eu poderia fazer o mesmo efeito simplesmente colocando esse script dentro de cada um dos mapas. Mas, escrevendo num ACS global, só foi preciso fazê-lo uma única vez. (IMPORTANTE: Os números dos scripts das bibliotecas não podem coincidir com nenhum dos que a gente usa nos mapas. Por isso convém usar valores bem altos, que a gente nunca vai usar num mapa. Note que o meu foi 999)

Simnples, né? Mas tem um porém:

Se você já criou mapas no Doom Builder e depois abriu o wad no Slumped ou afins, já deve ter visto que nossos scripts aparecem num lump chamado "SCRIPTS". E provavelmente pensou que o jogo lesse ali os nossos scripts para poder executá-los. Mas isso não funciona assim: Esse lump serve apenas para o Doom Builder poder mostrar os scripts para a gente de novo, quando abrimos um mapa nele. O Zdoom/jogo vai ler os scripts dentro de um lump chamado BEHAVIOR, que é a mesma coisa que o SCRIPTS, só que compliado.

Compilação

A Source Port entende os nossos scripts apenas depois de compilados. Quando a gente salva ou testa o mapa que está criando no DB, ele compila automaticamente os nossos scripts e gera o lump BEHAVIOR. Os scripts globais, por outro lado, a gente escreve na mão mesmo, e não tem o DB para compilar. Por isso a gente precisa de um programa para isso.

O Doom Builder, ao ser instalado, contém uma versão do compilador ACC. A gente pode usar este também, mas convém baixar a versão mais recente (link no começo do tutorial). Depois de baixar, você descompacta e instala normalmente o ACC em qualquer lugar.

Aí, no Slumped, você vai no lump onde escreveu os scripts, a biblioteca, (no meu caso, o JOGADOR) e clica nele com o botão direito -> "compile ACS". (Ao ser usado pela primeira vez, você tem que dizer ao Slumped onde o ACC está instalado, óbvio.) Você não precisa sair do Slumped para usar o ACC (e, assim, também nem precisa saber usar o ACC, pois o Slumped faz isso).

Então o seu lump será compilado. Se houver algum erro de ACS, o programa vai te avisar (igualzinho a como é no DoomBuilder) e aí é só arrumar e mandar compilar de novo. Quando a compilação stivr pronta, vai aparecer no Slumped, logo abaixo do lump que você mandou compilar, outro com o mesmo nome, só que um pouco menor e no qual se lê apenas "ACS" quando se clica nele. Aí estão os teus scripts compilados. Aí é só jogar e se divertir! :D

Note que ficam dois lumps dentro dos markers: O com os scripts escritos e o com eles compilados. Depois da compilação (a menos que você vá escrever mais scripts ainda, óbvio) o lump onde escrevemos é totalmente inútil, e pode ser deletado. PORÉM, é bastante "polido" deixá-lo ali, para que outros modders possam ver o que vocês fizeram e aprender também. (P. ex.: Eu aprendi lendo os do LOS).

Se depois você quiser acrescentar mais scripts ou funções ao ACS global, isso pode ser feito de duas formas: Ou você cria outro lump para escrevê-los e incluí o nome dele no LOADACS, ou então você escreve no mesmo lump (eu estou escrevendo tudo no JOGADOR, p ex) e o compila novamente. Note que se você compilar de novo este mesmo lump, ele vai gerar um novo lump compilado, mas não vai deletar o anterior. A gente precisa, então, tirar o lump compilado velho de dentro dos markers (ou mesmo deletá-lo).

Esse meu exemplo foi bastante simples, e poderia ser reproduzido colando o mesmo script em todos os mapas, mas tem coisas mais complexas que exigem o uso de funções (http://zdoom.org/wiki/Functions) e variáveis globais, ou mesmo a interação entre variáveis entre os mapas. Para essas coisas, o ACS Global é indispensável.

E aí, ficou fácil de entender? :B
Mandamento ravickista: Faz o que tu queres, desde que não me enchas o saco!
Avatar do usuário
Thel
Mensagens: 744
Registrado em: Qua Dez 24, 2008 3:21 am
Answers: 0
15
Localização: E1M1

Re: Usando ACS global [tutorial]

Mensagem por Thel »

8D, muito bom o tutorial!
Avatar do usuário
Logan MTM
Mensagens: 2895
Registrado em: Dom Dez 11, 2005 8:12 pm
Answers: 0
18
Localização: Rio de Janeiro - Brasil
Contato:

Re: Usando ACS global [tutorial]

Mensagem por Logan MTM »

Show de bola. Obrigado pela referencia. ^^
Avatar do usuário
Ravick
Mensagens: 1135
Registrado em: Seg Nov 30, 2009 2:58 pm
Answers: 0
14
Contato:

Re: Usando ACS global [tutorial]

Mensagem por Ravick »

Uai, obrigado por deixar tudo claro lá no LOS para quem quisesse aprender! :D
Mandamento ravickista: Faz o que tu queres, desde que não me enchas o saco!
Avatar do usuário
Lord DooM1.666
Mensagens: 1169
Registrado em: Qui Jan 10, 2008 9:19 pm
Answers: 0
16
Localização: Pernambuco - Brasil

Re: Usando ACS global [tutorial]

Mensagem por Lord DooM1.666 »

Adorei Simba azul! xD
Imagem
Playing:

Xbox: Ninja Gaiden Black / Mortal Kombat Deception
(Gemei)Snes: Black Thorne / Biker Mice from Mars
(Gemei)Genesis: Shadow Dancer / Road Rash
PC: Infernal / El Matador

Voltar para “Dúvidas e tutoriais”