sábado, 7 de novembro de 2009

Passos Iniciais


Olá Pessoal... Sou fã da série desde agosto de 2001, e já no princípio, sempre gostei de mexer no editor do missões do OFP. E Aliás essa é a graça do jogo e por isso que jogo desde 2001: Sempre tem coisa nova.
E quero difundir o conhecimento entre os brazucas para que eu possa jogar uma missão sem saber o que está por vir.
Para entusiastas e profissionais de informática, o editor é um verdadeiro passatempo, possui instruções condicionais e de repetições, variáveis, matrizes, funções e scripts, mas para os jogadores, ele pode incomodar. Mas não há segredos.
A codemasters até que simplificou muito bem o editor, e pelo que pude notar, parece que houve uma grande evolução para a edição de scripts orientados por eventos. O conceito de trigger mudou também: agora você tem apenas as triggers zones (que só são ativadas por invasões de unidades), e todo o restante triggers de destroy, dammage e qualquer outro evento, passaram para funções de eventos, com OnDeath, OnDamage, OnLand, etc..
Para começarmos a editar missões, vamos partir dos elementos básicos da missão.
Neste tópico vamos tratar basicamente de:

- Editor
- Unidades e Grupos (Echelons)

- Waypoints

- Objetivos e Introdução a Scripts (Inevitavelmente)

• Editor

O Editor ficou mais complexo, lembrando muito uma ferramenta case de desenvolvimento gráfico, onde existem uma série de "palhetas" como mapa, objetos, propriedades, arquivos de script, e um editor de texto com sintax highlights próprias além de ferramentas como find, replace e autoedent.


É a mesma coisa de sempre: na Barra de Ferramentas Superior abaixo do Menu de Principal, você tem operações básicas de arquivos, edição, undo, redo, copy, paste, move, rotate, etc..
A Direita, na parte superior, estão a palheta de ferramentas de edição, onde você possui os "objetos" que podem ser criados (create) que estão divididos por categorias; você tem a o editor de entidades (que explicarei adiante); e o histórico de comandos (para vc poder desfazer aquela cagadinha)
A Direita, na parte inferior estão as palhetas de edição de propriedades em geral, tanto de objetos, como do ambiente missão, como das configurações da missão.
Não precisamos perder tempo em explicar os detalhes, mesmo porque ainda estou aprendendo (pra falar a verdade começei hoje). Além de que, a parte visual do editor é "intuitiva", as coisas estão muito bem descritas não precisando de maiores explicações.
Com o que falarei aqui, vocês mesmos podem fazer testes e ajudar a contribuir com as informações.
Segue apenas algumas dicas de atalhos:
-Clicar botão do roler você arrasta o mapa.
-Alt + Click Esquerdo(pressionado) em cima do objeto você rotaciona.
-Shift + Click Esquerdo(pressionado) em cima do objeto você espaça os objetos.
-Ctrl + Click Esquerdo em cima do objeto você seleciona mais de um objeto.

•Unidades e Grupos (Echelons)

Nosso próximo passo agora, é começar a missão com o mais elementar: as unidades.
Como é um pé-no-saco ficar recortando imagem, upando, ajustando texto e oscambau, eu vou fazer uma missão bem furreca de Invadir, Matar e Evacuar, e a morte será de um grupo de 4 soldados apenas. Irei selecionar qualquer local do mapa.

Na palheta de ferramentas de Edição, selecione a tab Create (abaixo da palheta), então selecione a categoria PLA (Chineses), e expanda a pasta Soldiers.



Selecione o soldado da lista que você queira colocar no mapa, e clique (não precisa arrastar) sobre o mapa. Ponha o soldado que você quiser. Os meus seguem abaixo:


Agora, para facilitar nossa vida, e não termos que futuramente alocar cada soldado em grupos de waypoints, é mais fácil agrupá-los todos em um grupo, e depois trabalhar somente com o grupo.
Para isso, existe um componente de sistema chamado Echelon, que nada mais é do que o antigo group do OFP. Claro que existe diferenças e bem melhores. Agora os groups estão divididos hierarquicamente em 3 grupos em ordem crescente de hierarquia: Fireteam, Squad e Platoon.
Um Grupo de Platoons pode possuir X grupos de Squads, que por sua vez pode possuir X grupos de Fireteams. Eu ainda não testei os limites. Sei apenas que em um Fireteam pode se apenas ter 5 soldados.
Enfim, adicione um Echelon, selecionando a categoria System, expandindo a pasta AI, selecionando o objeto Echelon e inserindo no mapa. Para linkar os soldados com o Echelon, pressione com o botao direito sobre o soldado e escolha a opção Pick Parent Echelon, e então selecione o Echelon Inserido


