<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>https://wiki.brdoom.org/index.php?action=history&amp;feed=atom&amp;title=A_quick_beginner%27s_guide_to_ACS</id>
	<title>A quick beginner&#039;s guide to ACS - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.brdoom.org/index.php?action=history&amp;feed=atom&amp;title=A_quick_beginner%27s_guide_to_ACS"/>
	<link rel="alternate" type="text/html" href="https://wiki.brdoom.org/index.php?title=A_quick_beginner%27s_guide_to_ACS&amp;action=history"/>
	<updated>2026-04-15T07:52:01Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.brdoom.org/index.php?title=A_quick_beginner%27s_guide_to_ACS&amp;diff=88&amp;oldid=prev</id>
		<title>MegaManx3: Criou página com &#039;Este tutorial vai guiar você na criação dos seus primeiros scripts ACS, e espera-se que seja útil se você é novo em ACS básico. Presume-se que você já conhece alguns fundamentos de mapeamento e que esteja usando o formato de mapa Hexen ou UDMF.  ==Criando um script==  Abra o Doom Builder e crie um novo mapa (chame-o de MAP01) no formato ZDoom (Doom in Hexen). Crie um setor e coloque um Player 1 Start.  ====Para GZDoom Builder:==== Procure por...&#039;</title>
		<link rel="alternate" type="text/html" href="https://wiki.brdoom.org/index.php?title=A_quick_beginner%27s_guide_to_ACS&amp;diff=88&amp;oldid=prev"/>
		<updated>2026-02-05T00:55:13Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;Este tutorial vai guiar você na criação dos seus primeiros scripts ACS, e espera-se que seja útil se você é novo em &lt;a href=&quot;/index.php/ACS&quot; title=&quot;ACS&quot;&gt;ACS&lt;/a&gt; básico. Presume-se que você já conhece alguns fundamentos de mapeamento e que esteja usando o formato de mapa &lt;a href=&quot;/index.php?title=Map_format&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Map format (página inexistente)&quot;&gt;Hexen ou UDMF&lt;/a&gt;.  ==Criando um script==  Abra o Doom Builder e crie um novo mapa (chame-o de MAP01) no formato ZDoom (Doom in Hexen). Crie um setor e coloque um Player 1 Start.  ====Para GZDoom Builder:==== Procure por...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Este tutorial vai guiar você na criação dos seus primeiros scripts ACS, e espera-se que seja útil se você é novo em [[ACS]] básico. Presume-se que você já conhece alguns fundamentos de mapeamento e que esteja usando o formato de mapa [[map format|Hexen ou UDMF]].&lt;br /&gt;