Depois de Linkar todos os soldados temos:


Agora, vamos adicionar os waypoints destes soldados. Novamente, eu aqui, irei fazer algo bem simples.
Para adicionar o waypoint, selecione a categoria System, expanda a pasta Mission e selecione o objeto Waypoint. E vá inserindo no mapa.
OBS: se você dá um clique e logo em seguida clica em outro lugar, os waypoints já saem linkados um no outro, mas caso você perca este link não tem problema, basta selecionar com o botão direito e selecionar Pick Next Waypoint e selecionar o próximo waypoint. Inclusive essa é a única forma de criar waypoints cíclicos (linkando o último com o primeiro).
Faça a rota como você preferir, e caso queira fazer waypoints cíclicos, como eu irei fazer, proceda conforme indicado acima.
Ficou então:


Isto, é uma vantagem do novo OFP: Os waypoints são objetos independentes dos grupos, e Isso possibilita que mais de um grupo(echelon) utilize os mesmos waypoints. Agora, resta apenas linkar o Echelon com o waypoint.
Para criar este link, clique com o botão direito sobre o Echelon criado e selecione a opção Pick Waypoint:




E por fim basta você clicar sobre o waypoint inicial, para ter:




Pronto. Minha patrulinha está pronta. Caso você queira incrementar fique a vontade.


•Objetivos

Agora, vamos dar andamento a missão criando o objetivo. Aqui, o objetivo será destruir o grupo criado.
Houveram também mudanças significativas do antigo OFP para o novo, no que diz respeito a objetivos e endmissions.
Agora, elas não criadas ou chamadas por triggers. O OFP2 criou um objeto próprio chamado de Objective, onde ali mesmo no editor de propriedades você já detalha o objetivo que será exibido no briefing e no resumo da missão.
Até agora, a única forma que consegui encontrar para interagir com elementos de Objetivo, foi através de scripts de eventos. Preste a atenção porque este é o item mais difícil do post de hoje.
No antigo OFP tinhamos que criar uma trigger e colocar a condição para determinar se o grupo havia sido morto. Agora aqui não, criamos uma função que é chamada quando o Grupo Morre, que por sua vez interage com o elemento de Objective.
Vamos primeiro criar o Objetivo. Para tal, selecione a Categoria Systems, o objeto Mission Objective e Insira o Objetivo no Mapa.



OBS: É importante lembrar que este Objetivo é visualizado dentro da missão através de Tag, portanto, para objetivos voltados a unidades móveis você tem que linkar o objetivo com o veiculo ou unidade em questão, através da propriedade Linked To (que se encontra na Palheta de Propriedades em Modify bem no final).

Apos criado o Objetivo, não esqueça de configurá-lo. Aqui estarei configurando-o para o tipo (Type) de "Primary Objective 1" e estou deixando o nome como Objetivo (poderia ser Objetivo1, Objetivo10, ou ate mesmo QualquerNome). O importante é que este nome será usado futuramente para referenciar este objetivo. Informe também sua descrição, se é visível ou não, enfim, deixei bem "bonitinho".


Agora, vem a hora de interagirmos com este objetivo, e para isso, iremos utilizar scripts.
•Introdução a Scripts

O antigo OFP não possuia um editor de texto para scripts vinculado ao editor de missões, e para trabalhar com eles tinhamos que criar arquivos externos e ficarmos pulando do editor de texto para o editor de missões do jogo via ALT + TAB. Isso agora acabou.
Agora, os scripts são criados no editor de texto interno do Mission Editor, e os scripts ficam vinculados a missão, e podem ser acessados através de um Objeto(icone) inserido no mapa, abrindo assim uma nova folha na palheta de arquivos abertos para a edição do texto.
Os Objetos de Scripts estão na Categoria Systems, na pasta Scripting.
Lá encontramos 3 tipos de objetos de script: Level Script (que pode trabalhar com funções de eventos, como iremos fazer agora ), Library Script (não trabalha com eventos, pode ser exportado e explicarei adiante a limitação) e Secondary Script (sei que não trabalha com eventos, e ainda não descobri a diferença para o Library).
Então vamos incluir um Objeto de Script na missão, selecionando o objeto Level Script e inserindo no mapa. Assim