&lt;br /&gt;
==Criando um script==&lt;br /&gt;
&lt;br /&gt;
Abra o Doom Builder e crie um novo mapa (chame-o de MAP01) no formato ZDoom (Doom in Hexen). Crie um setor e coloque um Player 1 Start.&lt;br /&gt;
&lt;br /&gt;
====Para GZDoom Builder:====&lt;br /&gt;
Procure por &amp;quot;Script Editor&amp;quot;, encontrado na barra de ferramentas principal/no menu &amp;quot;View&amp;quot;, ou pressionando F10.&lt;br /&gt;
&lt;br /&gt;
====Para versões mais antigas do Doom Builder:====&lt;br /&gt;
Vá ao menu &amp;quot;Scripts&amp;quot; e escolha &amp;quot;Edit BEHAVIOR Lump&amp;quot;. Você deve ver um botão chamado &amp;quot;Make New Script&amp;quot;. Clique nele.&lt;br /&gt;
&lt;br /&gt;
==A estrutura de um script==&lt;br /&gt;
&lt;br /&gt;
Aqui está a estrutura de um script básico:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;zcommon.acs&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 script &amp;lt;identificador do script&amp;gt; &amp;lt;tipo de script&amp;gt; (&amp;lt;argumentos do script&amp;gt;)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;lt;instrução&amp;gt;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Vamos quebrar os componentes textuais do script, ou seja, sua &amp;#039;&amp;#039;sintaxe&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
* #include &amp;quot;zcommon.acs&amp;quot;&lt;br /&gt;
** Coloque isso como a primeira linha do script, copiado exatamente. Isso importa dados ACS para o script compilar e executar com sucesso.&lt;br /&gt;
* &amp;lt;identificador do script&amp;gt;&lt;br /&gt;
** Cada script tem um identificador, que será um número ou um &amp;quot;nome entre aspas&amp;quot; (chamado de string). &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Nota: todos os scripts numerados devem estar entre 1 - 32767.&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;tipo de script&amp;gt;&lt;br /&gt;
** Cada script tem um tipo, que em geral determina quando ele será executado automaticamente. Veja [[Script types]] para a lista de tipos disponíveis.&lt;br /&gt;
* (&amp;lt;argumentos do script&amp;gt;)&lt;br /&gt;
** Scripts podem aceitar valores chamados argumentos quando executados. Isso é como passar valores para uma função. Nem todos os tipos de script precisam de argumentos. Eles devem ficar entre parênteses.&lt;br /&gt;
* {&lt;br /&gt;
** Todo o código do script deve ficar {entre chaves}.&lt;br /&gt;
* &amp;lt;instrução&amp;gt;;&lt;br /&gt;
** Isso seria o código que o script executa. Cada linha de código precisa terminar com ponto-e-vírgula; caso contrário, o compilador vai gerar erro. Ele não “lê” quebras de linha como um humano.&lt;br /&gt;
* }&lt;br /&gt;
** Lembre-se de colocar a chave de fechamento para marcar o fim do script.&lt;br /&gt;
&lt;br /&gt;
==Primeiro script de exemplo==&lt;br /&gt;
Aqui está o primeiro exemplo de script que vamos criar, que exibirá a mensagem &amp;quot;Hello World!&amp;quot; na tela do jogador quando ele entrar no mapa pela primeira vez:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;zcommon.acs&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 script 1 {{SType|Enter}} &lt;br /&gt;
 {&lt;br /&gt;
     [[print]](s:&amp;quot;Hello World!&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Este script será identificado como script 1. Ele tem o tipo {{SType|ENTER}}, que executa quando um jogador &amp;#039;&amp;#039;entra&amp;#039;&amp;#039; no mapa pela primeira vez. Scripts ENTER não precisam de argumentos.&lt;br /&gt;
&lt;br /&gt;
==A instrução print()==&lt;br /&gt;
&lt;br /&gt;
No exemplo acima, é usada a instrução/função [[print]](). A instrução print permite exibir uma mensagem na tela do jogador.&lt;br /&gt;
&lt;br /&gt;
A sintaxe do print é assim:&lt;br /&gt;
 &lt;br /&gt;
 print(&amp;lt;tipo de cast&amp;gt;:&amp;lt;expressão&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
Quebra da sintaxe:&lt;br /&gt;
* print(&lt;br /&gt;
** &amp;lt;code&amp;gt;print&amp;lt;/code&amp;gt; é o nome da função a ser executada (chamada) nesta linha, e toda chamada de função deve ser seguida por parênteses. O print exige argumentos dentro dos parênteses.&lt;br /&gt;
* &amp;lt;tipo de cast&amp;gt;:&lt;br /&gt;
** O conteúdo da mensagem precisa ser interpretado com um código de letra. Por enquanto, você pode usar &amp;lt;code&amp;gt;s:&amp;lt;/code&amp;gt; para texto (strings) ou &amp;lt;code&amp;gt;d:&amp;lt;/code&amp;gt; para exibir números de variáveis (explicado mais adiante). Veja [[print]] para todas as possibilidades.&lt;br /&gt;
* &amp;lt;expressão&amp;gt;&lt;br /&gt;
** Contém o conteúdo da mensagem a exibir. Texto deve ficar entre &amp;quot;aspas&amp;quot;.&lt;br /&gt;
* );&lt;br /&gt;
** Certifique-se de colocar o parêntese final e o ponto-e-vírgula.&lt;br /&gt;
&lt;br /&gt;
===Novas linhas===&lt;br /&gt;
&lt;br /&gt;
Para colocar uma nova linha dentro de uma string, adicione o texto &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt; dentro das aspas. Exemplo:&lt;br /&gt;
&lt;br /&gt;
 print(s:&amp;quot;Hello\nWorld!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Isso coloca a palavra &amp;quot;World!&amp;quot; na linha abaixo de &amp;quot;Hello&amp;quot;. O compilador não vai pegar a quebra de linha do seu editor e imprimir como você talvez espere; você precisa usar o código especial &amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Múltiplas expressões===&lt;br /&gt;
&lt;br /&gt;
Você também pode fornecer múltiplas expressões para o print, separadas por vírgulas. Exemplo:&lt;br /&gt;
&lt;br /&gt;
 print(s:&amp;quot;Hello&amp;quot;, s:&amp;quot; World!&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Essa é uma forma alternativa de imprimir &amp;quot;Hello World!&amp;quot; na tela. Garanta que o espaço esteja incluído nas aspas antes da palavra &amp;quot;World!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Segundo script de exemplo==&lt;br /&gt;
&lt;br /&gt;
Aqui está outro script que você pode adicionar depois do script 1:&lt;br /&gt;
&lt;br /&gt;
 script 2 (void)&lt;br /&gt;
 {&lt;br /&gt;
     [[print]](s:&amp;quot;Bye World!&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Diferente do script {{SType|ENTER}} do exemplo 1, este script não executa automaticamente quando o jogador entra no mapa e precisa ser executado explicitamente. &amp;lt;code&amp;gt;void&amp;lt;/code&amp;gt; dentro dos parênteses indica ao compilador que não há argumentos para este script; essa palavra-chave é &amp;#039;&amp;#039;&amp;#039;obrigatória&amp;#039;&amp;#039;&amp;#039; para qualquer script que não seja de um tipo especial e que não receba argumentos.&lt;br /&gt;
&lt;br /&gt;
Um script do tipo (void) provavelmente é o tipo mais comum. Você também pode usar scripts com argumentos, mas isso será discutido mais adiante.&lt;br /&gt;
&lt;br /&gt;
Para ativar um script (void), você precisa ter um [[thing]] com o [[Thing executed specials|special do thing]] configurado para [[ACS Execute|80: ACS_Execute]] (monstro morre, item/arma/powerup/chave é pego), ou um [[linedef]] cujo [[Action specials|special]] esteja configurado para [[ACS Execute|80: ACS_Execute]] (ao cruzar a linha, ao usar, ou quando um tiro acerta ou passa), ou ainda ativar a partir de outro script (você vai aprender isso depois).&lt;br /&gt;
&lt;br /&gt;
O primeiro argumento do [[Action specials|special]] [[ACS Execute|80: ACS_Execute]] deve ser &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, que executará o script 2 acima. Você pode deixar os outros argumentos como &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
É bem comum entre mappers colocar linedefs que você não percebe e que não bloqueiam o caminho. Essas linhas são usadas para scripting.&lt;br /&gt;
&lt;br /&gt;
==Variáveis==&lt;br /&gt;
&lt;br /&gt;
Esta seção vai ensinar variáveis e uso básico. Variáveis servem para armazenar dados (como um número) para uso posterior no script, semelhante à representação simbólica de números em álgebra.&lt;br /&gt;
&lt;br /&gt;
Exemplo:&lt;br /&gt;
&lt;br /&gt;
 script 3 (void) &lt;br /&gt;
 {&lt;br /&gt;
     int a = 9;&lt;br /&gt;
     [[print]](s:&amp;quot;a is &amp;quot;, d:a);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Este script faz duas coisas:&lt;br /&gt;
# Declara &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; como inteiro e define seu valor como 9.&lt;br /&gt;
# Imprime a string &amp;quot;a is &amp;quot; seguida do valor de a. Neste caso, o resultado seria &amp;quot;a is 9&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Quebra de sintaxe para declaração de variável:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;tipo de dado&amp;gt; &amp;lt;nome da variável&amp;gt; = &amp;lt;valor&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tipo de dado&amp;gt;&lt;br /&gt;
** O tipo de dado da variável. &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; é o mais comum, e representa um número inteiro. Existem outros tipos, listados em [[Data Types]].&lt;br /&gt;
* &amp;lt;nome da variável&amp;gt;&lt;br /&gt;
** O nome que a variável declarada vai usar. É melhor respeitar a capitalização do nome em cada lugar em que for usado.&lt;br /&gt;
* =&lt;br /&gt;
** Um valor inicial pode ser atribuído com o sinal de igual, embora não seja obrigatório.&lt;br /&gt;
*** Exemplo sem valor padrão: &amp;quot;int a;&amp;quot;&lt;br /&gt;
* &amp;lt;valor&amp;gt;&lt;br /&gt;
** O valor inicial da variável. Para &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, um número.&lt;br /&gt;
* ;&lt;br /&gt;
** Não esqueça o ponto-e-vírgula ao final de todas as instruções!&lt;br /&gt;
&lt;br /&gt;
Com inteiros, você pode fazer matemática básica (e também matemática mais avançada se programar corretamente).&lt;br /&gt;
&lt;br /&gt;
 script 3 (void)&lt;br /&gt;
 {&lt;br /&gt;
     int a = 9;&lt;br /&gt;
     int b = 17;&lt;br /&gt;
     [[print]](d:a + b);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Este script é um exemplo de soma básica. Ele declara &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; com valor 9, declara &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; com valor 17 e imprime o resultado de a + b. O cast &amp;lt;code&amp;gt;d:&amp;lt;/code&amp;gt; é usado para exibir um valor numérico no print. Como a é 9 e b é 17, ele imprime 26. Se você ativar o script durante o jogo, verá o número 26.&lt;br /&gt;
&lt;br /&gt;
Se você quisesse imprimir explicitamente o texto &amp;quot;9 + 17&amp;quot;, e não &amp;quot;26&amp;quot;, você poderia fazer assim:&lt;br /&gt;
&lt;br /&gt;
 script 3 (void) &lt;br /&gt;
 {&lt;br /&gt;
     [[print]](s:&amp;quot;9 + 17&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
O cast &amp;lt;code&amp;gt;s:&amp;lt;/code&amp;gt; é usado aqui porque ele imprime uma string em vez do valor de uma variável.&lt;br /&gt;
&lt;br /&gt;
===Operadores úteis de inteiro===&lt;br /&gt;
(Nos exemplos abaixo, a é 9 e b é 17)&lt;br /&gt;
* Atribuição: &amp;lt;code&amp;gt;a = b&amp;lt;/code&amp;gt;&lt;br /&gt;
** Define a variável &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; com o valor de &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, então &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; vira 17. Um único sinal de igual &amp;#039;&amp;#039;&amp;#039;NÃO&amp;#039;&amp;#039;&amp;#039; representa verificação de igualdade.&lt;br /&gt;
* Igualdade: &amp;lt;code&amp;gt;a == b&amp;lt;/code&amp;gt;&lt;br /&gt;
** Verifica se o valor de a é igual ao valor de b. Resulta em &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; se for verdadeiro, ou &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; se for falso. Neste caso, 0. Lembre-se: é necessário usar dois sinais de igual.&lt;br /&gt;
* Diferença: &amp;lt;code&amp;gt;a != b&amp;lt;/code&amp;gt;&lt;br /&gt;
** Igual ao de igualdade, mas resulta em &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; se os valores forem diferentes e &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; se forem iguais.&lt;br /&gt;
* Adição: &amp;lt;code&amp;gt;a + b&amp;lt;/code&amp;gt; == 26&lt;br /&gt;
* Subtração: &amp;lt;code&amp;gt;a - b&amp;lt;/code&amp;gt; == -8&lt;br /&gt;
* Multiplicação: &amp;lt;code&amp;gt;a * b&amp;lt;/code&amp;gt; == 153&lt;br /&gt;
* Divisão: &amp;lt;code&amp;gt;a / b&amp;lt;/code&amp;gt; == 0 &lt;br /&gt;
** O resultado não é 0,5294, porque divisão de inteiros “arredonda para baixo” e retorna outro inteiro.&lt;br /&gt;
** Dividir por 0 resulta em erro de script.&lt;br /&gt;
* Módulo: &amp;lt;code&amp;gt;a % b&amp;lt;/code&amp;gt; == 9 &lt;br /&gt;
** Dá o resto inteiro ao tentar dividir 9 por 17.&lt;br /&gt;
* Incremento unário: &amp;lt;code&amp;gt;a++&amp;lt;/code&amp;gt; == 10&lt;br /&gt;
** Soma 1 à variável. a + 1 == 10.&lt;br /&gt;
* Decremento unário: &amp;lt;code&amp;gt;a--&amp;lt;/code&amp;gt; == 8&lt;br /&gt;
* Parênteses: &amp;lt;code&amp;gt;(a + 1) * b&amp;lt;/code&amp;gt; == 170&lt;br /&gt;
** Valores podem ser agrupados entre parênteses. O que estiver entre parênteses é avaliado primeiro.&lt;br /&gt;
&lt;br /&gt;
Veja [[Operators]] para todos os operadores e mais informações.&lt;br /&gt;
&lt;br /&gt;
==Ações e parâmetros de script==&lt;br /&gt;
&lt;br /&gt;
Claro que existem outras possibilidades além de imprimir texto e números.&lt;br /&gt;
&lt;br /&gt;
Suponha que colocamos uma chave vermelha no mapa. No Doom vanilla, pegá-la só te dá a chave vermelha. Com ACS do ZDoom, você pode fazer a chave vermelha fazer muito mais! Você pode fazer a chave matar o jogador, dar a BFG9000, não fazer nada, ou levantar monstros mortos! Se você tiver duas chaves vermelhas, pode fazer cada uma fazer algo totalmente diferente!&lt;br /&gt;
&lt;br /&gt;
Crie um setor e coloque um Player Start e uma chave vermelha. Agora, dê à chave a ação especial [[ACS Execute|80: ACS_Execute]] com o número do script 1.&lt;br /&gt;
&lt;br /&gt;
Digite o código abaixo (note que ele não compilará porque faltam parâmetros de propósito):&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;zcommon.acs&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 script 1 (void) &lt;br /&gt;
 {&lt;br /&gt;
     [[Thing_Damage]]();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Agora, para a instrução [[Thing_Damage]], precisamos de parâmetros:&lt;br /&gt;
* tid: o TID do thing que você quer causar dano.&lt;br /&gt;
* amount: a quantidade de dano que o thing vai receber.&lt;br /&gt;
* mod: meio de morte. Determina a mensagem de óbito se um jogador morrer. Tipos de dano relevantes estão em [[Damage_types]].&lt;br /&gt;
&lt;br /&gt;
O primeiro parâmetro é quem queremos danificar. Como queremos danificar o jogador, precisamos de um jeito de &amp;#039;&amp;#039;identificar&amp;#039;&amp;#039; o jogador para o script: um [[TID|Thing ID (aka TID)]]. Muitas funções ACS não têm como referenciar um jogador sem TID definido, então vamos definir um TID no jogador com [[Thing_ChangeTID]].&lt;br /&gt;
&lt;br /&gt;
Use este script:&lt;br /&gt;
&lt;br /&gt;
 script 2 ENTER&lt;br /&gt;
 {&lt;br /&gt;
     [[Thing_ChangeTID]](0, 1000);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Quando o jogador entrar no mapa, nós vamos atribuir a ele um [[TID]] de &amp;#039;&amp;#039;&amp;#039;1000&amp;#039;&amp;#039;&amp;#039; (o segundo parâmetro). O primeiro parâmetro de [[Thing_ChangeTID]] é de quem mudar o TID; usamos &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; para referir ao ativador do script, que num script &amp;lt;code&amp;gt;ENTER&amp;lt;/code&amp;gt; é o jogador que entrou. Usar 0 como TID do ativador é comum em várias funções ACS, então vale guardar isso.&lt;br /&gt;
* Nota: TIDs de jogador começando em 1000 é um padrão bem comum, mas nem todos os mods seguem essa convenção (infelizmente)...&lt;br /&gt;
&lt;br /&gt;
Agora que o jogador tem um TID, podemos completar a chamada de Thing_Damage:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;zcommon.acs&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 script 1 (void) &lt;br /&gt;
 {&lt;br /&gt;
     [[Thing_Damage]](1000, 2, 0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Estamos causando dano ao jogador com TID &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt;, com &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; de dano, e o meio de morte padrão &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (gera um óbito genérico &amp;quot;Player died.&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Teste seu nível, pegue a chave vermelha e observe a vida. Ela vai diminuir ao pegar a chave.&lt;br /&gt;
&lt;br /&gt;
Veja esta página para mais ações utilizáveis: [[Action specials]]&lt;br /&gt;
&lt;br /&gt;
==Comentando seu código==&lt;br /&gt;
&lt;br /&gt;
Você pode adicionar notas ao lado do código do script (chamadas comentários). Você pode usá-las como quiser, mas elas são especialmente recomendadas para anotar comportamentos complexos ou o motivo de certas decisões.&lt;br /&gt;
&lt;br /&gt;
Você pode adicionar um comentário após uma linha de código com um espaço e duas barras, seguido por texto. Tudo depois das barras é ignorado pelo compilador e não é tratado como código até a próxima linha.&lt;br /&gt;
&lt;br /&gt;
Adicionando comentários a um exemplo anterior:&lt;br /&gt;
&lt;br /&gt;
 script 3 (void)&lt;br /&gt;
 {&lt;br /&gt;
     // Sou um comentário. Aqui é onde inicializamos as variáveis:&lt;br /&gt;
     int a = 9;&lt;br /&gt;
     int b = 17;&lt;br /&gt;
     [[print]](d:a + b); // Imprimir a soma de a e b&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Usando funções para fazer mudanças simples no mapa==&lt;br /&gt;
&lt;br /&gt;
Você pode usar funções ACS e ações de linedef para alterar um mapa, não só things.&lt;br /&gt;
&lt;br /&gt;
===Água simples e nadável===&lt;br /&gt;
&lt;br /&gt;
Para começar, abra o Doom Builder e crie um novo mapa no formato ZDoom (Doom in Hexen). Crie um setor quadrado de 512x512. Vamos chamar esse de setor &amp;quot;grande&amp;quot;. Coloque um Player 1 Start em algum lugar dentro dele.&lt;br /&gt;
&lt;br /&gt;
Crie um segundo setor &amp;quot;pequeno&amp;quot; de 64x64 dentro do primeiro:&lt;br /&gt;
# Abaixe o piso para &amp;lt;code&amp;gt;-64&amp;lt;/code&amp;gt; para parecer uma piscina vazia.&lt;br /&gt;
# Não esqueça de texturizar as bordas da piscina.&lt;br /&gt;
# Atribua a tag 1 a esse setor.&lt;br /&gt;
# Defina a textura do piso como &amp;lt;code&amp;gt;FWATER1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Depois disso, crie outro setor separado &amp;#039;&amp;#039;&amp;#039;fora&amp;#039;&amp;#039;&amp;#039; do setor grande, sem encostar nele. Esse será o setor &amp;quot;de controle&amp;quot;. O tamanho não importa (você pode mantê-lo pequeno para ficar mais fácil de mexer).&lt;br /&gt;
# Garanta que o teto desse setor tenha a mesma altura dos outros.&lt;br /&gt;
# Defina o piso para &amp;lt;code&amp;gt;-8&amp;lt;/code&amp;gt;&lt;br /&gt;
# Defina a textura do teto como &amp;lt;code&amp;gt;FWATER1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Edite qualquer linedef no setor de controle e atribua a ela a ação 209:[[Transfer_Heights]]. Transfer_Heights aceita dois parâmetros (tag do setor, efeito). Defina o primeiro parâmetro como 1 (tag 1) e o segundo como 8 (a parte submersa é nadável).&lt;br /&gt;
&lt;br /&gt;
Salve e rode o mapa. Se tudo estiver certo, você verá que a piscina está &amp;quot;cheia&amp;quot;... ou melhor, que a textura FWATER1 agora fica apenas 8 unidades abaixo do piso em vez de 64. Isso acontece porque a *altura* do setor de controle foi *transferida* para a piscina. Se você pular na piscina, deve conseguir nadar (ande para frente e mova o mouse para cima e para baixo. Você vai flutuar na água em vez de só olhar para cima e para baixo). Saia do mapa e volte ao Doom Builder.&lt;br /&gt;
&lt;br /&gt;
Agora queremos criar um script que adicione cor e neblina no setor de controle. Para o script funcionar, o setor de controle precisa de uma tag, então vamos dar a ele a tag 2. No script ACS, precisamos de duas funções: [[Sector_SetColor]]() e [[Sector_SetFade]](). Ambas aceitam os mesmos 4 argumentos (tag do setor, vermelho, verde, azul). Cada cor vai de 0 a 255, dependendo da intensidade. Exemplo: azul = 0 significa sem azul; azul = 255 significa azul no máximo.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;zcommon.acs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 // O tipo de script {{SType|OPEN}} executa uma vez quando o mapa carrega&lt;br /&gt;
 script 1 {{SType|OPEN}}&lt;br /&gt;
 {&lt;br /&gt;
     // vamos usar a tag do setor de controle, 2&lt;br /&gt;
     [[Sector_SetColor]](2, 0, 0, 205); // isso tinge o setor com azul&lt;br /&gt;
     [[Sector_SetFade]](2, 0, 0, 205); // isso cria um efeito de neblina azul&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Agora, quando você nadar na piscina, a parte submersa ficará azul escura e turva.&lt;br /&gt;
&lt;br /&gt;
===Porta abrindo sob condição===&lt;br /&gt;
&lt;br /&gt;
O próximo tutorial vai permitir criar uma porta que abre quando você mata um inimigo.&lt;br /&gt;
&lt;br /&gt;
Para isso, crie um novo mapa e faça duas salas ligadas por uma porta. A primeira sala deve ter um monstro, por exemplo um zombieman, e o Player 1 Start. Na outra sala pode haver um item como recompensa. A porta que conecta as duas salas não deve ter ações de linha (para você não conseguir abrir manualmente), mas precisa ter uma tag de setor. Defina a tag do setor da porta como &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vamos usar a função ACS [[Door_Open]]() para abrir a porta. Door_Open() aceita três argumentos:&lt;br /&gt;
* tag: tag do setor afetado; no nosso caso, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
* speed: a velocidade de abertura; use &amp;lt;code&amp;gt;64&amp;lt;/code&amp;gt; para abrir rápido&lt;br /&gt;
* lighttag: tag do setor para efeito gradual de luz; pode deixar &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 script 1 (void)&lt;br /&gt;
 {&lt;br /&gt;
     [[print]](s:&amp;quot;You killed a zombieman!&amp;quot;);&lt;br /&gt;
     [[Door_Open]](1, 64, 0); // Abrir o setor tag 1 como porta, velocidade 64&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Agora, para isso funcionar, precisamos dar ao zombieman um thing special. Neste caso, use 80:[[ACS_Execute]](). Defina o primeiro argumento como &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (script 1) e deixe os demais como &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Teste o mapa: a porta deve abrir ao matar o zombieman.&lt;br /&gt;
&lt;br /&gt;
==Controle de fluxo==&lt;br /&gt;
&lt;br /&gt;
===Execução condicional (if / else)===&lt;br /&gt;
&lt;br /&gt;
Podemos fazer uma verificação lógica num script para decidir entre diferentes trechos de código usando &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; e &amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Exemplo simples de &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 script 1 ENTER&lt;br /&gt;
 {&lt;br /&gt;
     int condition = 1;&lt;br /&gt;
     if(condition)&lt;br /&gt;
     {&lt;br /&gt;
         print(s:&amp;quot;The condition was true.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
O if usa seu próprio par de chaves para delimitar o bloco de código que ele controla. Garanta que cada chave de abertura tenha uma de fechamento e não confunda com as chaves do script.&lt;br /&gt;
&lt;br /&gt;
Isso vai executar o print porque definimos &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; como &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, que é “verdadeiro”. Qualquer valor numérico diferente de 0 conta como verdadeiro; 0 conta como falso.&lt;br /&gt;
&lt;br /&gt;
Se você mudar &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; para &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, o print não executa.&lt;br /&gt;
&lt;br /&gt;
Exemplo de else encadeado com if:&lt;br /&gt;
&lt;br /&gt;
 script 1 ENTER&lt;br /&gt;
 {&lt;br /&gt;
     int condition = 0;&lt;br /&gt;
&lt;br /&gt;
     if(condition == 0)&lt;br /&gt;
     {&lt;br /&gt;
         print(s:&amp;quot;The condition was 0.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     else if(condition == 1)&lt;br /&gt;
     {&lt;br /&gt;
         print(s:&amp;quot;The condition was 1.&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
     else&lt;br /&gt;
     {&lt;br /&gt;
         print(s:&amp;quot;The condition was something else entirely...&amp;quot;);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Tente mudar &amp;lt;code&amp;gt;condition&amp;lt;/code&amp;gt; para &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, depois &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, depois &amp;lt;code&amp;gt;123&amp;lt;/code&amp;gt;, e veja qual ramo executa.&lt;br /&gt;
&lt;br /&gt;
===Loops condicionais de repetição (while)===&lt;br /&gt;
&lt;br /&gt;
Um loop &amp;quot;while&amp;quot; faz a mesma coisa que um if, exceto que ele repete quando termina. O script para de repetir quando a(s) condição(ões) deixam de ser satisfeitas.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NOTA SOBRE LOOPS INFINITOS:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Um loop que deve rodar para sempre PRECISA conter pelo menos um [[Delay]]() com parâmetro 1 ou maior. Caso contrário, o ZDoom vai encerrar o script (um loop eterno sem pausas impede que o resto do mapa rode). Se isso acontecer, você verá uma mensagem como &amp;quot;Runaway script # terminated&amp;quot; no topo da tela.&lt;br /&gt;
&lt;br /&gt;
 script 1 OPEN&lt;br /&gt;
 {&lt;br /&gt;
     int i = 5;&lt;br /&gt;
     while(i &amp;gt; 0)&lt;br /&gt;
     {&lt;br /&gt;
         comando ou série de comandos que mudam i;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Esse while roda enquanto &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; for maior que 0.&lt;br /&gt;
&lt;br /&gt;
Se você quiser um while que nunca termine (por exemplo, para criar um efeito contínuo), pode usar uma expressão que nunca vira falsa:&lt;br /&gt;
&lt;br /&gt;
 script 1 OPEN&lt;br /&gt;
 {&lt;br /&gt;
     while({{const|TRUE}}) // Ou while(1), ou while(4 == 4), etc.&lt;br /&gt;
     {&lt;br /&gt;
         comandos&lt;br /&gt;
         ; // esperar 1 [[tic]] entre execuções do loop&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Nota: o operador de negação &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; pode ser usado para checar a falsidade de uma condição, exemplo: &amp;lt;code&amp;gt;!(true)&amp;lt;/code&amp;gt; (não verdadeiro), ou seja, falso.&lt;br /&gt;
&lt;br /&gt;
===Loops controlados por contagem (for)===&lt;br /&gt;
Um loop &amp;quot;for&amp;quot; repete um trecho do script um número definido de vezes:&lt;br /&gt;
&lt;br /&gt;
 script 1 (void)&lt;br /&gt;
 {&lt;br /&gt;
     for(int i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
     {&lt;br /&gt;
         [[log]](d:i);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Esse script imprime 0 a 9 no log do console.&lt;br /&gt;
&lt;br /&gt;
ACS usa o chamado for de três expressões, por causa das três partes:&lt;br /&gt;
# Inicializador &amp;lt;code&amp;gt;int i = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
# Teste do loop &amp;lt;code&amp;gt;i &amp;lt; 10&amp;lt;/code&amp;gt;&lt;br /&gt;
# Contador &amp;lt;code&amp;gt;i++&amp;lt;/code&amp;gt;&lt;br /&gt;
Cada expressão é separada por ponto-e-vírgula.&lt;br /&gt;
&lt;br /&gt;
Você não precisa declarar uma variável no inicializador, e dá para variar as expressões, mas esse exemplo é o uso típico.&lt;br /&gt;
&lt;br /&gt;
Na primeira iteração, &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; == 0, o teste &amp;lt;code&amp;gt;i &amp;lt; 10&amp;lt;/code&amp;gt; é verdadeiro e o código dentro do loop executa. Depois &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; é incrementado em 1 (por causa do i++) e a próxima iteração começa. Isso continua até &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; == 10, quando o teste &amp;lt;code&amp;gt;i &amp;lt; 10&amp;lt;/code&amp;gt; falha e o bloco interno não executa. A execução então segue após o for.&lt;br /&gt;
&lt;br /&gt;
==Referência adicional==&lt;br /&gt;
* Tutoriais de ACS nesta wiki: [[ACS]]&lt;br /&gt;
* Outros tutoriais: [[Tutorials]]&lt;br /&gt;
&lt;br /&gt;
* Action specials de ACS: [[Action_specials]]&lt;br /&gt;
* Funções de ACS: [[Built-in_ACS_functions]]&lt;br /&gt;
&lt;br /&gt;
[[category:ACS guides]]&lt;/div&gt;</summary>
		<author><name>MegaManx3</name></author>
	</entry>
</feed>