E para acessar o editor de texto do Objeto de Script, basta apenas clicar 2 vezes sobre ele para ter:


Agora voltando aos Objetivos da missão, vamos primeiro informar que o Objetivo está em andamento.
Como eu só tenho um objetivo na missão, o andamento pode ser declarado logo no inicio da missão.
Para isso usamos um dos métodos de Eventos da missão: a função onMissionStart . Que é chamada toda a vez que a missão é iniciada.


Para facilitar, segue a sintaxe exatamente em texto:

function onMissionStart()
OFP:setObjectiveState("objective", "IN_PROGRESS");
end

Copie e cole isso no editor.

Lembra do nome do Objetivo ? ?Então, ele está aí, usado na função setObjectiveState para referenciá-lo. Já o segundo parâmetro informa que o objetivo está em progresso (IN_PROGRESS). Também pode ser "COMPLETED" ou "FAILED". Acredito que a finalidade da função setObjectiveState esteja óbvia dispensando maiores explicações.

Agora iremos definir o Evento que irá dar Objetivo como completo. Para isso, usarei um método de evento chamado onDeath.
No caso de algumas funções, como a própria OnDeath, é permitido definir diretamente o evento de morte de uma unidade apenas informando seu nome complementando o nome do método.
Por exemplo: Se você tem um soldado de nome Joao, basta apenas você declarar uma função chamada onDeath_Joao, e dessa maneira, somente quando o Joao morrer, o evento será chamado.
Acredito que trabalhar com a função onDeath normal pode até ser mais lento, porque você terá que descobrir (através de ifs) quem é o morto.
Vamos então criar a função onDeath para , sempre que alguém morre, descobrirmos qual a quantidade de unidades do grupo Echelon. Para isso usaremos a funcao getEchelonSize que retorna a quantidade de soldados VIVOS no grupo. Lembre-se que o nome que você definiu ou está no grupo tem que ser referenciado aqui. No caso o nome é "Echelon" mesmo, mas poderia ser qualquer nome.





Segue o codigo para você copiar e colar

function onDeath(victim, killer)
if OFP:getEchelonSize("Echelon")==0 then
OFP:setObjectiveState("objective", "COMPLETED");
end
end

Aqui você apenas está dizendo que caso todos os soldados do grupo Echelon estejam mortos, então o objetivo está completo.

Pronto, nossa missão está quase finalizada, restando apenas colocar o final, e definir os soldados Americanos. O final da missão na verdade pode ser chamado através de um método bem simples, chamado OFP:missionCompleted(), que poderia simplesmente ser colocado dentro da própria função onDeath, ficando assim:

function onDeath(victim, killer)
if OFP:getEchelonSize("Echelon")==0 then
OFP:setObjectiveState("objective", "COMPLETED");
OFP:missionCompleted();
end
end

Mas preferi não colocar o final ainda. Vamos deixar isso para o próximo tópico quando utilizarmos as triggers.

• Inserindo Unidades Americanas e Player

Não há segredo.
Para inserir um soldado americano, basta apenas você selecionar a categoria USMC e na pasta Soldiers. Para configurar seu soldado como player basta apenas, no Editor de Propriedades, na palheta Modify, ajustar o Control Mode para a opção Player.
Você pode também usar as regras de grupos Echelons, no entanto, em missões multiplayer, todos os players tem que estar apenas numa hierarquia de Echelons. Ou seja, caso sua missão tenha mais de 5 players, crie ou um squad com vários FireTeams.

Enfim pessoal.
Esse é o básico do Básico. Fuçem e acessem o help para saber a lista de métodos possíveis.

Espero ter ajudado.

Até a próxima.
IlluminatusBR

2 comentários:

IlluminatusBR disse...

Fireteam - 5 Soldiers
Squad - 5 Fireteams
Platoon - 4 Squads

www.moveisentalhados.com.br disse...

COMPREI RECENTEMENTE!!
É O MÁXIMO!
PARA QUEM GOSTA DO ESTILO MOW OU COH E TAMBEN HILL DANGERUS DELUXE 2 PUTA JOGO!!!

VALEU CARA TO ACOMPANHANDO TUDO FUIII

Seguidores